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