balibabu
commited on
Commit
·
bf32bcf
1
Parent(s):
5bc7f36
feat: Add next login page with shadcn/ui #3221 (#3231)
Browse files### What problem does this PR solve?
feat: Add next login page with shadcn/ui #3221
### Type of change
- [x] New Feature (non-breaking change which adds functionality)
- web/.umirc.ts +6 -1
- web/package-lock.json +1506 -83
- web/package.json +19 -0
- web/src/app.tsx +14 -11
- web/src/components/hooks/use-toast.tsx +191 -0
- web/src/components/theme-provider.tsx +73 -0
- web/src/components/ui/button.tsx +56 -0
- web/src/components/ui/card.tsx +86 -0
- web/src/components/ui/checkbox.tsx +30 -0
- web/src/components/ui/dropdown-menu.tsx +200 -0
- web/src/components/ui/form.tsx +179 -0
- web/src/components/ui/input-otp.tsx +71 -0
- web/src/components/ui/input.tsx +25 -0
- web/src/components/ui/label.tsx +26 -0
- web/src/components/ui/select.tsx +160 -0
- web/src/components/ui/separator.tsx +31 -0
- web/src/components/ui/switch.tsx +29 -0
- web/src/components/ui/toast.tsx +129 -0
- web/src/components/ui/toaster.tsx +35 -0
- web/src/lib/utils.ts +6 -0
- web/src/pages/demo.tsx +49 -0
- web/src/pages/login-next/form.tsx +246 -0
- web/src/pages/login-next/index.tsx +88 -0
- web/src/routes.ts +10 -0
- web/tailwind.config.js +86 -0
- web/tailwind.css +83 -0
web/.umirc.ts
CHANGED
|
@@ -19,7 +19,10 @@ export default defineConfig({
|
|
| 19 |
history: {
|
| 20 |
type: 'browser',
|
| 21 |
},
|
| 22 |
-
plugins: [
|
|
|
|
|
|
|
|
|
|
| 23 |
jsMinifier: 'terser',
|
| 24 |
lessLoader: {
|
| 25 |
modifyVars: {
|
|
@@ -38,9 +41,11 @@ export default defineConfig({
|
|
| 38 |
// pathRewrite: { '^/v1': '/v1' },
|
| 39 |
},
|
| 40 |
],
|
|
|
|
| 41 |
chainWebpack(memo, args) {
|
| 42 |
memo.module.rule('markdown').test(/\.md$/).type('asset/source');
|
| 43 |
|
| 44 |
return memo;
|
| 45 |
},
|
|
|
|
| 46 |
});
|
|
|
|
| 19 |
history: {
|
| 20 |
type: 'browser',
|
| 21 |
},
|
| 22 |
+
plugins: [
|
| 23 |
+
'@react-dev-inspector/umi4-plugin',
|
| 24 |
+
'@umijs/plugins/dist/tailwindcss',
|
| 25 |
+
],
|
| 26 |
jsMinifier: 'terser',
|
| 27 |
lessLoader: {
|
| 28 |
modifyVars: {
|
|
|
|
| 41 |
// pathRewrite: { '^/v1': '/v1' },
|
| 42 |
},
|
| 43 |
],
|
| 44 |
+
|
| 45 |
chainWebpack(memo, args) {
|
| 46 |
memo.module.rule('markdown').test(/\.md$/).type('asset/source');
|
| 47 |
|
| 48 |
return memo;
|
| 49 |
},
|
| 50 |
+
tailwindcss: {},
|
| 51 |
});
|
web/package-lock.json
CHANGED
|
@@ -10,15 +10,27 @@
|
|
| 10 |
"@ant-design/pro-components": "^2.6.46",
|
| 11 |
"@ant-design/pro-layout": "^7.17.16",
|
| 12 |
"@antv/g6": "^5.0.10",
|
|
|
|
| 13 |
"@js-preview/excel": "^1.7.8",
|
| 14 |
"@monaco-editor/react": "^4.6.0",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
"@tanstack/react-query": "^5.40.0",
|
| 16 |
"@tanstack/react-query-devtools": "^5.51.5",
|
| 17 |
"@uiw/react-markdown-preview": "^5.1.3",
|
| 18 |
"ahooks": "^3.7.10",
|
| 19 |
"antd": "^5.12.7",
|
| 20 |
"axios": "^1.6.3",
|
|
|
|
| 21 |
"classnames": "^2.5.1",
|
|
|
|
| 22 |
"dayjs": "^1.11.10",
|
| 23 |
"dompurify": "^3.1.6",
|
| 24 |
"eventsource-parser": "^1.1.2",
|
|
@@ -26,15 +38,18 @@
|
|
| 26 |
"i18next": "^23.7.16",
|
| 27 |
"i18next-browser-languagedetector": "^8.0.0",
|
| 28 |
"immer": "^10.1.1",
|
|
|
|
| 29 |
"js-base64": "^3.7.5",
|
| 30 |
"jsencrypt": "^3.3.2",
|
| 31 |
"lodash": "^4.17.21",
|
|
|
|
| 32 |
"mammoth": "^1.7.2",
|
| 33 |
"openai-speech-stream-player": "^1.0.8",
|
| 34 |
"rc-tween-one": "^3.0.6",
|
| 35 |
"react-copy-to-clipboard": "^5.1.0",
|
| 36 |
"react-error-boundary": "^4.0.13",
|
| 37 |
"react-force-graph": "^1.44.4",
|
|
|
|
| 38 |
"react-i18next": "^14.0.0",
|
| 39 |
"react-markdown": "^9.0.1",
|
| 40 |
"react-pdf-highlighter": "^6.1.0",
|
|
@@ -45,10 +60,13 @@
|
|
| 45 |
"recharts": "^2.12.4",
|
| 46 |
"rehype-raw": "^7.0.0",
|
| 47 |
"remark-gfm": "^4.0.0",
|
|
|
|
|
|
|
| 48 |
"umi": "^4.0.90",
|
| 49 |
"umi-request": "^1.4.0",
|
| 50 |
"unist-util-visit-parents": "^6.0.1",
|
| 51 |
"uuid": "^9.0.1",
|
|
|
|
| 52 |
"zustand": "^4.5.2"
|
| 53 |
},
|
| 54 |
"devDependencies": {
|
|
@@ -79,6 +97,7 @@
|
|
| 79 |
"prettier-plugin-packagejson": "^2.4.9",
|
| 80 |
"react-dev-inspector": "^2.0.1",
|
| 81 |
"remark-loader": "^6.0.0",
|
|
|
|
| 82 |
"ts-node": "^10.9.2",
|
| 83 |
"typescript": "^5.0.3",
|
| 84 |
"umi-plugin-icons": "^0.1.1"
|
|
@@ -99,6 +118,17 @@
|
|
| 99 |
"integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==",
|
| 100 |
"dev": true
|
| 101 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
"node_modules/@ampproject/remapping": {
|
| 103 |
"version": "2.2.1",
|
| 104 |
"resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz",
|
|
@@ -1279,7 +1309,7 @@
|
|
| 1279 |
"version": "0.8.1",
|
| 1280 |
"resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
|
| 1281 |
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
|
| 1282 |
-
"
|
| 1283 |
"dependencies": {
|
| 1284 |
"@jridgewell/trace-mapping": "0.3.9"
|
| 1285 |
},
|
|
@@ -1291,7 +1321,7 @@
|
|
| 1291 |
"version": "0.3.9",
|
| 1292 |
"resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
|
| 1293 |
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
|
| 1294 |
-
"
|
| 1295 |
"dependencies": {
|
| 1296 |
"@jridgewell/resolve-uri": "^3.0.3",
|
| 1297 |
"@jridgewell/sourcemap-codec": "^1.4.10"
|
|
@@ -2403,6 +2433,11 @@
|
|
| 2403 |
"use-isomorphic-layout-effect": "^1.1.1"
|
| 2404 |
}
|
| 2405 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2406 |
"node_modules/@formatjs/intl-displaynames": {
|
| 2407 |
"version": "1.2.10",
|
| 2408 |
"resolved": "https://registry.npmmirror.com/@formatjs/intl-displaynames/-/intl-displaynames-1.2.10.tgz",
|
|
@@ -2447,6 +2482,14 @@
|
|
| 2447 |
"deprecated": "the package is rather renamed to @formatjs/ecma-abstract with some changes in functionality (primarily selectUnit is removed and we don't plan to make any further changes to this package",
|
| 2448 |
"dev": true
|
| 2449 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2450 |
"node_modules/@humanwhocodes/config-array": {
|
| 2451 |
"version": "0.11.13",
|
| 2452 |
"resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
|
|
@@ -3936,77 +3979,862 @@
|
|
| 3936 |
"node": ">= 8"
|
| 3937 |
}
|
| 3938 |
},
|
| 3939 |
-
"node_modules/@pkgjs/parseargs": {
|
| 3940 |
-
"version": "0.11.0",
|
| 3941 |
-
"resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
| 3942 |
-
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
|
| 3943 |
-
"optional": true,
|
| 3944 |
-
"engines": {
|
| 3945 |
-
"node": ">=14"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3946 |
}
|
| 3947 |
},
|
| 3948 |
-
"node_modules/@
|
| 3949 |
-
"version": "
|
| 3950 |
-
"resolved": "https://registry.npmmirror.com/@
|
| 3951 |
-
"integrity": "sha512-
|
| 3952 |
-
"
|
| 3953 |
-
|
| 3954 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3955 |
}
|
| 3956 |
},
|
| 3957 |
-
"node_modules/@
|
| 3958 |
-
"version": "
|
| 3959 |
-
"resolved": "https://registry.npmmirror.com/@
|
| 3960 |
-
"integrity": "sha512-
|
| 3961 |
"dependencies": {
|
| 3962 |
-
"
|
| 3963 |
-
"fast-glob": "^3.3.0",
|
| 3964 |
-
"is-glob": "^4.0.3",
|
| 3965 |
-
"open": "^9.1.0",
|
| 3966 |
-
"picocolors": "^1.0.0",
|
| 3967 |
-
"tslib": "^2.6.0"
|
| 3968 |
},
|
| 3969 |
-
"
|
| 3970 |
-
"
|
| 3971 |
-
|
| 3972 |
-
|
| 3973 |
-
|
| 3974 |
-
|
| 3975 |
-
|
| 3976 |
-
|
| 3977 |
-
"engines": {
|
| 3978 |
-
"node": ">=12"
|
| 3979 |
}
|
| 3980 |
},
|
| 3981 |
-
"node_modules/@
|
| 3982 |
-
"version": "
|
| 3983 |
-
"resolved": "https://registry.npmmirror.com/
|
| 3984 |
-
"integrity": "sha512-
|
| 3985 |
"dependencies": {
|
| 3986 |
-
"@
|
| 3987 |
-
"@nodelib/fs.walk": "^1.2.3",
|
| 3988 |
-
"glob-parent": "^5.1.2",
|
| 3989 |
-
"merge2": "^1.3.0",
|
| 3990 |
-
"micromatch": "^4.0.4"
|
| 3991 |
},
|
| 3992 |
-
"
|
| 3993 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3994 |
}
|
| 3995 |
},
|
| 3996 |
-
"node_modules/@
|
| 3997 |
-
"version": "
|
| 3998 |
-
"resolved": "https://registry.npmmirror.com/
|
| 3999 |
-
"integrity": "sha512-
|
| 4000 |
"dependencies": {
|
| 4001 |
-
"
|
| 4002 |
-
"define-lazy-prop": "^3.0.0",
|
| 4003 |
-
"is-inside-container": "^1.0.0",
|
| 4004 |
-
"is-wsl": "^2.2.0"
|
| 4005 |
},
|
| 4006 |
-
"
|
| 4007 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4008 |
}
|
| 4009 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4010 |
"node_modules/@rc-component/color-picker": {
|
| 4011 |
"version": "1.5.1",
|
| 4012 |
"resolved": "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-1.5.1.tgz",
|
|
@@ -4891,25 +5719,25 @@
|
|
| 4891 |
"version": "1.0.11",
|
| 4892 |
"resolved": "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.11.tgz",
|
| 4893 |
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
|
| 4894 |
-
"
|
| 4895 |
},
|
| 4896 |
"node_modules/@tsconfig/node12": {
|
| 4897 |
"version": "1.0.11",
|
| 4898 |
"resolved": "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz",
|
| 4899 |
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
|
| 4900 |
-
"
|
| 4901 |
},
|
| 4902 |
"node_modules/@tsconfig/node14": {
|
| 4903 |
"version": "1.0.3",
|
| 4904 |
"resolved": "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz",
|
| 4905 |
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
|
| 4906 |
-
"
|
| 4907 |
},
|
| 4908 |
"node_modules/@tsconfig/node16": {
|
| 4909 |
"version": "1.0.4",
|
| 4910 |
"resolved": "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.4.tgz",
|
| 4911 |
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
|
| 4912 |
-
"
|
| 4913 |
},
|
| 4914 |
"node_modules/@tweenjs/tween.js": {
|
| 4915 |
"version": "23.1.3",
|
|
@@ -5443,7 +6271,7 @@
|
|
| 5443 |
"version": "18.2.18",
|
| 5444 |
"resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.2.18.tgz",
|
| 5445 |
"integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==",
|
| 5446 |
-
"
|
| 5447 |
"dependencies": {
|
| 5448 |
"@types/react": "*"
|
| 5449 |
}
|
|
@@ -7753,7 +8581,7 @@
|
|
| 7753 |
"version": "8.3.2",
|
| 7754 |
"resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.2.tgz",
|
| 7755 |
"integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
|
| 7756 |
-
"
|
| 7757 |
"engines": {
|
| 7758 |
"node": ">=0.4.0"
|
| 7759 |
}
|
|
@@ -8038,6 +8866,11 @@
|
|
| 8038 |
"dayjs": "*"
|
| 8039 |
}
|
| 8040 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8041 |
"node_modules/anymatch": {
|
| 8042 |
"version": "3.1.3",
|
| 8043 |
"resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
|
|
@@ -8054,7 +8887,7 @@
|
|
| 8054 |
"version": "4.1.3",
|
| 8055 |
"resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz",
|
| 8056 |
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
|
| 8057 |
-
"
|
| 8058 |
},
|
| 8059 |
"node_modules/argparse": {
|
| 8060 |
"version": "1.0.10",
|
|
@@ -9130,6 +9963,14 @@
|
|
| 9130 |
"node": ">=10"
|
| 9131 |
}
|
| 9132 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9133 |
"node_modules/camelcase-keys": {
|
| 9134 |
"version": "6.2.2",
|
| 9135 |
"resolved": "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
|
|
@@ -9332,6 +10173,25 @@
|
|
| 9332 |
"node": ">= 0.4"
|
| 9333 |
}
|
| 9334 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9335 |
"node_modules/classcat": {
|
| 9336 |
"version": "5.0.5",
|
| 9337 |
"resolved": "https://registry.npmmirror.com/classcat/-/classcat-5.0.5.tgz",
|
|
@@ -9534,9 +10394,9 @@
|
|
| 9534 |
}
|
| 9535 |
},
|
| 9536 |
"node_modules/clsx": {
|
| 9537 |
-
"version": "2.1.
|
| 9538 |
-
"resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.
|
| 9539 |
-
"integrity": "sha512-
|
| 9540 |
"engines": {
|
| 9541 |
"node": ">=6"
|
| 9542 |
}
|
|
@@ -10311,7 +11171,7 @@
|
|
| 10311 |
"version": "1.1.1",
|
| 10312 |
"resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz",
|
| 10313 |
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
| 10314 |
-
"
|
| 10315 |
},
|
| 10316 |
"node_modules/cross-env": {
|
| 10317 |
"version": "7.0.3",
|
|
@@ -11305,6 +12165,11 @@
|
|
| 11305 |
"resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz",
|
| 11306 |
"integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
|
| 11307 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11308 |
"node_modules/detect-port-alt": {
|
| 11309 |
"version": "1.1.6",
|
| 11310 |
"resolved": "https://registry.npmmirror.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz",
|
|
@@ -11345,11 +12210,16 @@
|
|
| 11345 |
"dequal": "^2.0.0"
|
| 11346 |
}
|
| 11347 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11348 |
"node_modules/diff": {
|
| 11349 |
"version": "4.0.2",
|
| 11350 |
"resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz",
|
| 11351 |
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
|
| 11352 |
-
"
|
| 11353 |
"engines": {
|
| 11354 |
"node": ">=0.3.1"
|
| 11355 |
}
|
|
@@ -11406,6 +12276,11 @@
|
|
| 11406 |
"url": "https://github.com/sponsors/wooorm"
|
| 11407 |
}
|
| 11408 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11409 |
"node_modules/doctrine": {
|
| 11410 |
"version": "3.0.0",
|
| 11411 |
"resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz",
|
|
@@ -13627,6 +14502,14 @@
|
|
| 13627 |
"node": ">= 0.4"
|
| 13628 |
}
|
| 13629 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13630 |
"node_modules/get-package-type": {
|
| 13631 |
"version": "0.1.0",
|
| 13632 |
"resolved": "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz",
|
|
@@ -14913,6 +15796,15 @@
|
|
| 14913 |
"resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.2.2.tgz",
|
| 14914 |
"integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ=="
|
| 14915 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14916 |
"node_modules/insert-css": {
|
| 14917 |
"version": "2.0.0",
|
| 14918 |
"resolved": "https://registry.npmmirror.com/insert-css/-/insert-css-2.0.0.tgz",
|
|
@@ -18081,6 +18973,14 @@
|
|
| 18081 |
"node": ">=8"
|
| 18082 |
}
|
| 18083 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18084 |
"node_modules/js-base64": {
|
| 18085 |
"version": "3.7.5",
|
| 18086 |
"resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz",
|
|
@@ -18590,7 +19490,6 @@
|
|
| 18590 |
"version": "3.1.2",
|
| 18591 |
"resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.2.tgz",
|
| 18592 |
"integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
|
| 18593 |
-
"dev": true,
|
| 18594 |
"engines": {
|
| 18595 |
"node": ">=14"
|
| 18596 |
},
|
|
@@ -19229,6 +20128,14 @@
|
|
| 19229 |
"yallist": "^3.0.2"
|
| 19230 |
}
|
| 19231 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19232 |
"node_modules/lz-string": {
|
| 19233 |
"version": "1.5.0",
|
| 19234 |
"resolved": "https://registry.npmmirror.com/lz-string/-/lz-string-1.5.0.tgz",
|
|
@@ -19264,7 +20171,7 @@
|
|
| 19264 |
"version": "1.3.6",
|
| 19265 |
"resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz",
|
| 19266 |
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
|
| 19267 |
-
"
|
| 19268 |
},
|
| 19269 |
"node_modules/makeerror": {
|
| 19270 |
"version": "1.0.12",
|
|
@@ -20078,9 +20985,9 @@
|
|
| 20078 |
}
|
| 20079 |
},
|
| 20080 |
"node_modules/minipass": {
|
| 20081 |
-
"version": "7.1.
|
| 20082 |
-
"resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.
|
| 20083 |
-
"integrity": "sha512-
|
| 20084 |
"engines": {
|
| 20085 |
"node": ">=16 || 14 >=14.17"
|
| 20086 |
}
|
|
@@ -20175,6 +21082,16 @@
|
|
| 20175 |
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
|
| 20176 |
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
| 20177 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20178 |
"node_modules/nanoid": {
|
| 20179 |
"version": "3.3.7",
|
| 20180 |
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
|
|
@@ -20647,6 +21564,14 @@
|
|
| 20647 |
"node": ">=0.10.0"
|
| 20648 |
}
|
| 20649 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20650 |
"node_modules/object-inspect": {
|
| 20651 |
"version": "1.13.1",
|
| 20652 |
"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz",
|
|
@@ -20999,6 +21924,11 @@
|
|
| 20999 |
"node": ">=6"
|
| 21000 |
}
|
| 21001 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21002 |
"node_modules/pako": {
|
| 21003 |
"version": "1.0.11",
|
| 21004 |
"resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
|
|
@@ -21730,6 +22660,38 @@
|
|
| 21730 |
"postcss": "^8.2"
|
| 21731 |
}
|
| 21732 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21733 |
"node_modules/postcss-initial": {
|
| 21734 |
"version": "4.0.1",
|
| 21735 |
"resolved": "https://registry.npmmirror.com/postcss-initial/-/postcss-initial-4.0.1.tgz",
|
|
@@ -21738,6 +22700,24 @@
|
|
| 21738 |
"postcss": "^8.0.0"
|
| 21739 |
}
|
| 21740 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21741 |
"node_modules/postcss-lab-function": {
|
| 21742 |
"version": "4.2.1",
|
| 21743 |
"resolved": "https://registry.npmmirror.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz",
|
|
@@ -21753,6 +22733,51 @@
|
|
| 21753 |
"postcss": "^8.2"
|
| 21754 |
}
|
| 21755 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21756 |
"node_modules/postcss-logical": {
|
| 21757 |
"version": "5.0.4",
|
| 21758 |
"resolved": "https://registry.npmmirror.com/postcss-logical/-/postcss-logical-5.0.4.tgz",
|
|
@@ -21827,13 +22852,37 @@
|
|
| 21827 |
"resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
|
| 21828 |
"integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
|
| 21829 |
"dependencies": {
|
| 21830 |
-
"icss-utils": "^5.0.0"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21831 |
},
|
| 21832 |
"engines": {
|
| 21833 |
-
"node": "
|
| 21834 |
},
|
| 21835 |
"peerDependencies": {
|
| 21836 |
-
"postcss": "^8.
|
| 21837 |
}
|
| 21838 |
},
|
| 21839 |
"node_modules/postcss-nesting": {
|
|
@@ -22016,9 +23065,9 @@
|
|
| 22016 |
}
|
| 22017 |
},
|
| 22018 |
"node_modules/postcss-selector-parser": {
|
| 22019 |
-
"version": "6.
|
| 22020 |
-
"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.
|
| 22021 |
-
"integrity": "sha512-
|
| 22022 |
"dependencies": {
|
| 22023 |
"cssesc": "^3.0.0",
|
| 22024 |
"util-deprecate": "^1.0.2"
|
|
@@ -23456,6 +24505,21 @@
|
|
| 23456 |
"react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0"
|
| 23457 |
}
|
| 23458 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23459 |
"node_modules/react-i18next": {
|
| 23460 |
"version": "14.0.0",
|
| 23461 |
"resolved": "https://registry.npmmirror.com/react-i18next/-/react-i18next-14.0.0.tgz",
|
|
@@ -23567,6 +24631,51 @@
|
|
| 23567 |
"node": ">=0.10.0"
|
| 23568 |
}
|
| 23569 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23570 |
"node_modules/react-rnd": {
|
| 23571 |
"version": "10.4.1",
|
| 23572 |
"resolved": "https://registry.npmmirror.com/react-rnd/-/react-rnd-10.4.1.tgz",
|
|
@@ -23706,6 +24815,28 @@
|
|
| 23706 |
"node": ">=0.12.0"
|
| 23707 |
}
|
| 23708 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23709 |
"node_modules/react-syntax-highlighter": {
|
| 23710 |
"version": "15.5.0",
|
| 23711 |
"resolved": "https://registry.npmmirror.com/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz",
|
|
@@ -23769,6 +24900,22 @@
|
|
| 23769 |
"react-dom": ">=17"
|
| 23770 |
}
|
| 23771 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23772 |
"node_modules/read-pkg": {
|
| 23773 |
"version": "5.2.0",
|
| 23774 |
"resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz",
|
|
@@ -26674,6 +27821,90 @@
|
|
| 26674 |
"resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.1.tgz",
|
| 26675 |
"integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ=="
|
| 26676 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26677 |
"node_modules/super-animejs": {
|
| 26678 |
"version": "3.1.0",
|
| 26679 |
"resolved": "https://registry.npmmirror.com/super-animejs/-/super-animejs-3.1.0.tgz",
|
|
@@ -26899,6 +28130,125 @@
|
|
| 26899 |
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
| 26900 |
"peer": true
|
| 26901 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26902 |
"node_modules/tapable": {
|
| 26903 |
"version": "2.2.1",
|
| 26904 |
"resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz",
|
|
@@ -27012,6 +28362,25 @@
|
|
| 27012 |
"resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
|
| 27013 |
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
|
| 27014 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27015 |
"node_modules/thread-stream": {
|
| 27016 |
"version": "0.15.2",
|
| 27017 |
"resolved": "https://registry.npmmirror.com/thread-stream/-/thread-stream-0.15.2.tgz",
|
|
@@ -27309,11 +28678,16 @@
|
|
| 27309 |
"resolved": "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz",
|
| 27310 |
"integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="
|
| 27311 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27312 |
"node_modules/ts-node": {
|
| 27313 |
"version": "10.9.2",
|
| 27314 |
"resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.2.tgz",
|
| 27315 |
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
|
| 27316 |
-
"
|
| 27317 |
"dependencies": {
|
| 27318 |
"@cspotcode/source-map-support": "^0.8.0",
|
| 27319 |
"@tsconfig/node10": "^1.0.7",
|
|
@@ -27993,6 +29367,26 @@
|
|
| 27993 |
"node": ">=0.10.0"
|
| 27994 |
}
|
| 27995 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 27996 |
"node_modules/use-isomorphic-layout-effect": {
|
| 27997 |
"version": "1.1.2",
|
| 27998 |
"resolved": "https://registry.npmmirror.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
|
|
@@ -28006,6 +29400,27 @@
|
|
| 28006 |
}
|
| 28007 |
}
|
| 28008 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28009 |
"node_modules/use-sync-external-store": {
|
| 28010 |
"version": "1.2.0",
|
| 28011 |
"resolved": "https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
|
|
@@ -28127,7 +29542,7 @@
|
|
| 28127 |
"version": "3.0.1",
|
| 28128 |
"resolved": "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
| 28129 |
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
|
| 28130 |
-
"
|
| 28131 |
},
|
| 28132 |
"node_modules/v8-to-istanbul": {
|
| 28133 |
"version": "9.2.0",
|
|
@@ -29240,7 +30655,7 @@
|
|
| 29240 |
"version": "3.1.1",
|
| 29241 |
"resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz",
|
| 29242 |
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
|
| 29243 |
-
"
|
| 29244 |
"engines": {
|
| 29245 |
"node": ">=6"
|
| 29246 |
}
|
|
@@ -29253,6 +30668,14 @@
|
|
| 29253 |
"node": ">=10"
|
| 29254 |
}
|
| 29255 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29256 |
"node_modules/zustand": {
|
| 29257 |
"version": "4.5.2",
|
| 29258 |
"resolved": "https://registry.npmmirror.com/zustand/-/zustand-4.5.2.tgz",
|
|
|
|
| 10 |
"@ant-design/pro-components": "^2.6.46",
|
| 11 |
"@ant-design/pro-layout": "^7.17.16",
|
| 12 |
"@antv/g6": "^5.0.10",
|
| 13 |
+
"@hookform/resolvers": "^3.9.1",
|
| 14 |
"@js-preview/excel": "^1.7.8",
|
| 15 |
"@monaco-editor/react": "^4.6.0",
|
| 16 |
+
"@radix-ui/react-checkbox": "^1.1.2",
|
| 17 |
+
"@radix-ui/react-dropdown-menu": "^2.1.2",
|
| 18 |
+
"@radix-ui/react-icons": "^1.3.1",
|
| 19 |
+
"@radix-ui/react-label": "^2.1.0",
|
| 20 |
+
"@radix-ui/react-select": "^2.1.2",
|
| 21 |
+
"@radix-ui/react-separator": "^1.1.0",
|
| 22 |
+
"@radix-ui/react-slot": "^1.1.0",
|
| 23 |
+
"@radix-ui/react-switch": "^1.1.1",
|
| 24 |
+
"@radix-ui/react-toast": "^1.2.2",
|
| 25 |
"@tanstack/react-query": "^5.40.0",
|
| 26 |
"@tanstack/react-query-devtools": "^5.51.5",
|
| 27 |
"@uiw/react-markdown-preview": "^5.1.3",
|
| 28 |
"ahooks": "^3.7.10",
|
| 29 |
"antd": "^5.12.7",
|
| 30 |
"axios": "^1.6.3",
|
| 31 |
+
"class-variance-authority": "^0.7.0",
|
| 32 |
"classnames": "^2.5.1",
|
| 33 |
+
"clsx": "^2.1.1",
|
| 34 |
"dayjs": "^1.11.10",
|
| 35 |
"dompurify": "^3.1.6",
|
| 36 |
"eventsource-parser": "^1.1.2",
|
|
|
|
| 38 |
"i18next": "^23.7.16",
|
| 39 |
"i18next-browser-languagedetector": "^8.0.0",
|
| 40 |
"immer": "^10.1.1",
|
| 41 |
+
"input-otp": "^1.4.1",
|
| 42 |
"js-base64": "^3.7.5",
|
| 43 |
"jsencrypt": "^3.3.2",
|
| 44 |
"lodash": "^4.17.21",
|
| 45 |
+
"lucide-react": "^0.454.0",
|
| 46 |
"mammoth": "^1.7.2",
|
| 47 |
"openai-speech-stream-player": "^1.0.8",
|
| 48 |
"rc-tween-one": "^3.0.6",
|
| 49 |
"react-copy-to-clipboard": "^5.1.0",
|
| 50 |
"react-error-boundary": "^4.0.13",
|
| 51 |
"react-force-graph": "^1.44.4",
|
| 52 |
+
"react-hook-form": "^7.53.1",
|
| 53 |
"react-i18next": "^14.0.0",
|
| 54 |
"react-markdown": "^9.0.1",
|
| 55 |
"react-pdf-highlighter": "^6.1.0",
|
|
|
|
| 60 |
"recharts": "^2.12.4",
|
| 61 |
"rehype-raw": "^7.0.0",
|
| 62 |
"remark-gfm": "^4.0.0",
|
| 63 |
+
"tailwind-merge": "^2.5.4",
|
| 64 |
+
"tailwindcss-animate": "^1.0.7",
|
| 65 |
"umi": "^4.0.90",
|
| 66 |
"umi-request": "^1.4.0",
|
| 67 |
"unist-util-visit-parents": "^6.0.1",
|
| 68 |
"uuid": "^9.0.1",
|
| 69 |
+
"zod": "^3.23.8",
|
| 70 |
"zustand": "^4.5.2"
|
| 71 |
},
|
| 72 |
"devDependencies": {
|
|
|
|
| 97 |
"prettier-plugin-packagejson": "^2.4.9",
|
| 98 |
"react-dev-inspector": "^2.0.1",
|
| 99 |
"remark-loader": "^6.0.0",
|
| 100 |
+
"tailwindcss": "^3",
|
| 101 |
"ts-node": "^10.9.2",
|
| 102 |
"typescript": "^5.0.3",
|
| 103 |
"umi-plugin-icons": "^0.1.1"
|
|
|
|
| 118 |
"integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==",
|
| 119 |
"dev": true
|
| 120 |
},
|
| 121 |
+
"node_modules/@alloc/quick-lru": {
|
| 122 |
+
"version": "5.2.0",
|
| 123 |
+
"resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
|
| 124 |
+
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
|
| 125 |
+
"engines": {
|
| 126 |
+
"node": ">=10"
|
| 127 |
+
},
|
| 128 |
+
"funding": {
|
| 129 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 130 |
+
}
|
| 131 |
+
},
|
| 132 |
"node_modules/@ampproject/remapping": {
|
| 133 |
"version": "2.2.1",
|
| 134 |
"resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz",
|
|
|
|
| 1309 |
"version": "0.8.1",
|
| 1310 |
"resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
|
| 1311 |
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
|
| 1312 |
+
"devOptional": true,
|
| 1313 |
"dependencies": {
|
| 1314 |
"@jridgewell/trace-mapping": "0.3.9"
|
| 1315 |
},
|
|
|
|
| 1321 |
"version": "0.3.9",
|
| 1322 |
"resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
|
| 1323 |
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
|
| 1324 |
+
"devOptional": true,
|
| 1325 |
"dependencies": {
|
| 1326 |
"@jridgewell/resolve-uri": "^3.0.3",
|
| 1327 |
"@jridgewell/sourcemap-codec": "^1.4.10"
|
|
|
|
| 2433 |
"use-isomorphic-layout-effect": "^1.1.1"
|
| 2434 |
}
|
| 2435 |
},
|
| 2436 |
+
"node_modules/@floating-ui/utils": {
|
| 2437 |
+
"version": "0.2.8",
|
| 2438 |
+
"resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.8.tgz",
|
| 2439 |
+
"integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="
|
| 2440 |
+
},
|
| 2441 |
"node_modules/@formatjs/intl-displaynames": {
|
| 2442 |
"version": "1.2.10",
|
| 2443 |
"resolved": "https://registry.npmmirror.com/@formatjs/intl-displaynames/-/intl-displaynames-1.2.10.tgz",
|
|
|
|
| 2482 |
"deprecated": "the package is rather renamed to @formatjs/ecma-abstract with some changes in functionality (primarily selectUnit is removed and we don't plan to make any further changes to this package",
|
| 2483 |
"dev": true
|
| 2484 |
},
|
| 2485 |
+
"node_modules/@hookform/resolvers": {
|
| 2486 |
+
"version": "3.9.1",
|
| 2487 |
+
"resolved": "https://registry.npmmirror.com/@hookform/resolvers/-/resolvers-3.9.1.tgz",
|
| 2488 |
+
"integrity": "sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==",
|
| 2489 |
+
"peerDependencies": {
|
| 2490 |
+
"react-hook-form": "^7.0.0"
|
| 2491 |
+
}
|
| 2492 |
+
},
|
| 2493 |
"node_modules/@humanwhocodes/config-array": {
|
| 2494 |
"version": "0.11.13",
|
| 2495 |
"resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
|
|
|
|
| 3979 |
"node": ">= 8"
|
| 3980 |
}
|
| 3981 |
},
|
| 3982 |
+
"node_modules/@pkgjs/parseargs": {
|
| 3983 |
+
"version": "0.11.0",
|
| 3984 |
+
"resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
| 3985 |
+
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
|
| 3986 |
+
"optional": true,
|
| 3987 |
+
"engines": {
|
| 3988 |
+
"node": ">=14"
|
| 3989 |
+
}
|
| 3990 |
+
},
|
| 3991 |
+
"node_modules/@pkgr/core": {
|
| 3992 |
+
"version": "0.1.1",
|
| 3993 |
+
"resolved": "https://registry.npmmirror.com/@pkgr/core/-/core-0.1.1.tgz",
|
| 3994 |
+
"integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
|
| 3995 |
+
"dev": true,
|
| 3996 |
+
"engines": {
|
| 3997 |
+
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
|
| 3998 |
+
}
|
| 3999 |
+
},
|
| 4000 |
+
"node_modules/@pkgr/utils": {
|
| 4001 |
+
"version": "2.4.2",
|
| 4002 |
+
"resolved": "https://registry.npmmirror.com/@pkgr/utils/-/utils-2.4.2.tgz",
|
| 4003 |
+
"integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==",
|
| 4004 |
+
"dependencies": {
|
| 4005 |
+
"cross-spawn": "^7.0.3",
|
| 4006 |
+
"fast-glob": "^3.3.0",
|
| 4007 |
+
"is-glob": "^4.0.3",
|
| 4008 |
+
"open": "^9.1.0",
|
| 4009 |
+
"picocolors": "^1.0.0",
|
| 4010 |
+
"tslib": "^2.6.0"
|
| 4011 |
+
},
|
| 4012 |
+
"engines": {
|
| 4013 |
+
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
|
| 4014 |
+
}
|
| 4015 |
+
},
|
| 4016 |
+
"node_modules/@pkgr/utils/node_modules/define-lazy-prop": {
|
| 4017 |
+
"version": "3.0.0",
|
| 4018 |
+
"resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
|
| 4019 |
+
"integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
|
| 4020 |
+
"engines": {
|
| 4021 |
+
"node": ">=12"
|
| 4022 |
+
}
|
| 4023 |
+
},
|
| 4024 |
+
"node_modules/@pkgr/utils/node_modules/fast-glob": {
|
| 4025 |
+
"version": "3.3.2",
|
| 4026 |
+
"resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
|
| 4027 |
+
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
|
| 4028 |
+
"dependencies": {
|
| 4029 |
+
"@nodelib/fs.stat": "^2.0.2",
|
| 4030 |
+
"@nodelib/fs.walk": "^1.2.3",
|
| 4031 |
+
"glob-parent": "^5.1.2",
|
| 4032 |
+
"merge2": "^1.3.0",
|
| 4033 |
+
"micromatch": "^4.0.4"
|
| 4034 |
+
},
|
| 4035 |
+
"engines": {
|
| 4036 |
+
"node": ">=8.6.0"
|
| 4037 |
+
}
|
| 4038 |
+
},
|
| 4039 |
+
"node_modules/@pkgr/utils/node_modules/open": {
|
| 4040 |
+
"version": "9.1.0",
|
| 4041 |
+
"resolved": "https://registry.npmmirror.com/open/-/open-9.1.0.tgz",
|
| 4042 |
+
"integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==",
|
| 4043 |
+
"dependencies": {
|
| 4044 |
+
"default-browser": "^4.0.0",
|
| 4045 |
+
"define-lazy-prop": "^3.0.0",
|
| 4046 |
+
"is-inside-container": "^1.0.0",
|
| 4047 |
+
"is-wsl": "^2.2.0"
|
| 4048 |
+
},
|
| 4049 |
+
"engines": {
|
| 4050 |
+
"node": ">=14.16"
|
| 4051 |
+
}
|
| 4052 |
+
},
|
| 4053 |
+
"node_modules/@radix-ui/number": {
|
| 4054 |
+
"version": "1.1.0",
|
| 4055 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/number/-/number-1.1.0.tgz",
|
| 4056 |
+
"integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ=="
|
| 4057 |
+
},
|
| 4058 |
+
"node_modules/@radix-ui/primitive": {
|
| 4059 |
+
"version": "1.1.0",
|
| 4060 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/primitive/-/primitive-1.1.0.tgz",
|
| 4061 |
+
"integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA=="
|
| 4062 |
+
},
|
| 4063 |
+
"node_modules/@radix-ui/react-arrow": {
|
| 4064 |
+
"version": "1.1.0",
|
| 4065 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz",
|
| 4066 |
+
"integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==",
|
| 4067 |
+
"dependencies": {
|
| 4068 |
+
"@radix-ui/react-primitive": "2.0.0"
|
| 4069 |
+
},
|
| 4070 |
+
"peerDependencies": {
|
| 4071 |
+
"@types/react": "*",
|
| 4072 |
+
"@types/react-dom": "*",
|
| 4073 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4074 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4075 |
+
},
|
| 4076 |
+
"peerDependenciesMeta": {
|
| 4077 |
+
"@types/react": {
|
| 4078 |
+
"optional": true
|
| 4079 |
+
},
|
| 4080 |
+
"@types/react-dom": {
|
| 4081 |
+
"optional": true
|
| 4082 |
+
}
|
| 4083 |
+
}
|
| 4084 |
+
},
|
| 4085 |
+
"node_modules/@radix-ui/react-checkbox": {
|
| 4086 |
+
"version": "1.1.2",
|
| 4087 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-checkbox/-/react-checkbox-1.1.2.tgz",
|
| 4088 |
+
"integrity": "sha512-/i0fl686zaJbDQLNKrkCbMyDm6FQMt4jg323k7HuqitoANm9sE23Ql8yOK3Wusk34HSLKDChhMux05FnP6KUkw==",
|
| 4089 |
+
"dependencies": {
|
| 4090 |
+
"@radix-ui/primitive": "1.1.0",
|
| 4091 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4092 |
+
"@radix-ui/react-context": "1.1.1",
|
| 4093 |
+
"@radix-ui/react-presence": "1.1.1",
|
| 4094 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4095 |
+
"@radix-ui/react-use-controllable-state": "1.1.0",
|
| 4096 |
+
"@radix-ui/react-use-previous": "1.1.0",
|
| 4097 |
+
"@radix-ui/react-use-size": "1.1.0"
|
| 4098 |
+
},
|
| 4099 |
+
"peerDependencies": {
|
| 4100 |
+
"@types/react": "*",
|
| 4101 |
+
"@types/react-dom": "*",
|
| 4102 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4103 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4104 |
+
},
|
| 4105 |
+
"peerDependenciesMeta": {
|
| 4106 |
+
"@types/react": {
|
| 4107 |
+
"optional": true
|
| 4108 |
+
},
|
| 4109 |
+
"@types/react-dom": {
|
| 4110 |
+
"optional": true
|
| 4111 |
+
}
|
| 4112 |
+
}
|
| 4113 |
+
},
|
| 4114 |
+
"node_modules/@radix-ui/react-collection": {
|
| 4115 |
+
"version": "1.1.0",
|
| 4116 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-collection/-/react-collection-1.1.0.tgz",
|
| 4117 |
+
"integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==",
|
| 4118 |
+
"dependencies": {
|
| 4119 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4120 |
+
"@radix-ui/react-context": "1.1.0",
|
| 4121 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4122 |
+
"@radix-ui/react-slot": "1.1.0"
|
| 4123 |
+
},
|
| 4124 |
+
"peerDependencies": {
|
| 4125 |
+
"@types/react": "*",
|
| 4126 |
+
"@types/react-dom": "*",
|
| 4127 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4128 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4129 |
+
},
|
| 4130 |
+
"peerDependenciesMeta": {
|
| 4131 |
+
"@types/react": {
|
| 4132 |
+
"optional": true
|
| 4133 |
+
},
|
| 4134 |
+
"@types/react-dom": {
|
| 4135 |
+
"optional": true
|
| 4136 |
+
}
|
| 4137 |
+
}
|
| 4138 |
+
},
|
| 4139 |
+
"node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": {
|
| 4140 |
+
"version": "1.1.0",
|
| 4141 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-context/-/react-context-1.1.0.tgz",
|
| 4142 |
+
"integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
|
| 4143 |
+
"peerDependencies": {
|
| 4144 |
+
"@types/react": "*",
|
| 4145 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4146 |
+
},
|
| 4147 |
+
"peerDependenciesMeta": {
|
| 4148 |
+
"@types/react": {
|
| 4149 |
+
"optional": true
|
| 4150 |
+
}
|
| 4151 |
+
}
|
| 4152 |
+
},
|
| 4153 |
+
"node_modules/@radix-ui/react-compose-refs": {
|
| 4154 |
+
"version": "1.1.0",
|
| 4155 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz",
|
| 4156 |
+
"integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==",
|
| 4157 |
+
"peerDependencies": {
|
| 4158 |
+
"@types/react": "*",
|
| 4159 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4160 |
+
},
|
| 4161 |
+
"peerDependenciesMeta": {
|
| 4162 |
+
"@types/react": {
|
| 4163 |
+
"optional": true
|
| 4164 |
+
}
|
| 4165 |
+
}
|
| 4166 |
+
},
|
| 4167 |
+
"node_modules/@radix-ui/react-context": {
|
| 4168 |
+
"version": "1.1.1",
|
| 4169 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-context/-/react-context-1.1.1.tgz",
|
| 4170 |
+
"integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==",
|
| 4171 |
+
"peerDependencies": {
|
| 4172 |
+
"@types/react": "*",
|
| 4173 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4174 |
+
},
|
| 4175 |
+
"peerDependenciesMeta": {
|
| 4176 |
+
"@types/react": {
|
| 4177 |
+
"optional": true
|
| 4178 |
+
}
|
| 4179 |
+
}
|
| 4180 |
+
},
|
| 4181 |
+
"node_modules/@radix-ui/react-direction": {
|
| 4182 |
+
"version": "1.1.0",
|
| 4183 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
|
| 4184 |
+
"integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
|
| 4185 |
+
"peerDependencies": {
|
| 4186 |
+
"@types/react": "*",
|
| 4187 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4188 |
+
},
|
| 4189 |
+
"peerDependenciesMeta": {
|
| 4190 |
+
"@types/react": {
|
| 4191 |
+
"optional": true
|
| 4192 |
+
}
|
| 4193 |
+
}
|
| 4194 |
+
},
|
| 4195 |
+
"node_modules/@radix-ui/react-dismissable-layer": {
|
| 4196 |
+
"version": "1.1.1",
|
| 4197 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz",
|
| 4198 |
+
"integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==",
|
| 4199 |
+
"dependencies": {
|
| 4200 |
+
"@radix-ui/primitive": "1.1.0",
|
| 4201 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4202 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4203 |
+
"@radix-ui/react-use-callback-ref": "1.1.0",
|
| 4204 |
+
"@radix-ui/react-use-escape-keydown": "1.1.0"
|
| 4205 |
+
},
|
| 4206 |
+
"peerDependencies": {
|
| 4207 |
+
"@types/react": "*",
|
| 4208 |
+
"@types/react-dom": "*",
|
| 4209 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4210 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4211 |
+
},
|
| 4212 |
+
"peerDependenciesMeta": {
|
| 4213 |
+
"@types/react": {
|
| 4214 |
+
"optional": true
|
| 4215 |
+
},
|
| 4216 |
+
"@types/react-dom": {
|
| 4217 |
+
"optional": true
|
| 4218 |
+
}
|
| 4219 |
+
}
|
| 4220 |
+
},
|
| 4221 |
+
"node_modules/@radix-ui/react-dropdown-menu": {
|
| 4222 |
+
"version": "2.1.2",
|
| 4223 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz",
|
| 4224 |
+
"integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==",
|
| 4225 |
+
"dependencies": {
|
| 4226 |
+
"@radix-ui/primitive": "1.1.0",
|
| 4227 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4228 |
+
"@radix-ui/react-context": "1.1.1",
|
| 4229 |
+
"@radix-ui/react-id": "1.1.0",
|
| 4230 |
+
"@radix-ui/react-menu": "2.1.2",
|
| 4231 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4232 |
+
"@radix-ui/react-use-controllable-state": "1.1.0"
|
| 4233 |
+
},
|
| 4234 |
+
"peerDependencies": {
|
| 4235 |
+
"@types/react": "*",
|
| 4236 |
+
"@types/react-dom": "*",
|
| 4237 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4238 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4239 |
+
},
|
| 4240 |
+
"peerDependenciesMeta": {
|
| 4241 |
+
"@types/react": {
|
| 4242 |
+
"optional": true
|
| 4243 |
+
},
|
| 4244 |
+
"@types/react-dom": {
|
| 4245 |
+
"optional": true
|
| 4246 |
+
}
|
| 4247 |
+
}
|
| 4248 |
+
},
|
| 4249 |
+
"node_modules/@radix-ui/react-focus-guards": {
|
| 4250 |
+
"version": "1.1.1",
|
| 4251 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz",
|
| 4252 |
+
"integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==",
|
| 4253 |
+
"peerDependencies": {
|
| 4254 |
+
"@types/react": "*",
|
| 4255 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4256 |
+
},
|
| 4257 |
+
"peerDependenciesMeta": {
|
| 4258 |
+
"@types/react": {
|
| 4259 |
+
"optional": true
|
| 4260 |
+
}
|
| 4261 |
+
}
|
| 4262 |
+
},
|
| 4263 |
+
"node_modules/@radix-ui/react-focus-scope": {
|
| 4264 |
+
"version": "1.1.0",
|
| 4265 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz",
|
| 4266 |
+
"integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==",
|
| 4267 |
+
"dependencies": {
|
| 4268 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4269 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4270 |
+
"@radix-ui/react-use-callback-ref": "1.1.0"
|
| 4271 |
+
},
|
| 4272 |
+
"peerDependencies": {
|
| 4273 |
+
"@types/react": "*",
|
| 4274 |
+
"@types/react-dom": "*",
|
| 4275 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4276 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4277 |
+
},
|
| 4278 |
+
"peerDependenciesMeta": {
|
| 4279 |
+
"@types/react": {
|
| 4280 |
+
"optional": true
|
| 4281 |
+
},
|
| 4282 |
+
"@types/react-dom": {
|
| 4283 |
+
"optional": true
|
| 4284 |
+
}
|
| 4285 |
+
}
|
| 4286 |
+
},
|
| 4287 |
+
"node_modules/@radix-ui/react-icons": {
|
| 4288 |
+
"version": "1.3.1",
|
| 4289 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-icons/-/react-icons-1.3.1.tgz",
|
| 4290 |
+
"integrity": "sha512-QvYompk0X+8Yjlo/Fv4McrzxohDdM5GgLHyQcPpcsPvlOSXCGFjdbuyGL5dzRbg0GpknAjQJJZzdiRK7iWVuFQ==",
|
| 4291 |
+
"peerDependencies": {
|
| 4292 |
+
"react": "^16.x || ^17.x || ^18.x || ^19.x"
|
| 4293 |
+
}
|
| 4294 |
+
},
|
| 4295 |
+
"node_modules/@radix-ui/react-id": {
|
| 4296 |
+
"version": "1.1.0",
|
| 4297 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-id/-/react-id-1.1.0.tgz",
|
| 4298 |
+
"integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
|
| 4299 |
+
"dependencies": {
|
| 4300 |
+
"@radix-ui/react-use-layout-effect": "1.1.0"
|
| 4301 |
+
},
|
| 4302 |
+
"peerDependencies": {
|
| 4303 |
+
"@types/react": "*",
|
| 4304 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4305 |
+
},
|
| 4306 |
+
"peerDependenciesMeta": {
|
| 4307 |
+
"@types/react": {
|
| 4308 |
+
"optional": true
|
| 4309 |
+
}
|
| 4310 |
+
}
|
| 4311 |
+
},
|
| 4312 |
+
"node_modules/@radix-ui/react-label": {
|
| 4313 |
+
"version": "2.1.0",
|
| 4314 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-label/-/react-label-2.1.0.tgz",
|
| 4315 |
+
"integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==",
|
| 4316 |
+
"dependencies": {
|
| 4317 |
+
"@radix-ui/react-primitive": "2.0.0"
|
| 4318 |
+
},
|
| 4319 |
+
"peerDependencies": {
|
| 4320 |
+
"@types/react": "*",
|
| 4321 |
+
"@types/react-dom": "*",
|
| 4322 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4323 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4324 |
+
},
|
| 4325 |
+
"peerDependenciesMeta": {
|
| 4326 |
+
"@types/react": {
|
| 4327 |
+
"optional": true
|
| 4328 |
+
},
|
| 4329 |
+
"@types/react-dom": {
|
| 4330 |
+
"optional": true
|
| 4331 |
+
}
|
| 4332 |
+
}
|
| 4333 |
+
},
|
| 4334 |
+
"node_modules/@radix-ui/react-menu": {
|
| 4335 |
+
"version": "2.1.2",
|
| 4336 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-menu/-/react-menu-2.1.2.tgz",
|
| 4337 |
+
"integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==",
|
| 4338 |
+
"dependencies": {
|
| 4339 |
+
"@radix-ui/primitive": "1.1.0",
|
| 4340 |
+
"@radix-ui/react-collection": "1.1.0",
|
| 4341 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4342 |
+
"@radix-ui/react-context": "1.1.1",
|
| 4343 |
+
"@radix-ui/react-direction": "1.1.0",
|
| 4344 |
+
"@radix-ui/react-dismissable-layer": "1.1.1",
|
| 4345 |
+
"@radix-ui/react-focus-guards": "1.1.1",
|
| 4346 |
+
"@radix-ui/react-focus-scope": "1.1.0",
|
| 4347 |
+
"@radix-ui/react-id": "1.1.0",
|
| 4348 |
+
"@radix-ui/react-popper": "1.2.0",
|
| 4349 |
+
"@radix-ui/react-portal": "1.1.2",
|
| 4350 |
+
"@radix-ui/react-presence": "1.1.1",
|
| 4351 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4352 |
+
"@radix-ui/react-roving-focus": "1.1.0",
|
| 4353 |
+
"@radix-ui/react-slot": "1.1.0",
|
| 4354 |
+
"@radix-ui/react-use-callback-ref": "1.1.0",
|
| 4355 |
+
"aria-hidden": "^1.1.1",
|
| 4356 |
+
"react-remove-scroll": "2.6.0"
|
| 4357 |
+
},
|
| 4358 |
+
"peerDependencies": {
|
| 4359 |
+
"@types/react": "*",
|
| 4360 |
+
"@types/react-dom": "*",
|
| 4361 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4362 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4363 |
+
},
|
| 4364 |
+
"peerDependenciesMeta": {
|
| 4365 |
+
"@types/react": {
|
| 4366 |
+
"optional": true
|
| 4367 |
+
},
|
| 4368 |
+
"@types/react-dom": {
|
| 4369 |
+
"optional": true
|
| 4370 |
+
}
|
| 4371 |
+
}
|
| 4372 |
+
},
|
| 4373 |
+
"node_modules/@radix-ui/react-popper": {
|
| 4374 |
+
"version": "1.2.0",
|
| 4375 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-popper/-/react-popper-1.2.0.tgz",
|
| 4376 |
+
"integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==",
|
| 4377 |
+
"dependencies": {
|
| 4378 |
+
"@floating-ui/react-dom": "^2.0.0",
|
| 4379 |
+
"@radix-ui/react-arrow": "1.1.0",
|
| 4380 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4381 |
+
"@radix-ui/react-context": "1.1.0",
|
| 4382 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4383 |
+
"@radix-ui/react-use-callback-ref": "1.1.0",
|
| 4384 |
+
"@radix-ui/react-use-layout-effect": "1.1.0",
|
| 4385 |
+
"@radix-ui/react-use-rect": "1.1.0",
|
| 4386 |
+
"@radix-ui/react-use-size": "1.1.0",
|
| 4387 |
+
"@radix-ui/rect": "1.1.0"
|
| 4388 |
+
},
|
| 4389 |
+
"peerDependencies": {
|
| 4390 |
+
"@types/react": "*",
|
| 4391 |
+
"@types/react-dom": "*",
|
| 4392 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4393 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4394 |
+
},
|
| 4395 |
+
"peerDependenciesMeta": {
|
| 4396 |
+
"@types/react": {
|
| 4397 |
+
"optional": true
|
| 4398 |
+
},
|
| 4399 |
+
"@types/react-dom": {
|
| 4400 |
+
"optional": true
|
| 4401 |
+
}
|
| 4402 |
+
}
|
| 4403 |
+
},
|
| 4404 |
+
"node_modules/@radix-ui/react-popper/node_modules/@floating-ui/core": {
|
| 4405 |
+
"version": "1.6.8",
|
| 4406 |
+
"resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.8.tgz",
|
| 4407 |
+
"integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
|
| 4408 |
+
"dependencies": {
|
| 4409 |
+
"@floating-ui/utils": "^0.2.8"
|
| 4410 |
+
}
|
| 4411 |
+
},
|
| 4412 |
+
"node_modules/@radix-ui/react-popper/node_modules/@floating-ui/dom": {
|
| 4413 |
+
"version": "1.6.12",
|
| 4414 |
+
"resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.12.tgz",
|
| 4415 |
+
"integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
|
| 4416 |
+
"dependencies": {
|
| 4417 |
+
"@floating-ui/core": "^1.6.0",
|
| 4418 |
+
"@floating-ui/utils": "^0.2.8"
|
| 4419 |
+
}
|
| 4420 |
+
},
|
| 4421 |
+
"node_modules/@radix-ui/react-popper/node_modules/@floating-ui/react-dom": {
|
| 4422 |
+
"version": "2.1.2",
|
| 4423 |
+
"resolved": "https://registry.npmmirror.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
|
| 4424 |
+
"integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
|
| 4425 |
+
"dependencies": {
|
| 4426 |
+
"@floating-ui/dom": "^1.0.0"
|
| 4427 |
+
},
|
| 4428 |
+
"peerDependencies": {
|
| 4429 |
+
"react": ">=16.8.0",
|
| 4430 |
+
"react-dom": ">=16.8.0"
|
| 4431 |
+
}
|
| 4432 |
+
},
|
| 4433 |
+
"node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": {
|
| 4434 |
+
"version": "1.1.0",
|
| 4435 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-context/-/react-context-1.1.0.tgz",
|
| 4436 |
+
"integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
|
| 4437 |
+
"peerDependencies": {
|
| 4438 |
+
"@types/react": "*",
|
| 4439 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4440 |
+
},
|
| 4441 |
+
"peerDependenciesMeta": {
|
| 4442 |
+
"@types/react": {
|
| 4443 |
+
"optional": true
|
| 4444 |
+
}
|
| 4445 |
+
}
|
| 4446 |
+
},
|
| 4447 |
+
"node_modules/@radix-ui/react-portal": {
|
| 4448 |
+
"version": "1.1.2",
|
| 4449 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-portal/-/react-portal-1.1.2.tgz",
|
| 4450 |
+
"integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==",
|
| 4451 |
+
"dependencies": {
|
| 4452 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4453 |
+
"@radix-ui/react-use-layout-effect": "1.1.0"
|
| 4454 |
+
},
|
| 4455 |
+
"peerDependencies": {
|
| 4456 |
+
"@types/react": "*",
|
| 4457 |
+
"@types/react-dom": "*",
|
| 4458 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4459 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4460 |
+
},
|
| 4461 |
+
"peerDependenciesMeta": {
|
| 4462 |
+
"@types/react": {
|
| 4463 |
+
"optional": true
|
| 4464 |
+
},
|
| 4465 |
+
"@types/react-dom": {
|
| 4466 |
+
"optional": true
|
| 4467 |
+
}
|
| 4468 |
+
}
|
| 4469 |
+
},
|
| 4470 |
+
"node_modules/@radix-ui/react-presence": {
|
| 4471 |
+
"version": "1.1.1",
|
| 4472 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-presence/-/react-presence-1.1.1.tgz",
|
| 4473 |
+
"integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==",
|
| 4474 |
+
"dependencies": {
|
| 4475 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4476 |
+
"@radix-ui/react-use-layout-effect": "1.1.0"
|
| 4477 |
+
},
|
| 4478 |
+
"peerDependencies": {
|
| 4479 |
+
"@types/react": "*",
|
| 4480 |
+
"@types/react-dom": "*",
|
| 4481 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4482 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4483 |
+
},
|
| 4484 |
+
"peerDependenciesMeta": {
|
| 4485 |
+
"@types/react": {
|
| 4486 |
+
"optional": true
|
| 4487 |
+
},
|
| 4488 |
+
"@types/react-dom": {
|
| 4489 |
+
"optional": true
|
| 4490 |
+
}
|
| 4491 |
+
}
|
| 4492 |
+
},
|
| 4493 |
+
"node_modules/@radix-ui/react-primitive": {
|
| 4494 |
+
"version": "2.0.0",
|
| 4495 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz",
|
| 4496 |
+
"integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==",
|
| 4497 |
+
"dependencies": {
|
| 4498 |
+
"@radix-ui/react-slot": "1.1.0"
|
| 4499 |
+
},
|
| 4500 |
+
"peerDependencies": {
|
| 4501 |
+
"@types/react": "*",
|
| 4502 |
+
"@types/react-dom": "*",
|
| 4503 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4504 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4505 |
+
},
|
| 4506 |
+
"peerDependenciesMeta": {
|
| 4507 |
+
"@types/react": {
|
| 4508 |
+
"optional": true
|
| 4509 |
+
},
|
| 4510 |
+
"@types/react-dom": {
|
| 4511 |
+
"optional": true
|
| 4512 |
+
}
|
| 4513 |
+
}
|
| 4514 |
+
},
|
| 4515 |
+
"node_modules/@radix-ui/react-roving-focus": {
|
| 4516 |
+
"version": "1.1.0",
|
| 4517 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz",
|
| 4518 |
+
"integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==",
|
| 4519 |
+
"dependencies": {
|
| 4520 |
+
"@radix-ui/primitive": "1.1.0",
|
| 4521 |
+
"@radix-ui/react-collection": "1.1.0",
|
| 4522 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4523 |
+
"@radix-ui/react-context": "1.1.0",
|
| 4524 |
+
"@radix-ui/react-direction": "1.1.0",
|
| 4525 |
+
"@radix-ui/react-id": "1.1.0",
|
| 4526 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4527 |
+
"@radix-ui/react-use-callback-ref": "1.1.0",
|
| 4528 |
+
"@radix-ui/react-use-controllable-state": "1.1.0"
|
| 4529 |
+
},
|
| 4530 |
+
"peerDependencies": {
|
| 4531 |
+
"@types/react": "*",
|
| 4532 |
+
"@types/react-dom": "*",
|
| 4533 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4534 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4535 |
+
},
|
| 4536 |
+
"peerDependenciesMeta": {
|
| 4537 |
+
"@types/react": {
|
| 4538 |
+
"optional": true
|
| 4539 |
+
},
|
| 4540 |
+
"@types/react-dom": {
|
| 4541 |
+
"optional": true
|
| 4542 |
+
}
|
| 4543 |
+
}
|
| 4544 |
+
},
|
| 4545 |
+
"node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": {
|
| 4546 |
+
"version": "1.1.0",
|
| 4547 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-context/-/react-context-1.1.0.tgz",
|
| 4548 |
+
"integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
|
| 4549 |
+
"peerDependencies": {
|
| 4550 |
+
"@types/react": "*",
|
| 4551 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4552 |
+
},
|
| 4553 |
+
"peerDependenciesMeta": {
|
| 4554 |
+
"@types/react": {
|
| 4555 |
+
"optional": true
|
| 4556 |
+
}
|
| 4557 |
+
}
|
| 4558 |
+
},
|
| 4559 |
+
"node_modules/@radix-ui/react-select": {
|
| 4560 |
+
"version": "2.1.2",
|
| 4561 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-select/-/react-select-2.1.2.tgz",
|
| 4562 |
+
"integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==",
|
| 4563 |
+
"dependencies": {
|
| 4564 |
+
"@radix-ui/number": "1.1.0",
|
| 4565 |
+
"@radix-ui/primitive": "1.1.0",
|
| 4566 |
+
"@radix-ui/react-collection": "1.1.0",
|
| 4567 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4568 |
+
"@radix-ui/react-context": "1.1.1",
|
| 4569 |
+
"@radix-ui/react-direction": "1.1.0",
|
| 4570 |
+
"@radix-ui/react-dismissable-layer": "1.1.1",
|
| 4571 |
+
"@radix-ui/react-focus-guards": "1.1.1",
|
| 4572 |
+
"@radix-ui/react-focus-scope": "1.1.0",
|
| 4573 |
+
"@radix-ui/react-id": "1.1.0",
|
| 4574 |
+
"@radix-ui/react-popper": "1.2.0",
|
| 4575 |
+
"@radix-ui/react-portal": "1.1.2",
|
| 4576 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4577 |
+
"@radix-ui/react-slot": "1.1.0",
|
| 4578 |
+
"@radix-ui/react-use-callback-ref": "1.1.0",
|
| 4579 |
+
"@radix-ui/react-use-controllable-state": "1.1.0",
|
| 4580 |
+
"@radix-ui/react-use-layout-effect": "1.1.0",
|
| 4581 |
+
"@radix-ui/react-use-previous": "1.1.0",
|
| 4582 |
+
"@radix-ui/react-visually-hidden": "1.1.0",
|
| 4583 |
+
"aria-hidden": "^1.1.1",
|
| 4584 |
+
"react-remove-scroll": "2.6.0"
|
| 4585 |
+
},
|
| 4586 |
+
"peerDependencies": {
|
| 4587 |
+
"@types/react": "*",
|
| 4588 |
+
"@types/react-dom": "*",
|
| 4589 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4590 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4591 |
+
},
|
| 4592 |
+
"peerDependenciesMeta": {
|
| 4593 |
+
"@types/react": {
|
| 4594 |
+
"optional": true
|
| 4595 |
+
},
|
| 4596 |
+
"@types/react-dom": {
|
| 4597 |
+
"optional": true
|
| 4598 |
+
}
|
| 4599 |
+
}
|
| 4600 |
+
},
|
| 4601 |
+
"node_modules/@radix-ui/react-separator": {
|
| 4602 |
+
"version": "1.1.0",
|
| 4603 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-separator/-/react-separator-1.1.0.tgz",
|
| 4604 |
+
"integrity": "sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==",
|
| 4605 |
+
"dependencies": {
|
| 4606 |
+
"@radix-ui/react-primitive": "2.0.0"
|
| 4607 |
+
},
|
| 4608 |
+
"peerDependencies": {
|
| 4609 |
+
"@types/react": "*",
|
| 4610 |
+
"@types/react-dom": "*",
|
| 4611 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4612 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4613 |
+
},
|
| 4614 |
+
"peerDependenciesMeta": {
|
| 4615 |
+
"@types/react": {
|
| 4616 |
+
"optional": true
|
| 4617 |
+
},
|
| 4618 |
+
"@types/react-dom": {
|
| 4619 |
+
"optional": true
|
| 4620 |
+
}
|
| 4621 |
+
}
|
| 4622 |
+
},
|
| 4623 |
+
"node_modules/@radix-ui/react-slot": {
|
| 4624 |
+
"version": "1.1.0",
|
| 4625 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-slot/-/react-slot-1.1.0.tgz",
|
| 4626 |
+
"integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==",
|
| 4627 |
+
"dependencies": {
|
| 4628 |
+
"@radix-ui/react-compose-refs": "1.1.0"
|
| 4629 |
+
},
|
| 4630 |
+
"peerDependencies": {
|
| 4631 |
+
"@types/react": "*",
|
| 4632 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4633 |
+
},
|
| 4634 |
+
"peerDependenciesMeta": {
|
| 4635 |
+
"@types/react": {
|
| 4636 |
+
"optional": true
|
| 4637 |
+
}
|
| 4638 |
+
}
|
| 4639 |
+
},
|
| 4640 |
+
"node_modules/@radix-ui/react-switch": {
|
| 4641 |
+
"version": "1.1.1",
|
| 4642 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-switch/-/react-switch-1.1.1.tgz",
|
| 4643 |
+
"integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==",
|
| 4644 |
+
"dependencies": {
|
| 4645 |
+
"@radix-ui/primitive": "1.1.0",
|
| 4646 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4647 |
+
"@radix-ui/react-context": "1.1.1",
|
| 4648 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4649 |
+
"@radix-ui/react-use-controllable-state": "1.1.0",
|
| 4650 |
+
"@radix-ui/react-use-previous": "1.1.0",
|
| 4651 |
+
"@radix-ui/react-use-size": "1.1.0"
|
| 4652 |
+
},
|
| 4653 |
+
"peerDependencies": {
|
| 4654 |
+
"@types/react": "*",
|
| 4655 |
+
"@types/react-dom": "*",
|
| 4656 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4657 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4658 |
+
},
|
| 4659 |
+
"peerDependenciesMeta": {
|
| 4660 |
+
"@types/react": {
|
| 4661 |
+
"optional": true
|
| 4662 |
+
},
|
| 4663 |
+
"@types/react-dom": {
|
| 4664 |
+
"optional": true
|
| 4665 |
+
}
|
| 4666 |
+
}
|
| 4667 |
+
},
|
| 4668 |
+
"node_modules/@radix-ui/react-toast": {
|
| 4669 |
+
"version": "1.2.2",
|
| 4670 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-toast/-/react-toast-1.2.2.tgz",
|
| 4671 |
+
"integrity": "sha512-Z6pqSzmAP/bFJoqMAston4eSNa+ud44NSZTiZUmUen+IOZ5nBY8kzuU5WDBVyFXPtcW6yUalOHsxM/BP6Sv8ww==",
|
| 4672 |
+
"dependencies": {
|
| 4673 |
+
"@radix-ui/primitive": "1.1.0",
|
| 4674 |
+
"@radix-ui/react-collection": "1.1.0",
|
| 4675 |
+
"@radix-ui/react-compose-refs": "1.1.0",
|
| 4676 |
+
"@radix-ui/react-context": "1.1.1",
|
| 4677 |
+
"@radix-ui/react-dismissable-layer": "1.1.1",
|
| 4678 |
+
"@radix-ui/react-portal": "1.1.2",
|
| 4679 |
+
"@radix-ui/react-presence": "1.1.1",
|
| 4680 |
+
"@radix-ui/react-primitive": "2.0.0",
|
| 4681 |
+
"@radix-ui/react-use-callback-ref": "1.1.0",
|
| 4682 |
+
"@radix-ui/react-use-controllable-state": "1.1.0",
|
| 4683 |
+
"@radix-ui/react-use-layout-effect": "1.1.0",
|
| 4684 |
+
"@radix-ui/react-visually-hidden": "1.1.0"
|
| 4685 |
+
},
|
| 4686 |
+
"peerDependencies": {
|
| 4687 |
+
"@types/react": "*",
|
| 4688 |
+
"@types/react-dom": "*",
|
| 4689 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4690 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4691 |
+
},
|
| 4692 |
+
"peerDependenciesMeta": {
|
| 4693 |
+
"@types/react": {
|
| 4694 |
+
"optional": true
|
| 4695 |
+
},
|
| 4696 |
+
"@types/react-dom": {
|
| 4697 |
+
"optional": true
|
| 4698 |
+
}
|
| 4699 |
+
}
|
| 4700 |
+
},
|
| 4701 |
+
"node_modules/@radix-ui/react-use-callback-ref": {
|
| 4702 |
+
"version": "1.1.0",
|
| 4703 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
|
| 4704 |
+
"integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
|
| 4705 |
+
"peerDependencies": {
|
| 4706 |
+
"@types/react": "*",
|
| 4707 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4708 |
+
},
|
| 4709 |
+
"peerDependenciesMeta": {
|
| 4710 |
+
"@types/react": {
|
| 4711 |
+
"optional": true
|
| 4712 |
+
}
|
| 4713 |
+
}
|
| 4714 |
+
},
|
| 4715 |
+
"node_modules/@radix-ui/react-use-controllable-state": {
|
| 4716 |
+
"version": "1.1.0",
|
| 4717 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
|
| 4718 |
+
"integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
|
| 4719 |
+
"dependencies": {
|
| 4720 |
+
"@radix-ui/react-use-callback-ref": "1.1.0"
|
| 4721 |
+
},
|
| 4722 |
+
"peerDependencies": {
|
| 4723 |
+
"@types/react": "*",
|
| 4724 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4725 |
+
},
|
| 4726 |
+
"peerDependenciesMeta": {
|
| 4727 |
+
"@types/react": {
|
| 4728 |
+
"optional": true
|
| 4729 |
+
}
|
| 4730 |
+
}
|
| 4731 |
+
},
|
| 4732 |
+
"node_modules/@radix-ui/react-use-escape-keydown": {
|
| 4733 |
+
"version": "1.1.0",
|
| 4734 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
|
| 4735 |
+
"integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
|
| 4736 |
+
"dependencies": {
|
| 4737 |
+
"@radix-ui/react-use-callback-ref": "1.1.0"
|
| 4738 |
+
},
|
| 4739 |
+
"peerDependencies": {
|
| 4740 |
+
"@types/react": "*",
|
| 4741 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4742 |
+
},
|
| 4743 |
+
"peerDependenciesMeta": {
|
| 4744 |
+
"@types/react": {
|
| 4745 |
+
"optional": true
|
| 4746 |
+
}
|
| 4747 |
+
}
|
| 4748 |
+
},
|
| 4749 |
+
"node_modules/@radix-ui/react-use-layout-effect": {
|
| 4750 |
+
"version": "1.1.0",
|
| 4751 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
|
| 4752 |
+
"integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
|
| 4753 |
+
"peerDependencies": {
|
| 4754 |
+
"@types/react": "*",
|
| 4755 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4756 |
+
},
|
| 4757 |
+
"peerDependenciesMeta": {
|
| 4758 |
+
"@types/react": {
|
| 4759 |
+
"optional": true
|
| 4760 |
+
}
|
| 4761 |
}
|
| 4762 |
},
|
| 4763 |
+
"node_modules/@radix-ui/react-use-previous": {
|
| 4764 |
+
"version": "1.1.0",
|
| 4765 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz",
|
| 4766 |
+
"integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==",
|
| 4767 |
+
"peerDependencies": {
|
| 4768 |
+
"@types/react": "*",
|
| 4769 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4770 |
+
},
|
| 4771 |
+
"peerDependenciesMeta": {
|
| 4772 |
+
"@types/react": {
|
| 4773 |
+
"optional": true
|
| 4774 |
+
}
|
| 4775 |
}
|
| 4776 |
},
|
| 4777 |
+
"node_modules/@radix-ui/react-use-rect": {
|
| 4778 |
+
"version": "1.1.0",
|
| 4779 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz",
|
| 4780 |
+
"integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
|
| 4781 |
"dependencies": {
|
| 4782 |
+
"@radix-ui/rect": "1.1.0"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4783 |
},
|
| 4784 |
+
"peerDependencies": {
|
| 4785 |
+
"@types/react": "*",
|
| 4786 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4787 |
+
},
|
| 4788 |
+
"peerDependenciesMeta": {
|
| 4789 |
+
"@types/react": {
|
| 4790 |
+
"optional": true
|
| 4791 |
+
}
|
|
|
|
|
|
|
| 4792 |
}
|
| 4793 |
},
|
| 4794 |
+
"node_modules/@radix-ui/react-use-size": {
|
| 4795 |
+
"version": "1.1.0",
|
| 4796 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz",
|
| 4797 |
+
"integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
|
| 4798 |
"dependencies": {
|
| 4799 |
+
"@radix-ui/react-use-layout-effect": "1.1.0"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4800 |
},
|
| 4801 |
+
"peerDependencies": {
|
| 4802 |
+
"@types/react": "*",
|
| 4803 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4804 |
+
},
|
| 4805 |
+
"peerDependenciesMeta": {
|
| 4806 |
+
"@types/react": {
|
| 4807 |
+
"optional": true
|
| 4808 |
+
}
|
| 4809 |
}
|
| 4810 |
},
|
| 4811 |
+
"node_modules/@radix-ui/react-visually-hidden": {
|
| 4812 |
+
"version": "1.1.0",
|
| 4813 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz",
|
| 4814 |
+
"integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==",
|
| 4815 |
"dependencies": {
|
| 4816 |
+
"@radix-ui/react-primitive": "2.0.0"
|
|
|
|
|
|
|
|
|
|
| 4817 |
},
|
| 4818 |
+
"peerDependencies": {
|
| 4819 |
+
"@types/react": "*",
|
| 4820 |
+
"@types/react-dom": "*",
|
| 4821 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
|
| 4822 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
|
| 4823 |
+
},
|
| 4824 |
+
"peerDependenciesMeta": {
|
| 4825 |
+
"@types/react": {
|
| 4826 |
+
"optional": true
|
| 4827 |
+
},
|
| 4828 |
+
"@types/react-dom": {
|
| 4829 |
+
"optional": true
|
| 4830 |
+
}
|
| 4831 |
}
|
| 4832 |
},
|
| 4833 |
+
"node_modules/@radix-ui/rect": {
|
| 4834 |
+
"version": "1.1.0",
|
| 4835 |
+
"resolved": "https://registry.npmmirror.com/@radix-ui/rect/-/rect-1.1.0.tgz",
|
| 4836 |
+
"integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg=="
|
| 4837 |
+
},
|
| 4838 |
"node_modules/@rc-component/color-picker": {
|
| 4839 |
"version": "1.5.1",
|
| 4840 |
"resolved": "https://registry.npmmirror.com/@rc-component/color-picker/-/color-picker-1.5.1.tgz",
|
|
|
|
| 5719 |
"version": "1.0.11",
|
| 5720 |
"resolved": "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.11.tgz",
|
| 5721 |
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
|
| 5722 |
+
"devOptional": true
|
| 5723 |
},
|
| 5724 |
"node_modules/@tsconfig/node12": {
|
| 5725 |
"version": "1.0.11",
|
| 5726 |
"resolved": "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz",
|
| 5727 |
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
|
| 5728 |
+
"devOptional": true
|
| 5729 |
},
|
| 5730 |
"node_modules/@tsconfig/node14": {
|
| 5731 |
"version": "1.0.3",
|
| 5732 |
"resolved": "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz",
|
| 5733 |
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
|
| 5734 |
+
"devOptional": true
|
| 5735 |
},
|
| 5736 |
"node_modules/@tsconfig/node16": {
|
| 5737 |
"version": "1.0.4",
|
| 5738 |
"resolved": "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.4.tgz",
|
| 5739 |
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
|
| 5740 |
+
"devOptional": true
|
| 5741 |
},
|
| 5742 |
"node_modules/@tweenjs/tween.js": {
|
| 5743 |
"version": "23.1.3",
|
|
|
|
| 6271 |
"version": "18.2.18",
|
| 6272 |
"resolved": "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.2.18.tgz",
|
| 6273 |
"integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==",
|
| 6274 |
+
"devOptional": true,
|
| 6275 |
"dependencies": {
|
| 6276 |
"@types/react": "*"
|
| 6277 |
}
|
|
|
|
| 8581 |
"version": "8.3.2",
|
| 8582 |
"resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.2.tgz",
|
| 8583 |
"integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
|
| 8584 |
+
"devOptional": true,
|
| 8585 |
"engines": {
|
| 8586 |
"node": ">=0.4.0"
|
| 8587 |
}
|
|
|
|
| 8866 |
"dayjs": "*"
|
| 8867 |
}
|
| 8868 |
},
|
| 8869 |
+
"node_modules/any-promise": {
|
| 8870 |
+
"version": "1.3.0",
|
| 8871 |
+
"resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz",
|
| 8872 |
+
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
|
| 8873 |
+
},
|
| 8874 |
"node_modules/anymatch": {
|
| 8875 |
"version": "3.1.3",
|
| 8876 |
"resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
|
|
|
|
| 8887 |
"version": "4.1.3",
|
| 8888 |
"resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz",
|
| 8889 |
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
|
| 8890 |
+
"devOptional": true
|
| 8891 |
},
|
| 8892 |
"node_modules/argparse": {
|
| 8893 |
"version": "1.0.10",
|
|
|
|
| 9963 |
"node": ">=10"
|
| 9964 |
}
|
| 9965 |
},
|
| 9966 |
+
"node_modules/camelcase-css": {
|
| 9967 |
+
"version": "2.0.1",
|
| 9968 |
+
"resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz",
|
| 9969 |
+
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
|
| 9970 |
+
"engines": {
|
| 9971 |
+
"node": ">= 6"
|
| 9972 |
+
}
|
| 9973 |
+
},
|
| 9974 |
"node_modules/camelcase-keys": {
|
| 9975 |
"version": "6.2.2",
|
| 9976 |
"resolved": "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
|
|
|
|
| 10173 |
"node": ">= 0.4"
|
| 10174 |
}
|
| 10175 |
},
|
| 10176 |
+
"node_modules/class-variance-authority": {
|
| 10177 |
+
"version": "0.7.0",
|
| 10178 |
+
"resolved": "https://registry.npmmirror.com/class-variance-authority/-/class-variance-authority-0.7.0.tgz",
|
| 10179 |
+
"integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==",
|
| 10180 |
+
"dependencies": {
|
| 10181 |
+
"clsx": "2.0.0"
|
| 10182 |
+
},
|
| 10183 |
+
"funding": {
|
| 10184 |
+
"url": "https://joebell.co.uk"
|
| 10185 |
+
}
|
| 10186 |
+
},
|
| 10187 |
+
"node_modules/class-variance-authority/node_modules/clsx": {
|
| 10188 |
+
"version": "2.0.0",
|
| 10189 |
+
"resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.0.0.tgz",
|
| 10190 |
+
"integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
|
| 10191 |
+
"engines": {
|
| 10192 |
+
"node": ">=6"
|
| 10193 |
+
}
|
| 10194 |
+
},
|
| 10195 |
"node_modules/classcat": {
|
| 10196 |
"version": "5.0.5",
|
| 10197 |
"resolved": "https://registry.npmmirror.com/classcat/-/classcat-5.0.5.tgz",
|
|
|
|
| 10394 |
}
|
| 10395 |
},
|
| 10396 |
"node_modules/clsx": {
|
| 10397 |
+
"version": "2.1.1",
|
| 10398 |
+
"resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz",
|
| 10399 |
+
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
|
| 10400 |
"engines": {
|
| 10401 |
"node": ">=6"
|
| 10402 |
}
|
|
|
|
| 11171 |
"version": "1.1.1",
|
| 11172 |
"resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz",
|
| 11173 |
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
|
| 11174 |
+
"devOptional": true
|
| 11175 |
},
|
| 11176 |
"node_modules/cross-env": {
|
| 11177 |
"version": "7.0.3",
|
|
|
|
| 12165 |
"resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz",
|
| 12166 |
"integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
|
| 12167 |
},
|
| 12168 |
+
"node_modules/detect-node-es": {
|
| 12169 |
+
"version": "1.1.0",
|
| 12170 |
+
"resolved": "https://registry.npmmirror.com/detect-node-es/-/detect-node-es-1.1.0.tgz",
|
| 12171 |
+
"integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="
|
| 12172 |
+
},
|
| 12173 |
"node_modules/detect-port-alt": {
|
| 12174 |
"version": "1.1.6",
|
| 12175 |
"resolved": "https://registry.npmmirror.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz",
|
|
|
|
| 12210 |
"dequal": "^2.0.0"
|
| 12211 |
}
|
| 12212 |
},
|
| 12213 |
+
"node_modules/didyoumean": {
|
| 12214 |
+
"version": "1.2.2",
|
| 12215 |
+
"resolved": "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz",
|
| 12216 |
+
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
|
| 12217 |
+
},
|
| 12218 |
"node_modules/diff": {
|
| 12219 |
"version": "4.0.2",
|
| 12220 |
"resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz",
|
| 12221 |
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
|
| 12222 |
+
"devOptional": true,
|
| 12223 |
"engines": {
|
| 12224 |
"node": ">=0.3.1"
|
| 12225 |
}
|
|
|
|
| 12276 |
"url": "https://github.com/sponsors/wooorm"
|
| 12277 |
}
|
| 12278 |
},
|
| 12279 |
+
"node_modules/dlv": {
|
| 12280 |
+
"version": "1.1.3",
|
| 12281 |
+
"resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz",
|
| 12282 |
+
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
|
| 12283 |
+
},
|
| 12284 |
"node_modules/doctrine": {
|
| 12285 |
"version": "3.0.0",
|
| 12286 |
"resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz",
|
|
|
|
| 14502 |
"node": ">= 0.4"
|
| 14503 |
}
|
| 14504 |
},
|
| 14505 |
+
"node_modules/get-nonce": {
|
| 14506 |
+
"version": "1.0.1",
|
| 14507 |
+
"resolved": "https://registry.npmmirror.com/get-nonce/-/get-nonce-1.0.1.tgz",
|
| 14508 |
+
"integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
|
| 14509 |
+
"engines": {
|
| 14510 |
+
"node": ">=6"
|
| 14511 |
+
}
|
| 14512 |
+
},
|
| 14513 |
"node_modules/get-package-type": {
|
| 14514 |
"version": "0.1.0",
|
| 14515 |
"resolved": "https://registry.npmmirror.com/get-package-type/-/get-package-type-0.1.0.tgz",
|
|
|
|
| 15796 |
"resolved": "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.2.2.tgz",
|
| 15797 |
"integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ=="
|
| 15798 |
},
|
| 15799 |
+
"node_modules/input-otp": {
|
| 15800 |
+
"version": "1.4.1",
|
| 15801 |
+
"resolved": "https://registry.npmmirror.com/input-otp/-/input-otp-1.4.1.tgz",
|
| 15802 |
+
"integrity": "sha512-+yvpmKYKHi9jIGngxagY9oWiiblPB7+nEO75F2l2o4vs+6vpPZZmUl4tBNYuTCvQjhvEIbdNeJu70bhfYP2nbw==",
|
| 15803 |
+
"peerDependencies": {
|
| 15804 |
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc",
|
| 15805 |
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc"
|
| 15806 |
+
}
|
| 15807 |
+
},
|
| 15808 |
"node_modules/insert-css": {
|
| 15809 |
"version": "2.0.0",
|
| 15810 |
"resolved": "https://registry.npmmirror.com/insert-css/-/insert-css-2.0.0.tgz",
|
|
|
|
| 18973 |
"node": ">=8"
|
| 18974 |
}
|
| 18975 |
},
|
| 18976 |
+
"node_modules/jiti": {
|
| 18977 |
+
"version": "1.21.6",
|
| 18978 |
+
"resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.6.tgz",
|
| 18979 |
+
"integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
|
| 18980 |
+
"bin": {
|
| 18981 |
+
"jiti": "bin/jiti.js"
|
| 18982 |
+
}
|
| 18983 |
+
},
|
| 18984 |
"node_modules/js-base64": {
|
| 18985 |
"version": "3.7.5",
|
| 18986 |
"resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz",
|
|
|
|
| 19490 |
"version": "3.1.2",
|
| 19491 |
"resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.2.tgz",
|
| 19492 |
"integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
|
|
|
|
| 19493 |
"engines": {
|
| 19494 |
"node": ">=14"
|
| 19495 |
},
|
|
|
|
| 20128 |
"yallist": "^3.0.2"
|
| 20129 |
}
|
| 20130 |
},
|
| 20131 |
+
"node_modules/lucide-react": {
|
| 20132 |
+
"version": "0.454.0",
|
| 20133 |
+
"resolved": "https://registry.npmmirror.com/lucide-react/-/lucide-react-0.454.0.tgz",
|
| 20134 |
+
"integrity": "sha512-hw7zMDwykCLnEzgncEEjHeA6+45aeEzRYuKHuyRSOPkhko+J3ySGjGIzu+mmMfDFG1vazHepMaYFYHbTFAZAAQ==",
|
| 20135 |
+
"peerDependencies": {
|
| 20136 |
+
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
|
| 20137 |
+
}
|
| 20138 |
+
},
|
| 20139 |
"node_modules/lz-string": {
|
| 20140 |
"version": "1.5.0",
|
| 20141 |
"resolved": "https://registry.npmmirror.com/lz-string/-/lz-string-1.5.0.tgz",
|
|
|
|
| 20171 |
"version": "1.3.6",
|
| 20172 |
"resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz",
|
| 20173 |
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
|
| 20174 |
+
"devOptional": true
|
| 20175 |
},
|
| 20176 |
"node_modules/makeerror": {
|
| 20177 |
"version": "1.0.12",
|
|
|
|
| 20985 |
}
|
| 20986 |
},
|
| 20987 |
"node_modules/minipass": {
|
| 20988 |
+
"version": "7.1.2",
|
| 20989 |
+
"resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz",
|
| 20990 |
+
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
|
| 20991 |
"engines": {
|
| 20992 |
"node": ">=16 || 14 >=14.17"
|
| 20993 |
}
|
|
|
|
| 21082 |
"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz",
|
| 21083 |
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
| 21084 |
},
|
| 21085 |
+
"node_modules/mz": {
|
| 21086 |
+
"version": "2.7.0",
|
| 21087 |
+
"resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz",
|
| 21088 |
+
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
|
| 21089 |
+
"dependencies": {
|
| 21090 |
+
"any-promise": "^1.0.0",
|
| 21091 |
+
"object-assign": "^4.0.1",
|
| 21092 |
+
"thenify-all": "^1.0.0"
|
| 21093 |
+
}
|
| 21094 |
+
},
|
| 21095 |
"node_modules/nanoid": {
|
| 21096 |
"version": "3.3.7",
|
| 21097 |
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz",
|
|
|
|
| 21564 |
"node": ">=0.10.0"
|
| 21565 |
}
|
| 21566 |
},
|
| 21567 |
+
"node_modules/object-hash": {
|
| 21568 |
+
"version": "3.0.0",
|
| 21569 |
+
"resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz",
|
| 21570 |
+
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
|
| 21571 |
+
"engines": {
|
| 21572 |
+
"node": ">= 6"
|
| 21573 |
+
}
|
| 21574 |
+
},
|
| 21575 |
"node_modules/object-inspect": {
|
| 21576 |
"version": "1.13.1",
|
| 21577 |
"resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz",
|
|
|
|
| 21924 |
"node": ">=6"
|
| 21925 |
}
|
| 21926 |
},
|
| 21927 |
+
"node_modules/package-json-from-dist": {
|
| 21928 |
+
"version": "1.0.1",
|
| 21929 |
+
"resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
|
| 21930 |
+
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
|
| 21931 |
+
},
|
| 21932 |
"node_modules/pako": {
|
| 21933 |
"version": "1.0.11",
|
| 21934 |
"resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
|
|
|
|
| 22660 |
"postcss": "^8.2"
|
| 22661 |
}
|
| 22662 |
},
|
| 22663 |
+
"node_modules/postcss-import": {
|
| 22664 |
+
"version": "15.1.0",
|
| 22665 |
+
"resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz",
|
| 22666 |
+
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
|
| 22667 |
+
"dependencies": {
|
| 22668 |
+
"postcss-value-parser": "^4.0.0",
|
| 22669 |
+
"read-cache": "^1.0.0",
|
| 22670 |
+
"resolve": "^1.1.7"
|
| 22671 |
+
},
|
| 22672 |
+
"engines": {
|
| 22673 |
+
"node": ">=14.0.0"
|
| 22674 |
+
},
|
| 22675 |
+
"peerDependencies": {
|
| 22676 |
+
"postcss": "^8.0.0"
|
| 22677 |
+
}
|
| 22678 |
+
},
|
| 22679 |
+
"node_modules/postcss-import/node_modules/resolve": {
|
| 22680 |
+
"version": "1.22.8",
|
| 22681 |
+
"resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz",
|
| 22682 |
+
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
|
| 22683 |
+
"dependencies": {
|
| 22684 |
+
"is-core-module": "^2.13.0",
|
| 22685 |
+
"path-parse": "^1.0.7",
|
| 22686 |
+
"supports-preserve-symlinks-flag": "^1.0.0"
|
| 22687 |
+
},
|
| 22688 |
+
"bin": {
|
| 22689 |
+
"resolve": "bin/resolve"
|
| 22690 |
+
},
|
| 22691 |
+
"funding": {
|
| 22692 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 22693 |
+
}
|
| 22694 |
+
},
|
| 22695 |
"node_modules/postcss-initial": {
|
| 22696 |
"version": "4.0.1",
|
| 22697 |
"resolved": "https://registry.npmmirror.com/postcss-initial/-/postcss-initial-4.0.1.tgz",
|
|
|
|
| 22700 |
"postcss": "^8.0.0"
|
| 22701 |
}
|
| 22702 |
},
|
| 22703 |
+
"node_modules/postcss-js": {
|
| 22704 |
+
"version": "4.0.1",
|
| 22705 |
+
"resolved": "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.0.1.tgz",
|
| 22706 |
+
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
|
| 22707 |
+
"dependencies": {
|
| 22708 |
+
"camelcase-css": "^2.0.1"
|
| 22709 |
+
},
|
| 22710 |
+
"engines": {
|
| 22711 |
+
"node": "^12 || ^14 || >= 16"
|
| 22712 |
+
},
|
| 22713 |
+
"funding": {
|
| 22714 |
+
"type": "opencollective",
|
| 22715 |
+
"url": "https://opencollective.com/postcss/"
|
| 22716 |
+
},
|
| 22717 |
+
"peerDependencies": {
|
| 22718 |
+
"postcss": "^8.4.21"
|
| 22719 |
+
}
|
| 22720 |
+
},
|
| 22721 |
"node_modules/postcss-lab-function": {
|
| 22722 |
"version": "4.2.1",
|
| 22723 |
"resolved": "https://registry.npmmirror.com/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz",
|
|
|
|
| 22733 |
"postcss": "^8.2"
|
| 22734 |
}
|
| 22735 |
},
|
| 22736 |
+
"node_modules/postcss-load-config": {
|
| 22737 |
+
"version": "4.0.2",
|
| 22738 |
+
"resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
|
| 22739 |
+
"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
|
| 22740 |
+
"funding": [
|
| 22741 |
+
{
|
| 22742 |
+
"type": "opencollective",
|
| 22743 |
+
"url": "https://opencollective.com/postcss/"
|
| 22744 |
+
},
|
| 22745 |
+
{
|
| 22746 |
+
"type": "github",
|
| 22747 |
+
"url": "https://github.com/sponsors/ai"
|
| 22748 |
+
}
|
| 22749 |
+
],
|
| 22750 |
+
"dependencies": {
|
| 22751 |
+
"lilconfig": "^3.0.0",
|
| 22752 |
+
"yaml": "^2.3.4"
|
| 22753 |
+
},
|
| 22754 |
+
"engines": {
|
| 22755 |
+
"node": ">= 14"
|
| 22756 |
+
},
|
| 22757 |
+
"peerDependencies": {
|
| 22758 |
+
"postcss": ">=8.0.9",
|
| 22759 |
+
"ts-node": ">=9.0.0"
|
| 22760 |
+
},
|
| 22761 |
+
"peerDependenciesMeta": {
|
| 22762 |
+
"postcss": {
|
| 22763 |
+
"optional": true
|
| 22764 |
+
},
|
| 22765 |
+
"ts-node": {
|
| 22766 |
+
"optional": true
|
| 22767 |
+
}
|
| 22768 |
+
}
|
| 22769 |
+
},
|
| 22770 |
+
"node_modules/postcss-load-config/node_modules/yaml": {
|
| 22771 |
+
"version": "2.6.0",
|
| 22772 |
+
"resolved": "https://registry.npmmirror.com/yaml/-/yaml-2.6.0.tgz",
|
| 22773 |
+
"integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
|
| 22774 |
+
"bin": {
|
| 22775 |
+
"yaml": "bin.mjs"
|
| 22776 |
+
},
|
| 22777 |
+
"engines": {
|
| 22778 |
+
"node": ">= 14"
|
| 22779 |
+
}
|
| 22780 |
+
},
|
| 22781 |
"node_modules/postcss-logical": {
|
| 22782 |
"version": "5.0.4",
|
| 22783 |
"resolved": "https://registry.npmmirror.com/postcss-logical/-/postcss-logical-5.0.4.tgz",
|
|
|
|
| 22852 |
"resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
|
| 22853 |
"integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
|
| 22854 |
"dependencies": {
|
| 22855 |
+
"icss-utils": "^5.0.0"
|
| 22856 |
+
},
|
| 22857 |
+
"engines": {
|
| 22858 |
+
"node": "^10 || ^12 || >= 14"
|
| 22859 |
+
},
|
| 22860 |
+
"peerDependencies": {
|
| 22861 |
+
"postcss": "^8.1.0"
|
| 22862 |
+
}
|
| 22863 |
+
},
|
| 22864 |
+
"node_modules/postcss-nested": {
|
| 22865 |
+
"version": "6.2.0",
|
| 22866 |
+
"resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz",
|
| 22867 |
+
"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
|
| 22868 |
+
"funding": [
|
| 22869 |
+
{
|
| 22870 |
+
"type": "opencollective",
|
| 22871 |
+
"url": "https://opencollective.com/postcss/"
|
| 22872 |
+
},
|
| 22873 |
+
{
|
| 22874 |
+
"type": "github",
|
| 22875 |
+
"url": "https://github.com/sponsors/ai"
|
| 22876 |
+
}
|
| 22877 |
+
],
|
| 22878 |
+
"dependencies": {
|
| 22879 |
+
"postcss-selector-parser": "^6.1.1"
|
| 22880 |
},
|
| 22881 |
"engines": {
|
| 22882 |
+
"node": ">=12.0"
|
| 22883 |
},
|
| 22884 |
"peerDependencies": {
|
| 22885 |
+
"postcss": "^8.2.14"
|
| 22886 |
}
|
| 22887 |
},
|
| 22888 |
"node_modules/postcss-nesting": {
|
|
|
|
| 23065 |
}
|
| 23066 |
},
|
| 23067 |
"node_modules/postcss-selector-parser": {
|
| 23068 |
+
"version": "6.1.2",
|
| 23069 |
+
"resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
|
| 23070 |
+
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
|
| 23071 |
"dependencies": {
|
| 23072 |
"cssesc": "^3.0.0",
|
| 23073 |
"util-deprecate": "^1.0.2"
|
|
|
|
| 24505 |
"react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0"
|
| 24506 |
}
|
| 24507 |
},
|
| 24508 |
+
"node_modules/react-hook-form": {
|
| 24509 |
+
"version": "7.53.1",
|
| 24510 |
+
"resolved": "https://registry.npmmirror.com/react-hook-form/-/react-hook-form-7.53.1.tgz",
|
| 24511 |
+
"integrity": "sha512-6aiQeBda4zjcuaugWvim9WsGqisoUk+etmFEsSUMm451/Ic8L/UAb7sRtMj3V+Hdzm6mMjU1VhiSzYUZeBm0Vg==",
|
| 24512 |
+
"engines": {
|
| 24513 |
+
"node": ">=18.0.0"
|
| 24514 |
+
},
|
| 24515 |
+
"funding": {
|
| 24516 |
+
"type": "opencollective",
|
| 24517 |
+
"url": "https://opencollective.com/react-hook-form"
|
| 24518 |
+
},
|
| 24519 |
+
"peerDependencies": {
|
| 24520 |
+
"react": "^16.8.0 || ^17 || ^18 || ^19"
|
| 24521 |
+
}
|
| 24522 |
+
},
|
| 24523 |
"node_modules/react-i18next": {
|
| 24524 |
"version": "14.0.0",
|
| 24525 |
"resolved": "https://registry.npmmirror.com/react-i18next/-/react-i18next-14.0.0.tgz",
|
|
|
|
| 24631 |
"node": ">=0.10.0"
|
| 24632 |
}
|
| 24633 |
},
|
| 24634 |
+
"node_modules/react-remove-scroll": {
|
| 24635 |
+
"version": "2.6.0",
|
| 24636 |
+
"resolved": "https://registry.npmmirror.com/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz",
|
| 24637 |
+
"integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==",
|
| 24638 |
+
"dependencies": {
|
| 24639 |
+
"react-remove-scroll-bar": "^2.3.6",
|
| 24640 |
+
"react-style-singleton": "^2.2.1",
|
| 24641 |
+
"tslib": "^2.1.0",
|
| 24642 |
+
"use-callback-ref": "^1.3.0",
|
| 24643 |
+
"use-sidecar": "^1.1.2"
|
| 24644 |
+
},
|
| 24645 |
+
"engines": {
|
| 24646 |
+
"node": ">=10"
|
| 24647 |
+
},
|
| 24648 |
+
"peerDependencies": {
|
| 24649 |
+
"@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
| 24650 |
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
| 24651 |
+
},
|
| 24652 |
+
"peerDependenciesMeta": {
|
| 24653 |
+
"@types/react": {
|
| 24654 |
+
"optional": true
|
| 24655 |
+
}
|
| 24656 |
+
}
|
| 24657 |
+
},
|
| 24658 |
+
"node_modules/react-remove-scroll-bar": {
|
| 24659 |
+
"version": "2.3.6",
|
| 24660 |
+
"resolved": "https://registry.npmmirror.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
|
| 24661 |
+
"integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
|
| 24662 |
+
"dependencies": {
|
| 24663 |
+
"react-style-singleton": "^2.2.1",
|
| 24664 |
+
"tslib": "^2.0.0"
|
| 24665 |
+
},
|
| 24666 |
+
"engines": {
|
| 24667 |
+
"node": ">=10"
|
| 24668 |
+
},
|
| 24669 |
+
"peerDependencies": {
|
| 24670 |
+
"@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
| 24671 |
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
| 24672 |
+
},
|
| 24673 |
+
"peerDependenciesMeta": {
|
| 24674 |
+
"@types/react": {
|
| 24675 |
+
"optional": true
|
| 24676 |
+
}
|
| 24677 |
+
}
|
| 24678 |
+
},
|
| 24679 |
"node_modules/react-rnd": {
|
| 24680 |
"version": "10.4.1",
|
| 24681 |
"resolved": "https://registry.npmmirror.com/react-rnd/-/react-rnd-10.4.1.tgz",
|
|
|
|
| 24815 |
"node": ">=0.12.0"
|
| 24816 |
}
|
| 24817 |
},
|
| 24818 |
+
"node_modules/react-style-singleton": {
|
| 24819 |
+
"version": "2.2.1",
|
| 24820 |
+
"resolved": "https://registry.npmmirror.com/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
|
| 24821 |
+
"integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
|
| 24822 |
+
"dependencies": {
|
| 24823 |
+
"get-nonce": "^1.0.0",
|
| 24824 |
+
"invariant": "^2.2.4",
|
| 24825 |
+
"tslib": "^2.0.0"
|
| 24826 |
+
},
|
| 24827 |
+
"engines": {
|
| 24828 |
+
"node": ">=10"
|
| 24829 |
+
},
|
| 24830 |
+
"peerDependencies": {
|
| 24831 |
+
"@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
| 24832 |
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
| 24833 |
+
},
|
| 24834 |
+
"peerDependenciesMeta": {
|
| 24835 |
+
"@types/react": {
|
| 24836 |
+
"optional": true
|
| 24837 |
+
}
|
| 24838 |
+
}
|
| 24839 |
+
},
|
| 24840 |
"node_modules/react-syntax-highlighter": {
|
| 24841 |
"version": "15.5.0",
|
| 24842 |
"resolved": "https://registry.npmmirror.com/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz",
|
|
|
|
| 24900 |
"react-dom": ">=17"
|
| 24901 |
}
|
| 24902 |
},
|
| 24903 |
+
"node_modules/read-cache": {
|
| 24904 |
+
"version": "1.0.0",
|
| 24905 |
+
"resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",
|
| 24906 |
+
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
|
| 24907 |
+
"dependencies": {
|
| 24908 |
+
"pify": "^2.3.0"
|
| 24909 |
+
}
|
| 24910 |
+
},
|
| 24911 |
+
"node_modules/read-cache/node_modules/pify": {
|
| 24912 |
+
"version": "2.3.0",
|
| 24913 |
+
"resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz",
|
| 24914 |
+
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
|
| 24915 |
+
"engines": {
|
| 24916 |
+
"node": ">=0.10.0"
|
| 24917 |
+
}
|
| 24918 |
+
},
|
| 24919 |
"node_modules/read-pkg": {
|
| 24920 |
"version": "5.2.0",
|
| 24921 |
"resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz",
|
|
|
|
| 27821 |
"resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.1.tgz",
|
| 27822 |
"integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ=="
|
| 27823 |
},
|
| 27824 |
+
"node_modules/sucrase": {
|
| 27825 |
+
"version": "3.35.0",
|
| 27826 |
+
"resolved": "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.0.tgz",
|
| 27827 |
+
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
|
| 27828 |
+
"dependencies": {
|
| 27829 |
+
"@jridgewell/gen-mapping": "^0.3.2",
|
| 27830 |
+
"commander": "^4.0.0",
|
| 27831 |
+
"glob": "^10.3.10",
|
| 27832 |
+
"lines-and-columns": "^1.1.6",
|
| 27833 |
+
"mz": "^2.7.0",
|
| 27834 |
+
"pirates": "^4.0.1",
|
| 27835 |
+
"ts-interface-checker": "^0.1.9"
|
| 27836 |
+
},
|
| 27837 |
+
"bin": {
|
| 27838 |
+
"sucrase": "bin/sucrase",
|
| 27839 |
+
"sucrase-node": "bin/sucrase-node"
|
| 27840 |
+
},
|
| 27841 |
+
"engines": {
|
| 27842 |
+
"node": ">=16 || 14 >=14.17"
|
| 27843 |
+
}
|
| 27844 |
+
},
|
| 27845 |
+
"node_modules/sucrase/node_modules/brace-expansion": {
|
| 27846 |
+
"version": "2.0.1",
|
| 27847 |
+
"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
| 27848 |
+
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
|
| 27849 |
+
"dependencies": {
|
| 27850 |
+
"balanced-match": "^1.0.0"
|
| 27851 |
+
}
|
| 27852 |
+
},
|
| 27853 |
+
"node_modules/sucrase/node_modules/commander": {
|
| 27854 |
+
"version": "4.1.1",
|
| 27855 |
+
"resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz",
|
| 27856 |
+
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
|
| 27857 |
+
"engines": {
|
| 27858 |
+
"node": ">= 6"
|
| 27859 |
+
}
|
| 27860 |
+
},
|
| 27861 |
+
"node_modules/sucrase/node_modules/glob": {
|
| 27862 |
+
"version": "10.4.5",
|
| 27863 |
+
"resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz",
|
| 27864 |
+
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
|
| 27865 |
+
"dependencies": {
|
| 27866 |
+
"foreground-child": "^3.1.0",
|
| 27867 |
+
"jackspeak": "^3.1.2",
|
| 27868 |
+
"minimatch": "^9.0.4",
|
| 27869 |
+
"minipass": "^7.1.2",
|
| 27870 |
+
"package-json-from-dist": "^1.0.0",
|
| 27871 |
+
"path-scurry": "^1.11.1"
|
| 27872 |
+
},
|
| 27873 |
+
"bin": {
|
| 27874 |
+
"glob": "dist/esm/bin.mjs"
|
| 27875 |
+
},
|
| 27876 |
+
"funding": {
|
| 27877 |
+
"url": "https://github.com/sponsors/isaacs"
|
| 27878 |
+
}
|
| 27879 |
+
},
|
| 27880 |
+
"node_modules/sucrase/node_modules/jackspeak": {
|
| 27881 |
+
"version": "3.4.3",
|
| 27882 |
+
"resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz",
|
| 27883 |
+
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
|
| 27884 |
+
"dependencies": {
|
| 27885 |
+
"@isaacs/cliui": "^8.0.2"
|
| 27886 |
+
},
|
| 27887 |
+
"funding": {
|
| 27888 |
+
"url": "https://github.com/sponsors/isaacs"
|
| 27889 |
+
},
|
| 27890 |
+
"optionalDependencies": {
|
| 27891 |
+
"@pkgjs/parseargs": "^0.11.0"
|
| 27892 |
+
}
|
| 27893 |
+
},
|
| 27894 |
+
"node_modules/sucrase/node_modules/minimatch": {
|
| 27895 |
+
"version": "9.0.5",
|
| 27896 |
+
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
|
| 27897 |
+
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
|
| 27898 |
+
"dependencies": {
|
| 27899 |
+
"brace-expansion": "^2.0.1"
|
| 27900 |
+
},
|
| 27901 |
+
"engines": {
|
| 27902 |
+
"node": ">=16 || 14 >=14.17"
|
| 27903 |
+
},
|
| 27904 |
+
"funding": {
|
| 27905 |
+
"url": "https://github.com/sponsors/isaacs"
|
| 27906 |
+
}
|
| 27907 |
+
},
|
| 27908 |
"node_modules/super-animejs": {
|
| 27909 |
"version": "3.1.0",
|
| 27910 |
"resolved": "https://registry.npmmirror.com/super-animejs/-/super-animejs-3.1.0.tgz",
|
|
|
|
| 28130 |
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
|
| 28131 |
"peer": true
|
| 28132 |
},
|
| 28133 |
+
"node_modules/tailwind-merge": {
|
| 28134 |
+
"version": "2.5.4",
|
| 28135 |
+
"resolved": "https://registry.npmmirror.com/tailwind-merge/-/tailwind-merge-2.5.4.tgz",
|
| 28136 |
+
"integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==",
|
| 28137 |
+
"funding": {
|
| 28138 |
+
"type": "github",
|
| 28139 |
+
"url": "https://github.com/sponsors/dcastil"
|
| 28140 |
+
}
|
| 28141 |
+
},
|
| 28142 |
+
"node_modules/tailwindcss": {
|
| 28143 |
+
"version": "3.4.14",
|
| 28144 |
+
"resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.14.tgz",
|
| 28145 |
+
"integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
|
| 28146 |
+
"dependencies": {
|
| 28147 |
+
"@alloc/quick-lru": "^5.2.0",
|
| 28148 |
+
"arg": "^5.0.2",
|
| 28149 |
+
"chokidar": "^3.5.3",
|
| 28150 |
+
"didyoumean": "^1.2.2",
|
| 28151 |
+
"dlv": "^1.1.3",
|
| 28152 |
+
"fast-glob": "^3.3.0",
|
| 28153 |
+
"glob-parent": "^6.0.2",
|
| 28154 |
+
"is-glob": "^4.0.3",
|
| 28155 |
+
"jiti": "^1.21.0",
|
| 28156 |
+
"lilconfig": "^2.1.0",
|
| 28157 |
+
"micromatch": "^4.0.5",
|
| 28158 |
+
"normalize-path": "^3.0.0",
|
| 28159 |
+
"object-hash": "^3.0.0",
|
| 28160 |
+
"picocolors": "^1.0.0",
|
| 28161 |
+
"postcss": "^8.4.23",
|
| 28162 |
+
"postcss-import": "^15.1.0",
|
| 28163 |
+
"postcss-js": "^4.0.1",
|
| 28164 |
+
"postcss-load-config": "^4.0.1",
|
| 28165 |
+
"postcss-nested": "^6.0.1",
|
| 28166 |
+
"postcss-selector-parser": "^6.0.11",
|
| 28167 |
+
"resolve": "^1.22.2",
|
| 28168 |
+
"sucrase": "^3.32.0"
|
| 28169 |
+
},
|
| 28170 |
+
"bin": {
|
| 28171 |
+
"tailwind": "lib/cli.js",
|
| 28172 |
+
"tailwindcss": "lib/cli.js"
|
| 28173 |
+
},
|
| 28174 |
+
"engines": {
|
| 28175 |
+
"node": ">=14.0.0"
|
| 28176 |
+
}
|
| 28177 |
+
},
|
| 28178 |
+
"node_modules/tailwindcss-animate": {
|
| 28179 |
+
"version": "1.0.7",
|
| 28180 |
+
"resolved": "https://registry.npmmirror.com/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
|
| 28181 |
+
"integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
|
| 28182 |
+
"peerDependencies": {
|
| 28183 |
+
"tailwindcss": ">=3.0.0 || insiders"
|
| 28184 |
+
}
|
| 28185 |
+
},
|
| 28186 |
+
"node_modules/tailwindcss/node_modules/arg": {
|
| 28187 |
+
"version": "5.0.2",
|
| 28188 |
+
"resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz",
|
| 28189 |
+
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
|
| 28190 |
+
},
|
| 28191 |
+
"node_modules/tailwindcss/node_modules/fast-glob": {
|
| 28192 |
+
"version": "3.3.2",
|
| 28193 |
+
"resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz",
|
| 28194 |
+
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
|
| 28195 |
+
"dependencies": {
|
| 28196 |
+
"@nodelib/fs.stat": "^2.0.2",
|
| 28197 |
+
"@nodelib/fs.walk": "^1.2.3",
|
| 28198 |
+
"glob-parent": "^5.1.2",
|
| 28199 |
+
"merge2": "^1.3.0",
|
| 28200 |
+
"micromatch": "^4.0.4"
|
| 28201 |
+
},
|
| 28202 |
+
"engines": {
|
| 28203 |
+
"node": ">=8.6.0"
|
| 28204 |
+
}
|
| 28205 |
+
},
|
| 28206 |
+
"node_modules/tailwindcss/node_modules/fast-glob/node_modules/glob-parent": {
|
| 28207 |
+
"version": "5.1.2",
|
| 28208 |
+
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
|
| 28209 |
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
| 28210 |
+
"dependencies": {
|
| 28211 |
+
"is-glob": "^4.0.1"
|
| 28212 |
+
},
|
| 28213 |
+
"engines": {
|
| 28214 |
+
"node": ">= 6"
|
| 28215 |
+
}
|
| 28216 |
+
},
|
| 28217 |
+
"node_modules/tailwindcss/node_modules/glob-parent": {
|
| 28218 |
+
"version": "6.0.2",
|
| 28219 |
+
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
|
| 28220 |
+
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
|
| 28221 |
+
"dependencies": {
|
| 28222 |
+
"is-glob": "^4.0.3"
|
| 28223 |
+
},
|
| 28224 |
+
"engines": {
|
| 28225 |
+
"node": ">=10.13.0"
|
| 28226 |
+
}
|
| 28227 |
+
},
|
| 28228 |
+
"node_modules/tailwindcss/node_modules/lilconfig": {
|
| 28229 |
+
"version": "2.1.0",
|
| 28230 |
+
"resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz",
|
| 28231 |
+
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
|
| 28232 |
+
"engines": {
|
| 28233 |
+
"node": ">=10"
|
| 28234 |
+
}
|
| 28235 |
+
},
|
| 28236 |
+
"node_modules/tailwindcss/node_modules/resolve": {
|
| 28237 |
+
"version": "1.22.8",
|
| 28238 |
+
"resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz",
|
| 28239 |
+
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
|
| 28240 |
+
"dependencies": {
|
| 28241 |
+
"is-core-module": "^2.13.0",
|
| 28242 |
+
"path-parse": "^1.0.7",
|
| 28243 |
+
"supports-preserve-symlinks-flag": "^1.0.0"
|
| 28244 |
+
},
|
| 28245 |
+
"bin": {
|
| 28246 |
+
"resolve": "bin/resolve"
|
| 28247 |
+
},
|
| 28248 |
+
"funding": {
|
| 28249 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 28250 |
+
}
|
| 28251 |
+
},
|
| 28252 |
"node_modules/tapable": {
|
| 28253 |
"version": "2.2.1",
|
| 28254 |
"resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz",
|
|
|
|
| 28362 |
"resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz",
|
| 28363 |
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
|
| 28364 |
},
|
| 28365 |
+
"node_modules/thenify": {
|
| 28366 |
+
"version": "3.3.1",
|
| 28367 |
+
"resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz",
|
| 28368 |
+
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
|
| 28369 |
+
"dependencies": {
|
| 28370 |
+
"any-promise": "^1.0.0"
|
| 28371 |
+
}
|
| 28372 |
+
},
|
| 28373 |
+
"node_modules/thenify-all": {
|
| 28374 |
+
"version": "1.6.0",
|
| 28375 |
+
"resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz",
|
| 28376 |
+
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
|
| 28377 |
+
"dependencies": {
|
| 28378 |
+
"thenify": ">= 3.1.0 < 4"
|
| 28379 |
+
},
|
| 28380 |
+
"engines": {
|
| 28381 |
+
"node": ">=0.8"
|
| 28382 |
+
}
|
| 28383 |
+
},
|
| 28384 |
"node_modules/thread-stream": {
|
| 28385 |
"version": "0.15.2",
|
| 28386 |
"resolved": "https://registry.npmmirror.com/thread-stream/-/thread-stream-0.15.2.tgz",
|
|
|
|
| 28678 |
"resolved": "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz",
|
| 28679 |
"integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="
|
| 28680 |
},
|
| 28681 |
+
"node_modules/ts-interface-checker": {
|
| 28682 |
+
"version": "0.1.13",
|
| 28683 |
+
"resolved": "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
|
| 28684 |
+
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
|
| 28685 |
+
},
|
| 28686 |
"node_modules/ts-node": {
|
| 28687 |
"version": "10.9.2",
|
| 28688 |
"resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.2.tgz",
|
| 28689 |
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
|
| 28690 |
+
"devOptional": true,
|
| 28691 |
"dependencies": {
|
| 28692 |
"@cspotcode/source-map-support": "^0.8.0",
|
| 28693 |
"@tsconfig/node10": "^1.0.7",
|
|
|
|
| 29367 |
"node": ">=0.10.0"
|
| 29368 |
}
|
| 29369 |
},
|
| 29370 |
+
"node_modules/use-callback-ref": {
|
| 29371 |
+
"version": "1.3.2",
|
| 29372 |
+
"resolved": "https://registry.npmmirror.com/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
|
| 29373 |
+
"integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
|
| 29374 |
+
"dependencies": {
|
| 29375 |
+
"tslib": "^2.0.0"
|
| 29376 |
+
},
|
| 29377 |
+
"engines": {
|
| 29378 |
+
"node": ">=10"
|
| 29379 |
+
},
|
| 29380 |
+
"peerDependencies": {
|
| 29381 |
+
"@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
|
| 29382 |
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
| 29383 |
+
},
|
| 29384 |
+
"peerDependenciesMeta": {
|
| 29385 |
+
"@types/react": {
|
| 29386 |
+
"optional": true
|
| 29387 |
+
}
|
| 29388 |
+
}
|
| 29389 |
+
},
|
| 29390 |
"node_modules/use-isomorphic-layout-effect": {
|
| 29391 |
"version": "1.1.2",
|
| 29392 |
"resolved": "https://registry.npmmirror.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
|
|
|
|
| 29400 |
}
|
| 29401 |
}
|
| 29402 |
},
|
| 29403 |
+
"node_modules/use-sidecar": {
|
| 29404 |
+
"version": "1.1.2",
|
| 29405 |
+
"resolved": "https://registry.npmmirror.com/use-sidecar/-/use-sidecar-1.1.2.tgz",
|
| 29406 |
+
"integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
|
| 29407 |
+
"dependencies": {
|
| 29408 |
+
"detect-node-es": "^1.1.0",
|
| 29409 |
+
"tslib": "^2.0.0"
|
| 29410 |
+
},
|
| 29411 |
+
"engines": {
|
| 29412 |
+
"node": ">=10"
|
| 29413 |
+
},
|
| 29414 |
+
"peerDependencies": {
|
| 29415 |
+
"@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
|
| 29416 |
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
| 29417 |
+
},
|
| 29418 |
+
"peerDependenciesMeta": {
|
| 29419 |
+
"@types/react": {
|
| 29420 |
+
"optional": true
|
| 29421 |
+
}
|
| 29422 |
+
}
|
| 29423 |
+
},
|
| 29424 |
"node_modules/use-sync-external-store": {
|
| 29425 |
"version": "1.2.0",
|
| 29426 |
"resolved": "https://registry.npmmirror.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
|
|
|
|
| 29542 |
"version": "3.0.1",
|
| 29543 |
"resolved": "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
|
| 29544 |
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
|
| 29545 |
+
"devOptional": true
|
| 29546 |
},
|
| 29547 |
"node_modules/v8-to-istanbul": {
|
| 29548 |
"version": "9.2.0",
|
|
|
|
| 30655 |
"version": "3.1.1",
|
| 30656 |
"resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz",
|
| 30657 |
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
|
| 30658 |
+
"devOptional": true,
|
| 30659 |
"engines": {
|
| 30660 |
"node": ">=6"
|
| 30661 |
}
|
|
|
|
| 30668 |
"node": ">=10"
|
| 30669 |
}
|
| 30670 |
},
|
| 30671 |
+
"node_modules/zod": {
|
| 30672 |
+
"version": "3.23.8",
|
| 30673 |
+
"resolved": "https://registry.npmmirror.com/zod/-/zod-3.23.8.tgz",
|
| 30674 |
+
"integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
|
| 30675 |
+
"funding": {
|
| 30676 |
+
"url": "https://github.com/sponsors/colinhacks"
|
| 30677 |
+
}
|
| 30678 |
+
},
|
| 30679 |
"node_modules/zustand": {
|
| 30680 |
"version": "4.5.2",
|
| 30681 |
"resolved": "https://registry.npmmirror.com/zustand/-/zustand-4.5.2.tgz",
|
web/package.json
CHANGED
|
@@ -21,15 +21,27 @@
|
|
| 21 |
"@ant-design/pro-components": "^2.6.46",
|
| 22 |
"@ant-design/pro-layout": "^7.17.16",
|
| 23 |
"@antv/g6": "^5.0.10",
|
|
|
|
| 24 |
"@js-preview/excel": "^1.7.8",
|
| 25 |
"@monaco-editor/react": "^4.6.0",
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
"@tanstack/react-query": "^5.40.0",
|
| 27 |
"@tanstack/react-query-devtools": "^5.51.5",
|
| 28 |
"@uiw/react-markdown-preview": "^5.1.3",
|
| 29 |
"ahooks": "^3.7.10",
|
| 30 |
"antd": "^5.12.7",
|
| 31 |
"axios": "^1.6.3",
|
|
|
|
| 32 |
"classnames": "^2.5.1",
|
|
|
|
| 33 |
"dayjs": "^1.11.10",
|
| 34 |
"dompurify": "^3.1.6",
|
| 35 |
"eventsource-parser": "^1.1.2",
|
|
@@ -37,15 +49,18 @@
|
|
| 37 |
"i18next": "^23.7.16",
|
| 38 |
"i18next-browser-languagedetector": "^8.0.0",
|
| 39 |
"immer": "^10.1.1",
|
|
|
|
| 40 |
"js-base64": "^3.7.5",
|
| 41 |
"jsencrypt": "^3.3.2",
|
| 42 |
"lodash": "^4.17.21",
|
|
|
|
| 43 |
"mammoth": "^1.7.2",
|
| 44 |
"openai-speech-stream-player": "^1.0.8",
|
| 45 |
"rc-tween-one": "^3.0.6",
|
| 46 |
"react-copy-to-clipboard": "^5.1.0",
|
| 47 |
"react-error-boundary": "^4.0.13",
|
| 48 |
"react-force-graph": "^1.44.4",
|
|
|
|
| 49 |
"react-i18next": "^14.0.0",
|
| 50 |
"react-markdown": "^9.0.1",
|
| 51 |
"react-pdf-highlighter": "^6.1.0",
|
|
@@ -56,10 +71,13 @@
|
|
| 56 |
"recharts": "^2.12.4",
|
| 57 |
"rehype-raw": "^7.0.0",
|
| 58 |
"remark-gfm": "^4.0.0",
|
|
|
|
|
|
|
| 59 |
"umi": "^4.0.90",
|
| 60 |
"umi-request": "^1.4.0",
|
| 61 |
"unist-util-visit-parents": "^6.0.1",
|
| 62 |
"uuid": "^9.0.1",
|
|
|
|
| 63 |
"zustand": "^4.5.2"
|
| 64 |
},
|
| 65 |
"devDependencies": {
|
|
@@ -90,6 +108,7 @@
|
|
| 90 |
"prettier-plugin-packagejson": "^2.4.9",
|
| 91 |
"react-dev-inspector": "^2.0.1",
|
| 92 |
"remark-loader": "^6.0.0",
|
|
|
|
| 93 |
"ts-node": "^10.9.2",
|
| 94 |
"typescript": "^5.0.3",
|
| 95 |
"umi-plugin-icons": "^0.1.1"
|
|
|
|
| 21 |
"@ant-design/pro-components": "^2.6.46",
|
| 22 |
"@ant-design/pro-layout": "^7.17.16",
|
| 23 |
"@antv/g6": "^5.0.10",
|
| 24 |
+
"@hookform/resolvers": "^3.9.1",
|
| 25 |
"@js-preview/excel": "^1.7.8",
|
| 26 |
"@monaco-editor/react": "^4.6.0",
|
| 27 |
+
"@radix-ui/react-checkbox": "^1.1.2",
|
| 28 |
+
"@radix-ui/react-dropdown-menu": "^2.1.2",
|
| 29 |
+
"@radix-ui/react-icons": "^1.3.1",
|
| 30 |
+
"@radix-ui/react-label": "^2.1.0",
|
| 31 |
+
"@radix-ui/react-select": "^2.1.2",
|
| 32 |
+
"@radix-ui/react-separator": "^1.1.0",
|
| 33 |
+
"@radix-ui/react-slot": "^1.1.0",
|
| 34 |
+
"@radix-ui/react-switch": "^1.1.1",
|
| 35 |
+
"@radix-ui/react-toast": "^1.2.2",
|
| 36 |
"@tanstack/react-query": "^5.40.0",
|
| 37 |
"@tanstack/react-query-devtools": "^5.51.5",
|
| 38 |
"@uiw/react-markdown-preview": "^5.1.3",
|
| 39 |
"ahooks": "^3.7.10",
|
| 40 |
"antd": "^5.12.7",
|
| 41 |
"axios": "^1.6.3",
|
| 42 |
+
"class-variance-authority": "^0.7.0",
|
| 43 |
"classnames": "^2.5.1",
|
| 44 |
+
"clsx": "^2.1.1",
|
| 45 |
"dayjs": "^1.11.10",
|
| 46 |
"dompurify": "^3.1.6",
|
| 47 |
"eventsource-parser": "^1.1.2",
|
|
|
|
| 49 |
"i18next": "^23.7.16",
|
| 50 |
"i18next-browser-languagedetector": "^8.0.0",
|
| 51 |
"immer": "^10.1.1",
|
| 52 |
+
"input-otp": "^1.4.1",
|
| 53 |
"js-base64": "^3.7.5",
|
| 54 |
"jsencrypt": "^3.3.2",
|
| 55 |
"lodash": "^4.17.21",
|
| 56 |
+
"lucide-react": "^0.454.0",
|
| 57 |
"mammoth": "^1.7.2",
|
| 58 |
"openai-speech-stream-player": "^1.0.8",
|
| 59 |
"rc-tween-one": "^3.0.6",
|
| 60 |
"react-copy-to-clipboard": "^5.1.0",
|
| 61 |
"react-error-boundary": "^4.0.13",
|
| 62 |
"react-force-graph": "^1.44.4",
|
| 63 |
+
"react-hook-form": "^7.53.1",
|
| 64 |
"react-i18next": "^14.0.0",
|
| 65 |
"react-markdown": "^9.0.1",
|
| 66 |
"react-pdf-highlighter": "^6.1.0",
|
|
|
|
| 71 |
"recharts": "^2.12.4",
|
| 72 |
"rehype-raw": "^7.0.0",
|
| 73 |
"remark-gfm": "^4.0.0",
|
| 74 |
+
"tailwind-merge": "^2.5.4",
|
| 75 |
+
"tailwindcss-animate": "^1.0.7",
|
| 76 |
"umi": "^4.0.90",
|
| 77 |
"umi-request": "^1.4.0",
|
| 78 |
"unist-util-visit-parents": "^6.0.1",
|
| 79 |
"uuid": "^9.0.1",
|
| 80 |
+
"zod": "^3.23.8",
|
| 81 |
"zustand": "^4.5.2"
|
| 82 |
},
|
| 83 |
"devDependencies": {
|
|
|
|
| 108 |
"prettier-plugin-packagejson": "^2.4.9",
|
| 109 |
"react-dev-inspector": "^2.0.1",
|
| 110 |
"remark-loader": "^6.0.0",
|
| 111 |
+
"tailwindcss": "^3",
|
| 112 |
"ts-node": "^10.9.2",
|
| 113 |
"typescript": "^5.0.3",
|
| 114 |
"umi-plugin-icons": "^0.1.1"
|
web/src/app.tsx
CHANGED
|
@@ -13,6 +13,7 @@ import weekOfYear from 'dayjs/plugin/weekOfYear';
|
|
| 13 |
import weekYear from 'dayjs/plugin/weekYear';
|
| 14 |
import weekday from 'dayjs/plugin/weekday';
|
| 15 |
import React, { ReactNode, useEffect, useState } from 'react';
|
|
|
|
| 16 |
import storage from './utils/authorization-util';
|
| 17 |
|
| 18 |
dayjs.extend(customParseFormat);
|
|
@@ -53,17 +54,19 @@ const RootProvider = ({ children }: React.PropsWithChildren) => {
|
|
| 53 |
|
| 54 |
return (
|
| 55 |
<QueryClientProvider client={queryClient}>
|
| 56 |
-
<
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
|
|
|
|
|
|
| 67 |
</QueryClientProvider>
|
| 68 |
);
|
| 69 |
};
|
|
|
|
| 13 |
import weekYear from 'dayjs/plugin/weekYear';
|
| 14 |
import weekday from 'dayjs/plugin/weekday';
|
| 15 |
import React, { ReactNode, useEffect, useState } from 'react';
|
| 16 |
+
import { ThemeProvider } from './components/theme-provider';
|
| 17 |
import storage from './utils/authorization-util';
|
| 18 |
|
| 19 |
dayjs.extend(customParseFormat);
|
|
|
|
| 54 |
|
| 55 |
return (
|
| 56 |
<QueryClientProvider client={queryClient}>
|
| 57 |
+
<ThemeProvider defaultTheme="light" storageKey="ragflow-ui-theme">
|
| 58 |
+
<ConfigProvider
|
| 59 |
+
theme={{
|
| 60 |
+
token: {
|
| 61 |
+
fontFamily: 'Inter',
|
| 62 |
+
},
|
| 63 |
+
}}
|
| 64 |
+
locale={locale}
|
| 65 |
+
>
|
| 66 |
+
<App> {children}</App>
|
| 67 |
+
</ConfigProvider>
|
| 68 |
+
<ReactQueryDevtools buttonPosition={'top-left'} />
|
| 69 |
+
</ThemeProvider>
|
| 70 |
</QueryClientProvider>
|
| 71 |
);
|
| 72 |
};
|
web/src/components/hooks/use-toast.tsx
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
// Inspired by react-hot-toast library
|
| 4 |
+
import * as React from 'react';
|
| 5 |
+
|
| 6 |
+
import type { ToastActionElement, ToastProps } from '@/components/ui/toast';
|
| 7 |
+
|
| 8 |
+
const TOAST_LIMIT = 1;
|
| 9 |
+
const TOAST_REMOVE_DELAY = 1000000;
|
| 10 |
+
|
| 11 |
+
type ToasterToast = ToastProps & {
|
| 12 |
+
id: string;
|
| 13 |
+
title?: React.ReactNode;
|
| 14 |
+
description?: React.ReactNode;
|
| 15 |
+
action?: ToastActionElement;
|
| 16 |
+
};
|
| 17 |
+
|
| 18 |
+
const actionTypes = {
|
| 19 |
+
ADD_TOAST: 'ADD_TOAST',
|
| 20 |
+
UPDATE_TOAST: 'UPDATE_TOAST',
|
| 21 |
+
DISMISS_TOAST: 'DISMISS_TOAST',
|
| 22 |
+
REMOVE_TOAST: 'REMOVE_TOAST',
|
| 23 |
+
} as const;
|
| 24 |
+
|
| 25 |
+
let count = 0;
|
| 26 |
+
|
| 27 |
+
function genId() {
|
| 28 |
+
count = (count + 1) % Number.MAX_SAFE_INTEGER;
|
| 29 |
+
return count.toString();
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
type ActionType = typeof actionTypes;
|
| 33 |
+
|
| 34 |
+
type Action =
|
| 35 |
+
| {
|
| 36 |
+
type: ActionType['ADD_TOAST'];
|
| 37 |
+
toast: ToasterToast;
|
| 38 |
+
}
|
| 39 |
+
| {
|
| 40 |
+
type: ActionType['UPDATE_TOAST'];
|
| 41 |
+
toast: Partial<ToasterToast>;
|
| 42 |
+
}
|
| 43 |
+
| {
|
| 44 |
+
type: ActionType['DISMISS_TOAST'];
|
| 45 |
+
toastId?: ToasterToast['id'];
|
| 46 |
+
}
|
| 47 |
+
| {
|
| 48 |
+
type: ActionType['REMOVE_TOAST'];
|
| 49 |
+
toastId?: ToasterToast['id'];
|
| 50 |
+
};
|
| 51 |
+
|
| 52 |
+
interface State {
|
| 53 |
+
toasts: ToasterToast[];
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
const toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();
|
| 57 |
+
|
| 58 |
+
const addToRemoveQueue = (toastId: string) => {
|
| 59 |
+
if (toastTimeouts.has(toastId)) {
|
| 60 |
+
return;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
const timeout = setTimeout(() => {
|
| 64 |
+
toastTimeouts.delete(toastId);
|
| 65 |
+
dispatch({
|
| 66 |
+
type: 'REMOVE_TOAST',
|
| 67 |
+
toastId: toastId,
|
| 68 |
+
});
|
| 69 |
+
}, TOAST_REMOVE_DELAY);
|
| 70 |
+
|
| 71 |
+
toastTimeouts.set(toastId, timeout);
|
| 72 |
+
};
|
| 73 |
+
|
| 74 |
+
export const reducer = (state: State, action: Action): State => {
|
| 75 |
+
switch (action.type) {
|
| 76 |
+
case 'ADD_TOAST':
|
| 77 |
+
return {
|
| 78 |
+
...state,
|
| 79 |
+
toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),
|
| 80 |
+
};
|
| 81 |
+
|
| 82 |
+
case 'UPDATE_TOAST':
|
| 83 |
+
return {
|
| 84 |
+
...state,
|
| 85 |
+
toasts: state.toasts.map((t) =>
|
| 86 |
+
t.id === action.toast.id ? { ...t, ...action.toast } : t,
|
| 87 |
+
),
|
| 88 |
+
};
|
| 89 |
+
|
| 90 |
+
case 'DISMISS_TOAST': {
|
| 91 |
+
const { toastId } = action;
|
| 92 |
+
|
| 93 |
+
// ! Side effects ! - This could be extracted into a dismissToast() action,
|
| 94 |
+
// but I'll keep it here for simplicity
|
| 95 |
+
if (toastId) {
|
| 96 |
+
addToRemoveQueue(toastId);
|
| 97 |
+
} else {
|
| 98 |
+
state.toasts.forEach((toast) => {
|
| 99 |
+
addToRemoveQueue(toast.id);
|
| 100 |
+
});
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
return {
|
| 104 |
+
...state,
|
| 105 |
+
toasts: state.toasts.map((t) =>
|
| 106 |
+
t.id === toastId || toastId === undefined
|
| 107 |
+
? {
|
| 108 |
+
...t,
|
| 109 |
+
open: false,
|
| 110 |
+
}
|
| 111 |
+
: t,
|
| 112 |
+
),
|
| 113 |
+
};
|
| 114 |
+
}
|
| 115 |
+
case 'REMOVE_TOAST':
|
| 116 |
+
if (action.toastId === undefined) {
|
| 117 |
+
return {
|
| 118 |
+
...state,
|
| 119 |
+
toasts: [],
|
| 120 |
+
};
|
| 121 |
+
}
|
| 122 |
+
return {
|
| 123 |
+
...state,
|
| 124 |
+
toasts: state.toasts.filter((t) => t.id !== action.toastId),
|
| 125 |
+
};
|
| 126 |
+
}
|
| 127 |
+
};
|
| 128 |
+
|
| 129 |
+
const listeners: Array<(state: State) => void> = [];
|
| 130 |
+
|
| 131 |
+
let memoryState: State = { toasts: [] };
|
| 132 |
+
|
| 133 |
+
function dispatch(action: Action) {
|
| 134 |
+
memoryState = reducer(memoryState, action);
|
| 135 |
+
listeners.forEach((listener) => {
|
| 136 |
+
listener(memoryState);
|
| 137 |
+
});
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
type Toast = Omit<ToasterToast, 'id'>;
|
| 141 |
+
|
| 142 |
+
function toast({ ...props }: Toast) {
|
| 143 |
+
const id = genId();
|
| 144 |
+
|
| 145 |
+
const update = (props: ToasterToast) =>
|
| 146 |
+
dispatch({
|
| 147 |
+
type: 'UPDATE_TOAST',
|
| 148 |
+
toast: { ...props, id },
|
| 149 |
+
});
|
| 150 |
+
const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id });
|
| 151 |
+
|
| 152 |
+
dispatch({
|
| 153 |
+
type: 'ADD_TOAST',
|
| 154 |
+
toast: {
|
| 155 |
+
...props,
|
| 156 |
+
id,
|
| 157 |
+
open: true,
|
| 158 |
+
onOpenChange: (open) => {
|
| 159 |
+
if (!open) dismiss();
|
| 160 |
+
},
|
| 161 |
+
},
|
| 162 |
+
});
|
| 163 |
+
|
| 164 |
+
return {
|
| 165 |
+
id: id,
|
| 166 |
+
dismiss,
|
| 167 |
+
update,
|
| 168 |
+
};
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
function useToast() {
|
| 172 |
+
const [state, setState] = React.useState<State>(memoryState);
|
| 173 |
+
|
| 174 |
+
React.useEffect(() => {
|
| 175 |
+
listeners.push(setState);
|
| 176 |
+
return () => {
|
| 177 |
+
const index = listeners.indexOf(setState);
|
| 178 |
+
if (index > -1) {
|
| 179 |
+
listeners.splice(index, 1);
|
| 180 |
+
}
|
| 181 |
+
};
|
| 182 |
+
}, [state]);
|
| 183 |
+
|
| 184 |
+
return {
|
| 185 |
+
...state,
|
| 186 |
+
toast,
|
| 187 |
+
dismiss: (toastId?: string) => dispatch({ type: 'DISMISS_TOAST', toastId }),
|
| 188 |
+
};
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
export { toast, useToast };
|
web/src/components/theme-provider.tsx
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { createContext, useContext, useEffect, useState } from 'react';
|
| 2 |
+
|
| 3 |
+
type Theme = 'dark' | 'light' | 'system';
|
| 4 |
+
|
| 5 |
+
type ThemeProviderProps = {
|
| 6 |
+
children: React.ReactNode;
|
| 7 |
+
defaultTheme?: Theme;
|
| 8 |
+
storageKey?: string;
|
| 9 |
+
};
|
| 10 |
+
|
| 11 |
+
type ThemeProviderState = {
|
| 12 |
+
theme: Theme;
|
| 13 |
+
setTheme: (theme: Theme) => void;
|
| 14 |
+
};
|
| 15 |
+
|
| 16 |
+
const initialState: ThemeProviderState = {
|
| 17 |
+
theme: 'system',
|
| 18 |
+
setTheme: () => null,
|
| 19 |
+
};
|
| 20 |
+
|
| 21 |
+
const ThemeProviderContext = createContext<ThemeProviderState>(initialState);
|
| 22 |
+
|
| 23 |
+
export function ThemeProvider({
|
| 24 |
+
children,
|
| 25 |
+
defaultTheme = 'system',
|
| 26 |
+
storageKey = 'vite-ui-theme',
|
| 27 |
+
...props
|
| 28 |
+
}: ThemeProviderProps) {
|
| 29 |
+
const [theme, setTheme] = useState<Theme>(
|
| 30 |
+
() => (localStorage.getItem(storageKey) as Theme) || defaultTheme,
|
| 31 |
+
);
|
| 32 |
+
|
| 33 |
+
useEffect(() => {
|
| 34 |
+
const root = window.document.documentElement;
|
| 35 |
+
|
| 36 |
+
root.classList.remove('light', 'dark');
|
| 37 |
+
|
| 38 |
+
if (theme === 'system') {
|
| 39 |
+
const systemTheme = window.matchMedia('(prefers-color-scheme: dark)')
|
| 40 |
+
.matches
|
| 41 |
+
? 'dark'
|
| 42 |
+
: 'light';
|
| 43 |
+
|
| 44 |
+
root.classList.add(systemTheme);
|
| 45 |
+
return;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
root.classList.add(theme);
|
| 49 |
+
}, [theme]);
|
| 50 |
+
|
| 51 |
+
const value = {
|
| 52 |
+
theme,
|
| 53 |
+
setTheme: (theme: Theme) => {
|
| 54 |
+
localStorage.setItem(storageKey, theme);
|
| 55 |
+
setTheme(theme);
|
| 56 |
+
},
|
| 57 |
+
};
|
| 58 |
+
|
| 59 |
+
return (
|
| 60 |
+
<ThemeProviderContext.Provider {...props} value={value}>
|
| 61 |
+
{children}
|
| 62 |
+
</ThemeProviderContext.Provider>
|
| 63 |
+
);
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
export const useTheme = () => {
|
| 67 |
+
const context = useContext(ThemeProviderContext);
|
| 68 |
+
|
| 69 |
+
if (context === undefined)
|
| 70 |
+
throw new Error('useTheme must be used within a ThemeProvider');
|
| 71 |
+
|
| 72 |
+
return context;
|
| 73 |
+
};
|
web/src/components/ui/button.tsx
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Slot } from '@radix-ui/react-slot';
|
| 2 |
+
import { cva, type VariantProps } from 'class-variance-authority';
|
| 3 |
+
import * as React from 'react';
|
| 4 |
+
|
| 5 |
+
import { cn } from '@/lib/utils';
|
| 6 |
+
|
| 7 |
+
const buttonVariants = cva(
|
| 8 |
+
'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
|
| 9 |
+
{
|
| 10 |
+
variants: {
|
| 11 |
+
variant: {
|
| 12 |
+
default: 'bg-primary text-primary-foreground hover:bg-primary/90',
|
| 13 |
+
destructive:
|
| 14 |
+
'bg-destructive text-destructive-foreground hover:bg-destructive/90',
|
| 15 |
+
outline:
|
| 16 |
+
'border border-input bg-background hover:bg-accent hover:text-accent-foreground',
|
| 17 |
+
secondary:
|
| 18 |
+
'bg-secondary text-secondary-foreground hover:bg-secondary/80',
|
| 19 |
+
ghost: 'hover:bg-accent hover:text-accent-foreground',
|
| 20 |
+
link: 'text-primary underline-offset-4 hover:underline',
|
| 21 |
+
},
|
| 22 |
+
size: {
|
| 23 |
+
default: 'h-10 px-4 py-2',
|
| 24 |
+
sm: 'h-9 rounded-md px-3',
|
| 25 |
+
lg: 'h-11 rounded-md px-8',
|
| 26 |
+
icon: 'h-10 w-10',
|
| 27 |
+
},
|
| 28 |
+
},
|
| 29 |
+
defaultVariants: {
|
| 30 |
+
variant: 'default',
|
| 31 |
+
size: 'default',
|
| 32 |
+
},
|
| 33 |
+
},
|
| 34 |
+
);
|
| 35 |
+
|
| 36 |
+
export interface ButtonProps
|
| 37 |
+
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
| 38 |
+
VariantProps<typeof buttonVariants> {
|
| 39 |
+
asChild?: boolean;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
| 43 |
+
({ className, variant, size, asChild = false, ...props }, ref) => {
|
| 44 |
+
const Comp = asChild ? Slot : 'button';
|
| 45 |
+
return (
|
| 46 |
+
<Comp
|
| 47 |
+
className={cn(buttonVariants({ variant, size, className }))}
|
| 48 |
+
ref={ref}
|
| 49 |
+
{...props}
|
| 50 |
+
/>
|
| 51 |
+
);
|
| 52 |
+
},
|
| 53 |
+
);
|
| 54 |
+
Button.displayName = 'Button';
|
| 55 |
+
|
| 56 |
+
export { Button, buttonVariants };
|
web/src/components/ui/card.tsx
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import * as React from 'react';
|
| 2 |
+
|
| 3 |
+
import { cn } from '@/lib/utils';
|
| 4 |
+
|
| 5 |
+
const Card = React.forwardRef<
|
| 6 |
+
HTMLDivElement,
|
| 7 |
+
React.HTMLAttributes<HTMLDivElement>
|
| 8 |
+
>(({ className, ...props }, ref) => (
|
| 9 |
+
<div
|
| 10 |
+
ref={ref}
|
| 11 |
+
className={cn(
|
| 12 |
+
'rounded-lg border bg-card text-card-foreground shadow-sm',
|
| 13 |
+
className,
|
| 14 |
+
)}
|
| 15 |
+
{...props}
|
| 16 |
+
/>
|
| 17 |
+
));
|
| 18 |
+
Card.displayName = 'Card';
|
| 19 |
+
|
| 20 |
+
const CardHeader = React.forwardRef<
|
| 21 |
+
HTMLDivElement,
|
| 22 |
+
React.HTMLAttributes<HTMLDivElement>
|
| 23 |
+
>(({ className, ...props }, ref) => (
|
| 24 |
+
<div
|
| 25 |
+
ref={ref}
|
| 26 |
+
className={cn('flex flex-col space-y-1.5 p-6', className)}
|
| 27 |
+
{...props}
|
| 28 |
+
/>
|
| 29 |
+
));
|
| 30 |
+
CardHeader.displayName = 'CardHeader';
|
| 31 |
+
|
| 32 |
+
const CardTitle = React.forwardRef<
|
| 33 |
+
HTMLDivElement,
|
| 34 |
+
React.HTMLAttributes<HTMLDivElement>
|
| 35 |
+
>(({ className, ...props }, ref) => (
|
| 36 |
+
<div
|
| 37 |
+
ref={ref}
|
| 38 |
+
className={cn(
|
| 39 |
+
'text-2xl font-semibold leading-none tracking-tight',
|
| 40 |
+
className,
|
| 41 |
+
)}
|
| 42 |
+
{...props}
|
| 43 |
+
/>
|
| 44 |
+
));
|
| 45 |
+
CardTitle.displayName = 'CardTitle';
|
| 46 |
+
|
| 47 |
+
const CardDescription = React.forwardRef<
|
| 48 |
+
HTMLDivElement,
|
| 49 |
+
React.HTMLAttributes<HTMLDivElement>
|
| 50 |
+
>(({ className, ...props }, ref) => (
|
| 51 |
+
<div
|
| 52 |
+
ref={ref}
|
| 53 |
+
className={cn('text-sm text-muted-foreground', className)}
|
| 54 |
+
{...props}
|
| 55 |
+
/>
|
| 56 |
+
));
|
| 57 |
+
CardDescription.displayName = 'CardDescription';
|
| 58 |
+
|
| 59 |
+
const CardContent = React.forwardRef<
|
| 60 |
+
HTMLDivElement,
|
| 61 |
+
React.HTMLAttributes<HTMLDivElement>
|
| 62 |
+
>(({ className, ...props }, ref) => (
|
| 63 |
+
<div ref={ref} className={cn('p-6 pt-0', className)} {...props} />
|
| 64 |
+
));
|
| 65 |
+
CardContent.displayName = 'CardContent';
|
| 66 |
+
|
| 67 |
+
const CardFooter = React.forwardRef<
|
| 68 |
+
HTMLDivElement,
|
| 69 |
+
React.HTMLAttributes<HTMLDivElement>
|
| 70 |
+
>(({ className, ...props }, ref) => (
|
| 71 |
+
<div
|
| 72 |
+
ref={ref}
|
| 73 |
+
className={cn('flex items-center p-6 pt-0', className)}
|
| 74 |
+
{...props}
|
| 75 |
+
/>
|
| 76 |
+
));
|
| 77 |
+
CardFooter.displayName = 'CardFooter';
|
| 78 |
+
|
| 79 |
+
export {
|
| 80 |
+
Card,
|
| 81 |
+
CardContent,
|
| 82 |
+
CardDescription,
|
| 83 |
+
CardFooter,
|
| 84 |
+
CardHeader,
|
| 85 |
+
CardTitle,
|
| 86 |
+
};
|
web/src/components/ui/checkbox.tsx
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
|
| 4 |
+
import { Check } from 'lucide-react';
|
| 5 |
+
import * as React from 'react';
|
| 6 |
+
|
| 7 |
+
import { cn } from '@/lib/utils';
|
| 8 |
+
|
| 9 |
+
const Checkbox = React.forwardRef<
|
| 10 |
+
React.ElementRef<typeof CheckboxPrimitive.Root>,
|
| 11 |
+
React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>
|
| 12 |
+
>(({ className, ...props }, ref) => (
|
| 13 |
+
<CheckboxPrimitive.Root
|
| 14 |
+
ref={ref}
|
| 15 |
+
className={cn(
|
| 16 |
+
'peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',
|
| 17 |
+
className,
|
| 18 |
+
)}
|
| 19 |
+
{...props}
|
| 20 |
+
>
|
| 21 |
+
<CheckboxPrimitive.Indicator
|
| 22 |
+
className={cn('flex items-center justify-center text-current')}
|
| 23 |
+
>
|
| 24 |
+
<Check className="h-4 w-4" />
|
| 25 |
+
</CheckboxPrimitive.Indicator>
|
| 26 |
+
</CheckboxPrimitive.Root>
|
| 27 |
+
));
|
| 28 |
+
Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
| 29 |
+
|
| 30 |
+
export { Checkbox };
|
web/src/components/ui/dropdown-menu.tsx
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
| 4 |
+
import { Check, ChevronRight, Circle } from 'lucide-react';
|
| 5 |
+
import * as React from 'react';
|
| 6 |
+
|
| 7 |
+
import { cn } from '@/lib/utils';
|
| 8 |
+
|
| 9 |
+
const DropdownMenu = DropdownMenuPrimitive.Root;
|
| 10 |
+
|
| 11 |
+
const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
|
| 12 |
+
|
| 13 |
+
const DropdownMenuGroup = DropdownMenuPrimitive.Group;
|
| 14 |
+
|
| 15 |
+
const DropdownMenuPortal = DropdownMenuPrimitive.Portal;
|
| 16 |
+
|
| 17 |
+
const DropdownMenuSub = DropdownMenuPrimitive.Sub;
|
| 18 |
+
|
| 19 |
+
const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
|
| 20 |
+
|
| 21 |
+
const DropdownMenuSubTrigger = React.forwardRef<
|
| 22 |
+
React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
|
| 23 |
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
|
| 24 |
+
inset?: boolean;
|
| 25 |
+
}
|
| 26 |
+
>(({ className, inset, children, ...props }, ref) => (
|
| 27 |
+
<DropdownMenuPrimitive.SubTrigger
|
| 28 |
+
ref={ref}
|
| 29 |
+
className={cn(
|
| 30 |
+
'flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
|
| 31 |
+
inset && 'pl-8',
|
| 32 |
+
className,
|
| 33 |
+
)}
|
| 34 |
+
{...props}
|
| 35 |
+
>
|
| 36 |
+
{children}
|
| 37 |
+
<ChevronRight className="ml-auto" />
|
| 38 |
+
</DropdownMenuPrimitive.SubTrigger>
|
| 39 |
+
));
|
| 40 |
+
DropdownMenuSubTrigger.displayName =
|
| 41 |
+
DropdownMenuPrimitive.SubTrigger.displayName;
|
| 42 |
+
|
| 43 |
+
const DropdownMenuSubContent = React.forwardRef<
|
| 44 |
+
React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
|
| 45 |
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
|
| 46 |
+
>(({ className, ...props }, ref) => (
|
| 47 |
+
<DropdownMenuPrimitive.SubContent
|
| 48 |
+
ref={ref}
|
| 49 |
+
className={cn(
|
| 50 |
+
'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
|
| 51 |
+
className,
|
| 52 |
+
)}
|
| 53 |
+
{...props}
|
| 54 |
+
/>
|
| 55 |
+
));
|
| 56 |
+
DropdownMenuSubContent.displayName =
|
| 57 |
+
DropdownMenuPrimitive.SubContent.displayName;
|
| 58 |
+
|
| 59 |
+
const DropdownMenuContent = React.forwardRef<
|
| 60 |
+
React.ElementRef<typeof DropdownMenuPrimitive.Content>,
|
| 61 |
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
|
| 62 |
+
>(({ className, sideOffset = 4, ...props }, ref) => (
|
| 63 |
+
<DropdownMenuPrimitive.Portal>
|
| 64 |
+
<DropdownMenuPrimitive.Content
|
| 65 |
+
ref={ref}
|
| 66 |
+
sideOffset={sideOffset}
|
| 67 |
+
className={cn(
|
| 68 |
+
'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
|
| 69 |
+
className,
|
| 70 |
+
)}
|
| 71 |
+
{...props}
|
| 72 |
+
/>
|
| 73 |
+
</DropdownMenuPrimitive.Portal>
|
| 74 |
+
));
|
| 75 |
+
DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
|
| 76 |
+
|
| 77 |
+
const DropdownMenuItem = React.forwardRef<
|
| 78 |
+
React.ElementRef<typeof DropdownMenuPrimitive.Item>,
|
| 79 |
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
|
| 80 |
+
inset?: boolean;
|
| 81 |
+
}
|
| 82 |
+
>(({ className, inset, ...props }, ref) => (
|
| 83 |
+
<DropdownMenuPrimitive.Item
|
| 84 |
+
ref={ref}
|
| 85 |
+
className={cn(
|
| 86 |
+
'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',
|
| 87 |
+
inset && 'pl-8',
|
| 88 |
+
className,
|
| 89 |
+
)}
|
| 90 |
+
{...props}
|
| 91 |
+
/>
|
| 92 |
+
));
|
| 93 |
+
DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
|
| 94 |
+
|
| 95 |
+
const DropdownMenuCheckboxItem = React.forwardRef<
|
| 96 |
+
React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
|
| 97 |
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
|
| 98 |
+
>(({ className, children, checked, ...props }, ref) => (
|
| 99 |
+
<DropdownMenuPrimitive.CheckboxItem
|
| 100 |
+
ref={ref}
|
| 101 |
+
className={cn(
|
| 102 |
+
'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
| 103 |
+
className,
|
| 104 |
+
)}
|
| 105 |
+
checked={checked}
|
| 106 |
+
{...props}
|
| 107 |
+
>
|
| 108 |
+
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
| 109 |
+
<DropdownMenuPrimitive.ItemIndicator>
|
| 110 |
+
<Check className="h-4 w-4" />
|
| 111 |
+
</DropdownMenuPrimitive.ItemIndicator>
|
| 112 |
+
</span>
|
| 113 |
+
{children}
|
| 114 |
+
</DropdownMenuPrimitive.CheckboxItem>
|
| 115 |
+
));
|
| 116 |
+
DropdownMenuCheckboxItem.displayName =
|
| 117 |
+
DropdownMenuPrimitive.CheckboxItem.displayName;
|
| 118 |
+
|
| 119 |
+
const DropdownMenuRadioItem = React.forwardRef<
|
| 120 |
+
React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
|
| 121 |
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
|
| 122 |
+
>(({ className, children, ...props }, ref) => (
|
| 123 |
+
<DropdownMenuPrimitive.RadioItem
|
| 124 |
+
ref={ref}
|
| 125 |
+
className={cn(
|
| 126 |
+
'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
| 127 |
+
className,
|
| 128 |
+
)}
|
| 129 |
+
{...props}
|
| 130 |
+
>
|
| 131 |
+
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
| 132 |
+
<DropdownMenuPrimitive.ItemIndicator>
|
| 133 |
+
<Circle className="h-2 w-2 fill-current" />
|
| 134 |
+
</DropdownMenuPrimitive.ItemIndicator>
|
| 135 |
+
</span>
|
| 136 |
+
{children}
|
| 137 |
+
</DropdownMenuPrimitive.RadioItem>
|
| 138 |
+
));
|
| 139 |
+
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
|
| 140 |
+
|
| 141 |
+
const DropdownMenuLabel = React.forwardRef<
|
| 142 |
+
React.ElementRef<typeof DropdownMenuPrimitive.Label>,
|
| 143 |
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
|
| 144 |
+
inset?: boolean;
|
| 145 |
+
}
|
| 146 |
+
>(({ className, inset, ...props }, ref) => (
|
| 147 |
+
<DropdownMenuPrimitive.Label
|
| 148 |
+
ref={ref}
|
| 149 |
+
className={cn(
|
| 150 |
+
'px-2 py-1.5 text-sm font-semibold',
|
| 151 |
+
inset && 'pl-8',
|
| 152 |
+
className,
|
| 153 |
+
)}
|
| 154 |
+
{...props}
|
| 155 |
+
/>
|
| 156 |
+
));
|
| 157 |
+
DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
|
| 158 |
+
|
| 159 |
+
const DropdownMenuSeparator = React.forwardRef<
|
| 160 |
+
React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
|
| 161 |
+
React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
|
| 162 |
+
>(({ className, ...props }, ref) => (
|
| 163 |
+
<DropdownMenuPrimitive.Separator
|
| 164 |
+
ref={ref}
|
| 165 |
+
className={cn('-mx-1 my-1 h-px bg-muted', className)}
|
| 166 |
+
{...props}
|
| 167 |
+
/>
|
| 168 |
+
));
|
| 169 |
+
DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
|
| 170 |
+
|
| 171 |
+
const DropdownMenuShortcut = ({
|
| 172 |
+
className,
|
| 173 |
+
...props
|
| 174 |
+
}: React.HTMLAttributes<HTMLSpanElement>) => {
|
| 175 |
+
return (
|
| 176 |
+
<span
|
| 177 |
+
className={cn('ml-auto text-xs tracking-widest opacity-60', className)}
|
| 178 |
+
{...props}
|
| 179 |
+
/>
|
| 180 |
+
);
|
| 181 |
+
};
|
| 182 |
+
DropdownMenuShortcut.displayName = 'DropdownMenuShortcut';
|
| 183 |
+
|
| 184 |
+
export {
|
| 185 |
+
DropdownMenu,
|
| 186 |
+
DropdownMenuCheckboxItem,
|
| 187 |
+
DropdownMenuContent,
|
| 188 |
+
DropdownMenuGroup,
|
| 189 |
+
DropdownMenuItem,
|
| 190 |
+
DropdownMenuLabel,
|
| 191 |
+
DropdownMenuPortal,
|
| 192 |
+
DropdownMenuRadioGroup,
|
| 193 |
+
DropdownMenuRadioItem,
|
| 194 |
+
DropdownMenuSeparator,
|
| 195 |
+
DropdownMenuShortcut,
|
| 196 |
+
DropdownMenuSub,
|
| 197 |
+
DropdownMenuSubContent,
|
| 198 |
+
DropdownMenuSubTrigger,
|
| 199 |
+
DropdownMenuTrigger,
|
| 200 |
+
};
|
web/src/components/ui/form.tsx
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
| 4 |
+
import { Slot } from '@radix-ui/react-slot';
|
| 5 |
+
import * as React from 'react';
|
| 6 |
+
import {
|
| 7 |
+
Controller,
|
| 8 |
+
ControllerProps,
|
| 9 |
+
FieldPath,
|
| 10 |
+
FieldValues,
|
| 11 |
+
FormProvider,
|
| 12 |
+
useFormContext,
|
| 13 |
+
} from 'react-hook-form';
|
| 14 |
+
|
| 15 |
+
import { Label } from '@/components/ui/label';
|
| 16 |
+
import { cn } from '@/lib/utils';
|
| 17 |
+
|
| 18 |
+
const Form = FormProvider;
|
| 19 |
+
|
| 20 |
+
type FormItemContextValue = {
|
| 21 |
+
id: string;
|
| 22 |
+
};
|
| 23 |
+
|
| 24 |
+
const FormItemContext = React.createContext<FormItemContextValue>(
|
| 25 |
+
{} as FormItemContextValue,
|
| 26 |
+
);
|
| 27 |
+
|
| 28 |
+
type FormFieldContextValue<
|
| 29 |
+
TFieldValues extends FieldValues = FieldValues,
|
| 30 |
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
| 31 |
+
> = {
|
| 32 |
+
name: TName;
|
| 33 |
+
};
|
| 34 |
+
|
| 35 |
+
const FormFieldContext = React.createContext<FormFieldContextValue>(
|
| 36 |
+
{} as FormFieldContextValue,
|
| 37 |
+
);
|
| 38 |
+
|
| 39 |
+
const FormField = <
|
| 40 |
+
TFieldValues extends FieldValues = FieldValues,
|
| 41 |
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
| 42 |
+
>({
|
| 43 |
+
...props
|
| 44 |
+
}: ControllerProps<TFieldValues, TName>) => {
|
| 45 |
+
return (
|
| 46 |
+
<FormFieldContext.Provider value={{ name: props.name }}>
|
| 47 |
+
<Controller {...props} />
|
| 48 |
+
</FormFieldContext.Provider>
|
| 49 |
+
);
|
| 50 |
+
};
|
| 51 |
+
|
| 52 |
+
const useFormField = () => {
|
| 53 |
+
const fieldContext = React.useContext(FormFieldContext);
|
| 54 |
+
const itemContext = React.useContext(FormItemContext);
|
| 55 |
+
const { getFieldState, formState } = useFormContext();
|
| 56 |
+
|
| 57 |
+
const fieldState = getFieldState(fieldContext.name, formState);
|
| 58 |
+
|
| 59 |
+
if (!fieldContext) {
|
| 60 |
+
throw new Error('useFormField should be used within <FormField>');
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
const { id } = itemContext;
|
| 64 |
+
|
| 65 |
+
return {
|
| 66 |
+
id,
|
| 67 |
+
name: fieldContext.name,
|
| 68 |
+
formItemId: `${id}-form-item`,
|
| 69 |
+
formDescriptionId: `${id}-form-item-description`,
|
| 70 |
+
formMessageId: `${id}-form-item-message`,
|
| 71 |
+
...fieldState,
|
| 72 |
+
};
|
| 73 |
+
};
|
| 74 |
+
|
| 75 |
+
const FormItem = React.forwardRef<
|
| 76 |
+
HTMLDivElement,
|
| 77 |
+
React.HTMLAttributes<HTMLDivElement>
|
| 78 |
+
>(({ className, ...props }, ref) => {
|
| 79 |
+
const id = React.useId();
|
| 80 |
+
|
| 81 |
+
return (
|
| 82 |
+
<FormItemContext.Provider value={{ id }}>
|
| 83 |
+
<div ref={ref} className={cn('space-y-2', className)} {...props} />
|
| 84 |
+
</FormItemContext.Provider>
|
| 85 |
+
);
|
| 86 |
+
});
|
| 87 |
+
FormItem.displayName = 'FormItem';
|
| 88 |
+
|
| 89 |
+
const FormLabel = React.forwardRef<
|
| 90 |
+
React.ElementRef<typeof LabelPrimitive.Root>,
|
| 91 |
+
React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>
|
| 92 |
+
>(({ className, ...props }, ref) => {
|
| 93 |
+
const { error, formItemId } = useFormField();
|
| 94 |
+
|
| 95 |
+
return (
|
| 96 |
+
<Label
|
| 97 |
+
ref={ref}
|
| 98 |
+
className={cn(error && 'text-destructive', className)}
|
| 99 |
+
htmlFor={formItemId}
|
| 100 |
+
{...props}
|
| 101 |
+
/>
|
| 102 |
+
);
|
| 103 |
+
});
|
| 104 |
+
FormLabel.displayName = 'FormLabel';
|
| 105 |
+
|
| 106 |
+
const FormControl = React.forwardRef<
|
| 107 |
+
React.ElementRef<typeof Slot>,
|
| 108 |
+
React.ComponentPropsWithoutRef<typeof Slot>
|
| 109 |
+
>(({ ...props }, ref) => {
|
| 110 |
+
const { error, formItemId, formDescriptionId, formMessageId } =
|
| 111 |
+
useFormField();
|
| 112 |
+
|
| 113 |
+
return (
|
| 114 |
+
<Slot
|
| 115 |
+
ref={ref}
|
| 116 |
+
id={formItemId}
|
| 117 |
+
aria-describedby={
|
| 118 |
+
!error
|
| 119 |
+
? `${formDescriptionId}`
|
| 120 |
+
: `${formDescriptionId} ${formMessageId}`
|
| 121 |
+
}
|
| 122 |
+
aria-invalid={!!error}
|
| 123 |
+
{...props}
|
| 124 |
+
/>
|
| 125 |
+
);
|
| 126 |
+
});
|
| 127 |
+
FormControl.displayName = 'FormControl';
|
| 128 |
+
|
| 129 |
+
const FormDescription = React.forwardRef<
|
| 130 |
+
HTMLParagraphElement,
|
| 131 |
+
React.HTMLAttributes<HTMLParagraphElement>
|
| 132 |
+
>(({ className, ...props }, ref) => {
|
| 133 |
+
const { formDescriptionId } = useFormField();
|
| 134 |
+
|
| 135 |
+
return (
|
| 136 |
+
<p
|
| 137 |
+
ref={ref}
|
| 138 |
+
id={formDescriptionId}
|
| 139 |
+
className={cn('text-sm text-muted-foreground', className)}
|
| 140 |
+
{...props}
|
| 141 |
+
/>
|
| 142 |
+
);
|
| 143 |
+
});
|
| 144 |
+
FormDescription.displayName = 'FormDescription';
|
| 145 |
+
|
| 146 |
+
const FormMessage = React.forwardRef<
|
| 147 |
+
HTMLParagraphElement,
|
| 148 |
+
React.HTMLAttributes<HTMLParagraphElement>
|
| 149 |
+
>(({ className, children, ...props }, ref) => {
|
| 150 |
+
const { error, formMessageId } = useFormField();
|
| 151 |
+
const body = error ? String(error?.message) : children;
|
| 152 |
+
|
| 153 |
+
if (!body) {
|
| 154 |
+
return null;
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
return (
|
| 158 |
+
<p
|
| 159 |
+
ref={ref}
|
| 160 |
+
id={formMessageId}
|
| 161 |
+
className={cn('text-sm font-medium text-destructive', className)}
|
| 162 |
+
{...props}
|
| 163 |
+
>
|
| 164 |
+
{body}
|
| 165 |
+
</p>
|
| 166 |
+
);
|
| 167 |
+
});
|
| 168 |
+
FormMessage.displayName = 'FormMessage';
|
| 169 |
+
|
| 170 |
+
export {
|
| 171 |
+
Form,
|
| 172 |
+
FormControl,
|
| 173 |
+
FormDescription,
|
| 174 |
+
FormField,
|
| 175 |
+
FormItem,
|
| 176 |
+
FormLabel,
|
| 177 |
+
FormMessage,
|
| 178 |
+
useFormField,
|
| 179 |
+
};
|
web/src/components/ui/input-otp.tsx
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import { OTPInput, OTPInputContext } from 'input-otp';
|
| 4 |
+
import { Dot } from 'lucide-react';
|
| 5 |
+
import * as React from 'react';
|
| 6 |
+
|
| 7 |
+
import { cn } from '@/lib/utils';
|
| 8 |
+
|
| 9 |
+
const InputOTP = React.forwardRef<
|
| 10 |
+
React.ElementRef<typeof OTPInput>,
|
| 11 |
+
React.ComponentPropsWithoutRef<typeof OTPInput>
|
| 12 |
+
>(({ className, containerClassName, ...props }, ref) => (
|
| 13 |
+
<OTPInput
|
| 14 |
+
ref={ref}
|
| 15 |
+
containerClassName={cn(
|
| 16 |
+
'flex items-center gap-2 has-[:disabled]:opacity-50',
|
| 17 |
+
containerClassName,
|
| 18 |
+
)}
|
| 19 |
+
className={cn('disabled:cursor-not-allowed', className)}
|
| 20 |
+
{...props}
|
| 21 |
+
/>
|
| 22 |
+
));
|
| 23 |
+
InputOTP.displayName = 'InputOTP';
|
| 24 |
+
|
| 25 |
+
const InputOTPGroup = React.forwardRef<
|
| 26 |
+
React.ElementRef<'div'>,
|
| 27 |
+
React.ComponentPropsWithoutRef<'div'>
|
| 28 |
+
>(({ className, ...props }, ref) => (
|
| 29 |
+
<div ref={ref} className={cn('flex items-center', className)} {...props} />
|
| 30 |
+
));
|
| 31 |
+
InputOTPGroup.displayName = 'InputOTPGroup';
|
| 32 |
+
|
| 33 |
+
const InputOTPSlot = React.forwardRef<
|
| 34 |
+
React.ElementRef<'div'>,
|
| 35 |
+
React.ComponentPropsWithoutRef<'div'> & { index: number }
|
| 36 |
+
>(({ index, className, ...props }, ref) => {
|
| 37 |
+
const inputOTPContext = React.useContext(OTPInputContext);
|
| 38 |
+
const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
|
| 39 |
+
|
| 40 |
+
return (
|
| 41 |
+
<div
|
| 42 |
+
ref={ref}
|
| 43 |
+
className={cn(
|
| 44 |
+
'relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md',
|
| 45 |
+
isActive && 'z-10 ring-2 ring-ring ring-offset-background',
|
| 46 |
+
className,
|
| 47 |
+
)}
|
| 48 |
+
{...props}
|
| 49 |
+
>
|
| 50 |
+
{char}
|
| 51 |
+
{hasFakeCaret && (
|
| 52 |
+
<div className="pointer-events-none absolute inset-0 flex items-center justify-center">
|
| 53 |
+
<div className="h-4 w-px animate-caret-blink bg-foreground duration-1000" />
|
| 54 |
+
</div>
|
| 55 |
+
)}
|
| 56 |
+
</div>
|
| 57 |
+
);
|
| 58 |
+
});
|
| 59 |
+
InputOTPSlot.displayName = 'InputOTPSlot';
|
| 60 |
+
|
| 61 |
+
const InputOTPSeparator = React.forwardRef<
|
| 62 |
+
React.ElementRef<'div'>,
|
| 63 |
+
React.ComponentPropsWithoutRef<'div'>
|
| 64 |
+
>(({ ...props }, ref) => (
|
| 65 |
+
<div ref={ref} role="separator" {...props}>
|
| 66 |
+
<Dot />
|
| 67 |
+
</div>
|
| 68 |
+
));
|
| 69 |
+
InputOTPSeparator.displayName = 'InputOTPSeparator';
|
| 70 |
+
|
| 71 |
+
export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
|
web/src/components/ui/input.tsx
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import * as React from 'react';
|
| 2 |
+
|
| 3 |
+
import { cn } from '@/lib/utils';
|
| 4 |
+
|
| 5 |
+
export interface InputProps
|
| 6 |
+
extends React.InputHTMLAttributes<HTMLInputElement> {}
|
| 7 |
+
|
| 8 |
+
const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
| 9 |
+
({ className, type, ...props }, ref) => {
|
| 10 |
+
return (
|
| 11 |
+
<input
|
| 12 |
+
type={type}
|
| 13 |
+
className={cn(
|
| 14 |
+
'flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
|
| 15 |
+
className,
|
| 16 |
+
)}
|
| 17 |
+
ref={ref}
|
| 18 |
+
{...props}
|
| 19 |
+
/>
|
| 20 |
+
);
|
| 21 |
+
},
|
| 22 |
+
);
|
| 23 |
+
Input.displayName = 'Input';
|
| 24 |
+
|
| 25 |
+
export { Input };
|
web/src/components/ui/label.tsx
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
| 4 |
+
import { cva, type VariantProps } from 'class-variance-authority';
|
| 5 |
+
import * as React from 'react';
|
| 6 |
+
|
| 7 |
+
import { cn } from '@/lib/utils';
|
| 8 |
+
|
| 9 |
+
const labelVariants = cva(
|
| 10 |
+
'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',
|
| 11 |
+
);
|
| 12 |
+
|
| 13 |
+
const Label = React.forwardRef<
|
| 14 |
+
React.ElementRef<typeof LabelPrimitive.Root>,
|
| 15 |
+
React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &
|
| 16 |
+
VariantProps<typeof labelVariants>
|
| 17 |
+
>(({ className, ...props }, ref) => (
|
| 18 |
+
<LabelPrimitive.Root
|
| 19 |
+
ref={ref}
|
| 20 |
+
className={cn(labelVariants(), className)}
|
| 21 |
+
{...props}
|
| 22 |
+
/>
|
| 23 |
+
));
|
| 24 |
+
Label.displayName = LabelPrimitive.Root.displayName;
|
| 25 |
+
|
| 26 |
+
export { Label };
|
web/src/components/ui/select.tsx
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import * as SelectPrimitive from '@radix-ui/react-select';
|
| 4 |
+
import { Check, ChevronDown, ChevronUp } from 'lucide-react';
|
| 5 |
+
import * as React from 'react';
|
| 6 |
+
|
| 7 |
+
import { cn } from '@/lib/utils';
|
| 8 |
+
|
| 9 |
+
const Select = SelectPrimitive.Root;
|
| 10 |
+
|
| 11 |
+
const SelectGroup = SelectPrimitive.Group;
|
| 12 |
+
|
| 13 |
+
const SelectValue = SelectPrimitive.Value;
|
| 14 |
+
|
| 15 |
+
const SelectTrigger = React.forwardRef<
|
| 16 |
+
React.ElementRef<typeof SelectPrimitive.Trigger>,
|
| 17 |
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>
|
| 18 |
+
>(({ className, children, ...props }, ref) => (
|
| 19 |
+
<SelectPrimitive.Trigger
|
| 20 |
+
ref={ref}
|
| 21 |
+
className={cn(
|
| 22 |
+
'flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',
|
| 23 |
+
className,
|
| 24 |
+
)}
|
| 25 |
+
{...props}
|
| 26 |
+
>
|
| 27 |
+
{children}
|
| 28 |
+
<SelectPrimitive.Icon asChild>
|
| 29 |
+
<ChevronDown className="h-4 w-4 opacity-50" />
|
| 30 |
+
</SelectPrimitive.Icon>
|
| 31 |
+
</SelectPrimitive.Trigger>
|
| 32 |
+
));
|
| 33 |
+
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
| 34 |
+
|
| 35 |
+
const SelectScrollUpButton = React.forwardRef<
|
| 36 |
+
React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,
|
| 37 |
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>
|
| 38 |
+
>(({ className, ...props }, ref) => (
|
| 39 |
+
<SelectPrimitive.ScrollUpButton
|
| 40 |
+
ref={ref}
|
| 41 |
+
className={cn(
|
| 42 |
+
'flex cursor-default items-center justify-center py-1',
|
| 43 |
+
className,
|
| 44 |
+
)}
|
| 45 |
+
{...props}
|
| 46 |
+
>
|
| 47 |
+
<ChevronUp className="h-4 w-4" />
|
| 48 |
+
</SelectPrimitive.ScrollUpButton>
|
| 49 |
+
));
|
| 50 |
+
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
| 51 |
+
|
| 52 |
+
const SelectScrollDownButton = React.forwardRef<
|
| 53 |
+
React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,
|
| 54 |
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>
|
| 55 |
+
>(({ className, ...props }, ref) => (
|
| 56 |
+
<SelectPrimitive.ScrollDownButton
|
| 57 |
+
ref={ref}
|
| 58 |
+
className={cn(
|
| 59 |
+
'flex cursor-default items-center justify-center py-1',
|
| 60 |
+
className,
|
| 61 |
+
)}
|
| 62 |
+
{...props}
|
| 63 |
+
>
|
| 64 |
+
<ChevronDown className="h-4 w-4" />
|
| 65 |
+
</SelectPrimitive.ScrollDownButton>
|
| 66 |
+
));
|
| 67 |
+
SelectScrollDownButton.displayName =
|
| 68 |
+
SelectPrimitive.ScrollDownButton.displayName;
|
| 69 |
+
|
| 70 |
+
const SelectContent = React.forwardRef<
|
| 71 |
+
React.ElementRef<typeof SelectPrimitive.Content>,
|
| 72 |
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>
|
| 73 |
+
>(({ className, children, position = 'popper', ...props }, ref) => (
|
| 74 |
+
<SelectPrimitive.Portal>
|
| 75 |
+
<SelectPrimitive.Content
|
| 76 |
+
ref={ref}
|
| 77 |
+
className={cn(
|
| 78 |
+
'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
|
| 79 |
+
position === 'popper' &&
|
| 80 |
+
'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',
|
| 81 |
+
className,
|
| 82 |
+
)}
|
| 83 |
+
position={position}
|
| 84 |
+
{...props}
|
| 85 |
+
>
|
| 86 |
+
<SelectScrollUpButton />
|
| 87 |
+
<SelectPrimitive.Viewport
|
| 88 |
+
className={cn(
|
| 89 |
+
'p-1',
|
| 90 |
+
position === 'popper' &&
|
| 91 |
+
'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]',
|
| 92 |
+
)}
|
| 93 |
+
>
|
| 94 |
+
{children}
|
| 95 |
+
</SelectPrimitive.Viewport>
|
| 96 |
+
<SelectScrollDownButton />
|
| 97 |
+
</SelectPrimitive.Content>
|
| 98 |
+
</SelectPrimitive.Portal>
|
| 99 |
+
));
|
| 100 |
+
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
| 101 |
+
|
| 102 |
+
const SelectLabel = React.forwardRef<
|
| 103 |
+
React.ElementRef<typeof SelectPrimitive.Label>,
|
| 104 |
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>
|
| 105 |
+
>(({ className, ...props }, ref) => (
|
| 106 |
+
<SelectPrimitive.Label
|
| 107 |
+
ref={ref}
|
| 108 |
+
className={cn('py-1.5 pl-8 pr-2 text-sm font-semibold', className)}
|
| 109 |
+
{...props}
|
| 110 |
+
/>
|
| 111 |
+
));
|
| 112 |
+
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
| 113 |
+
|
| 114 |
+
const SelectItem = React.forwardRef<
|
| 115 |
+
React.ElementRef<typeof SelectPrimitive.Item>,
|
| 116 |
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>
|
| 117 |
+
>(({ className, children, ...props }, ref) => (
|
| 118 |
+
<SelectPrimitive.Item
|
| 119 |
+
ref={ref}
|
| 120 |
+
className={cn(
|
| 121 |
+
'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
| 122 |
+
className,
|
| 123 |
+
)}
|
| 124 |
+
{...props}
|
| 125 |
+
>
|
| 126 |
+
<span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
| 127 |
+
<SelectPrimitive.ItemIndicator>
|
| 128 |
+
<Check className="h-4 w-4" />
|
| 129 |
+
</SelectPrimitive.ItemIndicator>
|
| 130 |
+
</span>
|
| 131 |
+
|
| 132 |
+
<SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
|
| 133 |
+
</SelectPrimitive.Item>
|
| 134 |
+
));
|
| 135 |
+
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
| 136 |
+
|
| 137 |
+
const SelectSeparator = React.forwardRef<
|
| 138 |
+
React.ElementRef<typeof SelectPrimitive.Separator>,
|
| 139 |
+
React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>
|
| 140 |
+
>(({ className, ...props }, ref) => (
|
| 141 |
+
<SelectPrimitive.Separator
|
| 142 |
+
ref={ref}
|
| 143 |
+
className={cn('-mx-1 my-1 h-px bg-muted', className)}
|
| 144 |
+
{...props}
|
| 145 |
+
/>
|
| 146 |
+
));
|
| 147 |
+
SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
| 148 |
+
|
| 149 |
+
export {
|
| 150 |
+
Select,
|
| 151 |
+
SelectContent,
|
| 152 |
+
SelectGroup,
|
| 153 |
+
SelectItem,
|
| 154 |
+
SelectLabel,
|
| 155 |
+
SelectScrollDownButton,
|
| 156 |
+
SelectScrollUpButton,
|
| 157 |
+
SelectSeparator,
|
| 158 |
+
SelectTrigger,
|
| 159 |
+
SelectValue,
|
| 160 |
+
};
|
web/src/components/ui/separator.tsx
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import * as SeparatorPrimitive from '@radix-ui/react-separator';
|
| 4 |
+
import * as React from 'react';
|
| 5 |
+
|
| 6 |
+
import { cn } from '@/lib/utils';
|
| 7 |
+
|
| 8 |
+
const Separator = React.forwardRef<
|
| 9 |
+
React.ElementRef<typeof SeparatorPrimitive.Root>,
|
| 10 |
+
React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>
|
| 11 |
+
>(
|
| 12 |
+
(
|
| 13 |
+
{ className, orientation = 'horizontal', decorative = true, ...props },
|
| 14 |
+
ref,
|
| 15 |
+
) => (
|
| 16 |
+
<SeparatorPrimitive.Root
|
| 17 |
+
ref={ref}
|
| 18 |
+
decorative={decorative}
|
| 19 |
+
orientation={orientation}
|
| 20 |
+
className={cn(
|
| 21 |
+
'shrink-0 bg-border',
|
| 22 |
+
orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',
|
| 23 |
+
className,
|
| 24 |
+
)}
|
| 25 |
+
{...props}
|
| 26 |
+
/>
|
| 27 |
+
),
|
| 28 |
+
);
|
| 29 |
+
Separator.displayName = SeparatorPrimitive.Root.displayName;
|
| 30 |
+
|
| 31 |
+
export { Separator };
|
web/src/components/ui/switch.tsx
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import * as SwitchPrimitives from '@radix-ui/react-switch';
|
| 4 |
+
import * as React from 'react';
|
| 5 |
+
|
| 6 |
+
import { cn } from '@/lib/utils';
|
| 7 |
+
|
| 8 |
+
const Switch = React.forwardRef<
|
| 9 |
+
React.ElementRef<typeof SwitchPrimitives.Root>,
|
| 10 |
+
React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>
|
| 11 |
+
>(({ className, ...props }, ref) => (
|
| 12 |
+
<SwitchPrimitives.Root
|
| 13 |
+
className={cn(
|
| 14 |
+
'peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',
|
| 15 |
+
className,
|
| 16 |
+
)}
|
| 17 |
+
{...props}
|
| 18 |
+
ref={ref}
|
| 19 |
+
>
|
| 20 |
+
<SwitchPrimitives.Thumb
|
| 21 |
+
className={cn(
|
| 22 |
+
'pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0',
|
| 23 |
+
)}
|
| 24 |
+
/>
|
| 25 |
+
</SwitchPrimitives.Root>
|
| 26 |
+
));
|
| 27 |
+
Switch.displayName = SwitchPrimitives.Root.displayName;
|
| 28 |
+
|
| 29 |
+
export { Switch };
|
web/src/components/ui/toast.tsx
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import * as ToastPrimitives from '@radix-ui/react-toast';
|
| 4 |
+
import { cva, type VariantProps } from 'class-variance-authority';
|
| 5 |
+
import { X } from 'lucide-react';
|
| 6 |
+
import * as React from 'react';
|
| 7 |
+
|
| 8 |
+
import { cn } from '@/lib/utils';
|
| 9 |
+
|
| 10 |
+
const ToastProvider = ToastPrimitives.Provider;
|
| 11 |
+
|
| 12 |
+
const ToastViewport = React.forwardRef<
|
| 13 |
+
React.ElementRef<typeof ToastPrimitives.Viewport>,
|
| 14 |
+
React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>
|
| 15 |
+
>(({ className, ...props }, ref) => (
|
| 16 |
+
<ToastPrimitives.Viewport
|
| 17 |
+
ref={ref}
|
| 18 |
+
className={cn(
|
| 19 |
+
'fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]',
|
| 20 |
+
className,
|
| 21 |
+
)}
|
| 22 |
+
{...props}
|
| 23 |
+
/>
|
| 24 |
+
));
|
| 25 |
+
ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
|
| 26 |
+
|
| 27 |
+
const toastVariants = cva(
|
| 28 |
+
'group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',
|
| 29 |
+
{
|
| 30 |
+
variants: {
|
| 31 |
+
variant: {
|
| 32 |
+
default: 'border bg-background text-foreground',
|
| 33 |
+
destructive:
|
| 34 |
+
'destructive group border-destructive bg-destructive text-destructive-foreground',
|
| 35 |
+
},
|
| 36 |
+
},
|
| 37 |
+
defaultVariants: {
|
| 38 |
+
variant: 'default',
|
| 39 |
+
},
|
| 40 |
+
},
|
| 41 |
+
);
|
| 42 |
+
|
| 43 |
+
const Toast = React.forwardRef<
|
| 44 |
+
React.ElementRef<typeof ToastPrimitives.Root>,
|
| 45 |
+
React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &
|
| 46 |
+
VariantProps<typeof toastVariants>
|
| 47 |
+
>(({ className, variant, ...props }, ref) => {
|
| 48 |
+
return (
|
| 49 |
+
<ToastPrimitives.Root
|
| 50 |
+
ref={ref}
|
| 51 |
+
className={cn(toastVariants({ variant }), className)}
|
| 52 |
+
{...props}
|
| 53 |
+
/>
|
| 54 |
+
);
|
| 55 |
+
});
|
| 56 |
+
Toast.displayName = ToastPrimitives.Root.displayName;
|
| 57 |
+
|
| 58 |
+
const ToastAction = React.forwardRef<
|
| 59 |
+
React.ElementRef<typeof ToastPrimitives.Action>,
|
| 60 |
+
React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>
|
| 61 |
+
>(({ className, ...props }, ref) => (
|
| 62 |
+
<ToastPrimitives.Action
|
| 63 |
+
ref={ref}
|
| 64 |
+
className={cn(
|
| 65 |
+
'inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive',
|
| 66 |
+
className,
|
| 67 |
+
)}
|
| 68 |
+
{...props}
|
| 69 |
+
/>
|
| 70 |
+
));
|
| 71 |
+
ToastAction.displayName = ToastPrimitives.Action.displayName;
|
| 72 |
+
|
| 73 |
+
const ToastClose = React.forwardRef<
|
| 74 |
+
React.ElementRef<typeof ToastPrimitives.Close>,
|
| 75 |
+
React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>
|
| 76 |
+
>(({ className, ...props }, ref) => (
|
| 77 |
+
<ToastPrimitives.Close
|
| 78 |
+
ref={ref}
|
| 79 |
+
className={cn(
|
| 80 |
+
'absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600',
|
| 81 |
+
className,
|
| 82 |
+
)}
|
| 83 |
+
toast-close=""
|
| 84 |
+
{...props}
|
| 85 |
+
>
|
| 86 |
+
<X className="h-4 w-4" />
|
| 87 |
+
</ToastPrimitives.Close>
|
| 88 |
+
));
|
| 89 |
+
ToastClose.displayName = ToastPrimitives.Close.displayName;
|
| 90 |
+
|
| 91 |
+
const ToastTitle = React.forwardRef<
|
| 92 |
+
React.ElementRef<typeof ToastPrimitives.Title>,
|
| 93 |
+
React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>
|
| 94 |
+
>(({ className, ...props }, ref) => (
|
| 95 |
+
<ToastPrimitives.Title
|
| 96 |
+
ref={ref}
|
| 97 |
+
className={cn('text-sm font-semibold', className)}
|
| 98 |
+
{...props}
|
| 99 |
+
/>
|
| 100 |
+
));
|
| 101 |
+
ToastTitle.displayName = ToastPrimitives.Title.displayName;
|
| 102 |
+
|
| 103 |
+
const ToastDescription = React.forwardRef<
|
| 104 |
+
React.ElementRef<typeof ToastPrimitives.Description>,
|
| 105 |
+
React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>
|
| 106 |
+
>(({ className, ...props }, ref) => (
|
| 107 |
+
<ToastPrimitives.Description
|
| 108 |
+
ref={ref}
|
| 109 |
+
className={cn('text-sm opacity-90', className)}
|
| 110 |
+
{...props}
|
| 111 |
+
/>
|
| 112 |
+
));
|
| 113 |
+
ToastDescription.displayName = ToastPrimitives.Description.displayName;
|
| 114 |
+
|
| 115 |
+
type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;
|
| 116 |
+
|
| 117 |
+
type ToastActionElement = React.ReactElement<typeof ToastAction>;
|
| 118 |
+
|
| 119 |
+
export {
|
| 120 |
+
Toast,
|
| 121 |
+
ToastAction,
|
| 122 |
+
ToastClose,
|
| 123 |
+
ToastDescription,
|
| 124 |
+
ToastProvider,
|
| 125 |
+
ToastTitle,
|
| 126 |
+
ToastViewport,
|
| 127 |
+
type ToastActionElement,
|
| 128 |
+
type ToastProps,
|
| 129 |
+
};
|
web/src/components/ui/toaster.tsx
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import { useToast } from '@/components/hooks/use-toast';
|
| 4 |
+
import {
|
| 5 |
+
Toast,
|
| 6 |
+
ToastClose,
|
| 7 |
+
ToastDescription,
|
| 8 |
+
ToastProvider,
|
| 9 |
+
ToastTitle,
|
| 10 |
+
ToastViewport,
|
| 11 |
+
} from '@/components/ui/toast';
|
| 12 |
+
|
| 13 |
+
export function Toaster() {
|
| 14 |
+
const { toasts } = useToast();
|
| 15 |
+
|
| 16 |
+
return (
|
| 17 |
+
<ToastProvider>
|
| 18 |
+
{toasts.map(function ({ id, title, description, action, ...props }: any) {
|
| 19 |
+
return (
|
| 20 |
+
<Toast key={id} {...props}>
|
| 21 |
+
<div className="grid gap-1">
|
| 22 |
+
{title && <ToastTitle>{title}</ToastTitle>}
|
| 23 |
+
{description && (
|
| 24 |
+
<ToastDescription>{description}</ToastDescription>
|
| 25 |
+
)}
|
| 26 |
+
</div>
|
| 27 |
+
{action}
|
| 28 |
+
<ToastClose />
|
| 29 |
+
</Toast>
|
| 30 |
+
);
|
| 31 |
+
})}
|
| 32 |
+
<ToastViewport />
|
| 33 |
+
</ToastProvider>
|
| 34 |
+
);
|
| 35 |
+
}
|
web/src/lib/utils.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { clsx, type ClassValue } from 'clsx';
|
| 2 |
+
import { twMerge } from 'tailwind-merge';
|
| 3 |
+
|
| 4 |
+
export function cn(...inputs: ClassValue[]) {
|
| 5 |
+
return twMerge(clsx(inputs));
|
| 6 |
+
}
|
web/src/pages/demo.tsx
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { useTheme } from '@/components/theme-provider';
|
| 2 |
+
import { Button } from '@/components/ui/button';
|
| 3 |
+
import {
|
| 4 |
+
DropdownMenu,
|
| 5 |
+
DropdownMenuContent,
|
| 6 |
+
DropdownMenuItem,
|
| 7 |
+
DropdownMenuTrigger,
|
| 8 |
+
} from '@/components/ui/dropdown-menu';
|
| 9 |
+
import { Moon, Sun } from 'lucide-react';
|
| 10 |
+
|
| 11 |
+
export function ModeToggle() {
|
| 12 |
+
const { setTheme } = useTheme();
|
| 13 |
+
|
| 14 |
+
return (
|
| 15 |
+
<DropdownMenu>
|
| 16 |
+
<DropdownMenuTrigger asChild>
|
| 17 |
+
<Button variant="outline" size="icon">
|
| 18 |
+
<Sun className="h-[1.2rem] w-[1.2rem] rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
|
| 19 |
+
<Moon className="absolute h-[1.2rem] w-[1.2rem] rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
|
| 20 |
+
<span className="sr-only">Toggle theme</span>
|
| 21 |
+
</Button>
|
| 22 |
+
</DropdownMenuTrigger>
|
| 23 |
+
<DropdownMenuContent align="end">
|
| 24 |
+
<DropdownMenuItem onClick={() => setTheme('light')}>
|
| 25 |
+
Light
|
| 26 |
+
</DropdownMenuItem>
|
| 27 |
+
<DropdownMenuItem onClick={() => setTheme('dark')}>
|
| 28 |
+
Dark
|
| 29 |
+
</DropdownMenuItem>
|
| 30 |
+
<DropdownMenuItem onClick={() => setTheme('system')}>
|
| 31 |
+
System
|
| 32 |
+
</DropdownMenuItem>
|
| 33 |
+
</DropdownMenuContent>
|
| 34 |
+
</DropdownMenu>
|
| 35 |
+
);
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
const Demo = () => {
|
| 39 |
+
return (
|
| 40 |
+
<div>
|
| 41 |
+
<div>
|
| 42 |
+
<ModeToggle></ModeToggle>
|
| 43 |
+
</div>
|
| 44 |
+
<Button>Destructive</Button>
|
| 45 |
+
</div>
|
| 46 |
+
);
|
| 47 |
+
};
|
| 48 |
+
|
| 49 |
+
export default Demo;
|
web/src/pages/login-next/form.tsx
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use client';
|
| 2 |
+
|
| 3 |
+
import { toast } from '@/components/hooks/use-toast';
|
| 4 |
+
import { Button } from '@/components/ui/button';
|
| 5 |
+
import { Checkbox } from '@/components/ui/checkbox';
|
| 6 |
+
import {
|
| 7 |
+
Form,
|
| 8 |
+
FormControl,
|
| 9 |
+
FormField,
|
| 10 |
+
FormItem,
|
| 11 |
+
FormLabel,
|
| 12 |
+
FormMessage,
|
| 13 |
+
} from '@/components/ui/form';
|
| 14 |
+
import { Input } from '@/components/ui/input';
|
| 15 |
+
import {
|
| 16 |
+
InputOTP,
|
| 17 |
+
InputOTPGroup,
|
| 18 |
+
InputOTPSlot,
|
| 19 |
+
} from '@/components/ui/input-otp';
|
| 20 |
+
import { useTranslate } from '@/hooks/common-hooks';
|
| 21 |
+
import { zodResolver } from '@hookform/resolvers/zod';
|
| 22 |
+
import { useForm } from 'react-hook-form';
|
| 23 |
+
import { z } from 'zod';
|
| 24 |
+
|
| 25 |
+
export function SignUpForm() {
|
| 26 |
+
const { t } = useTranslate('login');
|
| 27 |
+
|
| 28 |
+
const FormSchema = z.object({
|
| 29 |
+
email: z.string().email({
|
| 30 |
+
message: t('emailPlaceholder'),
|
| 31 |
+
}),
|
| 32 |
+
nickname: z.string({ required_error: t('nicknamePlaceholder') }),
|
| 33 |
+
password: z.string({ required_error: t('passwordPlaceholder') }),
|
| 34 |
+
});
|
| 35 |
+
|
| 36 |
+
const form = useForm<z.infer<typeof FormSchema>>({
|
| 37 |
+
resolver: zodResolver(FormSchema),
|
| 38 |
+
defaultValues: {
|
| 39 |
+
email: '',
|
| 40 |
+
},
|
| 41 |
+
});
|
| 42 |
+
|
| 43 |
+
function onSubmit(data: z.infer<typeof FormSchema>) {
|
| 44 |
+
console.log('🚀 ~ onSubmit ~ data:', data);
|
| 45 |
+
toast({
|
| 46 |
+
title: 'You submitted the following values:',
|
| 47 |
+
description: (
|
| 48 |
+
<pre className="mt-2 w-[340px] rounded-md bg-slate-950 p-4">
|
| 49 |
+
<code className="text-white">{JSON.stringify(data, null, 2)}</code>
|
| 50 |
+
</pre>
|
| 51 |
+
),
|
| 52 |
+
});
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
return (
|
| 56 |
+
<Form {...form}>
|
| 57 |
+
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6">
|
| 58 |
+
<FormField
|
| 59 |
+
control={form.control}
|
| 60 |
+
name="email"
|
| 61 |
+
render={({ field }) => (
|
| 62 |
+
<FormItem>
|
| 63 |
+
<FormLabel>{t('emailLabel')}</FormLabel>
|
| 64 |
+
<FormControl>
|
| 65 |
+
<Input placeholder={t('emailPlaceholder')} {...field} />
|
| 66 |
+
</FormControl>
|
| 67 |
+
<FormMessage />
|
| 68 |
+
</FormItem>
|
| 69 |
+
)}
|
| 70 |
+
/>
|
| 71 |
+
<FormField
|
| 72 |
+
control={form.control}
|
| 73 |
+
name="nickname"
|
| 74 |
+
render={({ field }) => (
|
| 75 |
+
<FormItem>
|
| 76 |
+
<FormLabel>{t('nicknameLabel')}</FormLabel>
|
| 77 |
+
<FormControl>
|
| 78 |
+
<Input placeholder={t('nicknamePlaceholder')} {...field} />
|
| 79 |
+
</FormControl>
|
| 80 |
+
<FormMessage />
|
| 81 |
+
</FormItem>
|
| 82 |
+
)}
|
| 83 |
+
/>
|
| 84 |
+
<FormField
|
| 85 |
+
control={form.control}
|
| 86 |
+
name="password"
|
| 87 |
+
render={({ field }) => (
|
| 88 |
+
<FormItem>
|
| 89 |
+
<FormLabel>{t('passwordLabel')}</FormLabel>
|
| 90 |
+
<FormControl>
|
| 91 |
+
<Input
|
| 92 |
+
type={'password'}
|
| 93 |
+
placeholder={t('passwordPlaceholder')}
|
| 94 |
+
{...field}
|
| 95 |
+
/>
|
| 96 |
+
</FormControl>
|
| 97 |
+
<FormMessage />
|
| 98 |
+
</FormItem>
|
| 99 |
+
)}
|
| 100 |
+
/>
|
| 101 |
+
<Button type="submit" className="w-full">
|
| 102 |
+
{t('signUp')}
|
| 103 |
+
</Button>
|
| 104 |
+
</form>
|
| 105 |
+
</Form>
|
| 106 |
+
);
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
export function SignInForm() {
|
| 110 |
+
const { t } = useTranslate('login');
|
| 111 |
+
|
| 112 |
+
const FormSchema = z.object({
|
| 113 |
+
email: z.string().email({
|
| 114 |
+
message: t('emailPlaceholder'),
|
| 115 |
+
}),
|
| 116 |
+
password: z.string({ required_error: t('passwordPlaceholder') }),
|
| 117 |
+
});
|
| 118 |
+
|
| 119 |
+
const form = useForm<z.infer<typeof FormSchema>>({
|
| 120 |
+
resolver: zodResolver(FormSchema),
|
| 121 |
+
defaultValues: {
|
| 122 |
+
email: '',
|
| 123 |
+
},
|
| 124 |
+
});
|
| 125 |
+
|
| 126 |
+
function onSubmit(data: z.infer<typeof FormSchema>) {
|
| 127 |
+
console.log('🚀 ~ onSubmit ~ data:', data);
|
| 128 |
+
toast({
|
| 129 |
+
title: 'You submitted the following values:',
|
| 130 |
+
description: (
|
| 131 |
+
<pre className="mt-2 w-[340px] rounded-md bg-slate-950 p-4">
|
| 132 |
+
<code className="text-white">{JSON.stringify(data, null, 2)}</code>
|
| 133 |
+
</pre>
|
| 134 |
+
),
|
| 135 |
+
});
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
return (
|
| 139 |
+
<Form {...form}>
|
| 140 |
+
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6">
|
| 141 |
+
<FormField
|
| 142 |
+
control={form.control}
|
| 143 |
+
name="email"
|
| 144 |
+
render={({ field }) => (
|
| 145 |
+
<FormItem>
|
| 146 |
+
<FormLabel>{t('emailLabel')}</FormLabel>
|
| 147 |
+
<FormControl>
|
| 148 |
+
<Input placeholder={t('emailPlaceholder')} {...field} />
|
| 149 |
+
</FormControl>
|
| 150 |
+
<FormMessage />
|
| 151 |
+
</FormItem>
|
| 152 |
+
)}
|
| 153 |
+
/>
|
| 154 |
+
<FormField
|
| 155 |
+
control={form.control}
|
| 156 |
+
name="password"
|
| 157 |
+
render={({ field }) => (
|
| 158 |
+
<FormItem>
|
| 159 |
+
<FormLabel>{t('passwordLabel')}</FormLabel>
|
| 160 |
+
<FormControl>
|
| 161 |
+
<Input
|
| 162 |
+
type={'password'}
|
| 163 |
+
placeholder={t('passwordPlaceholder')}
|
| 164 |
+
{...field}
|
| 165 |
+
/>
|
| 166 |
+
</FormControl>
|
| 167 |
+
<FormMessage />
|
| 168 |
+
</FormItem>
|
| 169 |
+
)}
|
| 170 |
+
/>
|
| 171 |
+
<div className="flex items-center space-x-2">
|
| 172 |
+
<Checkbox id="terms" />
|
| 173 |
+
<label
|
| 174 |
+
htmlFor="terms"
|
| 175 |
+
className="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
|
| 176 |
+
>
|
| 177 |
+
{t('rememberMe')}
|
| 178 |
+
</label>
|
| 179 |
+
</div>
|
| 180 |
+
<Button type="submit" className="w-full">
|
| 181 |
+
{t('login')}
|
| 182 |
+
</Button>
|
| 183 |
+
</form>
|
| 184 |
+
</Form>
|
| 185 |
+
);
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
export function VerifyEmailForm() {
|
| 189 |
+
const FormSchema = z.object({
|
| 190 |
+
pin: z.string().min(6, {
|
| 191 |
+
message: 'Your one-time password must be 6 characters.',
|
| 192 |
+
}),
|
| 193 |
+
});
|
| 194 |
+
|
| 195 |
+
const form = useForm<z.infer<typeof FormSchema>>({
|
| 196 |
+
resolver: zodResolver(FormSchema),
|
| 197 |
+
defaultValues: {
|
| 198 |
+
pin: '',
|
| 199 |
+
},
|
| 200 |
+
});
|
| 201 |
+
|
| 202 |
+
function onSubmit(data: z.infer<typeof FormSchema>) {
|
| 203 |
+
console.log('🚀 ~ onSubmit ~ data:', data);
|
| 204 |
+
toast({
|
| 205 |
+
title: 'You submitted the following values:',
|
| 206 |
+
description: (
|
| 207 |
+
<pre className="mt-2 w-[340px] rounded-md bg-slate-950 p-4">
|
| 208 |
+
<code className="text-white">{JSON.stringify(data, null, 2)}</code>
|
| 209 |
+
</pre>
|
| 210 |
+
),
|
| 211 |
+
});
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
return (
|
| 215 |
+
<Form {...form}>
|
| 216 |
+
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6">
|
| 217 |
+
<FormField
|
| 218 |
+
control={form.control}
|
| 219 |
+
name="pin"
|
| 220 |
+
render={({ field }) => (
|
| 221 |
+
<FormItem>
|
| 222 |
+
<FormLabel>One-Time Password</FormLabel>
|
| 223 |
+
<FormControl>
|
| 224 |
+
<InputOTP maxLength={6} {...field}>
|
| 225 |
+
<InputOTPGroup>
|
| 226 |
+
<InputOTPSlot index={0} />
|
| 227 |
+
<InputOTPSlot index={1} />
|
| 228 |
+
<InputOTPSlot index={2} />
|
| 229 |
+
<InputOTPSlot index={3} />
|
| 230 |
+
<InputOTPSlot index={4} />
|
| 231 |
+
<InputOTPSlot index={5} />
|
| 232 |
+
</InputOTPGroup>
|
| 233 |
+
</InputOTP>
|
| 234 |
+
</FormControl>
|
| 235 |
+
<FormMessage />
|
| 236 |
+
</FormItem>
|
| 237 |
+
)}
|
| 238 |
+
/>
|
| 239 |
+
|
| 240 |
+
<Button type="submit" className="w-full">
|
| 241 |
+
Verify
|
| 242 |
+
</Button>
|
| 243 |
+
</form>
|
| 244 |
+
</Form>
|
| 245 |
+
);
|
| 246 |
+
}
|
web/src/pages/login-next/index.tsx
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Button } from '@/components/ui/button';
|
| 2 |
+
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
| 3 |
+
import { Separator } from '@/components/ui/separator';
|
| 4 |
+
import { useTranslate } from '@/hooks/common-hooks';
|
| 5 |
+
import { DiscordLogoIcon, GitHubLogoIcon } from '@radix-ui/react-icons';
|
| 6 |
+
import { SignInForm, SignUpForm, VerifyEmailForm } from './form';
|
| 7 |
+
|
| 8 |
+
function LoginFooter() {
|
| 9 |
+
return (
|
| 10 |
+
<section className="pt-[30px]">
|
| 11 |
+
<Separator />
|
| 12 |
+
<p className="text-center pt-[20px]">or continue with</p>
|
| 13 |
+
<div className="flex gap-4 justify-center pt-[20px]">
|
| 14 |
+
<GitHubLogoIcon className="w-8 h-8"></GitHubLogoIcon>
|
| 15 |
+
<DiscordLogoIcon className="w-8 h-8"></DiscordLogoIcon>
|
| 16 |
+
</div>
|
| 17 |
+
</section>
|
| 18 |
+
);
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
export function SignUpCard() {
|
| 22 |
+
const { t } = useTranslate('login');
|
| 23 |
+
|
| 24 |
+
return (
|
| 25 |
+
<Card className="w-[400px]">
|
| 26 |
+
<CardHeader>
|
| 27 |
+
<CardTitle>{t('signUp')}</CardTitle>
|
| 28 |
+
</CardHeader>
|
| 29 |
+
<CardContent>
|
| 30 |
+
<SignUpForm></SignUpForm>
|
| 31 |
+
<LoginFooter></LoginFooter>
|
| 32 |
+
</CardContent>
|
| 33 |
+
</Card>
|
| 34 |
+
);
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
export function SignInCard() {
|
| 38 |
+
const { t } = useTranslate('login');
|
| 39 |
+
|
| 40 |
+
return (
|
| 41 |
+
<Card className="w-[400px]">
|
| 42 |
+
<CardHeader>
|
| 43 |
+
<CardTitle>{t('login')}</CardTitle>
|
| 44 |
+
</CardHeader>
|
| 45 |
+
<CardContent>
|
| 46 |
+
<SignInForm></SignInForm>
|
| 47 |
+
</CardContent>
|
| 48 |
+
</Card>
|
| 49 |
+
);
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
export function VerifyEmailCard() {
|
| 53 |
+
// const { t } = useTranslate('login');
|
| 54 |
+
|
| 55 |
+
return (
|
| 56 |
+
<Card className="w-[400px]">
|
| 57 |
+
<CardHeader>
|
| 58 |
+
<CardTitle>Verify email</CardTitle>
|
| 59 |
+
</CardHeader>
|
| 60 |
+
<CardContent>
|
| 61 |
+
<section className="flex gap-y-6 flex-col">
|
| 62 |
+
<div className="flex items-center space-x-4">
|
| 63 |
+
<div className="flex-1 space-y-1">
|
| 64 |
+
<p className="text-sm font-medium leading-none">
|
| 65 |
+
We’ve sent a 6-digit code to
|
| 66 |
+
</p>
|
| 67 |
+
<p className="text-sm text-blue-500">[email protected].</p>
|
| 68 |
+
</div>
|
| 69 |
+
<Button>Resend</Button>
|
| 70 |
+
</div>
|
| 71 |
+
<VerifyEmailForm></VerifyEmailForm>
|
| 72 |
+
</section>
|
| 73 |
+
</CardContent>
|
| 74 |
+
</Card>
|
| 75 |
+
);
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
const Login = () => {
|
| 79 |
+
return (
|
| 80 |
+
<>
|
| 81 |
+
<SignUpCard></SignUpCard>
|
| 82 |
+
<SignInCard></SignInCard>
|
| 83 |
+
<VerifyEmailCard></VerifyEmailCard>
|
| 84 |
+
</>
|
| 85 |
+
);
|
| 86 |
+
};
|
| 87 |
+
|
| 88 |
+
export default Login;
|
web/src/routes.ts
CHANGED
|
@@ -4,6 +4,11 @@ const routes = [
|
|
| 4 |
component: '@/pages/login',
|
| 5 |
layout: false,
|
| 6 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
{
|
| 8 |
path: '/chat/share',
|
| 9 |
component: '@/pages/chat/share',
|
|
@@ -116,6 +121,11 @@ const routes = [
|
|
| 116 |
component: '@/pages/404',
|
| 117 |
layout: false,
|
| 118 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 119 |
];
|
| 120 |
|
| 121 |
export default routes;
|
|
|
|
| 4 |
component: '@/pages/login',
|
| 5 |
layout: false,
|
| 6 |
},
|
| 7 |
+
{
|
| 8 |
+
path: '/login-next',
|
| 9 |
+
component: '@/pages/login-next',
|
| 10 |
+
layout: false,
|
| 11 |
+
},
|
| 12 |
{
|
| 13 |
path: '/chat/share',
|
| 14 |
component: '@/pages/chat/share',
|
|
|
|
| 121 |
component: '@/pages/404',
|
| 122 |
layout: false,
|
| 123 |
},
|
| 124 |
+
{
|
| 125 |
+
path: '/demo',
|
| 126 |
+
component: '@/pages/demo',
|
| 127 |
+
layout: false,
|
| 128 |
+
},
|
| 129 |
];
|
| 130 |
|
| 131 |
export default routes;
|
web/tailwind.config.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
const { fontFamily } = require('tailwindcss/defaultTheme');
|
| 2 |
+
|
| 3 |
+
/** @type {import('tailwindcss').Config} */
|
| 4 |
+
|
| 5 |
+
module.exports = {
|
| 6 |
+
darkMode: ['class'],
|
| 7 |
+
content: [
|
| 8 |
+
'./src/pages/**/*.tsx',
|
| 9 |
+
'./src/components/**/*.tsx',
|
| 10 |
+
'./src/layouts/**/*.tsx',
|
| 11 |
+
],
|
| 12 |
+
theme: {
|
| 13 |
+
container: {
|
| 14 |
+
center: true,
|
| 15 |
+
padding: '2rem',
|
| 16 |
+
screens: {
|
| 17 |
+
'2xl': '1400px',
|
| 18 |
+
},
|
| 19 |
+
},
|
| 20 |
+
extend: {
|
| 21 |
+
colors: {
|
| 22 |
+
border: 'hsl(var(--border))',
|
| 23 |
+
input: 'hsl(var(--input))',
|
| 24 |
+
ring: 'hsl(var(--ring))',
|
| 25 |
+
background: 'hsl(var(--background))',
|
| 26 |
+
foreground: 'hsl(var(--foreground))',
|
| 27 |
+
primary: {
|
| 28 |
+
DEFAULT: 'hsl(var(--primary))',
|
| 29 |
+
foreground: 'hsl(var(--primary-foreground))',
|
| 30 |
+
},
|
| 31 |
+
secondary: {
|
| 32 |
+
DEFAULT: 'hsl(var(--secondary))',
|
| 33 |
+
foreground: 'hsl(var(--secondary-foreground))',
|
| 34 |
+
},
|
| 35 |
+
destructive: {
|
| 36 |
+
DEFAULT: 'hsl(var(--destructive))',
|
| 37 |
+
foreground: 'hsl(var(--destructive-foreground))',
|
| 38 |
+
},
|
| 39 |
+
muted: {
|
| 40 |
+
DEFAULT: 'hsl(var(--muted))',
|
| 41 |
+
foreground: 'hsl(var(--muted-foreground))',
|
| 42 |
+
},
|
| 43 |
+
accent: {
|
| 44 |
+
DEFAULT: 'hsl(var(--accent))',
|
| 45 |
+
foreground: 'hsl(var(--accent-foreground))',
|
| 46 |
+
},
|
| 47 |
+
popover: {
|
| 48 |
+
DEFAULT: 'hsl(var(--popover))',
|
| 49 |
+
foreground: 'hsl(var(--popover-foreground))',
|
| 50 |
+
},
|
| 51 |
+
card: {
|
| 52 |
+
DEFAULT: 'hsl(var(--card))',
|
| 53 |
+
foreground: 'hsl(var(--card-foreground))',
|
| 54 |
+
},
|
| 55 |
+
},
|
| 56 |
+
borderRadius: {
|
| 57 |
+
lg: `var(--radius)`,
|
| 58 |
+
md: `calc(var(--radius) - 2px)`,
|
| 59 |
+
sm: 'calc(var(--radius) - 4px)',
|
| 60 |
+
},
|
| 61 |
+
fontFamily: {
|
| 62 |
+
sans: ['var(--font-sans)', ...fontFamily.sans],
|
| 63 |
+
},
|
| 64 |
+
keyframes: {
|
| 65 |
+
'accordion-down': {
|
| 66 |
+
from: { height: '0' },
|
| 67 |
+
to: { height: 'var(--radix-accordion-content-height)' },
|
| 68 |
+
},
|
| 69 |
+
'accordion-up': {
|
| 70 |
+
from: { height: 'var(--radix-accordion-content-height)' },
|
| 71 |
+
to: { height: '0' },
|
| 72 |
+
},
|
| 73 |
+
'caret-blink': {
|
| 74 |
+
'0%,70%,100%': { opacity: '1' },
|
| 75 |
+
'20%,50%': { opacity: '0' },
|
| 76 |
+
},
|
| 77 |
+
},
|
| 78 |
+
animation: {
|
| 79 |
+
'accordion-down': 'accordion-down 0.2s ease-out',
|
| 80 |
+
'accordion-up': 'accordion-up 0.2s ease-out',
|
| 81 |
+
'caret-blink': 'caret-blink 1.25s ease-out infinite',
|
| 82 |
+
},
|
| 83 |
+
},
|
| 84 |
+
},
|
| 85 |
+
plugins: [require('tailwindcss-animate')],
|
| 86 |
+
};
|
web/tailwind.css
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@tailwind base;
|
| 2 |
+
@tailwind components;
|
| 3 |
+
@tailwind utilities;
|
| 4 |
+
|
| 5 |
+
@layer base {
|
| 6 |
+
:root {
|
| 7 |
+
--background: 0 0% 100%;
|
| 8 |
+
--foreground: 222.2 47.4% 11.2%;
|
| 9 |
+
|
| 10 |
+
--muted: 210 40% 96.1%;
|
| 11 |
+
--muted-foreground: 215.4 16.3% 46.9%;
|
| 12 |
+
|
| 13 |
+
--popover: 0 0% 100%;
|
| 14 |
+
--popover-foreground: 222.2 47.4% 11.2%;
|
| 15 |
+
|
| 16 |
+
--border: 214.3 31.8% 91.4%;
|
| 17 |
+
--input: 214.3 31.8% 91.4%;
|
| 18 |
+
|
| 19 |
+
--card: 0 0% 100%;
|
| 20 |
+
--card-foreground: 222.2 47.4% 11.2%;
|
| 21 |
+
|
| 22 |
+
--primary: 222.2 47.4% 11.2%;
|
| 23 |
+
--primary-foreground: 210 40% 98%;
|
| 24 |
+
|
| 25 |
+
--secondary: 210 40% 96.1%;
|
| 26 |
+
--secondary-foreground: 222.2 47.4% 11.2%;
|
| 27 |
+
|
| 28 |
+
--accent: 210 40% 96.1%;
|
| 29 |
+
--accent-foreground: 222.2 47.4% 11.2%;
|
| 30 |
+
|
| 31 |
+
--destructive: 0 100% 50%;
|
| 32 |
+
--destructive-foreground: 210 40% 98%;
|
| 33 |
+
|
| 34 |
+
--ring: 215 20.2% 65.1%;
|
| 35 |
+
|
| 36 |
+
--radius: 0.5rem;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
.dark {
|
| 40 |
+
--background: 224 71% 4%;
|
| 41 |
+
--foreground: 213 31% 91%;
|
| 42 |
+
|
| 43 |
+
--muted: 223 47% 11%;
|
| 44 |
+
--muted-foreground: 215.4 16.3% 56.9%;
|
| 45 |
+
|
| 46 |
+
--accent: 216 34% 17%;
|
| 47 |
+
--accent-foreground: 210 40% 98%;
|
| 48 |
+
|
| 49 |
+
--popover: 224 71% 4%;
|
| 50 |
+
--popover-foreground: 215 20.2% 65.1%;
|
| 51 |
+
|
| 52 |
+
--border: 216 34% 17%;
|
| 53 |
+
--input: 216 34% 17%;
|
| 54 |
+
|
| 55 |
+
--card: 224 71% 4%;
|
| 56 |
+
--card-foreground: 213 31% 91%;
|
| 57 |
+
|
| 58 |
+
--primary: 210 40% 98%;
|
| 59 |
+
--primary-foreground: 222.2 47.4% 1.2%;
|
| 60 |
+
|
| 61 |
+
--secondary: 222.2 47.4% 11.2%;
|
| 62 |
+
--secondary-foreground: 210 40% 98%;
|
| 63 |
+
|
| 64 |
+
--destructive: 0 63% 31%;
|
| 65 |
+
--destructive-foreground: 210 40% 98%;
|
| 66 |
+
|
| 67 |
+
--ring: 216 34% 17%;
|
| 68 |
+
|
| 69 |
+
--radius: 0.5rem;
|
| 70 |
+
}
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
@layer base {
|
| 74 |
+
* {
|
| 75 |
+
@apply border-border;
|
| 76 |
+
}
|
| 77 |
+
body {
|
| 78 |
+
@apply bg-background text-foreground;
|
| 79 |
+
font-feature-settings:
|
| 80 |
+
'rlig' 1,
|
| 81 |
+
'calt' 1;
|
| 82 |
+
}
|
| 83 |
+
}
|