Vokturz commited on
Commit
582836a
·
1 Parent(s): d6b92b1

add shadcn

Browse files
components.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": false,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "src/index.css",
9
+ "baseColor": "neutral",
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
+ }
package.json CHANGED
@@ -5,6 +5,8 @@
5
  "private": true,
6
  "dependencies": {
7
  "@headlessui/react": "^2.2.4",
 
 
8
  "@tailwindcss/typography": "^0.5.16",
9
  "@tailwindcss/vite": "^4.1.11",
10
  "@testing-library/dom": "^10.4.0",
@@ -12,11 +14,12 @@
12
  "@testing-library/react": "^16.3.0",
13
  "@testing-library/user-event": "^13.5.0",
14
  "@types/jest": "^27.5.2",
15
- "@types/node": "^16.18.126",
16
  "@types/react": "^19.1.8",
17
  "@types/react-dom": "^19.1.6",
18
  "@vitejs/plugin-react-swc": "^3.11.0",
19
  "build": "^0.1.4",
 
 
20
  "dotenv": "^17.0.1",
21
  "lodash": "^4.17.21",
22
  "lucide-react": "^0.525.0",
@@ -26,6 +29,7 @@
26
  "react-markdown": "^10.1.0",
27
  "react-syntax-highlighter": "^15.6.1",
28
  "remark-gfm": "^4.0.1",
 
29
  "typescript": "^4.9.5",
30
  "vite-plugin-svgr": "^4.3.0",
31
  "vite-tsconfig-paths": "^5.1.4",
@@ -38,9 +42,11 @@
38
  },
39
  "devDependencies": {
40
  "@types/lodash": "^4.17.20",
 
41
  "@types/react-syntax-highlighter": "^15.5.13",
42
  "@vitejs/plugin-react": "^4.7.0",
43
  "tailwindcss": "^4.1.11",
 
44
  "vite": "^7.0.6"
45
  }
46
  }
 
5
  "private": true,
6
  "dependencies": {
7
  "@headlessui/react": "^2.2.4",
8
+ "@radix-ui/react-slider": "^1.3.5",
9
+ "@radix-ui/react-switch": "^1.2.5",
10
  "@tailwindcss/typography": "^0.5.16",
11
  "@tailwindcss/vite": "^4.1.11",
12
  "@testing-library/dom": "^10.4.0",
 
14
  "@testing-library/react": "^16.3.0",
15
  "@testing-library/user-event": "^13.5.0",
16
  "@types/jest": "^27.5.2",
 
17
  "@types/react": "^19.1.8",
18
  "@types/react-dom": "^19.1.6",
19
  "@vitejs/plugin-react-swc": "^3.11.0",
20
  "build": "^0.1.4",
21
+ "class-variance-authority": "^0.7.1",
22
+ "clsx": "^2.1.1",
23
  "dotenv": "^17.0.1",
24
  "lodash": "^4.17.21",
25
  "lucide-react": "^0.525.0",
 
29
  "react-markdown": "^10.1.0",
30
  "react-syntax-highlighter": "^15.6.1",
31
  "remark-gfm": "^4.0.1",
32
+ "tailwind-merge": "^3.3.1",
33
  "typescript": "^4.9.5",
34
  "vite-plugin-svgr": "^4.3.0",
35
  "vite-tsconfig-paths": "^5.1.4",
 
42
  },
43
  "devDependencies": {
44
  "@types/lodash": "^4.17.20",
45
+ "@types/node": "^16.18.126",
46
  "@types/react-syntax-highlighter": "^15.5.13",
47
  "@vitejs/plugin-react": "^4.7.0",
48
  "tailwindcss": "^4.1.11",
49
+ "tw-animate-css": "^1.3.6",
50
  "vite": "^7.0.6"
51
  }
52
  }
pnpm-lock.yaml CHANGED
@@ -11,6 +11,12 @@ importers:
11
  '@headlessui/react':
12
  specifier: ^2.2.4
13
 
 
 
 
 
 
14
  '@tailwindcss/typography':
15
  specifier: ^0.5.16
16
  version: 0.5.16([email protected])
@@ -32,9 +38,6 @@ importers:
32
  '@types/jest':
33
  specifier: ^27.5.2
34
  version: 27.5.2
35
- '@types/node':
36
- specifier: ^16.18.126
37
- version: 16.18.126
38
  '@types/react':
39
  specifier: ^19.1.8
40
  version: 19.1.8
@@ -47,6 +50,12 @@ importers:
47
  build:
48
  specifier: ^0.1.4
49
  version: 0.1.4
 
 
 
 
 
 
50
  dotenv:
51
  specifier: ^17.0.1
52
  version: 17.0.1
@@ -74,6 +83,9 @@ importers:
74
  remark-gfm:
75
  specifier: ^4.0.1
76
  version: 4.0.1
 
 
 
77
  typescript:
78
  specifier: ^4.9.5
79
  version: 4.9.5
@@ -90,6 +102,9 @@ importers:
90
  '@types/lodash':
91
  specifier: ^4.17.20
92
  version: 4.17.20
 
 
 
93
  '@types/react-syntax-highlighter':
94
  specifier: ^15.5.13
95
  version: 15.5.13
@@ -99,6 +114,9 @@ importers:
99
  tailwindcss:
100
  specifier: ^4.1.11
101
  version: 4.1.11
 
 
 
102
  vite:
103
  specifier: ^7.0.6
104
@@ -407,6 +425,145 @@ packages:
407
  '@jridgewell/[email protected]':
408
  resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
409
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
410
  '@react-aria/[email protected]':
411
  resolution: {integrity: sha512-JpFtXmWQ0Oca7FcvkqgjSyo6xEP7v3oQOLUId6o0xTvm4AD5W0mU2r3lYrbhsJ+XxdUUX4AVR5473sZZ85kU4A==}
412
  peerDependencies:
@@ -998,6 +1155,9 @@ packages:
998
  resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
999
  engines: {node: '>=18'}
1000
 
 
 
 
1001
1002
  resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
1003
  engines: {node: '>=6'}
@@ -1756,6 +1916,9 @@ packages:
1756
1757
  resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
1758
 
 
 
 
1759
1760
  resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==}
1761
 
@@ -1804,6 +1967,9 @@ packages:
1804
1805
  resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1806
 
 
 
 
1807
1808
  resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
1809
  engines: {node: '>=4.2.0'}
@@ -2199,6 +2365,124 @@ snapshots:
2199
  '@jridgewell/resolve-uri': 3.1.2
2200
  '@jridgewell/sourcemap-codec': 1.5.4
2201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2202
2203
  dependencies:
2204
  '@react-aria/interactions': 3.25.3([email protected]([email protected]))([email protected])
@@ -2738,6 +3022,10 @@ snapshots:
2738
 
2739
2740
 
 
 
 
 
2741
2742
 
2743
@@ -3727,6 +4015,8 @@ snapshots:
3727
 
3728
3729
 
 
 
3730
3731
 
3732
@@ -3763,6 +4053,8 @@ snapshots:
3763
 
3764
3765
 
 
 
3766
3767
 
3768
 
11
  '@headlessui/react':
12
  specifier: ^2.2.4
13
14
+ '@radix-ui/react-slider':
15
+ specifier: ^1.3.5
16
17
+ '@radix-ui/react-switch':
18
+ specifier: ^1.2.5
19
20
  '@tailwindcss/typography':
21
  specifier: ^0.5.16
22
  version: 0.5.16([email protected])
 
38
  '@types/jest':
39
  specifier: ^27.5.2
40
  version: 27.5.2
 
 
 
41
  '@types/react':
42
  specifier: ^19.1.8
43
  version: 19.1.8
 
50
  build:
51
  specifier: ^0.1.4
52
  version: 0.1.4
53
+ class-variance-authority:
54
+ specifier: ^0.7.1
55
+ version: 0.7.1
56
+ clsx:
57
+ specifier: ^2.1.1
58
+ version: 2.1.1
59
  dotenv:
60
  specifier: ^17.0.1
61
  version: 17.0.1
 
83
  remark-gfm:
84
  specifier: ^4.0.1
85
  version: 4.0.1
86
+ tailwind-merge:
87
+ specifier: ^3.3.1
88
+ version: 3.3.1
89
  typescript:
90
  specifier: ^4.9.5
91
  version: 4.9.5
 
102
  '@types/lodash':
103
  specifier: ^4.17.20
104
  version: 4.17.20
105
+ '@types/node':
106
+ specifier: ^16.18.126
107
+ version: 16.18.126
108
  '@types/react-syntax-highlighter':
109
  specifier: ^15.5.13
110
  version: 15.5.13
 
114
  tailwindcss:
115
  specifier: ^4.1.11
116
  version: 4.1.11
117
+ tw-animate-css:
118
+ specifier: ^1.3.6
119
+ version: 1.3.6
120
  vite:
121
  specifier: ^7.0.6
122
 
425
  '@jridgewell/[email protected]':
426
  resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
427
 
428
+ '@radix-ui/[email protected]':
429
+ resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
430
+
431
+ '@radix-ui/[email protected]':
432
+ resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==}
433
+
434
+ '@radix-ui/[email protected]':
435
+ resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
436
+ peerDependencies:
437
+ '@types/react': '*'
438
+ '@types/react-dom': '*'
439
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
440
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
441
+ peerDependenciesMeta:
442
+ '@types/react':
443
+ optional: true
444
+ '@types/react-dom':
445
+ optional: true
446
+
447
+ '@radix-ui/[email protected]':
448
+ resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==}
449
+ peerDependencies:
450
+ '@types/react': '*'
451
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
452
+ peerDependenciesMeta:
453
+ '@types/react':
454
+ optional: true
455
+
456
+ '@radix-ui/[email protected]':
457
+ resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==}
458
+ peerDependencies:
459
+ '@types/react': '*'
460
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
461
+ peerDependenciesMeta:
462
+ '@types/react':
463
+ optional: true
464
+
465
+ '@radix-ui/[email protected]':
466
+ resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==}
467
+ peerDependencies:
468
+ '@types/react': '*'
469
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
470
+ peerDependenciesMeta:
471
+ '@types/react':
472
+ optional: true
473
+
474
+ '@radix-ui/[email protected]':
475
+ resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
476
+ peerDependencies:
477
+ '@types/react': '*'
478
+ '@types/react-dom': '*'
479
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
480
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
481
+ peerDependenciesMeta:
482
+ '@types/react':
483
+ optional: true
484
+ '@types/react-dom':
485
+ optional: true
486
+
487
+ '@radix-ui/[email protected]':
488
+ resolution: {integrity: sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==}
489
+ peerDependencies:
490
+ '@types/react': '*'
491
+ '@types/react-dom': '*'
492
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
493
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
494
+ peerDependenciesMeta:
495
+ '@types/react':
496
+ optional: true
497
+ '@types/react-dom':
498
+ optional: true
499
+
500
+ '@radix-ui/[email protected]':
501
+ resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==}
502
+ peerDependencies:
503
+ '@types/react': '*'
504
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
505
+ peerDependenciesMeta:
506
+ '@types/react':
507
+ optional: true
508
+
509
+ '@radix-ui/[email protected]':
510
+ resolution: {integrity: sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==}
511
+ peerDependencies:
512
+ '@types/react': '*'
513
+ '@types/react-dom': '*'
514
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
515
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
516
+ peerDependenciesMeta:
517
+ '@types/react':
518
+ optional: true
519
+ '@types/react-dom':
520
+ optional: true
521
+
522
+ '@radix-ui/[email protected]':
523
+ resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
524
+ peerDependencies:
525
+ '@types/react': '*'
526
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
527
+ peerDependenciesMeta:
528
+ '@types/react':
529
+ optional: true
530
+
531
+ '@radix-ui/[email protected]':
532
+ resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==}
533
+ peerDependencies:
534
+ '@types/react': '*'
535
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
536
+ peerDependenciesMeta:
537
+ '@types/react':
538
+ optional: true
539
+
540
+ '@radix-ui/[email protected]':
541
+ resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
542
+ peerDependencies:
543
+ '@types/react': '*'
544
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
545
+ peerDependenciesMeta:
546
+ '@types/react':
547
+ optional: true
548
+
549
+ '@radix-ui/[email protected]':
550
+ resolution: {integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==}
551
+ peerDependencies:
552
+ '@types/react': '*'
553
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
554
+ peerDependenciesMeta:
555
+ '@types/react':
556
+ optional: true
557
+
558
+ '@radix-ui/[email protected]':
559
+ resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
560
+ peerDependencies:
561
+ '@types/react': '*'
562
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
563
+ peerDependenciesMeta:
564
+ '@types/react':
565
+ optional: true
566
+
567
  '@react-aria/[email protected]':
568
  resolution: {integrity: sha512-JpFtXmWQ0Oca7FcvkqgjSyo6xEP7v3oQOLUId6o0xTvm4AD5W0mU2r3lYrbhsJ+XxdUUX4AVR5473sZZ85kU4A==}
569
  peerDependencies:
 
1155
  resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
1156
  engines: {node: '>=18'}
1157
 
1158
1159
+ resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
1160
+
1161
1162
  resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
1163
  engines: {node: '>=6'}
 
1916
1917
  resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
1918
 
1919
1920
+ resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
1921
+
1922
1923
  resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==}
1924
 
 
1967
1968
  resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
1969
 
1970
1971
+ resolution: {integrity: sha512-9dy0R9UsYEGmgf26L8UcHiLmSFTHa9+D7+dAt/G/sF5dCnPePZbfgDYinc7/UzAM7g/baVrmS6m9yEpU46d+LA==}
1972
+
1973
1974
  resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
1975
  engines: {node: '>=4.2.0'}
 
2365
  '@jridgewell/resolve-uri': 3.1.2
2366
  '@jridgewell/sourcemap-codec': 1.5.4
2367
 
2368
+ '@radix-ui/[email protected]': {}
2369
+
2370
+ '@radix-ui/[email protected]': {}
2371
+
2372
2373
+ dependencies:
2374
+ '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
2375
+ '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
2376
2377
+ '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
2378
+ react: 19.1.0
2379
+ react-dom: 19.1.0([email protected])
2380
+ optionalDependencies:
2381
+ '@types/react': 19.1.8
2382
+ '@types/react-dom': 19.1.6(@types/[email protected])
2383
+
2384
2385
+ dependencies:
2386
+ react: 19.1.0
2387
+ optionalDependencies:
2388
+ '@types/react': 19.1.8
2389
+
2390
2391
+ dependencies:
2392
+ react: 19.1.0
2393
+ optionalDependencies:
2394
+ '@types/react': 19.1.8
2395
+
2396
2397
+ dependencies:
2398
+ react: 19.1.0
2399
+ optionalDependencies:
2400
+ '@types/react': 19.1.8
2401
+
2402
2403
+ dependencies:
2404
+ '@radix-ui/react-slot': 1.2.3(@types/[email protected])([email protected])
2405
+ react: 19.1.0
2406
+ react-dom: 19.1.0([email protected])
2407
+ optionalDependencies:
2408
+ '@types/react': 19.1.8
2409
+ '@types/react-dom': 19.1.6(@types/[email protected])
2410
+
2411
2412
+ dependencies:
2413
+ '@radix-ui/number': 1.1.1
2414
+ '@radix-ui/primitive': 1.1.2
2415
+ '@radix-ui/react-collection': 1.1.7(@types/[email protected](@types/[email protected]))(@types/[email protected])([email protected]([email protected]))([email protected])
2416
+ '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
2417
+ '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
2418
+ '@radix-ui/react-direction': 1.1.1(@types/[email protected])([email protected])
2419
2420
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
2421
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
2422
+ '@radix-ui/react-use-previous': 1.1.1(@types/[email protected])([email protected])
2423
+ '@radix-ui/react-use-size': 1.1.1(@types/[email protected])([email protected])
2424
+ react: 19.1.0
2425
+ react-dom: 19.1.0([email protected])
2426
+ optionalDependencies:
2427
+ '@types/react': 19.1.8
2428
+ '@types/react-dom': 19.1.6(@types/[email protected])
2429
+
2430
2431
+ dependencies:
2432
+ '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
2433
+ react: 19.1.0
2434
+ optionalDependencies:
2435
+ '@types/react': 19.1.8
2436
+
2437
2438
+ dependencies:
2439
+ '@radix-ui/primitive': 1.1.2
2440
+ '@radix-ui/react-compose-refs': 1.1.2(@types/[email protected])([email protected])
2441
+ '@radix-ui/react-context': 1.1.2(@types/[email protected])([email protected])
2442
2443
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/[email protected])([email protected])
2444
+ '@radix-ui/react-use-previous': 1.1.1(@types/[email protected])([email protected])
2445
+ '@radix-ui/react-use-size': 1.1.1(@types/[email protected])([email protected])
2446
+ react: 19.1.0
2447
+ react-dom: 19.1.0([email protected])
2448
+ optionalDependencies:
2449
+ '@types/react': 19.1.8
2450
+ '@types/react-dom': 19.1.6(@types/[email protected])
2451
+
2452
2453
+ dependencies:
2454
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/[email protected])([email protected])
2455
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
2456
+ react: 19.1.0
2457
+ optionalDependencies:
2458
+ '@types/react': 19.1.8
2459
+
2460
2461
+ dependencies:
2462
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
2463
+ react: 19.1.0
2464
+ optionalDependencies:
2465
+ '@types/react': 19.1.8
2466
+
2467
2468
+ dependencies:
2469
+ react: 19.1.0
2470
+ optionalDependencies:
2471
+ '@types/react': 19.1.8
2472
+
2473
2474
+ dependencies:
2475
+ react: 19.1.0
2476
+ optionalDependencies:
2477
+ '@types/react': 19.1.8
2478
+
2479
2480
+ dependencies:
2481
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/[email protected])([email protected])
2482
+ react: 19.1.0
2483
+ optionalDependencies:
2484
+ '@types/react': 19.1.8
2485
+
2486
2487
  dependencies:
2488
  '@react-aria/interactions': 3.25.3([email protected]([email protected]))([email protected])
 
3022
 
3023
3024
 
3025
3026
+ dependencies:
3027
+ clsx: 2.1.1
3028
+
3029
3030
 
3031
 
4015
 
4016
4017
 
4018
4019
+
4020
4021
 
4022
 
4053
 
4054
4055
 
4056
4057
+
4058
4059
 
4060
src/components/ui/slider.tsx ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from 'react'
2
+ import * as SliderPrimitive from '@radix-ui/react-slider'
3
+
4
+ import { cn } from '@/lib/utils'
5
+
6
+ function Slider({
7
+ className,
8
+ defaultValue,
9
+ value,
10
+ min = 0,
11
+ max = 100,
12
+ ...props
13
+ }: React.ComponentProps<typeof SliderPrimitive.Root>) {
14
+ const _values = React.useMemo(
15
+ () =>
16
+ Array.isArray(value)
17
+ ? value
18
+ : Array.isArray(defaultValue)
19
+ ? defaultValue
20
+ : [min, max],
21
+ [value, defaultValue, min, max]
22
+ )
23
+
24
+ return (
25
+ <SliderPrimitive.Root
26
+ data-slot="slider"
27
+ defaultValue={defaultValue}
28
+ value={value}
29
+ min={min}
30
+ max={max}
31
+ className={cn(
32
+ 'relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col',
33
+ className
34
+ )}
35
+ {...props}
36
+ >
37
+ <SliderPrimitive.Track
38
+ data-slot="slider-track"
39
+ className={cn(
40
+ 'bg-muted relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5'
41
+ )}
42
+ >
43
+ <SliderPrimitive.Range
44
+ data-slot="slider-range"
45
+ className={cn(
46
+ 'bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full'
47
+ )}
48
+ />
49
+ </SliderPrimitive.Track>
50
+ {Array.from({ length: _values.length }, (_, index) => (
51
+ <SliderPrimitive.Thumb
52
+ data-slot="slider-thumb"
53
+ key={index}
54
+ className="border-primary bg-background ring-ring/50 block size-4 shrink-0 rounded-full border shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"
55
+ />
56
+ ))}
57
+ </SliderPrimitive.Root>
58
+ )
59
+ }
60
+
61
+ export { Slider }
src/components/ui/switch.tsx ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from 'react'
2
+ import * as SwitchPrimitive from '@radix-ui/react-switch'
3
+
4
+ import { cn } from '@/lib/utils'
5
+
6
+ function Switch({
7
+ className,
8
+ ...props
9
+ }: React.ComponentProps<typeof SwitchPrimitive.Root>) {
10
+ return (
11
+ <SwitchPrimitive.Root
12
+ data-slot="switch"
13
+ className={cn(
14
+ 'peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.5rem] w-12 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50',
15
+ className
16
+ )}
17
+ {...props}
18
+ >
19
+ <SwitchPrimitive.Thumb
20
+ data-slot="switch-thumb"
21
+ className={cn(
22
+ 'bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-7 data-[state=unchecked]:translate-x-0.5'
23
+ )}
24
+ />
25
+ </SwitchPrimitive.Root>
26
+ )
27
+ }
28
+
29
+ export { Switch }
src/index.css CHANGED
@@ -1,4 +1,9 @@
1
  @import 'tailwindcss';
 
 
 
 
 
2
 
3
  /*
4
  The default border color has changed to `currentcolor` in Tailwind CSS v4,
@@ -31,3 +36,135 @@ code {
31
  font-family:
32
  source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;
33
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  @import 'tailwindcss';
2
+ @import 'tw-animate-css';
3
+ /*
4
+ ---break---
5
+ */
6
+ @custom-variant dark (&:is(.dark *));
7
 
8
  /*
9
  The default border color has changed to `currentcolor` in Tailwind CSS v4,
 
36
  font-family:
37
  source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;
38
  }
39
+
40
+ /*
41
+ ---break---
42
+ */
43
+
44
+ @theme inline {
45
+ --radius-sm: calc(var(--radius) - 4px);
46
+ --radius-md: calc(var(--radius) - 2px);
47
+ --radius-lg: var(--radius);
48
+ --radius-xl: calc(var(--radius) + 4px);
49
+ --color-background: var(--background);
50
+ --color-foreground: var(--foreground);
51
+ --color-card: var(--card);
52
+ --color-card-foreground: var(--card-foreground);
53
+ --color-popover: var(--popover);
54
+ --color-popover-foreground: var(--popover-foreground);
55
+ --color-primary: var(--primary);
56
+ --color-primary-foreground: var(--primary-foreground);
57
+ --color-secondary: var(--secondary);
58
+ --color-secondary-foreground: var(--secondary-foreground);
59
+ --color-muted: var(--muted);
60
+ --color-muted-foreground: var(--muted-foreground);
61
+ --color-accent: var(--accent);
62
+ --color-accent-foreground: var(--accent-foreground);
63
+ --color-destructive: var(--destructive);
64
+ --color-border: var(--border);
65
+ --color-input: var(--input);
66
+ --color-ring: var(--ring);
67
+ --color-chart-1: var(--chart-1);
68
+ --color-chart-2: var(--chart-2);
69
+ --color-chart-3: var(--chart-3);
70
+ --color-chart-4: var(--chart-4);
71
+ --color-chart-5: var(--chart-5);
72
+ --color-sidebar: var(--sidebar);
73
+ --color-sidebar-foreground: var(--sidebar-foreground);
74
+ --color-sidebar-primary: var(--sidebar-primary);
75
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
76
+ --color-sidebar-accent: var(--sidebar-accent);
77
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
78
+ --color-sidebar-border: var(--sidebar-border);
79
+ --color-sidebar-ring: var(--sidebar-ring);
80
+ }
81
+
82
+ /*
83
+ ---break---
84
+ */
85
+
86
+ :root {
87
+ --radius: 0.625rem;
88
+ --background: oklch(0.98 0.01 220);
89
+ --foreground: oklch(0.145 0 0);
90
+ --card: oklch(1 0 0);
91
+ --card-foreground: oklch(0.145 0 0);
92
+ --popover: oklch(1 0 0);
93
+ --popover-foreground: oklch(0.145 0 0);
94
+ --primary: oklch(0.55 0.15 260);
95
+ --primary-foreground: oklch(0.985 0 0);
96
+ --secondary: oklch(0.96 0.02 240);
97
+ --secondary-foreground: oklch(0.3 0.05 260);
98
+ --muted: oklch(0.95 0.01 240);
99
+ --muted-foreground: oklch(0.556 0 0);
100
+ --accent: oklch(0.94 0.03 245);
101
+ --accent-foreground: oklch(0.35 0.06 260);
102
+ --destructive: oklch(0.577 0.245 27.325);
103
+ --border: oklch(0.9 0.02 240);
104
+ --input: oklch(0.92 0.02 240);
105
+ --ring: oklch(0.6 0.12 260);
106
+ --chart-1: oklch(0.55 0.15 260);
107
+ --chart-2: oklch(0.6 0.12 240);
108
+ --chart-3: oklch(0.65 0.1 220);
109
+ --chart-4: oklch(0.7 0.08 280);
110
+ --chart-5: oklch(0.75 0.06 300);
111
+ --sidebar: oklch(1 0 0);
112
+ --sidebar-foreground: oklch(0.145 0 0);
113
+ --sidebar-primary: oklch(0.55 0.15 260);
114
+ --sidebar-primary-foreground: oklch(0.985 0 0);
115
+ --sidebar-accent: oklch(0.94 0.03 245);
116
+ --sidebar-accent-foreground: oklch(0.35 0.06 260);
117
+ --sidebar-border: oklch(0.9 0.02 240);
118
+ --sidebar-ring: oklch(0.6 0.12 260);
119
+ }
120
+
121
+ /*
122
+ ---break---
123
+ */
124
+
125
+ .dark {
126
+ --background: oklch(0.12 0.02 260);
127
+ --foreground: oklch(0.985 0 0);
128
+ --card: oklch(0.18 0.03 260);
129
+ --card-foreground: oklch(0.985 0 0);
130
+ --popover: oklch(0.18 0.03 260);
131
+ --popover-foreground: oklch(0.985 0 0);
132
+ --primary: oklch(0.7 0.12 260);
133
+ --primary-foreground: oklch(0.1 0.02 260);
134
+ --secondary: oklch(0.22 0.04 260);
135
+ --secondary-foreground: oklch(0.985 0 0);
136
+ --muted: oklch(0.22 0.04 260);
137
+ --muted-foreground: oklch(0.708 0 0);
138
+ --accent: oklch(0.25 0.05 260);
139
+ --accent-foreground: oklch(0.985 0 0);
140
+ --destructive: oklch(0.704 0.191 22.216);
141
+ --border: oklch(0.3 0.05 260);
142
+ --input: oklch(0.25 0.04 260);
143
+ --ring: oklch(0.6 0.12 260);
144
+ --chart-1: oklch(0.65 0.15 260);
145
+ --chart-2: oklch(0.6 0.12 240);
146
+ --chart-3: oklch(0.55 0.1 220);
147
+ --chart-4: oklch(0.7 0.08 280);
148
+ --chart-5: oklch(0.75 0.06 300);
149
+ --sidebar: oklch(0.16 0.03 260);
150
+ --sidebar-foreground: oklch(0.985 0 0);
151
+ --sidebar-primary: oklch(0.65 0.15 260);
152
+ --sidebar-primary-foreground: oklch(0.985 0 0);
153
+ --sidebar-accent: oklch(0.25 0.05 260);
154
+ --sidebar-accent-foreground: oklch(0.985 0 0);
155
+ --sidebar-border: oklch(0.3 0.05 260);
156
+ --sidebar-ring: oklch(0.6 0.12 260);
157
+ }
158
+
159
+ /*
160
+ ---break---
161
+ */
162
+
163
+ @layer base {
164
+ * {
165
+ @apply border-border outline-ring/50;
166
+ }
167
+ body {
168
+ @apply bg-background text-foreground;
169
+ }
170
+ }
src/lib/utils.ts ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ import { clsx, type ClassValue } from "clsx"
2
+ import { twMerge } from "tailwind-merge"
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
tsconfig.json CHANGED
@@ -15,7 +15,11 @@
15
  "noEmit": true,
16
  "noFallthroughCasesInSwitch": true,
17
  "jsx": "react-jsx",
18
- "types": ["vite/client", "vite-plugin-svgr/client"]
 
 
 
 
19
  },
20
  "include": ["src"]
21
  }
 
15
  "noEmit": true,
16
  "noFallthroughCasesInSwitch": true,
17
  "jsx": "react-jsx",
18
+ "types": ["vite/client", "vite-plugin-svgr/client"],
19
+ "baseUrl": ".",
20
+ "paths": {
21
+ "@/*": ["./src/*"]
22
+ }
23
  },
24
  "include": ["src"]
25
  }
vite.config.ts CHANGED
@@ -1,3 +1,4 @@
 
1
  import { defineConfig } from 'vite'
2
  import react from '@vitejs/plugin-react-swc'
3
  import tailwindcss from '@tailwindcss/vite'
@@ -5,5 +6,10 @@ import tailwindcss from '@tailwindcss/vite'
5
  // https://vitejs.dev/config/
6
  export default defineConfig({
7
  base: '/',
8
- plugins: [react(), tailwindcss()]
 
 
 
 
 
9
  })
 
1
+ import path from 'path'
2
  import { defineConfig } from 'vite'
3
  import react from '@vitejs/plugin-react-swc'
4
  import tailwindcss from '@tailwindcss/vite'
 
6
  // https://vitejs.dev/config/
7
  export default defineConfig({
8
  base: '/',
9
+ plugins: [react(), tailwindcss()],
10
+ resolve: {
11
+ alias: {
12
+ '@': path.resolve(__dirname, './src')
13
+ }
14
+ }
15
  })