@pactor-app/ui 0.1.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3085 @@
1
+ import {
2
+ Button,
3
+ buttonVariants
4
+ } from "./chunk-F3H23KYG.js";
5
+ import {
6
+ Popover,
7
+ PopoverContent,
8
+ PopoverTrigger
9
+ } from "./chunk-GL7IO22L.js";
10
+ import {
11
+ cn
12
+ } from "./chunk-RQHJBTEU.js";
13
+
14
+ // src/ui/alert.tsx
15
+ import { cva } from "class-variance-authority";
16
+ import { jsx } from "react/jsx-runtime";
17
+ var alertVariants = cva(
18
+ "relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border border-border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
19
+ {
20
+ variants: {
21
+ variant: {
22
+ default: "bg-card text-card-foreground",
23
+ destructive: "border-destructive/50 text-destructive bg-card [&>svg]:text-current",
24
+ success: "border-success/50 text-success bg-card [&>svg]:text-current",
25
+ warning: "border-warning/50 text-warning bg-card [&>svg]:text-current",
26
+ info: "border-info/50 text-info bg-card [&>svg]:text-current"
27
+ }
28
+ },
29
+ defaultVariants: {
30
+ variant: "default"
31
+ }
32
+ }
33
+ );
34
+ function Alert({
35
+ className,
36
+ variant,
37
+ ...props
38
+ }) {
39
+ return /* @__PURE__ */ jsx(
40
+ "div",
41
+ {
42
+ "data-slot": "alert",
43
+ role: "alert",
44
+ className: cn(alertVariants({ variant }), className),
45
+ ...props
46
+ }
47
+ );
48
+ }
49
+ function AlertTitle({ className, ...props }) {
50
+ return /* @__PURE__ */ jsx(
51
+ "div",
52
+ {
53
+ "data-slot": "alert-title",
54
+ className: cn(
55
+ "col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",
56
+ className
57
+ ),
58
+ ...props
59
+ }
60
+ );
61
+ }
62
+ function AlertDescription({
63
+ className,
64
+ ...props
65
+ }) {
66
+ return /* @__PURE__ */ jsx(
67
+ "div",
68
+ {
69
+ "data-slot": "alert-description",
70
+ className: cn(
71
+ "col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed",
72
+ className
73
+ ),
74
+ ...props
75
+ }
76
+ );
77
+ }
78
+
79
+ // src/ui/alert-dialog.tsx
80
+ import { AlertDialog as AlertDialogPrimitive } from "@base-ui/react/alert-dialog";
81
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
82
+ function AlertDialog({
83
+ ...props
84
+ }) {
85
+ return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
86
+ }
87
+ function AlertDialogTrigger({
88
+ ...props
89
+ }) {
90
+ return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
91
+ }
92
+ function AlertDialogPortal({
93
+ ...props
94
+ }) {
95
+ return /* @__PURE__ */ jsx2(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
96
+ }
97
+ function AlertDialogOverlay({
98
+ className,
99
+ ...props
100
+ }) {
101
+ return /* @__PURE__ */ jsx2(
102
+ AlertDialogPrimitive.Backdrop,
103
+ {
104
+ "data-slot": "alert-dialog-overlay",
105
+ className: cn(
106
+ "fixed inset-0 z-50 bg-black/50 data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
107
+ className
108
+ ),
109
+ ...props
110
+ }
111
+ );
112
+ }
113
+ function AlertDialogContent({
114
+ className,
115
+ ...props
116
+ }) {
117
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { "data-slot": "alert-dialog-portal", children: [
118
+ /* @__PURE__ */ jsx2(AlertDialogOverlay, {}),
119
+ /* @__PURE__ */ jsx2(
120
+ AlertDialogPrimitive.Popup,
121
+ {
122
+ "data-slot": "alert-dialog-content",
123
+ className: cn(
124
+ "fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border border-border bg-background p-6 shadow-lg duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 sm:max-w-lg",
125
+ className
126
+ ),
127
+ ...props
128
+ }
129
+ )
130
+ ] });
131
+ }
132
+ function AlertDialogHeader({
133
+ className,
134
+ ...props
135
+ }) {
136
+ return /* @__PURE__ */ jsx2(
137
+ "div",
138
+ {
139
+ "data-slot": "alert-dialog-header",
140
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
141
+ ...props
142
+ }
143
+ );
144
+ }
145
+ function AlertDialogFooter({
146
+ className,
147
+ ...props
148
+ }) {
149
+ return /* @__PURE__ */ jsx2(
150
+ "div",
151
+ {
152
+ "data-slot": "alert-dialog-footer",
153
+ className: cn(
154
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
155
+ className
156
+ ),
157
+ ...props
158
+ }
159
+ );
160
+ }
161
+ function AlertDialogTitle({
162
+ className,
163
+ ...props
164
+ }) {
165
+ return /* @__PURE__ */ jsx2(
166
+ AlertDialogPrimitive.Title,
167
+ {
168
+ "data-slot": "alert-dialog-title",
169
+ className: cn("text-lg font-semibold", className),
170
+ ...props
171
+ }
172
+ );
173
+ }
174
+ function AlertDialogDescription({
175
+ className,
176
+ ...props
177
+ }) {
178
+ return /* @__PURE__ */ jsx2(
179
+ AlertDialogPrimitive.Description,
180
+ {
181
+ "data-slot": "alert-dialog-description",
182
+ className: cn("text-sm text-muted-foreground", className),
183
+ ...props
184
+ }
185
+ );
186
+ }
187
+ function AlertDialogAction({
188
+ className,
189
+ variant = "default",
190
+ ...props
191
+ }) {
192
+ return /* @__PURE__ */ jsx2(
193
+ AlertDialogPrimitive.Close,
194
+ {
195
+ "data-slot": "alert-dialog-action",
196
+ className: cn(buttonVariants({ variant }), className),
197
+ ...props
198
+ }
199
+ );
200
+ }
201
+ function AlertDialogCancel({
202
+ className,
203
+ variant = "outline",
204
+ ...props
205
+ }) {
206
+ return /* @__PURE__ */ jsx2(
207
+ AlertDialogPrimitive.Close,
208
+ {
209
+ "data-slot": "alert-dialog-cancel",
210
+ className: cn(buttonVariants({ variant }), className),
211
+ ...props
212
+ }
213
+ );
214
+ }
215
+
216
+ // src/ui/aspect-ratio.tsx
217
+ import { jsx as jsx3 } from "react/jsx-runtime";
218
+ function AspectRatio({
219
+ ratio = 1,
220
+ className,
221
+ style,
222
+ ...props
223
+ }) {
224
+ return /* @__PURE__ */ jsx3(
225
+ "div",
226
+ {
227
+ "data-slot": "aspect-ratio",
228
+ className: cn("w-full overflow-hidden", className),
229
+ style: { aspectRatio: String(ratio), ...style },
230
+ ...props
231
+ }
232
+ );
233
+ }
234
+
235
+ // src/ui/avatar.tsx
236
+ import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
237
+ import { jsx as jsx4 } from "react/jsx-runtime";
238
+ function Avatar({ className, ...props }) {
239
+ return /* @__PURE__ */ jsx4(
240
+ AvatarPrimitive.Root,
241
+ {
242
+ "data-slot": "avatar",
243
+ className: cn(
244
+ "relative flex size-8 shrink-0 overflow-hidden rounded-full",
245
+ className
246
+ ),
247
+ ...props
248
+ }
249
+ );
250
+ }
251
+ function AvatarImage({ className, ...props }) {
252
+ return /* @__PURE__ */ jsx4(
253
+ AvatarPrimitive.Image,
254
+ {
255
+ "data-slot": "avatar-image",
256
+ className: cn("aspect-square size-full object-cover", className),
257
+ ...props
258
+ }
259
+ );
260
+ }
261
+ function AvatarFallback({ className, ...props }) {
262
+ return /* @__PURE__ */ jsx4(
263
+ AvatarPrimitive.Fallback,
264
+ {
265
+ "data-slot": "avatar-fallback",
266
+ className: cn(
267
+ "flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground",
268
+ className
269
+ ),
270
+ ...props
271
+ }
272
+ );
273
+ }
274
+
275
+ // src/ui/badge.tsx
276
+ import { cva as cva2 } from "class-variance-authority";
277
+ import { jsx as jsx5 } from "react/jsx-runtime";
278
+ var badgeVariants = cva2(
279
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap [&>svg]:pointer-events-none [&>svg]:size-3",
280
+ {
281
+ variants: {
282
+ variant: {
283
+ default: "border-transparent bg-primary text-primary-foreground",
284
+ secondary: "border-transparent bg-secondary text-secondary-foreground",
285
+ destructive: "border-transparent bg-destructive text-destructive-foreground",
286
+ outline: "border-border text-foreground"
287
+ }
288
+ },
289
+ defaultVariants: {
290
+ variant: "default"
291
+ }
292
+ }
293
+ );
294
+ function Badge({
295
+ className,
296
+ variant,
297
+ ...props
298
+ }) {
299
+ return /* @__PURE__ */ jsx5(
300
+ "span",
301
+ {
302
+ "data-slot": "badge",
303
+ className: cn(badgeVariants({ variant }), className),
304
+ ...props
305
+ }
306
+ );
307
+ }
308
+
309
+ // src/ui/breadcrumb.tsx
310
+ import { ChevronRightIcon, MoreHorizontalIcon } from "lucide-react";
311
+ import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
312
+ function Breadcrumb({ ...props }) {
313
+ return /* @__PURE__ */ jsx6("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
314
+ }
315
+ function BreadcrumbList({ className, ...props }) {
316
+ return /* @__PURE__ */ jsx6(
317
+ "ol",
318
+ {
319
+ "data-slot": "breadcrumb-list",
320
+ className: cn(
321
+ "flex flex-wrap items-center gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5",
322
+ className
323
+ ),
324
+ ...props
325
+ }
326
+ );
327
+ }
328
+ function BreadcrumbItem({ className, ...props }) {
329
+ return /* @__PURE__ */ jsx6(
330
+ "li",
331
+ {
332
+ "data-slot": "breadcrumb-item",
333
+ className: cn("inline-flex items-center gap-1.5", className),
334
+ ...props
335
+ }
336
+ );
337
+ }
338
+ function BreadcrumbLink({ className, ...props }) {
339
+ return /* @__PURE__ */ jsx6(
340
+ "a",
341
+ {
342
+ "data-slot": "breadcrumb-link",
343
+ className: cn("transition-colors hover:text-foreground", className),
344
+ ...props
345
+ }
346
+ );
347
+ }
348
+ function BreadcrumbPage({ className, ...props }) {
349
+ return /* @__PURE__ */ jsx6(
350
+ "span",
351
+ {
352
+ "data-slot": "breadcrumb-page",
353
+ role: "link",
354
+ "aria-disabled": "true",
355
+ "aria-current": "page",
356
+ className: cn("font-normal text-foreground", className),
357
+ ...props
358
+ }
359
+ );
360
+ }
361
+ function BreadcrumbSeparator({
362
+ children,
363
+ className,
364
+ ...props
365
+ }) {
366
+ return /* @__PURE__ */ jsx6(
367
+ "li",
368
+ {
369
+ "data-slot": "breadcrumb-separator",
370
+ role: "presentation",
371
+ "aria-hidden": "true",
372
+ className: cn("[&>svg]:size-3.5", className),
373
+ ...props,
374
+ children: children ?? /* @__PURE__ */ jsx6(ChevronRightIcon, {})
375
+ }
376
+ );
377
+ }
378
+ function BreadcrumbEllipsis({ className, ...props }) {
379
+ return /* @__PURE__ */ jsxs2(
380
+ "span",
381
+ {
382
+ "data-slot": "breadcrumb-ellipsis",
383
+ role: "presentation",
384
+ "aria-hidden": "true",
385
+ className: cn("flex size-9 items-center justify-center", className),
386
+ ...props,
387
+ children: [
388
+ /* @__PURE__ */ jsx6(MoreHorizontalIcon, { className: "size-4" }),
389
+ /* @__PURE__ */ jsx6("span", { className: "sr-only", children: "More" })
390
+ ]
391
+ }
392
+ );
393
+ }
394
+
395
+ // src/ui/button-group.tsx
396
+ import { jsx as jsx7 } from "react/jsx-runtime";
397
+ function ButtonGroup({ className, ...props }) {
398
+ return /* @__PURE__ */ jsx7(
399
+ "div",
400
+ {
401
+ role: "group",
402
+ "data-slot": "button-group",
403
+ className: cn(
404
+ "flex w-fit items-stretch [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 [&>[data-slot=button]]:rounded-none [&>[data-slot=button]]:first:rounded-l-md [&>[data-slot=button]]:last:rounded-r-md [&>[data-slot=button]:not(:first-child)]:-ml-px",
405
+ className
406
+ ),
407
+ ...props
408
+ }
409
+ );
410
+ }
411
+
412
+ // src/ui/calendar.tsx
413
+ import { ChevronLeftIcon, ChevronRightIcon as ChevronRightIcon2 } from "lucide-react";
414
+ import { DayPicker, getDefaultClassNames } from "react-day-picker";
415
+ import { jsx as jsx8 } from "react/jsx-runtime";
416
+ function Calendar({
417
+ className,
418
+ classNames,
419
+ showOutsideDays = true,
420
+ ...props
421
+ }) {
422
+ const defaultClassNames = getDefaultClassNames();
423
+ return /* @__PURE__ */ jsx8(
424
+ DayPicker,
425
+ {
426
+ showOutsideDays,
427
+ className: cn("bg-background p-3", className),
428
+ classNames: {
429
+ root: cn("w-fit", defaultClassNames.root),
430
+ months: cn("relative flex flex-col gap-4 md:flex-row", defaultClassNames.months),
431
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
432
+ nav: cn(
433
+ "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
434
+ defaultClassNames.nav
435
+ ),
436
+ button_previous: cn(
437
+ buttonVariants({ variant: "outline" }),
438
+ "size-7 bg-transparent p-0 opacity-50 hover:opacity-100",
439
+ defaultClassNames.button_previous
440
+ ),
441
+ button_next: cn(
442
+ buttonVariants({ variant: "outline" }),
443
+ "size-7 bg-transparent p-0 opacity-50 hover:opacity-100",
444
+ defaultClassNames.button_next
445
+ ),
446
+ month_caption: cn(
447
+ "flex h-7 w-full items-center justify-center px-7",
448
+ defaultClassNames.month_caption
449
+ ),
450
+ caption_label: cn("text-sm font-medium", defaultClassNames.caption_label),
451
+ month_grid: cn("w-full border-collapse", defaultClassNames.month_grid),
452
+ weekdays: cn("flex", defaultClassNames.weekdays),
453
+ weekday: cn(
454
+ "w-8 rounded-md text-[0.8rem] font-normal text-muted-foreground",
455
+ defaultClassNames.weekday
456
+ ),
457
+ week: cn("mt-2 flex w-full", defaultClassNames.week),
458
+ day: cn("h-8 w-8 p-0 text-center text-sm", defaultClassNames.day),
459
+ day_button: cn(
460
+ "size-8 cursor-pointer rounded-md p-0 font-normal hover:bg-accent hover:text-accent-foreground aria-selected:opacity-100",
461
+ defaultClassNames.day_button
462
+ ),
463
+ selected: cn(
464
+ "[&>button]:bg-primary [&>button]:text-primary-foreground [&>button]:hover:bg-primary",
465
+ defaultClassNames.selected
466
+ ),
467
+ today: cn(
468
+ "[&>button]:bg-accent [&>button]:text-accent-foreground",
469
+ defaultClassNames.today
470
+ ),
471
+ outside: cn(
472
+ "text-muted-foreground opacity-50 aria-selected:text-muted-foreground",
473
+ defaultClassNames.outside
474
+ ),
475
+ disabled: cn("text-muted-foreground opacity-50", defaultClassNames.disabled),
476
+ hidden: cn("invisible", defaultClassNames.hidden),
477
+ ...classNames
478
+ },
479
+ components: {
480
+ Chevron: ({ orientation }) => orientation === "left" ? /* @__PURE__ */ jsx8(ChevronLeftIcon, { className: "size-4" }) : /* @__PURE__ */ jsx8(ChevronRightIcon2, { className: "size-4" })
481
+ },
482
+ ...props
483
+ }
484
+ );
485
+ }
486
+
487
+ // src/ui/carousel.tsx
488
+ import useEmblaCarousel from "embla-carousel-react";
489
+ import { ChevronLeftIcon as ChevronLeftIcon2, ChevronRightIcon as ChevronRightIcon3 } from "lucide-react";
490
+ import * as React from "react";
491
+ import { jsx as jsx9, jsxs as jsxs3 } from "react/jsx-runtime";
492
+ var CarouselContext = React.createContext(null);
493
+ function useCarousel() {
494
+ const context = React.useContext(CarouselContext);
495
+ if (!context) {
496
+ throw new Error("useCarousel must be used within a <Carousel />");
497
+ }
498
+ return context;
499
+ }
500
+ function Carousel({
501
+ orientation = "horizontal",
502
+ opts,
503
+ setApi,
504
+ plugins,
505
+ className,
506
+ children,
507
+ ...props
508
+ }) {
509
+ const [carouselRef, api] = useEmblaCarousel(
510
+ { ...opts, axis: orientation === "horizontal" ? "x" : "y" },
511
+ plugins
512
+ );
513
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
514
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
515
+ const onSelect = React.useCallback((carouselApi) => {
516
+ if (!carouselApi) return;
517
+ setCanScrollPrev(carouselApi.canScrollPrev());
518
+ setCanScrollNext(carouselApi.canScrollNext());
519
+ }, []);
520
+ const scrollPrev = React.useCallback(() => api?.scrollPrev(), [api]);
521
+ const scrollNext = React.useCallback(() => api?.scrollNext(), [api]);
522
+ const handleKeyDown = React.useCallback(
523
+ (event) => {
524
+ if (event.key === "ArrowLeft") {
525
+ event.preventDefault();
526
+ scrollPrev();
527
+ } else if (event.key === "ArrowRight") {
528
+ event.preventDefault();
529
+ scrollNext();
530
+ }
531
+ },
532
+ [scrollPrev, scrollNext]
533
+ );
534
+ React.useEffect(() => {
535
+ if (api && setApi) setApi(api);
536
+ }, [api, setApi]);
537
+ React.useEffect(() => {
538
+ if (!api) return;
539
+ onSelect(api);
540
+ api.on("reInit", onSelect);
541
+ api.on("select", onSelect);
542
+ return () => {
543
+ api.off("select", onSelect);
544
+ };
545
+ }, [api, onSelect]);
546
+ return /* @__PURE__ */ jsx9(
547
+ CarouselContext.Provider,
548
+ {
549
+ value: {
550
+ carouselRef,
551
+ api,
552
+ opts,
553
+ orientation,
554
+ scrollPrev,
555
+ scrollNext,
556
+ canScrollPrev,
557
+ canScrollNext
558
+ },
559
+ children: /* @__PURE__ */ jsx9(
560
+ "div",
561
+ {
562
+ onKeyDownCapture: handleKeyDown,
563
+ className: cn("relative", className),
564
+ role: "region",
565
+ "aria-roledescription": "carousel",
566
+ "data-slot": "carousel",
567
+ ...props,
568
+ children
569
+ }
570
+ )
571
+ }
572
+ );
573
+ }
574
+ function CarouselContent({ className, ...props }) {
575
+ const { carouselRef, orientation } = useCarousel();
576
+ return /* @__PURE__ */ jsx9("div", { ref: carouselRef, className: "overflow-hidden", "data-slot": "carousel-viewport", children: /* @__PURE__ */ jsx9(
577
+ "div",
578
+ {
579
+ className: cn(
580
+ "flex",
581
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
582
+ className
583
+ ),
584
+ ...props
585
+ }
586
+ ) });
587
+ }
588
+ function CarouselItem({ className, ...props }) {
589
+ const { orientation } = useCarousel();
590
+ return /* @__PURE__ */ jsx9(
591
+ "div",
592
+ {
593
+ role: "group",
594
+ "aria-roledescription": "slide",
595
+ "data-slot": "carousel-item",
596
+ className: cn(
597
+ "min-w-0 shrink-0 grow-0 basis-full",
598
+ orientation === "horizontal" ? "pl-4" : "pt-4",
599
+ className
600
+ ),
601
+ ...props
602
+ }
603
+ );
604
+ }
605
+ function CarouselPrevious({
606
+ className,
607
+ variant = "outline",
608
+ size = "icon",
609
+ ...props
610
+ }) {
611
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
612
+ return /* @__PURE__ */ jsxs3(
613
+ Button,
614
+ {
615
+ "data-slot": "carousel-previous",
616
+ variant,
617
+ size,
618
+ className: cn(
619
+ "absolute size-8 rounded-full",
620
+ orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
621
+ className
622
+ ),
623
+ disabled: !canScrollPrev,
624
+ onClick: scrollPrev,
625
+ ...props,
626
+ children: [
627
+ /* @__PURE__ */ jsx9(ChevronLeftIcon2, {}),
628
+ /* @__PURE__ */ jsx9("span", { className: "sr-only", children: "Previous slide" })
629
+ ]
630
+ }
631
+ );
632
+ }
633
+ function CarouselNext({
634
+ className,
635
+ variant = "outline",
636
+ size = "icon",
637
+ ...props
638
+ }) {
639
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
640
+ return /* @__PURE__ */ jsxs3(
641
+ Button,
642
+ {
643
+ "data-slot": "carousel-next",
644
+ variant,
645
+ size,
646
+ className: cn(
647
+ "absolute size-8 rounded-full",
648
+ orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
649
+ className
650
+ ),
651
+ disabled: !canScrollNext,
652
+ onClick: scrollNext,
653
+ ...props,
654
+ children: [
655
+ /* @__PURE__ */ jsx9(ChevronRightIcon3, {}),
656
+ /* @__PURE__ */ jsx9("span", { className: "sr-only", children: "Next slide" })
657
+ ]
658
+ }
659
+ );
660
+ }
661
+
662
+ // src/ui/checkbox.tsx
663
+ import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
664
+ import { CheckIcon } from "lucide-react";
665
+ import { jsx as jsx10 } from "react/jsx-runtime";
666
+ function Checkbox({ className, ...props }) {
667
+ return /* @__PURE__ */ jsx10(
668
+ CheckboxPrimitive.Root,
669
+ {
670
+ "data-slot": "checkbox",
671
+ className: cn(
672
+ "peer size-4 shrink-0 cursor-pointer rounded-[4px] border border-input shadow-xs transition-colors outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground",
673
+ className
674
+ ),
675
+ ...props,
676
+ children: /* @__PURE__ */ jsx10(
677
+ CheckboxPrimitive.Indicator,
678
+ {
679
+ "data-slot": "checkbox-indicator",
680
+ className: "flex items-center justify-center text-current",
681
+ children: /* @__PURE__ */ jsx10(CheckIcon, { className: "size-3.5" })
682
+ }
683
+ )
684
+ }
685
+ );
686
+ }
687
+
688
+ // src/ui/collapsible.tsx
689
+ import { Collapsible as CollapsiblePrimitive } from "@base-ui/react/collapsible";
690
+ import { ChevronDownIcon } from "lucide-react";
691
+ import { jsx as jsx11, jsxs as jsxs4 } from "react/jsx-runtime";
692
+ function Collapsible({
693
+ ...props
694
+ }) {
695
+ return /* @__PURE__ */ jsx11(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
696
+ }
697
+ function CollapsibleTrigger({
698
+ className,
699
+ children,
700
+ ...props
701
+ }) {
702
+ return /* @__PURE__ */ jsxs4(
703
+ CollapsiblePrimitive.Trigger,
704
+ {
705
+ "data-slot": "collapsible-trigger",
706
+ className: cn(
707
+ "flex w-full cursor-pointer items-center justify-between gap-4 rounded-md py-2 text-left text-sm font-medium transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 [&[data-panel-open]>svg]:rotate-180",
708
+ className
709
+ ),
710
+ ...props,
711
+ children: [
712
+ children,
713
+ /* @__PURE__ */ jsx11(ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
714
+ ]
715
+ }
716
+ );
717
+ }
718
+ function CollapsibleContent({
719
+ className,
720
+ ...props
721
+ }) {
722
+ return /* @__PURE__ */ jsx11(
723
+ CollapsiblePrimitive.Panel,
724
+ {
725
+ "data-slot": "collapsible-content",
726
+ className: cn(
727
+ "overflow-hidden text-sm transition-[height] duration-200 ease-out",
728
+ className
729
+ ),
730
+ ...props
731
+ }
732
+ );
733
+ }
734
+
735
+ // src/ui/combobox.tsx
736
+ import { ChevronsUpDownIcon } from "lucide-react";
737
+ import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
738
+ function Combobox({
739
+ open,
740
+ onOpenChange,
741
+ children
742
+ }) {
743
+ return /* @__PURE__ */ jsx12(Popover, { open, onOpenChange: (next) => onOpenChange?.(next), children });
744
+ }
745
+ function ComboboxTrigger({
746
+ className,
747
+ children,
748
+ ...props
749
+ }) {
750
+ return /* @__PURE__ */ jsxs5(
751
+ PopoverTrigger,
752
+ {
753
+ "data-slot": "combobox-trigger",
754
+ className: cn(
755
+ "flex h-9 w-full min-w-0 cursor-pointer items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors outline-none hover:bg-accent focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50",
756
+ className
757
+ ),
758
+ ...props,
759
+ children: [
760
+ /* @__PURE__ */ jsx12("span", { className: "min-w-0 flex-1 truncate text-left", children }),
761
+ /* @__PURE__ */ jsx12(ChevronsUpDownIcon, { className: "size-4 shrink-0 opacity-50" })
762
+ ]
763
+ }
764
+ );
765
+ }
766
+ function ComboboxContent({
767
+ className,
768
+ children,
769
+ ...props
770
+ }) {
771
+ return /* @__PURE__ */ jsx12(
772
+ PopoverContent,
773
+ {
774
+ "data-slot": "combobox-content",
775
+ className: cn("w-[--anchor-width] p-0", className),
776
+ ...props,
777
+ children
778
+ }
779
+ );
780
+ }
781
+
782
+ // src/ui/command.tsx
783
+ import { Command as CommandPrimitive } from "cmdk";
784
+ import { SearchIcon } from "lucide-react";
785
+ import { jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
786
+ function Command({
787
+ className,
788
+ ...props
789
+ }) {
790
+ return /* @__PURE__ */ jsx13(
791
+ CommandPrimitive,
792
+ {
793
+ "data-slot": "command",
794
+ className: cn(
795
+ "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
796
+ className
797
+ ),
798
+ ...props
799
+ }
800
+ );
801
+ }
802
+ function CommandInput({
803
+ className,
804
+ ...props
805
+ }) {
806
+ return /* @__PURE__ */ jsxs6(
807
+ "div",
808
+ {
809
+ "data-slot": "command-input-wrapper",
810
+ className: "flex items-center gap-2 border-b border-border px-3",
811
+ children: [
812
+ /* @__PURE__ */ jsx13(SearchIcon, { className: "size-4 shrink-0 opacity-50" }),
813
+ /* @__PURE__ */ jsx13(
814
+ CommandPrimitive.Input,
815
+ {
816
+ "data-slot": "command-input",
817
+ className: cn(
818
+ "flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
819
+ className
820
+ ),
821
+ ...props
822
+ }
823
+ )
824
+ ]
825
+ }
826
+ );
827
+ }
828
+ function CommandList({
829
+ className,
830
+ ...props
831
+ }) {
832
+ return /* @__PURE__ */ jsx13(
833
+ CommandPrimitive.List,
834
+ {
835
+ "data-slot": "command-list",
836
+ className: cn(
837
+ "max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
838
+ className
839
+ ),
840
+ ...props
841
+ }
842
+ );
843
+ }
844
+ function CommandEmpty({
845
+ ...props
846
+ }) {
847
+ return /* @__PURE__ */ jsx13(
848
+ CommandPrimitive.Empty,
849
+ {
850
+ "data-slot": "command-empty",
851
+ className: "py-6 text-center text-sm",
852
+ ...props
853
+ }
854
+ );
855
+ }
856
+ function CommandGroup({
857
+ className,
858
+ ...props
859
+ }) {
860
+ return /* @__PURE__ */ jsx13(
861
+ CommandPrimitive.Group,
862
+ {
863
+ "data-slot": "command-group",
864
+ className: cn(
865
+ "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
866
+ className
867
+ ),
868
+ ...props
869
+ }
870
+ );
871
+ }
872
+ function CommandItem({
873
+ className,
874
+ ...props
875
+ }) {
876
+ return /* @__PURE__ */ jsx13(
877
+ CommandPrimitive.Item,
878
+ {
879
+ "data-slot": "command-item",
880
+ className: cn(
881
+ "relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
882
+ className
883
+ ),
884
+ ...props
885
+ }
886
+ );
887
+ }
888
+
889
+ // src/ui/chart.tsx
890
+ import { ResponsiveContainer } from "recharts";
891
+ import { jsx as jsx14 } from "react/jsx-runtime";
892
+ var CHART_TOKEN_COLORS = [
893
+ "hsl(var(--chart-1))",
894
+ "hsl(var(--chart-2))",
895
+ "hsl(var(--chart-3))",
896
+ "hsl(var(--chart-4))",
897
+ "hsl(var(--chart-5))"
898
+ ];
899
+ function chartColor(index, colors) {
900
+ if (colors && colors.length > 0) {
901
+ return colors[index % colors.length];
902
+ }
903
+ return CHART_TOKEN_COLORS[index % CHART_TOKEN_COLORS.length];
904
+ }
905
+ function ChartContainer({
906
+ className,
907
+ children,
908
+ ...props
909
+ }) {
910
+ return /* @__PURE__ */ jsx14(
911
+ "div",
912
+ {
913
+ "data-slot": "chart-container",
914
+ className: cn("h-64 w-full", className),
915
+ ...props,
916
+ children: /* @__PURE__ */ jsx14(ResponsiveContainer, { width: "100%", height: "100%", children })
917
+ }
918
+ );
919
+ }
920
+
921
+ // src/ui/textarea.tsx
922
+ import { jsx as jsx15 } from "react/jsx-runtime";
923
+ function Textarea({
924
+ className,
925
+ ...props
926
+ }) {
927
+ return /* @__PURE__ */ jsx15(
928
+ "textarea",
929
+ {
930
+ "data-slot": "textarea",
931
+ className: cn(
932
+ "flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50",
933
+ className
934
+ ),
935
+ ...props
936
+ }
937
+ );
938
+ }
939
+
940
+ // src/ui/context-menu.tsx
941
+ import { ContextMenu as ContextMenuPrimitive } from "@base-ui/react/context-menu";
942
+ import { jsx as jsx16 } from "react/jsx-runtime";
943
+ function ContextMenu({
944
+ ...props
945
+ }) {
946
+ return /* @__PURE__ */ jsx16(ContextMenuPrimitive.Root, { "data-slot": "context-menu", ...props });
947
+ }
948
+ function ContextMenuTrigger({
949
+ ...props
950
+ }) {
951
+ return /* @__PURE__ */ jsx16(ContextMenuPrimitive.Trigger, { "data-slot": "context-menu-trigger", ...props });
952
+ }
953
+ function ContextMenuContent({
954
+ className,
955
+ ...props
956
+ }) {
957
+ return /* @__PURE__ */ jsx16(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx16(ContextMenuPrimitive.Positioner, { className: "isolate z-50", children: /* @__PURE__ */ jsx16(
958
+ ContextMenuPrimitive.Popup,
959
+ {
960
+ "data-slot": "context-menu-content",
961
+ className: cn(
962
+ "z-50 max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
963
+ className
964
+ ),
965
+ ...props
966
+ }
967
+ ) }) });
968
+ }
969
+ function ContextMenuItem({
970
+ className,
971
+ variant = "default",
972
+ ...props
973
+ }) {
974
+ return /* @__PURE__ */ jsx16(
975
+ ContextMenuPrimitive.Item,
976
+ {
977
+ "data-slot": "context-menu-item",
978
+ "data-variant": variant,
979
+ className: cn(
980
+ "relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
981
+ className
982
+ ),
983
+ ...props
984
+ }
985
+ );
986
+ }
987
+ function ContextMenuSeparator({
988
+ className,
989
+ ...props
990
+ }) {
991
+ return /* @__PURE__ */ jsx16(
992
+ ContextMenuPrimitive.Separator,
993
+ {
994
+ "data-slot": "context-menu-separator",
995
+ className: cn("-mx-1 my-1 h-px bg-border", className),
996
+ ...props
997
+ }
998
+ );
999
+ }
1000
+
1001
+ // src/ui/input.tsx
1002
+ import { jsx as jsx17 } from "react/jsx-runtime";
1003
+ function Input({ className, type, ...props }) {
1004
+ return /* @__PURE__ */ jsx17(
1005
+ "input",
1006
+ {
1007
+ type,
1008
+ "data-slot": "input",
1009
+ className: cn(
1010
+ "flex h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50",
1011
+ className
1012
+ ),
1013
+ ...props
1014
+ }
1015
+ );
1016
+ }
1017
+
1018
+ // src/ui/table.tsx
1019
+ import { jsx as jsx18 } from "react/jsx-runtime";
1020
+ function Table({ className, ...props }) {
1021
+ return /* @__PURE__ */ jsx18(
1022
+ "div",
1023
+ {
1024
+ "data-slot": "table-container",
1025
+ className: "relative w-full overflow-x-auto",
1026
+ children: /* @__PURE__ */ jsx18(
1027
+ "table",
1028
+ {
1029
+ "data-slot": "table",
1030
+ className: cn("w-full caption-bottom text-sm", className),
1031
+ ...props
1032
+ }
1033
+ )
1034
+ }
1035
+ );
1036
+ }
1037
+ function TableHeader({ className, ...props }) {
1038
+ return /* @__PURE__ */ jsx18(
1039
+ "thead",
1040
+ {
1041
+ "data-slot": "table-header",
1042
+ className: cn("[&_tr]:border-b [&_tr]:border-border", className),
1043
+ ...props
1044
+ }
1045
+ );
1046
+ }
1047
+ function TableBody({ className, ...props }) {
1048
+ return /* @__PURE__ */ jsx18(
1049
+ "tbody",
1050
+ {
1051
+ "data-slot": "table-body",
1052
+ className: cn("[&_tr:last-child]:border-0", className),
1053
+ ...props
1054
+ }
1055
+ );
1056
+ }
1057
+ function TableFooter({ className, ...props }) {
1058
+ return /* @__PURE__ */ jsx18(
1059
+ "tfoot",
1060
+ {
1061
+ "data-slot": "table-footer",
1062
+ className: cn(
1063
+ "border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0",
1064
+ className
1065
+ ),
1066
+ ...props
1067
+ }
1068
+ );
1069
+ }
1070
+ function TableRow({ className, ...props }) {
1071
+ return /* @__PURE__ */ jsx18(
1072
+ "tr",
1073
+ {
1074
+ "data-slot": "table-row",
1075
+ className: cn(
1076
+ "border-b border-border transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
1077
+ className
1078
+ ),
1079
+ ...props
1080
+ }
1081
+ );
1082
+ }
1083
+ function TableHead({ className, ...props }) {
1084
+ return /* @__PURE__ */ jsx18(
1085
+ "th",
1086
+ {
1087
+ "data-slot": "table-head",
1088
+ className: cn(
1089
+ "h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
1090
+ className
1091
+ ),
1092
+ ...props
1093
+ }
1094
+ );
1095
+ }
1096
+ function TableCell({ className, ...props }) {
1097
+ return /* @__PURE__ */ jsx18(
1098
+ "td",
1099
+ {
1100
+ "data-slot": "table-cell",
1101
+ className: cn(
1102
+ "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",
1103
+ className
1104
+ ),
1105
+ ...props
1106
+ }
1107
+ );
1108
+ }
1109
+ function TableCaption({
1110
+ className,
1111
+ ...props
1112
+ }) {
1113
+ return /* @__PURE__ */ jsx18(
1114
+ "caption",
1115
+ {
1116
+ "data-slot": "table-caption",
1117
+ className: cn("mt-4 text-sm text-muted-foreground", className),
1118
+ ...props
1119
+ }
1120
+ );
1121
+ }
1122
+
1123
+ // src/ui/dropdown-menu.tsx
1124
+ import { Menu as MenuPrimitive } from "@base-ui/react/menu";
1125
+ import { ChevronRightIcon as ChevronRightIcon4 } from "lucide-react";
1126
+ import { jsx as jsx19, jsxs as jsxs7 } from "react/jsx-runtime";
1127
+ function DropdownMenu({
1128
+ ...props
1129
+ }) {
1130
+ return /* @__PURE__ */ jsx19(MenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
1131
+ }
1132
+ function DropdownMenuTrigger({
1133
+ ...props
1134
+ }) {
1135
+ return /* @__PURE__ */ jsx19(MenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
1136
+ }
1137
+ function DropdownMenuContent({
1138
+ className,
1139
+ align = "start",
1140
+ side = "bottom",
1141
+ sideOffset = 4,
1142
+ ...props
1143
+ }) {
1144
+ return /* @__PURE__ */ jsx19(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx19(
1145
+ MenuPrimitive.Positioner,
1146
+ {
1147
+ align,
1148
+ side,
1149
+ sideOffset,
1150
+ className: "isolate z-50",
1151
+ children: /* @__PURE__ */ jsx19(
1152
+ MenuPrimitive.Popup,
1153
+ {
1154
+ "data-slot": "dropdown-menu-content",
1155
+ className: cn(
1156
+ "z-50 max-h-(--available-height) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1157
+ className
1158
+ ),
1159
+ ...props
1160
+ }
1161
+ )
1162
+ }
1163
+ ) });
1164
+ }
1165
+ function DropdownMenuItem({
1166
+ className,
1167
+ variant = "default",
1168
+ ...props
1169
+ }) {
1170
+ return /* @__PURE__ */ jsx19(
1171
+ MenuPrimitive.Item,
1172
+ {
1173
+ "data-slot": "dropdown-menu-item",
1174
+ "data-variant": variant,
1175
+ className: cn(
1176
+ "relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1177
+ className
1178
+ ),
1179
+ ...props
1180
+ }
1181
+ );
1182
+ }
1183
+ function DropdownMenuSeparator({
1184
+ className,
1185
+ ...props
1186
+ }) {
1187
+ return /* @__PURE__ */ jsx19(
1188
+ MenuPrimitive.Separator,
1189
+ {
1190
+ "data-slot": "dropdown-menu-separator",
1191
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1192
+ ...props
1193
+ }
1194
+ );
1195
+ }
1196
+ function DropdownMenuSub({
1197
+ ...props
1198
+ }) {
1199
+ return /* @__PURE__ */ jsx19(MenuPrimitive.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
1200
+ }
1201
+ function DropdownMenuSubTrigger({
1202
+ className,
1203
+ children,
1204
+ ...props
1205
+ }) {
1206
+ return /* @__PURE__ */ jsxs7(
1207
+ MenuPrimitive.SubmenuTrigger,
1208
+ {
1209
+ "data-slot": "dropdown-menu-sub-trigger",
1210
+ className: cn(
1211
+ "flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1212
+ className
1213
+ ),
1214
+ ...props,
1215
+ children: [
1216
+ children,
1217
+ /* @__PURE__ */ jsx19(ChevronRightIcon4, { className: "ml-auto" })
1218
+ ]
1219
+ }
1220
+ );
1221
+ }
1222
+ function DropdownMenuSubContent({
1223
+ className,
1224
+ sideOffset = 2,
1225
+ ...props
1226
+ }) {
1227
+ return /* @__PURE__ */ jsx19(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx19(MenuPrimitive.Positioner, { sideOffset, className: "isolate z-50", children: /* @__PURE__ */ jsx19(
1228
+ MenuPrimitive.Popup,
1229
+ {
1230
+ "data-slot": "dropdown-menu-sub-content",
1231
+ className: cn(
1232
+ "z-50 min-w-32 origin-(--transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1233
+ className
1234
+ ),
1235
+ ...props
1236
+ }
1237
+ ) }) });
1238
+ }
1239
+
1240
+ // src/ui/empty.tsx
1241
+ import { jsx as jsx20 } from "react/jsx-runtime";
1242
+ function Empty({ className, ...props }) {
1243
+ return /* @__PURE__ */ jsx20(
1244
+ "div",
1245
+ {
1246
+ "data-slot": "empty",
1247
+ className: cn(
1248
+ "flex min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-lg border-dashed p-6 text-center text-balance",
1249
+ className
1250
+ ),
1251
+ ...props
1252
+ }
1253
+ );
1254
+ }
1255
+ function EmptyHeader({ className, ...props }) {
1256
+ return /* @__PURE__ */ jsx20(
1257
+ "div",
1258
+ {
1259
+ "data-slot": "empty-header",
1260
+ className: cn("flex max-w-sm flex-col items-center gap-2", className),
1261
+ ...props
1262
+ }
1263
+ );
1264
+ }
1265
+ function EmptyTitle({ className, ...props }) {
1266
+ return /* @__PURE__ */ jsx20(
1267
+ "div",
1268
+ {
1269
+ "data-slot": "empty-title",
1270
+ className: cn("text-lg font-medium tracking-tight", className),
1271
+ ...props
1272
+ }
1273
+ );
1274
+ }
1275
+ function EmptyDescription({ className, ...props }) {
1276
+ return /* @__PURE__ */ jsx20(
1277
+ "p",
1278
+ {
1279
+ "data-slot": "empty-description",
1280
+ className: cn("text-sm text-muted-foreground", className),
1281
+ ...props
1282
+ }
1283
+ );
1284
+ }
1285
+ function EmptyContent({ className, ...props }) {
1286
+ return /* @__PURE__ */ jsx20(
1287
+ "div",
1288
+ {
1289
+ "data-slot": "empty-content",
1290
+ className: cn(
1291
+ "flex w-full max-w-sm min-w-0 flex-col items-center gap-2 text-sm text-balance",
1292
+ className
1293
+ ),
1294
+ ...props
1295
+ }
1296
+ );
1297
+ }
1298
+
1299
+ // src/ui/field.tsx
1300
+ import { Field as FieldPrimitive } from "@base-ui/react/field";
1301
+ import { jsx as jsx21 } from "react/jsx-runtime";
1302
+ function Field({ className, ...props }) {
1303
+ return /* @__PURE__ */ jsx21(
1304
+ FieldPrimitive.Root,
1305
+ {
1306
+ "data-slot": "field",
1307
+ className: cn("flex flex-col gap-1.5", className),
1308
+ ...props
1309
+ }
1310
+ );
1311
+ }
1312
+ function FieldLabel({ className, ...props }) {
1313
+ return /* @__PURE__ */ jsx21(
1314
+ FieldPrimitive.Label,
1315
+ {
1316
+ "data-slot": "field-label",
1317
+ className: cn("text-sm leading-none font-medium", className),
1318
+ ...props
1319
+ }
1320
+ );
1321
+ }
1322
+ function FieldDescription({ className, ...props }) {
1323
+ return /* @__PURE__ */ jsx21(
1324
+ FieldPrimitive.Description,
1325
+ {
1326
+ "data-slot": "field-description",
1327
+ className: cn("text-sm text-muted-foreground", className),
1328
+ ...props
1329
+ }
1330
+ );
1331
+ }
1332
+ function FieldError({ className, ...props }) {
1333
+ return /* @__PURE__ */ jsx21(
1334
+ FieldPrimitive.Error,
1335
+ {
1336
+ "data-slot": "field-error",
1337
+ className: cn("text-sm text-destructive", className),
1338
+ ...props
1339
+ }
1340
+ );
1341
+ }
1342
+
1343
+ // src/ui/hover-card.tsx
1344
+ import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card";
1345
+ import { jsx as jsx22 } from "react/jsx-runtime";
1346
+ function HoverCard({
1347
+ ...props
1348
+ }) {
1349
+ return /* @__PURE__ */ jsx22(PreviewCardPrimitive.Root, { "data-slot": "hover-card", ...props });
1350
+ }
1351
+ function HoverCardTrigger({
1352
+ ...props
1353
+ }) {
1354
+ return /* @__PURE__ */ jsx22(PreviewCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props });
1355
+ }
1356
+ function HoverCardContent({
1357
+ className,
1358
+ align = "center",
1359
+ side = "bottom",
1360
+ sideOffset = 4,
1361
+ ...props
1362
+ }) {
1363
+ return /* @__PURE__ */ jsx22(PreviewCardPrimitive.Portal, { children: /* @__PURE__ */ jsx22(
1364
+ PreviewCardPrimitive.Positioner,
1365
+ {
1366
+ align,
1367
+ side,
1368
+ sideOffset,
1369
+ className: "isolate z-50",
1370
+ children: /* @__PURE__ */ jsx22(
1371
+ PreviewCardPrimitive.Popup,
1372
+ {
1373
+ "data-slot": "hover-card-content",
1374
+ className: cn(
1375
+ "z-50 w-64 origin-(--transform-origin) rounded-md border border-border bg-popover p-4 text-popover-foreground shadow-md outline-hidden duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1376
+ className
1377
+ ),
1378
+ ...props
1379
+ }
1380
+ )
1381
+ }
1382
+ ) });
1383
+ }
1384
+
1385
+ // src/ui/input-group.tsx
1386
+ import { jsx as jsx23 } from "react/jsx-runtime";
1387
+ function InputGroup({ className, ...props }) {
1388
+ return /* @__PURE__ */ jsx23(
1389
+ "div",
1390
+ {
1391
+ "data-slot": "input-group",
1392
+ role: "group",
1393
+ className: cn(
1394
+ "group/input-group relative flex w-full items-center rounded-md border border-input shadow-xs transition-colors outline-none focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50 has-disabled:opacity-50",
1395
+ // 消化 DSL 子元素:Input 去边框/焦点环并伸展;Text 作前后缀;Button 贴边去圆角
1396
+ "[&_[data-slot=input]]:min-w-0 [&_[data-slot=input]]:flex-1 [&_[data-slot=input]]:border-0 [&_[data-slot=input]]:shadow-none [&_[data-slot=input]]:focus-visible:ring-0",
1397
+ "[&>[data-slot=text]]:shrink-0 [&>[data-slot=text]]:px-3 [&>[data-slot=text]]:text-sm [&>[data-slot=text]]:text-muted-foreground",
1398
+ "[&>[data-slot=button]]:shrink-0 [&>[data-slot=button]]:rounded-none [&>[data-slot=button]]:first:rounded-l-md [&>[data-slot=button]]:last:rounded-r-md",
1399
+ className
1400
+ ),
1401
+ ...props
1402
+ }
1403
+ );
1404
+ }
1405
+ function InputGroupAddon({
1406
+ className,
1407
+ align = "inline-start",
1408
+ ...props
1409
+ }) {
1410
+ return /* @__PURE__ */ jsx23(
1411
+ "div",
1412
+ {
1413
+ role: "group",
1414
+ "data-slot": "input-group-addon",
1415
+ "data-align": align,
1416
+ className: cn(
1417
+ "flex items-center gap-1 px-3 text-sm text-muted-foreground [&>svg]:size-4",
1418
+ align === "inline-start" ? "order-first pl-3" : "order-last pr-3",
1419
+ className
1420
+ ),
1421
+ ...props
1422
+ }
1423
+ );
1424
+ }
1425
+ function InputGroupInput({
1426
+ className,
1427
+ ...props
1428
+ }) {
1429
+ return /* @__PURE__ */ jsx23(
1430
+ "input",
1431
+ {
1432
+ "data-slot": "input-group-input",
1433
+ className: cn(
1434
+ "h-9 min-w-0 flex-1 border-0 bg-transparent px-3 py-1 text-base shadow-none outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed md:text-sm",
1435
+ className
1436
+ ),
1437
+ ...props
1438
+ }
1439
+ );
1440
+ }
1441
+
1442
+ // src/ui/input-otp.tsx
1443
+ import { OTPInput, OTPInputContext } from "input-otp";
1444
+ import { MinusIcon } from "lucide-react";
1445
+ import * as React2 from "react";
1446
+ import { jsx as jsx24, jsxs as jsxs8 } from "react/jsx-runtime";
1447
+ function InputOTP({
1448
+ className,
1449
+ containerClassName,
1450
+ ...props
1451
+ }) {
1452
+ return /* @__PURE__ */ jsx24(
1453
+ OTPInput,
1454
+ {
1455
+ "data-slot": "input-otp",
1456
+ containerClassName: cn(
1457
+ "flex items-center gap-2 has-disabled:opacity-50",
1458
+ containerClassName
1459
+ ),
1460
+ className: cn("disabled:cursor-not-allowed", className),
1461
+ ...props
1462
+ }
1463
+ );
1464
+ }
1465
+ function InputOTPGroup({ className, ...props }) {
1466
+ return /* @__PURE__ */ jsx24(
1467
+ "div",
1468
+ {
1469
+ "data-slot": "input-otp-group",
1470
+ className: cn("flex items-center", className),
1471
+ ...props
1472
+ }
1473
+ );
1474
+ }
1475
+ function InputOTPSlot({
1476
+ index,
1477
+ className,
1478
+ ...props
1479
+ }) {
1480
+ const inputOTPContext = React2.useContext(OTPInputContext);
1481
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
1482
+ return /* @__PURE__ */ jsxs8(
1483
+ "div",
1484
+ {
1485
+ "data-slot": "input-otp-slot",
1486
+ "data-active": isActive,
1487
+ className: cn(
1488
+ "relative flex h-9 w-9 items-center justify-center border-y border-r border-input text-sm shadow-xs transition-all first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50",
1489
+ className
1490
+ ),
1491
+ ...props,
1492
+ children: [
1493
+ char,
1494
+ hasFakeCaret ? /* @__PURE__ */ jsx24("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx24("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) }) : null
1495
+ ]
1496
+ }
1497
+ );
1498
+ }
1499
+ function InputOTPSeparator({ ...props }) {
1500
+ return /* @__PURE__ */ jsx24("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx24(MinusIcon, {}) });
1501
+ }
1502
+
1503
+ // src/ui/item.tsx
1504
+ import { jsx as jsx25 } from "react/jsx-runtime";
1505
+ function Item({ className, ...props }) {
1506
+ return /* @__PURE__ */ jsx25(
1507
+ "div",
1508
+ {
1509
+ "data-slot": "item",
1510
+ className: cn(
1511
+ "group/item flex items-center gap-3 rounded-lg border border-border p-3 text-sm",
1512
+ className
1513
+ ),
1514
+ ...props
1515
+ }
1516
+ );
1517
+ }
1518
+ function ItemMedia({ className, ...props }) {
1519
+ return /* @__PURE__ */ jsx25(
1520
+ "div",
1521
+ {
1522
+ "data-slot": "item-media",
1523
+ className: cn(
1524
+ "flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-5",
1525
+ className
1526
+ ),
1527
+ ...props
1528
+ }
1529
+ );
1530
+ }
1531
+ function ItemContent({ className, ...props }) {
1532
+ return /* @__PURE__ */ jsx25(
1533
+ "div",
1534
+ {
1535
+ "data-slot": "item-content",
1536
+ className: cn("flex min-w-0 flex-1 flex-col gap-0.5", className),
1537
+ ...props
1538
+ }
1539
+ );
1540
+ }
1541
+ function ItemTitle({ className, ...props }) {
1542
+ return /* @__PURE__ */ jsx25(
1543
+ "div",
1544
+ {
1545
+ "data-slot": "item-title",
1546
+ className: cn("line-clamp-1 font-medium", className),
1547
+ ...props
1548
+ }
1549
+ );
1550
+ }
1551
+ function ItemDescription({ className, ...props }) {
1552
+ return /* @__PURE__ */ jsx25(
1553
+ "p",
1554
+ {
1555
+ "data-slot": "item-description",
1556
+ className: cn("line-clamp-2 text-xs text-muted-foreground", className),
1557
+ ...props
1558
+ }
1559
+ );
1560
+ }
1561
+ function ItemActions({ className, ...props }) {
1562
+ return /* @__PURE__ */ jsx25(
1563
+ "div",
1564
+ {
1565
+ "data-slot": "item-actions",
1566
+ className: cn("flex shrink-0 items-center gap-2", className),
1567
+ ...props
1568
+ }
1569
+ );
1570
+ }
1571
+
1572
+ // src/ui/kbd.tsx
1573
+ import { jsx as jsx26 } from "react/jsx-runtime";
1574
+ function Kbd({ className, ...props }) {
1575
+ return /* @__PURE__ */ jsx26(
1576
+ "kbd",
1577
+ {
1578
+ "data-slot": "kbd",
1579
+ className: cn(
1580
+ "pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none",
1581
+ className
1582
+ ),
1583
+ ...props
1584
+ }
1585
+ );
1586
+ }
1587
+
1588
+ // src/ui/label.tsx
1589
+ import { jsx as jsx27 } from "react/jsx-runtime";
1590
+ function Label({
1591
+ className,
1592
+ ...props
1593
+ }) {
1594
+ return /* @__PURE__ */ jsx27(
1595
+ "label",
1596
+ {
1597
+ "data-slot": "label",
1598
+ className: cn(
1599
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
1600
+ className
1601
+ ),
1602
+ ...props
1603
+ }
1604
+ );
1605
+ }
1606
+
1607
+ // src/ui/tooltip.tsx
1608
+ import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
1609
+ import { jsx as jsx28, jsxs as jsxs9 } from "react/jsx-runtime";
1610
+ function TooltipProvider({
1611
+ delay = 0,
1612
+ ...props
1613
+ }) {
1614
+ return /* @__PURE__ */ jsx28(
1615
+ TooltipPrimitive.Provider,
1616
+ {
1617
+ "data-slot": "tooltip-provider",
1618
+ delay,
1619
+ ...props
1620
+ }
1621
+ );
1622
+ }
1623
+ function Tooltip({
1624
+ ...props
1625
+ }) {
1626
+ return /* @__PURE__ */ jsx28(TooltipProvider, { children: /* @__PURE__ */ jsx28(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) });
1627
+ }
1628
+ function TooltipTrigger({
1629
+ ...props
1630
+ }) {
1631
+ return /* @__PURE__ */ jsx28(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
1632
+ }
1633
+ function TooltipContent({
1634
+ className,
1635
+ side = "top",
1636
+ sideOffset = 4,
1637
+ align = "center",
1638
+ children,
1639
+ ...props
1640
+ }) {
1641
+ return /* @__PURE__ */ jsx28(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx28(
1642
+ TooltipPrimitive.Positioner,
1643
+ {
1644
+ align,
1645
+ side,
1646
+ sideOffset,
1647
+ className: "isolate z-50",
1648
+ children: /* @__PURE__ */ jsxs9(
1649
+ TooltipPrimitive.Popup,
1650
+ {
1651
+ "data-slot": "tooltip-content",
1652
+ className: cn(
1653
+ "z-50 w-fit origin-(--transform-origin) rounded-md bg-primary px-3 py-1.5 text-xs text-balance text-primary-foreground duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1654
+ className
1655
+ ),
1656
+ ...props,
1657
+ children: [
1658
+ children,
1659
+ /* @__PURE__ */ jsx28(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 rotate-45 rounded-[2px] bg-primary fill-primary data-[side=top]:-bottom-1 data-[side=bottom]:-top-1 data-[side=left]:-right-1 data-[side=right]:-left-1" })
1660
+ ]
1661
+ }
1662
+ )
1663
+ }
1664
+ ) });
1665
+ }
1666
+
1667
+ // src/ui/menubar.tsx
1668
+ import { Menu as MenuPrimitive2 } from "@base-ui/react/menu";
1669
+ import { Menubar as MenubarPrimitive } from "@base-ui/react/menubar";
1670
+ import { jsx as jsx29 } from "react/jsx-runtime";
1671
+ function Menubar({
1672
+ className,
1673
+ ...props
1674
+ }) {
1675
+ return /* @__PURE__ */ jsx29(
1676
+ MenubarPrimitive,
1677
+ {
1678
+ "data-slot": "menubar",
1679
+ className: cn(
1680
+ "flex h-9 items-center gap-1 rounded-md border border-border bg-background p-1 shadow-xs",
1681
+ className
1682
+ ),
1683
+ ...props
1684
+ }
1685
+ );
1686
+ }
1687
+ function MenubarMenu({
1688
+ ...props
1689
+ }) {
1690
+ return /* @__PURE__ */ jsx29(MenuPrimitive2.Root, { "data-slot": "menubar-menu", ...props });
1691
+ }
1692
+ function MenubarTrigger({
1693
+ className,
1694
+ ...props
1695
+ }) {
1696
+ return /* @__PURE__ */ jsx29(
1697
+ MenuPrimitive2.Trigger,
1698
+ {
1699
+ "data-slot": "menubar-trigger",
1700
+ className: cn(
1701
+ "flex cursor-pointer items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground",
1702
+ className
1703
+ ),
1704
+ ...props
1705
+ }
1706
+ );
1707
+ }
1708
+ function MenubarContent({
1709
+ className,
1710
+ align = "start",
1711
+ side = "bottom",
1712
+ sideOffset = 8,
1713
+ ...props
1714
+ }) {
1715
+ return /* @__PURE__ */ jsx29(MenuPrimitive2.Portal, { children: /* @__PURE__ */ jsx29(
1716
+ MenuPrimitive2.Positioner,
1717
+ {
1718
+ align,
1719
+ side,
1720
+ sideOffset,
1721
+ className: "isolate z-50",
1722
+ children: /* @__PURE__ */ jsx29(
1723
+ MenuPrimitive2.Popup,
1724
+ {
1725
+ "data-slot": "menubar-content",
1726
+ className: cn(
1727
+ "z-50 min-w-36 origin-(--transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1728
+ className
1729
+ ),
1730
+ ...props
1731
+ }
1732
+ )
1733
+ }
1734
+ ) });
1735
+ }
1736
+ function MenubarItem({
1737
+ className,
1738
+ variant = "default",
1739
+ ...props
1740
+ }) {
1741
+ return /* @__PURE__ */ jsx29(
1742
+ MenuPrimitive2.Item,
1743
+ {
1744
+ "data-slot": "menubar-item",
1745
+ "data-variant": variant,
1746
+ className: cn(
1747
+ "relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1748
+ className
1749
+ ),
1750
+ ...props
1751
+ }
1752
+ );
1753
+ }
1754
+ function MenubarSeparator({
1755
+ className,
1756
+ ...props
1757
+ }) {
1758
+ return /* @__PURE__ */ jsx29(
1759
+ MenuPrimitive2.Separator,
1760
+ {
1761
+ "data-slot": "menubar-separator",
1762
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1763
+ ...props
1764
+ }
1765
+ );
1766
+ }
1767
+
1768
+ // src/ui/navigation-menu.tsx
1769
+ import { NavigationMenu as NavigationMenuPrimitive } from "@base-ui/react/navigation-menu";
1770
+ import { ChevronDownIcon as ChevronDownIcon2 } from "lucide-react";
1771
+ import { cva as cva3 } from "class-variance-authority";
1772
+ import { jsx as jsx30, jsxs as jsxs10 } from "react/jsx-runtime";
1773
+ function NavigationMenu({
1774
+ className,
1775
+ children,
1776
+ ...props
1777
+ }) {
1778
+ return /* @__PURE__ */ jsxs10(
1779
+ NavigationMenuPrimitive.Root,
1780
+ {
1781
+ "data-slot": "navigation-menu",
1782
+ className: cn("relative z-10 flex max-w-max items-center justify-center", className),
1783
+ ...props,
1784
+ children: [
1785
+ children,
1786
+ /* @__PURE__ */ jsx30(NavigationMenuViewport, {})
1787
+ ]
1788
+ }
1789
+ );
1790
+ }
1791
+ function NavigationMenuList({
1792
+ className,
1793
+ ...props
1794
+ }) {
1795
+ return /* @__PURE__ */ jsx30(
1796
+ NavigationMenuPrimitive.List,
1797
+ {
1798
+ "data-slot": "navigation-menu-list",
1799
+ className: cn("flex flex-1 list-none items-center justify-center gap-1", className),
1800
+ ...props
1801
+ }
1802
+ );
1803
+ }
1804
+ function NavigationMenuItem({
1805
+ className,
1806
+ ...props
1807
+ }) {
1808
+ return /* @__PURE__ */ jsx30(
1809
+ NavigationMenuPrimitive.Item,
1810
+ {
1811
+ "data-slot": "navigation-menu-item",
1812
+ className: cn("relative", className),
1813
+ ...props
1814
+ }
1815
+ );
1816
+ }
1817
+ var navigationMenuTriggerStyle = cva3(
1818
+ "group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 data-open:bg-accent/50 data-open:text-accent-foreground"
1819
+ );
1820
+ function NavigationMenuTrigger({
1821
+ className,
1822
+ children,
1823
+ ...props
1824
+ }) {
1825
+ return /* @__PURE__ */ jsxs10(
1826
+ NavigationMenuPrimitive.Trigger,
1827
+ {
1828
+ "data-slot": "navigation-menu-trigger",
1829
+ className: cn(navigationMenuTriggerStyle(), className),
1830
+ ...props,
1831
+ children: [
1832
+ children,
1833
+ /* @__PURE__ */ jsx30(
1834
+ ChevronDownIcon2,
1835
+ {
1836
+ className: "relative top-px ml-1 size-3 transition-transform duration-200 group-data-open/navigation-menu-trigger:rotate-180",
1837
+ "aria-hidden": "true"
1838
+ }
1839
+ )
1840
+ ]
1841
+ }
1842
+ );
1843
+ }
1844
+ function NavigationMenuContent({
1845
+ className,
1846
+ ...props
1847
+ }) {
1848
+ return /* @__PURE__ */ jsx30(
1849
+ NavigationMenuPrimitive.Content,
1850
+ {
1851
+ "data-slot": "navigation-menu-content",
1852
+ className: cn(
1853
+ "w-full p-2 data-ending-style:opacity-0 data-starting-style:opacity-0 data-[instant]:transition-none **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
1854
+ className
1855
+ ),
1856
+ ...props
1857
+ }
1858
+ );
1859
+ }
1860
+ function NavigationMenuViewport({ className }) {
1861
+ return /* @__PURE__ */ jsx30(NavigationMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx30(
1862
+ NavigationMenuPrimitive.Positioner,
1863
+ {
1864
+ side: "bottom",
1865
+ align: "start",
1866
+ className: "isolate z-50",
1867
+ children: /* @__PURE__ */ jsx30(
1868
+ NavigationMenuPrimitive.Popup,
1869
+ {
1870
+ "data-slot": "navigation-menu-popup",
1871
+ className: cn(
1872
+ "origin-(--transform-origin) overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1873
+ className
1874
+ ),
1875
+ children: /* @__PURE__ */ jsx30(NavigationMenuPrimitive.Viewport, { "data-slot": "navigation-menu-viewport" })
1876
+ }
1877
+ )
1878
+ }
1879
+ ) });
1880
+ }
1881
+ function NavigationMenuLink({
1882
+ className,
1883
+ ...props
1884
+ }) {
1885
+ return /* @__PURE__ */ jsx30(
1886
+ NavigationMenuPrimitive.Link,
1887
+ {
1888
+ "data-slot": "navigation-menu-link",
1889
+ className: cn(
1890
+ "flex flex-col gap-1 rounded-md p-2 text-sm transition-colors outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 data-active:bg-accent/50 data-active:text-accent-foreground [&_svg:not([class*='size-'])]:size-4",
1891
+ className
1892
+ ),
1893
+ ...props
1894
+ }
1895
+ );
1896
+ }
1897
+
1898
+ // src/ui/pagination.tsx
1899
+ import { ChevronLeftIcon as ChevronLeftIcon3, ChevronRightIcon as ChevronRightIcon5, MoreHorizontalIcon as MoreHorizontalIcon2 } from "lucide-react";
1900
+ import { jsx as jsx31, jsxs as jsxs11 } from "react/jsx-runtime";
1901
+ function Pagination({ className, ...props }) {
1902
+ return /* @__PURE__ */ jsx31(
1903
+ "nav",
1904
+ {
1905
+ role: "navigation",
1906
+ "aria-label": "pagination",
1907
+ "data-slot": "pagination",
1908
+ className: cn("mx-auto flex w-full justify-center", className),
1909
+ ...props
1910
+ }
1911
+ );
1912
+ }
1913
+ function PaginationContent({ className, ...props }) {
1914
+ return /* @__PURE__ */ jsx31(
1915
+ "ul",
1916
+ {
1917
+ "data-slot": "pagination-content",
1918
+ className: cn("flex flex-row items-center gap-1", className),
1919
+ ...props
1920
+ }
1921
+ );
1922
+ }
1923
+ function PaginationItem({ ...props }) {
1924
+ return /* @__PURE__ */ jsx31("li", { "data-slot": "pagination-item", ...props });
1925
+ }
1926
+ function PaginationLink({
1927
+ className,
1928
+ isActive,
1929
+ disabled,
1930
+ ...props
1931
+ }) {
1932
+ return /* @__PURE__ */ jsx31(
1933
+ "a",
1934
+ {
1935
+ "aria-current": isActive ? "page" : void 0,
1936
+ "aria-disabled": disabled || void 0,
1937
+ tabIndex: disabled ? -1 : void 0,
1938
+ "data-slot": "pagination-link",
1939
+ "data-active": isActive || void 0,
1940
+ className: cn(
1941
+ buttonVariants({
1942
+ variant: isActive ? "outline" : "ghost"
1943
+ }),
1944
+ disabled && "pointer-events-none opacity-50",
1945
+ className
1946
+ ),
1947
+ ...props
1948
+ }
1949
+ );
1950
+ }
1951
+ function PaginationPrevious({
1952
+ className,
1953
+ ...props
1954
+ }) {
1955
+ return /* @__PURE__ */ jsxs11(
1956
+ PaginationLink,
1957
+ {
1958
+ "aria-label": "Go to previous page",
1959
+ className: cn("gap-1 px-2.5 sm:pl-2.5", className),
1960
+ ...props,
1961
+ children: [
1962
+ /* @__PURE__ */ jsx31(ChevronLeftIcon3, {}),
1963
+ /* @__PURE__ */ jsx31("span", { className: "hidden sm:block", children: "Previous" })
1964
+ ]
1965
+ }
1966
+ );
1967
+ }
1968
+ function PaginationNext({
1969
+ className,
1970
+ ...props
1971
+ }) {
1972
+ return /* @__PURE__ */ jsxs11(
1973
+ PaginationLink,
1974
+ {
1975
+ "aria-label": "Go to next page",
1976
+ className: cn("gap-1 px-2.5 sm:pr-2.5", className),
1977
+ ...props,
1978
+ children: [
1979
+ /* @__PURE__ */ jsx31("span", { className: "hidden sm:block", children: "Next" }),
1980
+ /* @__PURE__ */ jsx31(ChevronRightIcon5, {})
1981
+ ]
1982
+ }
1983
+ );
1984
+ }
1985
+ function PaginationEllipsis({ className, ...props }) {
1986
+ return /* @__PURE__ */ jsxs11(
1987
+ "span",
1988
+ {
1989
+ "aria-hidden": true,
1990
+ "data-slot": "pagination-ellipsis",
1991
+ className: cn("flex size-9 items-center justify-center", className),
1992
+ ...props,
1993
+ children: [
1994
+ /* @__PURE__ */ jsx31(MoreHorizontalIcon2, { className: "size-4" }),
1995
+ /* @__PURE__ */ jsx31("span", { className: "sr-only", children: "More pages" })
1996
+ ]
1997
+ }
1998
+ );
1999
+ }
2000
+
2001
+ // src/ui/progress.tsx
2002
+ import { Progress as ProgressPrimitive } from "@base-ui/react/progress";
2003
+ import { jsx as jsx32 } from "react/jsx-runtime";
2004
+ function Progress({ className, ...props }) {
2005
+ return /* @__PURE__ */ jsx32(
2006
+ ProgressPrimitive.Root,
2007
+ {
2008
+ "data-slot": "progress",
2009
+ className: cn("relative w-full", className),
2010
+ ...props
2011
+ }
2012
+ );
2013
+ }
2014
+ function ProgressTrack({ className, ...props }) {
2015
+ return /* @__PURE__ */ jsx32(
2016
+ ProgressPrimitive.Track,
2017
+ {
2018
+ "data-slot": "progress-track",
2019
+ className: cn("h-2 w-full overflow-hidden rounded-full bg-muted", className),
2020
+ ...props
2021
+ }
2022
+ );
2023
+ }
2024
+ function ProgressIndicator({
2025
+ className,
2026
+ ...props
2027
+ }) {
2028
+ return /* @__PURE__ */ jsx32(
2029
+ ProgressPrimitive.Indicator,
2030
+ {
2031
+ "data-slot": "progress-indicator",
2032
+ className: cn(
2033
+ "h-full bg-primary transition-[width] duration-300 ease-in-out",
2034
+ className
2035
+ ),
2036
+ ...props
2037
+ }
2038
+ );
2039
+ }
2040
+
2041
+ // src/ui/radio-group.tsx
2042
+ import { Radio as RadioPrimitive } from "@base-ui/react/radio";
2043
+ import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
2044
+ import { jsx as jsx33 } from "react/jsx-runtime";
2045
+ function RadioGroup({ className, ...props }) {
2046
+ return /* @__PURE__ */ jsx33(
2047
+ RadioGroupPrimitive,
2048
+ {
2049
+ "data-slot": "radio-group",
2050
+ className: cn("grid gap-3", className),
2051
+ ...props
2052
+ }
2053
+ );
2054
+ }
2055
+ function RadioGroupItem({ className, ...props }) {
2056
+ return /* @__PURE__ */ jsx33(
2057
+ RadioPrimitive.Root,
2058
+ {
2059
+ "data-slot": "radio-group-item",
2060
+ className: cn(
2061
+ "aspect-square size-4 shrink-0 cursor-pointer rounded-full border border-input shadow-xs transition-colors outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-checked:border-primary",
2062
+ className
2063
+ ),
2064
+ ...props,
2065
+ children: /* @__PURE__ */ jsx33(
2066
+ RadioPrimitive.Indicator,
2067
+ {
2068
+ "data-slot": "radio-group-indicator",
2069
+ className: "flex items-center justify-center",
2070
+ children: /* @__PURE__ */ jsx33("span", { className: "size-2 rounded-full bg-primary" })
2071
+ }
2072
+ )
2073
+ }
2074
+ );
2075
+ }
2076
+
2077
+ // src/ui/resizable.tsx
2078
+ import { GripVerticalIcon } from "lucide-react";
2079
+ import {
2080
+ Group as PanelGroupPrimitive,
2081
+ Panel as PanelPrimitive,
2082
+ Separator as PanelResizeHandlePrimitive
2083
+ } from "react-resizable-panels";
2084
+ import { jsx as jsx34 } from "react/jsx-runtime";
2085
+ function PanelGroup({
2086
+ className,
2087
+ ...props
2088
+ }) {
2089
+ return /* @__PURE__ */ jsx34(
2090
+ PanelGroupPrimitive,
2091
+ {
2092
+ "data-slot": "resizable-panel-group",
2093
+ className: cn(
2094
+ "flex h-full w-full data-[orientation=vertical]:flex-col",
2095
+ className
2096
+ ),
2097
+ ...props
2098
+ }
2099
+ );
2100
+ }
2101
+ function Panel({ ...props }) {
2102
+ return /* @__PURE__ */ jsx34(PanelPrimitive, { "data-slot": "resizable-panel", ...props });
2103
+ }
2104
+ function ResizableHandle({
2105
+ withHandle,
2106
+ className,
2107
+ ...props
2108
+ }) {
2109
+ return /* @__PURE__ */ jsx34(
2110
+ PanelResizeHandlePrimitive,
2111
+ {
2112
+ "data-slot": "resizable-handle",
2113
+ className: cn(
2114
+ "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-none data-[orientation=vertical]:h-px data-[orientation=vertical]:w-full data-[orientation=vertical]:after:left-0 data-[orientation=vertical]:after:h-1 data-[orientation=vertical]:after:w-full data-[orientation=vertical]:after:translate-x-0 data-[orientation=vertical]:after:-translate-y-1/2 [&[data-orientation=vertical]>div]:rotate-90",
2115
+ className
2116
+ ),
2117
+ ...props,
2118
+ children: withHandle ? /* @__PURE__ */ jsx34("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-xs border border-border bg-border", children: /* @__PURE__ */ jsx34(GripVerticalIcon, { className: "size-2.5" }) }) : null
2119
+ }
2120
+ );
2121
+ }
2122
+
2123
+ // src/ui/scroll-area.tsx
2124
+ import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area";
2125
+ import { jsx as jsx35, jsxs as jsxs12 } from "react/jsx-runtime";
2126
+ function ScrollArea({
2127
+ className,
2128
+ children,
2129
+ ...props
2130
+ }) {
2131
+ return /* @__PURE__ */ jsxs12(
2132
+ ScrollAreaPrimitive.Root,
2133
+ {
2134
+ "data-slot": "scroll-area",
2135
+ className: cn("relative overflow-hidden", className),
2136
+ ...props,
2137
+ children: [
2138
+ /* @__PURE__ */ jsx35(
2139
+ ScrollAreaPrimitive.Viewport,
2140
+ {
2141
+ "data-slot": "scroll-area-viewport",
2142
+ className: "size-full rounded-[inherit] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50",
2143
+ children
2144
+ }
2145
+ ),
2146
+ /* @__PURE__ */ jsx35(ScrollBar, {}),
2147
+ /* @__PURE__ */ jsx35(ScrollAreaPrimitive.Corner, {})
2148
+ ]
2149
+ }
2150
+ );
2151
+ }
2152
+ function ScrollBar({
2153
+ className,
2154
+ orientation = "vertical",
2155
+ ...props
2156
+ }) {
2157
+ return /* @__PURE__ */ jsx35(
2158
+ ScrollAreaPrimitive.Scrollbar,
2159
+ {
2160
+ "data-slot": "scroll-area-scrollbar",
2161
+ orientation,
2162
+ className: cn(
2163
+ "flex touch-none p-px transition-colors select-none",
2164
+ orientation === "vertical" && "h-full w-2 border-l border-l-transparent",
2165
+ orientation === "horizontal" && "h-2 flex-col border-t border-t-transparent",
2166
+ className
2167
+ ),
2168
+ ...props,
2169
+ children: /* @__PURE__ */ jsx35(
2170
+ ScrollAreaPrimitive.Thumb,
2171
+ {
2172
+ "data-slot": "scroll-area-thumb",
2173
+ className: "relative flex-1 rounded-full bg-border"
2174
+ }
2175
+ )
2176
+ }
2177
+ );
2178
+ }
2179
+
2180
+ // src/ui/select.tsx
2181
+ import { Select as SelectPrimitive } from "@base-ui/react/select";
2182
+ import { CheckIcon as CheckIcon2, ChevronDownIcon as ChevronDownIcon3, ChevronUpIcon } from "lucide-react";
2183
+ import { jsx as jsx36, jsxs as jsxs13 } from "react/jsx-runtime";
2184
+ var Select = SelectPrimitive.Root;
2185
+ function SelectGroup({
2186
+ ...props
2187
+ }) {
2188
+ return /* @__PURE__ */ jsx36(SelectPrimitive.Group, { "data-slot": "select-group", ...props });
2189
+ }
2190
+ function SelectValue({
2191
+ ...props
2192
+ }) {
2193
+ return /* @__PURE__ */ jsx36(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
2194
+ }
2195
+ function SelectTrigger({
2196
+ className,
2197
+ size = "default",
2198
+ children,
2199
+ ...props
2200
+ }) {
2201
+ return /* @__PURE__ */ jsxs13(
2202
+ SelectPrimitive.Trigger,
2203
+ {
2204
+ "data-slot": "select-trigger",
2205
+ "data-size": size,
2206
+ className: cn(
2207
+ "flex w-fit cursor-pointer items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-colors outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 data-[placeholder]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2208
+ className
2209
+ ),
2210
+ ...props,
2211
+ children: [
2212
+ children,
2213
+ /* @__PURE__ */ jsx36(
2214
+ SelectPrimitive.Icon,
2215
+ {
2216
+ render: /* @__PURE__ */ jsx36(ChevronDownIcon3, { className: "size-4 opacity-50" })
2217
+ }
2218
+ )
2219
+ ]
2220
+ }
2221
+ );
2222
+ }
2223
+ function SelectContent({
2224
+ className,
2225
+ children,
2226
+ side = "bottom",
2227
+ sideOffset = 4,
2228
+ align = "center",
2229
+ alignItemWithTrigger = false,
2230
+ ...props
2231
+ }) {
2232
+ return /* @__PURE__ */ jsx36(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx36(
2233
+ SelectPrimitive.Positioner,
2234
+ {
2235
+ side,
2236
+ sideOffset,
2237
+ align,
2238
+ alignItemWithTrigger,
2239
+ className: "isolate z-50",
2240
+ children: /* @__PURE__ */ jsxs13(
2241
+ SelectPrimitive.Popup,
2242
+ {
2243
+ "data-slot": "select-content",
2244
+ className: cn(
2245
+ "relative z-50 max-h-96 min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-md border border-border bg-popover text-popover-foreground shadow-md duration-200 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2246
+ className
2247
+ ),
2248
+ ...props,
2249
+ children: [
2250
+ /* @__PURE__ */ jsx36(SelectScrollUpButton, {}),
2251
+ /* @__PURE__ */ jsx36(SelectPrimitive.List, { className: "p-1", children }),
2252
+ /* @__PURE__ */ jsx36(SelectScrollDownButton, {})
2253
+ ]
2254
+ }
2255
+ )
2256
+ }
2257
+ ) });
2258
+ }
2259
+ function SelectLabel({
2260
+ className,
2261
+ ...props
2262
+ }) {
2263
+ return /* @__PURE__ */ jsx36(
2264
+ SelectPrimitive.GroupLabel,
2265
+ {
2266
+ "data-slot": "select-label",
2267
+ className: cn("px-2 py-1.5 text-xs text-muted-foreground", className),
2268
+ ...props
2269
+ }
2270
+ );
2271
+ }
2272
+ function SelectItem({
2273
+ className,
2274
+ children,
2275
+ ...props
2276
+ }) {
2277
+ return /* @__PURE__ */ jsxs13(
2278
+ SelectPrimitive.Item,
2279
+ {
2280
+ "data-slot": "select-item",
2281
+ className: cn(
2282
+ "relative flex w-full cursor-pointer items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2283
+ className
2284
+ ),
2285
+ ...props,
2286
+ children: [
2287
+ /* @__PURE__ */ jsx36("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx36(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx36(CheckIcon2, { className: "size-4" }) }) }),
2288
+ /* @__PURE__ */ jsx36(SelectPrimitive.ItemText, { children })
2289
+ ]
2290
+ }
2291
+ );
2292
+ }
2293
+ function SelectSeparator({
2294
+ className,
2295
+ ...props
2296
+ }) {
2297
+ return /* @__PURE__ */ jsx36(
2298
+ SelectPrimitive.Separator,
2299
+ {
2300
+ "data-slot": "select-separator",
2301
+ className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
2302
+ ...props
2303
+ }
2304
+ );
2305
+ }
2306
+ function SelectScrollUpButton({
2307
+ className,
2308
+ ...props
2309
+ }) {
2310
+ return /* @__PURE__ */ jsx36(
2311
+ SelectPrimitive.ScrollUpArrow,
2312
+ {
2313
+ "data-slot": "select-scroll-up-button",
2314
+ className: cn(
2315
+ "flex cursor-default items-center justify-center py-1",
2316
+ className
2317
+ ),
2318
+ ...props,
2319
+ children: /* @__PURE__ */ jsx36(ChevronUpIcon, { className: "size-4" })
2320
+ }
2321
+ );
2322
+ }
2323
+ function SelectScrollDownButton({
2324
+ className,
2325
+ ...props
2326
+ }) {
2327
+ return /* @__PURE__ */ jsx36(
2328
+ SelectPrimitive.ScrollDownArrow,
2329
+ {
2330
+ "data-slot": "select-scroll-down-button",
2331
+ className: cn(
2332
+ "flex cursor-default items-center justify-center py-1",
2333
+ className
2334
+ ),
2335
+ ...props,
2336
+ children: /* @__PURE__ */ jsx36(ChevronDownIcon3, { className: "size-4" })
2337
+ }
2338
+ );
2339
+ }
2340
+
2341
+ // src/ui/separator.tsx
2342
+ import { Separator as SeparatorPrimitive } from "@base-ui/react/separator";
2343
+ import { jsx as jsx37 } from "react/jsx-runtime";
2344
+ function Separator({
2345
+ className,
2346
+ orientation = "horizontal",
2347
+ decorative: _decorative,
2348
+ ...props
2349
+ }) {
2350
+ return /* @__PURE__ */ jsx37(
2351
+ SeparatorPrimitive,
2352
+ {
2353
+ "data-slot": "separator",
2354
+ orientation,
2355
+ className: cn(
2356
+ "shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
2357
+ className
2358
+ ),
2359
+ ...props
2360
+ }
2361
+ );
2362
+ }
2363
+
2364
+ // src/ui/sheet.tsx
2365
+ import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
2366
+ import { XIcon } from "lucide-react";
2367
+ import { cva as cva4 } from "class-variance-authority";
2368
+ import { jsx as jsx38, jsxs as jsxs14 } from "react/jsx-runtime";
2369
+ function Sheet({
2370
+ ...props
2371
+ }) {
2372
+ return /* @__PURE__ */ jsx38(DialogPrimitive.Root, { "data-slot": "sheet", ...props });
2373
+ }
2374
+ function SheetTrigger({
2375
+ ...props
2376
+ }) {
2377
+ return /* @__PURE__ */ jsx38(DialogPrimitive.Trigger, { "data-slot": "sheet-trigger", ...props });
2378
+ }
2379
+ function SheetClose({
2380
+ ...props
2381
+ }) {
2382
+ return /* @__PURE__ */ jsx38(DialogPrimitive.Close, { "data-slot": "sheet-close", ...props });
2383
+ }
2384
+ function SheetPortal({
2385
+ ...props
2386
+ }) {
2387
+ return /* @__PURE__ */ jsx38(DialogPrimitive.Portal, { "data-slot": "sheet-portal", ...props });
2388
+ }
2389
+ function SheetOverlay({
2390
+ className,
2391
+ ...props
2392
+ }) {
2393
+ return /* @__PURE__ */ jsx38(
2394
+ DialogPrimitive.Backdrop,
2395
+ {
2396
+ "data-slot": "sheet-overlay",
2397
+ className: cn(
2398
+ "fixed inset-0 z-50 bg-black/50 data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
2399
+ className
2400
+ ),
2401
+ ...props
2402
+ }
2403
+ );
2404
+ }
2405
+ var sheetVariants = cva4(
2406
+ "fixed z-50 flex flex-col gap-4 border-border bg-background shadow-lg transition ease-in-out data-open:animate-in data-open:duration-300 data-closed:animate-out data-closed:duration-200",
2407
+ {
2408
+ variants: {
2409
+ side: {
2410
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-open:slide-in-from-right data-closed:slide-out-to-right sm:max-w-sm",
2411
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-open:slide-in-from-left data-closed:slide-out-to-left sm:max-w-sm",
2412
+ top: "inset-x-0 top-0 border-b data-open:slide-in-from-top data-closed:slide-out-to-top",
2413
+ bottom: "inset-x-0 bottom-0 border-t data-open:slide-in-from-bottom data-closed:slide-out-to-bottom"
2414
+ }
2415
+ },
2416
+ defaultVariants: {
2417
+ side: "right"
2418
+ }
2419
+ }
2420
+ );
2421
+ function SheetContent({
2422
+ className,
2423
+ children,
2424
+ side = "right",
2425
+ ...props
2426
+ }) {
2427
+ return /* @__PURE__ */ jsxs14(SheetPortal, { "data-slot": "sheet-portal", children: [
2428
+ /* @__PURE__ */ jsx38(SheetOverlay, {}),
2429
+ /* @__PURE__ */ jsxs14(
2430
+ DialogPrimitive.Popup,
2431
+ {
2432
+ "data-slot": "sheet-content",
2433
+ className: cn(sheetVariants({ side }), className),
2434
+ ...props,
2435
+ children: [
2436
+ children,
2437
+ /* @__PURE__ */ jsxs14(
2438
+ DialogPrimitive.Close,
2439
+ {
2440
+ "data-slot": "sheet-close",
2441
+ render: /* @__PURE__ */ jsx38(
2442
+ "button",
2443
+ {
2444
+ type: "button",
2445
+ className: "absolute top-4 right-4 cursor-pointer rounded-xs opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
2446
+ }
2447
+ ),
2448
+ children: [
2449
+ /* @__PURE__ */ jsx38(XIcon, {}),
2450
+ /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Close" })
2451
+ ]
2452
+ }
2453
+ )
2454
+ ]
2455
+ }
2456
+ )
2457
+ ] });
2458
+ }
2459
+ function SheetHeader({ className, ...props }) {
2460
+ return /* @__PURE__ */ jsx38(
2461
+ "div",
2462
+ {
2463
+ "data-slot": "sheet-header",
2464
+ className: cn("flex flex-col gap-1.5 p-4", className),
2465
+ ...props
2466
+ }
2467
+ );
2468
+ }
2469
+ function SheetFooter({ className, ...props }) {
2470
+ return /* @__PURE__ */ jsx38(
2471
+ "div",
2472
+ {
2473
+ "data-slot": "sheet-footer",
2474
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
2475
+ ...props
2476
+ }
2477
+ );
2478
+ }
2479
+ function SheetTitle({
2480
+ className,
2481
+ ...props
2482
+ }) {
2483
+ return /* @__PURE__ */ jsx38(
2484
+ DialogPrimitive.Title,
2485
+ {
2486
+ "data-slot": "sheet-title",
2487
+ className: cn("font-semibold text-foreground", className),
2488
+ ...props
2489
+ }
2490
+ );
2491
+ }
2492
+ function SheetDescription({
2493
+ className,
2494
+ ...props
2495
+ }) {
2496
+ return /* @__PURE__ */ jsx38(
2497
+ DialogPrimitive.Description,
2498
+ {
2499
+ "data-slot": "sheet-description",
2500
+ className: cn("text-sm text-muted-foreground", className),
2501
+ ...props
2502
+ }
2503
+ );
2504
+ }
2505
+
2506
+ // src/ui/skeleton.tsx
2507
+ import { jsx as jsx39 } from "react/jsx-runtime";
2508
+ function Skeleton({ className, ...props }) {
2509
+ return /* @__PURE__ */ jsx39(
2510
+ "div",
2511
+ {
2512
+ "data-slot": "skeleton",
2513
+ className: cn("animate-pulse rounded-md bg-muted", className),
2514
+ ...props
2515
+ }
2516
+ );
2517
+ }
2518
+
2519
+ // src/ui/slider.tsx
2520
+ import { Slider as SliderPrimitive } from "@base-ui/react/slider";
2521
+ import { jsx as jsx40 } from "react/jsx-runtime";
2522
+ function Slider({ className, ...props }) {
2523
+ return /* @__PURE__ */ jsx40(
2524
+ SliderPrimitive.Root,
2525
+ {
2526
+ "data-slot": "slider",
2527
+ className: cn(
2528
+ "relative flex w-full touch-none items-center select-none data-disabled:opacity-50",
2529
+ className
2530
+ ),
2531
+ ...props
2532
+ }
2533
+ );
2534
+ }
2535
+ function SliderControl({ className, ...props }) {
2536
+ return /* @__PURE__ */ jsx40(
2537
+ SliderPrimitive.Control,
2538
+ {
2539
+ "data-slot": "slider-control",
2540
+ className: cn("flex w-full items-center py-2", className),
2541
+ ...props
2542
+ }
2543
+ );
2544
+ }
2545
+ function SliderTrack({ className, ...props }) {
2546
+ return /* @__PURE__ */ jsx40(
2547
+ SliderPrimitive.Track,
2548
+ {
2549
+ "data-slot": "slider-track",
2550
+ className: cn(
2551
+ "relative h-1.5 w-full grow overflow-hidden rounded-full bg-muted",
2552
+ className
2553
+ ),
2554
+ ...props
2555
+ }
2556
+ );
2557
+ }
2558
+ function SliderIndicator({ className, ...props }) {
2559
+ return /* @__PURE__ */ jsx40(
2560
+ SliderPrimitive.Indicator,
2561
+ {
2562
+ "data-slot": "slider-indicator",
2563
+ className: cn("absolute h-full bg-primary", className),
2564
+ ...props
2565
+ }
2566
+ );
2567
+ }
2568
+ function SliderThumb({ className, ...props }) {
2569
+ return /* @__PURE__ */ jsx40(
2570
+ SliderPrimitive.Thumb,
2571
+ {
2572
+ "data-slot": "slider-thumb",
2573
+ className: cn(
2574
+ "block size-4 shrink-0 cursor-grab rounded-full border border-primary bg-background shadow-sm transition-colors focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none active:cursor-grabbing disabled:pointer-events-none disabled:opacity-50",
2575
+ className
2576
+ ),
2577
+ ...props
2578
+ }
2579
+ );
2580
+ }
2581
+
2582
+ // src/ui/toast.tsx
2583
+ import { Toast as ToastPrimitive } from "@base-ui/react/toast";
2584
+ import { XIcon as XIcon2 } from "lucide-react";
2585
+ import { jsx as jsx41, jsxs as jsxs15 } from "react/jsx-runtime";
2586
+ var toastManager = ToastPrimitive.createToastManager();
2587
+ function toast(message, options = {}) {
2588
+ return toastManager.add({
2589
+ title: message,
2590
+ description: options.description,
2591
+ type: options.variant ?? "info"
2592
+ });
2593
+ }
2594
+ var toastVariantClass = {
2595
+ success: "border-l-4 border-l-success",
2596
+ error: "border-l-4 border-l-destructive",
2597
+ info: "border-l-4 border-l-info"
2598
+ };
2599
+ function ToasterViewport({ className }) {
2600
+ const { toasts } = ToastPrimitive.useToastManager();
2601
+ return /* @__PURE__ */ jsx41(ToastPrimitive.Portal, { children: /* @__PURE__ */ jsx41(
2602
+ ToastPrimitive.Viewport,
2603
+ {
2604
+ "data-slot": "toast-viewport",
2605
+ className: cn(
2606
+ "fixed top-4 right-4 z-[100] flex w-80 flex-col gap-2 outline-none",
2607
+ className
2608
+ ),
2609
+ children: toasts.map((item) => /* @__PURE__ */ jsx41(
2610
+ ToastPrimitive.Root,
2611
+ {
2612
+ toast: item,
2613
+ "data-slot": "toast",
2614
+ "data-type": item.type ?? "info",
2615
+ className: cn(
2616
+ "rounded-md border border-border bg-popover px-4 py-3 text-sm text-popover-foreground shadow-md transition-[opacity,transform] duration-200 data-ending-style:animate-toast-out data-starting-style:animate-toast-in",
2617
+ toastVariantClass[item.type ?? "info"] ?? toastVariantClass.info
2618
+ ),
2619
+ children: /* @__PURE__ */ jsxs15(ToastPrimitive.Content, { className: "flex items-start justify-between gap-2", children: [
2620
+ /* @__PURE__ */ jsxs15("div", { className: "grid gap-0.5", children: [
2621
+ /* @__PURE__ */ jsx41(
2622
+ ToastPrimitive.Title,
2623
+ {
2624
+ "data-slot": "toast-title",
2625
+ className: "font-medium"
2626
+ }
2627
+ ),
2628
+ /* @__PURE__ */ jsx41(
2629
+ ToastPrimitive.Description,
2630
+ {
2631
+ "data-slot": "toast-description",
2632
+ className: "text-muted-foreground"
2633
+ }
2634
+ )
2635
+ ] }),
2636
+ /* @__PURE__ */ jsx41(
2637
+ ToastPrimitive.Close,
2638
+ {
2639
+ "data-slot": "toast-close",
2640
+ "aria-label": "Close",
2641
+ className: "cursor-pointer rounded-xs opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-none [&_svg]:size-3.5",
2642
+ children: /* @__PURE__ */ jsx41(XIcon2, {})
2643
+ }
2644
+ )
2645
+ ] })
2646
+ },
2647
+ item.id
2648
+ ))
2649
+ }
2650
+ ) });
2651
+ }
2652
+ function Toaster({ className }) {
2653
+ return /* @__PURE__ */ jsx41(ToastPrimitive.Provider, { toastManager, children: /* @__PURE__ */ jsx41(ToasterViewport, { className }) });
2654
+ }
2655
+
2656
+ // src/ui/spinner.tsx
2657
+ import { Loader2Icon } from "lucide-react";
2658
+ import { jsx as jsx42 } from "react/jsx-runtime";
2659
+ function Spinner({ className, ...props }) {
2660
+ return /* @__PURE__ */ jsx42(
2661
+ Loader2Icon,
2662
+ {
2663
+ role: "status",
2664
+ "aria-label": "Loading",
2665
+ "data-slot": "spinner",
2666
+ className: cn("size-4 animate-spin", className),
2667
+ ...props
2668
+ }
2669
+ );
2670
+ }
2671
+
2672
+ // src/ui/switch.tsx
2673
+ import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
2674
+ import { jsx as jsx43 } from "react/jsx-runtime";
2675
+ function Switch({ className, ...props }) {
2676
+ return /* @__PURE__ */ jsx43(
2677
+ SwitchPrimitive.Root,
2678
+ {
2679
+ "data-slot": "switch",
2680
+ className: cn(
2681
+ "inline-flex h-[1.15rem] w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent shadow-xs transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-checked:bg-primary data-unchecked:bg-input",
2682
+ className
2683
+ ),
2684
+ ...props,
2685
+ children: /* @__PURE__ */ jsx43(
2686
+ SwitchPrimitive.Thumb,
2687
+ {
2688
+ "data-slot": "switch-thumb",
2689
+ className: "pointer-events-none block size-4 rounded-full bg-background transition-transform data-checked:translate-x-[calc(100%-2px)] data-unchecked:translate-x-0"
2690
+ }
2691
+ )
2692
+ }
2693
+ );
2694
+ }
2695
+
2696
+ // src/ui/tabs.tsx
2697
+ import { Tabs as TabsPrimitive } from "@base-ui/react/tabs";
2698
+ import { jsx as jsx44 } from "react/jsx-runtime";
2699
+ function Tabs({
2700
+ className,
2701
+ ...props
2702
+ }) {
2703
+ return /* @__PURE__ */ jsx44(
2704
+ TabsPrimitive.Root,
2705
+ {
2706
+ "data-slot": "tabs",
2707
+ className: cn("flex flex-col gap-2", className),
2708
+ ...props
2709
+ }
2710
+ );
2711
+ }
2712
+ function TabsList({
2713
+ className,
2714
+ ...props
2715
+ }) {
2716
+ return /* @__PURE__ */ jsx44(
2717
+ TabsPrimitive.List,
2718
+ {
2719
+ "data-slot": "tabs-list",
2720
+ className: cn(
2721
+ "inline-flex h-9 w-fit items-center justify-center rounded-lg bg-muted p-[3px] text-muted-foreground",
2722
+ className
2723
+ ),
2724
+ ...props
2725
+ }
2726
+ );
2727
+ }
2728
+ function TabsTrigger({
2729
+ className,
2730
+ ...props
2731
+ }) {
2732
+ return /* @__PURE__ */ jsx44(
2733
+ TabsPrimitive.Tab,
2734
+ {
2735
+ "data-slot": "tabs-trigger",
2736
+ className: cn(
2737
+ "inline-flex h-[calc(100%-1px)] flex-1 cursor-pointer items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground transition-colors focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-active:border-border data-active:bg-background data-active:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2738
+ className
2739
+ ),
2740
+ ...props
2741
+ }
2742
+ );
2743
+ }
2744
+ function TabsContent({
2745
+ className,
2746
+ ...props
2747
+ }) {
2748
+ return /* @__PURE__ */ jsx44(
2749
+ TabsPrimitive.Panel,
2750
+ {
2751
+ "data-slot": "tabs-content",
2752
+ className: cn("flex-1 outline-none", className),
2753
+ ...props
2754
+ }
2755
+ );
2756
+ }
2757
+
2758
+ // src/ui/toggle.tsx
2759
+ import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
2760
+ import { cva as cva5 } from "class-variance-authority";
2761
+ import { jsx as jsx45 } from "react/jsx-runtime";
2762
+ var toggleVariants = cva5(
2763
+ "inline-flex cursor-pointer items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-colors outline-none hover:bg-muted hover:text-muted-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-pressed:bg-accent data-pressed:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2764
+ {
2765
+ variants: {
2766
+ variant: {
2767
+ default: "bg-transparent",
2768
+ outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
2769
+ },
2770
+ size: {
2771
+ default: "h-9 px-2 min-w-9",
2772
+ sm: "h-8 px-1.5 min-w-8",
2773
+ lg: "h-10 px-2.5 min-w-10"
2774
+ }
2775
+ },
2776
+ defaultVariants: {
2777
+ variant: "default",
2778
+ size: "default"
2779
+ }
2780
+ }
2781
+ );
2782
+ function Toggle({
2783
+ className,
2784
+ variant,
2785
+ size,
2786
+ ...props
2787
+ }) {
2788
+ return /* @__PURE__ */ jsx45(
2789
+ TogglePrimitive,
2790
+ {
2791
+ "data-slot": "toggle",
2792
+ className: cn(toggleVariants({ variant, size, className })),
2793
+ ...props
2794
+ }
2795
+ );
2796
+ }
2797
+
2798
+ // src/ui/toggle-group.tsx
2799
+ import { Toggle as TogglePrimitive2 } from "@base-ui/react/toggle";
2800
+ import { ToggleGroup as ToggleGroupPrimitive } from "@base-ui/react/toggle-group";
2801
+ import * as React3 from "react";
2802
+ import { jsx as jsx46 } from "react/jsx-runtime";
2803
+ var ToggleGroupContext = React3.createContext({
2804
+ size: "default",
2805
+ variant: "default"
2806
+ });
2807
+ function ToggleGroup({
2808
+ className,
2809
+ variant = "default",
2810
+ size = "default",
2811
+ children,
2812
+ ...props
2813
+ }) {
2814
+ return /* @__PURE__ */ jsx46(
2815
+ ToggleGroupPrimitive,
2816
+ {
2817
+ "data-slot": "toggle-group",
2818
+ "data-variant": variant,
2819
+ "data-size": size,
2820
+ className: cn(
2821
+ "group/toggle-group flex w-fit items-center rounded-md [&>[data-slot=toggle]]:rounded-none [&>[data-slot=toggle]]:first:rounded-l-md [&>[data-slot=toggle]]:last:rounded-r-md",
2822
+ className
2823
+ ),
2824
+ ...props,
2825
+ children: /* @__PURE__ */ jsx46(ToggleGroupContext.Provider, { value: { variant, size }, children })
2826
+ }
2827
+ );
2828
+ }
2829
+ function ToggleGroupItem({
2830
+ className,
2831
+ children,
2832
+ variant,
2833
+ size,
2834
+ ...props
2835
+ }) {
2836
+ const context = React3.useContext(ToggleGroupContext);
2837
+ return /* @__PURE__ */ jsx46(
2838
+ TogglePrimitive2,
2839
+ {
2840
+ "data-slot": "toggle-group-item",
2841
+ "data-variant": variant ?? context.variant,
2842
+ "data-size": size ?? context.size,
2843
+ className: cn(
2844
+ toggleVariants({
2845
+ variant: variant ?? context.variant,
2846
+ size: size ?? context.size
2847
+ }),
2848
+ "min-w-0 flex-1 shrink-0 shadow-none focus:z-10 focus-visible:z-10",
2849
+ className
2850
+ ),
2851
+ ...props,
2852
+ children
2853
+ }
2854
+ );
2855
+ }
2856
+
2857
+ // src/ui/typography.tsx
2858
+ import { cva as cva6 } from "class-variance-authority";
2859
+ import { jsx as jsx47 } from "react/jsx-runtime";
2860
+ var typographyVariants = cva6("", {
2861
+ variants: {
2862
+ variant: {
2863
+ h1: "scroll-m-20 text-4xl font-extrabold tracking-tight text-balance",
2864
+ h2: "scroll-m-20 border-b border-border pb-2 text-3xl font-semibold tracking-tight",
2865
+ h3: "scroll-m-20 text-2xl font-semibold tracking-tight",
2866
+ h4: "scroll-m-20 text-xl font-semibold tracking-tight",
2867
+ p: "leading-7",
2868
+ blockquote: "mt-6 border-l-2 border-border pl-6 italic",
2869
+ list: "my-6 ml-6 list-disc [&>li]:mt-2",
2870
+ "inline-code": "relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold",
2871
+ lead: "text-xl text-muted-foreground",
2872
+ muted: "text-sm text-muted-foreground",
2873
+ small: "text-sm leading-none font-medium"
2874
+ }
2875
+ },
2876
+ defaultVariants: {
2877
+ variant: "p"
2878
+ }
2879
+ });
2880
+ var variantTagMap = {
2881
+ h1: "h1",
2882
+ h2: "h2",
2883
+ h3: "h3",
2884
+ h4: "h4",
2885
+ p: "p",
2886
+ blockquote: "blockquote",
2887
+ list: "ul",
2888
+ "inline-code": "code",
2889
+ lead: "p",
2890
+ muted: "p",
2891
+ small: "small"
2892
+ };
2893
+ function Typography({ className, variant = "p", ...props }) {
2894
+ const Tag = variantTagMap[variant ?? "p"];
2895
+ return /* @__PURE__ */ jsx47(
2896
+ Tag,
2897
+ {
2898
+ "data-slot": "typography",
2899
+ "data-variant": variant,
2900
+ className: cn(typographyVariants({ variant }), className),
2901
+ ...props
2902
+ }
2903
+ );
2904
+ }
2905
+
2906
+ export {
2907
+ Alert,
2908
+ AlertTitle,
2909
+ AlertDescription,
2910
+ AlertDialog,
2911
+ AlertDialogTrigger,
2912
+ AlertDialogPortal,
2913
+ AlertDialogOverlay,
2914
+ AlertDialogContent,
2915
+ AlertDialogHeader,
2916
+ AlertDialogFooter,
2917
+ AlertDialogTitle,
2918
+ AlertDialogDescription,
2919
+ AlertDialogAction,
2920
+ AlertDialogCancel,
2921
+ AspectRatio,
2922
+ Avatar,
2923
+ AvatarImage,
2924
+ AvatarFallback,
2925
+ badgeVariants,
2926
+ Badge,
2927
+ Breadcrumb,
2928
+ BreadcrumbList,
2929
+ BreadcrumbItem,
2930
+ BreadcrumbLink,
2931
+ BreadcrumbPage,
2932
+ BreadcrumbSeparator,
2933
+ BreadcrumbEllipsis,
2934
+ ButtonGroup,
2935
+ Calendar,
2936
+ useCarousel,
2937
+ Carousel,
2938
+ CarouselContent,
2939
+ CarouselItem,
2940
+ CarouselPrevious,
2941
+ CarouselNext,
2942
+ Checkbox,
2943
+ Collapsible,
2944
+ CollapsibleTrigger,
2945
+ CollapsibleContent,
2946
+ Combobox,
2947
+ ComboboxTrigger,
2948
+ ComboboxContent,
2949
+ Command,
2950
+ CommandInput,
2951
+ CommandList,
2952
+ CommandEmpty,
2953
+ CommandGroup,
2954
+ CommandItem,
2955
+ CHART_TOKEN_COLORS,
2956
+ chartColor,
2957
+ ChartContainer,
2958
+ Textarea,
2959
+ ContextMenu,
2960
+ ContextMenuTrigger,
2961
+ ContextMenuContent,
2962
+ ContextMenuItem,
2963
+ ContextMenuSeparator,
2964
+ Input,
2965
+ Table,
2966
+ TableHeader,
2967
+ TableBody,
2968
+ TableFooter,
2969
+ TableRow,
2970
+ TableHead,
2971
+ TableCell,
2972
+ TableCaption,
2973
+ DropdownMenu,
2974
+ DropdownMenuTrigger,
2975
+ DropdownMenuContent,
2976
+ DropdownMenuItem,
2977
+ DropdownMenuSeparator,
2978
+ DropdownMenuSub,
2979
+ DropdownMenuSubTrigger,
2980
+ DropdownMenuSubContent,
2981
+ Empty,
2982
+ EmptyHeader,
2983
+ EmptyTitle,
2984
+ EmptyDescription,
2985
+ EmptyContent,
2986
+ Field,
2987
+ FieldLabel,
2988
+ FieldDescription,
2989
+ FieldError,
2990
+ HoverCard,
2991
+ HoverCardTrigger,
2992
+ HoverCardContent,
2993
+ InputGroup,
2994
+ InputGroupAddon,
2995
+ InputGroupInput,
2996
+ InputOTP,
2997
+ InputOTPGroup,
2998
+ InputOTPSlot,
2999
+ InputOTPSeparator,
3000
+ Item,
3001
+ ItemMedia,
3002
+ ItemContent,
3003
+ ItemTitle,
3004
+ ItemDescription,
3005
+ ItemActions,
3006
+ Kbd,
3007
+ Label,
3008
+ TooltipProvider,
3009
+ Tooltip,
3010
+ TooltipTrigger,
3011
+ TooltipContent,
3012
+ Menubar,
3013
+ MenubarMenu,
3014
+ MenubarTrigger,
3015
+ MenubarContent,
3016
+ MenubarItem,
3017
+ MenubarSeparator,
3018
+ NavigationMenu,
3019
+ NavigationMenuList,
3020
+ NavigationMenuItem,
3021
+ navigationMenuTriggerStyle,
3022
+ NavigationMenuTrigger,
3023
+ NavigationMenuContent,
3024
+ NavigationMenuViewport,
3025
+ NavigationMenuLink,
3026
+ Pagination,
3027
+ PaginationContent,
3028
+ PaginationItem,
3029
+ PaginationLink,
3030
+ PaginationPrevious,
3031
+ PaginationNext,
3032
+ PaginationEllipsis,
3033
+ Progress,
3034
+ ProgressTrack,
3035
+ ProgressIndicator,
3036
+ RadioGroup,
3037
+ RadioGroupItem,
3038
+ PanelGroup,
3039
+ Panel,
3040
+ ResizableHandle,
3041
+ ScrollArea,
3042
+ ScrollBar,
3043
+ Select,
3044
+ SelectGroup,
3045
+ SelectValue,
3046
+ SelectTrigger,
3047
+ SelectContent,
3048
+ SelectLabel,
3049
+ SelectItem,
3050
+ SelectSeparator,
3051
+ SelectScrollUpButton,
3052
+ SelectScrollDownButton,
3053
+ Separator,
3054
+ Sheet,
3055
+ SheetTrigger,
3056
+ SheetClose,
3057
+ SheetPortal,
3058
+ SheetOverlay,
3059
+ SheetContent,
3060
+ SheetHeader,
3061
+ SheetFooter,
3062
+ SheetTitle,
3063
+ SheetDescription,
3064
+ Skeleton,
3065
+ Slider,
3066
+ SliderControl,
3067
+ SliderTrack,
3068
+ SliderIndicator,
3069
+ SliderThumb,
3070
+ toastManager,
3071
+ toast,
3072
+ Toaster,
3073
+ Spinner,
3074
+ Switch,
3075
+ Tabs,
3076
+ TabsList,
3077
+ TabsTrigger,
3078
+ TabsContent,
3079
+ toggleVariants,
3080
+ Toggle,
3081
+ ToggleGroup,
3082
+ ToggleGroupItem,
3083
+ typographyVariants,
3084
+ Typography
3085
+ };