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 |
+
}
|