+274
frontend/bun.lock
+274
frontend/bun.lock
···
5
5
"name": "frontend",
6
6
"dependencies": {
7
7
"@emotion/react": "^11.14.0",
8
+
"@hookform/resolvers": "^3.10.0",
8
9
"@mantine/core": "^7.16.1",
9
10
"@mantine/form": "^7.16.1",
10
11
"@mantine/hooks": "^7.16.1",
12
+
"@radix-ui/react-label": "^2.1.1",
13
+
"@radix-ui/react-slot": "^1.1.1",
14
+
"@radix-ui/react-tabs": "^1.1.2",
15
+
"@radix-ui/react-toast": "^1.2.5",
16
+
"@tailwindcss/vite": "^4.0.0",
11
17
"axios": "^1.7.9",
18
+
"class-variance-authority": "^0.7.1",
19
+
"clsx": "^2.1.1",
20
+
"lucide-react": "^0.474.0",
12
21
"react": "^18.3.1",
13
22
"react-dom": "^18.3.1",
23
+
"react-hook-form": "^7.54.2",
24
+
"tailwind-merge": "^2.6.0",
25
+
"tailwindcss-animate": "^1.0.7",
26
+
"zod": "^3.24.1",
14
27
},
15
28
"devDependencies": {
16
29
"@eslint/js": "^9.17.0",
···
18
31
"@types/react": "^18.3.18",
19
32
"@types/react-dom": "^18.3.5",
20
33
"@vitejs/plugin-react": "^4.3.4",
34
+
"autoprefixer": "^10.4.20",
21
35
"eslint": "^9.17.0",
22
36
"eslint-plugin-react-hooks": "^5.0.0",
23
37
"eslint-plugin-react-refresh": "^0.4.16",
24
38
"globals": "^15.14.0",
39
+
"postcss": "^8.5.1",
40
+
"tailwindcss": "3.4.17",
25
41
"typescript": "~5.6.2",
26
42
"typescript-eslint": "^8.18.2",
27
43
"vite": "^6.0.5",
···
29
45
},
30
46
},
31
47
"packages": {
48
+
"@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="],
49
+
32
50
"@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="],
33
51
34
52
"@babel/code-frame": ["@babel/code-frame@7.26.2", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ=="],
···
167
185
168
186
"@floating-ui/utils": ["@floating-ui/utils@0.2.9", "", {}, "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="],
169
187
188
+
"@hookform/resolvers": ["@hookform/resolvers@3.10.0", "", { "peerDependencies": { "react-hook-form": "^7.0.0" } }, "sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag=="],
189
+
170
190
"@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
171
191
172
192
"@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="],
···
174
194
"@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="],
175
195
176
196
"@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.1", "", {}, "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA=="],
197
+
198
+
"@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="],
177
199
178
200
"@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="],
179
201
···
197
219
198
220
"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
199
221
222
+
"@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="],
223
+
224
+
"@radix-ui/primitive": ["@radix-ui/primitive@1.1.1", "", {}, "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA=="],
225
+
226
+
"@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-slot": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA=="],
227
+
228
+
"@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw=="],
229
+
230
+
"@radix-ui/react-context": ["@radix-ui/react-context@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q=="],
231
+
232
+
"@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg=="],
233
+
234
+
"@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.4", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-escape-keydown": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-XDUI0IVYVSwjMXxM6P4Dfti7AH+Y4oS/TB+sglZ/EXc7cqLwGAmp1NlMrcUjj7ks6R5WTZuWKv44FBbLpwU3sA=="],
235
+
236
+
"@radix-ui/react-id": ["@radix-ui/react-id@1.1.0", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA=="],
237
+
238
+
"@radix-ui/react-label": ["@radix-ui/react-label@2.1.1", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw=="],
239
+
240
+
"@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw=="],
241
+
242
+
"@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.2", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg=="],
243
+
244
+
"@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.0.1", "", { "dependencies": { "@radix-ui/react-slot": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg=="],
245
+
246
+
"@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.1", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-collection": "1.1.1", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw=="],
247
+
248
+
"@radix-ui/react-slot": ["@radix-ui/react-slot@1.1.1", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g=="],
249
+
250
+
"@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.2", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-direction": "1.1.0", "@radix-ui/react-id": "1.1.0", "@radix-ui/react-presence": "1.1.2", "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-roving-focus": "1.1.1", "@radix-ui/react-use-controllable-state": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ=="],
251
+
252
+
"@radix-ui/react-toast": ["@radix-ui/react-toast@1.2.5", "", { "dependencies": { "@radix-ui/primitive": "1.1.1", "@radix-ui/react-collection": "1.1.1", "@radix-ui/react-compose-refs": "1.1.1", "@radix-ui/react-context": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.4", "@radix-ui/react-portal": "1.1.3", "@radix-ui/react-presence": "1.1.2", "@radix-ui/react-primitive": "2.0.1", "@radix-ui/react-use-callback-ref": "1.1.0", "@radix-ui/react-use-controllable-state": "1.1.0", "@radix-ui/react-use-layout-effect": "1.1.0", "@radix-ui/react-visually-hidden": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-ZzUsAaOx8NdXZZKcFNDhbSlbsCUy8qQWmzTdgrlrhhZAOx2ofLtKrBDW9fkqhFvXgmtv560Uj16pkLkqML7SHA=="],
253
+
254
+
"@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw=="],
255
+
256
+
"@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.1.0", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw=="],
257
+
258
+
"@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.0", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw=="],
259
+
260
+
"@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="],
261
+
262
+
"@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.1.1", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg=="],
263
+
200
264
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.32.0", "", { "os": "android", "cpu": "arm" }, "sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg=="],
201
265
202
266
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A=="],
···
235
299
236
300
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA=="],
237
301
302
+
"@tailwindcss/node": ["@tailwindcss/node@4.0.0", "", { "dependencies": { "enhanced-resolve": "^5.18.0", "jiti": "^2.4.2", "tailwindcss": "4.0.0" } }, "sha512-tfG2uBvo6j6kDIPmntxwXggCOZAt7SkpAXJ6pTIYirNdk5FBqh/CZZ9BZPpgcl/tNFLs6zc4yghM76sqiELG9g=="],
303
+
304
+
"@tailwindcss/oxide": ["@tailwindcss/oxide@4.0.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.0.0", "@tailwindcss/oxide-darwin-arm64": "4.0.0", "@tailwindcss/oxide-darwin-x64": "4.0.0", "@tailwindcss/oxide-freebsd-x64": "4.0.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.0.0", "@tailwindcss/oxide-linux-arm64-musl": "4.0.0", "@tailwindcss/oxide-linux-x64-gnu": "4.0.0", "@tailwindcss/oxide-linux-x64-musl": "4.0.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.0.0", "@tailwindcss/oxide-win32-x64-msvc": "4.0.0" } }, "sha512-W3FjpJgy4VV1JiL7iBYDf2n/WkeDg1Il+0Q7eWnqPyvkPPCo/Mbwc5BiaT7dfBNV6tQKAhVE34rU5xl8pSl50w=="],
305
+
306
+
"@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.0.0", "", { "os": "android", "cpu": "arm64" }, "sha512-EAhjU0+FIdyGPR+7MbBWubLLPtmOu+p7c2egTTFBRk/n//zYjNvVK0WhcBK5Y7oUB5mo4EjA2mCbY7dcEMWSRw=="],
307
+
308
+
"@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.0.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-hdz4xnSWS11cIp+7ye+3dGHqs0X33z+BXXTtgPOguDWVa+TdXUzwxonklSzf5wlJFuot3dv5eWzhlNai0oYYQg=="],
309
+
310
+
"@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.0.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-+dOUUaXTkPKKhtUI9QtVaYg+MpmLh2CN0dHohiYXaBirEyPMkjaT0zbRgzQlNnQWjCVVXPQluIEb0OMEjSTH+Q=="],
311
+
312
+
"@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.0.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-CJhGDhxnrmu4SwyC62fA+wP24MhA/TZlIhRHqg1kRuIHoGoVR2uSSm1qxTxU37tSSZj8Up0q6jsBJCAP4k7rgQ=="],
313
+
314
+
"@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.0.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Wy7Av0xzXfY2ujZBcYy4+7GQm25/J1iHvlQU2CfwdDCuPWfIjYzR6kggz+uVdSJyKV2s64znchBxRE8kV4uXSA=="],
315
+
316
+
"@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-srwBo2l6pvM0swBntc1ucuhGsfFOLkqPRFQ3dWARRTfSkL1U9nAsob2MKc/n47Eva/W9pZZgMOuf7rDw8pK1Ew=="],
317
+
318
+
"@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-abhusswkduYWuezkBmgo0K0/erGq3M4Se5xP0fhc/0dKs0X/rJUYYCFWntHb3IGh3aVzdQ0SXJs93P76DbUqtw=="],
319
+
320
+
"@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-hGtRYIUEx377/HlU49+jvVKKwU1MDSKYSMMs0JFO2Wp7LGxk5+0j5+RBk9NFnmp/lbp32yPTgIOO5m1BmDq36A=="],
321
+
322
+
"@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-7xgQgSAThs0I14VAgmxpJnK6XFSZBxHMGoDXkLyYkEnu+8WRQMbCP93dkCUn2PIv+Q+JulRgc00PJ09uORSLXQ=="],
323
+
324
+
"@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.0.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-qEcgTIPcWY5ZE7f6VxQ/JPrSFMcehzVIlZj7sGE3mVd5YWreAT+Fl1vSP8q2pjnWXn0avZG3Iw7a2hJQAm+fTQ=="],
325
+
326
+
"@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.0.0", "", { "os": "win32", "cpu": "x64" }, "sha512-bqT0AY8RXb8GMDy28JtngvqaOSB2YixbLPLvUo6I6lkvvUwA6Eqh2Tj60e2Lh7O/k083f8tYiB0WEK4wmTI7Jg=="],
327
+
328
+
"@tailwindcss/vite": ["@tailwindcss/vite@4.0.0", "", { "dependencies": { "@tailwindcss/node": "^4.0.0", "@tailwindcss/oxide": "^4.0.0", "lightningcss": "^1.29.1", "tailwindcss": "4.0.0" }, "peerDependencies": { "vite": "^5.2.0 || ^6" } }, "sha512-4uukMiU9gHui8KMPMdWic5SP1O/tmQ1NFSRNrQWmcop5evAVl/LZ6/LuWL3quEiecp2RBcRWwqJrG+mFXlRlew=="],
329
+
238
330
"@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="],
239
331
240
332
"@types/babel__generator": ["@types/babel__generator@7.6.8", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw=="],
···
281
373
282
374
"ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="],
283
375
376
+
"ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="],
377
+
284
378
"ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
285
379
380
+
"any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="],
381
+
382
+
"anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="],
383
+
384
+
"arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="],
385
+
286
386
"argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
287
387
288
388
"asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="],
289
389
390
+
"autoprefixer": ["autoprefixer@10.4.20", "", { "dependencies": { "browserslist": "^4.23.3", "caniuse-lite": "^1.0.30001646", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g=="],
391
+
290
392
"axios": ["axios@1.7.9", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw=="],
291
393
292
394
"babel-plugin-macros": ["babel-plugin-macros@3.1.0", "", { "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", "resolve": "^1.19.0" } }, "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg=="],
293
395
294
396
"balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
295
397
398
+
"binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="],
399
+
296
400
"brace-expansion": ["brace-expansion@1.1.11", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="],
297
401
298
402
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
···
301
405
302
406
"callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
303
407
408
+
"camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="],
409
+
304
410
"caniuse-lite": ["caniuse-lite@1.0.30001695", "", {}, "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw=="],
305
411
306
412
"chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
307
413
414
+
"chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="],
415
+
416
+
"class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="],
417
+
308
418
"clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
309
419
310
420
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
···
312
422
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
313
423
314
424
"combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="],
425
+
426
+
"commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="],
315
427
316
428
"concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
317
429
···
321
433
322
434
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
323
435
436
+
"cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="],
437
+
324
438
"csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
325
439
326
440
"debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="],
···
328
442
"deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
329
443
330
444
"delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="],
445
+
446
+
"detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="],
331
447
332
448
"detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="],
333
449
450
+
"didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="],
451
+
452
+
"dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="],
453
+
454
+
"eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="],
455
+
334
456
"electron-to-chromium": ["electron-to-chromium@1.5.88", "", {}, "sha512-K3C2qf1o+bGzbilTDCTBhTQcMS9KW60yTAaTeeXsfvQuTDDwlokLam/AdqlqcSy9u4UainDgsHV23ksXAOgamw=="],
457
+
458
+
"emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
459
+
460
+
"enhanced-resolve": ["enhanced-resolve@5.18.0", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ=="],
335
461
336
462
"error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="],
337
463
···
385
511
386
512
"follow-redirects": ["follow-redirects@1.15.9", "", {}, "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ=="],
387
513
514
+
"foreground-child": ["foreground-child@3.3.0", "", { "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" } }, "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg=="],
515
+
388
516
"form-data": ["form-data@4.0.1", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw=="],
517
+
518
+
"fraction.js": ["fraction.js@4.3.7", "", {}, "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew=="],
389
519
390
520
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
391
521
···
394
524
"gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="],
395
525
396
526
"get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="],
527
+
528
+
"glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="],
397
529
398
530
"glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
399
531
400
532
"globals": ["globals@15.14.0", "", {}, "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig=="],
401
533
534
+
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
535
+
402
536
"graphemer": ["graphemer@1.4.0", "", {}, "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="],
403
537
404
538
"has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
···
415
549
416
550
"is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="],
417
551
552
+
"is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="],
553
+
418
554
"is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="],
419
555
420
556
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
421
557
558
+
"is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
559
+
422
560
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
423
561
424
562
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
425
563
426
564
"isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
565
+
566
+
"jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="],
567
+
568
+
"jiti": ["jiti@2.4.2", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A=="],
427
569
428
570
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
429
571
···
447
589
448
590
"levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
449
591
592
+
"lightningcss": ["lightningcss@1.29.1", "", { "dependencies": { "detect-libc": "^1.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.29.1", "lightningcss-darwin-x64": "1.29.1", "lightningcss-freebsd-x64": "1.29.1", "lightningcss-linux-arm-gnueabihf": "1.29.1", "lightningcss-linux-arm64-gnu": "1.29.1", "lightningcss-linux-arm64-musl": "1.29.1", "lightningcss-linux-x64-gnu": "1.29.1", "lightningcss-linux-x64-musl": "1.29.1", "lightningcss-win32-arm64-msvc": "1.29.1", "lightningcss-win32-x64-msvc": "1.29.1" } }, "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q=="],
593
+
594
+
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.29.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw=="],
595
+
596
+
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.29.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA=="],
597
+
598
+
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.29.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ=="],
599
+
600
+
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.29.1", "", { "os": "linux", "cpu": "arm" }, "sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg=="],
601
+
602
+
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.29.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ=="],
603
+
604
+
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.29.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw=="],
605
+
606
+
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.29.1", "", { "os": "linux", "cpu": "x64" }, "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw=="],
607
+
608
+
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.29.1", "", { "os": "linux", "cpu": "x64" }, "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw=="],
609
+
610
+
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.29.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog=="],
611
+
612
+
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.29.1", "", { "os": "win32", "cpu": "x64" }, "sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q=="],
613
+
614
+
"lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="],
615
+
450
616
"lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
451
617
452
618
"locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
···
456
622
"loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="],
457
623
458
624
"lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
625
+
626
+
"lucide-react": ["lucide-react@0.474.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA=="],
459
627
460
628
"merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],
461
629
···
467
635
468
636
"minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
469
637
638
+
"minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="],
639
+
470
640
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
641
+
642
+
"mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="],
471
643
472
644
"nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="],
473
645
···
475
647
476
648
"node-releases": ["node-releases@2.0.19", "", {}, "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw=="],
477
649
650
+
"normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
651
+
652
+
"normalize-range": ["normalize-range@0.1.2", "", {}, "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA=="],
653
+
654
+
"object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="],
655
+
656
+
"object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="],
657
+
478
658
"optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
479
659
480
660
"p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
481
661
482
662
"p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
483
663
664
+
"package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="],
665
+
484
666
"parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
485
667
486
668
"parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="],
···
491
673
492
674
"path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
493
675
676
+
"path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="],
677
+
494
678
"path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="],
495
679
496
680
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
497
681
498
682
"picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
499
683
684
+
"pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="],
685
+
686
+
"pirates": ["pirates@4.0.6", "", {}, "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg=="],
687
+
500
688
"postcss": ["postcss@8.5.1", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ=="],
501
689
690
+
"postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="],
691
+
692
+
"postcss-js": ["postcss-js@4.0.1", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw=="],
693
+
694
+
"postcss-load-config": ["postcss-load-config@4.0.2", "", { "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" }, "optionalPeers": ["postcss", "ts-node"] }, "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ=="],
695
+
696
+
"postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="],
697
+
698
+
"postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="],
699
+
700
+
"postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="],
701
+
502
702
"prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
503
703
504
704
"proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="],
···
510
710
"react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="],
511
711
512
712
"react-dom": ["react-dom@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw=="],
713
+
714
+
"react-hook-form": ["react-hook-form@7.54.2", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg=="],
513
715
514
716
"react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
515
717
···
524
726
"react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="],
525
727
526
728
"react-textarea-autosize": ["react-textarea-autosize@8.5.6", "", { "dependencies": { "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-aT3ioKXMa8f6zHYGebhbdMD2L00tKeRX1zuVuDx9YQK/JLLRSaSxq3ugECEmUB9z2kvk6bFSIoRHLkkUv0RJiw=="],
729
+
730
+
"read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="],
731
+
732
+
"readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
527
733
528
734
"regenerator-runtime": ["regenerator-runtime@0.14.1", "", {}, "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="],
529
735
···
545
751
546
752
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
547
753
754
+
"signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
755
+
548
756
"source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="],
549
757
550
758
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
551
759
760
+
"string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="],
761
+
762
+
"string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
763
+
764
+
"strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="],
765
+
766
+
"strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
767
+
552
768
"strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
553
769
554
770
"stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="],
771
+
772
+
"sucrase": ["sucrase@3.35.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA=="],
555
773
556
774
"supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
557
775
···
559
777
560
778
"tabbable": ["tabbable@6.2.0", "", {}, "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="],
561
779
780
+
"tailwind-merge": ["tailwind-merge@2.6.0", "", {}, "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA=="],
781
+
782
+
"tailwindcss": ["tailwindcss@3.4.17", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.6", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og=="],
783
+
784
+
"tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="],
785
+
786
+
"tapable": ["tapable@2.2.1", "", {}, "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ=="],
787
+
788
+
"thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="],
789
+
790
+
"thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="],
791
+
562
792
"to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
563
793
564
794
"ts-api-utils": ["ts-api-utils@2.0.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ=="],
795
+
796
+
"ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="],
565
797
566
798
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
567
799
···
589
821
590
822
"use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="],
591
823
824
+
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
825
+
592
826
"vite": ["vite@6.0.11", "", { "dependencies": { "esbuild": "^0.24.2", "postcss": "^8.4.49", "rollup": "^4.23.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg=="],
593
827
594
828
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
595
829
596
830
"word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
597
831
832
+
"wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="],
833
+
834
+
"wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
835
+
598
836
"yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
599
837
600
838
"yaml": ["yaml@1.10.2", "", {}, "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="],
601
839
602
840
"yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
841
+
842
+
"zod": ["zod@3.24.1", "", {}, "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A=="],
603
843
604
844
"@babel/traverse/globals": ["globals@11.12.0", "", {}, "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="],
605
845
···
611
851
612
852
"@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="],
613
853
854
+
"@tailwindcss/node/tailwindcss": ["tailwindcss@4.0.0", "", {}, "sha512-ULRPI3A+e39T7pSaf1xoi58AqqJxVCLg8F/uM5A3FadUbnyDTgltVnXJvdkTjwCOGA6NazqHVcwPJC5h2vRYVQ=="],
855
+
856
+
"@tailwindcss/vite/tailwindcss": ["tailwindcss@4.0.0", "", {}, "sha512-ULRPI3A+e39T7pSaf1xoi58AqqJxVCLg8F/uM5A3FadUbnyDTgltVnXJvdkTjwCOGA6NazqHVcwPJC5h2vRYVQ=="],
857
+
614
858
"@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
615
859
616
860
"@typescript-eslint/typescript-estree/semver": ["semver@7.6.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A=="],
617
861
862
+
"chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
863
+
618
864
"fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
619
865
866
+
"glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
867
+
868
+
"path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="],
869
+
870
+
"postcss-load-config/yaml": ["yaml@2.7.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA=="],
871
+
872
+
"string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
873
+
874
+
"string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
875
+
876
+
"strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
877
+
878
+
"tailwindcss/jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="],
879
+
880
+
"wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="],
881
+
882
+
"wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
883
+
884
+
"wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
885
+
620
886
"@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="],
887
+
888
+
"glob/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="],
889
+
890
+
"string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
891
+
892
+
"wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
893
+
894
+
"wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
621
895
}
622
896
}
+21
frontend/components.json
+21
frontend/components.json
···
1
+
{
2
+
"$schema": "https://ui.shadcn.com/schema.json",
3
+
"style": "new-york",
4
+
"rsc": false,
5
+
"tsx": true,
6
+
"tailwind": {
7
+
"config": "tailwind.config.js",
8
+
"css": "src/index.css",
9
+
"baseColor": "stone",
10
+
"cssVariables": true,
11
+
"prefix": ""
12
+
},
13
+
"aliases": {
14
+
"components": "@/components",
15
+
"utils": "@/lib/utils",
16
+
"ui": "@/components/ui",
17
+
"lib": "@/lib",
18
+
"hooks": "@/hooks"
19
+
},
20
+
"iconLibrary": "lucide"
21
+
}
+4806
frontend/package-lock.json
+4806
frontend/package-lock.json
···
1
+
{
2
+
"name": "frontend",
3
+
"version": "0.0.0",
4
+
"lockfileVersion": 3,
5
+
"requires": true,
6
+
"packages": {
7
+
"": {
8
+
"name": "frontend",
9
+
"version": "0.0.0",
10
+
"dependencies": {
11
+
"@emotion/react": "^11.14.0",
12
+
"@hookform/resolvers": "^3.10.0",
13
+
"@mantine/core": "^7.16.1",
14
+
"@mantine/form": "^7.16.1",
15
+
"@mantine/hooks": "^7.16.1",
16
+
"@radix-ui/react-dialog": "^1.1.5",
17
+
"@radix-ui/react-label": "^2.1.1",
18
+
"@radix-ui/react-slot": "^1.1.1",
19
+
"@radix-ui/react-tabs": "^1.1.2",
20
+
"@radix-ui/react-toast": "^1.2.5",
21
+
"@tailwindcss/vite": "^4.0.0",
22
+
"axios": "^1.7.9",
23
+
"class-variance-authority": "^0.7.1",
24
+
"clsx": "^2.1.1",
25
+
"lucide-react": "^0.474.0",
26
+
"react": "^18.3.1",
27
+
"react-dom": "^18.3.1",
28
+
"react-hook-form": "^7.54.2",
29
+
"tailwind-merge": "^2.6.0",
30
+
"tailwindcss-animate": "^1.0.7",
31
+
"zod": "^3.24.1"
32
+
},
33
+
"devDependencies": {
34
+
"@eslint/js": "^9.17.0",
35
+
"@types/node": "^22.10.10",
36
+
"@types/react": "^18.3.18",
37
+
"@types/react-dom": "^18.3.5",
38
+
"@vitejs/plugin-react": "^4.3.4",
39
+
"autoprefixer": "^10.4.20",
40
+
"eslint": "^9.17.0",
41
+
"eslint-plugin-react-hooks": "^5.0.0",
42
+
"eslint-plugin-react-refresh": "^0.4.16",
43
+
"globals": "^15.14.0",
44
+
"postcss": "^8.5.1",
45
+
"tailwindcss": "3.4.17",
46
+
"typescript": "~5.6.2",
47
+
"typescript-eslint": "^8.18.2",
48
+
"vite": "^6.0.5"
49
+
}
50
+
},
51
+
"node_modules/@alloc/quick-lru": {
52
+
"version": "5.2.0",
53
+
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
54
+
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
55
+
"license": "MIT",
56
+
"engines": {
57
+
"node": ">=10"
58
+
},
59
+
"funding": {
60
+
"url": "https://github.com/sponsors/sindresorhus"
61
+
}
62
+
},
63
+
"node_modules/@ampproject/remapping": {
64
+
"version": "2.3.0",
65
+
"dev": true,
66
+
"license": "Apache-2.0",
67
+
"dependencies": {
68
+
"@jridgewell/gen-mapping": "^0.3.5",
69
+
"@jridgewell/trace-mapping": "^0.3.24"
70
+
},
71
+
"engines": {
72
+
"node": ">=6.0.0"
73
+
}
74
+
},
75
+
"node_modules/@babel/code-frame": {
76
+
"version": "7.26.2",
77
+
"license": "MIT",
78
+
"dependencies": {
79
+
"@babel/helper-validator-identifier": "^7.25.9",
80
+
"js-tokens": "^4.0.0",
81
+
"picocolors": "^1.0.0"
82
+
},
83
+
"engines": {
84
+
"node": ">=6.9.0"
85
+
}
86
+
},
87
+
"node_modules/@babel/compat-data": {
88
+
"version": "7.26.5",
89
+
"dev": true,
90
+
"license": "MIT",
91
+
"engines": {
92
+
"node": ">=6.9.0"
93
+
}
94
+
},
95
+
"node_modules/@babel/core": {
96
+
"version": "7.26.7",
97
+
"dev": true,
98
+
"license": "MIT",
99
+
"dependencies": {
100
+
"@ampproject/remapping": "^2.2.0",
101
+
"@babel/code-frame": "^7.26.2",
102
+
"@babel/generator": "^7.26.5",
103
+
"@babel/helper-compilation-targets": "^7.26.5",
104
+
"@babel/helper-module-transforms": "^7.26.0",
105
+
"@babel/helpers": "^7.26.7",
106
+
"@babel/parser": "^7.26.7",
107
+
"@babel/template": "^7.25.9",
108
+
"@babel/traverse": "^7.26.7",
109
+
"@babel/types": "^7.26.7",
110
+
"convert-source-map": "^2.0.0",
111
+
"debug": "^4.1.0",
112
+
"gensync": "^1.0.0-beta.2",
113
+
"json5": "^2.2.3",
114
+
"semver": "^6.3.1"
115
+
},
116
+
"engines": {
117
+
"node": ">=6.9.0"
118
+
},
119
+
"funding": {
120
+
"type": "opencollective",
121
+
"url": "https://opencollective.com/babel"
122
+
}
123
+
},
124
+
"node_modules/@babel/generator": {
125
+
"version": "7.26.5",
126
+
"license": "MIT",
127
+
"dependencies": {
128
+
"@babel/parser": "^7.26.5",
129
+
"@babel/types": "^7.26.5",
130
+
"@jridgewell/gen-mapping": "^0.3.5",
131
+
"@jridgewell/trace-mapping": "^0.3.25",
132
+
"jsesc": "^3.0.2"
133
+
},
134
+
"engines": {
135
+
"node": ">=6.9.0"
136
+
}
137
+
},
138
+
"node_modules/@babel/helper-compilation-targets": {
139
+
"version": "7.26.5",
140
+
"dev": true,
141
+
"license": "MIT",
142
+
"dependencies": {
143
+
"@babel/compat-data": "^7.26.5",
144
+
"@babel/helper-validator-option": "^7.25.9",
145
+
"browserslist": "^4.24.0",
146
+
"lru-cache": "^5.1.1",
147
+
"semver": "^6.3.1"
148
+
},
149
+
"engines": {
150
+
"node": ">=6.9.0"
151
+
}
152
+
},
153
+
"node_modules/@babel/helper-module-imports": {
154
+
"version": "7.25.9",
155
+
"license": "MIT",
156
+
"dependencies": {
157
+
"@babel/traverse": "^7.25.9",
158
+
"@babel/types": "^7.25.9"
159
+
},
160
+
"engines": {
161
+
"node": ">=6.9.0"
162
+
}
163
+
},
164
+
"node_modules/@babel/helper-module-transforms": {
165
+
"version": "7.26.0",
166
+
"dev": true,
167
+
"license": "MIT",
168
+
"dependencies": {
169
+
"@babel/helper-module-imports": "^7.25.9",
170
+
"@babel/helper-validator-identifier": "^7.25.9",
171
+
"@babel/traverse": "^7.25.9"
172
+
},
173
+
"engines": {
174
+
"node": ">=6.9.0"
175
+
},
176
+
"peerDependencies": {
177
+
"@babel/core": "^7.0.0"
178
+
}
179
+
},
180
+
"node_modules/@babel/helper-plugin-utils": {
181
+
"version": "7.26.5",
182
+
"dev": true,
183
+
"license": "MIT",
184
+
"engines": {
185
+
"node": ">=6.9.0"
186
+
}
187
+
},
188
+
"node_modules/@babel/helper-string-parser": {
189
+
"version": "7.25.9",
190
+
"license": "MIT",
191
+
"engines": {
192
+
"node": ">=6.9.0"
193
+
}
194
+
},
195
+
"node_modules/@babel/helper-validator-identifier": {
196
+
"version": "7.25.9",
197
+
"license": "MIT",
198
+
"engines": {
199
+
"node": ">=6.9.0"
200
+
}
201
+
},
202
+
"node_modules/@babel/helper-validator-option": {
203
+
"version": "7.25.9",
204
+
"dev": true,
205
+
"license": "MIT",
206
+
"engines": {
207
+
"node": ">=6.9.0"
208
+
}
209
+
},
210
+
"node_modules/@babel/helpers": {
211
+
"version": "7.26.7",
212
+
"dev": true,
213
+
"license": "MIT",
214
+
"dependencies": {
215
+
"@babel/template": "^7.25.9",
216
+
"@babel/types": "^7.26.7"
217
+
},
218
+
"engines": {
219
+
"node": ">=6.9.0"
220
+
}
221
+
},
222
+
"node_modules/@babel/parser": {
223
+
"version": "7.26.7",
224
+
"license": "MIT",
225
+
"dependencies": {
226
+
"@babel/types": "^7.26.7"
227
+
},
228
+
"bin": {
229
+
"parser": "bin/babel-parser.js"
230
+
},
231
+
"engines": {
232
+
"node": ">=6.0.0"
233
+
}
234
+
},
235
+
"node_modules/@babel/plugin-transform-react-jsx-self": {
236
+
"version": "7.25.9",
237
+
"dev": true,
238
+
"license": "MIT",
239
+
"dependencies": {
240
+
"@babel/helper-plugin-utils": "^7.25.9"
241
+
},
242
+
"engines": {
243
+
"node": ">=6.9.0"
244
+
},
245
+
"peerDependencies": {
246
+
"@babel/core": "^7.0.0-0"
247
+
}
248
+
},
249
+
"node_modules/@babel/plugin-transform-react-jsx-source": {
250
+
"version": "7.25.9",
251
+
"dev": true,
252
+
"license": "MIT",
253
+
"dependencies": {
254
+
"@babel/helper-plugin-utils": "^7.25.9"
255
+
},
256
+
"engines": {
257
+
"node": ">=6.9.0"
258
+
},
259
+
"peerDependencies": {
260
+
"@babel/core": "^7.0.0-0"
261
+
}
262
+
},
263
+
"node_modules/@babel/runtime": {
264
+
"version": "7.26.7",
265
+
"license": "MIT",
266
+
"dependencies": {
267
+
"regenerator-runtime": "^0.14.0"
268
+
},
269
+
"engines": {
270
+
"node": ">=6.9.0"
271
+
}
272
+
},
273
+
"node_modules/@babel/template": {
274
+
"version": "7.25.9",
275
+
"license": "MIT",
276
+
"dependencies": {
277
+
"@babel/code-frame": "^7.25.9",
278
+
"@babel/parser": "^7.25.9",
279
+
"@babel/types": "^7.25.9"
280
+
},
281
+
"engines": {
282
+
"node": ">=6.9.0"
283
+
}
284
+
},
285
+
"node_modules/@babel/traverse": {
286
+
"version": "7.26.7",
287
+
"license": "MIT",
288
+
"dependencies": {
289
+
"@babel/code-frame": "^7.26.2",
290
+
"@babel/generator": "^7.26.5",
291
+
"@babel/parser": "^7.26.7",
292
+
"@babel/template": "^7.25.9",
293
+
"@babel/types": "^7.26.7",
294
+
"debug": "^4.3.1",
295
+
"globals": "^11.1.0"
296
+
},
297
+
"engines": {
298
+
"node": ">=6.9.0"
299
+
}
300
+
},
301
+
"node_modules/@babel/traverse/node_modules/globals": {
302
+
"version": "11.12.0",
303
+
"license": "MIT",
304
+
"engines": {
305
+
"node": ">=4"
306
+
}
307
+
},
308
+
"node_modules/@babel/types": {
309
+
"version": "7.26.7",
310
+
"license": "MIT",
311
+
"dependencies": {
312
+
"@babel/helper-string-parser": "^7.25.9",
313
+
"@babel/helper-validator-identifier": "^7.25.9"
314
+
},
315
+
"engines": {
316
+
"node": ">=6.9.0"
317
+
}
318
+
},
319
+
"node_modules/@emotion/babel-plugin": {
320
+
"version": "11.13.5",
321
+
"license": "MIT",
322
+
"dependencies": {
323
+
"@babel/helper-module-imports": "^7.16.7",
324
+
"@babel/runtime": "^7.18.3",
325
+
"@emotion/hash": "^0.9.2",
326
+
"@emotion/memoize": "^0.9.0",
327
+
"@emotion/serialize": "^1.3.3",
328
+
"babel-plugin-macros": "^3.1.0",
329
+
"convert-source-map": "^1.5.0",
330
+
"escape-string-regexp": "^4.0.0",
331
+
"find-root": "^1.1.0",
332
+
"source-map": "^0.5.7",
333
+
"stylis": "4.2.0"
334
+
}
335
+
},
336
+
"node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
337
+
"version": "1.9.0",
338
+
"license": "MIT"
339
+
},
340
+
"node_modules/@emotion/cache": {
341
+
"version": "11.14.0",
342
+
"license": "MIT",
343
+
"dependencies": {
344
+
"@emotion/memoize": "^0.9.0",
345
+
"@emotion/sheet": "^1.4.0",
346
+
"@emotion/utils": "^1.4.2",
347
+
"@emotion/weak-memoize": "^0.4.0",
348
+
"stylis": "4.2.0"
349
+
}
350
+
},
351
+
"node_modules/@emotion/hash": {
352
+
"version": "0.9.2",
353
+
"license": "MIT"
354
+
},
355
+
"node_modules/@emotion/memoize": {
356
+
"version": "0.9.0",
357
+
"license": "MIT"
358
+
},
359
+
"node_modules/@emotion/react": {
360
+
"version": "11.14.0",
361
+
"license": "MIT",
362
+
"dependencies": {
363
+
"@babel/runtime": "^7.18.3",
364
+
"@emotion/babel-plugin": "^11.13.5",
365
+
"@emotion/cache": "^11.14.0",
366
+
"@emotion/serialize": "^1.3.3",
367
+
"@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
368
+
"@emotion/utils": "^1.4.2",
369
+
"@emotion/weak-memoize": "^0.4.0",
370
+
"hoist-non-react-statics": "^3.3.1"
371
+
},
372
+
"peerDependencies": {
373
+
"react": ">=16.8.0"
374
+
},
375
+
"peerDependenciesMeta": {
376
+
"@types/react": {
377
+
"optional": true
378
+
}
379
+
}
380
+
},
381
+
"node_modules/@emotion/serialize": {
382
+
"version": "1.3.3",
383
+
"license": "MIT",
384
+
"dependencies": {
385
+
"@emotion/hash": "^0.9.2",
386
+
"@emotion/memoize": "^0.9.0",
387
+
"@emotion/unitless": "^0.10.0",
388
+
"@emotion/utils": "^1.4.2",
389
+
"csstype": "^3.0.2"
390
+
}
391
+
},
392
+
"node_modules/@emotion/sheet": {
393
+
"version": "1.4.0",
394
+
"license": "MIT"
395
+
},
396
+
"node_modules/@emotion/unitless": {
397
+
"version": "0.10.0",
398
+
"license": "MIT"
399
+
},
400
+
"node_modules/@emotion/use-insertion-effect-with-fallbacks": {
401
+
"version": "1.2.0",
402
+
"license": "MIT",
403
+
"peerDependencies": {
404
+
"react": ">=16.8.0"
405
+
}
406
+
},
407
+
"node_modules/@emotion/utils": {
408
+
"version": "1.4.2",
409
+
"license": "MIT"
410
+
},
411
+
"node_modules/@emotion/weak-memoize": {
412
+
"version": "0.4.0",
413
+
"license": "MIT"
414
+
},
415
+
"node_modules/@esbuild/darwin-arm64": {
416
+
"version": "0.24.2",
417
+
"cpu": [
418
+
"arm64"
419
+
],
420
+
"license": "MIT",
421
+
"optional": true,
422
+
"os": [
423
+
"darwin"
424
+
],
425
+
"engines": {
426
+
"node": ">=18"
427
+
}
428
+
},
429
+
"node_modules/@eslint-community/eslint-utils": {
430
+
"version": "4.4.1",
431
+
"dev": true,
432
+
"license": "MIT",
433
+
"dependencies": {
434
+
"eslint-visitor-keys": "^3.4.3"
435
+
},
436
+
"engines": {
437
+
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
438
+
},
439
+
"funding": {
440
+
"url": "https://opencollective.com/eslint"
441
+
},
442
+
"peerDependencies": {
443
+
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
444
+
}
445
+
},
446
+
"node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
447
+
"version": "3.4.3",
448
+
"dev": true,
449
+
"license": "Apache-2.0",
450
+
"engines": {
451
+
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
452
+
},
453
+
"funding": {
454
+
"url": "https://opencollective.com/eslint"
455
+
}
456
+
},
457
+
"node_modules/@eslint-community/regexpp": {
458
+
"version": "4.12.1",
459
+
"dev": true,
460
+
"license": "MIT",
461
+
"engines": {
462
+
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
463
+
}
464
+
},
465
+
"node_modules/@eslint/config-array": {
466
+
"version": "0.19.1",
467
+
"dev": true,
468
+
"license": "Apache-2.0",
469
+
"dependencies": {
470
+
"@eslint/object-schema": "^2.1.5",
471
+
"debug": "^4.3.1",
472
+
"minimatch": "^3.1.2"
473
+
},
474
+
"engines": {
475
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
476
+
}
477
+
},
478
+
"node_modules/@eslint/core": {
479
+
"version": "0.10.0",
480
+
"dev": true,
481
+
"license": "Apache-2.0",
482
+
"dependencies": {
483
+
"@types/json-schema": "^7.0.15"
484
+
},
485
+
"engines": {
486
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
487
+
}
488
+
},
489
+
"node_modules/@eslint/eslintrc": {
490
+
"version": "3.2.0",
491
+
"dev": true,
492
+
"license": "MIT",
493
+
"dependencies": {
494
+
"ajv": "^6.12.4",
495
+
"debug": "^4.3.2",
496
+
"espree": "^10.0.1",
497
+
"globals": "^14.0.0",
498
+
"ignore": "^5.2.0",
499
+
"import-fresh": "^3.2.1",
500
+
"js-yaml": "^4.1.0",
501
+
"minimatch": "^3.1.2",
502
+
"strip-json-comments": "^3.1.1"
503
+
},
504
+
"engines": {
505
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
506
+
},
507
+
"funding": {
508
+
"url": "https://opencollective.com/eslint"
509
+
}
510
+
},
511
+
"node_modules/@eslint/eslintrc/node_modules/globals": {
512
+
"version": "14.0.0",
513
+
"dev": true,
514
+
"license": "MIT",
515
+
"engines": {
516
+
"node": ">=18"
517
+
},
518
+
"funding": {
519
+
"url": "https://github.com/sponsors/sindresorhus"
520
+
}
521
+
},
522
+
"node_modules/@eslint/js": {
523
+
"version": "9.19.0",
524
+
"dev": true,
525
+
"license": "MIT",
526
+
"engines": {
527
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
528
+
}
529
+
},
530
+
"node_modules/@eslint/object-schema": {
531
+
"version": "2.1.5",
532
+
"dev": true,
533
+
"license": "Apache-2.0",
534
+
"engines": {
535
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
536
+
}
537
+
},
538
+
"node_modules/@eslint/plugin-kit": {
539
+
"version": "0.2.5",
540
+
"dev": true,
541
+
"license": "Apache-2.0",
542
+
"dependencies": {
543
+
"@eslint/core": "^0.10.0",
544
+
"levn": "^0.4.1"
545
+
},
546
+
"engines": {
547
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
548
+
}
549
+
},
550
+
"node_modules/@floating-ui/core": {
551
+
"version": "1.6.9",
552
+
"license": "MIT",
553
+
"dependencies": {
554
+
"@floating-ui/utils": "^0.2.9"
555
+
}
556
+
},
557
+
"node_modules/@floating-ui/dom": {
558
+
"version": "1.6.13",
559
+
"license": "MIT",
560
+
"dependencies": {
561
+
"@floating-ui/core": "^1.6.0",
562
+
"@floating-ui/utils": "^0.2.9"
563
+
}
564
+
},
565
+
"node_modules/@floating-ui/react": {
566
+
"version": "0.26.28",
567
+
"license": "MIT",
568
+
"dependencies": {
569
+
"@floating-ui/react-dom": "^2.1.2",
570
+
"@floating-ui/utils": "^0.2.8",
571
+
"tabbable": "^6.0.0"
572
+
},
573
+
"peerDependencies": {
574
+
"react": ">=16.8.0",
575
+
"react-dom": ">=16.8.0"
576
+
}
577
+
},
578
+
"node_modules/@floating-ui/react-dom": {
579
+
"version": "2.1.2",
580
+
"license": "MIT",
581
+
"dependencies": {
582
+
"@floating-ui/dom": "^1.0.0"
583
+
},
584
+
"peerDependencies": {
585
+
"react": ">=16.8.0",
586
+
"react-dom": ">=16.8.0"
587
+
}
588
+
},
589
+
"node_modules/@floating-ui/utils": {
590
+
"version": "0.2.9",
591
+
"license": "MIT"
592
+
},
593
+
"node_modules/@hookform/resolvers": {
594
+
"version": "3.10.0",
595
+
"resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.10.0.tgz",
596
+
"integrity": "sha512-79Dv+3mDF7i+2ajj7SkypSKHhl1cbln1OGavqrsF7p6mbUv11xpqpacPsGDCTRvCSjEEIez2ef1NveSVL3b0Ag==",
597
+
"license": "MIT",
598
+
"peerDependencies": {
599
+
"react-hook-form": "^7.0.0"
600
+
}
601
+
},
602
+
"node_modules/@humanfs/core": {
603
+
"version": "0.19.1",
604
+
"dev": true,
605
+
"license": "Apache-2.0",
606
+
"engines": {
607
+
"node": ">=18.18.0"
608
+
}
609
+
},
610
+
"node_modules/@humanfs/node": {
611
+
"version": "0.16.6",
612
+
"dev": true,
613
+
"license": "Apache-2.0",
614
+
"dependencies": {
615
+
"@humanfs/core": "^0.19.1",
616
+
"@humanwhocodes/retry": "^0.3.0"
617
+
},
618
+
"engines": {
619
+
"node": ">=18.18.0"
620
+
}
621
+
},
622
+
"node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
623
+
"version": "0.3.1",
624
+
"dev": true,
625
+
"license": "Apache-2.0",
626
+
"engines": {
627
+
"node": ">=18.18"
628
+
},
629
+
"funding": {
630
+
"type": "github",
631
+
"url": "https://github.com/sponsors/nzakas"
632
+
}
633
+
},
634
+
"node_modules/@humanwhocodes/module-importer": {
635
+
"version": "1.0.1",
636
+
"dev": true,
637
+
"license": "Apache-2.0",
638
+
"engines": {
639
+
"node": ">=12.22"
640
+
},
641
+
"funding": {
642
+
"type": "github",
643
+
"url": "https://github.com/sponsors/nzakas"
644
+
}
645
+
},
646
+
"node_modules/@humanwhocodes/retry": {
647
+
"version": "0.4.1",
648
+
"dev": true,
649
+
"license": "Apache-2.0",
650
+
"engines": {
651
+
"node": ">=18.18"
652
+
},
653
+
"funding": {
654
+
"type": "github",
655
+
"url": "https://github.com/sponsors/nzakas"
656
+
}
657
+
},
658
+
"node_modules/@isaacs/cliui": {
659
+
"version": "8.0.2",
660
+
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
661
+
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
662
+
"license": "ISC",
663
+
"dependencies": {
664
+
"string-width": "^5.1.2",
665
+
"string-width-cjs": "npm:string-width@^4.2.0",
666
+
"strip-ansi": "^7.0.1",
667
+
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
668
+
"wrap-ansi": "^8.1.0",
669
+
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
670
+
},
671
+
"engines": {
672
+
"node": ">=12"
673
+
}
674
+
},
675
+
"node_modules/@jridgewell/gen-mapping": {
676
+
"version": "0.3.8",
677
+
"license": "MIT",
678
+
"dependencies": {
679
+
"@jridgewell/set-array": "^1.2.1",
680
+
"@jridgewell/sourcemap-codec": "^1.4.10",
681
+
"@jridgewell/trace-mapping": "^0.3.24"
682
+
},
683
+
"engines": {
684
+
"node": ">=6.0.0"
685
+
}
686
+
},
687
+
"node_modules/@jridgewell/resolve-uri": {
688
+
"version": "3.1.2",
689
+
"license": "MIT",
690
+
"engines": {
691
+
"node": ">=6.0.0"
692
+
}
693
+
},
694
+
"node_modules/@jridgewell/set-array": {
695
+
"version": "1.2.1",
696
+
"license": "MIT",
697
+
"engines": {
698
+
"node": ">=6.0.0"
699
+
}
700
+
},
701
+
"node_modules/@jridgewell/sourcemap-codec": {
702
+
"version": "1.5.0",
703
+
"license": "MIT"
704
+
},
705
+
"node_modules/@jridgewell/trace-mapping": {
706
+
"version": "0.3.25",
707
+
"license": "MIT",
708
+
"dependencies": {
709
+
"@jridgewell/resolve-uri": "^3.1.0",
710
+
"@jridgewell/sourcemap-codec": "^1.4.14"
711
+
}
712
+
},
713
+
"node_modules/@mantine/core": {
714
+
"version": "7.16.1",
715
+
"license": "MIT",
716
+
"dependencies": {
717
+
"@floating-ui/react": "^0.26.28",
718
+
"clsx": "^2.1.1",
719
+
"react-number-format": "^5.4.3",
720
+
"react-remove-scroll": "^2.6.2",
721
+
"react-textarea-autosize": "8.5.6",
722
+
"type-fest": "^4.27.0"
723
+
},
724
+
"peerDependencies": {
725
+
"@mantine/hooks": "7.16.1",
726
+
"react": "^18.x || ^19.x",
727
+
"react-dom": "^18.x || ^19.x"
728
+
}
729
+
},
730
+
"node_modules/@mantine/form": {
731
+
"version": "7.16.1",
732
+
"license": "MIT",
733
+
"dependencies": {
734
+
"fast-deep-equal": "^3.1.3",
735
+
"klona": "^2.0.6"
736
+
},
737
+
"peerDependencies": {
738
+
"react": "^18.x || ^19.x"
739
+
}
740
+
},
741
+
"node_modules/@mantine/hooks": {
742
+
"version": "7.16.1",
743
+
"license": "MIT",
744
+
"peerDependencies": {
745
+
"react": "^18.x || ^19.x"
746
+
}
747
+
},
748
+
"node_modules/@nodelib/fs.scandir": {
749
+
"version": "2.1.5",
750
+
"license": "MIT",
751
+
"dependencies": {
752
+
"@nodelib/fs.stat": "2.0.5",
753
+
"run-parallel": "^1.1.9"
754
+
},
755
+
"engines": {
756
+
"node": ">= 8"
757
+
}
758
+
},
759
+
"node_modules/@nodelib/fs.stat": {
760
+
"version": "2.0.5",
761
+
"license": "MIT",
762
+
"engines": {
763
+
"node": ">= 8"
764
+
}
765
+
},
766
+
"node_modules/@nodelib/fs.walk": {
767
+
"version": "1.2.8",
768
+
"license": "MIT",
769
+
"dependencies": {
770
+
"@nodelib/fs.scandir": "2.1.5",
771
+
"fastq": "^1.6.0"
772
+
},
773
+
"engines": {
774
+
"node": ">= 8"
775
+
}
776
+
},
777
+
"node_modules/@pkgjs/parseargs": {
778
+
"version": "0.11.0",
779
+
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
780
+
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
781
+
"license": "MIT",
782
+
"optional": true,
783
+
"engines": {
784
+
"node": ">=14"
785
+
}
786
+
},
787
+
"node_modules/@radix-ui/primitive": {
788
+
"version": "1.1.1",
789
+
"resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz",
790
+
"integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==",
791
+
"license": "MIT"
792
+
},
793
+
"node_modules/@radix-ui/react-collection": {
794
+
"version": "1.1.1",
795
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.1.tgz",
796
+
"integrity": "sha512-LwT3pSho9Dljg+wY2KN2mrrh6y3qELfftINERIzBUO9e0N+t0oMTyn3k9iv+ZqgrwGkRnLpNJrsMv9BZlt2yuA==",
797
+
"license": "MIT",
798
+
"dependencies": {
799
+
"@radix-ui/react-compose-refs": "1.1.1",
800
+
"@radix-ui/react-context": "1.1.1",
801
+
"@radix-ui/react-primitive": "2.0.1",
802
+
"@radix-ui/react-slot": "1.1.1"
803
+
},
804
+
"peerDependencies": {
805
+
"@types/react": "*",
806
+
"@types/react-dom": "*",
807
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
808
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
809
+
},
810
+
"peerDependenciesMeta": {
811
+
"@types/react": {
812
+
"optional": true
813
+
},
814
+
"@types/react-dom": {
815
+
"optional": true
816
+
}
817
+
}
818
+
},
819
+
"node_modules/@radix-ui/react-compose-refs": {
820
+
"version": "1.1.1",
821
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz",
822
+
"integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==",
823
+
"license": "MIT",
824
+
"peerDependencies": {
825
+
"@types/react": "*",
826
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
827
+
},
828
+
"peerDependenciesMeta": {
829
+
"@types/react": {
830
+
"optional": true
831
+
}
832
+
}
833
+
},
834
+
"node_modules/@radix-ui/react-context": {
835
+
"version": "1.1.1",
836
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz",
837
+
"integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==",
838
+
"license": "MIT",
839
+
"peerDependencies": {
840
+
"@types/react": "*",
841
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
842
+
},
843
+
"peerDependenciesMeta": {
844
+
"@types/react": {
845
+
"optional": true
846
+
}
847
+
}
848
+
},
849
+
"node_modules/@radix-ui/react-dialog": {
850
+
"version": "1.1.5",
851
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.5.tgz",
852
+
"integrity": "sha512-LaO3e5h/NOEL4OfXjxD43k9Dx+vn+8n+PCFt6uhX/BADFflllyv3WJG6rgvvSVBxpTch938Qq/LGc2MMxipXPw==",
853
+
"license": "MIT",
854
+
"dependencies": {
855
+
"@radix-ui/primitive": "1.1.1",
856
+
"@radix-ui/react-compose-refs": "1.1.1",
857
+
"@radix-ui/react-context": "1.1.1",
858
+
"@radix-ui/react-dismissable-layer": "1.1.4",
859
+
"@radix-ui/react-focus-guards": "1.1.1",
860
+
"@radix-ui/react-focus-scope": "1.1.1",
861
+
"@radix-ui/react-id": "1.1.0",
862
+
"@radix-ui/react-portal": "1.1.3",
863
+
"@radix-ui/react-presence": "1.1.2",
864
+
"@radix-ui/react-primitive": "2.0.1",
865
+
"@radix-ui/react-slot": "1.1.1",
866
+
"@radix-ui/react-use-controllable-state": "1.1.0",
867
+
"aria-hidden": "^1.2.4",
868
+
"react-remove-scroll": "^2.6.2"
869
+
},
870
+
"peerDependencies": {
871
+
"@types/react": "*",
872
+
"@types/react-dom": "*",
873
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
874
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
875
+
},
876
+
"peerDependenciesMeta": {
877
+
"@types/react": {
878
+
"optional": true
879
+
},
880
+
"@types/react-dom": {
881
+
"optional": true
882
+
}
883
+
}
884
+
},
885
+
"node_modules/@radix-ui/react-direction": {
886
+
"version": "1.1.0",
887
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
888
+
"integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
889
+
"license": "MIT",
890
+
"peerDependencies": {
891
+
"@types/react": "*",
892
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
893
+
},
894
+
"peerDependenciesMeta": {
895
+
"@types/react": {
896
+
"optional": true
897
+
}
898
+
}
899
+
},
900
+
"node_modules/@radix-ui/react-dismissable-layer": {
901
+
"version": "1.1.4",
902
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.4.tgz",
903
+
"integrity": "sha512-XDUI0IVYVSwjMXxM6P4Dfti7AH+Y4oS/TB+sglZ/EXc7cqLwGAmp1NlMrcUjj7ks6R5WTZuWKv44FBbLpwU3sA==",
904
+
"license": "MIT",
905
+
"dependencies": {
906
+
"@radix-ui/primitive": "1.1.1",
907
+
"@radix-ui/react-compose-refs": "1.1.1",
908
+
"@radix-ui/react-primitive": "2.0.1",
909
+
"@radix-ui/react-use-callback-ref": "1.1.0",
910
+
"@radix-ui/react-use-escape-keydown": "1.1.0"
911
+
},
912
+
"peerDependencies": {
913
+
"@types/react": "*",
914
+
"@types/react-dom": "*",
915
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
916
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
917
+
},
918
+
"peerDependenciesMeta": {
919
+
"@types/react": {
920
+
"optional": true
921
+
},
922
+
"@types/react-dom": {
923
+
"optional": true
924
+
}
925
+
}
926
+
},
927
+
"node_modules/@radix-ui/react-focus-guards": {
928
+
"version": "1.1.1",
929
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz",
930
+
"integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==",
931
+
"license": "MIT",
932
+
"peerDependencies": {
933
+
"@types/react": "*",
934
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
935
+
},
936
+
"peerDependenciesMeta": {
937
+
"@types/react": {
938
+
"optional": true
939
+
}
940
+
}
941
+
},
942
+
"node_modules/@radix-ui/react-focus-scope": {
943
+
"version": "1.1.1",
944
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.1.tgz",
945
+
"integrity": "sha512-01omzJAYRxXdG2/he/+xy+c8a8gCydoQ1yOxnWNcRhrrBW5W+RQJ22EK1SaO8tb3WoUsuEw7mJjBozPzihDFjA==",
946
+
"license": "MIT",
947
+
"dependencies": {
948
+
"@radix-ui/react-compose-refs": "1.1.1",
949
+
"@radix-ui/react-primitive": "2.0.1",
950
+
"@radix-ui/react-use-callback-ref": "1.1.0"
951
+
},
952
+
"peerDependencies": {
953
+
"@types/react": "*",
954
+
"@types/react-dom": "*",
955
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
956
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
957
+
},
958
+
"peerDependenciesMeta": {
959
+
"@types/react": {
960
+
"optional": true
961
+
},
962
+
"@types/react-dom": {
963
+
"optional": true
964
+
}
965
+
}
966
+
},
967
+
"node_modules/@radix-ui/react-id": {
968
+
"version": "1.1.0",
969
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
970
+
"integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
971
+
"license": "MIT",
972
+
"dependencies": {
973
+
"@radix-ui/react-use-layout-effect": "1.1.0"
974
+
},
975
+
"peerDependencies": {
976
+
"@types/react": "*",
977
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
978
+
},
979
+
"peerDependenciesMeta": {
980
+
"@types/react": {
981
+
"optional": true
982
+
}
983
+
}
984
+
},
985
+
"node_modules/@radix-ui/react-label": {
986
+
"version": "2.1.1",
987
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.1.tgz",
988
+
"integrity": "sha512-UUw5E4e/2+4kFMH7+YxORXGWggtY6sM8WIwh5RZchhLuUg2H1hc98Py+pr8HMz6rdaYrK2t296ZEjYLOCO5uUw==",
989
+
"license": "MIT",
990
+
"dependencies": {
991
+
"@radix-ui/react-primitive": "2.0.1"
992
+
},
993
+
"peerDependencies": {
994
+
"@types/react": "*",
995
+
"@types/react-dom": "*",
996
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
997
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
998
+
},
999
+
"peerDependenciesMeta": {
1000
+
"@types/react": {
1001
+
"optional": true
1002
+
},
1003
+
"@types/react-dom": {
1004
+
"optional": true
1005
+
}
1006
+
}
1007
+
},
1008
+
"node_modules/@radix-ui/react-portal": {
1009
+
"version": "1.1.3",
1010
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.3.tgz",
1011
+
"integrity": "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==",
1012
+
"license": "MIT",
1013
+
"dependencies": {
1014
+
"@radix-ui/react-primitive": "2.0.1",
1015
+
"@radix-ui/react-use-layout-effect": "1.1.0"
1016
+
},
1017
+
"peerDependencies": {
1018
+
"@types/react": "*",
1019
+
"@types/react-dom": "*",
1020
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
1021
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1022
+
},
1023
+
"peerDependenciesMeta": {
1024
+
"@types/react": {
1025
+
"optional": true
1026
+
},
1027
+
"@types/react-dom": {
1028
+
"optional": true
1029
+
}
1030
+
}
1031
+
},
1032
+
"node_modules/@radix-ui/react-presence": {
1033
+
"version": "1.1.2",
1034
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz",
1035
+
"integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==",
1036
+
"license": "MIT",
1037
+
"dependencies": {
1038
+
"@radix-ui/react-compose-refs": "1.1.1",
1039
+
"@radix-ui/react-use-layout-effect": "1.1.0"
1040
+
},
1041
+
"peerDependencies": {
1042
+
"@types/react": "*",
1043
+
"@types/react-dom": "*",
1044
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
1045
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1046
+
},
1047
+
"peerDependenciesMeta": {
1048
+
"@types/react": {
1049
+
"optional": true
1050
+
},
1051
+
"@types/react-dom": {
1052
+
"optional": true
1053
+
}
1054
+
}
1055
+
},
1056
+
"node_modules/@radix-ui/react-primitive": {
1057
+
"version": "2.0.1",
1058
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz",
1059
+
"integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==",
1060
+
"license": "MIT",
1061
+
"dependencies": {
1062
+
"@radix-ui/react-slot": "1.1.1"
1063
+
},
1064
+
"peerDependencies": {
1065
+
"@types/react": "*",
1066
+
"@types/react-dom": "*",
1067
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
1068
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1069
+
},
1070
+
"peerDependenciesMeta": {
1071
+
"@types/react": {
1072
+
"optional": true
1073
+
},
1074
+
"@types/react-dom": {
1075
+
"optional": true
1076
+
}
1077
+
}
1078
+
},
1079
+
"node_modules/@radix-ui/react-roving-focus": {
1080
+
"version": "1.1.1",
1081
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.1.tgz",
1082
+
"integrity": "sha512-QE1RoxPGJ/Nm8Qmk0PxP8ojmoaS67i0s7hVssS7KuI2FQoc/uzVlZsqKfQvxPE6D8hICCPHJ4D88zNhT3OOmkw==",
1083
+
"license": "MIT",
1084
+
"dependencies": {
1085
+
"@radix-ui/primitive": "1.1.1",
1086
+
"@radix-ui/react-collection": "1.1.1",
1087
+
"@radix-ui/react-compose-refs": "1.1.1",
1088
+
"@radix-ui/react-context": "1.1.1",
1089
+
"@radix-ui/react-direction": "1.1.0",
1090
+
"@radix-ui/react-id": "1.1.0",
1091
+
"@radix-ui/react-primitive": "2.0.1",
1092
+
"@radix-ui/react-use-callback-ref": "1.1.0",
1093
+
"@radix-ui/react-use-controllable-state": "1.1.0"
1094
+
},
1095
+
"peerDependencies": {
1096
+
"@types/react": "*",
1097
+
"@types/react-dom": "*",
1098
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
1099
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1100
+
},
1101
+
"peerDependenciesMeta": {
1102
+
"@types/react": {
1103
+
"optional": true
1104
+
},
1105
+
"@types/react-dom": {
1106
+
"optional": true
1107
+
}
1108
+
}
1109
+
},
1110
+
"node_modules/@radix-ui/react-slot": {
1111
+
"version": "1.1.1",
1112
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz",
1113
+
"integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==",
1114
+
"license": "MIT",
1115
+
"dependencies": {
1116
+
"@radix-ui/react-compose-refs": "1.1.1"
1117
+
},
1118
+
"peerDependencies": {
1119
+
"@types/react": "*",
1120
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1121
+
},
1122
+
"peerDependenciesMeta": {
1123
+
"@types/react": {
1124
+
"optional": true
1125
+
}
1126
+
}
1127
+
},
1128
+
"node_modules/@radix-ui/react-tabs": {
1129
+
"version": "1.1.2",
1130
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.2.tgz",
1131
+
"integrity": "sha512-9u/tQJMcC2aGq7KXpGivMm1mgq7oRJKXphDwdypPd/j21j/2znamPU8WkXgnhUaTrSFNIt8XhOyCAupg8/GbwQ==",
1132
+
"license": "MIT",
1133
+
"dependencies": {
1134
+
"@radix-ui/primitive": "1.1.1",
1135
+
"@radix-ui/react-context": "1.1.1",
1136
+
"@radix-ui/react-direction": "1.1.0",
1137
+
"@radix-ui/react-id": "1.1.0",
1138
+
"@radix-ui/react-presence": "1.1.2",
1139
+
"@radix-ui/react-primitive": "2.0.1",
1140
+
"@radix-ui/react-roving-focus": "1.1.1",
1141
+
"@radix-ui/react-use-controllable-state": "1.1.0"
1142
+
},
1143
+
"peerDependencies": {
1144
+
"@types/react": "*",
1145
+
"@types/react-dom": "*",
1146
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
1147
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1148
+
},
1149
+
"peerDependenciesMeta": {
1150
+
"@types/react": {
1151
+
"optional": true
1152
+
},
1153
+
"@types/react-dom": {
1154
+
"optional": true
1155
+
}
1156
+
}
1157
+
},
1158
+
"node_modules/@radix-ui/react-toast": {
1159
+
"version": "1.2.5",
1160
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.5.tgz",
1161
+
"integrity": "sha512-ZzUsAaOx8NdXZZKcFNDhbSlbsCUy8qQWmzTdgrlrhhZAOx2ofLtKrBDW9fkqhFvXgmtv560Uj16pkLkqML7SHA==",
1162
+
"license": "MIT",
1163
+
"dependencies": {
1164
+
"@radix-ui/primitive": "1.1.1",
1165
+
"@radix-ui/react-collection": "1.1.1",
1166
+
"@radix-ui/react-compose-refs": "1.1.1",
1167
+
"@radix-ui/react-context": "1.1.1",
1168
+
"@radix-ui/react-dismissable-layer": "1.1.4",
1169
+
"@radix-ui/react-portal": "1.1.3",
1170
+
"@radix-ui/react-presence": "1.1.2",
1171
+
"@radix-ui/react-primitive": "2.0.1",
1172
+
"@radix-ui/react-use-callback-ref": "1.1.0",
1173
+
"@radix-ui/react-use-controllable-state": "1.1.0",
1174
+
"@radix-ui/react-use-layout-effect": "1.1.0",
1175
+
"@radix-ui/react-visually-hidden": "1.1.1"
1176
+
},
1177
+
"peerDependencies": {
1178
+
"@types/react": "*",
1179
+
"@types/react-dom": "*",
1180
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
1181
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1182
+
},
1183
+
"peerDependenciesMeta": {
1184
+
"@types/react": {
1185
+
"optional": true
1186
+
},
1187
+
"@types/react-dom": {
1188
+
"optional": true
1189
+
}
1190
+
}
1191
+
},
1192
+
"node_modules/@radix-ui/react-use-callback-ref": {
1193
+
"version": "1.1.0",
1194
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
1195
+
"integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
1196
+
"license": "MIT",
1197
+
"peerDependencies": {
1198
+
"@types/react": "*",
1199
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1200
+
},
1201
+
"peerDependenciesMeta": {
1202
+
"@types/react": {
1203
+
"optional": true
1204
+
}
1205
+
}
1206
+
},
1207
+
"node_modules/@radix-ui/react-use-controllable-state": {
1208
+
"version": "1.1.0",
1209
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
1210
+
"integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
1211
+
"license": "MIT",
1212
+
"dependencies": {
1213
+
"@radix-ui/react-use-callback-ref": "1.1.0"
1214
+
},
1215
+
"peerDependencies": {
1216
+
"@types/react": "*",
1217
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1218
+
},
1219
+
"peerDependenciesMeta": {
1220
+
"@types/react": {
1221
+
"optional": true
1222
+
}
1223
+
}
1224
+
},
1225
+
"node_modules/@radix-ui/react-use-escape-keydown": {
1226
+
"version": "1.1.0",
1227
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
1228
+
"integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
1229
+
"license": "MIT",
1230
+
"dependencies": {
1231
+
"@radix-ui/react-use-callback-ref": "1.1.0"
1232
+
},
1233
+
"peerDependencies": {
1234
+
"@types/react": "*",
1235
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1236
+
},
1237
+
"peerDependenciesMeta": {
1238
+
"@types/react": {
1239
+
"optional": true
1240
+
}
1241
+
}
1242
+
},
1243
+
"node_modules/@radix-ui/react-use-layout-effect": {
1244
+
"version": "1.1.0",
1245
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
1246
+
"integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
1247
+
"license": "MIT",
1248
+
"peerDependencies": {
1249
+
"@types/react": "*",
1250
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1251
+
},
1252
+
"peerDependenciesMeta": {
1253
+
"@types/react": {
1254
+
"optional": true
1255
+
}
1256
+
}
1257
+
},
1258
+
"node_modules/@radix-ui/react-visually-hidden": {
1259
+
"version": "1.1.1",
1260
+
"resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz",
1261
+
"integrity": "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==",
1262
+
"license": "MIT",
1263
+
"dependencies": {
1264
+
"@radix-ui/react-primitive": "2.0.1"
1265
+
},
1266
+
"peerDependencies": {
1267
+
"@types/react": "*",
1268
+
"@types/react-dom": "*",
1269
+
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
1270
+
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
1271
+
},
1272
+
"peerDependenciesMeta": {
1273
+
"@types/react": {
1274
+
"optional": true
1275
+
},
1276
+
"@types/react-dom": {
1277
+
"optional": true
1278
+
}
1279
+
}
1280
+
},
1281
+
"node_modules/@rollup/rollup-darwin-arm64": {
1282
+
"version": "4.32.0",
1283
+
"cpu": [
1284
+
"arm64"
1285
+
],
1286
+
"license": "MIT",
1287
+
"optional": true,
1288
+
"os": [
1289
+
"darwin"
1290
+
]
1291
+
},
1292
+
"node_modules/@tailwindcss/node": {
1293
+
"version": "4.0.0",
1294
+
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.0.tgz",
1295
+
"integrity": "sha512-tfG2uBvo6j6kDIPmntxwXggCOZAt7SkpAXJ6pTIYirNdk5FBqh/CZZ9BZPpgcl/tNFLs6zc4yghM76sqiELG9g==",
1296
+
"license": "MIT",
1297
+
"dependencies": {
1298
+
"enhanced-resolve": "^5.18.0",
1299
+
"jiti": "^2.4.2",
1300
+
"tailwindcss": "4.0.0"
1301
+
}
1302
+
},
1303
+
"node_modules/@tailwindcss/node/node_modules/tailwindcss": {
1304
+
"version": "4.0.0",
1305
+
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0.tgz",
1306
+
"integrity": "sha512-ULRPI3A+e39T7pSaf1xoi58AqqJxVCLg8F/uM5A3FadUbnyDTgltVnXJvdkTjwCOGA6NazqHVcwPJC5h2vRYVQ==",
1307
+
"license": "MIT"
1308
+
},
1309
+
"node_modules/@tailwindcss/oxide": {
1310
+
"version": "4.0.0",
1311
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.0.tgz",
1312
+
"integrity": "sha512-W3FjpJgy4VV1JiL7iBYDf2n/WkeDg1Il+0Q7eWnqPyvkPPCo/Mbwc5BiaT7dfBNV6tQKAhVE34rU5xl8pSl50w==",
1313
+
"license": "MIT",
1314
+
"engines": {
1315
+
"node": ">= 10"
1316
+
},
1317
+
"optionalDependencies": {
1318
+
"@tailwindcss/oxide-android-arm64": "4.0.0",
1319
+
"@tailwindcss/oxide-darwin-arm64": "4.0.0",
1320
+
"@tailwindcss/oxide-darwin-x64": "4.0.0",
1321
+
"@tailwindcss/oxide-freebsd-x64": "4.0.0",
1322
+
"@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.0",
1323
+
"@tailwindcss/oxide-linux-arm64-gnu": "4.0.0",
1324
+
"@tailwindcss/oxide-linux-arm64-musl": "4.0.0",
1325
+
"@tailwindcss/oxide-linux-x64-gnu": "4.0.0",
1326
+
"@tailwindcss/oxide-linux-x64-musl": "4.0.0",
1327
+
"@tailwindcss/oxide-win32-arm64-msvc": "4.0.0",
1328
+
"@tailwindcss/oxide-win32-x64-msvc": "4.0.0"
1329
+
}
1330
+
},
1331
+
"node_modules/@tailwindcss/oxide-android-arm64": {
1332
+
"version": "4.0.0",
1333
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.0.tgz",
1334
+
"integrity": "sha512-EAhjU0+FIdyGPR+7MbBWubLLPtmOu+p7c2egTTFBRk/n//zYjNvVK0WhcBK5Y7oUB5mo4EjA2mCbY7dcEMWSRw==",
1335
+
"cpu": [
1336
+
"arm64"
1337
+
],
1338
+
"license": "MIT",
1339
+
"optional": true,
1340
+
"os": [
1341
+
"android"
1342
+
],
1343
+
"engines": {
1344
+
"node": ">= 10"
1345
+
}
1346
+
},
1347
+
"node_modules/@tailwindcss/oxide-darwin-arm64": {
1348
+
"version": "4.0.0",
1349
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.0.tgz",
1350
+
"integrity": "sha512-hdz4xnSWS11cIp+7ye+3dGHqs0X33z+BXXTtgPOguDWVa+TdXUzwxonklSzf5wlJFuot3dv5eWzhlNai0oYYQg==",
1351
+
"cpu": [
1352
+
"arm64"
1353
+
],
1354
+
"license": "MIT",
1355
+
"optional": true,
1356
+
"os": [
1357
+
"darwin"
1358
+
],
1359
+
"engines": {
1360
+
"node": ">= 10"
1361
+
}
1362
+
},
1363
+
"node_modules/@tailwindcss/oxide-darwin-x64": {
1364
+
"version": "4.0.0",
1365
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.0.tgz",
1366
+
"integrity": "sha512-+dOUUaXTkPKKhtUI9QtVaYg+MpmLh2CN0dHohiYXaBirEyPMkjaT0zbRgzQlNnQWjCVVXPQluIEb0OMEjSTH+Q==",
1367
+
"cpu": [
1368
+
"x64"
1369
+
],
1370
+
"license": "MIT",
1371
+
"optional": true,
1372
+
"os": [
1373
+
"darwin"
1374
+
],
1375
+
"engines": {
1376
+
"node": ">= 10"
1377
+
}
1378
+
},
1379
+
"node_modules/@tailwindcss/oxide-freebsd-x64": {
1380
+
"version": "4.0.0",
1381
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.0.tgz",
1382
+
"integrity": "sha512-CJhGDhxnrmu4SwyC62fA+wP24MhA/TZlIhRHqg1kRuIHoGoVR2uSSm1qxTxU37tSSZj8Up0q6jsBJCAP4k7rgQ==",
1383
+
"cpu": [
1384
+
"x64"
1385
+
],
1386
+
"license": "MIT",
1387
+
"optional": true,
1388
+
"os": [
1389
+
"freebsd"
1390
+
],
1391
+
"engines": {
1392
+
"node": ">= 10"
1393
+
}
1394
+
},
1395
+
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
1396
+
"version": "4.0.0",
1397
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.0.tgz",
1398
+
"integrity": "sha512-Wy7Av0xzXfY2ujZBcYy4+7GQm25/J1iHvlQU2CfwdDCuPWfIjYzR6kggz+uVdSJyKV2s64znchBxRE8kV4uXSA==",
1399
+
"cpu": [
1400
+
"arm"
1401
+
],
1402
+
"license": "MIT",
1403
+
"optional": true,
1404
+
"os": [
1405
+
"linux"
1406
+
],
1407
+
"engines": {
1408
+
"node": ">= 10"
1409
+
}
1410
+
},
1411
+
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
1412
+
"version": "4.0.0",
1413
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.0.tgz",
1414
+
"integrity": "sha512-srwBo2l6pvM0swBntc1ucuhGsfFOLkqPRFQ3dWARRTfSkL1U9nAsob2MKc/n47Eva/W9pZZgMOuf7rDw8pK1Ew==",
1415
+
"cpu": [
1416
+
"arm64"
1417
+
],
1418
+
"license": "MIT",
1419
+
"optional": true,
1420
+
"os": [
1421
+
"linux"
1422
+
],
1423
+
"engines": {
1424
+
"node": ">= 10"
1425
+
}
1426
+
},
1427
+
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
1428
+
"version": "4.0.0",
1429
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.0.tgz",
1430
+
"integrity": "sha512-abhusswkduYWuezkBmgo0K0/erGq3M4Se5xP0fhc/0dKs0X/rJUYYCFWntHb3IGh3aVzdQ0SXJs93P76DbUqtw==",
1431
+
"cpu": [
1432
+
"arm64"
1433
+
],
1434
+
"license": "MIT",
1435
+
"optional": true,
1436
+
"os": [
1437
+
"linux"
1438
+
],
1439
+
"engines": {
1440
+
"node": ">= 10"
1441
+
}
1442
+
},
1443
+
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
1444
+
"version": "4.0.0",
1445
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.0.tgz",
1446
+
"integrity": "sha512-hGtRYIUEx377/HlU49+jvVKKwU1MDSKYSMMs0JFO2Wp7LGxk5+0j5+RBk9NFnmp/lbp32yPTgIOO5m1BmDq36A==",
1447
+
"cpu": [
1448
+
"x64"
1449
+
],
1450
+
"license": "MIT",
1451
+
"optional": true,
1452
+
"os": [
1453
+
"linux"
1454
+
],
1455
+
"engines": {
1456
+
"node": ">= 10"
1457
+
}
1458
+
},
1459
+
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
1460
+
"version": "4.0.0",
1461
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.0.tgz",
1462
+
"integrity": "sha512-7xgQgSAThs0I14VAgmxpJnK6XFSZBxHMGoDXkLyYkEnu+8WRQMbCP93dkCUn2PIv+Q+JulRgc00PJ09uORSLXQ==",
1463
+
"cpu": [
1464
+
"x64"
1465
+
],
1466
+
"license": "MIT",
1467
+
"optional": true,
1468
+
"os": [
1469
+
"linux"
1470
+
],
1471
+
"engines": {
1472
+
"node": ">= 10"
1473
+
}
1474
+
},
1475
+
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
1476
+
"version": "4.0.0",
1477
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.0.tgz",
1478
+
"integrity": "sha512-qEcgTIPcWY5ZE7f6VxQ/JPrSFMcehzVIlZj7sGE3mVd5YWreAT+Fl1vSP8q2pjnWXn0avZG3Iw7a2hJQAm+fTQ==",
1479
+
"cpu": [
1480
+
"arm64"
1481
+
],
1482
+
"license": "MIT",
1483
+
"optional": true,
1484
+
"os": [
1485
+
"win32"
1486
+
],
1487
+
"engines": {
1488
+
"node": ">= 10"
1489
+
}
1490
+
},
1491
+
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
1492
+
"version": "4.0.0",
1493
+
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.0.tgz",
1494
+
"integrity": "sha512-bqT0AY8RXb8GMDy28JtngvqaOSB2YixbLPLvUo6I6lkvvUwA6Eqh2Tj60e2Lh7O/k083f8tYiB0WEK4wmTI7Jg==",
1495
+
"cpu": [
1496
+
"x64"
1497
+
],
1498
+
"license": "MIT",
1499
+
"optional": true,
1500
+
"os": [
1501
+
"win32"
1502
+
],
1503
+
"engines": {
1504
+
"node": ">= 10"
1505
+
}
1506
+
},
1507
+
"node_modules/@tailwindcss/vite": {
1508
+
"version": "4.0.0",
1509
+
"resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.0.tgz",
1510
+
"integrity": "sha512-4uukMiU9gHui8KMPMdWic5SP1O/tmQ1NFSRNrQWmcop5evAVl/LZ6/LuWL3quEiecp2RBcRWwqJrG+mFXlRlew==",
1511
+
"license": "MIT",
1512
+
"dependencies": {
1513
+
"@tailwindcss/node": "^4.0.0",
1514
+
"@tailwindcss/oxide": "^4.0.0",
1515
+
"lightningcss": "^1.29.1",
1516
+
"tailwindcss": "4.0.0"
1517
+
},
1518
+
"peerDependencies": {
1519
+
"vite": "^5.2.0 || ^6"
1520
+
}
1521
+
},
1522
+
"node_modules/@tailwindcss/vite/node_modules/tailwindcss": {
1523
+
"version": "4.0.0",
1524
+
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0.tgz",
1525
+
"integrity": "sha512-ULRPI3A+e39T7pSaf1xoi58AqqJxVCLg8F/uM5A3FadUbnyDTgltVnXJvdkTjwCOGA6NazqHVcwPJC5h2vRYVQ==",
1526
+
"license": "MIT"
1527
+
},
1528
+
"node_modules/@types/babel__core": {
1529
+
"version": "7.20.5",
1530
+
"dev": true,
1531
+
"license": "MIT",
1532
+
"dependencies": {
1533
+
"@babel/parser": "^7.20.7",
1534
+
"@babel/types": "^7.20.7",
1535
+
"@types/babel__generator": "*",
1536
+
"@types/babel__template": "*",
1537
+
"@types/babel__traverse": "*"
1538
+
}
1539
+
},
1540
+
"node_modules/@types/babel__generator": {
1541
+
"version": "7.6.8",
1542
+
"dev": true,
1543
+
"license": "MIT",
1544
+
"dependencies": {
1545
+
"@babel/types": "^7.0.0"
1546
+
}
1547
+
},
1548
+
"node_modules/@types/babel__template": {
1549
+
"version": "7.4.4",
1550
+
"dev": true,
1551
+
"license": "MIT",
1552
+
"dependencies": {
1553
+
"@babel/parser": "^7.1.0",
1554
+
"@babel/types": "^7.0.0"
1555
+
}
1556
+
},
1557
+
"node_modules/@types/babel__traverse": {
1558
+
"version": "7.20.6",
1559
+
"dev": true,
1560
+
"license": "MIT",
1561
+
"dependencies": {
1562
+
"@babel/types": "^7.20.7"
1563
+
}
1564
+
},
1565
+
"node_modules/@types/estree": {
1566
+
"version": "1.0.6",
1567
+
"license": "MIT"
1568
+
},
1569
+
"node_modules/@types/json-schema": {
1570
+
"version": "7.0.15",
1571
+
"dev": true,
1572
+
"license": "MIT"
1573
+
},
1574
+
"node_modules/@types/node": {
1575
+
"version": "22.10.10",
1576
+
"devOptional": true,
1577
+
"license": "MIT",
1578
+
"dependencies": {
1579
+
"undici-types": "~6.20.0"
1580
+
}
1581
+
},
1582
+
"node_modules/@types/parse-json": {
1583
+
"version": "4.0.2",
1584
+
"license": "MIT"
1585
+
},
1586
+
"node_modules/@types/prop-types": {
1587
+
"version": "15.7.14",
1588
+
"devOptional": true,
1589
+
"license": "MIT"
1590
+
},
1591
+
"node_modules/@types/react": {
1592
+
"version": "18.3.18",
1593
+
"devOptional": true,
1594
+
"license": "MIT",
1595
+
"dependencies": {
1596
+
"@types/prop-types": "*",
1597
+
"csstype": "^3.0.2"
1598
+
}
1599
+
},
1600
+
"node_modules/@types/react-dom": {
1601
+
"version": "18.3.5",
1602
+
"devOptional": true,
1603
+
"license": "MIT",
1604
+
"peerDependencies": {
1605
+
"@types/react": "^18.0.0"
1606
+
}
1607
+
},
1608
+
"node_modules/@typescript-eslint/eslint-plugin": {
1609
+
"version": "8.21.0",
1610
+
"dev": true,
1611
+
"license": "MIT",
1612
+
"dependencies": {
1613
+
"@eslint-community/regexpp": "^4.10.0",
1614
+
"@typescript-eslint/scope-manager": "8.21.0",
1615
+
"@typescript-eslint/type-utils": "8.21.0",
1616
+
"@typescript-eslint/utils": "8.21.0",
1617
+
"@typescript-eslint/visitor-keys": "8.21.0",
1618
+
"graphemer": "^1.4.0",
1619
+
"ignore": "^5.3.1",
1620
+
"natural-compare": "^1.4.0",
1621
+
"ts-api-utils": "^2.0.0"
1622
+
},
1623
+
"engines": {
1624
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1625
+
},
1626
+
"funding": {
1627
+
"type": "opencollective",
1628
+
"url": "https://opencollective.com/typescript-eslint"
1629
+
},
1630
+
"peerDependencies": {
1631
+
"@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
1632
+
"eslint": "^8.57.0 || ^9.0.0",
1633
+
"typescript": ">=4.8.4 <5.8.0"
1634
+
}
1635
+
},
1636
+
"node_modules/@typescript-eslint/parser": {
1637
+
"version": "8.21.0",
1638
+
"dev": true,
1639
+
"license": "MIT",
1640
+
"dependencies": {
1641
+
"@typescript-eslint/scope-manager": "8.21.0",
1642
+
"@typescript-eslint/types": "8.21.0",
1643
+
"@typescript-eslint/typescript-estree": "8.21.0",
1644
+
"@typescript-eslint/visitor-keys": "8.21.0",
1645
+
"debug": "^4.3.4"
1646
+
},
1647
+
"engines": {
1648
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1649
+
},
1650
+
"funding": {
1651
+
"type": "opencollective",
1652
+
"url": "https://opencollective.com/typescript-eslint"
1653
+
},
1654
+
"peerDependencies": {
1655
+
"eslint": "^8.57.0 || ^9.0.0",
1656
+
"typescript": ">=4.8.4 <5.8.0"
1657
+
}
1658
+
},
1659
+
"node_modules/@typescript-eslint/scope-manager": {
1660
+
"version": "8.21.0",
1661
+
"dev": true,
1662
+
"license": "MIT",
1663
+
"dependencies": {
1664
+
"@typescript-eslint/types": "8.21.0",
1665
+
"@typescript-eslint/visitor-keys": "8.21.0"
1666
+
},
1667
+
"engines": {
1668
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1669
+
},
1670
+
"funding": {
1671
+
"type": "opencollective",
1672
+
"url": "https://opencollective.com/typescript-eslint"
1673
+
}
1674
+
},
1675
+
"node_modules/@typescript-eslint/type-utils": {
1676
+
"version": "8.21.0",
1677
+
"dev": true,
1678
+
"license": "MIT",
1679
+
"dependencies": {
1680
+
"@typescript-eslint/typescript-estree": "8.21.0",
1681
+
"@typescript-eslint/utils": "8.21.0",
1682
+
"debug": "^4.3.4",
1683
+
"ts-api-utils": "^2.0.0"
1684
+
},
1685
+
"engines": {
1686
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1687
+
},
1688
+
"funding": {
1689
+
"type": "opencollective",
1690
+
"url": "https://opencollective.com/typescript-eslint"
1691
+
},
1692
+
"peerDependencies": {
1693
+
"eslint": "^8.57.0 || ^9.0.0",
1694
+
"typescript": ">=4.8.4 <5.8.0"
1695
+
}
1696
+
},
1697
+
"node_modules/@typescript-eslint/types": {
1698
+
"version": "8.21.0",
1699
+
"dev": true,
1700
+
"license": "MIT",
1701
+
"engines": {
1702
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1703
+
},
1704
+
"funding": {
1705
+
"type": "opencollective",
1706
+
"url": "https://opencollective.com/typescript-eslint"
1707
+
}
1708
+
},
1709
+
"node_modules/@typescript-eslint/typescript-estree": {
1710
+
"version": "8.21.0",
1711
+
"dev": true,
1712
+
"license": "MIT",
1713
+
"dependencies": {
1714
+
"@typescript-eslint/types": "8.21.0",
1715
+
"@typescript-eslint/visitor-keys": "8.21.0",
1716
+
"debug": "^4.3.4",
1717
+
"fast-glob": "^3.3.2",
1718
+
"is-glob": "^4.0.3",
1719
+
"minimatch": "^9.0.4",
1720
+
"semver": "^7.6.0",
1721
+
"ts-api-utils": "^2.0.0"
1722
+
},
1723
+
"engines": {
1724
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1725
+
},
1726
+
"funding": {
1727
+
"type": "opencollective",
1728
+
"url": "https://opencollective.com/typescript-eslint"
1729
+
},
1730
+
"peerDependencies": {
1731
+
"typescript": ">=4.8.4 <5.8.0"
1732
+
}
1733
+
},
1734
+
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
1735
+
"version": "9.0.5",
1736
+
"dev": true,
1737
+
"license": "ISC",
1738
+
"dependencies": {
1739
+
"brace-expansion": "^2.0.1"
1740
+
},
1741
+
"engines": {
1742
+
"node": ">=16 || 14 >=14.17"
1743
+
},
1744
+
"funding": {
1745
+
"url": "https://github.com/sponsors/isaacs"
1746
+
}
1747
+
},
1748
+
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/node_modules/brace-expansion": {
1749
+
"version": "2.0.1",
1750
+
"dev": true,
1751
+
"license": "MIT",
1752
+
"dependencies": {
1753
+
"balanced-match": "^1.0.0"
1754
+
}
1755
+
},
1756
+
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
1757
+
"version": "7.6.3",
1758
+
"dev": true,
1759
+
"license": "ISC",
1760
+
"bin": {
1761
+
"semver": "bin/semver.js"
1762
+
},
1763
+
"engines": {
1764
+
"node": ">=10"
1765
+
}
1766
+
},
1767
+
"node_modules/@typescript-eslint/utils": {
1768
+
"version": "8.21.0",
1769
+
"dev": true,
1770
+
"license": "MIT",
1771
+
"dependencies": {
1772
+
"@eslint-community/eslint-utils": "^4.4.0",
1773
+
"@typescript-eslint/scope-manager": "8.21.0",
1774
+
"@typescript-eslint/types": "8.21.0",
1775
+
"@typescript-eslint/typescript-estree": "8.21.0"
1776
+
},
1777
+
"engines": {
1778
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1779
+
},
1780
+
"funding": {
1781
+
"type": "opencollective",
1782
+
"url": "https://opencollective.com/typescript-eslint"
1783
+
},
1784
+
"peerDependencies": {
1785
+
"eslint": "^8.57.0 || ^9.0.0",
1786
+
"typescript": ">=4.8.4 <5.8.0"
1787
+
}
1788
+
},
1789
+
"node_modules/@typescript-eslint/visitor-keys": {
1790
+
"version": "8.21.0",
1791
+
"dev": true,
1792
+
"license": "MIT",
1793
+
"dependencies": {
1794
+
"@typescript-eslint/types": "8.21.0",
1795
+
"eslint-visitor-keys": "^4.2.0"
1796
+
},
1797
+
"engines": {
1798
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1799
+
},
1800
+
"funding": {
1801
+
"type": "opencollective",
1802
+
"url": "https://opencollective.com/typescript-eslint"
1803
+
}
1804
+
},
1805
+
"node_modules/@vitejs/plugin-react": {
1806
+
"version": "4.3.4",
1807
+
"dev": true,
1808
+
"license": "MIT",
1809
+
"dependencies": {
1810
+
"@babel/core": "^7.26.0",
1811
+
"@babel/plugin-transform-react-jsx-self": "^7.25.9",
1812
+
"@babel/plugin-transform-react-jsx-source": "^7.25.9",
1813
+
"@types/babel__core": "^7.20.5",
1814
+
"react-refresh": "^0.14.2"
1815
+
},
1816
+
"engines": {
1817
+
"node": "^14.18.0 || >=16.0.0"
1818
+
},
1819
+
"peerDependencies": {
1820
+
"vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
1821
+
}
1822
+
},
1823
+
"node_modules/acorn": {
1824
+
"version": "8.14.0",
1825
+
"dev": true,
1826
+
"license": "MIT",
1827
+
"bin": {
1828
+
"acorn": "bin/acorn"
1829
+
},
1830
+
"engines": {
1831
+
"node": ">=0.4.0"
1832
+
}
1833
+
},
1834
+
"node_modules/acorn-jsx": {
1835
+
"version": "5.3.2",
1836
+
"dev": true,
1837
+
"license": "MIT",
1838
+
"peerDependencies": {
1839
+
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1840
+
}
1841
+
},
1842
+
"node_modules/ajv": {
1843
+
"version": "6.12.6",
1844
+
"dev": true,
1845
+
"license": "MIT",
1846
+
"dependencies": {
1847
+
"fast-deep-equal": "^3.1.1",
1848
+
"fast-json-stable-stringify": "^2.0.0",
1849
+
"json-schema-traverse": "^0.4.1",
1850
+
"uri-js": "^4.2.2"
1851
+
},
1852
+
"funding": {
1853
+
"type": "github",
1854
+
"url": "https://github.com/sponsors/epoberezkin"
1855
+
}
1856
+
},
1857
+
"node_modules/ansi-regex": {
1858
+
"version": "6.1.0",
1859
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
1860
+
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
1861
+
"license": "MIT",
1862
+
"engines": {
1863
+
"node": ">=12"
1864
+
},
1865
+
"funding": {
1866
+
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
1867
+
}
1868
+
},
1869
+
"node_modules/ansi-styles": {
1870
+
"version": "4.3.0",
1871
+
"license": "MIT",
1872
+
"dependencies": {
1873
+
"color-convert": "^2.0.1"
1874
+
},
1875
+
"engines": {
1876
+
"node": ">=8"
1877
+
},
1878
+
"funding": {
1879
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
1880
+
}
1881
+
},
1882
+
"node_modules/any-promise": {
1883
+
"version": "1.3.0",
1884
+
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1885
+
"integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
1886
+
"license": "MIT"
1887
+
},
1888
+
"node_modules/anymatch": {
1889
+
"version": "3.1.3",
1890
+
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1891
+
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1892
+
"license": "ISC",
1893
+
"dependencies": {
1894
+
"normalize-path": "^3.0.0",
1895
+
"picomatch": "^2.0.4"
1896
+
},
1897
+
"engines": {
1898
+
"node": ">= 8"
1899
+
}
1900
+
},
1901
+
"node_modules/arg": {
1902
+
"version": "5.0.2",
1903
+
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1904
+
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1905
+
"license": "MIT"
1906
+
},
1907
+
"node_modules/argparse": {
1908
+
"version": "2.0.1",
1909
+
"dev": true,
1910
+
"license": "Python-2.0"
1911
+
},
1912
+
"node_modules/aria-hidden": {
1913
+
"version": "1.2.4",
1914
+
"resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
1915
+
"integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
1916
+
"license": "MIT",
1917
+
"dependencies": {
1918
+
"tslib": "^2.0.0"
1919
+
},
1920
+
"engines": {
1921
+
"node": ">=10"
1922
+
}
1923
+
},
1924
+
"node_modules/asynckit": {
1925
+
"version": "0.4.0",
1926
+
"license": "MIT"
1927
+
},
1928
+
"node_modules/autoprefixer": {
1929
+
"version": "10.4.20",
1930
+
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
1931
+
"integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
1932
+
"dev": true,
1933
+
"funding": [
1934
+
{
1935
+
"type": "opencollective",
1936
+
"url": "https://opencollective.com/postcss/"
1937
+
},
1938
+
{
1939
+
"type": "tidelift",
1940
+
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
1941
+
},
1942
+
{
1943
+
"type": "github",
1944
+
"url": "https://github.com/sponsors/ai"
1945
+
}
1946
+
],
1947
+
"license": "MIT",
1948
+
"dependencies": {
1949
+
"browserslist": "^4.23.3",
1950
+
"caniuse-lite": "^1.0.30001646",
1951
+
"fraction.js": "^4.3.7",
1952
+
"normalize-range": "^0.1.2",
1953
+
"picocolors": "^1.0.1",
1954
+
"postcss-value-parser": "^4.2.0"
1955
+
},
1956
+
"bin": {
1957
+
"autoprefixer": "bin/autoprefixer"
1958
+
},
1959
+
"engines": {
1960
+
"node": "^10 || ^12 || >=14"
1961
+
},
1962
+
"peerDependencies": {
1963
+
"postcss": "^8.1.0"
1964
+
}
1965
+
},
1966
+
"node_modules/axios": {
1967
+
"version": "1.7.9",
1968
+
"license": "MIT",
1969
+
"dependencies": {
1970
+
"follow-redirects": "^1.15.6",
1971
+
"form-data": "^4.0.0",
1972
+
"proxy-from-env": "^1.1.0"
1973
+
}
1974
+
},
1975
+
"node_modules/babel-plugin-macros": {
1976
+
"version": "3.1.0",
1977
+
"license": "MIT",
1978
+
"dependencies": {
1979
+
"@babel/runtime": "^7.12.5",
1980
+
"cosmiconfig": "^7.0.0",
1981
+
"resolve": "^1.19.0"
1982
+
},
1983
+
"engines": {
1984
+
"node": ">=10",
1985
+
"npm": ">=6"
1986
+
}
1987
+
},
1988
+
"node_modules/balanced-match": {
1989
+
"version": "1.0.2",
1990
+
"license": "MIT"
1991
+
},
1992
+
"node_modules/binary-extensions": {
1993
+
"version": "2.3.0",
1994
+
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
1995
+
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
1996
+
"license": "MIT",
1997
+
"engines": {
1998
+
"node": ">=8"
1999
+
},
2000
+
"funding": {
2001
+
"url": "https://github.com/sponsors/sindresorhus"
2002
+
}
2003
+
},
2004
+
"node_modules/brace-expansion": {
2005
+
"version": "1.1.11",
2006
+
"dev": true,
2007
+
"license": "MIT",
2008
+
"dependencies": {
2009
+
"balanced-match": "^1.0.0",
2010
+
"concat-map": "0.0.1"
2011
+
}
2012
+
},
2013
+
"node_modules/braces": {
2014
+
"version": "3.0.3",
2015
+
"license": "MIT",
2016
+
"dependencies": {
2017
+
"fill-range": "^7.1.1"
2018
+
},
2019
+
"engines": {
2020
+
"node": ">=8"
2021
+
}
2022
+
},
2023
+
"node_modules/browserslist": {
2024
+
"version": "4.24.4",
2025
+
"dev": true,
2026
+
"funding": [
2027
+
{
2028
+
"type": "opencollective",
2029
+
"url": "https://opencollective.com/browserslist"
2030
+
},
2031
+
{
2032
+
"type": "tidelift",
2033
+
"url": "https://tidelift.com/funding/github/npm/browserslist"
2034
+
},
2035
+
{
2036
+
"type": "github",
2037
+
"url": "https://github.com/sponsors/ai"
2038
+
}
2039
+
],
2040
+
"license": "MIT",
2041
+
"dependencies": {
2042
+
"caniuse-lite": "^1.0.30001688",
2043
+
"electron-to-chromium": "^1.5.73",
2044
+
"node-releases": "^2.0.19",
2045
+
"update-browserslist-db": "^1.1.1"
2046
+
},
2047
+
"bin": {
2048
+
"browserslist": "cli.js"
2049
+
},
2050
+
"engines": {
2051
+
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
2052
+
}
2053
+
},
2054
+
"node_modules/callsites": {
2055
+
"version": "3.1.0",
2056
+
"license": "MIT",
2057
+
"engines": {
2058
+
"node": ">=6"
2059
+
}
2060
+
},
2061
+
"node_modules/camelcase-css": {
2062
+
"version": "2.0.1",
2063
+
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
2064
+
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
2065
+
"license": "MIT",
2066
+
"engines": {
2067
+
"node": ">= 6"
2068
+
}
2069
+
},
2070
+
"node_modules/caniuse-lite": {
2071
+
"version": "1.0.30001695",
2072
+
"dev": true,
2073
+
"funding": [
2074
+
{
2075
+
"type": "opencollective",
2076
+
"url": "https://opencollective.com/browserslist"
2077
+
},
2078
+
{
2079
+
"type": "tidelift",
2080
+
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
2081
+
},
2082
+
{
2083
+
"type": "github",
2084
+
"url": "https://github.com/sponsors/ai"
2085
+
}
2086
+
],
2087
+
"license": "CC-BY-4.0"
2088
+
},
2089
+
"node_modules/chalk": {
2090
+
"version": "4.1.2",
2091
+
"dev": true,
2092
+
"license": "MIT",
2093
+
"dependencies": {
2094
+
"ansi-styles": "^4.1.0",
2095
+
"supports-color": "^7.1.0"
2096
+
},
2097
+
"engines": {
2098
+
"node": ">=10"
2099
+
},
2100
+
"funding": {
2101
+
"url": "https://github.com/chalk/chalk?sponsor=1"
2102
+
}
2103
+
},
2104
+
"node_modules/chokidar": {
2105
+
"version": "3.6.0",
2106
+
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
2107
+
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
2108
+
"license": "MIT",
2109
+
"dependencies": {
2110
+
"anymatch": "~3.1.2",
2111
+
"braces": "~3.0.2",
2112
+
"glob-parent": "~5.1.2",
2113
+
"is-binary-path": "~2.1.0",
2114
+
"is-glob": "~4.0.1",
2115
+
"normalize-path": "~3.0.0",
2116
+
"readdirp": "~3.6.0"
2117
+
},
2118
+
"engines": {
2119
+
"node": ">= 8.10.0"
2120
+
},
2121
+
"funding": {
2122
+
"url": "https://paulmillr.com/funding/"
2123
+
},
2124
+
"optionalDependencies": {
2125
+
"fsevents": "~2.3.2"
2126
+
}
2127
+
},
2128
+
"node_modules/chokidar/node_modules/glob-parent": {
2129
+
"version": "5.1.2",
2130
+
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
2131
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2132
+
"license": "ISC",
2133
+
"dependencies": {
2134
+
"is-glob": "^4.0.1"
2135
+
},
2136
+
"engines": {
2137
+
"node": ">= 6"
2138
+
}
2139
+
},
2140
+
"node_modules/class-variance-authority": {
2141
+
"version": "0.7.1",
2142
+
"resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
2143
+
"integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
2144
+
"license": "Apache-2.0",
2145
+
"dependencies": {
2146
+
"clsx": "^2.1.1"
2147
+
},
2148
+
"funding": {
2149
+
"url": "https://polar.sh/cva"
2150
+
}
2151
+
},
2152
+
"node_modules/clsx": {
2153
+
"version": "2.1.1",
2154
+
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
2155
+
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
2156
+
"license": "MIT",
2157
+
"engines": {
2158
+
"node": ">=6"
2159
+
}
2160
+
},
2161
+
"node_modules/color-convert": {
2162
+
"version": "2.0.1",
2163
+
"license": "MIT",
2164
+
"dependencies": {
2165
+
"color-name": "~1.1.4"
2166
+
},
2167
+
"engines": {
2168
+
"node": ">=7.0.0"
2169
+
}
2170
+
},
2171
+
"node_modules/color-name": {
2172
+
"version": "1.1.4",
2173
+
"license": "MIT"
2174
+
},
2175
+
"node_modules/combined-stream": {
2176
+
"version": "1.0.8",
2177
+
"license": "MIT",
2178
+
"dependencies": {
2179
+
"delayed-stream": "~1.0.0"
2180
+
},
2181
+
"engines": {
2182
+
"node": ">= 0.8"
2183
+
}
2184
+
},
2185
+
"node_modules/commander": {
2186
+
"version": "4.1.1",
2187
+
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
2188
+
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
2189
+
"license": "MIT",
2190
+
"engines": {
2191
+
"node": ">= 6"
2192
+
}
2193
+
},
2194
+
"node_modules/concat-map": {
2195
+
"version": "0.0.1",
2196
+
"dev": true,
2197
+
"license": "MIT"
2198
+
},
2199
+
"node_modules/convert-source-map": {
2200
+
"version": "2.0.0",
2201
+
"dev": true,
2202
+
"license": "MIT"
2203
+
},
2204
+
"node_modules/cosmiconfig": {
2205
+
"version": "7.1.0",
2206
+
"license": "MIT",
2207
+
"dependencies": {
2208
+
"@types/parse-json": "^4.0.0",
2209
+
"import-fresh": "^3.2.1",
2210
+
"parse-json": "^5.0.0",
2211
+
"path-type": "^4.0.0",
2212
+
"yaml": "^1.10.0"
2213
+
},
2214
+
"engines": {
2215
+
"node": ">=10"
2216
+
}
2217
+
},
2218
+
"node_modules/cosmiconfig/node_modules/yaml": {
2219
+
"version": "1.10.2",
2220
+
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
2221
+
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
2222
+
"license": "ISC",
2223
+
"engines": {
2224
+
"node": ">= 6"
2225
+
}
2226
+
},
2227
+
"node_modules/cross-spawn": {
2228
+
"version": "7.0.6",
2229
+
"license": "MIT",
2230
+
"dependencies": {
2231
+
"path-key": "^3.1.0",
2232
+
"shebang-command": "^2.0.0",
2233
+
"which": "^2.0.1"
2234
+
},
2235
+
"engines": {
2236
+
"node": ">= 8"
2237
+
}
2238
+
},
2239
+
"node_modules/cssesc": {
2240
+
"version": "3.0.0",
2241
+
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
2242
+
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
2243
+
"license": "MIT",
2244
+
"bin": {
2245
+
"cssesc": "bin/cssesc"
2246
+
},
2247
+
"engines": {
2248
+
"node": ">=4"
2249
+
}
2250
+
},
2251
+
"node_modules/csstype": {
2252
+
"version": "3.1.3",
2253
+
"license": "MIT"
2254
+
},
2255
+
"node_modules/debug": {
2256
+
"version": "4.4.0",
2257
+
"license": "MIT",
2258
+
"dependencies": {
2259
+
"ms": "^2.1.3"
2260
+
},
2261
+
"engines": {
2262
+
"node": ">=6.0"
2263
+
},
2264
+
"peerDependenciesMeta": {
2265
+
"supports-color": {
2266
+
"optional": true
2267
+
}
2268
+
}
2269
+
},
2270
+
"node_modules/deep-is": {
2271
+
"version": "0.1.4",
2272
+
"dev": true,
2273
+
"license": "MIT"
2274
+
},
2275
+
"node_modules/delayed-stream": {
2276
+
"version": "1.0.0",
2277
+
"license": "MIT",
2278
+
"engines": {
2279
+
"node": ">=0.4.0"
2280
+
}
2281
+
},
2282
+
"node_modules/detect-libc": {
2283
+
"version": "1.0.3",
2284
+
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
2285
+
"integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
2286
+
"license": "Apache-2.0",
2287
+
"bin": {
2288
+
"detect-libc": "bin/detect-libc.js"
2289
+
},
2290
+
"engines": {
2291
+
"node": ">=0.10"
2292
+
}
2293
+
},
2294
+
"node_modules/detect-node-es": {
2295
+
"version": "1.1.0",
2296
+
"license": "MIT"
2297
+
},
2298
+
"node_modules/didyoumean": {
2299
+
"version": "1.2.2",
2300
+
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
2301
+
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
2302
+
"license": "Apache-2.0"
2303
+
},
2304
+
"node_modules/dlv": {
2305
+
"version": "1.1.3",
2306
+
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
2307
+
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
2308
+
"license": "MIT"
2309
+
},
2310
+
"node_modules/eastasianwidth": {
2311
+
"version": "0.2.0",
2312
+
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
2313
+
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
2314
+
"license": "MIT"
2315
+
},
2316
+
"node_modules/electron-to-chromium": {
2317
+
"version": "1.5.88",
2318
+
"dev": true,
2319
+
"license": "ISC"
2320
+
},
2321
+
"node_modules/emoji-regex": {
2322
+
"version": "9.2.2",
2323
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
2324
+
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
2325
+
"license": "MIT"
2326
+
},
2327
+
"node_modules/enhanced-resolve": {
2328
+
"version": "5.18.0",
2329
+
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz",
2330
+
"integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==",
2331
+
"license": "MIT",
2332
+
"dependencies": {
2333
+
"graceful-fs": "^4.2.4",
2334
+
"tapable": "^2.2.0"
2335
+
},
2336
+
"engines": {
2337
+
"node": ">=10.13.0"
2338
+
}
2339
+
},
2340
+
"node_modules/error-ex": {
2341
+
"version": "1.3.2",
2342
+
"license": "MIT",
2343
+
"dependencies": {
2344
+
"is-arrayish": "^0.2.1"
2345
+
}
2346
+
},
2347
+
"node_modules/esbuild": {
2348
+
"version": "0.24.2",
2349
+
"hasInstallScript": true,
2350
+
"license": "MIT",
2351
+
"bin": {
2352
+
"esbuild": "bin/esbuild"
2353
+
},
2354
+
"engines": {
2355
+
"node": ">=18"
2356
+
},
2357
+
"optionalDependencies": {
2358
+
"@esbuild/aix-ppc64": "0.24.2",
2359
+
"@esbuild/android-arm": "0.24.2",
2360
+
"@esbuild/android-arm64": "0.24.2",
2361
+
"@esbuild/android-x64": "0.24.2",
2362
+
"@esbuild/darwin-arm64": "0.24.2",
2363
+
"@esbuild/darwin-x64": "0.24.2",
2364
+
"@esbuild/freebsd-arm64": "0.24.2",
2365
+
"@esbuild/freebsd-x64": "0.24.2",
2366
+
"@esbuild/linux-arm": "0.24.2",
2367
+
"@esbuild/linux-arm64": "0.24.2",
2368
+
"@esbuild/linux-ia32": "0.24.2",
2369
+
"@esbuild/linux-loong64": "0.24.2",
2370
+
"@esbuild/linux-mips64el": "0.24.2",
2371
+
"@esbuild/linux-ppc64": "0.24.2",
2372
+
"@esbuild/linux-riscv64": "0.24.2",
2373
+
"@esbuild/linux-s390x": "0.24.2",
2374
+
"@esbuild/linux-x64": "0.24.2",
2375
+
"@esbuild/netbsd-arm64": "0.24.2",
2376
+
"@esbuild/netbsd-x64": "0.24.2",
2377
+
"@esbuild/openbsd-arm64": "0.24.2",
2378
+
"@esbuild/openbsd-x64": "0.24.2",
2379
+
"@esbuild/sunos-x64": "0.24.2",
2380
+
"@esbuild/win32-arm64": "0.24.2",
2381
+
"@esbuild/win32-ia32": "0.24.2",
2382
+
"@esbuild/win32-x64": "0.24.2"
2383
+
}
2384
+
},
2385
+
"node_modules/escalade": {
2386
+
"version": "3.2.0",
2387
+
"dev": true,
2388
+
"license": "MIT",
2389
+
"engines": {
2390
+
"node": ">=6"
2391
+
}
2392
+
},
2393
+
"node_modules/escape-string-regexp": {
2394
+
"version": "4.0.0",
2395
+
"license": "MIT",
2396
+
"engines": {
2397
+
"node": ">=10"
2398
+
},
2399
+
"funding": {
2400
+
"url": "https://github.com/sponsors/sindresorhus"
2401
+
}
2402
+
},
2403
+
"node_modules/eslint": {
2404
+
"version": "9.19.0",
2405
+
"dev": true,
2406
+
"license": "MIT",
2407
+
"dependencies": {
2408
+
"@eslint-community/eslint-utils": "^4.2.0",
2409
+
"@eslint-community/regexpp": "^4.12.1",
2410
+
"@eslint/config-array": "^0.19.0",
2411
+
"@eslint/core": "^0.10.0",
2412
+
"@eslint/eslintrc": "^3.2.0",
2413
+
"@eslint/js": "9.19.0",
2414
+
"@eslint/plugin-kit": "^0.2.5",
2415
+
"@humanfs/node": "^0.16.6",
2416
+
"@humanwhocodes/module-importer": "^1.0.1",
2417
+
"@humanwhocodes/retry": "^0.4.1",
2418
+
"@types/estree": "^1.0.6",
2419
+
"@types/json-schema": "^7.0.15",
2420
+
"ajv": "^6.12.4",
2421
+
"chalk": "^4.0.0",
2422
+
"cross-spawn": "^7.0.6",
2423
+
"debug": "^4.3.2",
2424
+
"escape-string-regexp": "^4.0.0",
2425
+
"eslint-scope": "^8.2.0",
2426
+
"eslint-visitor-keys": "^4.2.0",
2427
+
"espree": "^10.3.0",
2428
+
"esquery": "^1.5.0",
2429
+
"esutils": "^2.0.2",
2430
+
"fast-deep-equal": "^3.1.3",
2431
+
"file-entry-cache": "^8.0.0",
2432
+
"find-up": "^5.0.0",
2433
+
"glob-parent": "^6.0.2",
2434
+
"ignore": "^5.2.0",
2435
+
"imurmurhash": "^0.1.4",
2436
+
"is-glob": "^4.0.0",
2437
+
"json-stable-stringify-without-jsonify": "^1.0.1",
2438
+
"lodash.merge": "^4.6.2",
2439
+
"minimatch": "^3.1.2",
2440
+
"natural-compare": "^1.4.0",
2441
+
"optionator": "^0.9.3"
2442
+
},
2443
+
"bin": {
2444
+
"eslint": "bin/eslint.js"
2445
+
},
2446
+
"engines": {
2447
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2448
+
},
2449
+
"funding": {
2450
+
"url": "https://eslint.org/donate"
2451
+
},
2452
+
"peerDependencies": {
2453
+
"jiti": "*"
2454
+
},
2455
+
"peerDependenciesMeta": {
2456
+
"jiti": {
2457
+
"optional": true
2458
+
}
2459
+
}
2460
+
},
2461
+
"node_modules/eslint-plugin-react-hooks": {
2462
+
"version": "5.1.0",
2463
+
"dev": true,
2464
+
"license": "MIT",
2465
+
"engines": {
2466
+
"node": ">=10"
2467
+
},
2468
+
"peerDependencies": {
2469
+
"eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
2470
+
}
2471
+
},
2472
+
"node_modules/eslint-plugin-react-refresh": {
2473
+
"version": "0.4.18",
2474
+
"dev": true,
2475
+
"license": "MIT",
2476
+
"peerDependencies": {
2477
+
"eslint": ">=8.40"
2478
+
}
2479
+
},
2480
+
"node_modules/eslint-scope": {
2481
+
"version": "8.2.0",
2482
+
"dev": true,
2483
+
"license": "BSD-2-Clause",
2484
+
"dependencies": {
2485
+
"esrecurse": "^4.3.0",
2486
+
"estraverse": "^5.2.0"
2487
+
},
2488
+
"engines": {
2489
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2490
+
},
2491
+
"funding": {
2492
+
"url": "https://opencollective.com/eslint"
2493
+
}
2494
+
},
2495
+
"node_modules/eslint-visitor-keys": {
2496
+
"version": "4.2.0",
2497
+
"dev": true,
2498
+
"license": "Apache-2.0",
2499
+
"engines": {
2500
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2501
+
},
2502
+
"funding": {
2503
+
"url": "https://opencollective.com/eslint"
2504
+
}
2505
+
},
2506
+
"node_modules/espree": {
2507
+
"version": "10.3.0",
2508
+
"dev": true,
2509
+
"license": "BSD-2-Clause",
2510
+
"dependencies": {
2511
+
"acorn": "^8.14.0",
2512
+
"acorn-jsx": "^5.3.2",
2513
+
"eslint-visitor-keys": "^4.2.0"
2514
+
},
2515
+
"engines": {
2516
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
2517
+
},
2518
+
"funding": {
2519
+
"url": "https://opencollective.com/eslint"
2520
+
}
2521
+
},
2522
+
"node_modules/esquery": {
2523
+
"version": "1.6.0",
2524
+
"dev": true,
2525
+
"license": "BSD-3-Clause",
2526
+
"dependencies": {
2527
+
"estraverse": "^5.1.0"
2528
+
},
2529
+
"engines": {
2530
+
"node": ">=0.10"
2531
+
}
2532
+
},
2533
+
"node_modules/esrecurse": {
2534
+
"version": "4.3.0",
2535
+
"dev": true,
2536
+
"license": "BSD-2-Clause",
2537
+
"dependencies": {
2538
+
"estraverse": "^5.2.0"
2539
+
},
2540
+
"engines": {
2541
+
"node": ">=4.0"
2542
+
}
2543
+
},
2544
+
"node_modules/estraverse": {
2545
+
"version": "5.3.0",
2546
+
"dev": true,
2547
+
"license": "BSD-2-Clause",
2548
+
"engines": {
2549
+
"node": ">=4.0"
2550
+
}
2551
+
},
2552
+
"node_modules/esutils": {
2553
+
"version": "2.0.3",
2554
+
"dev": true,
2555
+
"license": "BSD-2-Clause",
2556
+
"engines": {
2557
+
"node": ">=0.10.0"
2558
+
}
2559
+
},
2560
+
"node_modules/fast-deep-equal": {
2561
+
"version": "3.1.3",
2562
+
"license": "MIT"
2563
+
},
2564
+
"node_modules/fast-glob": {
2565
+
"version": "3.3.3",
2566
+
"license": "MIT",
2567
+
"dependencies": {
2568
+
"@nodelib/fs.stat": "^2.0.2",
2569
+
"@nodelib/fs.walk": "^1.2.3",
2570
+
"glob-parent": "^5.1.2",
2571
+
"merge2": "^1.3.0",
2572
+
"micromatch": "^4.0.8"
2573
+
},
2574
+
"engines": {
2575
+
"node": ">=8.6.0"
2576
+
}
2577
+
},
2578
+
"node_modules/fast-glob/node_modules/glob-parent": {
2579
+
"version": "5.1.2",
2580
+
"license": "ISC",
2581
+
"dependencies": {
2582
+
"is-glob": "^4.0.1"
2583
+
},
2584
+
"engines": {
2585
+
"node": ">= 6"
2586
+
}
2587
+
},
2588
+
"node_modules/fast-json-stable-stringify": {
2589
+
"version": "2.1.0",
2590
+
"dev": true,
2591
+
"license": "MIT"
2592
+
},
2593
+
"node_modules/fast-levenshtein": {
2594
+
"version": "2.0.6",
2595
+
"dev": true,
2596
+
"license": "MIT"
2597
+
},
2598
+
"node_modules/fastq": {
2599
+
"version": "1.18.0",
2600
+
"license": "ISC",
2601
+
"dependencies": {
2602
+
"reusify": "^1.0.4"
2603
+
}
2604
+
},
2605
+
"node_modules/file-entry-cache": {
2606
+
"version": "8.0.0",
2607
+
"dev": true,
2608
+
"license": "MIT",
2609
+
"dependencies": {
2610
+
"flat-cache": "^4.0.0"
2611
+
},
2612
+
"engines": {
2613
+
"node": ">=16.0.0"
2614
+
}
2615
+
},
2616
+
"node_modules/fill-range": {
2617
+
"version": "7.1.1",
2618
+
"license": "MIT",
2619
+
"dependencies": {
2620
+
"to-regex-range": "^5.0.1"
2621
+
},
2622
+
"engines": {
2623
+
"node": ">=8"
2624
+
}
2625
+
},
2626
+
"node_modules/find-root": {
2627
+
"version": "1.1.0",
2628
+
"license": "MIT"
2629
+
},
2630
+
"node_modules/find-up": {
2631
+
"version": "5.0.0",
2632
+
"dev": true,
2633
+
"license": "MIT",
2634
+
"dependencies": {
2635
+
"locate-path": "^6.0.0",
2636
+
"path-exists": "^4.0.0"
2637
+
},
2638
+
"engines": {
2639
+
"node": ">=10"
2640
+
},
2641
+
"funding": {
2642
+
"url": "https://github.com/sponsors/sindresorhus"
2643
+
}
2644
+
},
2645
+
"node_modules/flat-cache": {
2646
+
"version": "4.0.1",
2647
+
"dev": true,
2648
+
"license": "MIT",
2649
+
"dependencies": {
2650
+
"flatted": "^3.2.9",
2651
+
"keyv": "^4.5.4"
2652
+
},
2653
+
"engines": {
2654
+
"node": ">=16"
2655
+
}
2656
+
},
2657
+
"node_modules/flatted": {
2658
+
"version": "3.3.2",
2659
+
"dev": true,
2660
+
"license": "ISC"
2661
+
},
2662
+
"node_modules/follow-redirects": {
2663
+
"version": "1.15.9",
2664
+
"funding": [
2665
+
{
2666
+
"type": "individual",
2667
+
"url": "https://github.com/sponsors/RubenVerborgh"
2668
+
}
2669
+
],
2670
+
"license": "MIT",
2671
+
"engines": {
2672
+
"node": ">=4.0"
2673
+
},
2674
+
"peerDependenciesMeta": {
2675
+
"debug": {
2676
+
"optional": true
2677
+
}
2678
+
}
2679
+
},
2680
+
"node_modules/foreground-child": {
2681
+
"version": "3.3.0",
2682
+
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
2683
+
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
2684
+
"license": "ISC",
2685
+
"dependencies": {
2686
+
"cross-spawn": "^7.0.0",
2687
+
"signal-exit": "^4.0.1"
2688
+
},
2689
+
"engines": {
2690
+
"node": ">=14"
2691
+
},
2692
+
"funding": {
2693
+
"url": "https://github.com/sponsors/isaacs"
2694
+
}
2695
+
},
2696
+
"node_modules/form-data": {
2697
+
"version": "4.0.1",
2698
+
"license": "MIT",
2699
+
"dependencies": {
2700
+
"asynckit": "^0.4.0",
2701
+
"combined-stream": "^1.0.8",
2702
+
"mime-types": "^2.1.12"
2703
+
},
2704
+
"engines": {
2705
+
"node": ">= 6"
2706
+
}
2707
+
},
2708
+
"node_modules/fraction.js": {
2709
+
"version": "4.3.7",
2710
+
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
2711
+
"integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
2712
+
"dev": true,
2713
+
"license": "MIT",
2714
+
"engines": {
2715
+
"node": "*"
2716
+
},
2717
+
"funding": {
2718
+
"type": "patreon",
2719
+
"url": "https://github.com/sponsors/rawify"
2720
+
}
2721
+
},
2722
+
"node_modules/fsevents": {
2723
+
"version": "2.3.3",
2724
+
"license": "MIT",
2725
+
"optional": true,
2726
+
"os": [
2727
+
"darwin"
2728
+
],
2729
+
"engines": {
2730
+
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
2731
+
}
2732
+
},
2733
+
"node_modules/function-bind": {
2734
+
"version": "1.1.2",
2735
+
"license": "MIT",
2736
+
"funding": {
2737
+
"url": "https://github.com/sponsors/ljharb"
2738
+
}
2739
+
},
2740
+
"node_modules/gensync": {
2741
+
"version": "1.0.0-beta.2",
2742
+
"dev": true,
2743
+
"license": "MIT",
2744
+
"engines": {
2745
+
"node": ">=6.9.0"
2746
+
}
2747
+
},
2748
+
"node_modules/get-nonce": {
2749
+
"version": "1.0.1",
2750
+
"license": "MIT",
2751
+
"engines": {
2752
+
"node": ">=6"
2753
+
}
2754
+
},
2755
+
"node_modules/glob": {
2756
+
"version": "10.4.5",
2757
+
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
2758
+
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
2759
+
"license": "ISC",
2760
+
"dependencies": {
2761
+
"foreground-child": "^3.1.0",
2762
+
"jackspeak": "^3.1.2",
2763
+
"minimatch": "^9.0.4",
2764
+
"minipass": "^7.1.2",
2765
+
"package-json-from-dist": "^1.0.0",
2766
+
"path-scurry": "^1.11.1"
2767
+
},
2768
+
"bin": {
2769
+
"glob": "dist/esm/bin.mjs"
2770
+
},
2771
+
"funding": {
2772
+
"url": "https://github.com/sponsors/isaacs"
2773
+
}
2774
+
},
2775
+
"node_modules/glob-parent": {
2776
+
"version": "6.0.2",
2777
+
"license": "ISC",
2778
+
"dependencies": {
2779
+
"is-glob": "^4.0.3"
2780
+
},
2781
+
"engines": {
2782
+
"node": ">=10.13.0"
2783
+
}
2784
+
},
2785
+
"node_modules/glob/node_modules/brace-expansion": {
2786
+
"version": "2.0.1",
2787
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
2788
+
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
2789
+
"license": "MIT",
2790
+
"dependencies": {
2791
+
"balanced-match": "^1.0.0"
2792
+
}
2793
+
},
2794
+
"node_modules/glob/node_modules/minimatch": {
2795
+
"version": "9.0.5",
2796
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
2797
+
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
2798
+
"license": "ISC",
2799
+
"dependencies": {
2800
+
"brace-expansion": "^2.0.1"
2801
+
},
2802
+
"engines": {
2803
+
"node": ">=16 || 14 >=14.17"
2804
+
},
2805
+
"funding": {
2806
+
"url": "https://github.com/sponsors/isaacs"
2807
+
}
2808
+
},
2809
+
"node_modules/globals": {
2810
+
"version": "15.14.0",
2811
+
"dev": true,
2812
+
"license": "MIT",
2813
+
"engines": {
2814
+
"node": ">=18"
2815
+
},
2816
+
"funding": {
2817
+
"url": "https://github.com/sponsors/sindresorhus"
2818
+
}
2819
+
},
2820
+
"node_modules/graceful-fs": {
2821
+
"version": "4.2.11",
2822
+
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
2823
+
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
2824
+
"license": "ISC"
2825
+
},
2826
+
"node_modules/graphemer": {
2827
+
"version": "1.4.0",
2828
+
"dev": true,
2829
+
"license": "MIT"
2830
+
},
2831
+
"node_modules/has-flag": {
2832
+
"version": "4.0.0",
2833
+
"dev": true,
2834
+
"license": "MIT",
2835
+
"engines": {
2836
+
"node": ">=8"
2837
+
}
2838
+
},
2839
+
"node_modules/hasown": {
2840
+
"version": "2.0.2",
2841
+
"license": "MIT",
2842
+
"dependencies": {
2843
+
"function-bind": "^1.1.2"
2844
+
},
2845
+
"engines": {
2846
+
"node": ">= 0.4"
2847
+
}
2848
+
},
2849
+
"node_modules/hoist-non-react-statics": {
2850
+
"version": "3.3.2",
2851
+
"license": "BSD-3-Clause",
2852
+
"dependencies": {
2853
+
"react-is": "^16.7.0"
2854
+
}
2855
+
},
2856
+
"node_modules/ignore": {
2857
+
"version": "5.3.2",
2858
+
"dev": true,
2859
+
"license": "MIT",
2860
+
"engines": {
2861
+
"node": ">= 4"
2862
+
}
2863
+
},
2864
+
"node_modules/import-fresh": {
2865
+
"version": "3.3.0",
2866
+
"license": "MIT",
2867
+
"dependencies": {
2868
+
"parent-module": "^1.0.0",
2869
+
"resolve-from": "^4.0.0"
2870
+
},
2871
+
"engines": {
2872
+
"node": ">=6"
2873
+
},
2874
+
"funding": {
2875
+
"url": "https://github.com/sponsors/sindresorhus"
2876
+
}
2877
+
},
2878
+
"node_modules/imurmurhash": {
2879
+
"version": "0.1.4",
2880
+
"dev": true,
2881
+
"license": "MIT",
2882
+
"engines": {
2883
+
"node": ">=0.8.19"
2884
+
}
2885
+
},
2886
+
"node_modules/is-arrayish": {
2887
+
"version": "0.2.1",
2888
+
"license": "MIT"
2889
+
},
2890
+
"node_modules/is-binary-path": {
2891
+
"version": "2.1.0",
2892
+
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
2893
+
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
2894
+
"license": "MIT",
2895
+
"dependencies": {
2896
+
"binary-extensions": "^2.0.0"
2897
+
},
2898
+
"engines": {
2899
+
"node": ">=8"
2900
+
}
2901
+
},
2902
+
"node_modules/is-core-module": {
2903
+
"version": "2.16.1",
2904
+
"license": "MIT",
2905
+
"dependencies": {
2906
+
"hasown": "^2.0.2"
2907
+
},
2908
+
"engines": {
2909
+
"node": ">= 0.4"
2910
+
},
2911
+
"funding": {
2912
+
"url": "https://github.com/sponsors/ljharb"
2913
+
}
2914
+
},
2915
+
"node_modules/is-extglob": {
2916
+
"version": "2.1.1",
2917
+
"license": "MIT",
2918
+
"engines": {
2919
+
"node": ">=0.10.0"
2920
+
}
2921
+
},
2922
+
"node_modules/is-fullwidth-code-point": {
2923
+
"version": "3.0.0",
2924
+
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
2925
+
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
2926
+
"license": "MIT",
2927
+
"engines": {
2928
+
"node": ">=8"
2929
+
}
2930
+
},
2931
+
"node_modules/is-glob": {
2932
+
"version": "4.0.3",
2933
+
"license": "MIT",
2934
+
"dependencies": {
2935
+
"is-extglob": "^2.1.1"
2936
+
},
2937
+
"engines": {
2938
+
"node": ">=0.10.0"
2939
+
}
2940
+
},
2941
+
"node_modules/is-number": {
2942
+
"version": "7.0.0",
2943
+
"license": "MIT",
2944
+
"engines": {
2945
+
"node": ">=0.12.0"
2946
+
}
2947
+
},
2948
+
"node_modules/isexe": {
2949
+
"version": "2.0.0",
2950
+
"license": "ISC"
2951
+
},
2952
+
"node_modules/jackspeak": {
2953
+
"version": "3.4.3",
2954
+
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
2955
+
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
2956
+
"license": "BlueOak-1.0.0",
2957
+
"dependencies": {
2958
+
"@isaacs/cliui": "^8.0.2"
2959
+
},
2960
+
"funding": {
2961
+
"url": "https://github.com/sponsors/isaacs"
2962
+
},
2963
+
"optionalDependencies": {
2964
+
"@pkgjs/parseargs": "^0.11.0"
2965
+
}
2966
+
},
2967
+
"node_modules/jiti": {
2968
+
"version": "2.4.2",
2969
+
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
2970
+
"integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
2971
+
"license": "MIT",
2972
+
"bin": {
2973
+
"jiti": "lib/jiti-cli.mjs"
2974
+
}
2975
+
},
2976
+
"node_modules/js-tokens": {
2977
+
"version": "4.0.0",
2978
+
"license": "MIT"
2979
+
},
2980
+
"node_modules/js-yaml": {
2981
+
"version": "4.1.0",
2982
+
"dev": true,
2983
+
"license": "MIT",
2984
+
"dependencies": {
2985
+
"argparse": "^2.0.1"
2986
+
},
2987
+
"bin": {
2988
+
"js-yaml": "bin/js-yaml.js"
2989
+
}
2990
+
},
2991
+
"node_modules/jsesc": {
2992
+
"version": "3.1.0",
2993
+
"license": "MIT",
2994
+
"bin": {
2995
+
"jsesc": "bin/jsesc"
2996
+
},
2997
+
"engines": {
2998
+
"node": ">=6"
2999
+
}
3000
+
},
3001
+
"node_modules/json-buffer": {
3002
+
"version": "3.0.1",
3003
+
"dev": true,
3004
+
"license": "MIT"
3005
+
},
3006
+
"node_modules/json-parse-even-better-errors": {
3007
+
"version": "2.3.1",
3008
+
"license": "MIT"
3009
+
},
3010
+
"node_modules/json-schema-traverse": {
3011
+
"version": "0.4.1",
3012
+
"dev": true,
3013
+
"license": "MIT"
3014
+
},
3015
+
"node_modules/json-stable-stringify-without-jsonify": {
3016
+
"version": "1.0.1",
3017
+
"dev": true,
3018
+
"license": "MIT"
3019
+
},
3020
+
"node_modules/json5": {
3021
+
"version": "2.2.3",
3022
+
"dev": true,
3023
+
"license": "MIT",
3024
+
"bin": {
3025
+
"json5": "lib/cli.js"
3026
+
},
3027
+
"engines": {
3028
+
"node": ">=6"
3029
+
}
3030
+
},
3031
+
"node_modules/keyv": {
3032
+
"version": "4.5.4",
3033
+
"dev": true,
3034
+
"license": "MIT",
3035
+
"dependencies": {
3036
+
"json-buffer": "3.0.1"
3037
+
}
3038
+
},
3039
+
"node_modules/klona": {
3040
+
"version": "2.0.6",
3041
+
"license": "MIT",
3042
+
"engines": {
3043
+
"node": ">= 8"
3044
+
}
3045
+
},
3046
+
"node_modules/levn": {
3047
+
"version": "0.4.1",
3048
+
"dev": true,
3049
+
"license": "MIT",
3050
+
"dependencies": {
3051
+
"prelude-ls": "^1.2.1",
3052
+
"type-check": "~0.4.0"
3053
+
},
3054
+
"engines": {
3055
+
"node": ">= 0.8.0"
3056
+
}
3057
+
},
3058
+
"node_modules/lightningcss": {
3059
+
"version": "1.29.1",
3060
+
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.1.tgz",
3061
+
"integrity": "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==",
3062
+
"license": "MPL-2.0",
3063
+
"dependencies": {
3064
+
"detect-libc": "^1.0.3"
3065
+
},
3066
+
"engines": {
3067
+
"node": ">= 12.0.0"
3068
+
},
3069
+
"funding": {
3070
+
"type": "opencollective",
3071
+
"url": "https://opencollective.com/parcel"
3072
+
},
3073
+
"optionalDependencies": {
3074
+
"lightningcss-darwin-arm64": "1.29.1",
3075
+
"lightningcss-darwin-x64": "1.29.1",
3076
+
"lightningcss-freebsd-x64": "1.29.1",
3077
+
"lightningcss-linux-arm-gnueabihf": "1.29.1",
3078
+
"lightningcss-linux-arm64-gnu": "1.29.1",
3079
+
"lightningcss-linux-arm64-musl": "1.29.1",
3080
+
"lightningcss-linux-x64-gnu": "1.29.1",
3081
+
"lightningcss-linux-x64-musl": "1.29.1",
3082
+
"lightningcss-win32-arm64-msvc": "1.29.1",
3083
+
"lightningcss-win32-x64-msvc": "1.29.1"
3084
+
}
3085
+
},
3086
+
"node_modules/lightningcss-darwin-arm64": {
3087
+
"version": "1.29.1",
3088
+
"resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.1.tgz",
3089
+
"integrity": "sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==",
3090
+
"cpu": [
3091
+
"arm64"
3092
+
],
3093
+
"license": "MPL-2.0",
3094
+
"optional": true,
3095
+
"os": [
3096
+
"darwin"
3097
+
],
3098
+
"engines": {
3099
+
"node": ">= 12.0.0"
3100
+
},
3101
+
"funding": {
3102
+
"type": "opencollective",
3103
+
"url": "https://opencollective.com/parcel"
3104
+
}
3105
+
},
3106
+
"node_modules/lightningcss-darwin-x64": {
3107
+
"version": "1.29.1",
3108
+
"resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.1.tgz",
3109
+
"integrity": "sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==",
3110
+
"cpu": [
3111
+
"x64"
3112
+
],
3113
+
"license": "MPL-2.0",
3114
+
"optional": true,
3115
+
"os": [
3116
+
"darwin"
3117
+
],
3118
+
"engines": {
3119
+
"node": ">= 12.0.0"
3120
+
},
3121
+
"funding": {
3122
+
"type": "opencollective",
3123
+
"url": "https://opencollective.com/parcel"
3124
+
}
3125
+
},
3126
+
"node_modules/lightningcss-freebsd-x64": {
3127
+
"version": "1.29.1",
3128
+
"resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.1.tgz",
3129
+
"integrity": "sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==",
3130
+
"cpu": [
3131
+
"x64"
3132
+
],
3133
+
"license": "MPL-2.0",
3134
+
"optional": true,
3135
+
"os": [
3136
+
"freebsd"
3137
+
],
3138
+
"engines": {
3139
+
"node": ">= 12.0.0"
3140
+
},
3141
+
"funding": {
3142
+
"type": "opencollective",
3143
+
"url": "https://opencollective.com/parcel"
3144
+
}
3145
+
},
3146
+
"node_modules/lightningcss-linux-arm-gnueabihf": {
3147
+
"version": "1.29.1",
3148
+
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.1.tgz",
3149
+
"integrity": "sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==",
3150
+
"cpu": [
3151
+
"arm"
3152
+
],
3153
+
"license": "MPL-2.0",
3154
+
"optional": true,
3155
+
"os": [
3156
+
"linux"
3157
+
],
3158
+
"engines": {
3159
+
"node": ">= 12.0.0"
3160
+
},
3161
+
"funding": {
3162
+
"type": "opencollective",
3163
+
"url": "https://opencollective.com/parcel"
3164
+
}
3165
+
},
3166
+
"node_modules/lightningcss-linux-arm64-gnu": {
3167
+
"version": "1.29.1",
3168
+
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.1.tgz",
3169
+
"integrity": "sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==",
3170
+
"cpu": [
3171
+
"arm64"
3172
+
],
3173
+
"license": "MPL-2.0",
3174
+
"optional": true,
3175
+
"os": [
3176
+
"linux"
3177
+
],
3178
+
"engines": {
3179
+
"node": ">= 12.0.0"
3180
+
},
3181
+
"funding": {
3182
+
"type": "opencollective",
3183
+
"url": "https://opencollective.com/parcel"
3184
+
}
3185
+
},
3186
+
"node_modules/lightningcss-linux-arm64-musl": {
3187
+
"version": "1.29.1",
3188
+
"resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.1.tgz",
3189
+
"integrity": "sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==",
3190
+
"cpu": [
3191
+
"arm64"
3192
+
],
3193
+
"license": "MPL-2.0",
3194
+
"optional": true,
3195
+
"os": [
3196
+
"linux"
3197
+
],
3198
+
"engines": {
3199
+
"node": ">= 12.0.0"
3200
+
},
3201
+
"funding": {
3202
+
"type": "opencollective",
3203
+
"url": "https://opencollective.com/parcel"
3204
+
}
3205
+
},
3206
+
"node_modules/lightningcss-linux-x64-gnu": {
3207
+
"version": "1.29.1",
3208
+
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.1.tgz",
3209
+
"integrity": "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==",
3210
+
"cpu": [
3211
+
"x64"
3212
+
],
3213
+
"license": "MPL-2.0",
3214
+
"optional": true,
3215
+
"os": [
3216
+
"linux"
3217
+
],
3218
+
"engines": {
3219
+
"node": ">= 12.0.0"
3220
+
},
3221
+
"funding": {
3222
+
"type": "opencollective",
3223
+
"url": "https://opencollective.com/parcel"
3224
+
}
3225
+
},
3226
+
"node_modules/lightningcss-linux-x64-musl": {
3227
+
"version": "1.29.1",
3228
+
"resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.1.tgz",
3229
+
"integrity": "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==",
3230
+
"cpu": [
3231
+
"x64"
3232
+
],
3233
+
"license": "MPL-2.0",
3234
+
"optional": true,
3235
+
"os": [
3236
+
"linux"
3237
+
],
3238
+
"engines": {
3239
+
"node": ">= 12.0.0"
3240
+
},
3241
+
"funding": {
3242
+
"type": "opencollective",
3243
+
"url": "https://opencollective.com/parcel"
3244
+
}
3245
+
},
3246
+
"node_modules/lightningcss-win32-arm64-msvc": {
3247
+
"version": "1.29.1",
3248
+
"resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.1.tgz",
3249
+
"integrity": "sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==",
3250
+
"cpu": [
3251
+
"arm64"
3252
+
],
3253
+
"license": "MPL-2.0",
3254
+
"optional": true,
3255
+
"os": [
3256
+
"win32"
3257
+
],
3258
+
"engines": {
3259
+
"node": ">= 12.0.0"
3260
+
},
3261
+
"funding": {
3262
+
"type": "opencollective",
3263
+
"url": "https://opencollective.com/parcel"
3264
+
}
3265
+
},
3266
+
"node_modules/lightningcss-win32-x64-msvc": {
3267
+
"version": "1.29.1",
3268
+
"resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.1.tgz",
3269
+
"integrity": "sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==",
3270
+
"cpu": [
3271
+
"x64"
3272
+
],
3273
+
"license": "MPL-2.0",
3274
+
"optional": true,
3275
+
"os": [
3276
+
"win32"
3277
+
],
3278
+
"engines": {
3279
+
"node": ">= 12.0.0"
3280
+
},
3281
+
"funding": {
3282
+
"type": "opencollective",
3283
+
"url": "https://opencollective.com/parcel"
3284
+
}
3285
+
},
3286
+
"node_modules/lilconfig": {
3287
+
"version": "3.1.3",
3288
+
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
3289
+
"integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
3290
+
"license": "MIT",
3291
+
"engines": {
3292
+
"node": ">=14"
3293
+
},
3294
+
"funding": {
3295
+
"url": "https://github.com/sponsors/antonk52"
3296
+
}
3297
+
},
3298
+
"node_modules/lines-and-columns": {
3299
+
"version": "1.2.4",
3300
+
"license": "MIT"
3301
+
},
3302
+
"node_modules/locate-path": {
3303
+
"version": "6.0.0",
3304
+
"dev": true,
3305
+
"license": "MIT",
3306
+
"dependencies": {
3307
+
"p-locate": "^5.0.0"
3308
+
},
3309
+
"engines": {
3310
+
"node": ">=10"
3311
+
},
3312
+
"funding": {
3313
+
"url": "https://github.com/sponsors/sindresorhus"
3314
+
}
3315
+
},
3316
+
"node_modules/lodash.merge": {
3317
+
"version": "4.6.2",
3318
+
"dev": true,
3319
+
"license": "MIT"
3320
+
},
3321
+
"node_modules/loose-envify": {
3322
+
"version": "1.4.0",
3323
+
"license": "MIT",
3324
+
"dependencies": {
3325
+
"js-tokens": "^3.0.0 || ^4.0.0"
3326
+
},
3327
+
"bin": {
3328
+
"loose-envify": "cli.js"
3329
+
}
3330
+
},
3331
+
"node_modules/lru-cache": {
3332
+
"version": "5.1.1",
3333
+
"dev": true,
3334
+
"license": "ISC",
3335
+
"dependencies": {
3336
+
"yallist": "^3.0.2"
3337
+
}
3338
+
},
3339
+
"node_modules/lucide-react": {
3340
+
"version": "0.474.0",
3341
+
"resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.474.0.tgz",
3342
+
"integrity": "sha512-CmghgHkh0OJNmxGKWc0qfPJCYHASPMVSyGY8fj3xgk4v84ItqDg64JNKFZn5hC6E0vHi6gxnbCgwhyVB09wQtA==",
3343
+
"license": "ISC",
3344
+
"peerDependencies": {
3345
+
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
3346
+
}
3347
+
},
3348
+
"node_modules/merge2": {
3349
+
"version": "1.4.1",
3350
+
"license": "MIT",
3351
+
"engines": {
3352
+
"node": ">= 8"
3353
+
}
3354
+
},
3355
+
"node_modules/micromatch": {
3356
+
"version": "4.0.8",
3357
+
"license": "MIT",
3358
+
"dependencies": {
3359
+
"braces": "^3.0.3",
3360
+
"picomatch": "^2.3.1"
3361
+
},
3362
+
"engines": {
3363
+
"node": ">=8.6"
3364
+
}
3365
+
},
3366
+
"node_modules/mime-db": {
3367
+
"version": "1.52.0",
3368
+
"license": "MIT",
3369
+
"engines": {
3370
+
"node": ">= 0.6"
3371
+
}
3372
+
},
3373
+
"node_modules/mime-types": {
3374
+
"version": "2.1.35",
3375
+
"license": "MIT",
3376
+
"dependencies": {
3377
+
"mime-db": "1.52.0"
3378
+
},
3379
+
"engines": {
3380
+
"node": ">= 0.6"
3381
+
}
3382
+
},
3383
+
"node_modules/minimatch": {
3384
+
"version": "3.1.2",
3385
+
"dev": true,
3386
+
"license": "ISC",
3387
+
"dependencies": {
3388
+
"brace-expansion": "^1.1.7"
3389
+
},
3390
+
"engines": {
3391
+
"node": "*"
3392
+
}
3393
+
},
3394
+
"node_modules/minipass": {
3395
+
"version": "7.1.2",
3396
+
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
3397
+
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
3398
+
"license": "ISC",
3399
+
"engines": {
3400
+
"node": ">=16 || 14 >=14.17"
3401
+
}
3402
+
},
3403
+
"node_modules/ms": {
3404
+
"version": "2.1.3",
3405
+
"license": "MIT"
3406
+
},
3407
+
"node_modules/mz": {
3408
+
"version": "2.7.0",
3409
+
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
3410
+
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
3411
+
"license": "MIT",
3412
+
"dependencies": {
3413
+
"any-promise": "^1.0.0",
3414
+
"object-assign": "^4.0.1",
3415
+
"thenify-all": "^1.0.0"
3416
+
}
3417
+
},
3418
+
"node_modules/nanoid": {
3419
+
"version": "3.3.8",
3420
+
"funding": [
3421
+
{
3422
+
"type": "github",
3423
+
"url": "https://github.com/sponsors/ai"
3424
+
}
3425
+
],
3426
+
"license": "MIT",
3427
+
"bin": {
3428
+
"nanoid": "bin/nanoid.cjs"
3429
+
},
3430
+
"engines": {
3431
+
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
3432
+
}
3433
+
},
3434
+
"node_modules/natural-compare": {
3435
+
"version": "1.4.0",
3436
+
"dev": true,
3437
+
"license": "MIT"
3438
+
},
3439
+
"node_modules/node-releases": {
3440
+
"version": "2.0.19",
3441
+
"dev": true,
3442
+
"license": "MIT"
3443
+
},
3444
+
"node_modules/normalize-path": {
3445
+
"version": "3.0.0",
3446
+
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
3447
+
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
3448
+
"license": "MIT",
3449
+
"engines": {
3450
+
"node": ">=0.10.0"
3451
+
}
3452
+
},
3453
+
"node_modules/normalize-range": {
3454
+
"version": "0.1.2",
3455
+
"resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
3456
+
"integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
3457
+
"dev": true,
3458
+
"license": "MIT",
3459
+
"engines": {
3460
+
"node": ">=0.10.0"
3461
+
}
3462
+
},
3463
+
"node_modules/object-assign": {
3464
+
"version": "4.1.1",
3465
+
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
3466
+
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
3467
+
"license": "MIT",
3468
+
"engines": {
3469
+
"node": ">=0.10.0"
3470
+
}
3471
+
},
3472
+
"node_modules/object-hash": {
3473
+
"version": "3.0.0",
3474
+
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
3475
+
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
3476
+
"license": "MIT",
3477
+
"engines": {
3478
+
"node": ">= 6"
3479
+
}
3480
+
},
3481
+
"node_modules/optionator": {
3482
+
"version": "0.9.4",
3483
+
"dev": true,
3484
+
"license": "MIT",
3485
+
"dependencies": {
3486
+
"deep-is": "^0.1.3",
3487
+
"fast-levenshtein": "^2.0.6",
3488
+
"levn": "^0.4.1",
3489
+
"prelude-ls": "^1.2.1",
3490
+
"type-check": "^0.4.0",
3491
+
"word-wrap": "^1.2.5"
3492
+
},
3493
+
"engines": {
3494
+
"node": ">= 0.8.0"
3495
+
}
3496
+
},
3497
+
"node_modules/p-limit": {
3498
+
"version": "3.1.0",
3499
+
"dev": true,
3500
+
"license": "MIT",
3501
+
"dependencies": {
3502
+
"yocto-queue": "^0.1.0"
3503
+
},
3504
+
"engines": {
3505
+
"node": ">=10"
3506
+
},
3507
+
"funding": {
3508
+
"url": "https://github.com/sponsors/sindresorhus"
3509
+
}
3510
+
},
3511
+
"node_modules/p-locate": {
3512
+
"version": "5.0.0",
3513
+
"dev": true,
3514
+
"license": "MIT",
3515
+
"dependencies": {
3516
+
"p-limit": "^3.0.2"
3517
+
},
3518
+
"engines": {
3519
+
"node": ">=10"
3520
+
},
3521
+
"funding": {
3522
+
"url": "https://github.com/sponsors/sindresorhus"
3523
+
}
3524
+
},
3525
+
"node_modules/package-json-from-dist": {
3526
+
"version": "1.0.1",
3527
+
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
3528
+
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
3529
+
"license": "BlueOak-1.0.0"
3530
+
},
3531
+
"node_modules/parent-module": {
3532
+
"version": "1.0.1",
3533
+
"license": "MIT",
3534
+
"dependencies": {
3535
+
"callsites": "^3.0.0"
3536
+
},
3537
+
"engines": {
3538
+
"node": ">=6"
3539
+
}
3540
+
},
3541
+
"node_modules/parse-json": {
3542
+
"version": "5.2.0",
3543
+
"license": "MIT",
3544
+
"dependencies": {
3545
+
"@babel/code-frame": "^7.0.0",
3546
+
"error-ex": "^1.3.1",
3547
+
"json-parse-even-better-errors": "^2.3.0",
3548
+
"lines-and-columns": "^1.1.6"
3549
+
},
3550
+
"engines": {
3551
+
"node": ">=8"
3552
+
},
3553
+
"funding": {
3554
+
"url": "https://github.com/sponsors/sindresorhus"
3555
+
}
3556
+
},
3557
+
"node_modules/path-exists": {
3558
+
"version": "4.0.0",
3559
+
"dev": true,
3560
+
"license": "MIT",
3561
+
"engines": {
3562
+
"node": ">=8"
3563
+
}
3564
+
},
3565
+
"node_modules/path-key": {
3566
+
"version": "3.1.1",
3567
+
"license": "MIT",
3568
+
"engines": {
3569
+
"node": ">=8"
3570
+
}
3571
+
},
3572
+
"node_modules/path-parse": {
3573
+
"version": "1.0.7",
3574
+
"license": "MIT"
3575
+
},
3576
+
"node_modules/path-scurry": {
3577
+
"version": "1.11.1",
3578
+
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
3579
+
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
3580
+
"license": "BlueOak-1.0.0",
3581
+
"dependencies": {
3582
+
"lru-cache": "^10.2.0",
3583
+
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
3584
+
},
3585
+
"engines": {
3586
+
"node": ">=16 || 14 >=14.18"
3587
+
},
3588
+
"funding": {
3589
+
"url": "https://github.com/sponsors/isaacs"
3590
+
}
3591
+
},
3592
+
"node_modules/path-scurry/node_modules/lru-cache": {
3593
+
"version": "10.4.3",
3594
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
3595
+
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
3596
+
"license": "ISC"
3597
+
},
3598
+
"node_modules/path-type": {
3599
+
"version": "4.0.0",
3600
+
"license": "MIT",
3601
+
"engines": {
3602
+
"node": ">=8"
3603
+
}
3604
+
},
3605
+
"node_modules/picocolors": {
3606
+
"version": "1.1.1",
3607
+
"license": "ISC"
3608
+
},
3609
+
"node_modules/picomatch": {
3610
+
"version": "2.3.1",
3611
+
"license": "MIT",
3612
+
"engines": {
3613
+
"node": ">=8.6"
3614
+
},
3615
+
"funding": {
3616
+
"url": "https://github.com/sponsors/jonschlinkert"
3617
+
}
3618
+
},
3619
+
"node_modules/pify": {
3620
+
"version": "2.3.0",
3621
+
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
3622
+
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
3623
+
"license": "MIT",
3624
+
"engines": {
3625
+
"node": ">=0.10.0"
3626
+
}
3627
+
},
3628
+
"node_modules/pirates": {
3629
+
"version": "4.0.6",
3630
+
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
3631
+
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
3632
+
"license": "MIT",
3633
+
"engines": {
3634
+
"node": ">= 6"
3635
+
}
3636
+
},
3637
+
"node_modules/postcss": {
3638
+
"version": "8.5.1",
3639
+
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
3640
+
"integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
3641
+
"funding": [
3642
+
{
3643
+
"type": "opencollective",
3644
+
"url": "https://opencollective.com/postcss/"
3645
+
},
3646
+
{
3647
+
"type": "tidelift",
3648
+
"url": "https://tidelift.com/funding/github/npm/postcss"
3649
+
},
3650
+
{
3651
+
"type": "github",
3652
+
"url": "https://github.com/sponsors/ai"
3653
+
}
3654
+
],
3655
+
"license": "MIT",
3656
+
"dependencies": {
3657
+
"nanoid": "^3.3.8",
3658
+
"picocolors": "^1.1.1",
3659
+
"source-map-js": "^1.2.1"
3660
+
},
3661
+
"engines": {
3662
+
"node": "^10 || ^12 || >=14"
3663
+
}
3664
+
},
3665
+
"node_modules/postcss-import": {
3666
+
"version": "15.1.0",
3667
+
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
3668
+
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
3669
+
"license": "MIT",
3670
+
"dependencies": {
3671
+
"postcss-value-parser": "^4.0.0",
3672
+
"read-cache": "^1.0.0",
3673
+
"resolve": "^1.1.7"
3674
+
},
3675
+
"engines": {
3676
+
"node": ">=14.0.0"
3677
+
},
3678
+
"peerDependencies": {
3679
+
"postcss": "^8.0.0"
3680
+
}
3681
+
},
3682
+
"node_modules/postcss-js": {
3683
+
"version": "4.0.1",
3684
+
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
3685
+
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
3686
+
"license": "MIT",
3687
+
"dependencies": {
3688
+
"camelcase-css": "^2.0.1"
3689
+
},
3690
+
"engines": {
3691
+
"node": "^12 || ^14 || >= 16"
3692
+
},
3693
+
"funding": {
3694
+
"type": "opencollective",
3695
+
"url": "https://opencollective.com/postcss/"
3696
+
},
3697
+
"peerDependencies": {
3698
+
"postcss": "^8.4.21"
3699
+
}
3700
+
},
3701
+
"node_modules/postcss-load-config": {
3702
+
"version": "4.0.2",
3703
+
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
3704
+
"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
3705
+
"funding": [
3706
+
{
3707
+
"type": "opencollective",
3708
+
"url": "https://opencollective.com/postcss/"
3709
+
},
3710
+
{
3711
+
"type": "github",
3712
+
"url": "https://github.com/sponsors/ai"
3713
+
}
3714
+
],
3715
+
"license": "MIT",
3716
+
"dependencies": {
3717
+
"lilconfig": "^3.0.0",
3718
+
"yaml": "^2.3.4"
3719
+
},
3720
+
"engines": {
3721
+
"node": ">= 14"
3722
+
},
3723
+
"peerDependencies": {
3724
+
"postcss": ">=8.0.9",
3725
+
"ts-node": ">=9.0.0"
3726
+
},
3727
+
"peerDependenciesMeta": {
3728
+
"postcss": {
3729
+
"optional": true
3730
+
},
3731
+
"ts-node": {
3732
+
"optional": true
3733
+
}
3734
+
}
3735
+
},
3736
+
"node_modules/postcss-nested": {
3737
+
"version": "6.2.0",
3738
+
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
3739
+
"integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
3740
+
"funding": [
3741
+
{
3742
+
"type": "opencollective",
3743
+
"url": "https://opencollective.com/postcss/"
3744
+
},
3745
+
{
3746
+
"type": "github",
3747
+
"url": "https://github.com/sponsors/ai"
3748
+
}
3749
+
],
3750
+
"license": "MIT",
3751
+
"dependencies": {
3752
+
"postcss-selector-parser": "^6.1.1"
3753
+
},
3754
+
"engines": {
3755
+
"node": ">=12.0"
3756
+
},
3757
+
"peerDependencies": {
3758
+
"postcss": "^8.2.14"
3759
+
}
3760
+
},
3761
+
"node_modules/postcss-selector-parser": {
3762
+
"version": "6.1.2",
3763
+
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
3764
+
"integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
3765
+
"license": "MIT",
3766
+
"dependencies": {
3767
+
"cssesc": "^3.0.0",
3768
+
"util-deprecate": "^1.0.2"
3769
+
},
3770
+
"engines": {
3771
+
"node": ">=4"
3772
+
}
3773
+
},
3774
+
"node_modules/postcss-value-parser": {
3775
+
"version": "4.2.0",
3776
+
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
3777
+
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
3778
+
"license": "MIT"
3779
+
},
3780
+
"node_modules/prelude-ls": {
3781
+
"version": "1.2.1",
3782
+
"dev": true,
3783
+
"license": "MIT",
3784
+
"engines": {
3785
+
"node": ">= 0.8.0"
3786
+
}
3787
+
},
3788
+
"node_modules/proxy-from-env": {
3789
+
"version": "1.1.0",
3790
+
"license": "MIT"
3791
+
},
3792
+
"node_modules/punycode": {
3793
+
"version": "2.3.1",
3794
+
"dev": true,
3795
+
"license": "MIT",
3796
+
"engines": {
3797
+
"node": ">=6"
3798
+
}
3799
+
},
3800
+
"node_modules/queue-microtask": {
3801
+
"version": "1.2.3",
3802
+
"funding": [
3803
+
{
3804
+
"type": "github",
3805
+
"url": "https://github.com/sponsors/feross"
3806
+
},
3807
+
{
3808
+
"type": "patreon",
3809
+
"url": "https://www.patreon.com/feross"
3810
+
},
3811
+
{
3812
+
"type": "consulting",
3813
+
"url": "https://feross.org/support"
3814
+
}
3815
+
],
3816
+
"license": "MIT"
3817
+
},
3818
+
"node_modules/react": {
3819
+
"version": "18.3.1",
3820
+
"license": "MIT",
3821
+
"dependencies": {
3822
+
"loose-envify": "^1.1.0"
3823
+
},
3824
+
"engines": {
3825
+
"node": ">=0.10.0"
3826
+
}
3827
+
},
3828
+
"node_modules/react-dom": {
3829
+
"version": "18.3.1",
3830
+
"license": "MIT",
3831
+
"dependencies": {
3832
+
"loose-envify": "^1.1.0",
3833
+
"scheduler": "^0.23.2"
3834
+
},
3835
+
"peerDependencies": {
3836
+
"react": "^18.3.1"
3837
+
}
3838
+
},
3839
+
"node_modules/react-hook-form": {
3840
+
"version": "7.54.2",
3841
+
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.54.2.tgz",
3842
+
"integrity": "sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==",
3843
+
"license": "MIT",
3844
+
"engines": {
3845
+
"node": ">=18.0.0"
3846
+
},
3847
+
"funding": {
3848
+
"type": "opencollective",
3849
+
"url": "https://opencollective.com/react-hook-form"
3850
+
},
3851
+
"peerDependencies": {
3852
+
"react": "^16.8.0 || ^17 || ^18 || ^19"
3853
+
}
3854
+
},
3855
+
"node_modules/react-is": {
3856
+
"version": "16.13.1",
3857
+
"license": "MIT"
3858
+
},
3859
+
"node_modules/react-number-format": {
3860
+
"version": "5.4.3",
3861
+
"license": "MIT",
3862
+
"peerDependencies": {
3863
+
"react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
3864
+
"react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
3865
+
}
3866
+
},
3867
+
"node_modules/react-refresh": {
3868
+
"version": "0.14.2",
3869
+
"dev": true,
3870
+
"license": "MIT",
3871
+
"engines": {
3872
+
"node": ">=0.10.0"
3873
+
}
3874
+
},
3875
+
"node_modules/react-remove-scroll": {
3876
+
"version": "2.6.3",
3877
+
"license": "MIT",
3878
+
"dependencies": {
3879
+
"react-remove-scroll-bar": "^2.3.7",
3880
+
"react-style-singleton": "^2.2.3",
3881
+
"tslib": "^2.1.0",
3882
+
"use-callback-ref": "^1.3.3",
3883
+
"use-sidecar": "^1.1.3"
3884
+
},
3885
+
"engines": {
3886
+
"node": ">=10"
3887
+
},
3888
+
"peerDependencies": {
3889
+
"@types/react": "*",
3890
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
3891
+
},
3892
+
"peerDependenciesMeta": {
3893
+
"@types/react": {
3894
+
"optional": true
3895
+
}
3896
+
}
3897
+
},
3898
+
"node_modules/react-remove-scroll-bar": {
3899
+
"version": "2.3.8",
3900
+
"license": "MIT",
3901
+
"dependencies": {
3902
+
"react-style-singleton": "^2.2.2",
3903
+
"tslib": "^2.0.0"
3904
+
},
3905
+
"engines": {
3906
+
"node": ">=10"
3907
+
},
3908
+
"peerDependencies": {
3909
+
"@types/react": "*",
3910
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
3911
+
},
3912
+
"peerDependenciesMeta": {
3913
+
"@types/react": {
3914
+
"optional": true
3915
+
}
3916
+
}
3917
+
},
3918
+
"node_modules/react-style-singleton": {
3919
+
"version": "2.2.3",
3920
+
"license": "MIT",
3921
+
"dependencies": {
3922
+
"get-nonce": "^1.0.0",
3923
+
"tslib": "^2.0.0"
3924
+
},
3925
+
"engines": {
3926
+
"node": ">=10"
3927
+
},
3928
+
"peerDependencies": {
3929
+
"@types/react": "*",
3930
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
3931
+
},
3932
+
"peerDependenciesMeta": {
3933
+
"@types/react": {
3934
+
"optional": true
3935
+
}
3936
+
}
3937
+
},
3938
+
"node_modules/react-textarea-autosize": {
3939
+
"version": "8.5.6",
3940
+
"license": "MIT",
3941
+
"dependencies": {
3942
+
"@babel/runtime": "^7.20.13",
3943
+
"use-composed-ref": "^1.3.0",
3944
+
"use-latest": "^1.2.1"
3945
+
},
3946
+
"engines": {
3947
+
"node": ">=10"
3948
+
},
3949
+
"peerDependencies": {
3950
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
3951
+
}
3952
+
},
3953
+
"node_modules/read-cache": {
3954
+
"version": "1.0.0",
3955
+
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
3956
+
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
3957
+
"license": "MIT",
3958
+
"dependencies": {
3959
+
"pify": "^2.3.0"
3960
+
}
3961
+
},
3962
+
"node_modules/readdirp": {
3963
+
"version": "3.6.0",
3964
+
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
3965
+
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
3966
+
"license": "MIT",
3967
+
"dependencies": {
3968
+
"picomatch": "^2.2.1"
3969
+
},
3970
+
"engines": {
3971
+
"node": ">=8.10.0"
3972
+
}
3973
+
},
3974
+
"node_modules/regenerator-runtime": {
3975
+
"version": "0.14.1",
3976
+
"license": "MIT"
3977
+
},
3978
+
"node_modules/resolve": {
3979
+
"version": "1.22.10",
3980
+
"license": "MIT",
3981
+
"dependencies": {
3982
+
"is-core-module": "^2.16.0",
3983
+
"path-parse": "^1.0.7",
3984
+
"supports-preserve-symlinks-flag": "^1.0.0"
3985
+
},
3986
+
"bin": {
3987
+
"resolve": "bin/resolve"
3988
+
},
3989
+
"engines": {
3990
+
"node": ">= 0.4"
3991
+
},
3992
+
"funding": {
3993
+
"url": "https://github.com/sponsors/ljharb"
3994
+
}
3995
+
},
3996
+
"node_modules/resolve-from": {
3997
+
"version": "4.0.0",
3998
+
"license": "MIT",
3999
+
"engines": {
4000
+
"node": ">=4"
4001
+
}
4002
+
},
4003
+
"node_modules/reusify": {
4004
+
"version": "1.0.4",
4005
+
"license": "MIT",
4006
+
"engines": {
4007
+
"iojs": ">=1.0.0",
4008
+
"node": ">=0.10.0"
4009
+
}
4010
+
},
4011
+
"node_modules/rollup": {
4012
+
"version": "4.32.0",
4013
+
"license": "MIT",
4014
+
"dependencies": {
4015
+
"@types/estree": "1.0.6"
4016
+
},
4017
+
"bin": {
4018
+
"rollup": "dist/bin/rollup"
4019
+
},
4020
+
"engines": {
4021
+
"node": ">=18.0.0",
4022
+
"npm": ">=8.0.0"
4023
+
},
4024
+
"optionalDependencies": {
4025
+
"@rollup/rollup-android-arm-eabi": "4.32.0",
4026
+
"@rollup/rollup-android-arm64": "4.32.0",
4027
+
"@rollup/rollup-darwin-arm64": "4.32.0",
4028
+
"@rollup/rollup-darwin-x64": "4.32.0",
4029
+
"@rollup/rollup-freebsd-arm64": "4.32.0",
4030
+
"@rollup/rollup-freebsd-x64": "4.32.0",
4031
+
"@rollup/rollup-linux-arm-gnueabihf": "4.32.0",
4032
+
"@rollup/rollup-linux-arm-musleabihf": "4.32.0",
4033
+
"@rollup/rollup-linux-arm64-gnu": "4.32.0",
4034
+
"@rollup/rollup-linux-arm64-musl": "4.32.0",
4035
+
"@rollup/rollup-linux-loongarch64-gnu": "4.32.0",
4036
+
"@rollup/rollup-linux-powerpc64le-gnu": "4.32.0",
4037
+
"@rollup/rollup-linux-riscv64-gnu": "4.32.0",
4038
+
"@rollup/rollup-linux-s390x-gnu": "4.32.0",
4039
+
"@rollup/rollup-linux-x64-gnu": "4.32.0",
4040
+
"@rollup/rollup-linux-x64-musl": "4.32.0",
4041
+
"@rollup/rollup-win32-arm64-msvc": "4.32.0",
4042
+
"@rollup/rollup-win32-ia32-msvc": "4.32.0",
4043
+
"@rollup/rollup-win32-x64-msvc": "4.32.0",
4044
+
"fsevents": "~2.3.2"
4045
+
}
4046
+
},
4047
+
"node_modules/run-parallel": {
4048
+
"version": "1.2.0",
4049
+
"funding": [
4050
+
{
4051
+
"type": "github",
4052
+
"url": "https://github.com/sponsors/feross"
4053
+
},
4054
+
{
4055
+
"type": "patreon",
4056
+
"url": "https://www.patreon.com/feross"
4057
+
},
4058
+
{
4059
+
"type": "consulting",
4060
+
"url": "https://feross.org/support"
4061
+
}
4062
+
],
4063
+
"license": "MIT",
4064
+
"dependencies": {
4065
+
"queue-microtask": "^1.2.2"
4066
+
}
4067
+
},
4068
+
"node_modules/scheduler": {
4069
+
"version": "0.23.2",
4070
+
"license": "MIT",
4071
+
"dependencies": {
4072
+
"loose-envify": "^1.1.0"
4073
+
}
4074
+
},
4075
+
"node_modules/semver": {
4076
+
"version": "6.3.1",
4077
+
"dev": true,
4078
+
"license": "ISC",
4079
+
"bin": {
4080
+
"semver": "bin/semver.js"
4081
+
}
4082
+
},
4083
+
"node_modules/shebang-command": {
4084
+
"version": "2.0.0",
4085
+
"license": "MIT",
4086
+
"dependencies": {
4087
+
"shebang-regex": "^3.0.0"
4088
+
},
4089
+
"engines": {
4090
+
"node": ">=8"
4091
+
}
4092
+
},
4093
+
"node_modules/shebang-regex": {
4094
+
"version": "3.0.0",
4095
+
"license": "MIT",
4096
+
"engines": {
4097
+
"node": ">=8"
4098
+
}
4099
+
},
4100
+
"node_modules/signal-exit": {
4101
+
"version": "4.1.0",
4102
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
4103
+
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
4104
+
"license": "ISC",
4105
+
"engines": {
4106
+
"node": ">=14"
4107
+
},
4108
+
"funding": {
4109
+
"url": "https://github.com/sponsors/isaacs"
4110
+
}
4111
+
},
4112
+
"node_modules/source-map": {
4113
+
"version": "0.5.7",
4114
+
"license": "BSD-3-Clause",
4115
+
"engines": {
4116
+
"node": ">=0.10.0"
4117
+
}
4118
+
},
4119
+
"node_modules/source-map-js": {
4120
+
"version": "1.2.1",
4121
+
"license": "BSD-3-Clause",
4122
+
"engines": {
4123
+
"node": ">=0.10.0"
4124
+
}
4125
+
},
4126
+
"node_modules/string-width": {
4127
+
"version": "5.1.2",
4128
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
4129
+
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
4130
+
"license": "MIT",
4131
+
"dependencies": {
4132
+
"eastasianwidth": "^0.2.0",
4133
+
"emoji-regex": "^9.2.2",
4134
+
"strip-ansi": "^7.0.1"
4135
+
},
4136
+
"engines": {
4137
+
"node": ">=12"
4138
+
},
4139
+
"funding": {
4140
+
"url": "https://github.com/sponsors/sindresorhus"
4141
+
}
4142
+
},
4143
+
"node_modules/string-width-cjs": {
4144
+
"name": "string-width",
4145
+
"version": "4.2.3",
4146
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
4147
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
4148
+
"license": "MIT",
4149
+
"dependencies": {
4150
+
"emoji-regex": "^8.0.0",
4151
+
"is-fullwidth-code-point": "^3.0.0",
4152
+
"strip-ansi": "^6.0.1"
4153
+
},
4154
+
"engines": {
4155
+
"node": ">=8"
4156
+
}
4157
+
},
4158
+
"node_modules/string-width-cjs/node_modules/ansi-regex": {
4159
+
"version": "5.0.1",
4160
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
4161
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
4162
+
"license": "MIT",
4163
+
"engines": {
4164
+
"node": ">=8"
4165
+
}
4166
+
},
4167
+
"node_modules/string-width-cjs/node_modules/emoji-regex": {
4168
+
"version": "8.0.0",
4169
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
4170
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
4171
+
"license": "MIT"
4172
+
},
4173
+
"node_modules/string-width-cjs/node_modules/strip-ansi": {
4174
+
"version": "6.0.1",
4175
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
4176
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
4177
+
"license": "MIT",
4178
+
"dependencies": {
4179
+
"ansi-regex": "^5.0.1"
4180
+
},
4181
+
"engines": {
4182
+
"node": ">=8"
4183
+
}
4184
+
},
4185
+
"node_modules/strip-ansi": {
4186
+
"version": "7.1.0",
4187
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
4188
+
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
4189
+
"license": "MIT",
4190
+
"dependencies": {
4191
+
"ansi-regex": "^6.0.1"
4192
+
},
4193
+
"engines": {
4194
+
"node": ">=12"
4195
+
},
4196
+
"funding": {
4197
+
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
4198
+
}
4199
+
},
4200
+
"node_modules/strip-ansi-cjs": {
4201
+
"name": "strip-ansi",
4202
+
"version": "6.0.1",
4203
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
4204
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
4205
+
"license": "MIT",
4206
+
"dependencies": {
4207
+
"ansi-regex": "^5.0.1"
4208
+
},
4209
+
"engines": {
4210
+
"node": ">=8"
4211
+
}
4212
+
},
4213
+
"node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
4214
+
"version": "5.0.1",
4215
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
4216
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
4217
+
"license": "MIT",
4218
+
"engines": {
4219
+
"node": ">=8"
4220
+
}
4221
+
},
4222
+
"node_modules/strip-json-comments": {
4223
+
"version": "3.1.1",
4224
+
"dev": true,
4225
+
"license": "MIT",
4226
+
"engines": {
4227
+
"node": ">=8"
4228
+
},
4229
+
"funding": {
4230
+
"url": "https://github.com/sponsors/sindresorhus"
4231
+
}
4232
+
},
4233
+
"node_modules/stylis": {
4234
+
"version": "4.2.0",
4235
+
"license": "MIT"
4236
+
},
4237
+
"node_modules/sucrase": {
4238
+
"version": "3.35.0",
4239
+
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
4240
+
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
4241
+
"license": "MIT",
4242
+
"dependencies": {
4243
+
"@jridgewell/gen-mapping": "^0.3.2",
4244
+
"commander": "^4.0.0",
4245
+
"glob": "^10.3.10",
4246
+
"lines-and-columns": "^1.1.6",
4247
+
"mz": "^2.7.0",
4248
+
"pirates": "^4.0.1",
4249
+
"ts-interface-checker": "^0.1.9"
4250
+
},
4251
+
"bin": {
4252
+
"sucrase": "bin/sucrase",
4253
+
"sucrase-node": "bin/sucrase-node"
4254
+
},
4255
+
"engines": {
4256
+
"node": ">=16 || 14 >=14.17"
4257
+
}
4258
+
},
4259
+
"node_modules/supports-color": {
4260
+
"version": "7.2.0",
4261
+
"dev": true,
4262
+
"license": "MIT",
4263
+
"dependencies": {
4264
+
"has-flag": "^4.0.0"
4265
+
},
4266
+
"engines": {
4267
+
"node": ">=8"
4268
+
}
4269
+
},
4270
+
"node_modules/supports-preserve-symlinks-flag": {
4271
+
"version": "1.0.0",
4272
+
"license": "MIT",
4273
+
"engines": {
4274
+
"node": ">= 0.4"
4275
+
},
4276
+
"funding": {
4277
+
"url": "https://github.com/sponsors/ljharb"
4278
+
}
4279
+
},
4280
+
"node_modules/tabbable": {
4281
+
"version": "6.2.0",
4282
+
"license": "MIT"
4283
+
},
4284
+
"node_modules/tailwind-merge": {
4285
+
"version": "2.6.0",
4286
+
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz",
4287
+
"integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==",
4288
+
"license": "MIT",
4289
+
"funding": {
4290
+
"type": "github",
4291
+
"url": "https://github.com/sponsors/dcastil"
4292
+
}
4293
+
},
4294
+
"node_modules/tailwindcss": {
4295
+
"version": "3.4.17",
4296
+
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz",
4297
+
"integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==",
4298
+
"license": "MIT",
4299
+
"dependencies": {
4300
+
"@alloc/quick-lru": "^5.2.0",
4301
+
"arg": "^5.0.2",
4302
+
"chokidar": "^3.6.0",
4303
+
"didyoumean": "^1.2.2",
4304
+
"dlv": "^1.1.3",
4305
+
"fast-glob": "^3.3.2",
4306
+
"glob-parent": "^6.0.2",
4307
+
"is-glob": "^4.0.3",
4308
+
"jiti": "^1.21.6",
4309
+
"lilconfig": "^3.1.3",
4310
+
"micromatch": "^4.0.8",
4311
+
"normalize-path": "^3.0.0",
4312
+
"object-hash": "^3.0.0",
4313
+
"picocolors": "^1.1.1",
4314
+
"postcss": "^8.4.47",
4315
+
"postcss-import": "^15.1.0",
4316
+
"postcss-js": "^4.0.1",
4317
+
"postcss-load-config": "^4.0.2",
4318
+
"postcss-nested": "^6.2.0",
4319
+
"postcss-selector-parser": "^6.1.2",
4320
+
"resolve": "^1.22.8",
4321
+
"sucrase": "^3.35.0"
4322
+
},
4323
+
"bin": {
4324
+
"tailwind": "lib/cli.js",
4325
+
"tailwindcss": "lib/cli.js"
4326
+
},
4327
+
"engines": {
4328
+
"node": ">=14.0.0"
4329
+
}
4330
+
},
4331
+
"node_modules/tailwindcss-animate": {
4332
+
"version": "1.0.7",
4333
+
"resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
4334
+
"integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
4335
+
"license": "MIT",
4336
+
"peerDependencies": {
4337
+
"tailwindcss": ">=3.0.0 || insiders"
4338
+
}
4339
+
},
4340
+
"node_modules/tailwindcss/node_modules/jiti": {
4341
+
"version": "1.21.7",
4342
+
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
4343
+
"integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
4344
+
"license": "MIT",
4345
+
"bin": {
4346
+
"jiti": "bin/jiti.js"
4347
+
}
4348
+
},
4349
+
"node_modules/tapable": {
4350
+
"version": "2.2.1",
4351
+
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
4352
+
"integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
4353
+
"license": "MIT",
4354
+
"engines": {
4355
+
"node": ">=6"
4356
+
}
4357
+
},
4358
+
"node_modules/thenify": {
4359
+
"version": "3.3.1",
4360
+
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
4361
+
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
4362
+
"license": "MIT",
4363
+
"dependencies": {
4364
+
"any-promise": "^1.0.0"
4365
+
}
4366
+
},
4367
+
"node_modules/thenify-all": {
4368
+
"version": "1.6.0",
4369
+
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
4370
+
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
4371
+
"license": "MIT",
4372
+
"dependencies": {
4373
+
"thenify": ">= 3.1.0 < 4"
4374
+
},
4375
+
"engines": {
4376
+
"node": ">=0.8"
4377
+
}
4378
+
},
4379
+
"node_modules/to-regex-range": {
4380
+
"version": "5.0.1",
4381
+
"license": "MIT",
4382
+
"dependencies": {
4383
+
"is-number": "^7.0.0"
4384
+
},
4385
+
"engines": {
4386
+
"node": ">=8.0"
4387
+
}
4388
+
},
4389
+
"node_modules/ts-api-utils": {
4390
+
"version": "2.0.0",
4391
+
"dev": true,
4392
+
"license": "MIT",
4393
+
"engines": {
4394
+
"node": ">=18.12"
4395
+
},
4396
+
"peerDependencies": {
4397
+
"typescript": ">=4.8.4"
4398
+
}
4399
+
},
4400
+
"node_modules/ts-interface-checker": {
4401
+
"version": "0.1.13",
4402
+
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
4403
+
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
4404
+
"license": "Apache-2.0"
4405
+
},
4406
+
"node_modules/tslib": {
4407
+
"version": "2.8.1",
4408
+
"license": "0BSD"
4409
+
},
4410
+
"node_modules/type-check": {
4411
+
"version": "0.4.0",
4412
+
"dev": true,
4413
+
"license": "MIT",
4414
+
"dependencies": {
4415
+
"prelude-ls": "^1.2.1"
4416
+
},
4417
+
"engines": {
4418
+
"node": ">= 0.8.0"
4419
+
}
4420
+
},
4421
+
"node_modules/type-fest": {
4422
+
"version": "4.33.0",
4423
+
"license": "(MIT OR CC0-1.0)",
4424
+
"engines": {
4425
+
"node": ">=16"
4426
+
},
4427
+
"funding": {
4428
+
"url": "https://github.com/sponsors/sindresorhus"
4429
+
}
4430
+
},
4431
+
"node_modules/typescript": {
4432
+
"version": "5.6.3",
4433
+
"dev": true,
4434
+
"license": "Apache-2.0",
4435
+
"bin": {
4436
+
"tsc": "bin/tsc",
4437
+
"tsserver": "bin/tsserver"
4438
+
},
4439
+
"engines": {
4440
+
"node": ">=14.17"
4441
+
}
4442
+
},
4443
+
"node_modules/typescript-eslint": {
4444
+
"version": "8.21.0",
4445
+
"dev": true,
4446
+
"license": "MIT",
4447
+
"dependencies": {
4448
+
"@typescript-eslint/eslint-plugin": "8.21.0",
4449
+
"@typescript-eslint/parser": "8.21.0",
4450
+
"@typescript-eslint/utils": "8.21.0"
4451
+
},
4452
+
"engines": {
4453
+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
4454
+
},
4455
+
"funding": {
4456
+
"type": "opencollective",
4457
+
"url": "https://opencollective.com/typescript-eslint"
4458
+
},
4459
+
"peerDependencies": {
4460
+
"eslint": "^8.57.0 || ^9.0.0",
4461
+
"typescript": ">=4.8.4 <5.8.0"
4462
+
}
4463
+
},
4464
+
"node_modules/undici-types": {
4465
+
"version": "6.20.0",
4466
+
"devOptional": true,
4467
+
"license": "MIT"
4468
+
},
4469
+
"node_modules/update-browserslist-db": {
4470
+
"version": "1.1.2",
4471
+
"dev": true,
4472
+
"funding": [
4473
+
{
4474
+
"type": "opencollective",
4475
+
"url": "https://opencollective.com/browserslist"
4476
+
},
4477
+
{
4478
+
"type": "tidelift",
4479
+
"url": "https://tidelift.com/funding/github/npm/browserslist"
4480
+
},
4481
+
{
4482
+
"type": "github",
4483
+
"url": "https://github.com/sponsors/ai"
4484
+
}
4485
+
],
4486
+
"license": "MIT",
4487
+
"dependencies": {
4488
+
"escalade": "^3.2.0",
4489
+
"picocolors": "^1.1.1"
4490
+
},
4491
+
"bin": {
4492
+
"update-browserslist-db": "cli.js"
4493
+
},
4494
+
"peerDependencies": {
4495
+
"browserslist": ">= 4.21.0"
4496
+
}
4497
+
},
4498
+
"node_modules/uri-js": {
4499
+
"version": "4.4.1",
4500
+
"dev": true,
4501
+
"license": "BSD-2-Clause",
4502
+
"dependencies": {
4503
+
"punycode": "^2.1.0"
4504
+
}
4505
+
},
4506
+
"node_modules/use-callback-ref": {
4507
+
"version": "1.3.3",
4508
+
"license": "MIT",
4509
+
"dependencies": {
4510
+
"tslib": "^2.0.0"
4511
+
},
4512
+
"engines": {
4513
+
"node": ">=10"
4514
+
},
4515
+
"peerDependencies": {
4516
+
"@types/react": "*",
4517
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
4518
+
},
4519
+
"peerDependenciesMeta": {
4520
+
"@types/react": {
4521
+
"optional": true
4522
+
}
4523
+
}
4524
+
},
4525
+
"node_modules/use-composed-ref": {
4526
+
"version": "1.4.0",
4527
+
"license": "MIT",
4528
+
"peerDependencies": {
4529
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
4530
+
},
4531
+
"peerDependenciesMeta": {
4532
+
"@types/react": {
4533
+
"optional": true
4534
+
}
4535
+
}
4536
+
},
4537
+
"node_modules/use-isomorphic-layout-effect": {
4538
+
"version": "1.2.0",
4539
+
"license": "MIT",
4540
+
"peerDependencies": {
4541
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
4542
+
},
4543
+
"peerDependenciesMeta": {
4544
+
"@types/react": {
4545
+
"optional": true
4546
+
}
4547
+
}
4548
+
},
4549
+
"node_modules/use-latest": {
4550
+
"version": "1.3.0",
4551
+
"license": "MIT",
4552
+
"dependencies": {
4553
+
"use-isomorphic-layout-effect": "^1.1.1"
4554
+
},
4555
+
"peerDependencies": {
4556
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
4557
+
},
4558
+
"peerDependenciesMeta": {
4559
+
"@types/react": {
4560
+
"optional": true
4561
+
}
4562
+
}
4563
+
},
4564
+
"node_modules/use-sidecar": {
4565
+
"version": "1.1.3",
4566
+
"license": "MIT",
4567
+
"dependencies": {
4568
+
"detect-node-es": "^1.1.0",
4569
+
"tslib": "^2.0.0"
4570
+
},
4571
+
"engines": {
4572
+
"node": ">=10"
4573
+
},
4574
+
"peerDependencies": {
4575
+
"@types/react": "*",
4576
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
4577
+
},
4578
+
"peerDependenciesMeta": {
4579
+
"@types/react": {
4580
+
"optional": true
4581
+
}
4582
+
}
4583
+
},
4584
+
"node_modules/util-deprecate": {
4585
+
"version": "1.0.2",
4586
+
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
4587
+
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
4588
+
"license": "MIT"
4589
+
},
4590
+
"node_modules/vite": {
4591
+
"version": "6.0.11",
4592
+
"license": "MIT",
4593
+
"dependencies": {
4594
+
"esbuild": "^0.24.2",
4595
+
"postcss": "^8.4.49",
4596
+
"rollup": "^4.23.0"
4597
+
},
4598
+
"bin": {
4599
+
"vite": "bin/vite.js"
4600
+
},
4601
+
"engines": {
4602
+
"node": "^18.0.0 || ^20.0.0 || >=22.0.0"
4603
+
},
4604
+
"funding": {
4605
+
"url": "https://github.com/vitejs/vite?sponsor=1"
4606
+
},
4607
+
"optionalDependencies": {
4608
+
"fsevents": "~2.3.3"
4609
+
},
4610
+
"peerDependencies": {
4611
+
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
4612
+
"jiti": ">=1.21.0",
4613
+
"less": "*",
4614
+
"lightningcss": "^1.21.0",
4615
+
"sass": "*",
4616
+
"sass-embedded": "*",
4617
+
"stylus": "*",
4618
+
"sugarss": "*",
4619
+
"terser": "^5.16.0",
4620
+
"tsx": "^4.8.1",
4621
+
"yaml": "^2.4.2"
4622
+
},
4623
+
"peerDependenciesMeta": {
4624
+
"@types/node": {
4625
+
"optional": true
4626
+
},
4627
+
"jiti": {
4628
+
"optional": true
4629
+
},
4630
+
"less": {
4631
+
"optional": true
4632
+
},
4633
+
"lightningcss": {
4634
+
"optional": true
4635
+
},
4636
+
"sass": {
4637
+
"optional": true
4638
+
},
4639
+
"sass-embedded": {
4640
+
"optional": true
4641
+
},
4642
+
"stylus": {
4643
+
"optional": true
4644
+
},
4645
+
"sugarss": {
4646
+
"optional": true
4647
+
},
4648
+
"terser": {
4649
+
"optional": true
4650
+
},
4651
+
"tsx": {
4652
+
"optional": true
4653
+
},
4654
+
"yaml": {
4655
+
"optional": true
4656
+
}
4657
+
}
4658
+
},
4659
+
"node_modules/which": {
4660
+
"version": "2.0.2",
4661
+
"license": "ISC",
4662
+
"dependencies": {
4663
+
"isexe": "^2.0.0"
4664
+
},
4665
+
"bin": {
4666
+
"node-which": "bin/node-which"
4667
+
},
4668
+
"engines": {
4669
+
"node": ">= 8"
4670
+
}
4671
+
},
4672
+
"node_modules/word-wrap": {
4673
+
"version": "1.2.5",
4674
+
"dev": true,
4675
+
"license": "MIT",
4676
+
"engines": {
4677
+
"node": ">=0.10.0"
4678
+
}
4679
+
},
4680
+
"node_modules/wrap-ansi": {
4681
+
"version": "8.1.0",
4682
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
4683
+
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
4684
+
"license": "MIT",
4685
+
"dependencies": {
4686
+
"ansi-styles": "^6.1.0",
4687
+
"string-width": "^5.0.1",
4688
+
"strip-ansi": "^7.0.1"
4689
+
},
4690
+
"engines": {
4691
+
"node": ">=12"
4692
+
},
4693
+
"funding": {
4694
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
4695
+
}
4696
+
},
4697
+
"node_modules/wrap-ansi-cjs": {
4698
+
"name": "wrap-ansi",
4699
+
"version": "7.0.0",
4700
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
4701
+
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
4702
+
"license": "MIT",
4703
+
"dependencies": {
4704
+
"ansi-styles": "^4.0.0",
4705
+
"string-width": "^4.1.0",
4706
+
"strip-ansi": "^6.0.0"
4707
+
},
4708
+
"engines": {
4709
+
"node": ">=10"
4710
+
},
4711
+
"funding": {
4712
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
4713
+
}
4714
+
},
4715
+
"node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
4716
+
"version": "5.0.1",
4717
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
4718
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
4719
+
"license": "MIT",
4720
+
"engines": {
4721
+
"node": ">=8"
4722
+
}
4723
+
},
4724
+
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
4725
+
"version": "8.0.0",
4726
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
4727
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
4728
+
"license": "MIT"
4729
+
},
4730
+
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
4731
+
"version": "4.2.3",
4732
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
4733
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
4734
+
"license": "MIT",
4735
+
"dependencies": {
4736
+
"emoji-regex": "^8.0.0",
4737
+
"is-fullwidth-code-point": "^3.0.0",
4738
+
"strip-ansi": "^6.0.1"
4739
+
},
4740
+
"engines": {
4741
+
"node": ">=8"
4742
+
}
4743
+
},
4744
+
"node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
4745
+
"version": "6.0.1",
4746
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
4747
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
4748
+
"license": "MIT",
4749
+
"dependencies": {
4750
+
"ansi-regex": "^5.0.1"
4751
+
},
4752
+
"engines": {
4753
+
"node": ">=8"
4754
+
}
4755
+
},
4756
+
"node_modules/wrap-ansi/node_modules/ansi-styles": {
4757
+
"version": "6.2.1",
4758
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
4759
+
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
4760
+
"license": "MIT",
4761
+
"engines": {
4762
+
"node": ">=12"
4763
+
},
4764
+
"funding": {
4765
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
4766
+
}
4767
+
},
4768
+
"node_modules/yallist": {
4769
+
"version": "3.1.1",
4770
+
"dev": true,
4771
+
"license": "ISC"
4772
+
},
4773
+
"node_modules/yaml": {
4774
+
"version": "2.7.0",
4775
+
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz",
4776
+
"integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==",
4777
+
"license": "ISC",
4778
+
"bin": {
4779
+
"yaml": "bin.mjs"
4780
+
},
4781
+
"engines": {
4782
+
"node": ">= 14"
4783
+
}
4784
+
},
4785
+
"node_modules/yocto-queue": {
4786
+
"version": "0.1.0",
4787
+
"dev": true,
4788
+
"license": "MIT",
4789
+
"engines": {
4790
+
"node": ">=10"
4791
+
},
4792
+
"funding": {
4793
+
"url": "https://github.com/sponsors/sindresorhus"
4794
+
}
4795
+
},
4796
+
"node_modules/zod": {
4797
+
"version": "3.24.1",
4798
+
"resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz",
4799
+
"integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==",
4800
+
"license": "MIT",
4801
+
"funding": {
4802
+
"url": "https://github.com/sponsors/colinhacks"
4803
+
}
4804
+
}
4805
+
}
4806
+
}
+18
-1
frontend/package.json
+18
-1
frontend/package.json
···
11
11
},
12
12
"dependencies": {
13
13
"@emotion/react": "^11.14.0",
14
+
"@hookform/resolvers": "^3.10.0",
14
15
"@mantine/core": "^7.16.1",
15
16
"@mantine/form": "^7.16.1",
16
17
"@mantine/hooks": "^7.16.1",
18
+
"@radix-ui/react-dialog": "^1.1.5",
19
+
"@radix-ui/react-label": "^2.1.1",
20
+
"@radix-ui/react-slot": "^1.1.1",
21
+
"@radix-ui/react-tabs": "^1.1.2",
22
+
"@radix-ui/react-toast": "^1.2.5",
23
+
"@tailwindcss/vite": "^4.0.0",
17
24
"axios": "^1.7.9",
25
+
"class-variance-authority": "^0.7.1",
26
+
"clsx": "^2.1.1",
27
+
"lucide-react": "^0.474.0",
18
28
"react": "^18.3.1",
19
-
"react-dom": "^18.3.1"
29
+
"react-dom": "^18.3.1",
30
+
"react-hook-form": "^7.54.2",
31
+
"tailwind-merge": "^2.6.0",
32
+
"tailwindcss-animate": "^1.0.7",
33
+
"zod": "^3.24.1"
20
34
},
21
35
"devDependencies": {
22
36
"@eslint/js": "^9.17.0",
···
24
38
"@types/react": "^18.3.18",
25
39
"@types/react-dom": "^18.3.5",
26
40
"@vitejs/plugin-react": "^4.3.4",
41
+
"autoprefixer": "^10.4.20",
27
42
"eslint": "^9.17.0",
28
43
"eslint-plugin-react-hooks": "^5.0.0",
29
44
"eslint-plugin-react-refresh": "^0.4.16",
30
45
"globals": "^15.14.0",
46
+
"postcss": "^8.5.1",
47
+
"tailwindcss": "3.4.17",
31
48
"typescript": "~5.6.2",
32
49
"typescript-eslint": "^8.18.2",
33
50
"vite": "^6.0.5"
+6
frontend/postcss.config.js
+6
frontend/postcss.config.js
-42
frontend/src/App.css
-42
frontend/src/App.css
···
1
-
#root {
2
-
max-width: 1280px;
3
-
margin: 0 auto;
4
-
padding: 2rem;
5
-
text-align: center;
6
-
}
7
-
8
-
.logo {
9
-
height: 6em;
10
-
padding: 1.5em;
11
-
will-change: filter;
12
-
transition: filter 300ms;
13
-
}
14
-
.logo:hover {
15
-
filter: drop-shadow(0 0 2em #646cffaa);
16
-
}
17
-
.logo.react:hover {
18
-
filter: drop-shadow(0 0 2em #61dafbaa);
19
-
}
20
-
21
-
@keyframes logo-spin {
22
-
from {
23
-
transform: rotate(0deg);
24
-
}
25
-
to {
26
-
transform: rotate(360deg);
27
-
}
28
-
}
29
-
30
-
@media (prefers-reduced-motion: no-preference) {
31
-
a:nth-of-type(2) .logo {
32
-
animation: logo-spin infinite 20s linear;
33
-
}
34
-
}
35
-
36
-
.card {
37
-
padding: 2em;
38
-
}
39
-
40
-
.read-the-docs {
41
-
color: #888;
42
-
}
+50
-20
frontend/src/App.tsx
+50
-20
frontend/src/App.tsx
···
1
-
import { MantineProvider, Container, Title, Stack } from '@mantine/core';
2
-
import { LinkForm } from './components/LinkForm';
3
-
import { LinkList } from './components/LinkList';
4
-
import { Link } from './types/api';
1
+
import { Container } from './components/ui/container'
2
+
import { Button } from './components/ui/button'
3
+
import { LinkForm } from './components/LinkForm'
4
+
import { LinkList } from './components/LinkList'
5
+
import { AuthForms } from './components/AuthForms'
6
+
import { AuthProvider, useAuth } from './context/AuthContext'
7
+
import { useState } from 'react'
8
+
import { Toaster } from './components/ui/toaster'
5
9
6
-
function App() {
7
-
const handleLinkCreated = (link: Link) => {
8
-
// You could update the list here or show a success message
9
-
window.location.reload();
10
-
};
10
+
function AppContent() {
11
+
const { user, logout } = useAuth()
12
+
const [refreshCounter, setRefreshCounter] = useState(0)
13
+
14
+
const handleLinkCreated = () => {
15
+
// Increment refresh counter to trigger list refresh
16
+
setRefreshCounter(prev => prev + 1)
17
+
}
11
18
12
19
return (
13
-
<MantineProvider withGlobalStyles withNormalizeCSS>
14
-
<Container size="lg" py="xl">
15
-
<Stack spacing="xl">
16
-
<Title order={1}>URL Shortener</Title>
17
-
<LinkForm onSuccess={handleLinkCreated} />
18
-
<LinkList />
19
-
</Stack>
20
-
</Container>
21
-
</MantineProvider>
22
-
);
20
+
<div className="container max-w-6xl py-8">
21
+
<div className="space-y-8">
22
+
<div className="flex items-center justify-between">
23
+
<h1 className="text-3xl font-bold">URL Shortener</h1>
24
+
{user && (
25
+
<div className="flex items-center gap-4">
26
+
<p className="text-sm text-muted-foreground">Welcome, {user.email}</p>
27
+
<Button variant="outline" onClick={logout}>
28
+
Logout
29
+
</Button>
30
+
</div>
31
+
)}
32
+
</div>
33
+
34
+
{user ? (
35
+
<>
36
+
<LinkForm onSuccess={handleLinkCreated} />
37
+
<LinkList refresh={refreshCounter} />
38
+
</>
39
+
) : (
40
+
<AuthForms />
41
+
)}
42
+
</div>
43
+
</div>
44
+
)
23
45
}
24
46
25
-
export default App;
47
+
function App() {
48
+
return (
49
+
<AuthProvider>
50
+
<AppContent />
51
+
<Toaster />
52
+
</AuthProvider>
53
+
)
54
+
}
26
55
56
+
export default App
+32
-1
frontend/src/api/client.ts
+32
-1
frontend/src/api/client.ts
···
1
1
import axios from 'axios';
2
-
import { CreateLinkRequest, Link } from '../types/api';
2
+
import { CreateLinkRequest, Link, AuthResponse } from '../types/api';
3
3
4
+
// Create axios instance with default config
4
5
const api = axios.create({
5
6
baseURL: '/api',
6
7
});
7
8
9
+
// Add a request interceptor to add the auth token to all requests
10
+
api.interceptors.request.use((config) => {
11
+
const token = localStorage.getItem('token');
12
+
if (token) {
13
+
config.headers.Authorization = `Bearer ${token}`;
14
+
}
15
+
return config;
16
+
});
17
+
18
+
// Auth endpoints
19
+
export const login = async (email: string, password: string) => {
20
+
const response = await api.post<AuthResponse>('/auth/login', {
21
+
email,
22
+
password,
23
+
});
24
+
return response.data;
25
+
};
26
+
27
+
export const register = async (email: string, password: string) => {
28
+
const response = await api.post<AuthResponse>('/auth/register', {
29
+
email,
30
+
password,
31
+
});
32
+
return response.data;
33
+
};
34
+
35
+
// Protected endpoints
8
36
export const createShortLink = async (data: CreateLinkRequest) => {
9
37
const response = await api.post<Link>('/shorten', data);
10
38
return response.data;
···
15
43
return response.data;
16
44
};
17
45
46
+
export const deleteLink = async (id: number) => {
47
+
await api.delete(`/links/${id}`);
48
+
};
+105
frontend/src/components/AuthForms.tsx
+105
frontend/src/components/AuthForms.tsx
···
1
+
import { useState } from 'react'
2
+
import { useForm } from 'react-hook-form'
3
+
import { z } from 'zod'
4
+
import { zodResolver } from '@hookform/resolvers/zod'
5
+
import { useAuth } from '../context/AuthContext'
6
+
import { Button } from '@/components/ui/button'
7
+
import { Input } from '@/components/ui/input'
8
+
import { Card } from '@/components/ui/card'
9
+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
10
+
import {
11
+
Form,
12
+
FormControl,
13
+
FormField,
14
+
FormItem,
15
+
FormLabel,
16
+
FormMessage,
17
+
} from '@/components/ui/form'
18
+
import { useToast } from '@/hooks/use-toast'
19
+
20
+
const formSchema = z.object({
21
+
email: z.string().email('Invalid email address'),
22
+
password: z.string().min(6, 'Password must be at least 6 characters long'),
23
+
})
24
+
25
+
type FormValues = z.infer<typeof formSchema>
26
+
27
+
export function AuthForms() {
28
+
const [activeTab, setActiveTab] = useState<'login' | 'register'>('login')
29
+
const { login, register } = useAuth()
30
+
const { toast } = useToast()
31
+
32
+
const form = useForm<FormValues>({
33
+
resolver: zodResolver(formSchema),
34
+
defaultValues: {
35
+
email: '',
36
+
password: '',
37
+
},
38
+
})
39
+
40
+
const onSubmit = async (values: FormValues) => {
41
+
try {
42
+
if (activeTab === 'login') {
43
+
await login(values.email, values.password)
44
+
} else {
45
+
await register(values.email, values.password)
46
+
}
47
+
form.reset()
48
+
} catch (err: any) {
49
+
toast({
50
+
variant: 'destructive',
51
+
title: 'Error',
52
+
description: err.response?.data?.error || 'An error occurred',
53
+
})
54
+
}
55
+
}
56
+
57
+
return (
58
+
<Card className="w-full max-w-md mx-auto p-6">
59
+
<Tabs value={activeTab} onValueChange={(value: 'login' | 'register') => setActiveTab(value)}>
60
+
<TabsList className="grid w-full grid-cols-2">
61
+
<TabsTrigger value="login">Login</TabsTrigger>
62
+
<TabsTrigger value="register">Register</TabsTrigger>
63
+
</TabsList>
64
+
65
+
<TabsContent value={activeTab}>
66
+
<Form {...form}>
67
+
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-4">
68
+
<FormField
69
+
control={form.control}
70
+
name="email"
71
+
render={({ field }) => (
72
+
<FormItem>
73
+
<FormLabel>Email</FormLabel>
74
+
<FormControl>
75
+
<Input type="email" {...field} />
76
+
</FormControl>
77
+
<FormMessage />
78
+
</FormItem>
79
+
)}
80
+
/>
81
+
82
+
<FormField
83
+
control={form.control}
84
+
name="password"
85
+
render={({ field }) => (
86
+
<FormItem>
87
+
<FormLabel>Password</FormLabel>
88
+
<FormControl>
89
+
<Input type="password" {...field} />
90
+
</FormControl>
91
+
<FormMessage />
92
+
</FormItem>
93
+
)}
94
+
/>
95
+
96
+
<Button type="submit" className="w-full">
97
+
{activeTab === 'login' ? 'Sign in' : 'Create account'}
98
+
</Button>
99
+
</form>
100
+
</Form>
101
+
</TabsContent>
102
+
</Tabs>
103
+
</Card>
104
+
)
105
+
}
+90
-64
frontend/src/components/LinkForm.tsx
+90
-64
frontend/src/components/LinkForm.tsx
···
1
-
import { useState } from 'react';
2
-
import { TextInput, Button, Group, Box, Text } from '@mantine/core';
3
-
import { useForm } from '@mantine/form';
4
-
import { CreateLinkRequest, Link } from '../types/api';
5
-
import { createShortLink } from '../api/client';
1
+
import { useState } from 'react'
2
+
import { useForm } from 'react-hook-form'
3
+
import { zodResolver } from '@hookform/resolvers/zod'
4
+
import * as z from 'zod'
5
+
import { CreateLinkRequest, Link } from '../types/api'
6
+
import { createShortLink } from '../api/client'
7
+
import { Button } from "@/components/ui/button"
8
+
import {
9
+
Form,
10
+
FormControl,
11
+
FormField,
12
+
FormItem,
13
+
FormLabel,
14
+
FormMessage,
15
+
} from "@/components/ui/form"
16
+
import { Input } from "@/components/ui/input"
17
+
import { useToast } from "@/hooks/use-toast"
18
+
19
+
const formSchema = z.object({
20
+
url: z.string()
21
+
.min(1, 'URL is required')
22
+
.url('Must be a valid URL')
23
+
.refine(val => val.startsWith('http://') || val.startsWith('https://'), {
24
+
message: 'URL must start with http:// or https://'
25
+
}),
26
+
custom_code: z.string()
27
+
.regex(/^[a-zA-Z0-9_-]{0,32}$/, 'Custom code must contain only letters, numbers, underscores, and hyphens')
28
+
.optional()
29
+
})
6
30
7
31
interface LinkFormProps {
8
-
onSuccess: (link: Link) => void;
32
+
onSuccess: (link: Link) => void
9
33
}
10
34
11
35
export function LinkForm({ onSuccess }: LinkFormProps) {
12
-
const [error, setError] = useState<string | null>(null);
13
-
const [loading, setLoading] = useState(false);
36
+
const [loading, setLoading] = useState(false)
37
+
const { toast } = useToast()
14
38
15
-
const form = useForm<CreateLinkRequest>({
16
-
initialValues: {
39
+
const form = useForm<z.infer<typeof formSchema>>({
40
+
resolver: zodResolver(formSchema),
41
+
defaultValues: {
17
42
url: '',
18
43
custom_code: '',
19
44
},
20
-
validate: {
21
-
url: (value) => {
22
-
if (!value) return 'URL is required';
23
-
if (!value.startsWith('http://') && !value.startsWith('https://')) {
24
-
return 'URL must start with http:// or https://';
25
-
}
26
-
return null;
27
-
},
28
-
custom_code: (value) => {
29
-
if (value && !/^[a-zA-Z0-9_-]{1,32}$/.test(value)) {
30
-
return 'Custom code must be 1-32 characters and contain only letters, numbers, underscores, and hyphens';
31
-
}
32
-
return null;
33
-
},
34
-
},
35
-
});
45
+
})
36
46
37
-
const handleSubmit = async (values: CreateLinkRequest) => {
47
+
const onSubmit = async (values: z.infer<typeof formSchema>) => {
38
48
try {
39
-
setLoading(true);
40
-
setError(null);
41
-
const link = await createShortLink(values);
42
-
form.reset();
43
-
onSuccess(link);
44
-
} catch (err) {
45
-
setError(err.response?.data?.error || 'An error occurred');
49
+
setLoading(true)
50
+
const link = await createShortLink(values as CreateLinkRequest)
51
+
form.reset()
52
+
onSuccess(link)
53
+
toast({
54
+
description: "Short link created successfully",
55
+
})
56
+
} catch (err: any) {
57
+
toast({
58
+
variant: "destructive",
59
+
title: "Error",
60
+
description: err.response?.data?.error || 'An error occurred',
61
+
})
46
62
} finally {
47
-
setLoading(false);
63
+
setLoading(false)
48
64
}
49
-
};
65
+
}
50
66
51
67
return (
52
-
<Box mx="auto" sx={{ maxWidth: 500 }}>
53
-
<form onSubmit={form.onSubmit(handleSubmit)}>
54
-
<TextInput
55
-
required
56
-
label="URL"
57
-
placeholder="https://example.com"
58
-
{...form.getInputProps('url')}
59
-
/>
68
+
<div className="max-w-[500px] mx-auto">
69
+
<Form {...form}>
70
+
<form onSubmit={form.handleSubmit(onSubmit)} className="space-y-6">
71
+
<FormField
72
+
control={form.control}
73
+
name="url"
74
+
render={({ field }) => (
75
+
<FormItem>
76
+
<FormLabel>URL</FormLabel>
77
+
<FormControl>
78
+
<Input placeholder="https://example.com" {...field} />
79
+
</FormControl>
80
+
<FormMessage />
81
+
</FormItem>
82
+
)}
83
+
/>
60
84
61
-
<TextInput
62
-
label="Custom Code (optional)"
63
-
placeholder="example"
64
-
mt="md"
65
-
{...form.getInputProps('custom_code')}
66
-
/>
67
-
68
-
{error && (
69
-
<Text color="red" size="sm" mt="sm">
70
-
{error}
71
-
</Text>
72
-
)}
85
+
<FormField
86
+
control={form.control}
87
+
name="custom_code"
88
+
render={({ field }) => (
89
+
<FormItem>
90
+
<FormLabel>Custom Code (optional)</FormLabel>
91
+
<FormControl>
92
+
<Input placeholder="example" {...field} />
93
+
</FormControl>
94
+
<FormMessage />
95
+
</FormItem>
96
+
)}
97
+
/>
73
98
74
-
<Group position="right" mt="md">
75
-
<Button type="submit" loading={loading}>
76
-
Create Short Link
77
-
</Button>
78
-
</Group>
79
-
</form>
80
-
</Box>
81
-
);
99
+
<div className="flex justify-end">
100
+
<Button type="submit" disabled={loading}>
101
+
{loading ? "Creating..." : "Create Short Link"}
102
+
</Button>
103
+
</div>
104
+
</form>
105
+
</Form>
106
+
</div>
107
+
)
82
108
}
83
109
+129
-53
frontend/src/components/LinkList.tsx
+129
-53
frontend/src/components/LinkList.tsx
···
1
-
import { useEffect, useState } from 'react';
2
-
import { Table, Text, Box, CopyButton, Button } from '@mantine/core';
3
-
import { Link } from '../types/api';
4
-
import { getAllLinks } from '../api/client';
1
+
import { useEffect, useState } from 'react'
2
+
import { Link } from '../types/api'
3
+
import { getAllLinks, deleteLink } from '../api/client'
4
+
import {
5
+
Table,
6
+
TableBody,
7
+
TableCell,
8
+
TableHead,
9
+
TableHeader,
10
+
TableRow,
11
+
} from "@/components/ui/table"
12
+
import {
13
+
Dialog,
14
+
DialogContent,
15
+
DialogHeader,
16
+
DialogTitle,
17
+
DialogDescription,
18
+
DialogFooter,
19
+
} from "@/components/ui/dialog"
20
+
import { Button } from "@/components/ui/button"
21
+
import { useToast } from "@/hooks/use-toast"
5
22
6
-
export function LinkList() {
7
-
const [links, setLinks] = useState<Link[]>([]);
8
-
const [loading, setLoading] = useState(true);
9
-
const [error, setError] = useState<string | null>(null);
23
+
interface LinkListProps {
24
+
refresh: number
25
+
}
26
+
27
+
export function LinkList({ refresh }: LinkListProps) {
28
+
const [links, setLinks] = useState<Link[]>([])
29
+
const [loading, setLoading] = useState(true)
30
+
const [deleteModal, setDeleteModal] = useState<{ isOpen: boolean; linkId: number | null }>({
31
+
isOpen: false,
32
+
linkId: null,
33
+
})
34
+
const { toast } = useToast()
10
35
11
36
const fetchLinks = async () => {
12
37
try {
13
-
setLoading(true);
14
-
const data = await getAllLinks();
15
-
setLinks(data);
38
+
setLoading(true)
39
+
const data = await getAllLinks()
40
+
setLinks(data)
16
41
} catch (err) {
17
-
setError('Failed to load links');
42
+
toast({
43
+
title: "Error",
44
+
description: "Failed to load links",
45
+
variant: "destructive",
46
+
})
18
47
} finally {
19
-
setLoading(false);
48
+
setLoading(false)
20
49
}
21
-
};
50
+
}
22
51
23
52
useEffect(() => {
24
-
fetchLinks();
25
-
}, []);
53
+
fetchLinks()
54
+
}, [refresh])
55
+
56
+
const handleDelete = async () => {
57
+
if (!deleteModal.linkId) return
58
+
59
+
try {
60
+
await deleteLink(deleteModal.linkId)
61
+
await fetchLinks()
62
+
setDeleteModal({ isOpen: false, linkId: null })
63
+
toast({
64
+
title: "Link deleted",
65
+
description: "The link has been successfully deleted.",
66
+
})
67
+
} catch (err) {
68
+
toast({
69
+
title: "Error",
70
+
description: "Failed to delete link",
71
+
variant: "destructive",
72
+
})
73
+
}
74
+
}
26
75
27
-
if (loading) return <Text>Loading...</Text>;
28
-
if (error) return <Text color="red">{error}</Text>;
76
+
if (loading && !links.length) {
77
+
return <div className="text-center py-4">Loading...</div>
78
+
}
29
79
30
80
return (
31
-
<Box>
81
+
<div className="space-y-4">
82
+
<Dialog open={deleteModal.isOpen} onOpenChange={(open) => setDeleteModal({ isOpen: open, linkId: null })}>
83
+
<DialogContent>
84
+
<DialogHeader>
85
+
<DialogTitle>Delete Link</DialogTitle>
86
+
<DialogDescription>
87
+
Are you sure you want to delete this link? This action cannot be undone.
88
+
</DialogDescription>
89
+
</DialogHeader>
90
+
<DialogFooter>
91
+
<Button variant="outline" onClick={() => setDeleteModal({ isOpen: false, linkId: null })}>
92
+
Cancel
93
+
</Button>
94
+
<Button variant="destructive" onClick={handleDelete}>
95
+
Delete
96
+
</Button>
97
+
</DialogFooter>
98
+
</DialogContent>
99
+
</Dialog>
100
+
32
101
<Table>
33
-
<thead>
34
-
<tr>
35
-
<th>Short Code</th>
36
-
<th>Original URL</th>
37
-
<th>Clicks</th>
38
-
<th>Created</th>
39
-
<th>Actions</th>
40
-
</tr>
41
-
</thead>
42
-
<tbody>
102
+
<TableHeader>
103
+
<TableRow>
104
+
<TableHead>Short Code</TableHead>
105
+
<TableHead>Original URL</TableHead>
106
+
<TableHead>Clicks</TableHead>
107
+
<TableHead>Created</TableHead>
108
+
<TableHead>Actions</TableHead>
109
+
</TableRow>
110
+
</TableHeader>
111
+
<TableBody>
43
112
{links.map((link) => (
44
-
<tr key={link.id}>
45
-
<td>{link.short_code}</td>
46
-
<td>{link.original_url}</td>
47
-
<td>{link.clicks}</td>
48
-
<td>{new Date(link.created_at).toLocaleDateString()}</td>
49
-
<td>
50
-
<CopyButton value={`${window.location.origin}/${link.short_code}`}>
51
-
{({ copied, copy }) => (
52
-
<Button
53
-
color={copied ? 'teal' : 'blue'}
54
-
onClick={copy}
55
-
size="xs"
56
-
>
57
-
{copied ? 'Copied' : 'Copy'}
58
-
</Button>
59
-
)}
60
-
</CopyButton>
61
-
</td>
62
-
</tr>
113
+
<TableRow key={link.id}>
114
+
<TableCell>{link.short_code}</TableCell>
115
+
<TableCell className="max-w-[300px] truncate">{link.original_url}</TableCell>
116
+
<TableCell>{link.clicks}</TableCell>
117
+
<TableCell>{new Date(link.created_at).toLocaleDateString()}</TableCell>
118
+
<TableCell>
119
+
<div className="flex gap-2">
120
+
<Button
121
+
variant="secondary"
122
+
size="sm"
123
+
onClick={() => {
124
+
navigator.clipboard.writeText(`http://localhost:8080/${link.short_code}`)
125
+
toast({ description: "Link copied to clipboard" })
126
+
}}
127
+
>
128
+
Copy
129
+
</Button>
130
+
<Button
131
+
variant="destructive"
132
+
size="sm"
133
+
onClick={() => setDeleteModal({ isOpen: true, linkId: link.id })}
134
+
>
135
+
Delete
136
+
</Button>
137
+
</div>
138
+
</TableCell>
139
+
</TableRow>
63
140
))}
64
-
</tbody>
141
+
</TableBody>
65
142
</Table>
66
-
</Box>
67
-
);
68
-
}
69
-
143
+
</div>
144
+
)
145
+
}
+76
frontend/src/components/ui/card.tsx
+76
frontend/src/components/ui/card.tsx
···
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-xl border bg-card text-card-foreground shadow",
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("font-semibold leading-none tracking-tight", className)}
39
+
{...props}
40
+
/>
41
+
))
42
+
CardTitle.displayName = "CardTitle"
43
+
44
+
const CardDescription = React.forwardRef<
45
+
HTMLDivElement,
46
+
React.HTMLAttributes<HTMLDivElement>
47
+
>(({ className, ...props }, ref) => (
48
+
<div
49
+
ref={ref}
50
+
className={cn("text-sm text-muted-foreground", className)}
51
+
{...props}
52
+
/>
53
+
))
54
+
CardDescription.displayName = "CardDescription"
55
+
56
+
const CardContent = React.forwardRef<
57
+
HTMLDivElement,
58
+
React.HTMLAttributes<HTMLDivElement>
59
+
>(({ className, ...props }, ref) => (
60
+
<div ref={ref} className={cn("p-6 pt-0", className)} {...props} />
61
+
))
62
+
CardContent.displayName = "CardContent"
63
+
64
+
const CardFooter = React.forwardRef<
65
+
HTMLDivElement,
66
+
React.HTMLAttributes<HTMLDivElement>
67
+
>(({ className, ...props }, ref) => (
68
+
<div
69
+
ref={ref}
70
+
className={cn("flex items-center p-6 pt-0", className)}
71
+
{...props}
72
+
/>
73
+
))
74
+
CardFooter.displayName = "CardFooter"
75
+
76
+
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
+13
frontend/src/components/ui/container.tsx
+13
frontend/src/components/ui/container.tsx
+120
frontend/src/components/ui/dialog.tsx
+120
frontend/src/components/ui/dialog.tsx
···
1
+
import * as React from "react"
2
+
import * as DialogPrimitive from "@radix-ui/react-dialog"
3
+
import { X } from "lucide-react"
4
+
5
+
import { cn } from "@/lib/utils"
6
+
7
+
const Dialog = DialogPrimitive.Root
8
+
9
+
const DialogTrigger = DialogPrimitive.Trigger
10
+
11
+
const DialogPortal = DialogPrimitive.Portal
12
+
13
+
const DialogClose = DialogPrimitive.Close
14
+
15
+
const DialogOverlay = React.forwardRef<
16
+
React.ElementRef<typeof DialogPrimitive.Overlay>,
17
+
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
18
+
>(({ className, ...props }, ref) => (
19
+
<DialogPrimitive.Overlay
20
+
ref={ref}
21
+
className={cn(
22
+
"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
23
+
className
24
+
)}
25
+
{...props}
26
+
/>
27
+
))
28
+
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
29
+
30
+
const DialogContent = React.forwardRef<
31
+
React.ElementRef<typeof DialogPrimitive.Content>,
32
+
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
33
+
>(({ className, children, ...props }, ref) => (
34
+
<DialogPortal>
35
+
<DialogOverlay />
36
+
<DialogPrimitive.Content
37
+
ref={ref}
38
+
className={cn(
39
+
"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
40
+
className
41
+
)}
42
+
{...props}
43
+
>
44
+
{children}
45
+
<DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
46
+
<X className="h-4 w-4" />
47
+
<span className="sr-only">Close</span>
48
+
</DialogPrimitive.Close>
49
+
</DialogPrimitive.Content>
50
+
</DialogPortal>
51
+
))
52
+
DialogContent.displayName = DialogPrimitive.Content.displayName
53
+
54
+
const DialogHeader = ({
55
+
className,
56
+
...props
57
+
}: React.HTMLAttributes<HTMLDivElement>) => (
58
+
<div
59
+
className={cn(
60
+
"flex flex-col space-y-1.5 text-center sm:text-left",
61
+
className
62
+
)}
63
+
{...props}
64
+
/>
65
+
)
66
+
DialogHeader.displayName = "DialogHeader"
67
+
68
+
const DialogFooter = ({
69
+
className,
70
+
...props
71
+
}: React.HTMLAttributes<HTMLDivElement>) => (
72
+
<div
73
+
className={cn(
74
+
"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
75
+
className
76
+
)}
77
+
{...props}
78
+
/>
79
+
)
80
+
DialogFooter.displayName = "DialogFooter"
81
+
82
+
const DialogTitle = React.forwardRef<
83
+
React.ElementRef<typeof DialogPrimitive.Title>,
84
+
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
85
+
>(({ className, ...props }, ref) => (
86
+
<DialogPrimitive.Title
87
+
ref={ref}
88
+
className={cn(
89
+
"text-lg font-semibold leading-none tracking-tight",
90
+
className
91
+
)}
92
+
{...props}
93
+
/>
94
+
))
95
+
DialogTitle.displayName = DialogPrimitive.Title.displayName
96
+
97
+
const DialogDescription = React.forwardRef<
98
+
React.ElementRef<typeof DialogPrimitive.Description>,
99
+
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
100
+
>(({ className, ...props }, ref) => (
101
+
<DialogPrimitive.Description
102
+
ref={ref}
103
+
className={cn("text-sm text-muted-foreground", className)}
104
+
{...props}
105
+
/>
106
+
))
107
+
DialogDescription.displayName = DialogPrimitive.Description.displayName
108
+
109
+
export {
110
+
Dialog,
111
+
DialogPortal,
112
+
DialogOverlay,
113
+
DialogTrigger,
114
+
DialogClose,
115
+
DialogContent,
116
+
DialogHeader,
117
+
DialogFooter,
118
+
DialogTitle,
119
+
DialogDescription,
120
+
}
+178
frontend/src/components/ui/form.tsx
+178
frontend/src/components/ui/form.tsx
···
1
+
"use client"
2
+
3
+
import * as React from "react"
4
+
import * as LabelPrimitive from "@radix-ui/react-label"
5
+
import { Slot } from "@radix-ui/react-slot"
6
+
import {
7
+
Controller,
8
+
ControllerProps,
9
+
FieldPath,
10
+
FieldValues,
11
+
FormProvider,
12
+
useFormContext,
13
+
} from "react-hook-form"
14
+
15
+
import { cn } from "@/lib/utils"
16
+
import { Label } from "@/components/ui/label"
17
+
18
+
const Form = FormProvider
19
+
20
+
type FormFieldContextValue<
21
+
TFieldValues extends FieldValues = FieldValues,
22
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
23
+
> = {
24
+
name: TName
25
+
}
26
+
27
+
const FormFieldContext = React.createContext<FormFieldContextValue>(
28
+
{} as FormFieldContextValue
29
+
)
30
+
31
+
const FormField = <
32
+
TFieldValues extends FieldValues = FieldValues,
33
+
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
34
+
>({
35
+
...props
36
+
}: ControllerProps<TFieldValues, TName>) => {
37
+
return (
38
+
<FormFieldContext.Provider value={{ name: props.name }}>
39
+
<Controller {...props} />
40
+
</FormFieldContext.Provider>
41
+
)
42
+
}
43
+
44
+
const useFormField = () => {
45
+
const fieldContext = React.useContext(FormFieldContext)
46
+
const itemContext = React.useContext(FormItemContext)
47
+
const { getFieldState, formState } = useFormContext()
48
+
49
+
const fieldState = getFieldState(fieldContext.name, formState)
50
+
51
+
if (!fieldContext) {
52
+
throw new Error("useFormField should be used within <FormField>")
53
+
}
54
+
55
+
const { id } = itemContext
56
+
57
+
return {
58
+
id,
59
+
name: fieldContext.name,
60
+
formItemId: `${id}-form-item`,
61
+
formDescriptionId: `${id}-form-item-description`,
62
+
formMessageId: `${id}-form-item-message`,
63
+
...fieldState,
64
+
}
65
+
}
66
+
67
+
type FormItemContextValue = {
68
+
id: string
69
+
}
70
+
71
+
const FormItemContext = React.createContext<FormItemContextValue>(
72
+
{} as FormItemContextValue
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 } = useFormField()
111
+
112
+
return (
113
+
<Slot
114
+
ref={ref}
115
+
id={formItemId}
116
+
aria-describedby={
117
+
!error
118
+
? `${formDescriptionId}`
119
+
: `${formDescriptionId} ${formMessageId}`
120
+
}
121
+
aria-invalid={!!error}
122
+
{...props}
123
+
/>
124
+
)
125
+
})
126
+
FormControl.displayName = "FormControl"
127
+
128
+
const FormDescription = React.forwardRef<
129
+
HTMLParagraphElement,
130
+
React.HTMLAttributes<HTMLParagraphElement>
131
+
>(({ className, ...props }, ref) => {
132
+
const { formDescriptionId } = useFormField()
133
+
134
+
return (
135
+
<p
136
+
ref={ref}
137
+
id={formDescriptionId}
138
+
className={cn("text-[0.8rem] text-muted-foreground", className)}
139
+
{...props}
140
+
/>
141
+
)
142
+
})
143
+
FormDescription.displayName = "FormDescription"
144
+
145
+
const FormMessage = React.forwardRef<
146
+
HTMLParagraphElement,
147
+
React.HTMLAttributes<HTMLParagraphElement>
148
+
>(({ className, children, ...props }, ref) => {
149
+
const { error, formMessageId } = useFormField()
150
+
const body = error ? String(error?.message) : children
151
+
152
+
if (!body) {
153
+
return null
154
+
}
155
+
156
+
return (
157
+
<p
158
+
ref={ref}
159
+
id={formMessageId}
160
+
className={cn("text-[0.8rem] font-medium text-destructive", className)}
161
+
{...props}
162
+
>
163
+
{body}
164
+
</p>
165
+
)
166
+
})
167
+
FormMessage.displayName = "FormMessage"
168
+
169
+
export {
170
+
useFormField,
171
+
Form,
172
+
FormItem,
173
+
FormLabel,
174
+
FormControl,
175
+
FormDescription,
176
+
FormMessage,
177
+
FormField,
178
+
}
+22
frontend/src/components/ui/input.tsx
+22
frontend/src/components/ui/input.tsx
···
1
+
import * as React from "react"
2
+
3
+
import { cn } from "@/lib/utils"
4
+
5
+
const Input = React.forwardRef<HTMLInputElement, React.ComponentProps<"input">>(
6
+
({ className, type, ...props }, ref) => {
7
+
return (
8
+
<input
9
+
type={type}
10
+
className={cn(
11
+
"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors 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-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
12
+
className
13
+
)}
14
+
ref={ref}
15
+
{...props}
16
+
/>
17
+
)
18
+
}
19
+
)
20
+
Input.displayName = "Input"
21
+
22
+
export { Input }
+24
frontend/src/components/ui/label.tsx
+24
frontend/src/components/ui/label.tsx
···
1
+
import * as React from "react"
2
+
import * as LabelPrimitive from "@radix-ui/react-label"
3
+
import { cva, type VariantProps } from "class-variance-authority"
4
+
5
+
import { cn } from "@/lib/utils"
6
+
7
+
const labelVariants = cva(
8
+
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
9
+
)
10
+
11
+
const Label = React.forwardRef<
12
+
React.ElementRef<typeof LabelPrimitive.Root>,
13
+
React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &
14
+
VariantProps<typeof labelVariants>
15
+
>(({ className, ...props }, ref) => (
16
+
<LabelPrimitive.Root
17
+
ref={ref}
18
+
className={cn(labelVariants(), className)}
19
+
{...props}
20
+
/>
21
+
))
22
+
Label.displayName = LabelPrimitive.Root.displayName
23
+
24
+
export { Label }
+120
frontend/src/components/ui/table.tsx
+120
frontend/src/components/ui/table.tsx
···
1
+
import * as React from "react"
2
+
3
+
import { cn } from "@/lib/utils"
4
+
5
+
const Table = React.forwardRef<
6
+
HTMLTableElement,
7
+
React.HTMLAttributes<HTMLTableElement>
8
+
>(({ className, ...props }, ref) => (
9
+
<div className="relative w-full overflow-auto">
10
+
<table
11
+
ref={ref}
12
+
className={cn("w-full caption-bottom text-sm", className)}
13
+
{...props}
14
+
/>
15
+
</div>
16
+
))
17
+
Table.displayName = "Table"
18
+
19
+
const TableHeader = React.forwardRef<
20
+
HTMLTableSectionElement,
21
+
React.HTMLAttributes<HTMLTableSectionElement>
22
+
>(({ className, ...props }, ref) => (
23
+
<thead ref={ref} className={cn("[&_tr]:border-b", className)} {...props} />
24
+
))
25
+
TableHeader.displayName = "TableHeader"
26
+
27
+
const TableBody = React.forwardRef<
28
+
HTMLTableSectionElement,
29
+
React.HTMLAttributes<HTMLTableSectionElement>
30
+
>(({ className, ...props }, ref) => (
31
+
<tbody
32
+
ref={ref}
33
+
className={cn("[&_tr:last-child]:border-0", className)}
34
+
{...props}
35
+
/>
36
+
))
37
+
TableBody.displayName = "TableBody"
38
+
39
+
const TableFooter = React.forwardRef<
40
+
HTMLTableSectionElement,
41
+
React.HTMLAttributes<HTMLTableSectionElement>
42
+
>(({ className, ...props }, ref) => (
43
+
<tfoot
44
+
ref={ref}
45
+
className={cn(
46
+
"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
47
+
className
48
+
)}
49
+
{...props}
50
+
/>
51
+
))
52
+
TableFooter.displayName = "TableFooter"
53
+
54
+
const TableRow = React.forwardRef<
55
+
HTMLTableRowElement,
56
+
React.HTMLAttributes<HTMLTableRowElement>
57
+
>(({ className, ...props }, ref) => (
58
+
<tr
59
+
ref={ref}
60
+
className={cn(
61
+
"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
62
+
className
63
+
)}
64
+
{...props}
65
+
/>
66
+
))
67
+
TableRow.displayName = "TableRow"
68
+
69
+
const TableHead = React.forwardRef<
70
+
HTMLTableCellElement,
71
+
React.ThHTMLAttributes<HTMLTableCellElement>
72
+
>(({ className, ...props }, ref) => (
73
+
<th
74
+
ref={ref}
75
+
className={cn(
76
+
"h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
77
+
className
78
+
)}
79
+
{...props}
80
+
/>
81
+
))
82
+
TableHead.displayName = "TableHead"
83
+
84
+
const TableCell = React.forwardRef<
85
+
HTMLTableCellElement,
86
+
React.TdHTMLAttributes<HTMLTableCellElement>
87
+
>(({ className, ...props }, ref) => (
88
+
<td
89
+
ref={ref}
90
+
className={cn(
91
+
"p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
92
+
className
93
+
)}
94
+
{...props}
95
+
/>
96
+
))
97
+
TableCell.displayName = "TableCell"
98
+
99
+
const TableCaption = React.forwardRef<
100
+
HTMLTableCaptionElement,
101
+
React.HTMLAttributes<HTMLTableCaptionElement>
102
+
>(({ className, ...props }, ref) => (
103
+
<caption
104
+
ref={ref}
105
+
className={cn("mt-4 text-sm text-muted-foreground", className)}
106
+
{...props}
107
+
/>
108
+
))
109
+
TableCaption.displayName = "TableCaption"
110
+
111
+
export {
112
+
Table,
113
+
TableHeader,
114
+
TableBody,
115
+
TableFooter,
116
+
TableHead,
117
+
TableRow,
118
+
TableCell,
119
+
TableCaption,
120
+
}
+53
frontend/src/components/ui/tabs.tsx
+53
frontend/src/components/ui/tabs.tsx
···
1
+
import * as React from "react"
2
+
import * as TabsPrimitive from "@radix-ui/react-tabs"
3
+
4
+
import { cn } from "@/lib/utils"
5
+
6
+
const Tabs = TabsPrimitive.Root
7
+
8
+
const TabsList = React.forwardRef<
9
+
React.ElementRef<typeof TabsPrimitive.List>,
10
+
React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>
11
+
>(({ className, ...props }, ref) => (
12
+
<TabsPrimitive.List
13
+
ref={ref}
14
+
className={cn(
15
+
"inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",
16
+
className
17
+
)}
18
+
{...props}
19
+
/>
20
+
))
21
+
TabsList.displayName = TabsPrimitive.List.displayName
22
+
23
+
const TabsTrigger = React.forwardRef<
24
+
React.ElementRef<typeof TabsPrimitive.Trigger>,
25
+
React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>
26
+
>(({ className, ...props }, ref) => (
27
+
<TabsPrimitive.Trigger
28
+
ref={ref}
29
+
className={cn(
30
+
"inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",
31
+
className
32
+
)}
33
+
{...props}
34
+
/>
35
+
))
36
+
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
37
+
38
+
const TabsContent = React.forwardRef<
39
+
React.ElementRef<typeof TabsPrimitive.Content>,
40
+
React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>
41
+
>(({ className, ...props }, ref) => (
42
+
<TabsPrimitive.Content
43
+
ref={ref}
44
+
className={cn(
45
+
"mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
46
+
className
47
+
)}
48
+
{...props}
49
+
/>
50
+
))
51
+
TabsContent.displayName = TabsPrimitive.Content.displayName
52
+
53
+
export { Tabs, TabsList, TabsTrigger, TabsContent }
+129
frontend/src/components/ui/toast.tsx
+129
frontend/src/components/ui/toast.tsx
···
1
+
"use client"
2
+
3
+
import * as React from "react"
4
+
import * as ToastPrimitives from "@radix-ui/react-toast"
5
+
import { cva, type VariantProps } from "class-variance-authority"
6
+
import { X } from "lucide-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-2 overflow-hidden rounded-md border p-4 pr-6 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 transition-colors hover:bg-secondary focus:outline-none focus:ring-1 focus:ring-ring 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-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-1 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 [&+div]:text-xs", 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
+
type ToastProps,
121
+
type ToastActionElement,
122
+
ToastProvider,
123
+
ToastViewport,
124
+
Toast,
125
+
ToastTitle,
126
+
ToastDescription,
127
+
ToastClose,
128
+
ToastAction,
129
+
}
+35
frontend/src/components/ui/toaster.tsx
+35
frontend/src/components/ui/toaster.tsx
···
1
+
"use client"
2
+
3
+
import { useToast } from "@/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 }) {
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
+
}
+63
frontend/src/context/AuthContext.tsx
+63
frontend/src/context/AuthContext.tsx
···
1
+
import { createContext, useContext, useEffect, useState } from 'react';
2
+
import { User } from '../types/api';
3
+
import * as api from '../api/client';
4
+
5
+
interface AuthContextType {
6
+
user: User | null;
7
+
login: (email: string, password: string) => Promise<void>;
8
+
register: (email: string, password: string) => Promise<void>;
9
+
logout: () => void;
10
+
isLoading: boolean;
11
+
}
12
+
13
+
const AuthContext = createContext<AuthContextType | undefined>(undefined);
14
+
15
+
export function AuthProvider({ children }: { children: React.ReactNode }) {
16
+
const [user, setUser] = useState<User | null>(null);
17
+
const [isLoading, setIsLoading] = useState(true);
18
+
19
+
useEffect(() => {
20
+
const token = localStorage.getItem('token');
21
+
if (token) {
22
+
const userData = JSON.parse(localStorage.getItem('user') || 'null');
23
+
setUser(userData);
24
+
}
25
+
setIsLoading(false);
26
+
}, []);
27
+
28
+
const login = async (email: string, password: string) => {
29
+
const response = await api.login(email, password);
30
+
const { token, user } = response;
31
+
localStorage.setItem('token', token);
32
+
localStorage.setItem('user', JSON.stringify(user));
33
+
setUser(user);
34
+
};
35
+
36
+
const register = async (email: string, password: string) => {
37
+
const response = await api.register(email, password);
38
+
const { token, user } = response;
39
+
localStorage.setItem('token', token);
40
+
localStorage.setItem('user', JSON.stringify(user));
41
+
setUser(user);
42
+
};
43
+
44
+
const logout = () => {
45
+
localStorage.removeItem('token');
46
+
localStorage.removeItem('user');
47
+
setUser(null);
48
+
};
49
+
50
+
return (
51
+
<AuthContext.Provider value={{ user, login, register, logout, isLoading }}>
52
+
{children}
53
+
</AuthContext.Provider>
54
+
);
55
+
}
56
+
57
+
export function useAuth() {
58
+
const context = useContext(AuthContext);
59
+
if (context === undefined) {
60
+
throw new Error('useAuth must be used within an AuthProvider');
61
+
}
62
+
return context;
63
+
}
+191
frontend/src/hooks/use-toast.ts
+191
frontend/src/hooks/use-toast.ts
···
1
+
import * as React from "react"
2
+
3
+
import type {
4
+
ToastActionElement,
5
+
ToastProps,
6
+
} 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 { useToast, toast }
+3
-68
frontend/src/index.css
+3
-68
frontend/src/index.css
···
1
-
:root {
2
-
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
3
-
line-height: 1.5;
4
-
font-weight: 400;
5
-
6
-
color-scheme: light dark;
7
-
color: rgba(255, 255, 255, 0.87);
8
-
background-color: #242424;
9
-
10
-
font-synthesis: none;
11
-
text-rendering: optimizeLegibility;
12
-
-webkit-font-smoothing: antialiased;
13
-
-moz-osx-font-smoothing: grayscale;
14
-
}
15
-
16
-
a {
17
-
font-weight: 500;
18
-
color: #646cff;
19
-
text-decoration: inherit;
20
-
}
21
-
a:hover {
22
-
color: #535bf2;
23
-
}
24
-
25
-
body {
26
-
margin: 0;
27
-
display: flex;
28
-
place-items: center;
29
-
min-width: 320px;
30
-
min-height: 100vh;
31
-
}
32
-
33
-
h1 {
34
-
font-size: 3.2em;
35
-
line-height: 1.1;
36
-
}
37
-
38
-
button {
39
-
border-radius: 8px;
40
-
border: 1px solid transparent;
41
-
padding: 0.6em 1.2em;
42
-
font-size: 1em;
43
-
font-weight: 500;
44
-
font-family: inherit;
45
-
background-color: #1a1a1a;
46
-
cursor: pointer;
47
-
transition: border-color 0.25s;
48
-
}
49
-
button:hover {
50
-
border-color: #646cff;
51
-
}
52
-
button:focus,
53
-
button:focus-visible {
54
-
outline: 4px auto -webkit-focus-ring-color;
55
-
}
56
-
57
-
@media (prefers-color-scheme: light) {
58
-
:root {
59
-
color: #213547;
60
-
background-color: #ffffff;
61
-
}
62
-
a:hover {
63
-
color: #747bff;
64
-
}
65
-
button {
66
-
background-color: #f9f9f9;
67
-
}
68
-
}
1
+
@tailwind base;
2
+
@tailwind components;
3
+
@tailwind utilities;
+6
frontend/src/lib/utils.ts
+6
frontend/src/lib/utils.ts
+11
-2
frontend/src/types/api.ts
+11
-2
frontend/src/types/api.ts
···
12
12
clicks: number;
13
13
}
14
14
15
-
export interface ApiError {
16
-
error: string;
15
+
export interface User {
16
+
id: number;
17
+
email: string;
18
+
}
19
+
20
+
export interface AuthResponse {
21
+
token: string;
22
+
user: User;
17
23
}
18
24
25
+
export interface ApiError {
26
+
error: string;
27
+
}
+16
frontend/tailwind.config.js
+16
frontend/tailwind.config.js
+16
-6
frontend/tsconfig.app.json
+16
-6
frontend/tsconfig.app.json
···
3
3
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
4
"target": "ES2020",
5
5
"useDefineForClassFields": true,
6
-
"lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+
"lib": [
7
+
"ES2020",
8
+
"DOM",
9
+
"DOM.Iterable"
10
+
],
7
11
"module": "ESNext",
8
12
"skipLibCheck": true,
9
-
10
13
/* Bundler mode */
11
14
"moduleResolution": "bundler",
12
15
"allowImportingTsExtensions": true,
···
14
17
"moduleDetection": "force",
15
18
"noEmit": true,
16
19
"jsx": "react-jsx",
17
-
18
20
/* Linting */
19
21
"strict": true,
20
22
"noUnusedLocals": true,
21
23
"noUnusedParameters": true,
22
24
"noFallthroughCasesInSwitch": true,
23
-
"noUncheckedSideEffectImports": true
25
+
"noUncheckedSideEffectImports": true,
26
+
"baseUrl": ".",
27
+
"paths": {
28
+
"@/*": [
29
+
"./src/*"
30
+
]
31
+
}
24
32
},
25
-
"include": ["src"]
26
-
}
33
+
"include": [
34
+
"src"
35
+
]
36
+
}
+16
-4
frontend/tsconfig.json
+16
-4
frontend/tsconfig.json
···
1
1
{
2
2
"files": [],
3
3
"references": [
4
-
{ "path": "./tsconfig.app.json" },
5
-
{ "path": "./tsconfig.node.json" }
6
-
]
7
-
}
4
+
{
5
+
"path": "./tsconfig.app.json"
6
+
},
7
+
{
8
+
"path": "./tsconfig.node.json"
9
+
}
10
+
],
11
+
"compilerOptions": {
12
+
"baseUrl": ".",
13
+
"paths": {
14
+
"@/*": [
15
+
"./src/*"
16
+
]
17
+
}
18
+
}
19
+
}
+11
-1
frontend/vite.config.ts
+11
-1
frontend/vite.config.ts
···
1
1
import { defineConfig } from 'vite'
2
2
import react from '@vitejs/plugin-react'
3
+
import tailwindcss from '@tailwindcss/vite'
4
+
import path from "path"
3
5
4
6
export default defineConfig({
5
-
plugins: [react()],
7
+
plugins: [
8
+
react(),
9
+
tailwindcss(),
10
+
],
6
11
server: {
7
12
proxy: {
8
13
'/api': {
9
14
target: 'http://localhost:8080',
10
15
changeOrigin: true,
11
16
},
17
+
},
18
+
},
19
+
resolve: {
20
+
alias: {
21
+
"@": path.resolve(__dirname, "./src"),
12
22
},
13
23
},
14
24
})