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