@privateers/ui 0.1.0 → 0.2.0

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