From 6746269b5764bfb97b7a966007340b6d6b063d16 Mon Sep 17 00:00:00 2001 From: "yue02.sun" Date: Fri, 1 Aug 2025 17:31:53 +0800 Subject: [PATCH] feat: initialize d-embodied project with basic layout and routing setup --- .gitignore | 24 + README.md | 3 + deploy/k8s/bj1/deployment.yaml | 31 + deploy/k8s/bj1/service.yaml | 16 + deploy/k8s/bj2/deployment.yaml | 31 + deploy/k8s/bj2/service.yaml | 16 + eslint.config.js | 3 + index.html | 13 + package-lock.json | 4203 +++++++++++++++++ package.json | 38 + src/App.css | 0 src/App.tsx | 93 + src/api/common.ts | 1 + src/api/data-generation/index.ts | 40 + src/api/dataset/index.ts | 32 + src/api/request.ts | 210 + src/assets/images/logo_dark.png | Bin 0 -> 5309 bytes src/assets/images/logo_light.png | Bin 0 -> 5235 bytes src/assets/images/navigate/Dataset.png | Bin 0 -> 2767 bytes .../images/navigate/cloud-disk-active.png | Bin 0 -> 5665 bytes .../images/navigate/cloud-disk-disabled.png | Bin 0 -> 2148 bytes src/assets/images/navigate/cloud-disk.png | Bin 0 -> 2402 bytes .../images/navigate/datagenerated-active.png | Bin 0 -> 13081 bytes src/assets/images/navigate/datagenerated.png | Bin 0 -> 6479 bytes src/assets/images/navigate/dataset-active.png | Bin 0 -> 6781 bytes .../images/navigate/dataset-disabled.png | Bin 0 -> 2318 bytes .../images/navigate/datetrainning-active.png | Bin 0 -> 5120 bytes .../navigate/datetrainning-disabled.png | Bin 0 -> 2453 bytes src/assets/images/navigate/datetrainning.png | Bin 0 -> 2688 bytes src/assets/styles/common.css | 85 + src/assets/styles/reset.css | 165 + src/assets/styles/theme.ts | 180 + src/components/ColLayout/index.tsx | 68 + src/components/Icon.tsx | 26 + src/components/SearchBox/index.tsx | 125 + src/i18n/index.ts | 81 + src/i18n/locales/zh-CN | 0 src/index.css | 68 + src/layout/SiderBar.tsx | 172 + src/layout/index.tsx | 66 + src/layout/menuList.ts | 53 + src/main.tsx | 4 + src/router/index.tsx | 75 + src/store/system.ts | 59 + src/types/data-generation.ts | 108 + src/types/dataset.ts | 13 + src/types/user.d.ts | 50 + src/types/vite-env.d.ts | 1 + src/utils/index.ts | 176 + .../components/CreateTaskModal.tsx | 159 + src/views/data-generation/index.tsx | 203 + src/views/dataset/components/DatasetCard.tsx | 132 + src/views/dataset/components/DatasetForm.tsx | 56 + src/views/dataset/index.tsx | 209 + src/views/welcome/index.tsx | 36 + tsconfig.app.json | 28 + tsconfig.json | 12 + tsconfig.node.json | 10 + vite.config.ts | 13 + 59 files changed, 7187 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 deploy/k8s/bj1/deployment.yaml create mode 100644 deploy/k8s/bj1/service.yaml create mode 100644 deploy/k8s/bj2/deployment.yaml create mode 100644 deploy/k8s/bj2/service.yaml create mode 100644 eslint.config.js create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 src/App.css create mode 100755 src/App.tsx create mode 100644 src/api/common.ts create mode 100644 src/api/data-generation/index.ts create mode 100644 src/api/dataset/index.ts create mode 100755 src/api/request.ts create mode 100755 src/assets/images/logo_dark.png create mode 100755 src/assets/images/logo_light.png create mode 100644 src/assets/images/navigate/Dataset.png create mode 100644 src/assets/images/navigate/cloud-disk-active.png create mode 100644 src/assets/images/navigate/cloud-disk-disabled.png create mode 100644 src/assets/images/navigate/cloud-disk.png create mode 100644 src/assets/images/navigate/datagenerated-active.png create mode 100644 src/assets/images/navigate/datagenerated.png create mode 100644 src/assets/images/navigate/dataset-active.png create mode 100644 src/assets/images/navigate/dataset-disabled.png create mode 100644 src/assets/images/navigate/datetrainning-active.png create mode 100644 src/assets/images/navigate/datetrainning-disabled.png create mode 100644 src/assets/images/navigate/datetrainning.png create mode 100755 src/assets/styles/common.css create mode 100755 src/assets/styles/reset.css create mode 100644 src/assets/styles/theme.ts create mode 100755 src/components/ColLayout/index.tsx create mode 100755 src/components/Icon.tsx create mode 100644 src/components/SearchBox/index.tsx create mode 100755 src/i18n/index.ts create mode 100644 src/i18n/locales/zh-CN create mode 100644 src/index.css create mode 100755 src/layout/SiderBar.tsx create mode 100755 src/layout/index.tsx create mode 100755 src/layout/menuList.ts create mode 100755 src/main.tsx create mode 100644 src/router/index.tsx create mode 100755 src/store/system.ts create mode 100644 src/types/data-generation.ts create mode 100644 src/types/dataset.ts create mode 100755 src/types/user.d.ts create mode 100644 src/types/vite-env.d.ts create mode 100755 src/utils/index.ts create mode 100644 src/views/data-generation/components/CreateTaskModal.tsx create mode 100644 src/views/data-generation/index.tsx create mode 100644 src/views/dataset/components/DatasetCard.tsx create mode 100644 src/views/dataset/components/DatasetForm.tsx create mode 100644 src/views/dataset/index.tsx create mode 100644 src/views/welcome/index.tsx create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..77d9388 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +### api参数说明 +1. 所有的分页查询列表请求,request中固定包含current_page和page_size参数 +2. 所有的请求,resposne body的格式都为{ status: number, message: string, data: any } \ No newline at end of file diff --git a/deploy/k8s/bj1/deployment.yaml b/deploy/k8s/bj1/deployment.yaml new file mode 100644 index 0000000..4b9d80b --- /dev/null +++ b/deploy/k8s/bj1/deployment.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: d-embodied + namespace: bj1-dcloud + labels: + app.kubernetes.io/name: d-embodied +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: d-embodied + template: + metadata: + labels: + app.kubernetes.io/name: d-embodied + spec: + volumes: + - name: log-dir + emptyDir: {} + containers: + - name: d-embodied + image: >- + ccr-29eug8s3-vpc.cnc.bj.baidubce.com/dcloud/d-embodied:latest + ports: + - containerPort: 80 + volumeMounts: + - name: log-dir + mountPath: /data/log + imagePullSecrets: + - name: ccr diff --git a/deploy/k8s/bj1/service.yaml b/deploy/k8s/bj1/service.yaml new file mode 100644 index 0000000..a381aa8 --- /dev/null +++ b/deploy/k8s/bj1/service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: d-embodied-svc + namespace: bj1-dcloud + labels: + app.kubernetes.io/name: d-embodied-svc +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 80 + selector: + app.kubernetes.io/name: d-embodied + type: ClusterIP + diff --git a/deploy/k8s/bj2/deployment.yaml b/deploy/k8s/bj2/deployment.yaml new file mode 100644 index 0000000..3c8479f --- /dev/null +++ b/deploy/k8s/bj2/deployment.yaml @@ -0,0 +1,31 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: d-embodied + namespace: bj2-dcloud + labels: + app.kubernetes.io/name: d-embodied +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: d-embodied + template: + metadata: + labels: + app.kubernetes.io/name: d-embodied + spec: + volumes: + - name: log-dir + emptyDir: {} + containers: + - name: d-embodied + image: >- + ccr-29eug8s3-vpc.cnc.bj.baidubce.com/dcloud/d-embodied:latest + ports: + - containerPort: 80 + volumeMounts: + - name: log-dir + mountPath: /data/log + imagePullSecrets: + - name: ccr diff --git a/deploy/k8s/bj2/service.yaml b/deploy/k8s/bj2/service.yaml new file mode 100644 index 0000000..b84578d --- /dev/null +++ b/deploy/k8s/bj2/service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: d-embodied-svc + namespace: bj2-dcloud + labels: + app.kubernetes.io/name: d-embodied-svc +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 80 + selector: + app.kubernetes.io/name: d-embodied + type: ClusterIP + diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..e601fb7 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,3 @@ +import antfu from "@antfu/eslint-config"; + +export default antfu({ react: true }); diff --git a/index.html b/index.html new file mode 100644 index 0000000..e4b78ea --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite + React + TS + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d93824b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4203 @@ +{ + "name": "d-embodied", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "d-embodied", + "version": "0.0.0", + "dependencies": { + "antd": "^5.26.5", + "antd-style": "^3.7.1", + "axios": "^1.11.0", + "i18next": "^25.3.2", + "i18next-browser-languagedetector": "^8.2.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-i18next": "^15.6.0", + "react-router-dom": "^7.6.3", + "zustand": "^5.0.6" + }, + "devDependencies": { + "@eslint/js": "^9.30.1", + "@types/node": "^24.0.14", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "vite": "^7.0.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ant-design/colors": { + "version": "7.2.1", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-7.2.1.tgz", + "integrity": "sha512-lCHDcEzieu4GA3n8ELeZ5VQ8pKQAWcGGLRTQ50aQM2iqPpq2evTxER84jfdPvsPAtEcZ7m44NI45edFMo8oOYQ==", + "dependencies": { + "@ant-design/fast-color": "^2.0.6" + } + }, + "node_modules/@ant-design/cssinjs": { + "version": "1.23.0", + "resolved": "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.23.0.tgz", + "integrity": "sha512-7GAg9bD/iC9ikWatU9ym+P9ugJhi/WbsTWzcKN6T4gU0aehsprtke1UAaaSxxkjjmkJb3llet/rbUSLPgwlY4w==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "classnames": "^2.3.1", + "csstype": "^3.1.3", + "rc-util": "^5.35.0", + "stylis": "^4.3.4" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/cssinjs-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.3.tgz", + "integrity": "sha512-nOoQMLW1l+xR1Co8NFVYiP8pZp3VjIIzqV6D6ShYF2ljtdwWJn5WSsH+7kvCktXL/yhEtWURKOfH5Xz/gzlwsg==", + "dependencies": { + "@ant-design/cssinjs": "^1.21.0", + "@babel/runtime": "^7.23.2", + "rc-util": "^5.38.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@ant-design/fast-color": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/@ant-design/fast-color/-/fast-color-2.0.6.tgz", + "integrity": "sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@ant-design/icons": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-5.6.1.tgz", + "integrity": "sha512-0/xS39c91WjPAZOWsvi1//zjx6kAp4kxWwctR6kuU6p133w8RU0D2dSCvZC19uQyharg/sAvYxGYWl01BbZZfg==", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.4.0", + "@babel/runtime": "^7.24.8", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==" + }, + "node_modules/@ant-design/react-slick": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@ant-design/react-slick/-/react-slick-1.1.2.tgz", + "integrity": "sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==", + "dependencies": { + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "resize-observer-polyfill": "^1.5.1", + "throttle-debounce": "^5.0.0" + }, + "peerDependencies": { + "react": ">=16.9.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "dependencies": { + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "dev": true, + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.1", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmmirror.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.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.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@emotion/babel-plugin/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmmirror.com/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "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" + } + }, + "node_modules/@emotion/cache/node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "node_modules/@emotion/css": { + "version": "11.13.5", + "resolved": "https://registry.npmmirror.com/@emotion/css/-/css-11.13.5.tgz", + "integrity": "sha512-wQdD0Xhkn3Qy2VNcIzbLP9MR8TafI0MJb7BEAXKp+w4+XqErksWR4OXomuDzPsN4InLdGhVe6EYcn2ZIUCpB8w==", + "dependencies": { + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmmirror.com/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "dependencies": { + "@babel/runtime": "^7.18.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", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/serialize/node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, + "node_modules/@emotion/serialize/node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", + "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmmirror.com/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.31.0", + "resolved": "https://registry.npmmirror.com/@eslint/js/-/js-9.31.0.tgz", + "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/@eslint/plugin-kit/-/plugin-kit-0.3.3.tgz", + "integrity": "sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmmirror.com/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmmirror.com/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmmirror.com/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rc-component/async-validator": { + "version": "5.0.4", + "resolved": "https://registry.npmmirror.com/@rc-component/async-validator/-/async-validator-5.0.4.tgz", + "integrity": "sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==", + "dependencies": { + "@babel/runtime": "^7.24.4" + }, + "engines": { + "node": ">=14.x" + } + }, + "node_modules/@rc-component/color-picker": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-2.0.1.tgz", + "integrity": "sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==", + "dependencies": { + "@ant-design/fast-color": "^2.0.6", + "@babel/runtime": "^7.23.6", + "classnames": "^2.2.6", + "rc-util": "^5.38.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/context": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@rc-component/context/-/context-1.4.0.tgz", + "integrity": "sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mini-decimal": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz", + "integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==", + "dependencies": { + "@babel/runtime": "^7.18.0" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@rc-component/mutate-observer": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz", + "integrity": "sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/qrcode": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/@rc-component/qrcode/-/qrcode-1.0.0.tgz", + "integrity": "sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==", + "dependencies": { + "@babel/runtime": "^7.24.7", + "classnames": "^2.3.2", + "rc-util": "^5.38.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tour": { + "version": "1.15.1", + "resolved": "https://registry.npmmirror.com/@rc-component/tour/-/tour-1.15.1.tgz", + "integrity": "sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "@rc-component/portal": "^1.0.0-9", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/trigger": { + "version": "2.2.7", + "resolved": "https://registry.npmmirror.com/@rc-component/trigger/-/trigger-2.2.7.tgz", + "integrity": "sha512-Qggj4Z0AA2i5dJhzlfFSmg1Qrziu8dsdHOihROL5Kl18seO2Eh/ZaTYt2c8a/CyGaTChnFry7BEYew1+/fhSbA==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@rc-component/portal": "^1.1.0", + "classnames": "^2.3.2", + "rc-motion": "^2.0.0", + "rc-resize-observer": "^1.3.1", + "rc-util": "^5.44.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", + "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "dev": true + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmmirror.com/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmmirror.com/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "24.0.14", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-24.0.14.tgz", + "integrity": "sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==", + "dev": true, + "dependencies": { + "undici-types": "~7.8.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/react": { + "version": "19.1.8", + "resolved": "https://registry.npmmirror.com/@types/react/-/react-19.1.8.tgz", + "integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==", + "devOptional": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.1.6", + "resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-19.1.6.tgz", + "integrity": "sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==", + "dev": true, + "peerDependencies": { + "@types/react": "^19.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.37.0.tgz", + "integrity": "sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.37.0", + "@typescript-eslint/type-utils": "8.37.0", + "@typescript-eslint/utils": "8.37.0", + "@typescript-eslint/visitor-keys": "8.37.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.37.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-8.37.0.tgz", + "integrity": "sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.37.0", + "@typescript-eslint/types": "8.37.0", + "@typescript-eslint/typescript-estree": "8.37.0", + "@typescript-eslint/visitor-keys": "8.37.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/project-service/-/project-service-8.37.0.tgz", + "integrity": "sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.37.0", + "@typescript-eslint/types": "^8.37.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-8.37.0.tgz", + "integrity": "sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.37.0", + "@typescript-eslint/visitor-keys": "8.37.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.37.0.tgz", + "integrity": "sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-8.37.0.tgz", + "integrity": "sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.37.0", + "@typescript-eslint/typescript-estree": "8.37.0", + "@typescript-eslint/utils": "8.37.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/types/-/types-8.37.0.tgz", + "integrity": "sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.37.0.tgz", + "integrity": "sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.37.0", + "@typescript-eslint/tsconfig-utils": "8.37.0", + "@typescript-eslint/types": "8.37.0", + "@typescript-eslint/visitor-keys": "8.37.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-8.37.0.tgz", + "integrity": "sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.37.0", + "@typescript-eslint/types": "8.37.0", + "@typescript-eslint/typescript-estree": "8.37.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.37.0.tgz", + "integrity": "sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.37.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-react/-/plugin-react-4.6.0.tgz", + "integrity": "sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.27.4", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.19", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antd": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/antd/-/antd-5.26.5.tgz", + "integrity": "sha512-HB7Cr0tPZMMeAyDDH8KZU0aP8/uO51oasmflJhDBzaRRZmLT8Pyjtt8qS22Sc839glm8gpKQcaG0mln66Gt9Fg==", + "dependencies": { + "@ant-design/colors": "^7.2.1", + "@ant-design/cssinjs": "^1.23.0", + "@ant-design/cssinjs-utils": "^1.1.3", + "@ant-design/fast-color": "^2.0.6", + "@ant-design/icons": "^5.6.1", + "@ant-design/react-slick": "~1.1.2", + "@babel/runtime": "^7.26.0", + "@rc-component/color-picker": "~2.0.1", + "@rc-component/mutate-observer": "^1.1.0", + "@rc-component/qrcode": "~1.0.0", + "@rc-component/tour": "~1.15.1", + "@rc-component/trigger": "^2.2.7", + "classnames": "^2.5.1", + "copy-to-clipboard": "^3.3.3", + "dayjs": "^1.11.11", + "rc-cascader": "~3.34.0", + "rc-checkbox": "~3.5.0", + "rc-collapse": "~3.9.0", + "rc-dialog": "~9.6.0", + "rc-drawer": "~7.3.0", + "rc-dropdown": "~4.2.1", + "rc-field-form": "~2.7.0", + "rc-image": "~7.12.0", + "rc-input": "~1.8.0", + "rc-input-number": "~9.5.0", + "rc-mentions": "~2.20.0", + "rc-menu": "~9.16.1", + "rc-motion": "^2.9.5", + "rc-notification": "~5.6.4", + "rc-pagination": "~5.1.0", + "rc-picker": "~4.11.3", + "rc-progress": "~4.0.0", + "rc-rate": "~2.13.1", + "rc-resize-observer": "^1.4.3", + "rc-segmented": "~2.7.0", + "rc-select": "~14.16.8", + "rc-slider": "~11.1.8", + "rc-steps": "~6.0.1", + "rc-switch": "~4.1.0", + "rc-table": "~7.51.1", + "rc-tabs": "~15.6.1", + "rc-textarea": "~1.10.0", + "rc-tooltip": "~6.4.0", + "rc-tree": "~5.13.1", + "rc-tree-select": "~5.27.0", + "rc-upload": "~4.9.2", + "rc-util": "^5.44.4", + "scroll-into-view-if-needed": "^3.1.0", + "throttle-debounce": "^5.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/antd-style": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/antd-style/-/antd-style-3.7.1.tgz", + "integrity": "sha512-CQOfddVp4aOvBfCepa+Kj2e7ap+2XBINg1Kn2osdE3oQvrD7KJu/K0sfnLcFLkgCJygbxmuazYdWLKb+drPDYA==", + "dependencies": { + "@ant-design/cssinjs": "^1.21.1", + "@babel/runtime": "^7.24.1", + "@emotion/cache": "^11.11.0", + "@emotion/css": "^11.11.2", + "@emotion/react": "^11.11.4", + "@emotion/serialize": "^1.1.3", + "@emotion/utils": "^1.2.1", + "use-merge-value": "^1.2.0" + }, + "peerDependencies": { + "antd": ">=5.8.1", + "react": ">=18" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001727", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz", + "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "engines": { + "node": ">=18" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.185", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.185.tgz", + "integrity": "sha512-dYOZfUk57hSMPePoIQ1fZWl1Fkj+OshhEVuPacNKWzC1efe56OsHY3l/jCfiAgIICOU3VgOIdoq7ahg7r7n6MQ==", + "dev": true + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.6.tgz", + "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.6", + "@esbuild/android-arm": "0.25.6", + "@esbuild/android-arm64": "0.25.6", + "@esbuild/android-x64": "0.25.6", + "@esbuild/darwin-arm64": "0.25.6", + "@esbuild/darwin-x64": "0.25.6", + "@esbuild/freebsd-arm64": "0.25.6", + "@esbuild/freebsd-x64": "0.25.6", + "@esbuild/linux-arm": "0.25.6", + "@esbuild/linux-arm64": "0.25.6", + "@esbuild/linux-ia32": "0.25.6", + "@esbuild/linux-loong64": "0.25.6", + "@esbuild/linux-mips64el": "0.25.6", + "@esbuild/linux-ppc64": "0.25.6", + "@esbuild/linux-riscv64": "0.25.6", + "@esbuild/linux-s390x": "0.25.6", + "@esbuild/linux-x64": "0.25.6", + "@esbuild/netbsd-arm64": "0.25.6", + "@esbuild/netbsd-x64": "0.25.6", + "@esbuild/openbsd-arm64": "0.25.6", + "@esbuild/openbsd-x64": "0.25.6", + "@esbuild/openharmony-arm64": "0.25.6", + "@esbuild/sunos-x64": "0.25.6", + "@esbuild/win32-arm64": "0.25.6", + "@esbuild/win32-ia32": "0.25.6", + "@esbuild/win32-x64": "0.25.6" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.31.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-9.31.0.tgz", + "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.31.0", + "@eslint/plugin-kit": "^0.3.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.20", + "resolved": "https://registry.npmmirror.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz", + "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==", + "dev": true, + "peerDependencies": { + "eslint": ">=8.40" + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmmirror.com/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/i18next": { + "version": "25.3.2", + "resolved": "https://registry.npmmirror.com/i18next/-/i18next-25.3.2.tgz", + "integrity": "sha512-JSnbZDxRVbphc5jiptxr3o2zocy5dEqpVm9qCGdJwRNO+9saUJS0/u4LnM/13C23fUEWxAylPqKU/NpMV/IjqA==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.27.6" + }, + "peerDependencies": { + "typescript": "^5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/i18next-browser-languagedetector": { + "version": "8.2.0", + "resolved": "https://registry.npmmirror.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.2.0.tgz", + "integrity": "sha512-P+3zEKLnOF0qmiesW383vsLdtQVyKtCNA9cjSoKCppTKPQVfKd2W8hbVo5ZhNJKDqeM7BOcvNoKJOjpHh4Js9g==", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/rc-cascader": { + "version": "3.34.0", + "resolved": "https://registry.npmmirror.com/rc-cascader/-/rc-cascader-3.34.0.tgz", + "integrity": "sha512-KpXypcvju9ptjW9FaN2NFcA2QH9E9LHKq169Y0eWtH4e/wHQ5Wh5qZakAgvb8EKZ736WZ3B0zLLOBsrsja5Dag==", + "dependencies": { + "@babel/runtime": "^7.25.7", + "classnames": "^2.3.1", + "rc-select": "~14.16.2", + "rc-tree": "~5.13.0", + "rc-util": "^5.43.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-checkbox": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/rc-checkbox/-/rc-checkbox-3.5.0.tgz", + "integrity": "sha512-aOAQc3E98HteIIsSqm6Xk2FPKIER6+5vyEFMZfo73TqM+VVAIqOkHoPjgKLqSNtVLWScoaM7vY2ZrGEheI79yg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.3.2", + "rc-util": "^5.25.2" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-collapse": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/rc-collapse/-/rc-collapse-3.9.0.tgz", + "integrity": "sha512-swDdz4QZ4dFTo4RAUMLL50qP0EY62N2kvmk2We5xYdRwcRn8WcYtuetCJpwpaCbUfUt5+huLpVxhvmnK+PHrkA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.3.4", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dialog": { + "version": "9.6.0", + "resolved": "https://registry.npmmirror.com/rc-dialog/-/rc-dialog-9.6.0.tgz", + "integrity": "sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.0.0-8", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.21.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-drawer": { + "version": "7.3.0", + "resolved": "https://registry.npmmirror.com/rc-drawer/-/rc-drawer-7.3.0.tgz", + "integrity": "sha512-DX6CIgiBWNpJIMGFO8BAISFkxiuKitoizooj4BDyee8/SnBn0zwO2FHrNDpqqepj0E/TFTDpmEBCyFuTgC7MOg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@rc-component/portal": "^1.1.1", + "classnames": "^2.2.6", + "rc-motion": "^2.6.1", + "rc-util": "^5.38.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dropdown": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/rc-dropdown/-/rc-dropdown-4.2.1.tgz", + "integrity": "sha512-YDAlXsPv3I1n42dv1JpdM7wJ+gSUBfeyPK59ZpBD9jQhK9jVuxpjj3NmWQHOBceA1zEPVX84T2wbdb2SD0UjmA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.6", + "rc-util": "^5.44.1" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/rc-field-form": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/rc-field-form/-/rc-field-form-2.7.0.tgz", + "integrity": "sha512-hgKsCay2taxzVnBPZl+1n4ZondsV78G++XVsMIJCAoioMjlMQR9YwAp7JZDIECzIu2Z66R+f4SFIRrO2DjDNAA==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "@rc-component/async-validator": "^5.0.3", + "rc-util": "^5.32.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-image": { + "version": "7.12.0", + "resolved": "https://registry.npmmirror.com/rc-image/-/rc-image-7.12.0.tgz", + "integrity": "sha512-cZ3HTyyckPnNnUb9/DRqduqzLfrQRyi+CdHjdqgsyDpI3Ln5UX1kXnAhPBSJj9pVRzwRFgqkN7p9b6HBDjmu/Q==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/portal": "^1.0.2", + "classnames": "^2.2.6", + "rc-dialog": "~9.6.0", + "rc-motion": "^2.6.2", + "rc-util": "^5.34.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-input": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/rc-input/-/rc-input-1.8.0.tgz", + "integrity": "sha512-KXvaTbX+7ha8a/k+eg6SYRVERK0NddX8QX7a7AnRvUa/rEH0CNMlpcBzBkhI0wp2C8C4HlMoYl8TImSN+fuHKA==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.18.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-input-number": { + "version": "9.5.0", + "resolved": "https://registry.npmmirror.com/rc-input-number/-/rc-input-number-9.5.0.tgz", + "integrity": "sha512-bKaEvB5tHebUURAEXw35LDcnRZLq3x1k7GxfAqBMzmpHkDGzjAtnUL8y4y5N15rIFIg5IJgwr211jInl3cipag==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/mini-decimal": "^1.0.1", + "classnames": "^2.2.5", + "rc-input": "~1.8.0", + "rc-util": "^5.40.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-mentions": { + "version": "2.20.0", + "resolved": "https://registry.npmmirror.com/rc-mentions/-/rc-mentions-2.20.0.tgz", + "integrity": "sha512-w8HCMZEh3f0nR8ZEd466ATqmXFCMGMN5UFCzEUL0bM/nGw/wOS2GgRzKBcm19K++jDyuWCOJOdgcKGXU3fXfbQ==", + "dependencies": { + "@babel/runtime": "^7.22.5", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.6", + "rc-input": "~1.8.0", + "rc-menu": "~9.16.0", + "rc-textarea": "~1.10.0", + "rc-util": "^5.34.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-menu": { + "version": "9.16.1", + "resolved": "https://registry.npmmirror.com/rc-menu/-/rc-menu-9.16.1.tgz", + "integrity": "sha512-ghHx6/6Dvp+fw8CJhDUHFHDJ84hJE3BXNCzSgLdmNiFErWSOaZNsihDAsKq9ByTALo/xkNIwtDFGIl6r+RPXBg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^2.0.0", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.3.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-motion": { + "version": "2.9.5", + "resolved": "https://registry.npmmirror.com/rc-motion/-/rc-motion-2.9.5.tgz", + "integrity": "sha512-w+XTUrfh7ArbYEd2582uDrEhmBHwK1ZENJiSJVb7uRxdE7qJSYjbO2eksRXmndqyKqKoYPc9ClpPh5242mV1vA==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.44.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-notification": { + "version": "5.6.4", + "resolved": "https://registry.npmmirror.com/rc-notification/-/rc-notification-5.6.4.tgz", + "integrity": "sha512-KcS4O6B4qzM3KH7lkwOB7ooLPZ4b6J+VMmQgT51VZCeEcmghdeR4IrMcFq0LG+RPdnbe/ArT086tGM8Snimgiw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.9.0", + "rc-util": "^5.20.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-overflow": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rc-overflow/-/rc-overflow-1.4.1.tgz", + "integrity": "sha512-3MoPQQPV1uKyOMVNd6SZfONi+f3st0r8PksexIdBTeIYbMX0Jr+k7pHEDvsXtR4BpCv90/Pv2MovVNhktKrwvw==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.37.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-pagination": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/rc-pagination/-/rc-pagination-5.1.0.tgz", + "integrity": "sha512-8416Yip/+eclTFdHXLKTxZvn70duYVGTvUUWbckCCZoIl3jagqke3GLsFrMs0bsQBikiYpZLD9206Ej4SOdOXQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.3.2", + "rc-util": "^5.38.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-picker": { + "version": "4.11.3", + "resolved": "https://registry.npmmirror.com/rc-picker/-/rc-picker-4.11.3.tgz", + "integrity": "sha512-MJ5teb7FlNE0NFHTncxXQ62Y5lytq6sh5nUw0iH8OkHL/TjARSEvSHpr940pWgjGANpjCwyMdvsEV55l5tYNSg==", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.1", + "rc-overflow": "^1.3.2", + "rc-resize-observer": "^1.4.0", + "rc-util": "^5.43.0" + }, + "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 + } + } + }, + "node_modules/rc-progress": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/rc-progress/-/rc-progress-4.0.0.tgz", + "integrity": "sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-util": "^5.16.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-rate": { + "version": "2.13.1", + "resolved": "https://registry.npmmirror.com/rc-rate/-/rc-rate-2.13.1.tgz", + "integrity": "sha512-QUhQ9ivQ8Gy7mtMZPAjLbxBt5y9GRp65VcUyGUMF3N3fhiftivPHdpuDIaWIMOTEprAjZPC08bls1dQB+I1F2Q==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-resize-observer": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/rc-resize-observer/-/rc-resize-observer-1.4.3.tgz", + "integrity": "sha512-YZLjUbyIWox8E9i9C3Tm7ia+W7euPItNWSPX5sCcQTYbnwDb5uNpnLHQCG1f22oZWUhLw4Mv2tFmeWe68CDQRQ==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "classnames": "^2.2.1", + "rc-util": "^5.44.1", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-segmented": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/rc-segmented/-/rc-segmented-2.7.0.tgz", + "integrity": "sha512-liijAjXz+KnTRVnxxXG2sYDGd6iLL7VpGGdR8gwoxAXy2KglviKCxLWZdjKYJzYzGSUwKDSTdYk8brj54Bn5BA==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-motion": "^2.4.4", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-select": { + "version": "14.16.8", + "resolved": "https://registry.npmmirror.com/rc-select/-/rc-select-14.16.8.tgz", + "integrity": "sha512-NOV5BZa1wZrsdkKaiK7LHRuo5ZjZYMDxPP6/1+09+FB4KoNi8jcG1ZqLE3AVCxEsYMBe65OBx71wFoHRTP3LRg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^2.1.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-overflow": "^1.3.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-slider": { + "version": "11.1.8", + "resolved": "https://registry.npmmirror.com/rc-slider/-/rc-slider-11.1.8.tgz", + "integrity": "sha512-2gg/72YFSpKP+Ja5AjC5DPL1YnV8DEITDQrcc1eASrUYjl0esptaBVJBh5nLTXCCp15eD8EuGjwezVGSHhs9tQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-steps": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/rc-steps/-/rc-steps-6.0.1.tgz", + "integrity": "sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==", + "dependencies": { + "@babel/runtime": "^7.16.7", + "classnames": "^2.2.3", + "rc-util": "^5.16.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-switch": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/rc-switch/-/rc-switch-4.1.0.tgz", + "integrity": "sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "classnames": "^2.2.1", + "rc-util": "^5.30.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-table": { + "version": "7.51.1", + "resolved": "https://registry.npmmirror.com/rc-table/-/rc-table-7.51.1.tgz", + "integrity": "sha512-5iq15mTHhvC42TlBLRCoCBLoCmGlbRZAlyF21FonFnS/DIC8DeRqnmdyVREwt2CFbPceM0zSNdEeVfiGaqYsKw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/context": "^1.4.0", + "classnames": "^2.2.5", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.44.3", + "rc-virtual-list": "^3.14.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tabs": { + "version": "15.6.1", + "resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.6.1.tgz", + "integrity": "sha512-/HzDV1VqOsUWyuC0c6AkxVYFjvx9+rFPKZ32ejxX0Uc7QCzcEjTA9/xMgv4HemPKwzBNX8KhGVbbumDjnj92aA==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "2.x", + "rc-dropdown": "~4.2.0", + "rc-menu": "~9.16.0", + "rc-motion": "^2.6.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.34.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-textarea": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/rc-textarea/-/rc-textarea-1.10.0.tgz", + "integrity": "sha512-ai9IkanNuyBS4x6sOL8qu/Ld40e6cEs6pgk93R+XLYg0mDSjNBGey6/ZpDs5+gNLD7urQ14po3V6Ck2dJLt9SA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-input": "~1.8.0", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tooltip": { + "version": "6.4.0", + "resolved": "https://registry.npmmirror.com/rc-tooltip/-/rc-tooltip-6.4.0.tgz", + "integrity": "sha512-kqyivim5cp8I5RkHmpsp1Nn/Wk+1oeloMv9c7LXNgDxUpGm+RbXJGL+OPvDlcRnx9DBeOe4wyOIl4OKUERyH1g==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.3.1", + "rc-util": "^5.44.3" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tree": { + "version": "5.13.1", + "resolved": "https://registry.npmmirror.com/rc-tree/-/rc-tree-5.13.1.tgz", + "integrity": "sha512-FNhIefhftobCdUJshO7M8uZTA9F4OPGVXqGfZkkD/5soDeOhwO06T/aKTrg0WD8gRg/pyfq+ql3aMymLHCTC4A==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-tree-select": { + "version": "5.27.0", + "resolved": "https://registry.npmmirror.com/rc-tree-select/-/rc-tree-select-5.27.0.tgz", + "integrity": "sha512-2qTBTzwIT7LRI1o7zLyrCzmo5tQanmyGbSaGTIf7sYimCklAToVVfpMC6OAldSKolcnjorBYPNSKQqJmN3TCww==", + "dependencies": { + "@babel/runtime": "^7.25.7", + "classnames": "2.x", + "rc-select": "~14.16.2", + "rc-tree": "~5.13.0", + "rc-util": "^5.43.0" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-upload": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/rc-upload/-/rc-upload-4.9.2.tgz", + "integrity": "sha512-nHx+9rbd1FKMiMRYsqQ3NkXUv7COHPBo3X1Obwq9SWS6/diF/A0aJ5OHubvwUAIDs+4RMleljV0pcrNUc823GQ==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "classnames": "^2.2.5", + "rc-util": "^5.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util": { + "version": "5.44.4", + "resolved": "https://registry.npmmirror.com/rc-util/-/rc-util-5.44.4.tgz", + "integrity": "sha512-resueRJzmHG9Q6rI/DfK6Kdv9/Lfls05vzMs1Sk3M2P+3cJa+MakaZyWY8IPfehVuhPJFKrIY1IK4GqbiaiY5w==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-virtual-list": { + "version": "3.19.1", + "resolved": "https://registry.npmmirror.com/rc-virtual-list/-/rc-virtual-list-3.19.1.tgz", + "integrity": "sha512-DCapO2oyPqmooGhxBuXHM4lFuX+sshQwWqqkuyFA+4rShLe//+GEPVwiDgO+jKtKHtbeYwZoNvetwfHdOf+iUQ==", + "dependencies": { + "@babel/runtime": "^7.20.0", + "classnames": "^2.2.6", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/react": { + "version": "19.1.0", + "resolved": "https://registry.npmmirror.com/react/-/react-19.1.0.tgz", + "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.1.0", + "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-19.1.0.tgz", + "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", + "dependencies": { + "scheduler": "^0.26.0" + }, + "peerDependencies": { + "react": "^19.1.0" + } + }, + "node_modules/react-i18next": { + "version": "15.6.0", + "resolved": "https://registry.npmmirror.com/react-i18next/-/react-i18next-15.6.0.tgz", + "integrity": "sha512-W135dB0rDfiFmbMipC17nOhGdttO5mzH8BivY+2ybsQBbXvxWIwl3cmeH3T9d+YPBSJu/ouyJKFJTtkK7rJofw==", + "dependencies": { + "@babel/runtime": "^7.27.6", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0", + "typescript": "^5" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmmirror.com/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "7.6.3", + "resolved": "https://registry.npmmirror.com/react-router/-/react-router-7.6.3.tgz", + "integrity": "sha512-zf45LZp5skDC6I3jDLXQUu0u26jtuP4lEGbc7BbdyxenBN1vJSTA18czM2D+h5qyMBuMrD+9uB+mU37HIoKGRA==", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.6.3", + "resolved": "https://registry.npmmirror.com/react-router-dom/-/react-router-dom-7.6.3.tgz", + "integrity": "sha512-DiWJm9qdUAmiJrVWaeJdu4TKu13+iB/8IEi0EW/XgaHCjW/vWGrwzup0GVvaMteuZjKnh5bEvJP/K0MDnzawHw==", + "dependencies": { + "react-router": "7.6.3" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.26.0", + "resolved": "https://registry.npmmirror.com/scheduler/-/scheduler-0.26.0.tgz", + "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==" + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.37.0", + "resolved": "https://registry.npmmirror.com/typescript-eslint/-/typescript-eslint-8.37.0.tgz", + "integrity": "sha512-TnbEjzkE9EmcO0Q2zM+GE8NQLItNAJpMmED1BdgoBMYNdqMhzlbqfdSwiRlAzEK2pA9UzVW0gzaaIzXWg2BjfA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.37.0", + "@typescript-eslint/parser": "8.37.0", + "@typescript-eslint/typescript-estree": "8.37.0", + "@typescript-eslint/utils": "8.37.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/undici-types": { + "version": "7.8.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-merge-value": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/use-merge-value/-/use-merge-value-1.2.0.tgz", + "integrity": "sha512-DXgG0kkgJN45TcyoXL49vJnn55LehnrmoHc7MbKi+QDBvr8dsesqws8UlyIWGHMR+JXgxc1nvY+jDGMlycsUcw==", + "peerDependencies": { + "react": ">= 16.x" + } + }, + "node_modules/vite": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/vite/-/vite-7.0.4.tgz", + "integrity": "sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==", + "dev": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.2", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zustand": { + "version": "5.0.6", + "resolved": "https://registry.npmmirror.com/zustand/-/zustand-5.0.6.tgz", + "integrity": "sha512-ihAqNeUVhe0MAD+X8M5UzqyZ9k3FFZLBTtqo6JLPwV53cbRB/mJwBI0PxcIgqhBBHlEs8G45OTDTMq3gNcLq3A==", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..70367c8 --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "d-embodied", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --host", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "antd": "^5.26.5", + "antd-style": "^3.7.1", + "axios": "^1.11.0", + "i18next": "^25.3.2", + "i18next-browser-languagedetector": "^8.2.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-i18next": "^15.6.0", + "react-router-dom": "^7.6.3", + "zustand": "^5.0.6" + }, + "devDependencies": { + "@eslint/js": "^9.30.1", + "@types/node": "^24.0.14", + "@types/react": "^19.1.8", + "@types/react-dom": "^19.1.6", + "@vitejs/plugin-react": "^4.6.0", + "eslint": "^9.30.1", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.20", + "globals": "^16.3.0", + "typescript": "~5.8.3", + "typescript-eslint": "^8.35.1", + "vite": "^7.0.4" + } +} diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..e69de29 diff --git a/src/App.tsx b/src/App.tsx new file mode 100755 index 0000000..921cf31 --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,93 @@ +/* + * @Author: yue02.sun yue02.sun@d-robotics.cc + * @Date: 2025-02-21 15:45:48 + * @LastEditors: yue02.sun yue02.sun@d-robotics.cc + * @LastEditTime: 2025-03-28 16:58:20 + * @FilePath: /trainer/projects/d-cms/src/App.tsx + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +// 配置路由 +import { RouterProvider, createBrowserRouter } from "react-router-dom"; +import routes from "./router"; +// 配置antd +import { App as AntApp, Button, Flex } from "antd"; +import { ThemeProvider } from "antd-style"; +import { getTheme, getCustomToken } from "./assets/styles/theme"; +// 覆盖默认样式 +import "@/assets/styles/reset.css"; +// 引用通用样式 +import "@/assets/styles/common.css"; +import { useEffect, useState } from "react"; +// 导入国际化配置 +import "./i18n"; + +// import { user } from "@/apis/authorityApi/userApi"; +import { FrownOutlined } from "@ant-design/icons"; +// import { setRedirectUrl } from "@trainer/utils"; +// import { systemStore } from "@/store/system.ts"; +type UserAudit = "waiting" | "error" | "success"; + +function App() { + // const setUserInfo = systemStore((state) => state.setUserInfo); + // const [userAudit, setUserAudit] = useState("waiting"); + // const init = async () => { + // try { + // // 初始化用户信息 + // const userInfoRep = await user.getUserInfo(); + // if (userInfoRep.status !== 0 || !userInfoRep.data) { + // // data为null说明用户不存在 + // setUserAudit("error"); + // return; + // } + // setUserInfo(userInfoRep.data); + // setUserAudit("success"); + // } catch (err) { + // setUserAudit("error"); + // } + // }; + // useEffect(() => { + // init(); + // }, []); + return ( + + {/* {userAudit === "success" && ( + + + + )} */} + {/* {userAudit === "error" && ( + + + 您不具备该系统的权限 + + + )} */} + + + + + ); +} +export default App; diff --git a/src/api/common.ts b/src/api/common.ts new file mode 100644 index 0000000..efe2cfe --- /dev/null +++ b/src/api/common.ts @@ -0,0 +1 @@ +export const ServerUrl = "/embolabApi/v1" \ No newline at end of file diff --git a/src/api/data-generation/index.ts b/src/api/data-generation/index.ts new file mode 100644 index 0000000..2cd9c35 --- /dev/null +++ b/src/api/data-generation/index.ts @@ -0,0 +1,40 @@ +import { CameraType } from "@/types/data-generation"; +import { ServerUrl } from "../common"; +import request from "../request"; + +const baseUrl = `${ServerUrl}/data-generation-tasks`; + +export const dataGenerationApi = { + getTaskList: (params: { + current_page: number; + page_size: number; + search_keyword?: string; + }) => { + return request.post(`${baseUrl}/list`, params); + }, + createTask: (params: { + task_name: string; + simulator: string; + task_type: string; + camera: CameraType; + trajectory_count: number; + dataset_id: number; + }) => { + return request.post(`${baseUrl}`, params); + }, + stopTask: (params: { + task_id: number; + }) => { + return request.post(`${baseUrl}/${params.task_id}/stop`); + }, + deleteTask: (params: { + task_id: number; + }) => { + return request.delete(`${baseUrl}/${params.task_id}`); + }, + getLogs: (params: { + task_id: number; + }) => { + return request.get(`${baseUrl}/${params.task_id}/logs`); + }, +}; diff --git a/src/api/dataset/index.ts b/src/api/dataset/index.ts new file mode 100644 index 0000000..264ebef --- /dev/null +++ b/src/api/dataset/index.ts @@ -0,0 +1,32 @@ +import request from "../request"; +import { ServerUrl } from "../common"; + +const baseUrl = `${ServerUrl}/datasets`; + +export const datasetApi = { + getDatasetList: (params: { + current_page: number; + page_size: number; + search_keyword?: string; + }) => { + return request.post(`${baseUrl}/list`, params); + }, + createDataset: (params: { + name: string; + description: string; + }) => { + return request.post(`${baseUrl}`, params); + }, + deleteDataset: (params: { + id: number; + }) => { + return request.delete(`${baseUrl}/${params.id}`); + }, + updateDataset: (params: { + id: number; + name: string; + description: string; + }) => { + return request.put(`${baseUrl}/${params.id}`, params); + }, +} diff --git a/src/api/request.ts b/src/api/request.ts new file mode 100755 index 0000000..27b7893 --- /dev/null +++ b/src/api/request.ts @@ -0,0 +1,210 @@ +import { redirectTo } from "@/utils"; +import axios, { AxiosRequestConfig } from "axios"; +import { nanoid } from "nanoid"; +import { systemStore } from "@/store/system"; +import i18n from "../i18n"; + +// 存储请求的Map,key为请求的唯一标识(method + url) +const pendingRequests = new Map(); +// 节流时间(毫秒) +const THROTTLE_TIME = 0; + +/** + * 生成请求的唯一标识 + */ +const generateReqKey = (config: AxiosRequestConfig): string => { + const { method, url } = config; + return [method, url].join("&"); +}; + +/** + * 添加请求到等待队列 + */ +const addPendingRequest = (config: CustomAxiosRequestConfig) => { + const requestKey = generateReqKey(config); + const now = Date.now(); + const lastRequestTime = pendingRequests.get(requestKey) || 0; + const throttleTime = config.throttleTime || THROTTLE_TIME; + + // 如果在节流时间内有相同的请求,则返回一个被reject的promise + if (now - lastRequestTime < throttleTime) { + return { + message: "Requests are too frequent", + }; + } + + // 更新最后请求时间 + pendingRequests.set(requestKey, now); + + // 设置一个定时器,在节流时间后清除这个请求记录 + // 这样即使请求失败或响应拦截器没有清理,也能保证最终会被清理 + const timer = setTimeout(() => { + pendingRequests.delete(requestKey); + }, throttleTime); + + // 在请求配置中保存清理函数,以便在响应拦截器中调用 + // @ts-ignore + config.clearThrottle = () => { + clearTimeout(timer); + pendingRequests.delete(requestKey); + }; + + return null; +}; + +// 创建一个用于导航的 hook + +import type { InternalAxiosRequestConfig } from "axios"; +interface CustomAxiosRequestConfig extends InternalAxiosRequestConfig { + throttleTime?: number; +} + +const request = axios.create({ + baseURL: "/api", // 替换为API基本URL + timeout: 3 * 10 * 1000, // 请求超时时间(毫秒) +}); + +// 请求拦截器 +request.interceptors.request.use( + (config: CustomAxiosRequestConfig) => { + // 保证 headers 存在,避免 undefined 报错 + config.headers = config.headers || {}; + // 检查是否需要节流(可通过config.throttleTime控制) + if (config.throttleTime !== 0) { + const throttleError = addPendingRequest(config); + if (throttleError) { + return Promise.reject(throttleError); + } + } + + const token = localStorage.getItem("token"); + config.headers["Authorization"] = token; + config.headers["x-request-id"] = nanoid(); + config.headers["SourceApp"] = "d_cloud"; + // 从systemStore中获取当前语言设置并添加到请求头 + const lang = systemStore.getState().lang; + config.headers["Language"] = lang.toLowerCase(); + // if (import.meta.env.MODE === "development") { + // config.headers["d-user-id"] = 1; + // } + return config; + }, + (error) => { + // 处理请求错误 + return Promise.reject(error); + } +); + +// 响应拦截器 +request.interceptors.response.use( + (response) => { + // 请求成功,清理节流记录 + // @ts-ignore + if (response.config.clearThrottle) { + // @ts-ignore + response.config.clearThrottle(); + } + + if (response.headers["sso-url"]) + localStorage.setItem("ssoUrl", response.headers["sso-url"]); + // 在这里对响应数据进行处理 + if (response.data.status === 0) { + return response.data; + } + if (response.data.status === 10002) { + redirectTo( + `${response.data.location}?redirectUrl=${window.location.href}` + ); + return; + } + + if (response.data.message) { + let urlPath = response.config.url || ""; + if (urlPath.startsWith("/")) { + urlPath = urlPath.substring(1); + } + const moduleName = urlPath.split("/")?.[0] || ""; + const translatedMessage = i18n.t( + `${moduleName}.${response.data.message}`, + { + defaultValue: response.data.message, + ns: "errormessage", + } + ); + response.data.message = translatedMessage; + } + return Promise.reject(response.data); + }, + (error) => { + // 请求失败,清理节流记录 + if (error.config?.clearThrottle) { + error.config.clearThrottle(); + } + + // 如果是节流错误,直接返回 + if (error?.message?.includes("请求过于频繁")) { + return Promise.reject(error); + } + + // 处理响应错误 + if (error.response) { + // const status = error.response.status; + // const data = error.response.data; + // switch (status) { + // case EErrorCode.REQUEST_ERROR: + // message.error("请求错误"); + // break; + // case EErrorCode.TOKEN_EXPIRED: + // message + // .error("Token过期,请重新登录") + // .then(() => { + // removeItem("token"); + // removeItem("isLogin"); + // removeItem("username"); + // }) + // .then(() => { + // window.location.href = "/login"; + // }); + // break; + // case EErrorCode.ACCESS_DENY: + // message.error("拒绝访问"); + // break; + // case EErrorCode.NOT_FOUND: + // message.error(`请求地址出错: ${error.response.config.url}`); + // break; + // case EErrorCode.SERVER_INTER_ERROR: + // message.error("服务器内部错误"); + // break; + // case EErrorCode.SERVICE_NOT_IMPLEMENT: + // message.error("服务未实现"); + // break; + // case EErrorCode.GATEWAY_ERROR: + // message.error("网关错误"); + // break; + // case EErrorCode.SERVICE_UNAVAILABLE: + // message.error("服务不可用"); + // break; + // case EErrorCode.GATEWAY_TIMEOUT: + // message.error("网关超时"); + // break; + // case EErrorCode.HTTP_NOT_SUPPORT: + // message.error("HTTP版本不受支持"); + // break; + // default: + // // 处理其他HTTP错误 + // console.error("HTTP Error", status, data); + // break; + // } + } else if (error.request) { + // 如果请求被发出,但没有收到响应 + console.error("No response received", error.request); + } else { + // 发生了错误,请求无法发送 + console.error("Error", error.message); + } + + return Promise.reject(error); + } +); + +export default request; diff --git a/src/assets/images/logo_dark.png b/src/assets/images/logo_dark.png new file mode 100755 index 0000000000000000000000000000000000000000..e05ffe2c57f2d681593808cb2aa73d4839844b4e GIT binary patch literal 5309 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 N@2;^HM#DMw{{TqD+7bW& literal 0 HcmV?d00001 diff --git a/src/assets/images/navigate/Dataset.png b/src/assets/images/navigate/Dataset.png new file mode 100644 index 0000000000000000000000000000000000000000..fd3118a03662953fe4ac4e9390fcf93eb0adc1d7 GIT binary patch literal 2767 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/navigate/cloud-disk-disabled.png b/src/assets/images/navigate/cloud-disk-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a108825507b3bb1fe7edef3710d9f64d2a705cd2 GIT binary patch literal 2148 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πvE3^QD3+m1L<#L@n+l&H9H1kAVq_2gKR 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
$3OL})nq6!DMES}eeGfD)@^jc6 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/navigate/datagenerated.png b/src/assets/images/navigate/datagenerated.png new file mode 100644 index 0000000000000000000000000000000000000000..a8266abf69f58f7d438f9e9de1bbc6a125fb1f81 GIT binary patch literal 6479 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/navigate/dataset-active.png b/src/assets/images/navigate/dataset-active.png new file mode 100644 index 0000000000000000000000000000000000000000..cc75970a70afb9469356c3eea39948609d584624 GIT binary patch literal 6781 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/navigate/dataset-disabled.png b/src/assets/images/navigate/dataset-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..dc18d5a70e99b4c7bf180bd7c47f8cf555f6f003 GIT binary patch literal 2318 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 uN4 { + switch (appearance) { + case "dark": + return dark.theme; + default: + return light.theme; + } +}; +export const getCustomToken = (appearance: ThemeAppearance) => { + switch (appearance) { + case "dark": + return dark.customToken; + default: + return light.customToken; + } +}; diff --git a/src/components/ColLayout/index.tsx b/src/components/ColLayout/index.tsx new file mode 100755 index 0000000..7d0ecf2 --- /dev/null +++ b/src/components/ColLayout/index.tsx @@ -0,0 +1,68 @@ +import React, { ReactNode } from "react"; +import { createStyles, useThemeMode } from "antd-style"; +import { Card } from "antd"; + +type Props = { + HeaderSlot?: ReactNode; + children: ReactNode; + FooterSlot?: ReactNode; + style?: React.CSSProperties; // 新增style属性 +}; + +const ColLayout: React.FC = (props: Props) => { + const { themeMode } = useThemeMode(); + const { styles } = useStyles(themeMode); + const { children, HeaderSlot, FooterSlot, style } = props; + const Header = HeaderSlot ? ( +
{HeaderSlot}
+ ) : null; + const Footer = FooterSlot ? ( +
{FooterSlot}
+ ) : null; + return ( + + {Header} + +
+ {children} +
+ {Footer} +
+ ); +}; +export default ColLayout; + +const useStyles = createStyles(({ token, css }) => ({ + col_layout: css` + height: 100%; + width: 100%; + + /* background-color: #fff; */ + box-sizing: border-box; + border: none; + > .ant-card-body { + padding: 0 10px; + height: 100%; + display: flex; + flex-direction: column; + background-color: transparent; + /* background-color: ${(token as any).mainBgColor}; */ + } + `, + header: css` + height: auto; + padding: 20px 10px 10px; + `, + main: css` + flex: 1; + padding: 10px; + overflow-y: auto; + `, + footer: css` + height: auto; + padding: 10px 10px 20px; + `, +})); diff --git a/src/components/Icon.tsx b/src/components/Icon.tsx new file mode 100755 index 0000000..205b9bc --- /dev/null +++ b/src/components/Icon.tsx @@ -0,0 +1,26 @@ +/* + * @Author: yue02.sun yue02.sun@d-robotics.cc + * @Date: 2024-12-23 11:27:24 + * @LastEditors: yue02.sun yue02.sun@d-robotics.cc + * @LastEditTime: 2025-05-23 16:24:59 + * @LastEditTime: 2025-03-07 18:15:41 + * @FilePath: /trainer/common/components/Icon/index.tsx + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import { createFromIconfontCN } from "@ant-design/icons"; +import React, { HTMLAttributes } from "react"; + +const MyIcon = createFromIconfontCN({ + scriptUrl: "//at.alicdn.com/t/c/font_4600944_zslwc585ws.js", +}); + +// 扩展HTMLAttributes以支持所有React事件和HTML属性 +type Props = HTMLAttributes & { + name: string; +}; + +const Icon: React.FC = ({ name, ...restProps }) => { + return ; +}; + +export default Icon; diff --git a/src/components/SearchBox/index.tsx b/src/components/SearchBox/index.tsx new file mode 100644 index 0000000..506c21a --- /dev/null +++ b/src/components/SearchBox/index.tsx @@ -0,0 +1,125 @@ +import { Button, Divider, Flex, Space } from "antd"; +import { createStyles } from "antd-style"; +import ButtonGroup from "antd/es/button/button-group"; +import Search from "antd/es/input/Search"; +import React, { useEffect, useRef, useState } from "react"; + +interface SearchBoxProps { + children: React.ReactNode; + placeholder?: string; + searchKey?: string | undefined; + onClear?: () => void; + onCancel?: () => void; + onConfirm?: () => void; + onSearch?: (searchKey: string) => void; + visible?: boolean; +} + +const SearchBox: React.FC = ({ + children, + placeholder = "请输入搜索内容", + searchKey, + onCancel, + onClear, + onConfirm, + onSearch, + visible, +}) => { + const { styles } = useStyles(); + const [operateVisible, setOperateVisible] = useState(false); + const clickRef = useRef(null); + + const handleClickOutside = (event: MouseEvent) => { + if (clickRef.current && !clickRef.current.contains(event.target as Node)) { + setOperateVisible(false); + } + }; + + useEffect(() => { + document.addEventListener("mousedown", handleClickOutside); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; + }, []); + + return ( +
+ setOperateVisible(true)} + value={searchKey} + onChange={(e) => onSearch?.(e.target.value)} + /> + +
{children}
+ + + + + setOperateVisible(false)}> + + + + + +
+
+ ); +}; + +export default SearchBox; + +const useStyles = createStyles(({ token }) => { + return { + searchBoxContainer: { + position: "relative", + width: "300px", + "& .search": { + width: "100%", + }, + "& .operate": { + position: "absolute", + left: 0, + boxSizing: "border-box", + padding: `${token.padding}px ${token.padding}px 0`, + zIndex: 999, + backgroundColor: token.colorBgContainer, + boxShadow: token.boxShadow, + borderRadius: token.borderRadius, + width: "100%", + marginTop: token.marginXXS, + height: "300px", + overflow: "hidden", + }, + "& .operate-content": { + flex: 1, + padding: `${token.paddingContentVertical}px 0`, + }, + "& .operate-area": { + height: "50px", + position: "relative", + width: "100%", + "& .divider": { + margin: 0, + }, + }, + "& .button-group": { + position: "absolute", + transform: "translateY(-50%)", + top: 'calc(50% + 2px)', + right: 0, + display: 'flex', + justifyContent: 'space-between', + width: '100%' + }, + }, + }; +}); diff --git a/src/i18n/index.ts b/src/i18n/index.ts new file mode 100755 index 0000000..78cfcd8 --- /dev/null +++ b/src/i18n/index.ts @@ -0,0 +1,81 @@ +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; +import LanguageDetector from "i18next-browser-languagedetector"; +// import { resources as sharedResources } from "@trainer/components/i18n"; +import { systemStore } from "@/store/system"; + +// 加载所有语言包 +const modules = import.meta.glob("./locales/**/*.json", { + eager: true, +}) as Record; + +export const localeTransitions = Object.entries(modules).reduce( + (prev: any, current) => { + const [path, module] = current; + const lang = path.match(/\/locales\/([\w-]+)\//); + const filename = path.match(/\/([\w-_]+)\.json$/); + if (filename && lang) { + prev[lang[1]] = prev[lang[1]] || {}; + prev[lang[1]][filename[1]] = module.default; + } else { + console.error(`无法解析文件名称 path:${path}`); + } + + return prev; + }, + {} +); + +// 合并共享组件的翻译资源 +// const mergedResources = Object.keys(localeTransitions).reduce( +// (merged: Record, lang: string) => { +// merged[lang] = { +// ...localeTransitions[lang], +// ...(sharedResources[lang as keyof typeof sharedResources] || {}), +// }; +// return merged; +// }, +// {} +// ); + +function getInitLang() { + let lang = systemStore.getState().lang; + if (lang) return lang; + // 检查浏览器语言 + const browserLang = ( + navigator.language || + navigator.languages?.[0] || + "en-US" + ).toLowerCase(); + + lang = browserLang.startsWith("zh") ? "zh-CN" : "en-US"; + systemStore.setState({ lang }); + return lang; +} + +const defaultLang = getInitLang(); + +i18n + // 检测用户当前使用的语言 + // 文档: https://github.com/i18next/i18next-browser-languageDetector + .use(LanguageDetector) + // 注入 react-i18next 实例 + .use(initReactI18next) + // 初始化 i18next + // 配置参数的文档: https://www.i18next.com/overview/configuration-options + .init({ + debug: true, + lng: defaultLang, // 优先systemStore,没有则浏览器自动检测 + fallbackLng: "en", + interpolation: { + escapeValue: false, + }, + detection: { + // 禁止所有缓存 + caches: [], + }, + resources: localeTransitions, + }); +export default i18n; + +export type langType = "zh-CN" | "en-US"; diff --git a/src/i18n/locales/zh-CN b/src/i18n/locales/zh-CN new file mode 100644 index 0000000..e69de29 diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..08a3ac9 --- /dev/null +++ b/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/src/layout/SiderBar.tsx b/src/layout/SiderBar.tsx new file mode 100755 index 0000000..220a3bf --- /dev/null +++ b/src/layout/SiderBar.tsx @@ -0,0 +1,172 @@ +import { FC } from "react"; +import { Tooltip } from "antd"; +import Icon from "@/components/Icon"; +import { createStyles } from "antd-style"; +import { useNavigate, useLocation } from "react-router-dom"; +import { useTranslation } from "react-i18next"; +import { menuList } from "./menuList"; +import type { MenuListItem } from "./menuList"; +import LogoDark from "@/assets/images/logo_dark.png"; +import LogoLight from "@/assets/images/logo_light.png"; +import { systemStore } from "@/store/system"; + +const iconSize = 20; + +const SiderBar: FC = () => { + const theme = systemStore((state) => state.theme); + const platform = systemStore((state) => state.platform); + const { styles } = useStyles(); + const { pathname } = useLocation(); + const navigate = useNavigate(); + + const goSettings = () => { + navigate("/settings"); + }; + const goManual = () => { + navigate("/manual"); + }; + const SiderBarItem = (props: { + menuItem: MenuListItem; + activedPath: string; + }) => { + const { styles } = useStyles(); + const { icon, iconActive, path, name, disabled, activePath } = + props.menuItem; + const isActived = props.activedPath.includes(activePath); + const navigate = useNavigate(); + const { t } = useTranslation("menu"); + + const goPage = () => { + if (disabled) return; + navigate(path); + }; + + return ( + +
+
+ + {t(name)} +
+
+
+ ); + }; + const SiderBarList = menuList.map((menuItem) => ( + + )); + return ( +
+
+ + {/* D-Cloud */} +
+
{SiderBarList}
+
+
+ +
+
+
+ ); +}; + +export default SiderBar; + +const useStyles = createStyles(({ token, css }) => { + return { + itemBox: css` + margin: 5px 0; + border-radius: 4px; + cursor: pointer; + transition: all 0.2s; + :hover { + background: ${token.colorPrimaryBgHover}; + .item-row { + /* color: ${token.colorPrimary} !important; */ + } + } + .item-row { + color: ${token.colorText}; + /* color: #555961; */ + font-size: 14px; + height: 44px; + line-height: 44px; + display: flex; + align-items: center; + .item-icon { + width: 35px; + height: 35px; + margin-right: 15px; + margin-left: 20px; + } + } + `, + itemBoxActived: css` + background: ${token.colorPrimaryBgHover}; + position: relative; + .item-row { + color: ${token.colorPrimary} !important; + } + ::after { + content: ""; + display: block; + width: 4px; + height: 100%; + background: ${token.colorPrimary}; + position: absolute; + right: 0; + top: 0; + } + `, + itemBoxDiasbled: css` + > .item-row { + color: ${token.colorTextDisabled} !important; + } + `, + listBox: css` + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + > .list-logo { + height: 50px; + margin-top: 10px; + /* padding-top: 24px; */ + font-size: 22px; + /* margin-bottom: 30px; */ + font-weight: 600; + display: flex; + align-items: center; + justify-content: center; + + > img { + width: 42px; + height: 42px; + /* margin-right: 10px; */ + } + } + > .list-main { + width: 100%; + flex: 1; + overflow-y: auto; + } + > .list-bottom { + height: 60px; + display: flex; + flex-direction: column; + justify-content: space-between; + cursor: pointer; + } + `, + }; +}); diff --git a/src/layout/index.tsx b/src/layout/index.tsx new file mode 100755 index 0000000..15e0cae --- /dev/null +++ b/src/layout/index.tsx @@ -0,0 +1,66 @@ +import { createStyles } from "antd-style"; +import { Outlet } from "react-router-dom"; + +import SiderBar from "./SiderBar"; + +const Layout = () => { + const { styles } = useStyles(); + return ( +
+
+ +
+
+
+
+ +
+
+
+ ); +}; + +export default Layout; +const useStyles = createStyles(({ token, css }) => { + const padding = 0; + + return { + layout_box: css` + height: 100vh; + display: flex; + flex-direction: row; + /* scrollbar-color: rebeccapurple green; */ + background-image: linear-gradient( + ${(token as any).layoutColor1}, + ${(token as any).layoutColor2}, + ${(token as any).layoutColor2} + ); + `, + layout_sider: css` + width: 190px; + padding: ${padding}px 0; + background-color: ${(token as any).sideBgColor}; + `, + layout_main: css` + position: relative; + flex: 1; + height: calc(100% - ${padding * 2}px); + overflow: hidden; + margin: ${padding}px; + margin-left: 0; + border-radius: ${token.borderRadius}px; + .layout-content { + height: 100%; + overflow-y: auto; + } + .layout-drag { + width: 100%; + height: 10px; + position: absolute; + top: -10px; + left: 0; + -webkit-app-region: drag; + } + `, + }; +}); diff --git a/src/layout/menuList.ts b/src/layout/menuList.ts new file mode 100755 index 0000000..b4aea54 --- /dev/null +++ b/src/layout/menuList.ts @@ -0,0 +1,53 @@ +import DataTraining from "@/assets/images/navigate/datetrainning.png"; +import Dataset from "@/assets/images/navigate/Dataset.png"; +import DataTrainingActive from "@/assets/images/navigate/datetrainning-active.png"; +import DatasetActive from "@/assets/images/navigate/dataset-active.png"; +import Datagenerated from "@/assets/images/navigate/datagenerated.png"; +import DatageneratedActive from "@/assets/images/navigate/datagenerated-active.png"; + +type IconType = "own" | "outer"; +export interface MenuListItem { + iconType: IconType; + iconAddress: string; + path: string; + disabled?: boolean; + name: string; + description: string; + iconActive: string; + icon: string; + activePath: string; +} +export const menuList: MenuListItem[] = [ + { + iconType: "own", + icon: Datagenerated, + iconAddress: "3yunpan", + path: "/data-create/list", + name: "数据生成", + description: "", + iconActive: DatageneratedActive, + activePath: "/data-create", + }, + + { + iconType: "own", + iconAddress: "jiankong", + iconActive: DatasetActive, + icon: Dataset, + path: "/data-set/list", + disabled: false, + name: "数据集", + description: "", + activePath: "/data-set", + }, + { + iconType: "own", + iconAddress: "moxingxunlian1", + iconActive: DataTrainingActive, + icon: DataTraining, + path: "/model-workshop/list", + name: "模型工坊", + description: "", + activePath: "/model-workshop", + }, +]; diff --git a/src/main.tsx b/src/main.tsx new file mode 100755 index 0000000..164cb88 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,4 @@ +import ReactDOM from "react-dom/client"; +import App from "./App.tsx"; + +ReactDOM.createRoot(document.getElementById("root")!).render(); diff --git a/src/router/index.tsx b/src/router/index.tsx new file mode 100644 index 0000000..d266c9c --- /dev/null +++ b/src/router/index.tsx @@ -0,0 +1,75 @@ +import { Navigate } from "react-router-dom"; +import { lazy, Suspense } from "react"; +import { Spin } from "antd"; +import type { RouteObject } from "react-router-dom"; +import Layout from "@/layout"; +// import { isPermissionPath } from "@trainer/utils"; +// import { systemStore } from "@/store/system"; +// const { setState, getState } = systemStore; +// 自定义懒加载函数 +const lazyLoad = (factory: () => Promise) => { + const Module = lazy(factory); + return ( + + } + > + + + ); +}; + +// 路由 抽离成为JS对象形式 +const routes: RouteObject[] = [ + { + path: "/", + element: , + // loader: loaderFn("*"), + children: [ + { + index: true, + element: , + }, + { + path: "welcome", + element: lazyLoad(() => import("@/views/welcome")), + }, + { + path: "data-create", + children: [ + { + index: true, + element: , + }, + { + path: "list", + element: lazyLoad(() => import("@/views/data-generation/index")), + } + ] + }, + { + path: "data-set", + children: [ + { + index: true, + element: , + }, + { + path: "list", + element: lazyLoad(() => import("@/views/dataset/index")), + } + ] + }, + ], + }, +]; + +export default routes; diff --git a/src/store/system.ts b/src/store/system.ts new file mode 100755 index 0000000..23295de --- /dev/null +++ b/src/store/system.ts @@ -0,0 +1,59 @@ +import { create, StateCreator } from "zustand"; +import { persist } from "zustand/middleware"; +export type ThemeType = "light" | "dark"; +export type PlatformType = "macos" | "windows" | "linux" | "web"; +interface IState { + platform: PlatformType; + setPlatform: (platform: PlatformType) => void; + + theme: ThemeType; + setTheme: (theme: ThemeType) => void; + + lang: string; + setLang: (lang: string) => void; + + userInfo?: User.Info; + setUserInfo: (userInfo: User.Info) => void; + + permission: any[]; + setPermission: (permission: any[]) => void; +} + +const systemSlice: StateCreator = ( + set +) => ({ + platform: "web", + setPlatform: (platform: PlatformType) => { + return set({ platform: platform }); + }, + + theme: "dark", + setTheme: (theme: ThemeType) => { + return set({ theme }); + }, + + lang: "", + setLang: (lang: string) => { + return set({ lang }); + }, + + userInfo: undefined, + setUserInfo: (userInfo: User.Info) => { + return set({ userInfo }); + }, + + permission: [], + setPermission: (permission: any[]) => { + return set({ permission }); + }, +}); + +export const systemStore = create()( + persist(systemSlice, { + name: "system_store", + partialize: (state) => ({ + theme: state.theme, + lang: state.lang, + }), + }) +); diff --git a/src/types/data-generation.ts b/src/types/data-generation.ts new file mode 100644 index 0000000..7c532b2 --- /dev/null +++ b/src/types/data-generation.ts @@ -0,0 +1,108 @@ +export enum TaskType { + adjust_bottle = "adjust_bottle", + + beat_block_hammer = "beat_block_hammer", + + blocks_ranking_rgb = "blocks_ranking_rgb", + + blocks_ranking_size = "blocks_ranking_size", + + click_alarmclock = "click_alarmclock", + + click_bell = "click_bell", + + dump_bin_bigbin = "dump_bin_bigbin", + + grab_roller = "grab_roller", + + handover_block = "handover_block", + + handover_mic = "handover_mic", + + hanging_mug = "hanging_mug", + + lift_pot = "lift_pot", + + move_can_pot = "move_can_pot", + + move_playingcard_away = "move_playingcard_away", + + move_stapler_pad = "move_stapler_pad", + + open_laptop = "open_laptop", + + open_microwave = "open_microwave", + + pick_diverse_bottles = "pick_diverse_bottles", + + pick_dual_bottles = "pick_dual_bottles", + + place_a2b_left = "place_a2b_left", + + place_a2b_right = "place_a2b_right", + + place_bread_basket = "place_bread_basket", + + place_bread_skillet = "place_bread_skillet", + + place_burger_fries = "place_burger_fries", + + place_can_basket = "place_can_basket", + + place_cans_plasticbox = "place_cans_plasticbox", + + place_container_plate = "place_container_plate", + + place_dual_shoes = "place_dual_shoes", + + place_empty_cup = "place_empty_cup", + + place_fan = "place_fan", + + place_mouse_pad = "place_mouse_pad", + + place_object_basket = "place_object_basket", + + place_object_scale = "place_object_scale", + + place_object_stand = "place_object_stand", + + place_phone_stand = "place_phone_stand", + + place_shoe = "place_shoe", + + press_stapler = "press_stapler", + + put_bottles_dustbin = "put_bottles_dustbin", + + put_object_cabinet = "put_object_cabinet", + + rotate_qrcode = "rotate_qrcode", + + scan_object = "scan_object", + + shake_bottle_horizontally = "shake_bottle_horizontally", + + shake_bottle = "shake_bottle", + + stack_blocks_three = "stack_blocks_three", + + stack_blocks_two = "stack_blocks_two", + + stack_bowls_three = "stack_bowls_three", + + stack_bowls_two = "stack_bowls_two", + + stamp_seal = "stamp_seal", + + turn_switch = "turn_switch", + + move_pillbottle_pad = "move_pillbottle_pad", +} + +export enum CameraType { + L515 = "L515", + D435 = "D435", + Large_L515 = "Large_L515", + Large_D435 = "Large_D435", +} diff --git a/src/types/dataset.ts b/src/types/dataset.ts new file mode 100644 index 0000000..1fc9c53 --- /dev/null +++ b/src/types/dataset.ts @@ -0,0 +1,13 @@ +export interface Dataset { + id: number; + name: string; + description: string; + task_count: number; + simulator: string; + task: string; + camera: string; + storage_time: string; + created_at: string; + updated_at: string; + data_count: number; +} \ No newline at end of file diff --git a/src/types/user.d.ts b/src/types/user.d.ts new file mode 100755 index 0000000..d45114e --- /dev/null +++ b/src/types/user.d.ts @@ -0,0 +1,50 @@ +export enum UserState { + "活跃" = "activated", // 已激活 + "未激活" = "unactivated", // 未激活 + "已锁定" = "locked", // 已锁定 + "已冻结" = "frozen", // 已冻结 + "已注销" = "canceled", // 已注销 + "已禁用" = "disabled", // 已禁用 + "待审核" = "pending_review", // 待审核 + "已删除" = "deleted", // 已删除 +} + +export enum UserIdentity { + "系统管理员" = "system_admin", // 系统管理员' + "个体用户" = "personal", // 独立个体 + "组织用户" = "organization", // 组织 +} + +export enum OrganizationState { + 未激活 = "unactivated", // 未激活 + 待审核 = "pending_review", // 待审核 + 活跃 = "activated", // 已激活 + 冻结 = "frozen", // 已冻结 + 解散 = "deleted", // 已解散 +} +declare global { + declare namespace User { + export interface OrganizationInfo { + id: number; + name: string; + role: string; + symbol: string; // 组织标识 + state: OrganizationState; + createdAt: string; + } + export interface Info { + id: number; + userId:string; + userName: string; + mobile: string; + state: UserState; + // organizationName: string; + // organizationId: number; + source: string; + createdAt: string; + identity: UserIdentity; + role:string; + organization: OrganizationInfo; + } + } +} diff --git a/src/types/vite-env.d.ts b/src/types/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/types/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100755 index 0000000..4a67856 --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1,176 @@ +/* + * @Author: yue02.sun yue02.sun@d-robotics.cc + * @Date: 2024-12-02 19:17:14 + * @LastEditors: yue02.sun yue02.sun@d-robotics.cc + * @LastEditTime: 2024-12-25 18:52:33 + * @FilePath: /trainer/projects/d-cloud/src/utils/index.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +/** + * 将枚举对象转换为选项数组 + * + * 此函数的目的是为了将一个枚举对象(其中包含键值对)转换成一个选项数组(每个选项包含label和value), + * 这样的转换常用于为前端组件提供数据源,例如下拉列表等 + * + * @param enumObj 输入的枚举对象,键是字符串,值可以是任意类型 + * @returns 返回一个选项数组,每个选项对象包含label(原枚举对象的键)和value(原枚举对象的值) + */ +export const enumToOptions = (enumObj: { [key: string]: T }) => { + return Object.keys(enumObj).map((key) => { + return { + label: key, + value: enumObj[key], + }; + }); +}; + +/** + * 根据枚举值查找枚举键 + * + * 此函数用于在枚举对象中根据指定的值查找对应的键名它接受一个枚举对象和一个值作为参数, + * 并返回与该值匹配的键名如果找不到匹配的键,则返回undefined该函数通过Object.keys方法 + * 获取枚举对象的所有键名,并使用Array的find方法遍历键名数组,找到第一个与指定值匹配的键名 + * + * @param enumObj 枚举对象,包含键值对,键为字符串,值为任意类型的枚举值 + * @param value 要查找的枚举值 + * @returns 返回找到的键名,如果找不到匹配的键,则返回undefined + */ +export const enumkeyByValue = (enumObj: { [key: string]: T }, value: T) => { + return Object.keys(enumObj).find((key) => enumObj[key] === value); +}; + +export const preciseInterval = (callback: () => void, delay: number) => { + let start = performance.now(); + let timer: NodeJS.Timeout | number; + function loop() { + const elapsed = performance.now() - start; + callback(); + const nextInterval = delay - (elapsed % delay); + timer = setTimeout(loop, nextInterval); + } + + timer = setTimeout(loop, delay); + return { + cancel: () => clearTimeout(timer), + }; +}; + +export const calculateSha256 = async (file: File): Promise => { + const sampleSize = 2 * 1024 * 1024; // 2MB per sample + const crypto = window.crypto.subtle; + + // 创建进度提示 + const key = "hashProgress"; + // message.open({ + // key, + // type: "loading", + // content: t("dataSpace:fileList.messages.fileSignatureCalculating"), + // duration: 0, + // }); + + try { + let combinedBuffer: ArrayBuffer; + + if (file.size < 1024 * 1024 * 1024 * 2) { + // 如果文件小于4MB,直接读取整个文件 + const wholeFile = file.slice(0, file.size); + combinedBuffer = await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = (e) => resolve(e.target?.result as ArrayBuffer); + reader.onerror = reject; + reader.readAsArrayBuffer(wholeFile); + }); + } else { + // 读取文件头部 + const headChunk = file.slice(0, sampleSize); + const headBuffer = await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = (e) => resolve(e.target?.result as ArrayBuffer); + reader.onerror = reject; + reader.readAsArrayBuffer(headChunk); + }); + + // 读取文件尾部 + const tailStart = file.size - sampleSize; + const tailChunk = file.slice(tailStart, file.size); + const tailBuffer = await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = (e) => resolve(e.target?.result as ArrayBuffer); + reader.onerror = reject; + reader.readAsArrayBuffer(tailChunk); + }); + + // 合并头尾数据 + const combined = new Uint8Array( + headBuffer.byteLength + tailBuffer.byteLength + 8 + ); + combined.set(new Uint8Array(headBuffer), 0); + combined.set(new Uint8Array(tailBuffer), headBuffer.byteLength); + + // 在末尾加入文件大小信息 + const sizeBuffer = new Uint8Array(8); + const sizeView = new DataView(sizeBuffer.buffer); + sizeView.setBigUint64(0, BigInt(file.size), true); + combined.set(sizeBuffer, headBuffer.byteLength + tailBuffer.byteLength); + + combinedBuffer = combined.buffer; + } + + // 计算最终哈希 + const hashBuffer = await crypto.digest("SHA-256", combinedBuffer); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const hashHex = hashArray + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + + // 完成后关闭进度提示 + // message.open({ + // key, + // type: "success", + // content: t("dataSpace:fileList.messages.fileSignatureCompleted"), + // duration: 2, + // }); + + return hashHex; + } catch (error) { + // 错误时关闭进度提示 + // message.open({ + // key, + // type: "error", + // content: t("dataSpace:fileList.messages.fileSignatureFailed"), + // duration: 2, + // }); + console.error("Error calculating file signature:", error); + return ""; + } +}; +export const getPublicUrl = (path: string) => { + return `/d-cloud/${path}`; +}; +// 将秒数转换为 HH:mm:ss 格式 +export const formatTime = (seconds: number): string => { + if (seconds <= 0) return "00:00:00"; + + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const remainingSeconds = Math.floor(seconds % 60); + + return ( + [ + hours.toString().padStart(2, "0"), + minutes.toString().padStart(2, "0"), + remainingSeconds.toString().padStart(2, "0"), + ].join(":") + "s" + ); +}; +/** + * @description: 通用跳转方法 + * @param {string} redirectUrl + * @return {*} + */ +export const redirectTo = (redirectUrl: string) => { + let timer = setTimeout(() => { + window.location.href = redirectUrl; + clearTimeout(timer); + }, 1000); +}; \ No newline at end of file diff --git a/src/views/data-generation/components/CreateTaskModal.tsx b/src/views/data-generation/components/CreateTaskModal.tsx new file mode 100644 index 0000000..77cc32f --- /dev/null +++ b/src/views/data-generation/components/CreateTaskModal.tsx @@ -0,0 +1,159 @@ +import { + Button, + Divider, + Flex, + Form, + Input, + InputNumber, + Modal, + Select, + Space, + Tooltip, +} from "antd"; +import React, { useEffect } from "react"; + +interface CreateTaskModalProps { + visible: boolean; + onCancel: () => void; + onConfirm: (values: any) => void; // 修改onConfirm的类型以接收表单值 + datasetList: { id: number; name: string; description: string }[] | undefined; +} + +const CreateTaskModal: React.FC = ({ + visible, + onCancel, + onConfirm, + datasetList, +}) => { + const [form] = Form.useForm(); + const [datasetName, setDatasetName] = React.useState(""); + const [loading, setLoading] = React.useState(false); + + const handleOk = async () => { + try { + const values = await form.validateFields(); + onConfirm(values); + form.resetFields(); // 提交成功后重置表单 + } catch (errorInfo) { + console.log("Failed:", errorInfo); + } + }; + + const handleCreateDataset = async () => { + setLoading(true); + + }; + + return ( + +
+ + + + + + + + + + + + + + + + + { + e.stopPropagation(); + setDatasetName(e.target.value); + }} + value={datasetName} + placeholder="请输入数据集名称" + disabled={loading} + /> + + + + )} + > + {datasetList?.map((item) => ( + + {item.name} + + ))} + + +
+
+ ); +}; + +export default CreateTaskModal; diff --git a/src/views/data-generation/index.tsx b/src/views/data-generation/index.tsx new file mode 100644 index 0000000..e649d80 --- /dev/null +++ b/src/views/data-generation/index.tsx @@ -0,0 +1,203 @@ +import ColLayout from "@/components/ColLayout"; +import { Button, Flex, Pagination, Table } from "antd"; +import { createStyles } from "antd-style"; +import ButtonGroup from "antd/es/button/button-group"; +import Search from "antd/es/input/Search"; +import React, { useEffect, useRef, useState } from "react"; +import CreateTaskModal from "./components/CreateTaskModal"; +import { datasetApi } from "@/api/dataset"; +import useToken from "antd/es/theme/useToken"; +import { dataGenerationApi } from "@/api/data-generation"; +import { preciseInterval } from "@/utils"; + +// 假设的任务类型接口,如果已存在请忽略 +interface TaskItem { + name: string; + status: string; // 假设 status 是字符串类型 + type: string; + create_time: string; + update_time: string; + // 其他可能的字段 +} + +interface DataGenerationPageProps {} + +const DataGenerationPage: React.FC = () => { + const { styles } = useStyles(); + const [dataSource, setDataSource] = useState( + undefined + ); + const [createTaskModalVisible, setCreateTaskModalVisible] = useState(false); + const [datasetList, setDatasetList] = useState< + { id: number; name: string; description: string }[] | undefined + >(undefined); + const [page, setPage] = useState(1); + const [pageSize, setPageSize] = useState(10); + const [total, setTotal] = useState(0); + const [, token] = useToken(); + const PollyRef = useRef(null); + const refreshTime = 5000; + + const HeaderSlot = ( +
+

数据生成

+
+ ); + + const FooterSlot = ( +
+ { + setPage(page); + }} + onShowSizeChange={(_, pageSize) => { + setPageSize(pageSize); + }} + showSizeChanger + showQuickJumper + showTotal={(total) => `共 ${total} 条`} + /> +
+ ); + + const columns = [ + { + title: "任务名称", + dataIndex: "name", + key: "name", + }, + { + title: "任务状态", + dataIndex: "status", + key: "status", + }, + { + title: "任务类型", + dataIndex: "type", + key: "type", + }, + { + title: "任务创建时间", + dataIndex: "create_time", + key: "create_time", + }, + { + title: "任务更新时间", + dataIndex: "update_time", + key: "update_time", + }, + { + title: "操作", + key: "action", + render: (_: any, record: TaskItem) => ( + + {record.status === "running" ? ( // 假设 "running" 表示执行中 + <> + + + + ) : ( + <> + + + + )} + + ), + }, + ]; + + const getDatasetList = async ( + page: number, + pageSize: number, + ) => { + const { data } = await datasetApi.getDatasetList({ + current_page: page, + page_size: pageSize, + }); + setDatasetList(data.list); + }; + + const getTaskList = async (page: number, pageSize: number, keyword?: string) => { + const { data } = await dataGenerationApi.getTaskList({ + current_page: page, + page_size: pageSize, + search_keyword: keyword + }); + setDataSource(data.items); + setTotal(data.total); + }; + + const clearPolling = () => { + PollyRef.current?.cancel(); + PollyRef.current = null; + }; + + const startPolling = () => { + PollyRef.current = preciseInterval(() => { + getTaskList(page, pageSize); + }, refreshTime); + }; + + useEffect(() => { + clearPolling(); + getDatasetList(1, 10000) + startPolling(); + }, []); + + return ( + <> + +
+ + getTaskList(page, pageSize, value)} + style={{ width: "300px" }} + /> + + + + +
+
+
+ {createTaskModalVisible && ( + setCreateTaskModalVisible(false)} + onConfirm={() => setCreateTaskModalVisible(false)} + datasetList={datasetList} + > + )} + + ); +}; + +export default DataGenerationPage; + +const useStyles = createStyles(({ token }) => { + return { + wrapper: { + height: "100%", + width: "100%", + overflow: "hidden", + "& .operate": { + marginBottom: token.margin, + }, + }, + pagination: { + position: "absolute", + bottom: token.margin, + right: token.margin, + }, + }; +}); diff --git a/src/views/dataset/components/DatasetCard.tsx b/src/views/dataset/components/DatasetCard.tsx new file mode 100644 index 0000000..0b96572 --- /dev/null +++ b/src/views/dataset/components/DatasetCard.tsx @@ -0,0 +1,132 @@ +import { Button, Flex, Modal, Popconfirm, Popover, Space, Tooltip } from "antd"; +import { createStyles } from "antd-style"; +import ButtonGroup from "antd/es/button/button-group"; +import useToken from "antd/es/theme/useToken"; +import React, { useEffect, useRef, useState } from "react"; +import DatasetForm, { DatasetFormRef } from "./DatasetForm"; +import { Dataset } from "@/types/dataset"; + +interface DatasetCardProps { + DatasetDetail: Dataset; + onOperate?: (type: 'edit' | 'delete', dataset: Dataset) => void; +} + +const DatasetCard: React.FC = ({ + DatasetDetail, + onOperate, +}) => { + const { styles } = useStyles(); + const [, token] = useToken(); + const formRef = useRef(null); + const [editModalVisible, setEditModalVisible] = useState(false); + + return ( + <> + + + {DatasetDetail.name} + {DatasetDetail.data_count} / 条 数据 + +
+
+

数据集描述:

+ +

+ {DatasetDetail.description} +

+
+
+
+

创建时间:

+

{DatasetDetail.created_at}

+
+
+ + 查看更多 + + + + onOperate?.("delete", DatasetDetail)} + > + + + + + +
+ setEditModalVisible(false)} // 取消时关闭弹窗 + onOk={async () => { + try { + const values = await formRef.current?.validateFields(); + if (values) { + onOperate?.("edit", { ...DatasetDetail, ...values }); // 合并 DatasetDetail 和 values + setEditModalVisible(false); + } + } catch (error) { + console.error("表单验证失败:", error); + } + }} + > + + + + ); +}; + +export default DatasetCard; + +const useStyles = createStyles(({ token }) => { + return { + dataset_card: { + width: "360px", + height: "240px", + borderRadius: "16px", + border: "1px solid rgba(255, 81, 37, 0.15)", + background: `linear-gradient(to left top, #ff5125, ${token.colorBgBase})`, + boxShadow: "0 8px 24px rgba(255, 81, 37, 0.08)", + boxSizing: "border-box", + padding: "24px 24px 16px", + lineHeight: "1", + "& .dataset_card_header": { + fontWeight: "600", + fontSize: "24px", + color: token.colorText, + width: "100%", + marginBottom: "16px", + }, + "& .dataset_card_content": { + "& .dataset_card_content_description": { + color: token.colorTextBase, + padding: "8px 0", + fontSize: "14px", + "& .description": { + color: token.colorTextDescription, + marginBottom: "8px", + }, + }, + }, + "& .dataset_card_footer": {}, + }, + }; +}); diff --git a/src/views/dataset/components/DatasetForm.tsx b/src/views/dataset/components/DatasetForm.tsx new file mode 100644 index 0000000..bf4a290 --- /dev/null +++ b/src/views/dataset/components/DatasetForm.tsx @@ -0,0 +1,56 @@ +import { Form, Input } from "antd"; +import React, { useImperativeHandle, forwardRef } from "react"; + +interface DatasetFormProps { + initialValues?: { + name?: string; + description?: string; + }; +} + +export interface DatasetFormRef { + resetFields: () => void; + validateFields: () => Promise<{ name: string; description: string }>; + getFieldsValue: () => { name: string; description: string }; +} + +const DatasetForm: React.ForwardRefRenderFunction = ( + { initialValues }, + ref +) => { + const [form] = Form.useForm(); + + useImperativeHandle(ref, () => ({ + resetFields: () => { + form.resetFields(); + }, + validateFields: () => { + return form.validateFields(); + }, + getFieldsValue: () => { + return form.getFieldsValue(); + }, + })); + + return ( +
+ + + + + + +
+ ); +}; + +export default forwardRef(DatasetForm); + diff --git a/src/views/dataset/index.tsx b/src/views/dataset/index.tsx new file mode 100644 index 0000000..d0d93a9 --- /dev/null +++ b/src/views/dataset/index.tsx @@ -0,0 +1,209 @@ +import ColLayout from "@/components/ColLayout"; +import React, { useEffect, useRef, useState } from "react"; +import DatasetCard from "./components/DatasetCard"; +import { Form, Input, message, Pagination, Spin } from "antd"; +import { datasetApi } from "@/api/dataset"; +import { preciseInterval } from "@/utils"; +import useToken from "antd/es/theme/useToken"; +import { Dataset } from "@/types/dataset"; +import Search from "antd/es/input/Search"; +import { createStyles } from "antd-style"; +import SearchBox from "@/components/SearchBox"; + +interface DatasetPageProps {} + +const DatasetPage: React.FC = (props: DatasetPageProps) => { + const { styles } = useStyles(); + const [page, setPage] = useState(1); + const [pageSize, setPageSize] = useState(10); + const [total, setTotal] = useState(0); + const PollyRef = useRef(null); + const [, token] = useToken(); + const refreshTime = 5000; + const [searchKeyword, setSearchKeyword] = useState(""); + const [operateFormVisible, setOperateFormVisible] = useState(false); + const [datasetList, setDatasetList] = useState([ + { + id: 1, + name: "数据集1", + description: "数据集1描述", + task_count: 1, + simulator: "simulator1", + task: "task1", + camera: "camera1", + storage_time: "2024-01-01", + created_at: "2024-01-01", + updated_at: "2024-01-01", + data_count: 1, + }, + ]); + const [loading, setLoading] = useState(false); + + const HeaderSlot = ( +
+

数据集

+
+ ); + + const FooterSlot = ( +
+ { + setPage(newPageSize); + setPageSize(newPageSize); + clearPolling(); + getDatasetList(newPage, newPageSize); + PollyRef.current = preciseInterval(() => { + getDatasetList(newPage, newPageSize); + }, refreshTime); + }} + showSizeChanger + > +
+ ); + + const getDatasetList = async ( + page: number, + pageSize: number, + name?: string + ) => { + try { + setLoading(true); + // const { data } = await datasetApi.getDatasetList({ + // current_page: page, + // page_size: pageSize, + // search_keyword: name, + // }); + // setTotal(data.total); + setDatasetList([ + { + id: 1, + name: "数据集1", + description: "数据集1描述", + task_count: 1, + simulator: "simulator1", + task: "task1", + camera: "camera1", + storage_time: "2024-01-01", + created_at: "2024-01-01", + updated_at: "2024-01-01", + data_count: 1, + }, + ]); + setLoading(false); + } catch (error) { + message.error("获取数据集列表失败"); + setLoading(false); + } + }; + + const deleteDataset = async (id: number) => { + try { + setLoading(true); + await datasetApi.deleteDataset({ id }); + message.success("删除成功"); + setLoading(false); + } catch (error) { + message.error("删除失败"); + setLoading(false); + } + }; + + const editDataset = async ({ + id, + name, + description, + }: { + id: number; + name: string; + description: string; + }) => { + try { + setLoading(true); + await datasetApi.updateDataset({ id, name, description }); + message.success("编辑成功"); + setLoading(false); + } catch (error) { + message.error("编辑失败"); + setLoading(false); + } + }; + + const handleOperate = (type: "edit" | "delete", dataset: Dataset) => { + if (type === "edit") { + editDataset({ + id: dataset.id, + name: dataset.name, + description: dataset.description, + }); + } else { + deleteDataset(dataset.id); + } + }; + + const clearPolling = () => { + PollyRef.current?.cancel(); + PollyRef.current = null; + }; + + useEffect(() => { + clearPolling(); + getDatasetList(page, pageSize); + PollyRef.current = preciseInterval(() => { + getDatasetList(page, pageSize); + }, refreshTime); + return () => { + clearPolling(); + }; + }, []); + + return ( + + {loading ? ( + + ) : ( +
setOperateFormVisible(false)} + > + { + setSearchKeyword(e.target.value); + getDatasetList(page, pageSize, e.target.value) + }} /> + {datasetList.map((item) => ( + + handleOperate(type, dataset as Dataset) + } + > + ))} +
+ )} +
+ ); +}; + +export default DatasetPage; + +const useStyles = createStyles(({ token }) => { + return { + container: { + "& .search": { + width: "300px", + marginBottom: token.margin, + } + }, + }; +}); diff --git a/src/views/welcome/index.tsx b/src/views/welcome/index.tsx new file mode 100644 index 0000000..e608030 --- /dev/null +++ b/src/views/welcome/index.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import { Layout, Typography, Button } from "antd"; +import Icon from "@/components/Icon"; +import { createStyles } from "antd-style"; + +const WelcomePage: React.FC = () => { + const { styles } = useStyles(); + return ( +
+
+ +
+
+ ); +}; + +export default WelcomePage; + +const useStyles = createStyles(({ token, css }) => { + return { + welcon_icon: css` + /* color: ${token.colorPrimary}; */ + `, + }; +}); diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..61797d9 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + + // "paths": { + // "@demo": ["projects/demo/src"] + // } + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7a2a48f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.app.json", + "files": [], + "references": [], + "include": ["src/**/*", "src/types/**/*", "vite.config.ts"], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + } +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..1d033f9 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true, + "noEmit": true + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..c0c6dab --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import fs from "fs"; +import path, { join } from "path"; +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + "@": join(__dirname, "./src"), + }, + }, +})