@privateers/ui 0.1.0 → 0.3.0

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