Vokturz commited on
Commit
c29872e
·
1 Parent(s): 93d1827

add more shadcn components

Browse files
package.json CHANGED
@@ -5,8 +5,12 @@
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",
 
5
  "private": true,
6
  "dependencies": {
7
  "@headlessui/react": "^2.2.4",
8
+ "@radix-ui/react-select": "^2.2.5",
9
+ "@radix-ui/react-separator": "^1.1.7",
10
  "@radix-ui/react-slider": "^1.3.5",
11
+ "@radix-ui/react-slot": "^1.2.3",
12
  "@radix-ui/react-switch": "^1.2.5",
13
+ "@radix-ui/react-tooltip": "^1.2.7",
14
  "@tailwindcss/typography": "^0.5.16",
15
  "@tailwindcss/vite": "^4.1.11",
16
  "@testing-library/dom": "^10.4.0",
pnpm-lock.yaml CHANGED
@@ -11,12 +11,24 @@ importers:
11
  '@headlessui/react':
12
  specifier: ^2.2.4
13
  version: 2.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
 
 
 
 
 
 
14
  '@radix-ui/react-slider':
15
  specifier: ^1.3.5
16
  version: 1.3.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
 
 
 
17
  '@radix-ui/react-switch':
18
  specifier: ^1.2.5
19
  version: 1.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
 
 
 
20
  '@tailwindcss/typography':
21
  specifier: ^0.5.16
22
  version: 0.5.16(tailwindcss@4.1.11)
@@ -431,6 +443,19 @@ packages:
431
  '@radix-ui/primitive@1.1.2':
432
  resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==}
433
 
 
 
 
 
 
 
 
 
 
 
 
 
 
434
  '@radix-ui/react-collection@1.1.7':
435
  resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
436
  peerDependencies:
@@ -471,6 +496,89 @@ packages:
471
  '@types/react':
472
  optional: true
473
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
474
  '@radix-ui/react-primitive@2.1.3':
475
  resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
476
  peerDependencies:
@@ -484,6 +592,32 @@ packages:
484
  '@types/react-dom':
485
  optional: true
486
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
487
  '@radix-ui/react-slider@1.3.5':
488
  resolution: {integrity: sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==}
489
  peerDependencies:
@@ -519,6 +653,28 @@ packages:
519
  '@types/react-dom':
520
  optional: true
521
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
522
  '@radix-ui/react-use-controllable-state@1.2.2':
523
  resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
524
  peerDependencies:
@@ -537,6 +693,15 @@ packages:
537
  '@types/react':
538
  optional: true
539
 
 
 
 
 
 
 
 
 
 
540
  '@radix-ui/react-use-layout-effect@1.1.1':
541
  resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
542
  peerDependencies:
@@ -555,6 +720,15 @@ packages:
555
  '@types/react':
556
  optional: true
557
 
 
 
 
 
 
 
 
 
 
558
  '@radix-ui/react-use-size@1.1.1':
559
  resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
560
  peerDependencies:
@@ -564,6 +738,22 @@ packages:
564
  '@types/react':
565
  optional: true
566
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
567
  '@react-aria/focus@3.20.5':
568
  resolution: {integrity: sha512-JpFtXmWQ0Oca7FcvkqgjSyo6xEP7v3oQOLUId6o0xTvm4AD5W0mU2r3lYrbhsJ+XxdUUX4AVR5473sZZ85kU4A==}
569
  peerDependencies:
@@ -1086,6 +1276,10 @@ packages:
1086
  argparse@2.0.1:
1087
  resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
1088
 
 
 
 
 
1089
  aria-query@5.3.0:
1090
  resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
1091
 
@@ -1237,6 +1431,9 @@ packages:
1237
  resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
1238
  engines: {node: '>=8'}
1239
 
 
 
 
1240
  devlop@1.1.0:
1241
  resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
1242
 
@@ -1326,6 +1523,10 @@ packages:
1326
  resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1327
  engines: {node: '>=6.9.0'}
1328
 
 
 
 
 
1329
  globrex@0.1.2:
1330
  resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
1331
 
@@ -1816,6 +2017,36 @@ packages:
1816
  resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
1817
  engines: {node: '>=0.10.0'}
1818
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1819
  react-syntax-highlighter@15.6.1:
1820
  resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==}
1821
  peerDependencies:
@@ -2003,6 +2234,26 @@ packages:
2003
  peerDependencies:
2004
  browserslist: '>= 4.21.0'
2005
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2006
  use-sync-external-store@1.5.0:
2007
  resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
2008
  peerDependencies:
@@ -2369,6 +2620,15 @@ snapshots:
2369
 
2370
  '@radix-ui/primitive@1.1.2': {}
2371
 
 
 
 
 
 
 
 
 
 
2372
  '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2373
  dependencies:
2374
  '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0)
@@ -2399,6 +2659,81 @@ snapshots:
2399
  optionalDependencies:
2400
  '@types/react': 19.1.8
2401
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2402
  '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2403
  dependencies:
2404
  '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0)
@@ -2408,6 +2743,44 @@ snapshots:
2408
  '@types/react': 19.1.8
2409
  '@types/react-dom': 19.1.6(@types/react@19.1.8)
2410
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2411
  '@radix-ui/react-slider@1.3.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2412
  dependencies:
2413
  '@radix-ui/number': 1.1.1
@@ -2449,6 +2822,32 @@ snapshots:
2449
  '@types/react': 19.1.8
2450
  '@types/react-dom': 19.1.6(@types/react@19.1.8)
2451
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2452
  '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.8)(react@19.1.0)':
2453
  dependencies:
2454
  '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0)
@@ -2464,6 +2863,13 @@ snapshots:
2464
  optionalDependencies:
2465
  '@types/react': 19.1.8
2466
 
 
 
 
 
 
 
 
2467
  '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.8)(react@19.1.0)':
2468
  dependencies:
2469
  react: 19.1.0
@@ -2476,6 +2882,13 @@ snapshots:
2476
  optionalDependencies:
2477
  '@types/react': 19.1.8
2478
 
 
 
 
 
 
 
 
2479
  '@radix-ui/react-use-size@1.1.1(@types/react@19.1.8)(react@19.1.0)':
2480
  dependencies:
2481
  '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0)
@@ -2483,6 +2896,17 @@ snapshots:
2483
  optionalDependencies:
2484
  '@types/react': 19.1.8
2485
 
 
 
 
 
 
 
 
 
 
 
 
2486
  '@react-aria/focus@3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2487
  dependencies:
2488
  '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
@@ -2958,6 +3382,10 @@ snapshots:
2958
 
2959
  argparse@2.0.1: {}
2960
 
 
 
 
 
2961
  aria-query@5.3.0:
2962
  dependencies:
2963
  dequal: 2.0.3
@@ -3090,6 +3518,8 @@ snapshots:
3090
 
3091
  detect-libc@2.0.4: {}
3092
 
 
 
3093
  devlop@1.1.0:
3094
  dependencies:
3095
  dequal: 2.0.3
@@ -3180,6 +3610,8 @@ snapshots:
3180
 
3181
  gensync@1.0.0-beta.2: {}
3182
 
 
 
3183
  globrex@0.1.2: {}
3184
 
3185
  graceful-fs@4.2.11: {}
@@ -3870,6 +4302,33 @@ snapshots:
3870
 
3871
  react-refresh@0.17.0: {}
3872
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3873
  react-syntax-highlighter@15.6.1(react@19.1.0):
3874
  dependencies:
3875
  '@babel/runtime': 7.27.6
@@ -4098,6 +4557,21 @@ snapshots:
4098
  escalade: 3.2.0
4099
  picocolors: 1.1.1
4100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4101
  use-sync-external-store@1.5.0(react@19.1.0):
4102
  dependencies:
4103
  react: 19.1.0
 
11
  '@headlessui/react':
12
  specifier: ^2.2.4
13
  version: 2.2.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
14
+ '@radix-ui/react-select':
15
+ specifier: ^2.2.5
16
+ version: 2.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
17
+ '@radix-ui/react-separator':
18
+ specifier: ^1.1.7
19
+ version: 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
20
  '@radix-ui/react-slider':
21
  specifier: ^1.3.5
22
  version: 1.3.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
23
+ '@radix-ui/react-slot':
24
+ specifier: ^1.2.3
25
+ version: 1.2.3(@types/react@19.1.8)(react@19.1.0)
26
  '@radix-ui/react-switch':
27
  specifier: ^1.2.5
28
  version: 1.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
29
+ '@radix-ui/react-tooltip':
30
+ specifier: ^1.2.7
31
+ version: 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
32
  '@tailwindcss/typography':
33
  specifier: ^0.5.16
34
  version: 0.5.16(tailwindcss@4.1.11)
 
443
  '@radix-ui/primitive@1.1.2':
444
  resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==}
445
 
446
+ '@radix-ui/react-arrow@1.1.7':
447
+ resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==}
448
+ peerDependencies:
449
+ '@types/react': '*'
450
+ '@types/react-dom': '*'
451
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
452
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
453
+ peerDependenciesMeta:
454
+ '@types/react':
455
+ optional: true
456
+ '@types/react-dom':
457
+ optional: true
458
+
459
  '@radix-ui/react-collection@1.1.7':
460
  resolution: {integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==}
461
  peerDependencies:
 
496
  '@types/react':
497
  optional: true
498
 
499
+ '@radix-ui/react-dismissable-layer@1.1.10':
500
+ resolution: {integrity: sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==}
501
+ peerDependencies:
502
+ '@types/react': '*'
503
+ '@types/react-dom': '*'
504
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
505
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
506
+ peerDependenciesMeta:
507
+ '@types/react':
508
+ optional: true
509
+ '@types/react-dom':
510
+ optional: true
511
+
512
+ '@radix-ui/react-focus-guards@1.1.2':
513
+ resolution: {integrity: sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==}
514
+ peerDependencies:
515
+ '@types/react': '*'
516
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
517
+ peerDependenciesMeta:
518
+ '@types/react':
519
+ optional: true
520
+
521
+ '@radix-ui/react-focus-scope@1.1.7':
522
+ resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==}
523
+ peerDependencies:
524
+ '@types/react': '*'
525
+ '@types/react-dom': '*'
526
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
527
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
528
+ peerDependenciesMeta:
529
+ '@types/react':
530
+ optional: true
531
+ '@types/react-dom':
532
+ optional: true
533
+
534
+ '@radix-ui/react-id@1.1.1':
535
+ resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==}
536
+ peerDependencies:
537
+ '@types/react': '*'
538
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
539
+ peerDependenciesMeta:
540
+ '@types/react':
541
+ optional: true
542
+
543
+ '@radix-ui/react-popper@1.2.7':
544
+ resolution: {integrity: sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==}
545
+ peerDependencies:
546
+ '@types/react': '*'
547
+ '@types/react-dom': '*'
548
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
549
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
550
+ peerDependenciesMeta:
551
+ '@types/react':
552
+ optional: true
553
+ '@types/react-dom':
554
+ optional: true
555
+
556
+ '@radix-ui/react-portal@1.1.9':
557
+ resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==}
558
+ peerDependencies:
559
+ '@types/react': '*'
560
+ '@types/react-dom': '*'
561
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
562
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
563
+ peerDependenciesMeta:
564
+ '@types/react':
565
+ optional: true
566
+ '@types/react-dom':
567
+ optional: true
568
+
569
+ '@radix-ui/react-presence@1.1.4':
570
+ resolution: {integrity: sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==}
571
+ peerDependencies:
572
+ '@types/react': '*'
573
+ '@types/react-dom': '*'
574
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
575
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
576
+ peerDependenciesMeta:
577
+ '@types/react':
578
+ optional: true
579
+ '@types/react-dom':
580
+ optional: true
581
+
582
  '@radix-ui/react-primitive@2.1.3':
583
  resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==}
584
  peerDependencies:
 
592
  '@types/react-dom':
593
  optional: true
594
 
595
+ '@radix-ui/react-select@2.2.5':
596
+ resolution: {integrity: sha512-HnMTdXEVuuyzx63ME0ut4+sEMYW6oouHWNGUZc7ddvUWIcfCva/AMoqEW/3wnEllriMWBa0RHspCYnfCWJQYmA==}
597
+ peerDependencies:
598
+ '@types/react': '*'
599
+ '@types/react-dom': '*'
600
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
601
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
602
+ peerDependenciesMeta:
603
+ '@types/react':
604
+ optional: true
605
+ '@types/react-dom':
606
+ optional: true
607
+
608
+ '@radix-ui/react-separator@1.1.7':
609
+ resolution: {integrity: sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==}
610
+ peerDependencies:
611
+ '@types/react': '*'
612
+ '@types/react-dom': '*'
613
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
614
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
615
+ peerDependenciesMeta:
616
+ '@types/react':
617
+ optional: true
618
+ '@types/react-dom':
619
+ optional: true
620
+
621
  '@radix-ui/react-slider@1.3.5':
622
  resolution: {integrity: sha512-rkfe2pU2NBAYfGaxa3Mqosi7VZEWX5CxKaanRv0vZd4Zhl9fvQrg0VM93dv3xGLGfrHuoTRF3JXH8nb9g+B3fw==}
623
  peerDependencies:
 
653
  '@types/react-dom':
654
  optional: true
655
 
656
+ '@radix-ui/react-tooltip@1.2.7':
657
+ resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==}
658
+ peerDependencies:
659
+ '@types/react': '*'
660
+ '@types/react-dom': '*'
661
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
662
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
663
+ peerDependenciesMeta:
664
+ '@types/react':
665
+ optional: true
666
+ '@types/react-dom':
667
+ optional: true
668
+
669
+ '@radix-ui/react-use-callback-ref@1.1.1':
670
+ resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==}
671
+ peerDependencies:
672
+ '@types/react': '*'
673
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
674
+ peerDependenciesMeta:
675
+ '@types/react':
676
+ optional: true
677
+
678
  '@radix-ui/react-use-controllable-state@1.2.2':
679
  resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==}
680
  peerDependencies:
 
693
  '@types/react':
694
  optional: true
695
 
696
+ '@radix-ui/react-use-escape-keydown@1.1.1':
697
+ resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==}
698
+ peerDependencies:
699
+ '@types/react': '*'
700
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
701
+ peerDependenciesMeta:
702
+ '@types/react':
703
+ optional: true
704
+
705
  '@radix-ui/react-use-layout-effect@1.1.1':
706
  resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==}
707
  peerDependencies:
 
720
  '@types/react':
721
  optional: true
722
 
723
+ '@radix-ui/react-use-rect@1.1.1':
724
+ resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==}
725
+ peerDependencies:
726
+ '@types/react': '*'
727
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
728
+ peerDependenciesMeta:
729
+ '@types/react':
730
+ optional: true
731
+
732
  '@radix-ui/react-use-size@1.1.1':
733
  resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==}
734
  peerDependencies:
 
738
  '@types/react':
739
  optional: true
740
 
741
+ '@radix-ui/react-visually-hidden@1.2.3':
742
+ resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==}
743
+ peerDependencies:
744
+ '@types/react': '*'
745
+ '@types/react-dom': '*'
746
+ react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
747
+ react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc
748
+ peerDependenciesMeta:
749
+ '@types/react':
750
+ optional: true
751
+ '@types/react-dom':
752
+ optional: true
753
+
754
+ '@radix-ui/rect@1.1.1':
755
+ resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
756
+
757
  '@react-aria/focus@3.20.5':
758
  resolution: {integrity: sha512-JpFtXmWQ0Oca7FcvkqgjSyo6xEP7v3oQOLUId6o0xTvm4AD5W0mU2r3lYrbhsJ+XxdUUX4AVR5473sZZ85kU4A==}
759
  peerDependencies:
 
1276
  argparse@2.0.1:
1277
  resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
1278
 
1279
+ aria-hidden@1.2.6:
1280
+ resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
1281
+ engines: {node: '>=10'}
1282
+
1283
  aria-query@5.3.0:
1284
  resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
1285
 
 
1431
  resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
1432
  engines: {node: '>=8'}
1433
 
1434
+ detect-node-es@1.1.0:
1435
+ resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
1436
+
1437
  devlop@1.1.0:
1438
  resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
1439
 
 
1523
  resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1524
  engines: {node: '>=6.9.0'}
1525
 
1526
+ get-nonce@1.0.1:
1527
+ resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
1528
+ engines: {node: '>=6'}
1529
+
1530
  globrex@0.1.2:
1531
  resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
1532
 
 
2017
  resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
2018
  engines: {node: '>=0.10.0'}
2019
 
2020
+ react-remove-scroll-bar@2.3.8:
2021
+ resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==}
2022
+ engines: {node: '>=10'}
2023
+ peerDependencies:
2024
+ '@types/react': '*'
2025
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
2026
+ peerDependenciesMeta:
2027
+ '@types/react':
2028
+ optional: true
2029
+
2030
+ react-remove-scroll@2.7.1:
2031
+ resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==}
2032
+ engines: {node: '>=10'}
2033
+ peerDependencies:
2034
+ '@types/react': '*'
2035
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
2036
+ peerDependenciesMeta:
2037
+ '@types/react':
2038
+ optional: true
2039
+
2040
+ react-style-singleton@2.2.3:
2041
+ resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==}
2042
+ engines: {node: '>=10'}
2043
+ peerDependencies:
2044
+ '@types/react': '*'
2045
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
2046
+ peerDependenciesMeta:
2047
+ '@types/react':
2048
+ optional: true
2049
+
2050
  react-syntax-highlighter@15.6.1:
2051
  resolution: {integrity: sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==}
2052
  peerDependencies:
 
2234
  peerDependencies:
2235
  browserslist: '>= 4.21.0'
2236
 
2237
+ use-callback-ref@1.3.3:
2238
+ resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==}
2239
+ engines: {node: '>=10'}
2240
+ peerDependencies:
2241
+ '@types/react': '*'
2242
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
2243
+ peerDependenciesMeta:
2244
+ '@types/react':
2245
+ optional: true
2246
+
2247
+ use-sidecar@1.1.3:
2248
+ resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==}
2249
+ engines: {node: '>=10'}
2250
+ peerDependencies:
2251
+ '@types/react': '*'
2252
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc
2253
+ peerDependenciesMeta:
2254
+ '@types/react':
2255
+ optional: true
2256
+
2257
  use-sync-external-store@1.5.0:
2258
  resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
2259
  peerDependencies:
 
2620
 
2621
  '@radix-ui/primitive@1.1.2': {}
2622
 
2623
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2624
+ dependencies:
2625
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2626
+ react: 19.1.0
2627
+ react-dom: 19.1.0(react@19.1.0)
2628
+ optionalDependencies:
2629
+ '@types/react': 19.1.8
2630
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2631
+
2632
  '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2633
  dependencies:
2634
  '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0)
 
2659
  optionalDependencies:
2660
  '@types/react': 19.1.8
2661
 
2662
+ '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2663
+ dependencies:
2664
+ '@radix-ui/primitive': 1.1.2
2665
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2666
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2667
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2668
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2669
+ react: 19.1.0
2670
+ react-dom: 19.1.0(react@19.1.0)
2671
+ optionalDependencies:
2672
+ '@types/react': 19.1.8
2673
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2674
+
2675
+ '@radix-ui/react-focus-guards@1.1.2(@types/react@19.1.8)(react@19.1.0)':
2676
+ dependencies:
2677
+ react: 19.1.0
2678
+ optionalDependencies:
2679
+ '@types/react': 19.1.8
2680
+
2681
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2682
+ dependencies:
2683
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2684
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2685
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2686
+ react: 19.1.0
2687
+ react-dom: 19.1.0(react@19.1.0)
2688
+ optionalDependencies:
2689
+ '@types/react': 19.1.8
2690
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2691
+
2692
+ '@radix-ui/react-id@1.1.1(@types/react@19.1.8)(react@19.1.0)':
2693
+ dependencies:
2694
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2695
+ react: 19.1.0
2696
+ optionalDependencies:
2697
+ '@types/react': 19.1.8
2698
+
2699
+ '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2700
+ dependencies:
2701
+ '@floating-ui/react-dom': 2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2702
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2703
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2704
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2705
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2706
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2707
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2708
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2709
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2710
+ '@radix-ui/rect': 1.1.1
2711
+ react: 19.1.0
2712
+ react-dom: 19.1.0(react@19.1.0)
2713
+ optionalDependencies:
2714
+ '@types/react': 19.1.8
2715
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2716
+
2717
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2718
+ dependencies:
2719
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2720
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2721
+ react: 19.1.0
2722
+ react-dom: 19.1.0(react@19.1.0)
2723
+ optionalDependencies:
2724
+ '@types/react': 19.1.8
2725
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2726
+
2727
+ '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2728
+ dependencies:
2729
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2730
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2731
+ react: 19.1.0
2732
+ react-dom: 19.1.0(react@19.1.0)
2733
+ optionalDependencies:
2734
+ '@types/react': 19.1.8
2735
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2736
+
2737
  '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2738
  dependencies:
2739
  '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0)
 
2743
  '@types/react': 19.1.8
2744
  '@types/react-dom': 19.1.6(@types/react@19.1.8)
2745
 
2746
+ '@radix-ui/react-select@2.2.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2747
+ dependencies:
2748
+ '@radix-ui/number': 1.1.1
2749
+ '@radix-ui/primitive': 1.1.2
2750
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2751
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2752
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2753
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2754
+ '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2755
+ '@radix-ui/react-focus-guards': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2756
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2757
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2758
+ '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2759
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2760
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2761
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0)
2762
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2763
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0)
2764
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2765
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2766
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2767
+ aria-hidden: 1.2.6
2768
+ react: 19.1.0
2769
+ react-dom: 19.1.0(react@19.1.0)
2770
+ react-remove-scroll: 2.7.1(@types/react@19.1.8)(react@19.1.0)
2771
+ optionalDependencies:
2772
+ '@types/react': 19.1.8
2773
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2774
+
2775
+ '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2776
+ dependencies:
2777
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2778
+ react: 19.1.0
2779
+ react-dom: 19.1.0(react@19.1.0)
2780
+ optionalDependencies:
2781
+ '@types/react': 19.1.8
2782
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2783
+
2784
  '@radix-ui/react-slider@1.3.5(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2785
  dependencies:
2786
  '@radix-ui/number': 1.1.1
 
2822
  '@types/react': 19.1.8
2823
  '@types/react-dom': 19.1.6(@types/react@19.1.8)
2824
 
2825
+ '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2826
+ dependencies:
2827
+ '@radix-ui/primitive': 1.1.2
2828
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2829
+ '@radix-ui/react-context': 1.1.2(@types/react@19.1.8)(react@19.1.0)
2830
+ '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2831
+ '@radix-ui/react-id': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2832
+ '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2833
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2834
+ '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2835
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2836
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.1.8)(react@19.1.0)
2837
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.8)(react@19.1.0)
2838
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2839
+ react: 19.1.0
2840
+ react-dom: 19.1.0(react@19.1.0)
2841
+ optionalDependencies:
2842
+ '@types/react': 19.1.8
2843
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2844
+
2845
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.8)(react@19.1.0)':
2846
+ dependencies:
2847
+ react: 19.1.0
2848
+ optionalDependencies:
2849
+ '@types/react': 19.1.8
2850
+
2851
  '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.8)(react@19.1.0)':
2852
  dependencies:
2853
  '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.8)(react@19.1.0)
 
2863
  optionalDependencies:
2864
  '@types/react': 19.1.8
2865
 
2866
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.8)(react@19.1.0)':
2867
+ dependencies:
2868
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.8)(react@19.1.0)
2869
+ react: 19.1.0
2870
+ optionalDependencies:
2871
+ '@types/react': 19.1.8
2872
+
2873
  '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.8)(react@19.1.0)':
2874
  dependencies:
2875
  react: 19.1.0
 
2882
  optionalDependencies:
2883
  '@types/react': 19.1.8
2884
 
2885
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.8)(react@19.1.0)':
2886
+ dependencies:
2887
+ '@radix-ui/rect': 1.1.1
2888
+ react: 19.1.0
2889
+ optionalDependencies:
2890
+ '@types/react': 19.1.8
2891
+
2892
  '@radix-ui/react-use-size@1.1.1(@types/react@19.1.8)(react@19.1.0)':
2893
  dependencies:
2894
  '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.8)(react@19.1.0)
 
2896
  optionalDependencies:
2897
  '@types/react': 19.1.8
2898
 
2899
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2900
+ dependencies:
2901
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.6(@types/react@19.1.8))(@types/react@19.1.8)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
2902
+ react: 19.1.0
2903
+ react-dom: 19.1.0(react@19.1.0)
2904
+ optionalDependencies:
2905
+ '@types/react': 19.1.8
2906
+ '@types/react-dom': 19.1.6(@types/react@19.1.8)
2907
+
2908
+ '@radix-ui/rect@1.1.1': {}
2909
+
2910
  '@react-aria/focus@3.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
2911
  dependencies:
2912
  '@react-aria/interactions': 3.25.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
 
3382
 
3383
  argparse@2.0.1: {}
3384
 
3385
+ aria-hidden@1.2.6:
3386
+ dependencies:
3387
+ tslib: 2.8.1
3388
+
3389
  aria-query@5.3.0:
3390
  dependencies:
3391
  dequal: 2.0.3
 
3518
 
3519
  detect-libc@2.0.4: {}
3520
 
3521
+ detect-node-es@1.1.0: {}
3522
+
3523
  devlop@1.1.0:
3524
  dependencies:
3525
  dequal: 2.0.3
 
3610
 
3611
  gensync@1.0.0-beta.2: {}
3612
 
3613
+ get-nonce@1.0.1: {}
3614
+
3615
  globrex@0.1.2: {}
3616
 
3617
  graceful-fs@4.2.11: {}
 
4302
 
4303
  react-refresh@0.17.0: {}
4304
 
4305
+ react-remove-scroll-bar@2.3.8(@types/react@19.1.8)(react@19.1.0):
4306
+ dependencies:
4307
+ react: 19.1.0
4308
+ react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0)
4309
+ tslib: 2.8.1
4310
+ optionalDependencies:
4311
+ '@types/react': 19.1.8
4312
+
4313
+ react-remove-scroll@2.7.1(@types/react@19.1.8)(react@19.1.0):
4314
+ dependencies:
4315
+ react: 19.1.0
4316
+ react-remove-scroll-bar: 2.3.8(@types/react@19.1.8)(react@19.1.0)
4317
+ react-style-singleton: 2.2.3(@types/react@19.1.8)(react@19.1.0)
4318
+ tslib: 2.8.1
4319
+ use-callback-ref: 1.3.3(@types/react@19.1.8)(react@19.1.0)
4320
+ use-sidecar: 1.1.3(@types/react@19.1.8)(react@19.1.0)
4321
+ optionalDependencies:
4322
+ '@types/react': 19.1.8
4323
+
4324
+ react-style-singleton@2.2.3(@types/react@19.1.8)(react@19.1.0):
4325
+ dependencies:
4326
+ get-nonce: 1.0.1
4327
+ react: 19.1.0
4328
+ tslib: 2.8.1
4329
+ optionalDependencies:
4330
+ '@types/react': 19.1.8
4331
+
4332
  react-syntax-highlighter@15.6.1(react@19.1.0):
4333
  dependencies:
4334
  '@babel/runtime': 7.27.6
 
4557
  escalade: 3.2.0
4558
  picocolors: 1.1.1
4559
 
4560
+ use-callback-ref@1.3.3(@types/react@19.1.8)(react@19.1.0):
4561
+ dependencies:
4562
+ react: 19.1.0
4563
+ tslib: 2.8.1
4564
+ optionalDependencies:
4565
+ '@types/react': 19.1.8
4566
+
4567
+ use-sidecar@1.1.3(@types/react@19.1.8)(react@19.1.0):
4568
+ dependencies:
4569
+ detect-node-es: 1.1.0
4570
+ react: 19.1.0
4571
+ tslib: 2.8.1
4572
+ optionalDependencies:
4573
+ '@types/react': 19.1.8
4574
+
4575
  use-sync-external-store@1.5.0(react@19.1.0):
4576
  dependencies:
4577
  react: 19.1.0
src/components/ui/button.tsx ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+ import { Slot } from "@radix-ui/react-slot"
3
+ import { cva, type VariantProps } from "class-variance-authority"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ const buttonVariants = cva(
8
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default:
13
+ "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
14
+ destructive:
15
+ "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
16
+ outline:
17
+ "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
18
+ secondary:
19
+ "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
20
+ ghost:
21
+ "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
22
+ link: "text-primary underline-offset-4 hover:underline",
23
+ },
24
+ size: {
25
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
26
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
27
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
28
+ icon: "size-9",
29
+ },
30
+ },
31
+ defaultVariants: {
32
+ variant: "default",
33
+ size: "default",
34
+ },
35
+ }
36
+ )
37
+
38
+ function Button({
39
+ className,
40
+ variant,
41
+ size,
42
+ asChild = false,
43
+ ...props
44
+ }: React.ComponentProps<"button"> &
45
+ VariantProps<typeof buttonVariants> & {
46
+ asChild?: boolean
47
+ }) {
48
+ const Comp = asChild ? Slot : "button"
49
+
50
+ return (
51
+ <Comp
52
+ data-slot="button"
53
+ className={cn(buttonVariants({ variant, size, className }))}
54
+ {...props}
55
+ />
56
+ )
57
+ }
58
+
59
+ export { Button, buttonVariants }
src/components/ui/input.tsx ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+
3
+ import { cn } from "@/lib/utils"
4
+
5
+ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
6
+ return (
7
+ <input
8
+ type={type}
9
+ data-slot="input"
10
+ className={cn(
11
+ "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
12
+ "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
13
+ "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
14
+ className
15
+ )}
16
+ {...props}
17
+ />
18
+ )
19
+ }
20
+
21
+ export { Input }
src/components/ui/select.tsx ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+ import * as SelectPrimitive from "@radix-ui/react-select"
3
+ import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react"
4
+
5
+ import { cn } from "@/lib/utils"
6
+
7
+ function Select({
8
+ ...props
9
+ }: React.ComponentProps<typeof SelectPrimitive.Root>) {
10
+ return <SelectPrimitive.Root data-slot="select" {...props} />
11
+ }
12
+
13
+ function SelectGroup({
14
+ ...props
15
+ }: React.ComponentProps<typeof SelectPrimitive.Group>) {
16
+ return <SelectPrimitive.Group data-slot="select-group" {...props} />
17
+ }
18
+
19
+ function SelectValue({
20
+ ...props
21
+ }: React.ComponentProps<typeof SelectPrimitive.Value>) {
22
+ return <SelectPrimitive.Value data-slot="select-value" {...props} />
23
+ }
24
+
25
+ function SelectTrigger({
26
+ className,
27
+ size = "default",
28
+ children,
29
+ ...props
30
+ }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
31
+ size?: "sm" | "default"
32
+ }) {
33
+ return (
34
+ <SelectPrimitive.Trigger
35
+ data-slot="select-trigger"
36
+ data-size={size}
37
+ className={cn(
38
+ "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
39
+ className
40
+ )}
41
+ {...props}
42
+ >
43
+ {children}
44
+ <SelectPrimitive.Icon asChild>
45
+ <ChevronDownIcon className="size-4 opacity-50" />
46
+ </SelectPrimitive.Icon>
47
+ </SelectPrimitive.Trigger>
48
+ )
49
+ }
50
+
51
+ function SelectContent({
52
+ className,
53
+ children,
54
+ position = "popper",
55
+ ...props
56
+ }: React.ComponentProps<typeof SelectPrimitive.Content>) {
57
+ return (
58
+ <SelectPrimitive.Portal>
59
+ <SelectPrimitive.Content
60
+ data-slot="select-content"
61
+ className={cn(
62
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
63
+ position === "popper" &&
64
+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
65
+ className
66
+ )}
67
+ position={position}
68
+ {...props}
69
+ >
70
+ <SelectScrollUpButton />
71
+ <SelectPrimitive.Viewport
72
+ className={cn(
73
+ "p-1",
74
+ position === "popper" &&
75
+ "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"
76
+ )}
77
+ >
78
+ {children}
79
+ </SelectPrimitive.Viewport>
80
+ <SelectScrollDownButton />
81
+ </SelectPrimitive.Content>
82
+ </SelectPrimitive.Portal>
83
+ )
84
+ }
85
+
86
+ function SelectLabel({
87
+ className,
88
+ ...props
89
+ }: React.ComponentProps<typeof SelectPrimitive.Label>) {
90
+ return (
91
+ <SelectPrimitive.Label
92
+ data-slot="select-label"
93
+ className={cn("text-muted-foreground px-2 py-1.5 text-xs", className)}
94
+ {...props}
95
+ />
96
+ )
97
+ }
98
+
99
+ function SelectItem({
100
+ className,
101
+ children,
102
+ ...props
103
+ }: React.ComponentProps<typeof SelectPrimitive.Item>) {
104
+ return (
105
+ <SelectPrimitive.Item
106
+ data-slot="select-item"
107
+ className={cn(
108
+ "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
109
+ className
110
+ )}
111
+ {...props}
112
+ >
113
+ <span className="absolute right-2 flex size-3.5 items-center justify-center">
114
+ <SelectPrimitive.ItemIndicator>
115
+ <CheckIcon className="size-4" />
116
+ </SelectPrimitive.ItemIndicator>
117
+ </span>
118
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
119
+ </SelectPrimitive.Item>
120
+ )
121
+ }
122
+
123
+ function SelectSeparator({
124
+ className,
125
+ ...props
126
+ }: React.ComponentProps<typeof SelectPrimitive.Separator>) {
127
+ return (
128
+ <SelectPrimitive.Separator
129
+ data-slot="select-separator"
130
+ className={cn("bg-border pointer-events-none -mx-1 my-1 h-px", className)}
131
+ {...props}
132
+ />
133
+ )
134
+ }
135
+
136
+ function SelectScrollUpButton({
137
+ className,
138
+ ...props
139
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {
140
+ return (
141
+ <SelectPrimitive.ScrollUpButton
142
+ data-slot="select-scroll-up-button"
143
+ className={cn(
144
+ "flex cursor-default items-center justify-center py-1",
145
+ className
146
+ )}
147
+ {...props}
148
+ >
149
+ <ChevronUpIcon className="size-4" />
150
+ </SelectPrimitive.ScrollUpButton>
151
+ )
152
+ }
153
+
154
+ function SelectScrollDownButton({
155
+ className,
156
+ ...props
157
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {
158
+ return (
159
+ <SelectPrimitive.ScrollDownButton
160
+ data-slot="select-scroll-down-button"
161
+ className={cn(
162
+ "flex cursor-default items-center justify-center py-1",
163
+ className
164
+ )}
165
+ {...props}
166
+ >
167
+ <ChevronDownIcon className="size-4" />
168
+ </SelectPrimitive.ScrollDownButton>
169
+ )
170
+ }
171
+
172
+ export {
173
+ Select,
174
+ SelectContent,
175
+ SelectGroup,
176
+ SelectItem,
177
+ SelectLabel,
178
+ SelectScrollDownButton,
179
+ SelectScrollUpButton,
180
+ SelectSeparator,
181
+ SelectTrigger,
182
+ SelectValue,
183
+ }
src/components/ui/separator.tsx ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import * as SeparatorPrimitive from "@radix-ui/react-separator"
5
+
6
+ import { cn } from "@/lib/utils"
7
+
8
+ function Separator({
9
+ className,
10
+ orientation = "horizontal",
11
+ decorative = true,
12
+ ...props
13
+ }: React.ComponentProps<typeof SeparatorPrimitive.Root>) {
14
+ return (
15
+ <SeparatorPrimitive.Root
16
+ data-slot="separator"
17
+ decorative={decorative}
18
+ orientation={orientation}
19
+ className={cn(
20
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
21
+ className
22
+ )}
23
+ {...props}
24
+ />
25
+ )
26
+ }
27
+
28
+ export { Separator }
src/components/ui/skeleton.tsx ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { cn } from "@/lib/utils"
2
+
3
+ function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
4
+ return (
5
+ <div
6
+ data-slot="skeleton"
7
+ className={cn("bg-accent animate-pulse rounded-md", className)}
8
+ {...props}
9
+ />
10
+ )
11
+ }
12
+
13
+ export { Skeleton }
src/components/ui/tooltip.tsx ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import * as React from "react"
2
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip"
3
+
4
+ import { cn } from "@/lib/utils"
5
+
6
+ function TooltipProvider({
7
+ delayDuration = 0,
8
+ ...props
9
+ }: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
10
+ return (
11
+ <TooltipPrimitive.Provider
12
+ data-slot="tooltip-provider"
13
+ delayDuration={delayDuration}
14
+ {...props}
15
+ />
16
+ )
17
+ }
18
+
19
+ function Tooltip({
20
+ ...props
21
+ }: React.ComponentProps<typeof TooltipPrimitive.Root>) {
22
+ return (
23
+ <TooltipProvider>
24
+ <TooltipPrimitive.Root data-slot="tooltip" {...props} />
25
+ </TooltipProvider>
26
+ )
27
+ }
28
+
29
+ function TooltipTrigger({
30
+ ...props
31
+ }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
32
+ return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />
33
+ }
34
+
35
+ function TooltipContent({
36
+ className,
37
+ sideOffset = 0,
38
+ children,
39
+ ...props
40
+ }: React.ComponentProps<typeof TooltipPrimitive.Content>) {
41
+ return (
42
+ <TooltipPrimitive.Portal>
43
+ <TooltipPrimitive.Content
44
+ data-slot="tooltip-content"
45
+ sideOffset={sideOffset}
46
+ className={cn(
47
+ "bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
48
+ className
49
+ )}
50
+ {...props}
51
+ >
52
+ {children}
53
+ <TooltipPrimitive.Arrow className="bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" />
54
+ </TooltipPrimitive.Content>
55
+ </TooltipPrimitive.Portal>
56
+ )
57
+ }
58
+
59
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }