@hai3/uikit 0.1.0-alpha.8 → 0.1.0-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,4843 @@
1
+ import { cva } from 'class-variance-authority';
2
+ import { clsx } from 'clsx';
3
+ import { twMerge } from 'tailwind-merge';
4
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
+ import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
6
+ import * as React24 from 'react';
7
+ import React24__default, { useMemo } from 'react';
8
+ import * as AvatarPrimitive from '@radix-ui/react-avatar';
9
+ import { Slot } from '@radix-ui/react-slot';
10
+ import { ButtonSize, ButtonVariant, IconButtonSize } from '@hai3/uikit-contracts';
11
+ export { ButtonSize, ButtonVariant, IconButtonSize } from '@hai3/uikit-contracts';
12
+ import { getDefaultClassNames, DayPicker } from 'react-day-picker';
13
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
14
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
15
+ import { OTPInput, OTPInputContext } from 'input-otp';
16
+ import * as LabelPrimitive from '@radix-ui/react-label';
17
+ import * as SeparatorPrimitive from '@radix-ui/react-separator';
18
+ import { FormProvider, Controller, useFormContext, useFormState } from 'react-hook-form';
19
+ import * as SwitchPrimitives from '@radix-ui/react-switch';
20
+ import { useReactTable, getFilteredRowModel, getSortedRowModel, getPaginationRowModel, getCoreRowModel, flexRender } from '@tanstack/react-table';
21
+ export { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable } from '@tanstack/react-table';
22
+ import { Loader2, X, ArrowLeft, ArrowRight, ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight, ArrowDown, ArrowUp, ChevronsUpDown, EyeOff, Settings2, XOctagon, AlertTriangle, Info, CheckCircle2, MoreHorizontal, GripVertical, User, Bot, Paperclip, Send, Plus, Search } from 'lucide-react';
23
+ import * as SelectPrimitive from '@radix-ui/react-select';
24
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
25
+ import { trim, toUpper } from 'lodash';
26
+ import * as SliderPrimitive from '@radix-ui/react-slider';
27
+ import * as ProgressPrimitive from '@radix-ui/react-progress';
28
+ import { Toaster as Toaster$1 } from 'sonner';
29
+ export { toast } from 'sonner';
30
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
31
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
32
+ import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
33
+ import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
34
+ import * as MenubarPrimitive from '@radix-ui/react-menubar';
35
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
36
+ import * as SheetPrimitive from '@radix-ui/react-dialog';
37
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
38
+ import { Drawer as Drawer$1 } from 'vaul';
39
+ import * as ResizablePrimitive from 'react-resizable-panels';
40
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
41
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
42
+ import useEmblaCarousel from 'embla-carousel-react';
43
+ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
44
+ export { Area, AreaChart, Bar, BarChart, Brush, CartesianGrid, Cell, Label as ChartLabel, Legend as ChartLegend, Tooltip as ChartTooltip, ComposedChart, Cross, Curve, Customized, Dot, ErrorBar, Funnel, FunnelChart, LabelList, Line, LineChart, Pie, PieChart, PolarAngleAxis, PolarGrid, PolarRadiusAxis, Polygon, Radar, RadarChart, RadialBar, RadialBarChart, Rectangle, ReferenceArea, ReferenceDot, ReferenceLine, ResponsiveContainer, Sankey, Scatter, ScatterChart, Sector, Text, Treemap, XAxis, YAxis, ZAxis } from 'recharts';
45
+ import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
46
+ import { format } from 'date-fns';
47
+
48
+ // src/base/alert.tsx
49
+ function cn(...inputs) {
50
+ return twMerge(clsx(inputs));
51
+ }
52
+ var alertVariants = cva(
53
+ "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
54
+ {
55
+ variants: {
56
+ variant: {
57
+ default: "bg-card text-card-foreground",
58
+ destructive: "text-destructive bg-card [&>svg]:text-current [&_[data-slot=alert-description]]:text-destructive/90"
59
+ }
60
+ },
61
+ defaultVariants: {
62
+ variant: "default"
63
+ }
64
+ }
65
+ );
66
+ function Alert({
67
+ className,
68
+ variant,
69
+ ...props
70
+ }) {
71
+ return /* @__PURE__ */ jsx(
72
+ "div",
73
+ {
74
+ "data-slot": "alert",
75
+ role: "alert",
76
+ className: cn(alertVariants({ variant }), className),
77
+ ...props
78
+ }
79
+ );
80
+ }
81
+ function AlertTitle({ className, ...props }) {
82
+ return /* @__PURE__ */ jsx(
83
+ "div",
84
+ {
85
+ "data-slot": "alert-title",
86
+ className: cn(
87
+ "col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",
88
+ className
89
+ ),
90
+ ...props
91
+ }
92
+ );
93
+ }
94
+ function AlertDescription({
95
+ className,
96
+ ...props
97
+ }) {
98
+ return /* @__PURE__ */ jsx(
99
+ "div",
100
+ {
101
+ "data-slot": "alert-description",
102
+ className: cn(
103
+ "text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",
104
+ className
105
+ ),
106
+ ...props
107
+ }
108
+ );
109
+ }
110
+ function AspectRatio({
111
+ ...props
112
+ }) {
113
+ return /* @__PURE__ */ jsx(AspectRatioPrimitive.Root, { "data-slot": "aspect-ratio", ...props });
114
+ }
115
+ function Empty({ className, ...props }) {
116
+ return /* @__PURE__ */ jsx(
117
+ "div",
118
+ {
119
+ "data-slot": "empty",
120
+ className: cn(
121
+ "flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12",
122
+ className
123
+ ),
124
+ ...props
125
+ }
126
+ );
127
+ }
128
+ function EmptyHeader({ className, ...props }) {
129
+ return /* @__PURE__ */ jsx(
130
+ "div",
131
+ {
132
+ "data-slot": "empty-header",
133
+ className: cn(
134
+ "flex max-w-sm flex-col items-center gap-2 text-center",
135
+ className
136
+ ),
137
+ ...props
138
+ }
139
+ );
140
+ }
141
+ var emptyMediaVariants = cva(
142
+ "flex shrink-0 items-center justify-center mb-2 [&_svg]:pointer-events-none [&_svg]:shrink-0",
143
+ {
144
+ variants: {
145
+ variant: {
146
+ default: "bg-transparent",
147
+ icon: "bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6"
148
+ }
149
+ },
150
+ defaultVariants: {
151
+ variant: "default"
152
+ }
153
+ }
154
+ );
155
+ function EmptyMedia({
156
+ className,
157
+ variant = "default",
158
+ ...props
159
+ }) {
160
+ return /* @__PURE__ */ jsx(
161
+ "div",
162
+ {
163
+ "data-slot": "empty-media",
164
+ "data-variant": variant,
165
+ className: cn(emptyMediaVariants({ variant, className })),
166
+ ...props
167
+ }
168
+ );
169
+ }
170
+ function EmptyTitle({ className, ...props }) {
171
+ return /* @__PURE__ */ jsx(
172
+ "div",
173
+ {
174
+ "data-slot": "empty-title",
175
+ className: cn("text-lg font-medium tracking-tight", className),
176
+ ...props
177
+ }
178
+ );
179
+ }
180
+ function EmptyDescription({ className, ...props }) {
181
+ return /* @__PURE__ */ jsx(
182
+ "div",
183
+ {
184
+ "data-slot": "empty-description",
185
+ className: cn(
186
+ "text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4",
187
+ className
188
+ ),
189
+ ...props
190
+ }
191
+ );
192
+ }
193
+ function EmptyContent({ className, ...props }) {
194
+ return /* @__PURE__ */ jsx(
195
+ "div",
196
+ {
197
+ "data-slot": "empty-content",
198
+ className: cn(
199
+ "flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance",
200
+ className
201
+ ),
202
+ ...props
203
+ }
204
+ );
205
+ }
206
+ var Avatar = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
207
+ AvatarPrimitive.Root,
208
+ {
209
+ ref,
210
+ className: cn(
211
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
212
+ className
213
+ ),
214
+ ...props
215
+ }
216
+ ));
217
+ Avatar.displayName = AvatarPrimitive.Root.displayName;
218
+ var AvatarImage = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
219
+ AvatarPrimitive.Image,
220
+ {
221
+ ref,
222
+ className: cn("aspect-square h-full w-full", className),
223
+ ...props
224
+ }
225
+ ));
226
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
227
+ var AvatarFallback = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
228
+ AvatarPrimitive.Fallback,
229
+ {
230
+ ref,
231
+ className: cn(
232
+ "flex h-full w-full items-center justify-center rounded-full bg-muted",
233
+ className
234
+ ),
235
+ ...props
236
+ }
237
+ ));
238
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
239
+ var buttonVariants = cva(
240
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
241
+ {
242
+ variants: {
243
+ variant: {
244
+ [ButtonVariant.Default]: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
245
+ [ButtonVariant.Destructive]: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
246
+ [ButtonVariant.Outline]: "border border-input bg-background shadow-sm hover:bg-accent data-[state=open]:bg-accent",
247
+ [ButtonVariant.Secondary]: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
248
+ [ButtonVariant.Ghost]: "hover:bg-accent data-[state=open]:bg-accent",
249
+ [ButtonVariant.Link]: "text-primary underline-offset-4 hover:underline"
250
+ },
251
+ size: {
252
+ [ButtonSize.Default]: "h-9 px-4 py-2",
253
+ [ButtonSize.Sm]: "h-8 rounded-md px-3 text-xs",
254
+ [ButtonSize.Lg]: "h-10 rounded-md px-8",
255
+ [ButtonSize.Icon]: "h-9 w-9"
256
+ }
257
+ },
258
+ defaultVariants: {
259
+ variant: ButtonVariant.Default,
260
+ size: ButtonSize.Default
261
+ }
262
+ }
263
+ );
264
+ var Button = React24.forwardRef(
265
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
266
+ const Comp = asChild ? Slot : "button";
267
+ return /* @__PURE__ */ jsx(
268
+ Comp,
269
+ {
270
+ className: cn(buttonVariants({ variant, size, className })),
271
+ ref,
272
+ ...props
273
+ }
274
+ );
275
+ }
276
+ );
277
+ Button.displayName = "Button";
278
+ var badgeVariants = cva(
279
+ "inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
280
+ {
281
+ variants: {
282
+ variant: {
283
+ default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
284
+ secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
285
+ destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
286
+ outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground"
287
+ }
288
+ },
289
+ defaultVariants: {
290
+ variant: "default"
291
+ }
292
+ }
293
+ );
294
+ function Badge({
295
+ className,
296
+ variant,
297
+ asChild = false,
298
+ ...props
299
+ }) {
300
+ const Comp = asChild ? Slot : "span";
301
+ return /* @__PURE__ */ jsx(
302
+ Comp,
303
+ {
304
+ className: cn(badgeVariants({ variant }), className),
305
+ ...props
306
+ }
307
+ );
308
+ }
309
+ var ChevronDownIcon = ({
310
+ className = "",
311
+ ...props
312
+ }) => {
313
+ return /* @__PURE__ */ jsx(
314
+ "svg",
315
+ {
316
+ className,
317
+ width: "16",
318
+ height: "16",
319
+ viewBox: "0 0 24 24",
320
+ fill: "none",
321
+ stroke: "currentColor",
322
+ strokeWidth: "2",
323
+ strokeLinecap: "round",
324
+ strokeLinejoin: "round",
325
+ ...props,
326
+ children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" })
327
+ }
328
+ );
329
+ };
330
+ var ChevronLeftIcon = ({ className = "" }) => {
331
+ return /* @__PURE__ */ jsx(
332
+ "svg",
333
+ {
334
+ className,
335
+ width: "16",
336
+ height: "16",
337
+ viewBox: "0 0 24 24",
338
+ fill: "none",
339
+ stroke: "currentColor",
340
+ strokeWidth: "2",
341
+ strokeLinecap: "round",
342
+ strokeLinejoin: "round",
343
+ children: /* @__PURE__ */ jsx("path", { d: "m15 18-6-6 6-6" })
344
+ }
345
+ );
346
+ };
347
+ var ChevronRightIcon = ({ className = "" }) => {
348
+ return /* @__PURE__ */ jsx(
349
+ "svg",
350
+ {
351
+ className,
352
+ width: "16",
353
+ height: "16",
354
+ viewBox: "0 0 24 24",
355
+ fill: "none",
356
+ stroke: "currentColor",
357
+ strokeWidth: "2",
358
+ strokeLinecap: "round",
359
+ strokeLinejoin: "round",
360
+ children: /* @__PURE__ */ jsx("path", { d: "m9 18 6-6-6-6" })
361
+ }
362
+ );
363
+ };
364
+ function Calendar({
365
+ className,
366
+ classNames,
367
+ showOutsideDays = true,
368
+ captionLayout = "label",
369
+ buttonVariant = ButtonVariant.Ghost,
370
+ formatters,
371
+ components,
372
+ ...props
373
+ }) {
374
+ const defaultClassNames = getDefaultClassNames();
375
+ return /* @__PURE__ */ jsx(
376
+ DayPicker,
377
+ {
378
+ showOutsideDays,
379
+ className: cn(
380
+ "bg-background group/calendar p-3 [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",
381
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
382
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
383
+ className
384
+ ),
385
+ captionLayout,
386
+ formatters: {
387
+ formatMonthDropdown: (date) => date.toLocaleString("default", { month: "short" }),
388
+ ...formatters
389
+ },
390
+ classNames: {
391
+ root: cn("w-fit", defaultClassNames.root),
392
+ months: cn(
393
+ "flex gap-4 flex-col md:flex-row relative",
394
+ defaultClassNames.months
395
+ ),
396
+ month: cn("flex flex-col w-full gap-4", defaultClassNames.month),
397
+ nav: cn(
398
+ "flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",
399
+ defaultClassNames.nav
400
+ ),
401
+ button_previous: cn(
402
+ buttonVariants({ variant: buttonVariant }),
403
+ "size-9 md:size-10 aria-disabled:opacity-50 p-0 select-none",
404
+ defaultClassNames.button_previous
405
+ ),
406
+ button_next: cn(
407
+ buttonVariants({ variant: buttonVariant }),
408
+ "size-9 md:size-10 aria-disabled:opacity-50 p-0 select-none",
409
+ defaultClassNames.button_next
410
+ ),
411
+ month_caption: cn(
412
+ "flex items-center justify-center h-9 md:h-10 w-full px-9 md:px-10",
413
+ defaultClassNames.month_caption
414
+ ),
415
+ dropdowns: cn(
416
+ "w-full flex items-center text-sm font-medium justify-center h-9 md:h-10 gap-1.5",
417
+ defaultClassNames.dropdowns
418
+ ),
419
+ dropdown_root: cn(
420
+ "relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",
421
+ defaultClassNames.dropdown_root
422
+ ),
423
+ dropdown: cn(
424
+ "absolute bg-popover inset-0 opacity-0",
425
+ defaultClassNames.dropdown
426
+ ),
427
+ caption_label: cn(
428
+ "select-none font-medium",
429
+ captionLayout === "label" ? "text-sm" : "rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",
430
+ defaultClassNames.caption_label
431
+ ),
432
+ table: "w-full border-collapse",
433
+ weekdays: cn("flex", defaultClassNames.weekdays),
434
+ weekday: cn(
435
+ "text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",
436
+ defaultClassNames.weekday
437
+ ),
438
+ week: cn("flex w-full mt-2", defaultClassNames.week),
439
+ week_number_header: cn(
440
+ "select-none w-9 md:w-10",
441
+ defaultClassNames.week_number_header
442
+ ),
443
+ week_number: cn(
444
+ "text-[0.8rem] select-none text-muted-foreground",
445
+ defaultClassNames.week_number
446
+ ),
447
+ day: cn(
448
+ "relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",
449
+ props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-md" : "[&:first-child[data-selected=true]_button]:rounded-l-md",
450
+ defaultClassNames.day
451
+ ),
452
+ range_start: cn(
453
+ "rounded-l-md bg-accent",
454
+ defaultClassNames.range_start
455
+ ),
456
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
457
+ range_end: cn("rounded-r-md bg-accent", defaultClassNames.range_end),
458
+ today: cn(
459
+ "bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",
460
+ defaultClassNames.today
461
+ ),
462
+ outside: cn(
463
+ "text-muted-foreground aria-selected:text-muted-foreground",
464
+ defaultClassNames.outside
465
+ ),
466
+ disabled: cn(
467
+ "text-muted-foreground opacity-50",
468
+ defaultClassNames.disabled
469
+ ),
470
+ hidden: cn("invisible", defaultClassNames.hidden),
471
+ ...classNames
472
+ },
473
+ components: {
474
+ Root: ({ className: className2, rootRef, ...props2 }) => {
475
+ return /* @__PURE__ */ jsx(
476
+ "div",
477
+ {
478
+ "data-slot": "calendar",
479
+ ref: rootRef,
480
+ className: cn(className2),
481
+ ...props2
482
+ }
483
+ );
484
+ },
485
+ Chevron: ({ className: className2, orientation, ...props2 }) => {
486
+ if (orientation === "left") {
487
+ return /* @__PURE__ */ jsx(ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
488
+ }
489
+ if (orientation === "right") {
490
+ return /* @__PURE__ */ jsx(ChevronRightIcon, { className: cn("size-4", className2), ...props2 });
491
+ }
492
+ return /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
493
+ },
494
+ DayButton: CalendarDayButton,
495
+ WeekNumber: ({ children, ...props2 }) => {
496
+ return /* @__PURE__ */ jsx("td", { ...props2, children: /* @__PURE__ */ jsx("div", { className: "flex size-9 md:size-10 items-center justify-center text-center", children }) });
497
+ },
498
+ ...components
499
+ },
500
+ ...props
501
+ }
502
+ );
503
+ }
504
+ function CalendarDayButton({
505
+ className,
506
+ day,
507
+ modifiers,
508
+ ...props
509
+ }) {
510
+ const defaultClassNames = getDefaultClassNames();
511
+ const ref = React24.useRef(null);
512
+ React24.useEffect(() => {
513
+ if (modifiers.focused) ref.current?.focus();
514
+ }, [modifiers.focused]);
515
+ return /* @__PURE__ */ jsx(
516
+ Button,
517
+ {
518
+ ref,
519
+ variant: ButtonVariant.Ghost,
520
+ size: ButtonSize.Icon,
521
+ "data-day": day.date.toLocaleDateString(),
522
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
523
+ "data-range-start": modifiers.range_start,
524
+ "data-range-end": modifiers.range_end,
525
+ "data-range-middle": modifiers.range_middle,
526
+ className: cn(
527
+ "data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-9 md:min-w-10 flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",
528
+ defaultClassNames.day,
529
+ className
530
+ ),
531
+ ...props
532
+ }
533
+ );
534
+ }
535
+ var CheckIcon = ({ className = "" }) => {
536
+ return /* @__PURE__ */ jsx(
537
+ "svg",
538
+ {
539
+ className,
540
+ width: "16",
541
+ height: "16",
542
+ viewBox: "0 0 24 24",
543
+ fill: "none",
544
+ stroke: "currentColor",
545
+ strokeWidth: "2",
546
+ strokeLinecap: "round",
547
+ strokeLinejoin: "round",
548
+ children: /* @__PURE__ */ jsx("path", { d: "M20 6 9 17l-5-5" })
549
+ }
550
+ );
551
+ };
552
+ function Checkbox({
553
+ className,
554
+ ...props
555
+ }) {
556
+ return /* @__PURE__ */ jsx(
557
+ CheckboxPrimitive.Root,
558
+ {
559
+ "data-slot": "checkbox",
560
+ className: cn(
561
+ "peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary 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",
562
+ className
563
+ ),
564
+ ...props,
565
+ children: /* @__PURE__ */ jsx(
566
+ CheckboxPrimitive.Indicator,
567
+ {
568
+ "data-slot": "checkbox-indicator",
569
+ className: "grid place-content-center text-current transition-none",
570
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
571
+ }
572
+ )
573
+ }
574
+ );
575
+ }
576
+ var CircleIcon = ({ className = "" }) => {
577
+ return /* @__PURE__ */ jsx(
578
+ "svg",
579
+ {
580
+ className,
581
+ width: "16",
582
+ height: "16",
583
+ viewBox: "0 0 24 24",
584
+ fill: "none",
585
+ stroke: "currentColor",
586
+ strokeWidth: "2",
587
+ strokeLinecap: "round",
588
+ strokeLinejoin: "round",
589
+ children: /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" })
590
+ }
591
+ );
592
+ };
593
+ function RadioGroup({
594
+ className,
595
+ ...props
596
+ }) {
597
+ return /* @__PURE__ */ jsx(
598
+ RadioGroupPrimitive.Root,
599
+ {
600
+ "data-slot": "radio-group",
601
+ className: cn("grid gap-3", className),
602
+ ...props
603
+ }
604
+ );
605
+ }
606
+ function RadioGroupItem({
607
+ className,
608
+ ...props
609
+ }) {
610
+ return /* @__PURE__ */ jsx(
611
+ RadioGroupPrimitive.Item,
612
+ {
613
+ "data-slot": "radio-group-item",
614
+ className: cn(
615
+ "border-input text-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 dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
616
+ className
617
+ ),
618
+ ...props,
619
+ children: /* @__PURE__ */ jsx(
620
+ RadioGroupPrimitive.Indicator,
621
+ {
622
+ "data-slot": "radio-group-indicator",
623
+ className: "relative flex items-center justify-center",
624
+ children: /* @__PURE__ */ jsx(CircleIcon, { className: "fill-current absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" })
625
+ }
626
+ )
627
+ }
628
+ );
629
+ }
630
+ function NativeSelect({ className, ...props }) {
631
+ return /* @__PURE__ */ jsxs(
632
+ "div",
633
+ {
634
+ className: "group/native-select relative w-fit has-[select:disabled]:opacity-50",
635
+ "data-slot": "native-select-wrapper",
636
+ children: [
637
+ /* @__PURE__ */ jsx(
638
+ "select",
639
+ {
640
+ "data-slot": "native-select",
641
+ className: cn(
642
+ "border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 appearance-none rounded-md border bg-transparent px-3 py-2 pr-9 text-sm shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed",
643
+ "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
644
+ "aria-[invalid=true]:ring-2 aria-[invalid=true]:ring-destructive/30 aria-[invalid=true]:border-destructive",
645
+ className
646
+ ),
647
+ ...props
648
+ }
649
+ ),
650
+ /* @__PURE__ */ jsx(
651
+ ChevronDownIcon,
652
+ {
653
+ className: "text-muted-foreground pointer-events-none absolute top-1/2 right-3.5 size-4 -translate-y-1/2 opacity-50 select-none",
654
+ "aria-hidden": "true",
655
+ "data-slot": "native-select-icon"
656
+ }
657
+ )
658
+ ]
659
+ }
660
+ );
661
+ }
662
+ function NativeSelectOption({ ...props }) {
663
+ return /* @__PURE__ */ jsx("option", { "data-slot": "native-select-option", ...props });
664
+ }
665
+ function NativeSelectOptGroup({
666
+ className,
667
+ ...props
668
+ }) {
669
+ return /* @__PURE__ */ jsx(
670
+ "optgroup",
671
+ {
672
+ "data-slot": "native-select-optgroup",
673
+ className: cn(className),
674
+ ...props
675
+ }
676
+ );
677
+ }
678
+ var MinusIcon = ({
679
+ className = "",
680
+ ...props
681
+ }) => {
682
+ return /* @__PURE__ */ jsx(
683
+ "svg",
684
+ {
685
+ className,
686
+ width: "16",
687
+ height: "16",
688
+ viewBox: "0 0 24 24",
689
+ fill: "none",
690
+ stroke: "currentColor",
691
+ strokeWidth: "2",
692
+ strokeLinecap: "round",
693
+ strokeLinejoin: "round",
694
+ ...props,
695
+ children: /* @__PURE__ */ jsx("path", { d: "M5 12h14" })
696
+ }
697
+ );
698
+ };
699
+ function InputOTP({
700
+ className,
701
+ containerClassName,
702
+ ...props
703
+ }) {
704
+ return /* @__PURE__ */ jsx(
705
+ OTPInput,
706
+ {
707
+ "data-slot": "input-otp",
708
+ containerClassName: cn(
709
+ "flex items-center gap-2 has-disabled:opacity-50",
710
+ containerClassName
711
+ ),
712
+ className: cn("disabled:cursor-not-allowed", className),
713
+ ...props
714
+ }
715
+ );
716
+ }
717
+ function InputOTPGroup({ className, ...props }) {
718
+ return /* @__PURE__ */ jsx(
719
+ "div",
720
+ {
721
+ "data-slot": "input-otp-group",
722
+ className: cn("flex items-center", className),
723
+ ...props
724
+ }
725
+ );
726
+ }
727
+ function InputOTPSlot({
728
+ index,
729
+ className,
730
+ ...props
731
+ }) {
732
+ const inputOTPContext = React24.useContext(OTPInputContext);
733
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
734
+ return /* @__PURE__ */ jsxs(
735
+ "div",
736
+ {
737
+ "data-slot": "input-otp-slot",
738
+ "data-active": isActive,
739
+ className: cn(
740
+ "data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-9 w-9 items-center justify-center border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]",
741
+ className
742
+ ),
743
+ ...props,
744
+ children: [
745
+ char,
746
+ hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) })
747
+ ]
748
+ }
749
+ );
750
+ }
751
+ function InputOTPSeparator({ ...props }) {
752
+ return /* @__PURE__ */ jsx("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: /* @__PURE__ */ jsx(MinusIcon, {}) });
753
+ }
754
+ var Input = React24.forwardRef(
755
+ ({ className, type, ...props }, ref) => {
756
+ return /* @__PURE__ */ jsx(
757
+ "input",
758
+ {
759
+ type,
760
+ className: cn(
761
+ "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
762
+ className
763
+ ),
764
+ ref,
765
+ ...props
766
+ }
767
+ );
768
+ }
769
+ );
770
+ Input.displayName = "Input";
771
+ function Label({
772
+ className,
773
+ ...props
774
+ }) {
775
+ return /* @__PURE__ */ jsx(
776
+ LabelPrimitive.Root,
777
+ {
778
+ "data-slot": "label",
779
+ className: cn(
780
+ "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
781
+ className
782
+ ),
783
+ ...props
784
+ }
785
+ );
786
+ }
787
+ function Separator({
788
+ className,
789
+ orientation = "horizontal",
790
+ decorative = true,
791
+ ...props
792
+ }) {
793
+ return /* @__PURE__ */ jsx(
794
+ SeparatorPrimitive.Root,
795
+ {
796
+ "data-slot": "separator",
797
+ decorative,
798
+ orientation,
799
+ className: cn(
800
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
801
+ className
802
+ ),
803
+ ...props
804
+ }
805
+ );
806
+ }
807
+ function FieldSet({ className, ...props }) {
808
+ return /* @__PURE__ */ jsx(
809
+ "fieldset",
810
+ {
811
+ "data-slot": "field-set",
812
+ className: cn(
813
+ "flex flex-col gap-6",
814
+ "has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
815
+ className
816
+ ),
817
+ ...props
818
+ }
819
+ );
820
+ }
821
+ function FieldLegend({
822
+ className,
823
+ variant = "legend",
824
+ ...props
825
+ }) {
826
+ return /* @__PURE__ */ jsx(
827
+ "legend",
828
+ {
829
+ "data-slot": "field-legend",
830
+ "data-variant": variant,
831
+ className: cn(
832
+ "mb-3 font-medium",
833
+ "data-[variant=legend]:text-base",
834
+ "data-[variant=label]:text-sm",
835
+ className
836
+ ),
837
+ ...props
838
+ }
839
+ );
840
+ }
841
+ function FieldGroup({ className, ...props }) {
842
+ return /* @__PURE__ */ jsx(
843
+ "div",
844
+ {
845
+ "data-slot": "field-group",
846
+ className: cn(
847
+ "group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4",
848
+ className
849
+ ),
850
+ ...props
851
+ }
852
+ );
853
+ }
854
+ var fieldVariants = cva(
855
+ "group/field flex w-full gap-3 data-[invalid=true]:text-destructive",
856
+ {
857
+ variants: {
858
+ orientation: {
859
+ vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
860
+ horizontal: [
861
+ "flex-row items-center",
862
+ "[&>[data-slot=field-label]]:flex-auto",
863
+ "has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
864
+ ],
865
+ responsive: [
866
+ "flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto",
867
+ "@md/field-group:[&>[data-slot=field-label]]:flex-auto",
868
+ "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
869
+ ]
870
+ }
871
+ },
872
+ defaultVariants: {
873
+ orientation: "vertical"
874
+ }
875
+ }
876
+ );
877
+ function Field({
878
+ className,
879
+ orientation = "vertical",
880
+ ...props
881
+ }) {
882
+ return /* @__PURE__ */ jsx(
883
+ "div",
884
+ {
885
+ role: "group",
886
+ "data-slot": "field",
887
+ "data-orientation": orientation,
888
+ className: cn(fieldVariants({ orientation }), className),
889
+ ...props
890
+ }
891
+ );
892
+ }
893
+ function FieldContent({ className, ...props }) {
894
+ return /* @__PURE__ */ jsx(
895
+ "div",
896
+ {
897
+ "data-slot": "field-content",
898
+ className: cn(
899
+ "group/field-content flex flex-1 flex-col gap-1.5 leading-snug",
900
+ className
901
+ ),
902
+ ...props
903
+ }
904
+ );
905
+ }
906
+ function FieldLabel({
907
+ className,
908
+ ...props
909
+ }) {
910
+ return /* @__PURE__ */ jsx(
911
+ Label,
912
+ {
913
+ "data-slot": "field-label",
914
+ className: cn(
915
+ "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50",
916
+ "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>*]:data-[slot=field]:p-4",
917
+ "has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10",
918
+ className
919
+ ),
920
+ ...props
921
+ }
922
+ );
923
+ }
924
+ function FieldTitle({ className, ...props }) {
925
+ return /* @__PURE__ */ jsx(
926
+ "div",
927
+ {
928
+ "data-slot": "field-label",
929
+ className: cn(
930
+ "flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50",
931
+ className
932
+ ),
933
+ ...props
934
+ }
935
+ );
936
+ }
937
+ function FieldDescription({ className, ...props }) {
938
+ return /* @__PURE__ */ jsx(
939
+ "p",
940
+ {
941
+ "data-slot": "field-description",
942
+ className: cn(
943
+ "text-muted-foreground text-sm leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance",
944
+ "last:mt-0 nth-last-2:-mt-1 [[data-variant=legend]+&]:-mt-1.5",
945
+ "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
946
+ className
947
+ ),
948
+ ...props
949
+ }
950
+ );
951
+ }
952
+ function FieldSeparator({
953
+ children,
954
+ className,
955
+ ...props
956
+ }) {
957
+ return /* @__PURE__ */ jsxs(
958
+ "div",
959
+ {
960
+ "data-slot": "field-separator",
961
+ "data-content": !!children,
962
+ className: cn(
963
+ "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
964
+ className
965
+ ),
966
+ ...props,
967
+ children: [
968
+ /* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }),
969
+ children && /* @__PURE__ */ jsx(
970
+ "span",
971
+ {
972
+ className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
973
+ "data-slot": "field-separator-content",
974
+ children
975
+ }
976
+ )
977
+ ]
978
+ }
979
+ );
980
+ }
981
+ function FieldError({
982
+ className,
983
+ children,
984
+ errors,
985
+ ...props
986
+ }) {
987
+ const content = useMemo(() => {
988
+ if (children) {
989
+ return children;
990
+ }
991
+ if (!errors?.length) {
992
+ return null;
993
+ }
994
+ const uniqueErrors = [
995
+ ...new Map(errors.map((error) => [error?.message, error])).values()
996
+ ];
997
+ if (uniqueErrors?.length == 1) {
998
+ return uniqueErrors[0]?.message;
999
+ }
1000
+ return /* @__PURE__ */ jsx("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
1001
+ (error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index)
1002
+ ) });
1003
+ }, [children, errors]);
1004
+ if (!content) {
1005
+ return null;
1006
+ }
1007
+ return /* @__PURE__ */ jsx(
1008
+ "div",
1009
+ {
1010
+ role: "alert",
1011
+ "data-slot": "field-error",
1012
+ className: cn("text-destructive text-sm font-normal", className),
1013
+ ...props,
1014
+ children: content
1015
+ }
1016
+ );
1017
+ }
1018
+ var Form = FormProvider;
1019
+ var FormFieldContext = React24.createContext(
1020
+ {}
1021
+ );
1022
+ var FormField = ({
1023
+ ...props
1024
+ }) => {
1025
+ return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
1026
+ };
1027
+ var FormItemContext = React24.createContext(
1028
+ {}
1029
+ );
1030
+ var useFormField = () => {
1031
+ const fieldContext = React24.useContext(FormFieldContext);
1032
+ const itemContext = React24.useContext(FormItemContext);
1033
+ const { getFieldState } = useFormContext();
1034
+ const formState = useFormState({ name: fieldContext.name });
1035
+ const fieldState = getFieldState(fieldContext.name, formState);
1036
+ if (!fieldContext) {
1037
+ throw new Error("useFormField should be used within <FormField>");
1038
+ }
1039
+ const { id } = itemContext;
1040
+ return {
1041
+ id,
1042
+ name: fieldContext.name,
1043
+ formItemId: `${id}-form-item`,
1044
+ formDescriptionId: `${id}-form-item-description`,
1045
+ formMessageId: `${id}-form-item-message`,
1046
+ ...fieldState
1047
+ };
1048
+ };
1049
+ function FormItem({ className, ...props }) {
1050
+ const id = React24.useId();
1051
+ return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx(
1052
+ "div",
1053
+ {
1054
+ "data-slot": "form-item",
1055
+ className: cn("grid gap-2", className),
1056
+ ...props
1057
+ }
1058
+ ) });
1059
+ }
1060
+ function FormLabel({
1061
+ className,
1062
+ ...props
1063
+ }) {
1064
+ const { error, formItemId } = useFormField();
1065
+ return /* @__PURE__ */ jsx(
1066
+ Label,
1067
+ {
1068
+ "data-slot": "form-label",
1069
+ "data-error": !!error,
1070
+ className: cn("data-[error=true]:text-destructive", className),
1071
+ htmlFor: formItemId,
1072
+ ...props
1073
+ }
1074
+ );
1075
+ }
1076
+ function FormControl({ ...props }) {
1077
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
1078
+ return /* @__PURE__ */ jsx(
1079
+ Slot,
1080
+ {
1081
+ "data-slot": "form-control",
1082
+ id: formItemId,
1083
+ "aria-describedby": !error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`,
1084
+ "aria-invalid": !!error,
1085
+ ...props
1086
+ }
1087
+ );
1088
+ }
1089
+ function FormDescription({ className, ...props }) {
1090
+ const { formDescriptionId } = useFormField();
1091
+ return /* @__PURE__ */ jsx(
1092
+ "p",
1093
+ {
1094
+ "data-slot": "form-description",
1095
+ id: formDescriptionId,
1096
+ className: cn("text-muted-foreground text-sm", className),
1097
+ ...props
1098
+ }
1099
+ );
1100
+ }
1101
+ function FormMessage({ className, ...props }) {
1102
+ const { error, formMessageId } = useFormField();
1103
+ const body = error ? String(error?.message ?? "") : props.children;
1104
+ if (!body) {
1105
+ return null;
1106
+ }
1107
+ return /* @__PURE__ */ jsx(
1108
+ "p",
1109
+ {
1110
+ "data-slot": "form-message",
1111
+ id: formMessageId,
1112
+ className: cn("text-destructive text-sm", className),
1113
+ ...props,
1114
+ children: body
1115
+ }
1116
+ );
1117
+ }
1118
+ var Textarea = React24.forwardRef(
1119
+ ({ className, autoResize = false, minHeight = 50, maxHeight = 350, size = "default", onChange, ...props }, ref) => {
1120
+ const internalRef = React24.useRef(null);
1121
+ React24.useImperativeHandle(ref, () => internalRef.current);
1122
+ const sizeClasses = {
1123
+ sm: "min-h-11 h-11",
1124
+ // 44px / 2.75rem - exact height
1125
+ default: "min-h-[60px]",
1126
+ // 60px / 3.75rem
1127
+ lg: "min-h-20"
1128
+ // 80px / 5rem
1129
+ };
1130
+ const paddingClasses = {
1131
+ sm: "py-3",
1132
+ // 12px top + 12px bottom + 20px line-height = 44px
1133
+ default: "py-2",
1134
+ // 8px top + 8px bottom (default)
1135
+ lg: "py-2"
1136
+ // 8px top + 8px bottom (default)
1137
+ };
1138
+ const handleResize = React24.useCallback(() => {
1139
+ if (autoResize && size !== "sm" && internalRef.current) {
1140
+ const textarea = internalRef.current;
1141
+ textarea.style.height = "auto";
1142
+ const scrollHeight = textarea.scrollHeight;
1143
+ textarea.style.height = `${Math.min(Math.max(scrollHeight, minHeight), maxHeight)}px`;
1144
+ }
1145
+ }, [autoResize, size, minHeight, maxHeight]);
1146
+ React24.useEffect(() => {
1147
+ handleResize();
1148
+ }, [handleResize, props.value]);
1149
+ const handleChange = React24.useCallback(
1150
+ (e) => {
1151
+ handleResize();
1152
+ onChange?.(e);
1153
+ },
1154
+ [onChange, handleResize]
1155
+ );
1156
+ return /* @__PURE__ */ jsx(
1157
+ "textarea",
1158
+ {
1159
+ className: cn(
1160
+ "flex w-full rounded-md border border-input bg-transparent px-3 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
1161
+ sizeClasses[size],
1162
+ paddingClasses[size],
1163
+ className
1164
+ ),
1165
+ ref: internalRef,
1166
+ onChange: handleChange,
1167
+ ...props
1168
+ }
1169
+ );
1170
+ }
1171
+ );
1172
+ Textarea.displayName = "Textarea";
1173
+ var Switch = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1174
+ SwitchPrimitives.Root,
1175
+ {
1176
+ className: cn(
1177
+ "peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
1178
+ className
1179
+ ),
1180
+ ...props,
1181
+ ref,
1182
+ children: /* @__PURE__ */ jsx(
1183
+ SwitchPrimitives.Thumb,
1184
+ {
1185
+ className: cn(
1186
+ "pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform",
1187
+ "data-[state=checked]:ltr:translate-x-4 data-[state=checked]:rtl:-translate-x-4",
1188
+ "data-[state=unchecked]:translate-x-0"
1189
+ )
1190
+ }
1191
+ )
1192
+ }
1193
+ ));
1194
+ Switch.displayName = SwitchPrimitives.Root.displayName;
1195
+ function Table({ className, ...props }) {
1196
+ return /* @__PURE__ */ jsx(
1197
+ "div",
1198
+ {
1199
+ "data-slot": "table-container",
1200
+ className: "relative w-full overflow-x-auto",
1201
+ children: /* @__PURE__ */ jsx(
1202
+ "table",
1203
+ {
1204
+ "data-slot": "table",
1205
+ className: cn("w-full caption-bottom text-sm", className),
1206
+ ...props
1207
+ }
1208
+ )
1209
+ }
1210
+ );
1211
+ }
1212
+ function TableHeader({ className, ...props }) {
1213
+ return /* @__PURE__ */ jsx(
1214
+ "thead",
1215
+ {
1216
+ "data-slot": "table-header",
1217
+ className: cn("[&_tr]:border-b", className),
1218
+ ...props
1219
+ }
1220
+ );
1221
+ }
1222
+ function TableBody({ className, ...props }) {
1223
+ return /* @__PURE__ */ jsx(
1224
+ "tbody",
1225
+ {
1226
+ "data-slot": "table-body",
1227
+ className: cn("[&_tr:last-child]:border-0", className),
1228
+ ...props
1229
+ }
1230
+ );
1231
+ }
1232
+ function TableFooter({ className, ...props }) {
1233
+ return /* @__PURE__ */ jsx(
1234
+ "tfoot",
1235
+ {
1236
+ "data-slot": "table-footer",
1237
+ className: cn(
1238
+ "bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",
1239
+ className
1240
+ ),
1241
+ ...props
1242
+ }
1243
+ );
1244
+ }
1245
+ function TableRow({ className, ...props }) {
1246
+ return /* @__PURE__ */ jsx(
1247
+ "tr",
1248
+ {
1249
+ "data-slot": "table-row",
1250
+ className: cn(
1251
+ "hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors",
1252
+ className
1253
+ ),
1254
+ ...props
1255
+ }
1256
+ );
1257
+ }
1258
+ function TableHead({ className, ...props }) {
1259
+ return /* @__PURE__ */ jsx(
1260
+ "th",
1261
+ {
1262
+ "data-slot": "table-head",
1263
+ className: cn(
1264
+ "text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
1265
+ className
1266
+ ),
1267
+ ...props
1268
+ }
1269
+ );
1270
+ }
1271
+ function TableCell({ className, ...props }) {
1272
+ return /* @__PURE__ */ jsx(
1273
+ "td",
1274
+ {
1275
+ "data-slot": "table-cell",
1276
+ className: cn(
1277
+ "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
1278
+ className
1279
+ ),
1280
+ ...props
1281
+ }
1282
+ );
1283
+ }
1284
+ function TableCaption({
1285
+ className,
1286
+ ...props
1287
+ }) {
1288
+ return /* @__PURE__ */ jsx(
1289
+ "caption",
1290
+ {
1291
+ "data-slot": "table-caption",
1292
+ className: cn("text-muted-foreground mt-4 text-sm", className),
1293
+ ...props
1294
+ }
1295
+ );
1296
+ }
1297
+ var ChevronUpIcon = ({
1298
+ className = "",
1299
+ ...props
1300
+ }) => {
1301
+ return /* @__PURE__ */ jsx(
1302
+ "svg",
1303
+ {
1304
+ className,
1305
+ width: "16",
1306
+ height: "16",
1307
+ viewBox: "0 0 24 24",
1308
+ fill: "none",
1309
+ stroke: "currentColor",
1310
+ strokeWidth: "2",
1311
+ strokeLinecap: "round",
1312
+ strokeLinejoin: "round",
1313
+ ...props,
1314
+ children: /* @__PURE__ */ jsx("path", { d: "m18 15-6-6-6 6" })
1315
+ }
1316
+ );
1317
+ };
1318
+ var Select = SelectPrimitive.Root;
1319
+ var SelectGroup = SelectPrimitive.Group;
1320
+ var SelectValue = SelectPrimitive.Value;
1321
+ var SelectTrigger = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1322
+ SelectPrimitive.Trigger,
1323
+ {
1324
+ ref,
1325
+ className: cn(
1326
+ // HAI3 customization: bg-background and hover states for consistency with Button Outline
1327
+ "flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-background px-3 py-2 text-sm shadow-sm ring-offset-background hover:bg-accent hover:text-bg-accent-foreground data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
1328
+ className
1329
+ ),
1330
+ ...props,
1331
+ children: [
1332
+ children,
1333
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-4 w-4 opacity-50" }) })
1334
+ ]
1335
+ }
1336
+ ));
1337
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
1338
+ var SelectScrollUpButton = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1339
+ SelectPrimitive.ScrollUpButton,
1340
+ {
1341
+ ref,
1342
+ className: cn(
1343
+ "flex cursor-default items-center justify-center py-1",
1344
+ className
1345
+ ),
1346
+ ...props,
1347
+ children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "h-4 w-4" })
1348
+ }
1349
+ ));
1350
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
1351
+ var SelectScrollDownButton = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1352
+ SelectPrimitive.ScrollDownButton,
1353
+ {
1354
+ ref,
1355
+ className: cn(
1356
+ "flex cursor-default items-center justify-center py-1",
1357
+ className
1358
+ ),
1359
+ ...props,
1360
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-4 w-4" })
1361
+ }
1362
+ ));
1363
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
1364
+ var SelectContent = React24.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
1365
+ SelectPrimitive.Content,
1366
+ {
1367
+ ref,
1368
+ className: cn(
1369
+ "relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md 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 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 origin-[--radix-select-content-transform-origin]",
1370
+ 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",
1371
+ className
1372
+ ),
1373
+ position,
1374
+ ...props,
1375
+ children: [
1376
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
1377
+ /* @__PURE__ */ jsx(
1378
+ SelectPrimitive.Viewport,
1379
+ {
1380
+ className: cn(
1381
+ "p-1",
1382
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
1383
+ ),
1384
+ children
1385
+ }
1386
+ ),
1387
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
1388
+ ]
1389
+ }
1390
+ ) }));
1391
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
1392
+ var SelectLabel = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1393
+ SelectPrimitive.Label,
1394
+ {
1395
+ ref,
1396
+ className: cn("px-2 py-1.5 text-sm font-semibold", className),
1397
+ ...props
1398
+ }
1399
+ ));
1400
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
1401
+ var SelectItem = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1402
+ SelectPrimitive.Item,
1403
+ {
1404
+ ref,
1405
+ className: cn(
1406
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-bg-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1407
+ className
1408
+ ),
1409
+ ...props,
1410
+ children: [
1411
+ /* @__PURE__ */ jsx("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "h-4 w-4" }) }) }),
1412
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })
1413
+ ]
1414
+ }
1415
+ ));
1416
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
1417
+ var SelectSeparator = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1418
+ SelectPrimitive.Separator,
1419
+ {
1420
+ ref,
1421
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
1422
+ ...props
1423
+ }
1424
+ ));
1425
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
1426
+ function DataTablePagination({
1427
+ table,
1428
+ pageSizeOptions = [10, 20, 30, 40, 50]
1429
+ }) {
1430
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2", children: [
1431
+ /* @__PURE__ */ jsxs("div", { className: "text-muted-foreground flex-1 text-sm", children: [
1432
+ table.getFilteredSelectedRowModel().rows.length,
1433
+ " of",
1434
+ " ",
1435
+ table.getFilteredRowModel().rows.length,
1436
+ " row(s) selected."
1437
+ ] }),
1438
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-6 lg:space-x-8", children: [
1439
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
1440
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: "Rows per page" }),
1441
+ /* @__PURE__ */ jsxs(
1442
+ Select,
1443
+ {
1444
+ value: `${table.getState().pagination.pageSize}`,
1445
+ onValueChange: (value) => {
1446
+ table.setPageSize(Number(value));
1447
+ },
1448
+ children: [
1449
+ /* @__PURE__ */ jsx(SelectTrigger, { className: "h-8 w-[70px]", children: /* @__PURE__ */ jsx(SelectValue, { placeholder: table.getState().pagination.pageSize }) }),
1450
+ /* @__PURE__ */ jsx(SelectContent, { side: "top", children: pageSizeOptions.map((pageSize) => /* @__PURE__ */ jsx(SelectItem, { value: `${pageSize}`, children: pageSize }, pageSize)) })
1451
+ ]
1452
+ }
1453
+ )
1454
+ ] }),
1455
+ /* @__PURE__ */ jsxs("div", { className: "flex w-[100px] items-center justify-center text-sm font-medium", children: [
1456
+ "Page ",
1457
+ table.getState().pagination.pageIndex + 1,
1458
+ " of",
1459
+ " ",
1460
+ table.getPageCount()
1461
+ ] }),
1462
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
1463
+ /* @__PURE__ */ jsxs(
1464
+ Button,
1465
+ {
1466
+ variant: ButtonVariant.Outline,
1467
+ size: ButtonSize.Icon,
1468
+ className: "hidden size-8 lg:flex",
1469
+ onClick: () => table.setPageIndex(0),
1470
+ disabled: !table.getCanPreviousPage(),
1471
+ children: [
1472
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Go to first page" }),
1473
+ /* @__PURE__ */ jsx(ChevronsLeft, { className: "size-4" })
1474
+ ]
1475
+ }
1476
+ ),
1477
+ /* @__PURE__ */ jsxs(
1478
+ Button,
1479
+ {
1480
+ variant: ButtonVariant.Outline,
1481
+ size: ButtonSize.Icon,
1482
+ className: "size-8",
1483
+ onClick: () => table.previousPage(),
1484
+ disabled: !table.getCanPreviousPage(),
1485
+ children: [
1486
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Go to previous page" }),
1487
+ /* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" })
1488
+ ]
1489
+ }
1490
+ ),
1491
+ /* @__PURE__ */ jsxs(
1492
+ Button,
1493
+ {
1494
+ variant: ButtonVariant.Outline,
1495
+ size: ButtonSize.Icon,
1496
+ className: "size-8",
1497
+ onClick: () => table.nextPage(),
1498
+ disabled: !table.getCanNextPage(),
1499
+ children: [
1500
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Go to next page" }),
1501
+ /* @__PURE__ */ jsx(ChevronRight, { className: "size-4" })
1502
+ ]
1503
+ }
1504
+ ),
1505
+ /* @__PURE__ */ jsxs(
1506
+ Button,
1507
+ {
1508
+ variant: ButtonVariant.Outline,
1509
+ size: ButtonSize.Icon,
1510
+ className: "hidden size-8 lg:flex",
1511
+ onClick: () => table.setPageIndex(table.getPageCount() - 1),
1512
+ disabled: !table.getCanNextPage(),
1513
+ children: [
1514
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Go to last page" }),
1515
+ /* @__PURE__ */ jsx(ChevronsRight, { className: "size-4" })
1516
+ ]
1517
+ }
1518
+ )
1519
+ ] })
1520
+ ] })
1521
+ ] });
1522
+ }
1523
+ function DataTable({
1524
+ columns,
1525
+ data,
1526
+ table: externalTable,
1527
+ filterInput,
1528
+ toolbar,
1529
+ showPagination = true,
1530
+ pageSize = 10,
1531
+ noResultsMessage = "No results."
1532
+ }) {
1533
+ const [sorting, setSorting] = React24.useState([]);
1534
+ const [columnFilters, setColumnFilters] = React24.useState([]);
1535
+ const [columnVisibility, setColumnVisibility] = React24.useState({});
1536
+ const [rowSelection, setRowSelection] = React24.useState({});
1537
+ const internalTable = useReactTable({
1538
+ data,
1539
+ columns,
1540
+ onSortingChange: setSorting,
1541
+ onColumnFiltersChange: setColumnFilters,
1542
+ getCoreRowModel: getCoreRowModel(),
1543
+ getPaginationRowModel: getPaginationRowModel(),
1544
+ getSortedRowModel: getSortedRowModel(),
1545
+ getFilteredRowModel: getFilteredRowModel(),
1546
+ onColumnVisibilityChange: setColumnVisibility,
1547
+ onRowSelectionChange: setRowSelection,
1548
+ initialState: {
1549
+ pagination: {
1550
+ pageSize
1551
+ }
1552
+ },
1553
+ state: {
1554
+ sorting,
1555
+ columnFilters,
1556
+ columnVisibility,
1557
+ rowSelection
1558
+ }
1559
+ });
1560
+ const table = externalTable ?? internalTable;
1561
+ return /* @__PURE__ */ jsxs("div", { className: "w-full space-y-4", children: [
1562
+ (filterInput || toolbar) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
1563
+ filterInput,
1564
+ toolbar
1565
+ ] }),
1566
+ /* @__PURE__ */ jsx("div", { className: "rounded-md border", children: /* @__PURE__ */ jsxs(Table, { children: [
1567
+ /* @__PURE__ */ jsx(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ jsx(TableHead, { children: header.isPlaceholder ? null : flexRender(
1568
+ header.column.columnDef.header,
1569
+ header.getContext()
1570
+ ) }, header.id)) }, headerGroup.id)) }),
1571
+ /* @__PURE__ */ jsx(TableBody, { children: table.getRowModel().rows?.length ? table.getRowModel().rows.map((row) => /* @__PURE__ */ jsx(
1572
+ TableRow,
1573
+ {
1574
+ "data-state": row.getIsSelected() && "selected",
1575
+ children: row.getVisibleCells().map((cell) => /* @__PURE__ */ jsx(TableCell, { children: flexRender(
1576
+ cell.column.columnDef.cell,
1577
+ cell.getContext()
1578
+ ) }, cell.id))
1579
+ },
1580
+ row.id
1581
+ )) : /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
1582
+ TableCell,
1583
+ {
1584
+ colSpan: columns.length,
1585
+ className: "h-24 text-center",
1586
+ children: noResultsMessage
1587
+ }
1588
+ ) }) })
1589
+ ] }) }),
1590
+ showPagination && /* @__PURE__ */ jsx(DataTablePagination, { table })
1591
+ ] });
1592
+ }
1593
+ var DropdownMenu = ({ dir, ...props }) => /* @__PURE__ */ jsx(
1594
+ DropdownMenuPrimitive.Root,
1595
+ {
1596
+ ...props,
1597
+ dir
1598
+ }
1599
+ );
1600
+ DropdownMenu.displayName = "DropdownMenu";
1601
+ var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
1602
+ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
1603
+ var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
1604
+ var DropdownMenuSub = DropdownMenuPrimitive.Sub;
1605
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
1606
+ var DropdownMenuSubTrigger = React24.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1607
+ DropdownMenuPrimitive.SubTrigger,
1608
+ {
1609
+ ref,
1610
+ className: cn(
1611
+ "flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1612
+ inset && "pl-8",
1613
+ className
1614
+ ),
1615
+ ...props,
1616
+ children: [
1617
+ children,
1618
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ms-auto rtl:rotate-180" })
1619
+ ]
1620
+ }
1621
+ ));
1622
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
1623
+ var DropdownMenuSubContent = React24.forwardRef(({ className, container, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx(
1624
+ DropdownMenuPrimitive.SubContent,
1625
+ {
1626
+ ref,
1627
+ className: cn(
1628
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg 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 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 origin-[--radix-dropdown-menu-content-transform-origin]",
1629
+ className
1630
+ ),
1631
+ ...props
1632
+ }
1633
+ ) }));
1634
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
1635
+ var DropdownMenuContent = React24.forwardRef(({ className, sideOffset = 4, container, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { container: container ?? void 0, children: /* @__PURE__ */ jsx(
1636
+ DropdownMenuPrimitive.Content,
1637
+ {
1638
+ ref,
1639
+ sideOffset,
1640
+ className: cn(
1641
+ "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
1642
+ "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 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 origin-[--radix-dropdown-menu-content-transform-origin]",
1643
+ className
1644
+ ),
1645
+ ...props
1646
+ }
1647
+ ) }));
1648
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
1649
+ var DropdownMenuItem = React24.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1650
+ DropdownMenuPrimitive.Item,
1651
+ {
1652
+ ref,
1653
+ className: cn(
1654
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0",
1655
+ inset && "pl-8",
1656
+ className
1657
+ ),
1658
+ ...props
1659
+ }
1660
+ ));
1661
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
1662
+ var DropdownMenuCheckboxItem = React24.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
1663
+ DropdownMenuPrimitive.CheckboxItem,
1664
+ {
1665
+ ref,
1666
+ className: cn(
1667
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1668
+ className
1669
+ ),
1670
+ checked,
1671
+ ...props,
1672
+ children: [
1673
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "h-4 w-4" }) }) }),
1674
+ children
1675
+ ]
1676
+ }
1677
+ ));
1678
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
1679
+ var DropdownMenuRadioItem = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1680
+ DropdownMenuPrimitive.RadioItem,
1681
+ {
1682
+ ref,
1683
+ className: cn(
1684
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1685
+ className
1686
+ ),
1687
+ ...props,
1688
+ children: [
1689
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "h-2 w-2 fill-current" }) }) }),
1690
+ children
1691
+ ]
1692
+ }
1693
+ ));
1694
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
1695
+ var DropdownMenuLabel = React24.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
1696
+ DropdownMenuPrimitive.Label,
1697
+ {
1698
+ ref,
1699
+ className: cn(
1700
+ "px-2 py-1.5 text-sm font-semibold",
1701
+ inset && "pl-8",
1702
+ className
1703
+ ),
1704
+ ...props
1705
+ }
1706
+ ));
1707
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
1708
+ var DropdownMenuSeparator = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1709
+ DropdownMenuPrimitive.Separator,
1710
+ {
1711
+ ref,
1712
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
1713
+ ...props
1714
+ }
1715
+ ));
1716
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
1717
+ var DropdownMenuShortcut = ({
1718
+ className,
1719
+ ...props
1720
+ }) => {
1721
+ return /* @__PURE__ */ jsx(
1722
+ "span",
1723
+ {
1724
+ className: cn("ml-auto text-xs tracking-widest opacity-60", className),
1725
+ ...props
1726
+ }
1727
+ );
1728
+ };
1729
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1730
+ function DataTableColumnHeader({
1731
+ column,
1732
+ title,
1733
+ className
1734
+ }) {
1735
+ if (!column.getCanSort()) {
1736
+ return /* @__PURE__ */ jsx("div", { className: cn(className), children: title });
1737
+ }
1738
+ return /* @__PURE__ */ jsx("div", { className: cn("flex items-center gap-2", className), children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [
1739
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
1740
+ Button,
1741
+ {
1742
+ variant: ButtonVariant.Ghost,
1743
+ size: ButtonSize.Sm,
1744
+ className: "data-[state=open]:bg-accent -ml-3 h-8",
1745
+ children: [
1746
+ /* @__PURE__ */ jsx("span", { children: title }),
1747
+ column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx(ArrowDown, { className: "size-4" }) : column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx(ArrowUp, { className: "size-4" }) : /* @__PURE__ */ jsx(ChevronsUpDown, { className: "size-4" })
1748
+ ]
1749
+ }
1750
+ ) }),
1751
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "start", children: [
1752
+ /* @__PURE__ */ jsxs(DropdownMenuItem, { onClick: () => column.toggleSorting(false), children: [
1753
+ /* @__PURE__ */ jsx(ArrowUp, { className: "size-4" }),
1754
+ "Asc"
1755
+ ] }),
1756
+ /* @__PURE__ */ jsxs(DropdownMenuItem, { onClick: () => column.toggleSorting(true), children: [
1757
+ /* @__PURE__ */ jsx(ArrowDown, { className: "size-4" }),
1758
+ "Desc"
1759
+ ] }),
1760
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
1761
+ /* @__PURE__ */ jsxs(DropdownMenuItem, { onClick: () => column.toggleVisibility(false), children: [
1762
+ /* @__PURE__ */ jsx(EyeOff, { className: "size-4" }),
1763
+ "Hide"
1764
+ ] })
1765
+ ] })
1766
+ ] }) });
1767
+ }
1768
+ function DataTableViewOptions({
1769
+ table,
1770
+ label = "Toggle columns",
1771
+ buttonText = "View"
1772
+ }) {
1773
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
1774
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
1775
+ Button,
1776
+ {
1777
+ variant: ButtonVariant.Outline,
1778
+ size: ButtonSize.Sm,
1779
+ className: "ml-auto hidden h-8 lg:flex",
1780
+ children: [
1781
+ /* @__PURE__ */ jsx(Settings2, { className: "size-4" }),
1782
+ buttonText
1783
+ ]
1784
+ }
1785
+ ) }),
1786
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", className: "w-[150px]", children: [
1787
+ /* @__PURE__ */ jsx(DropdownMenuLabel, { children: label }),
1788
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
1789
+ table.getAllColumns().filter(
1790
+ (column) => typeof column.accessorFn !== "undefined" && column.getCanHide()
1791
+ ).map((column) => {
1792
+ return /* @__PURE__ */ jsx(
1793
+ DropdownMenuCheckboxItem,
1794
+ {
1795
+ className: "capitalize",
1796
+ checked: column.getIsVisible(),
1797
+ onCheckedChange: (value) => column.toggleVisibility(!!value),
1798
+ children: column.id
1799
+ },
1800
+ column.id
1801
+ );
1802
+ })
1803
+ ] })
1804
+ ] });
1805
+ }
1806
+ function Skeleton({
1807
+ className,
1808
+ inheritColor = false,
1809
+ ...props
1810
+ }) {
1811
+ return /* @__PURE__ */ jsx(
1812
+ "div",
1813
+ {
1814
+ className: cn(
1815
+ "animate-pulse rounded-md",
1816
+ inheritColor ? "bg-current opacity-20" : "bg-muted",
1817
+ className
1818
+ ),
1819
+ ...props
1820
+ }
1821
+ );
1822
+ }
1823
+ var Spinner = React24.forwardRef(
1824
+ ({ className, icon: Icon2 = Loader2, size = "size-4", ...props }, ref) => {
1825
+ const textColorClasses = className?.match(/\btext-\S+/g)?.join(" ") || "";
1826
+ const wrapperClasses = trim(className?.replace(/\btext-\S+/g, "") || "");
1827
+ return /* @__PURE__ */ jsx(
1828
+ "div",
1829
+ {
1830
+ ref,
1831
+ className: cn("inline-flex items-center justify-center", wrapperClasses),
1832
+ ...props,
1833
+ children: /* @__PURE__ */ jsx(Icon2, { className: cn("animate-spin", size, textColorClasses) })
1834
+ }
1835
+ );
1836
+ }
1837
+ );
1838
+ Spinner.displayName = "Spinner";
1839
+ var Slider = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1840
+ SliderPrimitive.Root,
1841
+ {
1842
+ ref,
1843
+ className: cn(
1844
+ "relative flex w-full touch-none select-none items-center",
1845
+ className
1846
+ ),
1847
+ ...props
1848
+ }
1849
+ ));
1850
+ Slider.displayName = SliderPrimitive.Root.displayName;
1851
+ var SliderTrack = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1852
+ SliderPrimitive.Track,
1853
+ {
1854
+ ref,
1855
+ className: cn(
1856
+ "relative h-1.5 w-full grow overflow-hidden rounded-full bg-primary/20",
1857
+ className
1858
+ ),
1859
+ ...props
1860
+ }
1861
+ ));
1862
+ SliderTrack.displayName = SliderPrimitive.Track.displayName;
1863
+ var SliderRange = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1864
+ SliderPrimitive.Range,
1865
+ {
1866
+ ref,
1867
+ className: cn("absolute h-full bg-primary", className),
1868
+ ...props
1869
+ }
1870
+ ));
1871
+ SliderRange.displayName = SliderPrimitive.Range.displayName;
1872
+ var SliderThumb = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1873
+ SliderPrimitive.Thumb,
1874
+ {
1875
+ ref,
1876
+ className: cn(
1877
+ "block h-4 w-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",
1878
+ className
1879
+ ),
1880
+ ...props
1881
+ }
1882
+ ));
1883
+ SliderThumb.displayName = SliderPrimitive.Thumb.displayName;
1884
+ var Progress = React24.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx(
1885
+ ProgressPrimitive.Root,
1886
+ {
1887
+ ref,
1888
+ className: cn(
1889
+ "relative h-2 w-full overflow-hidden rounded-full bg-primary/20",
1890
+ className
1891
+ ),
1892
+ ...props,
1893
+ children: /* @__PURE__ */ jsx(
1894
+ ProgressPrimitive.Indicator,
1895
+ {
1896
+ className: "h-full w-full flex-1 bg-primary transition-all",
1897
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
1898
+ }
1899
+ )
1900
+ }
1901
+ ));
1902
+ Progress.displayName = ProgressPrimitive.Root.displayName;
1903
+ var Toaster = ({ ...props }) => {
1904
+ return /* @__PURE__ */ jsx(
1905
+ Toaster$1,
1906
+ {
1907
+ className: "toaster group",
1908
+ icons: {
1909
+ success: /* @__PURE__ */ jsx(CheckCircle2, { className: "size-4" }),
1910
+ info: /* @__PURE__ */ jsx(Info, { className: "size-4" }),
1911
+ warning: /* @__PURE__ */ jsx(AlertTriangle, { className: "size-4" }),
1912
+ error: /* @__PURE__ */ jsx(XOctagon, { className: "size-4" }),
1913
+ loading: /* @__PURE__ */ jsx(Loader2, { className: "size-4 animate-spin" })
1914
+ },
1915
+ ...props
1916
+ }
1917
+ );
1918
+ };
1919
+ var TooltipProvider = ({
1920
+ delayDuration = 0,
1921
+ ...props
1922
+ }) => /* @__PURE__ */ jsx(
1923
+ TooltipPrimitive.Provider,
1924
+ {
1925
+ delayDuration,
1926
+ ...props
1927
+ }
1928
+ );
1929
+ TooltipProvider.displayName = TooltipPrimitive.Provider.displayName;
1930
+ var Tooltip = ({
1931
+ ...props
1932
+ }) => /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { ...props }) });
1933
+ Tooltip.displayName = TooltipPrimitive.Root.displayName;
1934
+ var TooltipTrigger = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { ref, ...props }));
1935
+ TooltipTrigger.displayName = TooltipPrimitive.Trigger.displayName;
1936
+ var TooltipContent = React24.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1937
+ TooltipPrimitive.Content,
1938
+ {
1939
+ ref,
1940
+ sideOffset,
1941
+ className: cn(
1942
+ "z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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",
1943
+ className
1944
+ ),
1945
+ ...props
1946
+ }
1947
+ ) }));
1948
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
1949
+ var Popover = PopoverPrimitive.Root;
1950
+ Popover.displayName = "Popover";
1951
+ var PopoverTrigger = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
1952
+ PopoverPrimitive.Trigger,
1953
+ {
1954
+ ref,
1955
+ "data-slot": "popover-trigger",
1956
+ ...props
1957
+ }
1958
+ ));
1959
+ PopoverTrigger.displayName = "PopoverTrigger";
1960
+ var PopoverContent = React24.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1961
+ PopoverPrimitive.Content,
1962
+ {
1963
+ ref,
1964
+ "data-slot": "popover-content",
1965
+ align,
1966
+ sideOffset,
1967
+ className: cn(
1968
+ "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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 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",
1969
+ className
1970
+ ),
1971
+ ...props
1972
+ }
1973
+ ) }));
1974
+ PopoverContent.displayName = "PopoverContent";
1975
+ var PopoverAnchor = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
1976
+ PopoverPrimitive.Anchor,
1977
+ {
1978
+ ref,
1979
+ "data-slot": "popover-anchor",
1980
+ ...props
1981
+ }
1982
+ ));
1983
+ PopoverAnchor.displayName = "PopoverAnchor";
1984
+ var HoverCard = HoverCardPrimitive.Root;
1985
+ HoverCard.displayName = "HoverCard";
1986
+ var HoverCardTrigger = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
1987
+ HoverCardPrimitive.Trigger,
1988
+ {
1989
+ ref,
1990
+ "data-slot": "hover-card-trigger",
1991
+ ...props
1992
+ }
1993
+ ));
1994
+ HoverCardTrigger.displayName = "HoverCardTrigger";
1995
+ var HoverCardContent = React24.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(HoverCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsx(
1996
+ HoverCardPrimitive.Content,
1997
+ {
1998
+ ref,
1999
+ "data-slot": "hover-card-content",
2000
+ align,
2001
+ sideOffset,
2002
+ className: cn(
2003
+ "z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden 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 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",
2004
+ className
2005
+ ),
2006
+ ...props
2007
+ }
2008
+ ) }));
2009
+ HoverCardContent.displayName = "HoverCardContent";
2010
+ var Card = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2011
+ "div",
2012
+ {
2013
+ ref,
2014
+ className: cn(
2015
+ "rounded-xl border bg-card text-card-foreground shadow",
2016
+ className
2017
+ ),
2018
+ ...props
2019
+ }
2020
+ ));
2021
+ Card.displayName = "Card";
2022
+ var CardHeader = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2023
+ "div",
2024
+ {
2025
+ ref,
2026
+ className: cn("flex flex-col space-y-1.5 p-6", className),
2027
+ ...props
2028
+ }
2029
+ ));
2030
+ CardHeader.displayName = "CardHeader";
2031
+ var CardTitle = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2032
+ "div",
2033
+ {
2034
+ ref,
2035
+ className: cn("font-semibold leading-none tracking-tight", className),
2036
+ ...props
2037
+ }
2038
+ ));
2039
+ CardTitle.displayName = "CardTitle";
2040
+ var CardDescription = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2041
+ "div",
2042
+ {
2043
+ ref,
2044
+ className: cn("text-sm text-muted-foreground", className),
2045
+ ...props
2046
+ }
2047
+ ));
2048
+ CardDescription.displayName = "CardDescription";
2049
+ var CardContent = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("p-6 pt-0", className), ...props }));
2050
+ CardContent.displayName = "CardContent";
2051
+ var CardFooter = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2052
+ "div",
2053
+ {
2054
+ ref,
2055
+ className: cn("flex items-center p-6 pt-0", className),
2056
+ ...props
2057
+ }
2058
+ ));
2059
+ CardFooter.displayName = "CardFooter";
2060
+ var Header = React24__default.forwardRef(
2061
+ ({ children, className }, ref) => {
2062
+ return /* @__PURE__ */ jsx(
2063
+ "header",
2064
+ {
2065
+ ref,
2066
+ className: cn(
2067
+ "flex items-center justify-end px-6 py-4 bg-background border-b border-border h-16 w-full",
2068
+ className
2069
+ ),
2070
+ children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-4", children })
2071
+ }
2072
+ );
2073
+ }
2074
+ );
2075
+ Header.displayName = "Header";
2076
+ var NavigationMenu = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2077
+ NavigationMenuPrimitive.Root,
2078
+ {
2079
+ ref,
2080
+ className: cn(
2081
+ "relative z-10 flex max-w-max flex-1 items-center justify-center",
2082
+ className
2083
+ ),
2084
+ ...props,
2085
+ children: [
2086
+ children,
2087
+ /* @__PURE__ */ jsx(NavigationMenuViewport, {})
2088
+ ]
2089
+ }
2090
+ ));
2091
+ NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName;
2092
+ var NavigationMenuList = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2093
+ NavigationMenuPrimitive.List,
2094
+ {
2095
+ ref,
2096
+ className: cn(
2097
+ "group flex flex-1 list-none items-center justify-center space-x-1",
2098
+ className
2099
+ ),
2100
+ ...props
2101
+ }
2102
+ ));
2103
+ NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
2104
+ var NavigationMenuItem = NavigationMenuPrimitive.Item;
2105
+ var navigationMenuTriggerStyle = cva(
2106
+ "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-[state=open]:text-accent-foreground data-[state=open]:bg-accent/50 data-[state=open]:hover:bg-accent data-[state=open]:focus:bg-accent"
2107
+ );
2108
+ var NavigationMenuTrigger = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
2109
+ NavigationMenuPrimitive.Trigger,
2110
+ {
2111
+ ref,
2112
+ className: cn(navigationMenuTriggerStyle(), "group", className),
2113
+ ...props,
2114
+ children: [
2115
+ children,
2116
+ " ",
2117
+ /* @__PURE__ */ jsx(
2118
+ ChevronDownIcon,
2119
+ {
2120
+ className: "relative top-[1px] ml-1 h-3 w-3 transition duration-300 group-data-[state=open]:rotate-180",
2121
+ "aria-hidden": "true"
2122
+ }
2123
+ )
2124
+ ]
2125
+ }
2126
+ ));
2127
+ NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName;
2128
+ var NavigationMenuContent = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2129
+ NavigationMenuPrimitive.Content,
2130
+ {
2131
+ ref,
2132
+ className: cn(
2133
+ "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 ",
2134
+ className
2135
+ ),
2136
+ ...props
2137
+ }
2138
+ ));
2139
+ NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName;
2140
+ var NavigationMenuLink = NavigationMenuPrimitive.Link;
2141
+ var NavigationMenuViewport = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: cn("absolute left-0 top-full flex justify-center"), children: /* @__PURE__ */ jsx(
2142
+ NavigationMenuPrimitive.Viewport,
2143
+ {
2144
+ className: cn(
2145
+ "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)]",
2146
+ className
2147
+ ),
2148
+ ref,
2149
+ ...props
2150
+ }
2151
+ ) }));
2152
+ NavigationMenuViewport.displayName = NavigationMenuPrimitive.Viewport.displayName;
2153
+ var NavigationMenuIndicator = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2154
+ NavigationMenuPrimitive.Indicator,
2155
+ {
2156
+ ref,
2157
+ className: cn(
2158
+ "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",
2159
+ className
2160
+ ),
2161
+ ...props,
2162
+ children: /* @__PURE__ */ jsx("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
2163
+ }
2164
+ ));
2165
+ NavigationMenuIndicator.displayName = NavigationMenuPrimitive.Indicator.displayName;
2166
+ function Breadcrumb({ ...props }) {
2167
+ return /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props });
2168
+ }
2169
+ function BreadcrumbList({ className, ...props }) {
2170
+ return /* @__PURE__ */ jsx(
2171
+ "ol",
2172
+ {
2173
+ "data-slot": "breadcrumb-list",
2174
+ className: cn(
2175
+ "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
2176
+ className
2177
+ ),
2178
+ ...props
2179
+ }
2180
+ );
2181
+ }
2182
+ function BreadcrumbItem({ className, ...props }) {
2183
+ return /* @__PURE__ */ jsx(
2184
+ "li",
2185
+ {
2186
+ "data-slot": "breadcrumb-item",
2187
+ className: cn("inline-flex items-center gap-1.5", className),
2188
+ ...props
2189
+ }
2190
+ );
2191
+ }
2192
+ function BreadcrumbLink({
2193
+ asChild,
2194
+ className,
2195
+ ...props
2196
+ }) {
2197
+ const Comp = asChild ? Slot : "a";
2198
+ return /* @__PURE__ */ jsx(
2199
+ Comp,
2200
+ {
2201
+ "data-slot": "breadcrumb-link",
2202
+ className: cn("hover:text-foreground transition-colors", className),
2203
+ ...props
2204
+ }
2205
+ );
2206
+ }
2207
+ function BreadcrumbPage({ className, ...props }) {
2208
+ return /* @__PURE__ */ jsx(
2209
+ "span",
2210
+ {
2211
+ "data-slot": "breadcrumb-page",
2212
+ role: "link",
2213
+ "aria-disabled": "true",
2214
+ "aria-current": "page",
2215
+ className: cn("text-foreground font-normal", className),
2216
+ ...props
2217
+ }
2218
+ );
2219
+ }
2220
+ function BreadcrumbSeparator({
2221
+ children,
2222
+ className,
2223
+ ...props
2224
+ }) {
2225
+ return /* @__PURE__ */ jsx(
2226
+ "li",
2227
+ {
2228
+ "data-slot": "breadcrumb-separator",
2229
+ role: "presentation",
2230
+ "aria-hidden": "true",
2231
+ className: cn("[&>svg]:size-3.5", className),
2232
+ ...props,
2233
+ children: children ?? /* @__PURE__ */ jsx(ChevronRight, {})
2234
+ }
2235
+ );
2236
+ }
2237
+ function BreadcrumbEllipsis({
2238
+ className,
2239
+ ...props
2240
+ }) {
2241
+ return /* @__PURE__ */ jsxs(
2242
+ "span",
2243
+ {
2244
+ "data-slot": "breadcrumb-ellipsis",
2245
+ role: "presentation",
2246
+ "aria-hidden": "true",
2247
+ className: cn("flex size-9 items-center justify-center", className),
2248
+ ...props,
2249
+ children: [
2250
+ /* @__PURE__ */ jsx(MoreHorizontal, { className: "size-4" }),
2251
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More" })
2252
+ ]
2253
+ }
2254
+ );
2255
+ }
2256
+ function Menubar({
2257
+ className,
2258
+ ...props
2259
+ }) {
2260
+ return /* @__PURE__ */ jsx(
2261
+ MenubarPrimitive.Root,
2262
+ {
2263
+ "data-slot": "menubar",
2264
+ className: cn(
2265
+ "bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs",
2266
+ className
2267
+ ),
2268
+ ...props
2269
+ }
2270
+ );
2271
+ }
2272
+ function MenubarMenu({
2273
+ ...props
2274
+ }) {
2275
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Menu, { "data-slot": "menubar-menu", ...props });
2276
+ }
2277
+ function MenubarGroup({
2278
+ ...props
2279
+ }) {
2280
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Group, { "data-slot": "menubar-group", ...props });
2281
+ }
2282
+ function MenubarPortal({
2283
+ ...props
2284
+ }) {
2285
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Portal, { "data-slot": "menubar-portal", ...props });
2286
+ }
2287
+ function MenubarRadioGroup({
2288
+ ...props
2289
+ }) {
2290
+ return /* @__PURE__ */ jsx(MenubarPrimitive.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
2291
+ }
2292
+ function MenubarTrigger({
2293
+ className,
2294
+ ...props
2295
+ }) {
2296
+ return /* @__PURE__ */ jsx(
2297
+ MenubarPrimitive.Trigger,
2298
+ {
2299
+ "data-slot": "menubar-trigger",
2300
+ className: cn(
2301
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none",
2302
+ className
2303
+ ),
2304
+ ...props
2305
+ }
2306
+ );
2307
+ }
2308
+ function MenubarContent({
2309
+ className,
2310
+ align = "start",
2311
+ alignOffset = -4,
2312
+ sideOffset = 8,
2313
+ ...props
2314
+ }) {
2315
+ return /* @__PURE__ */ jsx(MenubarPortal, { children: /* @__PURE__ */ jsx(
2316
+ MenubarPrimitive.Content,
2317
+ {
2318
+ "data-slot": "menubar-content",
2319
+ align,
2320
+ alignOffset,
2321
+ sideOffset,
2322
+ className: cn(
2323
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=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 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md",
2324
+ className
2325
+ ),
2326
+ ...props
2327
+ }
2328
+ ) });
2329
+ }
2330
+ function MenubarItem({
2331
+ className,
2332
+ inset,
2333
+ variant = "default",
2334
+ ...props
2335
+ }) {
2336
+ return /* @__PURE__ */ jsx(
2337
+ MenubarPrimitive.Item,
2338
+ {
2339
+ "data-slot": "menubar-item",
2340
+ "data-inset": inset,
2341
+ "data-variant": variant,
2342
+ className: cn(
2343
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2344
+ className
2345
+ ),
2346
+ ...props
2347
+ }
2348
+ );
2349
+ }
2350
+ function MenubarCheckboxItem({
2351
+ className,
2352
+ children,
2353
+ checked,
2354
+ ...props
2355
+ }) {
2356
+ return /* @__PURE__ */ jsxs(
2357
+ MenubarPrimitive.CheckboxItem,
2358
+ {
2359
+ "data-slot": "menubar-checkbox-item",
2360
+ className: cn(
2361
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2362
+ className
2363
+ ),
2364
+ checked,
2365
+ ...props,
2366
+ children: [
2367
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
2368
+ children
2369
+ ]
2370
+ }
2371
+ );
2372
+ }
2373
+ function MenubarRadioItem({
2374
+ className,
2375
+ children,
2376
+ ...props
2377
+ }) {
2378
+ return /* @__PURE__ */ jsxs(
2379
+ MenubarPrimitive.RadioItem,
2380
+ {
2381
+ "data-slot": "menubar-radio-item",
2382
+ className: cn(
2383
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2384
+ className
2385
+ ),
2386
+ ...props,
2387
+ children: [
2388
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(MenubarPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
2389
+ children
2390
+ ]
2391
+ }
2392
+ );
2393
+ }
2394
+ function MenubarLabel({
2395
+ className,
2396
+ inset,
2397
+ ...props
2398
+ }) {
2399
+ return /* @__PURE__ */ jsx(
2400
+ MenubarPrimitive.Label,
2401
+ {
2402
+ "data-slot": "menubar-label",
2403
+ "data-inset": inset,
2404
+ className: cn(
2405
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
2406
+ className
2407
+ ),
2408
+ ...props
2409
+ }
2410
+ );
2411
+ }
2412
+ function MenubarSeparator({
2413
+ className,
2414
+ ...props
2415
+ }) {
2416
+ return /* @__PURE__ */ jsx(
2417
+ MenubarPrimitive.Separator,
2418
+ {
2419
+ "data-slot": "menubar-separator",
2420
+ className: cn("bg-border -mx-1 my-1 h-px", className),
2421
+ ...props
2422
+ }
2423
+ );
2424
+ }
2425
+ function MenubarShortcut({
2426
+ className,
2427
+ ...props
2428
+ }) {
2429
+ return /* @__PURE__ */ jsx(
2430
+ "span",
2431
+ {
2432
+ "data-slot": "menubar-shortcut",
2433
+ className: cn(
2434
+ "text-muted-foreground ml-auto text-xs tracking-widest",
2435
+ className
2436
+ ),
2437
+ ...props
2438
+ }
2439
+ );
2440
+ }
2441
+ function MenubarSub({
2442
+ ...props
2443
+ }) {
2444
+ return /* @__PURE__ */ jsx(MenubarPrimitive.Sub, { "data-slot": "menubar-sub", ...props });
2445
+ }
2446
+ function MenubarSubTrigger({
2447
+ className,
2448
+ inset,
2449
+ children,
2450
+ ...props
2451
+ }) {
2452
+ return /* @__PURE__ */ jsxs(
2453
+ MenubarPrimitive.SubTrigger,
2454
+ {
2455
+ "data-slot": "menubar-sub-trigger",
2456
+ "data-inset": inset,
2457
+ className: cn(
2458
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8",
2459
+ className
2460
+ ),
2461
+ ...props,
2462
+ children: [
2463
+ children,
2464
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto h-4 w-4" })
2465
+ ]
2466
+ }
2467
+ );
2468
+ }
2469
+ function MenubarSubContent({
2470
+ className,
2471
+ ...props
2472
+ }) {
2473
+ return /* @__PURE__ */ jsx(
2474
+ MenubarPrimitive.SubContent,
2475
+ {
2476
+ "data-slot": "menubar-sub-content",
2477
+ className: cn(
2478
+ "bg-popover text-popover-foreground 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 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 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
2479
+ className
2480
+ ),
2481
+ ...props
2482
+ }
2483
+ );
2484
+ }
2485
+ var MoreHorizontalIcon = ({ className = "" }) => {
2486
+ return /* @__PURE__ */ jsxs(
2487
+ "svg",
2488
+ {
2489
+ className,
2490
+ width: "16",
2491
+ height: "16",
2492
+ viewBox: "0 0 24 24",
2493
+ fill: "none",
2494
+ stroke: "currentColor",
2495
+ strokeWidth: "2",
2496
+ strokeLinecap: "round",
2497
+ strokeLinejoin: "round",
2498
+ children: [
2499
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "1" }),
2500
+ /* @__PURE__ */ jsx("circle", { cx: "19", cy: "12", r: "1" }),
2501
+ /* @__PURE__ */ jsx("circle", { cx: "5", cy: "12", r: "1" })
2502
+ ]
2503
+ }
2504
+ );
2505
+ };
2506
+ function Pagination({ className, ...props }) {
2507
+ return /* @__PURE__ */ jsx(
2508
+ "nav",
2509
+ {
2510
+ role: "navigation",
2511
+ "aria-label": "pagination",
2512
+ "data-slot": "pagination",
2513
+ className: cn("mx-auto flex w-full justify-center", className),
2514
+ ...props
2515
+ }
2516
+ );
2517
+ }
2518
+ function PaginationContent({
2519
+ className,
2520
+ ...props
2521
+ }) {
2522
+ return /* @__PURE__ */ jsx(
2523
+ "ul",
2524
+ {
2525
+ "data-slot": "pagination-content",
2526
+ className: cn("flex flex-row items-center gap-1", className),
2527
+ ...props
2528
+ }
2529
+ );
2530
+ }
2531
+ function PaginationItem({ ...props }) {
2532
+ return /* @__PURE__ */ jsx("li", { "data-slot": "pagination-item", ...props });
2533
+ }
2534
+ function PaginationLink({
2535
+ className,
2536
+ isActive,
2537
+ size = ButtonSize.Icon,
2538
+ asChild,
2539
+ ...props
2540
+ }) {
2541
+ const Comp = asChild ? Slot : "a";
2542
+ return /* @__PURE__ */ jsx(
2543
+ Comp,
2544
+ {
2545
+ "aria-current": isActive ? "page" : void 0,
2546
+ "data-slot": "pagination-link",
2547
+ "data-active": isActive,
2548
+ className: cn(
2549
+ buttonVariants({
2550
+ variant: isActive ? ButtonVariant.Outline : ButtonVariant.Ghost,
2551
+ size
2552
+ }),
2553
+ className
2554
+ ),
2555
+ ...props
2556
+ }
2557
+ );
2558
+ }
2559
+ function PaginationPrevious({
2560
+ className,
2561
+ children,
2562
+ ...props
2563
+ }) {
2564
+ return /* @__PURE__ */ jsxs(
2565
+ PaginationLink,
2566
+ {
2567
+ "aria-label": "Go to previous page",
2568
+ size: ButtonSize.Default,
2569
+ className: cn("gap-1 px-2.5 sm:pl-2.5", className),
2570
+ ...props,
2571
+ children: [
2572
+ /* @__PURE__ */ jsx(ChevronLeftIcon, { className: "h-4 w-4" }),
2573
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: children ?? "Previous" })
2574
+ ]
2575
+ }
2576
+ );
2577
+ }
2578
+ function PaginationNext({
2579
+ className,
2580
+ children,
2581
+ ...props
2582
+ }) {
2583
+ return /* @__PURE__ */ jsxs(
2584
+ PaginationLink,
2585
+ {
2586
+ "aria-label": "Go to next page",
2587
+ size: ButtonSize.Default,
2588
+ className: cn("gap-1 px-2.5 sm:pr-2.5", className),
2589
+ ...props,
2590
+ children: [
2591
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: children ?? "Next" }),
2592
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-4 w-4" })
2593
+ ]
2594
+ }
2595
+ );
2596
+ }
2597
+ function PaginationEllipsis({
2598
+ className,
2599
+ ...props
2600
+ }) {
2601
+ return /* @__PURE__ */ jsxs(
2602
+ "span",
2603
+ {
2604
+ "aria-hidden": true,
2605
+ "data-slot": "pagination-ellipsis",
2606
+ className: cn("flex size-9 items-center justify-center", className),
2607
+ ...props,
2608
+ children: [
2609
+ /* @__PURE__ */ jsx(MoreHorizontalIcon, { className: "h-4 w-4" }),
2610
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More pages" })
2611
+ ]
2612
+ }
2613
+ );
2614
+ }
2615
+ function Tabs({
2616
+ className,
2617
+ ...props
2618
+ }) {
2619
+ return /* @__PURE__ */ jsx(
2620
+ TabsPrimitive.Root,
2621
+ {
2622
+ "data-slot": "tabs",
2623
+ className: cn("flex flex-col gap-2", className),
2624
+ ...props
2625
+ }
2626
+ );
2627
+ }
2628
+ function TabsList({
2629
+ className,
2630
+ ...props
2631
+ }) {
2632
+ return /* @__PURE__ */ jsx(
2633
+ TabsPrimitive.List,
2634
+ {
2635
+ "data-slot": "tabs-list",
2636
+ className: cn(
2637
+ "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",
2638
+ className
2639
+ ),
2640
+ ...props
2641
+ }
2642
+ );
2643
+ }
2644
+ function TabsTrigger({
2645
+ className,
2646
+ ...props
2647
+ }) {
2648
+ return /* @__PURE__ */ jsx(
2649
+ TabsPrimitive.Trigger,
2650
+ {
2651
+ "data-slot": "tabs-trigger",
2652
+ className: cn(
2653
+ "data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2654
+ className
2655
+ ),
2656
+ ...props
2657
+ }
2658
+ );
2659
+ }
2660
+ function TabsContent({
2661
+ className,
2662
+ ...props
2663
+ }) {
2664
+ return /* @__PURE__ */ jsx(
2665
+ TabsPrimitive.Content,
2666
+ {
2667
+ "data-slot": "tabs-content",
2668
+ className: cn("flex-1 outline-none", className),
2669
+ ...props
2670
+ }
2671
+ );
2672
+ }
2673
+ var Sheet = SheetPrimitive.Root;
2674
+ var SheetTrigger = SheetPrimitive.Trigger;
2675
+ var SheetClose = SheetPrimitive.Close;
2676
+ var SheetPortal = SheetPrimitive.Portal;
2677
+ var SheetOverlay = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2678
+ SheetPrimitive.Overlay,
2679
+ {
2680
+ className: cn(
2681
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
2682
+ className
2683
+ ),
2684
+ ...props,
2685
+ ref
2686
+ }
2687
+ ));
2688
+ SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
2689
+ var sheetVariants = cva(
2690
+ "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",
2691
+ {
2692
+ variants: {
2693
+ side: {
2694
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
2695
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
2696
+ 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",
2697
+ 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"
2698
+ }
2699
+ },
2700
+ defaultVariants: {
2701
+ side: "right"
2702
+ }
2703
+ }
2704
+ );
2705
+ var SheetContent = React24.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { children: [
2706
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
2707
+ /* @__PURE__ */ jsxs(
2708
+ SheetPrimitive.Content,
2709
+ {
2710
+ ref,
2711
+ className: cn(sheetVariants({ side }), className),
2712
+ ...props,
2713
+ children: [
2714
+ /* @__PURE__ */ jsxs(SheetPrimitive.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: [
2715
+ /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
2716
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
2717
+ ] }),
2718
+ children
2719
+ ]
2720
+ }
2721
+ )
2722
+ ] }));
2723
+ SheetContent.displayName = SheetPrimitive.Content.displayName;
2724
+ var SheetHeader = ({
2725
+ className,
2726
+ ...props
2727
+ }) => /* @__PURE__ */ jsx(
2728
+ "div",
2729
+ {
2730
+ className: cn(
2731
+ "flex flex-col space-y-2 text-center sm:text-left",
2732
+ className
2733
+ ),
2734
+ ...props
2735
+ }
2736
+ );
2737
+ SheetHeader.displayName = "SheetHeader";
2738
+ var SheetFooter = ({
2739
+ className,
2740
+ ...props
2741
+ }) => /* @__PURE__ */ jsx(
2742
+ "div",
2743
+ {
2744
+ className: cn(
2745
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
2746
+ className
2747
+ ),
2748
+ ...props
2749
+ }
2750
+ );
2751
+ SheetFooter.displayName = "SheetFooter";
2752
+ var SheetTitle = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2753
+ SheetPrimitive.Title,
2754
+ {
2755
+ ref,
2756
+ className: cn("text-lg font-semibold text-foreground", className),
2757
+ ...props
2758
+ }
2759
+ ));
2760
+ SheetTitle.displayName = SheetPrimitive.Title.displayName;
2761
+ var SheetDescription = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2762
+ SheetPrimitive.Description,
2763
+ {
2764
+ ref,
2765
+ className: cn("text-sm text-muted-foreground", className),
2766
+ ...props
2767
+ }
2768
+ ));
2769
+ SheetDescription.displayName = SheetPrimitive.Description.displayName;
2770
+ var Dialog = SheetPrimitive.Root;
2771
+ var DialogTrigger = SheetPrimitive.Trigger;
2772
+ var DialogPortal = SheetPrimitive.Portal;
2773
+ var DialogClose = SheetPrimitive.Close;
2774
+ var DialogOverlay = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2775
+ SheetPrimitive.Overlay,
2776
+ {
2777
+ ref,
2778
+ className: cn(
2779
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
2780
+ className
2781
+ ),
2782
+ ...props
2783
+ }
2784
+ ));
2785
+ DialogOverlay.displayName = SheetPrimitive.Overlay.displayName;
2786
+ var DialogContent = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
2787
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
2788
+ /* @__PURE__ */ jsxs(
2789
+ SheetPrimitive.Content,
2790
+ {
2791
+ ref,
2792
+ className: cn(
2793
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 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 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
2794
+ className
2795
+ ),
2796
+ ...props,
2797
+ children: [
2798
+ children,
2799
+ /* @__PURE__ */ jsxs(SheetPrimitive.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-accent data-[state=open]:text-muted-foreground", children: [
2800
+ /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
2801
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
2802
+ ] })
2803
+ ]
2804
+ }
2805
+ )
2806
+ ] }));
2807
+ DialogContent.displayName = SheetPrimitive.Content.displayName;
2808
+ var DialogHeader = ({
2809
+ className,
2810
+ ...props
2811
+ }) => /* @__PURE__ */ jsx(
2812
+ "div",
2813
+ {
2814
+ className: cn(
2815
+ "flex flex-col space-y-1.5 text-center sm:text-left",
2816
+ className
2817
+ ),
2818
+ ...props
2819
+ }
2820
+ );
2821
+ DialogHeader.displayName = "DialogHeader";
2822
+ var DialogFooter = ({
2823
+ className,
2824
+ ...props
2825
+ }) => /* @__PURE__ */ jsx(
2826
+ "div",
2827
+ {
2828
+ className: cn(
2829
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
2830
+ className
2831
+ ),
2832
+ ...props
2833
+ }
2834
+ );
2835
+ DialogFooter.displayName = "DialogFooter";
2836
+ var DialogTitle = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2837
+ SheetPrimitive.Title,
2838
+ {
2839
+ ref,
2840
+ className: cn(
2841
+ "text-lg font-semibold leading-none tracking-tight",
2842
+ className
2843
+ ),
2844
+ ...props
2845
+ }
2846
+ ));
2847
+ DialogTitle.displayName = SheetPrimitive.Title.displayName;
2848
+ var DialogDescription = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2849
+ SheetPrimitive.Description,
2850
+ {
2851
+ ref,
2852
+ className: cn("text-sm text-muted-foreground", className),
2853
+ ...props
2854
+ }
2855
+ ));
2856
+ DialogDescription.displayName = SheetPrimitive.Description.displayName;
2857
+ function AlertDialog({
2858
+ ...props
2859
+ }) {
2860
+ return /* @__PURE__ */ jsx(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
2861
+ }
2862
+ function AlertDialogTrigger({
2863
+ ...props
2864
+ }) {
2865
+ return /* @__PURE__ */ jsx(AlertDialogPrimitive.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
2866
+ }
2867
+ function AlertDialogPortal({
2868
+ ...props
2869
+ }) {
2870
+ return /* @__PURE__ */ jsx(AlertDialogPrimitive.Portal, { "data-slot": "alert-dialog-portal", ...props });
2871
+ }
2872
+ function AlertDialogOverlay({
2873
+ className,
2874
+ ...props
2875
+ }) {
2876
+ return /* @__PURE__ */ jsx(
2877
+ AlertDialogPrimitive.Overlay,
2878
+ {
2879
+ "data-slot": "alert-dialog-overlay",
2880
+ className: cn(
2881
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
2882
+ className
2883
+ ),
2884
+ ...props
2885
+ }
2886
+ );
2887
+ }
2888
+ function AlertDialogContent({
2889
+ className,
2890
+ ...props
2891
+ }) {
2892
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
2893
+ /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
2894
+ /* @__PURE__ */ jsx(
2895
+ AlertDialogPrimitive.Content,
2896
+ {
2897
+ "data-slot": "alert-dialog-content",
2898
+ className: cn(
2899
+ "bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
2900
+ className
2901
+ ),
2902
+ ...props
2903
+ }
2904
+ )
2905
+ ] });
2906
+ }
2907
+ function AlertDialogHeader({
2908
+ className,
2909
+ ...props
2910
+ }) {
2911
+ return /* @__PURE__ */ jsx(
2912
+ "div",
2913
+ {
2914
+ "data-slot": "alert-dialog-header",
2915
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
2916
+ ...props
2917
+ }
2918
+ );
2919
+ }
2920
+ function AlertDialogFooter({
2921
+ className,
2922
+ ...props
2923
+ }) {
2924
+ return /* @__PURE__ */ jsx(
2925
+ "div",
2926
+ {
2927
+ "data-slot": "alert-dialog-footer",
2928
+ className: cn(
2929
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
2930
+ className
2931
+ ),
2932
+ ...props
2933
+ }
2934
+ );
2935
+ }
2936
+ function AlertDialogTitle({
2937
+ className,
2938
+ ...props
2939
+ }) {
2940
+ return /* @__PURE__ */ jsx(
2941
+ AlertDialogPrimitive.Title,
2942
+ {
2943
+ "data-slot": "alert-dialog-title",
2944
+ className: cn("text-lg font-semibold", className),
2945
+ ...props
2946
+ }
2947
+ );
2948
+ }
2949
+ function AlertDialogDescription({
2950
+ className,
2951
+ ...props
2952
+ }) {
2953
+ return /* @__PURE__ */ jsx(
2954
+ AlertDialogPrimitive.Description,
2955
+ {
2956
+ "data-slot": "alert-dialog-description",
2957
+ className: cn("text-muted-foreground text-sm", className),
2958
+ ...props
2959
+ }
2960
+ );
2961
+ }
2962
+ function AlertDialogAction({
2963
+ className,
2964
+ ...props
2965
+ }) {
2966
+ return /* @__PURE__ */ jsx(
2967
+ AlertDialogPrimitive.Action,
2968
+ {
2969
+ className: cn(buttonVariants(), className),
2970
+ ...props
2971
+ }
2972
+ );
2973
+ }
2974
+ function AlertDialogCancel({
2975
+ className,
2976
+ ...props
2977
+ }) {
2978
+ return /* @__PURE__ */ jsx(
2979
+ AlertDialogPrimitive.Cancel,
2980
+ {
2981
+ className: cn(buttonVariants({ variant: ButtonVariant.Outline }), className),
2982
+ ...props
2983
+ }
2984
+ );
2985
+ }
2986
+ function Drawer({
2987
+ ...props
2988
+ }) {
2989
+ return /* @__PURE__ */ jsx(Drawer$1.Root, { "data-slot": "drawer", ...props });
2990
+ }
2991
+ function DrawerTrigger({
2992
+ ...props
2993
+ }) {
2994
+ return /* @__PURE__ */ jsx(Drawer$1.Trigger, { "data-slot": "drawer-trigger", ...props });
2995
+ }
2996
+ function DrawerPortal({
2997
+ ...props
2998
+ }) {
2999
+ return /* @__PURE__ */ jsx(Drawer$1.Portal, { "data-slot": "drawer-portal", ...props });
3000
+ }
3001
+ function DrawerClose({
3002
+ ...props
3003
+ }) {
3004
+ return /* @__PURE__ */ jsx(Drawer$1.Close, { "data-slot": "drawer-close", ...props });
3005
+ }
3006
+ function DrawerOverlay({
3007
+ className,
3008
+ ...props
3009
+ }) {
3010
+ return /* @__PURE__ */ jsx(
3011
+ Drawer$1.Overlay,
3012
+ {
3013
+ "data-slot": "drawer-overlay",
3014
+ className: cn(
3015
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
3016
+ className
3017
+ ),
3018
+ ...props
3019
+ }
3020
+ );
3021
+ }
3022
+ function DrawerContent({
3023
+ className,
3024
+ children,
3025
+ ...props
3026
+ }) {
3027
+ return /* @__PURE__ */ jsxs(DrawerPortal, { "data-slot": "drawer-portal", children: [
3028
+ /* @__PURE__ */ jsx(DrawerOverlay, {}),
3029
+ /* @__PURE__ */ jsxs(
3030
+ Drawer$1.Content,
3031
+ {
3032
+ "data-slot": "drawer-content",
3033
+ className: cn(
3034
+ "group/drawer-content bg-background fixed z-50 flex h-auto flex-col",
3035
+ "data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-lg data-[vaul-drawer-direction=top]:border-b",
3036
+ "data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-lg data-[vaul-drawer-direction=bottom]:border-t",
3037
+ "data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=right]:sm:max-w-sm",
3038
+ "data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=left]:sm:max-w-sm",
3039
+ className
3040
+ ),
3041
+ ...props,
3042
+ children: [
3043
+ /* @__PURE__ */ jsx("div", { className: "bg-muted mx-auto mt-4 hidden h-2 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }),
3044
+ children
3045
+ ]
3046
+ }
3047
+ )
3048
+ ] });
3049
+ }
3050
+ function DrawerHeader({ className, ...props }) {
3051
+ return /* @__PURE__ */ jsx(
3052
+ "div",
3053
+ {
3054
+ "data-slot": "drawer-header",
3055
+ className: cn(
3056
+ "flex flex-col gap-1.5 p-4 text-center sm:text-left",
3057
+ className
3058
+ ),
3059
+ ...props
3060
+ }
3061
+ );
3062
+ }
3063
+ function DrawerFooter({ className, ...props }) {
3064
+ return /* @__PURE__ */ jsx(
3065
+ "div",
3066
+ {
3067
+ "data-slot": "drawer-footer",
3068
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
3069
+ ...props
3070
+ }
3071
+ );
3072
+ }
3073
+ function DrawerTitle({
3074
+ className,
3075
+ ...props
3076
+ }) {
3077
+ return /* @__PURE__ */ jsx(
3078
+ Drawer$1.Title,
3079
+ {
3080
+ "data-slot": "drawer-title",
3081
+ className: cn("text-lg font-semibold text-foreground", className),
3082
+ ...props
3083
+ }
3084
+ );
3085
+ }
3086
+ function DrawerDescription({
3087
+ className,
3088
+ ...props
3089
+ }) {
3090
+ return /* @__PURE__ */ jsx(
3091
+ Drawer$1.Description,
3092
+ {
3093
+ "data-slot": "drawer-description",
3094
+ className: cn("text-sm text-muted-foreground", className),
3095
+ ...props
3096
+ }
3097
+ );
3098
+ }
3099
+ function ResizablePanelGroup({
3100
+ className,
3101
+ ...props
3102
+ }) {
3103
+ return /* @__PURE__ */ jsx(
3104
+ ResizablePrimitive.PanelGroup,
3105
+ {
3106
+ "data-slot": "resizable-panel-group",
3107
+ className: cn(
3108
+ "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
3109
+ className
3110
+ ),
3111
+ ...props
3112
+ }
3113
+ );
3114
+ }
3115
+ function ResizablePanel({
3116
+ ...props
3117
+ }) {
3118
+ return /* @__PURE__ */ jsx(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
3119
+ }
3120
+ function ResizableHandle({
3121
+ withHandle,
3122
+ className,
3123
+ ...props
3124
+ }) {
3125
+ return /* @__PURE__ */ jsx(
3126
+ ResizablePrimitive.PanelResizeHandle,
3127
+ {
3128
+ "data-slot": "resizable-handle",
3129
+ className: cn(
3130
+ "bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90",
3131
+ className
3132
+ ),
3133
+ ...props,
3134
+ children: withHandle && /* @__PURE__ */ jsx("div", { className: "bg-border z-10 flex h-4 w-3 items-center justify-center rounded-sm border", children: /* @__PURE__ */ jsx(GripVertical, { className: "size-2.5" }) })
3135
+ }
3136
+ );
3137
+ }
3138
+ function ScrollArea({
3139
+ className,
3140
+ children,
3141
+ ...props
3142
+ }) {
3143
+ return /* @__PURE__ */ jsxs(
3144
+ ScrollAreaPrimitive.Root,
3145
+ {
3146
+ "data-slot": "scroll-area",
3147
+ className: cn("relative", className),
3148
+ ...props,
3149
+ children: [
3150
+ /* @__PURE__ */ jsx(
3151
+ ScrollAreaPrimitive.Viewport,
3152
+ {
3153
+ "data-slot": "scroll-area-viewport",
3154
+ className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
3155
+ children
3156
+ }
3157
+ ),
3158
+ /* @__PURE__ */ jsx(ScrollBar, {}),
3159
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
3160
+ ]
3161
+ }
3162
+ );
3163
+ }
3164
+ function ScrollBar({
3165
+ className,
3166
+ orientation = "vertical",
3167
+ ...props
3168
+ }) {
3169
+ return /* @__PURE__ */ jsx(
3170
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
3171
+ {
3172
+ "data-slot": "scroll-area-scrollbar",
3173
+ orientation,
3174
+ className: cn(
3175
+ "flex touch-none p-px transition-colors select-none",
3176
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
3177
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
3178
+ className
3179
+ ),
3180
+ ...props,
3181
+ children: /* @__PURE__ */ jsx(
3182
+ ScrollAreaPrimitive.ScrollAreaThumb,
3183
+ {
3184
+ "data-slot": "scroll-area-thumb",
3185
+ className: "bg-border relative flex-1 rounded-full"
3186
+ }
3187
+ )
3188
+ }
3189
+ );
3190
+ }
3191
+ function ItemGroup({ className, ...props }) {
3192
+ return /* @__PURE__ */ jsx(
3193
+ "div",
3194
+ {
3195
+ role: "list",
3196
+ "data-slot": "item-group",
3197
+ className: cn("group/item-group flex flex-col", className),
3198
+ ...props
3199
+ }
3200
+ );
3201
+ }
3202
+ function ItemSeparator({
3203
+ className,
3204
+ ...props
3205
+ }) {
3206
+ return /* @__PURE__ */ jsx(
3207
+ Separator,
3208
+ {
3209
+ "data-slot": "item-separator",
3210
+ orientation: "horizontal",
3211
+ className: cn("my-0", className),
3212
+ ...props
3213
+ }
3214
+ );
3215
+ }
3216
+ var itemVariants = cva(
3217
+ "group/item flex items-center border border-transparent text-sm rounded-md transition-colors [a]:hover:bg-accent/50 [a]:transition-colors duration-100 flex-wrap outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
3218
+ {
3219
+ variants: {
3220
+ variant: {
3221
+ default: "bg-transparent",
3222
+ outline: "border-border",
3223
+ muted: "bg-muted/50"
3224
+ },
3225
+ size: {
3226
+ default: "p-4 gap-4 ",
3227
+ sm: "py-3 px-4 gap-2.5"
3228
+ }
3229
+ },
3230
+ defaultVariants: {
3231
+ variant: "default",
3232
+ size: "default"
3233
+ }
3234
+ }
3235
+ );
3236
+ function Item6({
3237
+ className,
3238
+ variant = "default",
3239
+ size = "default",
3240
+ asChild = false,
3241
+ ...props
3242
+ }) {
3243
+ const Comp = asChild ? Slot : "div";
3244
+ return /* @__PURE__ */ jsx(
3245
+ Comp,
3246
+ {
3247
+ "data-slot": "item",
3248
+ "data-variant": variant,
3249
+ "data-size": size,
3250
+ className: cn(itemVariants({ variant, size, className })),
3251
+ ...props
3252
+ }
3253
+ );
3254
+ }
3255
+ var itemMediaVariants = cva(
3256
+ "flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none group-has-[[data-slot=item-description]]/item:translate-y-0.5",
3257
+ {
3258
+ variants: {
3259
+ variant: {
3260
+ default: "bg-transparent",
3261
+ icon: "size-8 border rounded-sm bg-muted [&_svg:not([class*='size-'])]:size-4",
3262
+ image: "size-10 rounded-sm overflow-hidden [&_img]:size-full [&_img]:object-cover"
3263
+ }
3264
+ },
3265
+ defaultVariants: {
3266
+ variant: "default"
3267
+ }
3268
+ }
3269
+ );
3270
+ function ItemMedia({
3271
+ className,
3272
+ variant = "default",
3273
+ ...props
3274
+ }) {
3275
+ return /* @__PURE__ */ jsx(
3276
+ "div",
3277
+ {
3278
+ "data-slot": "item-media",
3279
+ "data-variant": variant,
3280
+ className: cn(itemMediaVariants({ variant, className })),
3281
+ ...props
3282
+ }
3283
+ );
3284
+ }
3285
+ function ItemContent({ className, ...props }) {
3286
+ return /* @__PURE__ */ jsx(
3287
+ "div",
3288
+ {
3289
+ "data-slot": "item-content",
3290
+ className: cn(
3291
+ "flex flex-1 flex-col gap-1 [&+[data-slot=item-content]]:flex-none",
3292
+ className
3293
+ ),
3294
+ ...props
3295
+ }
3296
+ );
3297
+ }
3298
+ function ItemTitle({ className, ...props }) {
3299
+ return /* @__PURE__ */ jsx(
3300
+ "div",
3301
+ {
3302
+ "data-slot": "item-title",
3303
+ className: cn(
3304
+ "flex w-fit items-center gap-2 text-sm leading-snug font-medium",
3305
+ className
3306
+ ),
3307
+ ...props
3308
+ }
3309
+ );
3310
+ }
3311
+ function ItemDescription({ className, ...props }) {
3312
+ return /* @__PURE__ */ jsx(
3313
+ "p",
3314
+ {
3315
+ "data-slot": "item-description",
3316
+ className: cn(
3317
+ "text-muted-foreground line-clamp-2 text-sm leading-normal font-normal text-balance",
3318
+ "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
3319
+ className
3320
+ ),
3321
+ ...props
3322
+ }
3323
+ );
3324
+ }
3325
+ function ItemActions({ className, ...props }) {
3326
+ return /* @__PURE__ */ jsx(
3327
+ "div",
3328
+ {
3329
+ "data-slot": "item-actions",
3330
+ className: cn("flex items-center gap-2", className),
3331
+ ...props
3332
+ }
3333
+ );
3334
+ }
3335
+ function ItemHeader({ className, ...props }) {
3336
+ return /* @__PURE__ */ jsx(
3337
+ "div",
3338
+ {
3339
+ "data-slot": "item-header",
3340
+ className: cn(
3341
+ "flex basis-full items-center justify-between gap-2",
3342
+ className
3343
+ ),
3344
+ ...props
3345
+ }
3346
+ );
3347
+ }
3348
+ function ItemFooter({ className, ...props }) {
3349
+ return /* @__PURE__ */ jsx(
3350
+ "div",
3351
+ {
3352
+ "data-slot": "item-footer",
3353
+ className: cn(
3354
+ "flex basis-full items-center justify-between gap-2",
3355
+ className
3356
+ ),
3357
+ ...props
3358
+ }
3359
+ );
3360
+ }
3361
+ var Accordion = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
3362
+ AccordionPrimitive.Root,
3363
+ {
3364
+ ref,
3365
+ "data-slot": "accordion",
3366
+ ...props
3367
+ }
3368
+ ));
3369
+ Accordion.displayName = "Accordion";
3370
+ var AccordionItem = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3371
+ AccordionPrimitive.Item,
3372
+ {
3373
+ ref,
3374
+ "data-slot": "accordion-item",
3375
+ className: cn("border-b last:border-b-0", className),
3376
+ ...props
3377
+ }
3378
+ ));
3379
+ AccordionItem.displayName = "AccordionItem";
3380
+ var AccordionTrigger = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
3381
+ AccordionPrimitive.Trigger,
3382
+ {
3383
+ ref,
3384
+ "data-slot": "accordion-trigger",
3385
+ className: cn(
3386
+ "flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] focus-visible:border-ring focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
3387
+ className
3388
+ ),
3389
+ ...props,
3390
+ children: [
3391
+ children,
3392
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200" })
3393
+ ]
3394
+ }
3395
+ ) }));
3396
+ AccordionTrigger.displayName = "AccordionTrigger";
3397
+ var AccordionContent = React24.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
3398
+ AccordionPrimitive.Content,
3399
+ {
3400
+ ref,
3401
+ "data-slot": "accordion-content",
3402
+ className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
3403
+ ...props,
3404
+ children: /* @__PURE__ */ jsx("div", { className: cn("pt-0 pb-4", className), children })
3405
+ }
3406
+ ));
3407
+ AccordionContent.displayName = "AccordionContent";
3408
+ var CarouselContext = React24.createContext(null);
3409
+ function useCarousel() {
3410
+ const context = React24.useContext(CarouselContext);
3411
+ if (!context) {
3412
+ throw new Error("useCarousel must be used within a <Carousel />");
3413
+ }
3414
+ return context;
3415
+ }
3416
+ var Carousel = React24.forwardRef(
3417
+ ({
3418
+ orientation = "horizontal",
3419
+ opts,
3420
+ setApi,
3421
+ plugins,
3422
+ className,
3423
+ children,
3424
+ ...props
3425
+ }, ref) => {
3426
+ const [carouselRef, api] = useEmblaCarousel(
3427
+ {
3428
+ ...opts,
3429
+ axis: orientation === "horizontal" ? "x" : "y"
3430
+ },
3431
+ plugins
3432
+ );
3433
+ const [canScrollPrev, setCanScrollPrev] = React24.useState(false);
3434
+ const [canScrollNext, setCanScrollNext] = React24.useState(false);
3435
+ const onSelect = React24.useCallback((api2) => {
3436
+ if (!api2) return;
3437
+ setCanScrollPrev(api2.canScrollPrev());
3438
+ setCanScrollNext(api2.canScrollNext());
3439
+ }, []);
3440
+ const scrollPrev = React24.useCallback(() => {
3441
+ api?.scrollPrev();
3442
+ }, [api]);
3443
+ const scrollNext = React24.useCallback(() => {
3444
+ api?.scrollNext();
3445
+ }, [api]);
3446
+ const handleKeyDown = React24.useCallback(
3447
+ (event) => {
3448
+ if (event.key === "ArrowLeft") {
3449
+ event.preventDefault();
3450
+ scrollPrev();
3451
+ } else if (event.key === "ArrowRight") {
3452
+ event.preventDefault();
3453
+ scrollNext();
3454
+ }
3455
+ },
3456
+ [scrollPrev, scrollNext]
3457
+ );
3458
+ React24.useEffect(() => {
3459
+ if (!api || !setApi) return;
3460
+ setApi(api);
3461
+ }, [api, setApi]);
3462
+ React24.useEffect(() => {
3463
+ if (!api) return;
3464
+ onSelect(api);
3465
+ api.on("reInit", onSelect);
3466
+ api.on("select", onSelect);
3467
+ return () => {
3468
+ api?.off("select", onSelect);
3469
+ };
3470
+ }, [api, onSelect]);
3471
+ return /* @__PURE__ */ jsx(
3472
+ CarouselContext.Provider,
3473
+ {
3474
+ value: {
3475
+ carouselRef,
3476
+ api,
3477
+ opts,
3478
+ orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
3479
+ scrollPrev,
3480
+ scrollNext,
3481
+ canScrollPrev,
3482
+ canScrollNext
3483
+ },
3484
+ children: /* @__PURE__ */ jsx(
3485
+ "div",
3486
+ {
3487
+ ref,
3488
+ onKeyDownCapture: handleKeyDown,
3489
+ className: cn("relative", className),
3490
+ role: "region",
3491
+ "aria-roledescription": "carousel",
3492
+ "data-slot": "carousel",
3493
+ ...props,
3494
+ children
3495
+ }
3496
+ )
3497
+ }
3498
+ );
3499
+ }
3500
+ );
3501
+ Carousel.displayName = "Carousel";
3502
+ var CarouselContent = React24.forwardRef(({ className, ...props }, ref) => {
3503
+ const { carouselRef, orientation } = useCarousel();
3504
+ return /* @__PURE__ */ jsx(
3505
+ "div",
3506
+ {
3507
+ ref: carouselRef,
3508
+ className: "overflow-hidden",
3509
+ "data-slot": "carousel-content",
3510
+ children: /* @__PURE__ */ jsx(
3511
+ "div",
3512
+ {
3513
+ ref,
3514
+ className: cn(
3515
+ "flex",
3516
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
3517
+ className
3518
+ ),
3519
+ ...props
3520
+ }
3521
+ )
3522
+ }
3523
+ );
3524
+ });
3525
+ CarouselContent.displayName = "CarouselContent";
3526
+ var CarouselItem = React24.forwardRef(({ className, ...props }, ref) => {
3527
+ const { orientation } = useCarousel();
3528
+ return /* @__PURE__ */ jsx(
3529
+ "div",
3530
+ {
3531
+ ref,
3532
+ role: "group",
3533
+ "aria-roledescription": "slide",
3534
+ "data-slot": "carousel-item",
3535
+ className: cn(
3536
+ "min-w-0 shrink-0 grow-0 basis-full",
3537
+ orientation === "horizontal" ? "pl-4" : "pt-4",
3538
+ className
3539
+ ),
3540
+ ...props
3541
+ }
3542
+ );
3543
+ });
3544
+ CarouselItem.displayName = "CarouselItem";
3545
+ var CarouselPrevious = React24.forwardRef(({ className, variant = ButtonVariant.Outline, size = ButtonSize.Icon, ...props }, ref) => {
3546
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
3547
+ return /* @__PURE__ */ jsxs(
3548
+ Button,
3549
+ {
3550
+ ref,
3551
+ "data-slot": "carousel-previous",
3552
+ variant,
3553
+ size,
3554
+ className: cn(
3555
+ "absolute h-8 w-8 rounded-full",
3556
+ orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
3557
+ className
3558
+ ),
3559
+ disabled: !canScrollPrev,
3560
+ onClick: scrollPrev,
3561
+ ...props,
3562
+ children: [
3563
+ /* @__PURE__ */ jsx(ArrowLeft, { className: "h-4 w-4" }),
3564
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
3565
+ ]
3566
+ }
3567
+ );
3568
+ });
3569
+ CarouselPrevious.displayName = "CarouselPrevious";
3570
+ var CarouselNext = React24.forwardRef(({ className, variant = ButtonVariant.Outline, size = ButtonSize.Icon, ...props }, ref) => {
3571
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
3572
+ return /* @__PURE__ */ jsxs(
3573
+ Button,
3574
+ {
3575
+ ref,
3576
+ "data-slot": "carousel-next",
3577
+ variant,
3578
+ size,
3579
+ className: cn(
3580
+ "absolute h-8 w-8 rounded-full",
3581
+ orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
3582
+ className
3583
+ ),
3584
+ disabled: !canScrollNext,
3585
+ onClick: scrollNext,
3586
+ ...props,
3587
+ children: [
3588
+ /* @__PURE__ */ jsx(ArrowRight, { className: "h-4 w-4" }),
3589
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
3590
+ ]
3591
+ }
3592
+ );
3593
+ });
3594
+ CarouselNext.displayName = "CarouselNext";
3595
+ var Collapsible = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
3596
+ CollapsiblePrimitive.Root,
3597
+ {
3598
+ ref,
3599
+ "data-slot": "collapsible",
3600
+ ...props
3601
+ }
3602
+ ));
3603
+ Collapsible.displayName = "Collapsible";
3604
+ var CollapsibleTrigger2 = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
3605
+ CollapsiblePrimitive.CollapsibleTrigger,
3606
+ {
3607
+ ref,
3608
+ "data-slot": "collapsible-trigger",
3609
+ ...props
3610
+ }
3611
+ ));
3612
+ CollapsibleTrigger2.displayName = "CollapsibleTrigger";
3613
+ var CollapsibleContent2 = React24.forwardRef(({ ...props }, ref) => /* @__PURE__ */ jsx(
3614
+ CollapsiblePrimitive.CollapsibleContent,
3615
+ {
3616
+ ref,
3617
+ "data-slot": "collapsible-content",
3618
+ ...props
3619
+ }
3620
+ ));
3621
+ CollapsibleContent2.displayName = "CollapsibleContent";
3622
+ function ChartContainer({
3623
+ className,
3624
+ children,
3625
+ width = "100%",
3626
+ height = 350
3627
+ }) {
3628
+ return /* @__PURE__ */ jsx(
3629
+ "div",
3630
+ {
3631
+ "data-slot": "chart-container",
3632
+ className: cn("w-full", className),
3633
+ style: { width, height: typeof height === "number" ? `${height}px` : height },
3634
+ children
3635
+ }
3636
+ );
3637
+ }
3638
+ function ChartTooltipContent({
3639
+ className,
3640
+ label,
3641
+ payload,
3642
+ active
3643
+ }) {
3644
+ if (!active || !payload || payload.length === 0) {
3645
+ return null;
3646
+ }
3647
+ return /* @__PURE__ */ jsxs(
3648
+ "div",
3649
+ {
3650
+ "data-slot": "chart-tooltip-content",
3651
+ className: cn(
3652
+ "bg-background border-border text-foreground rounded-lg border p-2 shadow-md",
3653
+ className
3654
+ ),
3655
+ children: [
3656
+ label && /* @__PURE__ */ jsx("div", { className: "mb-1 text-xs font-medium text-muted-foreground", children: label }),
3657
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1", children: payload.map((item, index) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-xs", children: [
3658
+ /* @__PURE__ */ jsx(
3659
+ "div",
3660
+ {
3661
+ className: "h-2 w-2 rounded-full",
3662
+ style: { backgroundColor: item.color }
3663
+ }
3664
+ ),
3665
+ /* @__PURE__ */ jsxs("span", { className: "font-medium", children: [
3666
+ item.name,
3667
+ ":"
3668
+ ] }),
3669
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: item.value })
3670
+ ] }, index)) })
3671
+ ]
3672
+ }
3673
+ );
3674
+ }
3675
+ function ChartLegendContent({
3676
+ className,
3677
+ payload
3678
+ }) {
3679
+ if (!payload || payload.length === 0) {
3680
+ return null;
3681
+ }
3682
+ return /* @__PURE__ */ jsx(
3683
+ "div",
3684
+ {
3685
+ "data-slot": "chart-legend-content",
3686
+ className: cn("flex items-center justify-center gap-4 text-sm pt-4", className),
3687
+ children: payload.map((item, index) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3688
+ /* @__PURE__ */ jsx(
3689
+ "div",
3690
+ {
3691
+ className: "h-3 w-3 rounded-sm",
3692
+ style: { backgroundColor: item.color }
3693
+ }
3694
+ ),
3695
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: item.value })
3696
+ ] }, index))
3697
+ }
3698
+ );
3699
+ }
3700
+ function ContextMenu({
3701
+ ...props
3702
+ }) {
3703
+ return /* @__PURE__ */ jsx(ContextMenuPrimitive.Root, { "data-slot": "context-menu", ...props });
3704
+ }
3705
+ function ContextMenuTrigger({
3706
+ ...props
3707
+ }) {
3708
+ return /* @__PURE__ */ jsx(ContextMenuPrimitive.Trigger, { "data-slot": "context-menu-trigger", ...props });
3709
+ }
3710
+ function ContextMenuGroup({
3711
+ ...props
3712
+ }) {
3713
+ return /* @__PURE__ */ jsx(ContextMenuPrimitive.Group, { "data-slot": "context-menu-group", ...props });
3714
+ }
3715
+ function ContextMenuPortal({
3716
+ ...props
3717
+ }) {
3718
+ return /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { "data-slot": "context-menu-portal", ...props });
3719
+ }
3720
+ function ContextMenuSub({
3721
+ ...props
3722
+ }) {
3723
+ return /* @__PURE__ */ jsx(ContextMenuPrimitive.Sub, { "data-slot": "context-menu-sub", ...props });
3724
+ }
3725
+ function ContextMenuRadioGroup({
3726
+ ...props
3727
+ }) {
3728
+ return /* @__PURE__ */ jsx(
3729
+ ContextMenuPrimitive.RadioGroup,
3730
+ {
3731
+ "data-slot": "context-menu-radio-group",
3732
+ ...props
3733
+ }
3734
+ );
3735
+ }
3736
+ function ContextMenuSubTrigger({
3737
+ className,
3738
+ inset,
3739
+ children,
3740
+ ...props
3741
+ }) {
3742
+ return /* @__PURE__ */ jsxs(
3743
+ ContextMenuPrimitive.SubTrigger,
3744
+ {
3745
+ "data-slot": "context-menu-sub-trigger",
3746
+ "data-inset": inset,
3747
+ className: cn(
3748
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3749
+ className
3750
+ ),
3751
+ ...props,
3752
+ children: [
3753
+ children,
3754
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })
3755
+ ]
3756
+ }
3757
+ );
3758
+ }
3759
+ function ContextMenuSubContent({
3760
+ className,
3761
+ ...props
3762
+ }) {
3763
+ return /* @__PURE__ */ jsx(
3764
+ ContextMenuPrimitive.SubContent,
3765
+ {
3766
+ "data-slot": "context-menu-sub-content",
3767
+ className: cn(
3768
+ "bg-popover text-popover-foreground 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 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 min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-hidden rounded-md border p-1 shadow-lg",
3769
+ className
3770
+ ),
3771
+ ...props
3772
+ }
3773
+ );
3774
+ }
3775
+ function ContextMenuContent({
3776
+ className,
3777
+ ...props
3778
+ }) {
3779
+ return /* @__PURE__ */ jsx(ContextMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
3780
+ ContextMenuPrimitive.Content,
3781
+ {
3782
+ "data-slot": "context-menu-content",
3783
+ className: cn(
3784
+ "bg-popover text-popover-foreground 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 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-h-[var(--radix-context-menu-content-available-height)] min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",
3785
+ className
3786
+ ),
3787
+ ...props
3788
+ }
3789
+ ) });
3790
+ }
3791
+ function ContextMenuItem({
3792
+ className,
3793
+ inset,
3794
+ variant = "default",
3795
+ ...props
3796
+ }) {
3797
+ return /* @__PURE__ */ jsx(
3798
+ ContextMenuPrimitive.Item,
3799
+ {
3800
+ "data-slot": "context-menu-item",
3801
+ "data-inset": inset,
3802
+ "data-variant": variant,
3803
+ className: cn(
3804
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3805
+ className
3806
+ ),
3807
+ ...props
3808
+ }
3809
+ );
3810
+ }
3811
+ function ContextMenuCheckboxItem({
3812
+ className,
3813
+ children,
3814
+ checked,
3815
+ ...props
3816
+ }) {
3817
+ return /* @__PURE__ */ jsxs(
3818
+ ContextMenuPrimitive.CheckboxItem,
3819
+ {
3820
+ "data-slot": "context-menu-checkbox-item",
3821
+ className: cn(
3822
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3823
+ className
3824
+ ),
3825
+ checked,
3826
+ ...props,
3827
+ children: [
3828
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
3829
+ children
3830
+ ]
3831
+ }
3832
+ );
3833
+ }
3834
+ function ContextMenuRadioItem({
3835
+ className,
3836
+ children,
3837
+ ...props
3838
+ }) {
3839
+ return /* @__PURE__ */ jsxs(
3840
+ ContextMenuPrimitive.RadioItem,
3841
+ {
3842
+ "data-slot": "context-menu-radio-item",
3843
+ className: cn(
3844
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3845
+ className
3846
+ ),
3847
+ ...props,
3848
+ children: [
3849
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(ContextMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
3850
+ children
3851
+ ]
3852
+ }
3853
+ );
3854
+ }
3855
+ function ContextMenuLabel({
3856
+ className,
3857
+ inset,
3858
+ ...props
3859
+ }) {
3860
+ return /* @__PURE__ */ jsx(
3861
+ ContextMenuPrimitive.Label,
3862
+ {
3863
+ "data-slot": "context-menu-label",
3864
+ "data-inset": inset,
3865
+ className: cn(
3866
+ "text-foreground px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
3867
+ className
3868
+ ),
3869
+ ...props
3870
+ }
3871
+ );
3872
+ }
3873
+ function ContextMenuSeparator({
3874
+ className,
3875
+ ...props
3876
+ }) {
3877
+ return /* @__PURE__ */ jsx(
3878
+ ContextMenuPrimitive.Separator,
3879
+ {
3880
+ "data-slot": "context-menu-separator",
3881
+ className: cn("bg-border -mx-1 my-1 h-px", className),
3882
+ ...props
3883
+ }
3884
+ );
3885
+ }
3886
+ function ContextMenuShortcut({
3887
+ className,
3888
+ ...props
3889
+ }) {
3890
+ return /* @__PURE__ */ jsx(
3891
+ "span",
3892
+ {
3893
+ "data-slot": "context-menu-shortcut",
3894
+ className: cn(
3895
+ "text-muted-foreground ml-auto text-xs tracking-widest",
3896
+ className
3897
+ ),
3898
+ ...props
3899
+ }
3900
+ );
3901
+ }
3902
+ var IconButton = React24__default.forwardRef(
3903
+ ({ variant = ButtonVariant.Ghost, size = IconButtonSize.Default, className, ...props }, ref) => {
3904
+ const sizeStyles = {
3905
+ [IconButtonSize.Small]: "h-8 w-8",
3906
+ [IconButtonSize.Default]: "h-9 w-9",
3907
+ [IconButtonSize.Large]: "h-11 w-11"
3908
+ };
3909
+ return /* @__PURE__ */ jsx(
3910
+ Button,
3911
+ {
3912
+ ref,
3913
+ variant,
3914
+ size: ButtonSize.Icon,
3915
+ className: cn(sizeStyles[size], className),
3916
+ ...props
3917
+ }
3918
+ );
3919
+ }
3920
+ );
3921
+ IconButton.displayName = "IconButton";
3922
+ var DropdownButton = React24__default.forwardRef(({ children, variant = ButtonVariant.Outline, className, ...props }, ref) => {
3923
+ return /* @__PURE__ */ jsxs(
3924
+ Button,
3925
+ {
3926
+ ref,
3927
+ variant,
3928
+ className: cn("min-w-40 justify-between rtl:flex-row-reverse", className),
3929
+ ...props,
3930
+ children: [
3931
+ /* @__PURE__ */ jsx("span", { children }),
3932
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-4 w-4" })
3933
+ ]
3934
+ }
3935
+ );
3936
+ });
3937
+ DropdownButton.displayName = "DropdownButton";
3938
+ function InputGroup({ className, ...props }) {
3939
+ return /* @__PURE__ */ jsx(
3940
+ "div",
3941
+ {
3942
+ "data-slot": "input-group",
3943
+ role: "group",
3944
+ className: cn(
3945
+ "group/input-group border-input dark:bg-input/30 relative flex w-full items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none",
3946
+ "h-9 min-w-0 has-[>textarea]:h-auto",
3947
+ // Variants based on alignment.
3948
+ "has-[>[data-align=inline-start]]:[&>input]:pl-2",
3949
+ "has-[>[data-align=inline-end]]:[&>input]:pr-2",
3950
+ "has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-start]]:[&>input]:pb-3",
3951
+ "has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3",
3952
+ // Focus state.
3953
+ "has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot=input-group-control]:focus-visible]:ring-[3px]",
3954
+ // Error state.
3955
+ "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",
3956
+ className
3957
+ ),
3958
+ ...props
3959
+ }
3960
+ );
3961
+ }
3962
+ var inputGroupAddonVariants = cva(
3963
+ "text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none [&>svg:not([class*='size-'])]:size-4 [&>kbd]:rounded-[calc(var(--radius)-5px)] group-data-[disabled=true]/input-group:opacity-50",
3964
+ {
3965
+ variants: {
3966
+ align: {
3967
+ "inline-start": "order-first pl-3 has-[>button]:ml-[-0.45rem] has-[>kbd]:ml-[-0.35rem]",
3968
+ "inline-end": "order-last pr-3 has-[>button]:mr-[-0.45rem] has-[>kbd]:mr-[-0.35rem]",
3969
+ "block-start": "order-first w-full justify-start px-3 pt-3 [.border-b]:pb-3 group-has-[>input]/input-group:pt-2.5",
3970
+ "block-end": "order-last w-full justify-start px-3 pb-3 [.border-t]:pt-3 group-has-[>input]/input-group:pb-2.5"
3971
+ }
3972
+ },
3973
+ defaultVariants: {
3974
+ align: "inline-start"
3975
+ }
3976
+ }
3977
+ );
3978
+ function InputGroupAddon({
3979
+ className,
3980
+ align = "inline-start",
3981
+ ...props
3982
+ }) {
3983
+ return /* @__PURE__ */ jsx(
3984
+ "div",
3985
+ {
3986
+ role: "group",
3987
+ "data-slot": "input-group-addon",
3988
+ "data-align": align,
3989
+ className: cn(inputGroupAddonVariants({ align }), className),
3990
+ onClick: (e) => {
3991
+ if (e.target.closest("button")) {
3992
+ return;
3993
+ }
3994
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
3995
+ },
3996
+ ...props
3997
+ }
3998
+ );
3999
+ }
4000
+ var inputGroupButtonVariants = cva(
4001
+ "text-sm shadow-none flex gap-2 items-center",
4002
+ {
4003
+ variants: {
4004
+ size: {
4005
+ xs: "h-6 gap-1 px-2 rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-3.5 has-[>svg]:px-2",
4006
+ sm: "h-8 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2.5",
4007
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
4008
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
4009
+ }
4010
+ },
4011
+ defaultVariants: {
4012
+ size: "xs"
4013
+ }
4014
+ }
4015
+ );
4016
+ function InputGroupButton({
4017
+ className,
4018
+ type = "button",
4019
+ variant = ButtonVariant.Ghost,
4020
+ size = "xs",
4021
+ ...props
4022
+ }) {
4023
+ return /* @__PURE__ */ jsx(
4024
+ Button,
4025
+ {
4026
+ type,
4027
+ "data-size": size,
4028
+ variant,
4029
+ className: cn(inputGroupButtonVariants({ size }), className),
4030
+ ...props
4031
+ }
4032
+ );
4033
+ }
4034
+ function InputGroupText({ className, ...props }) {
4035
+ return /* @__PURE__ */ jsx(
4036
+ "span",
4037
+ {
4038
+ className: cn(
4039
+ "text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
4040
+ className
4041
+ ),
4042
+ ...props
4043
+ }
4044
+ );
4045
+ }
4046
+ function InputGroupInput({
4047
+ className,
4048
+ ...props
4049
+ }) {
4050
+ return /* @__PURE__ */ jsx(
4051
+ Input,
4052
+ {
4053
+ "data-slot": "input-group-control",
4054
+ className: cn(
4055
+ "flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:ring-0 dark:bg-transparent",
4056
+ className
4057
+ ),
4058
+ ...props
4059
+ }
4060
+ );
4061
+ }
4062
+ function InputGroupTextarea({
4063
+ className,
4064
+ ...props
4065
+ }) {
4066
+ return /* @__PURE__ */ jsx(
4067
+ Textarea,
4068
+ {
4069
+ "data-slot": "input-group-control",
4070
+ className: cn(
4071
+ "flex-1 resize-none rounded-none border-0 bg-transparent py-3 shadow-none focus-visible:ring-0 dark:bg-transparent",
4072
+ className
4073
+ ),
4074
+ ...props
4075
+ }
4076
+ );
4077
+ }
4078
+ var CalendarIcon = ({
4079
+ className = "",
4080
+ ...props
4081
+ }) => {
4082
+ return /* @__PURE__ */ jsxs(
4083
+ "svg",
4084
+ {
4085
+ className,
4086
+ width: "16",
4087
+ height: "16",
4088
+ viewBox: "0 0 24 24",
4089
+ fill: "none",
4090
+ stroke: "currentColor",
4091
+ strokeWidth: "2",
4092
+ strokeLinecap: "round",
4093
+ strokeLinejoin: "round",
4094
+ ...props,
4095
+ children: [
4096
+ /* @__PURE__ */ jsx("path", { d: "M8 2v4" }),
4097
+ /* @__PURE__ */ jsx("path", { d: "M16 2v4" }),
4098
+ /* @__PURE__ */ jsx("rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }),
4099
+ /* @__PURE__ */ jsx("path", { d: "M3 10h18" })
4100
+ ]
4101
+ }
4102
+ );
4103
+ };
4104
+ var DatePickerContext = React24.createContext(null);
4105
+ function useDatePickerContext() {
4106
+ const context = React24.useContext(DatePickerContext);
4107
+ if (!context) {
4108
+ throw new Error("DatePicker components must be used within a DatePicker");
4109
+ }
4110
+ return context;
4111
+ }
4112
+ function defaultFormatDate(date) {
4113
+ return format(date, "PPP");
4114
+ }
4115
+ function DatePicker({
4116
+ children,
4117
+ date: controlledDate,
4118
+ onDateChange,
4119
+ defaultDate,
4120
+ open: controlledOpen,
4121
+ onOpenChange,
4122
+ defaultOpen = false,
4123
+ formatDate: formatDateProp = defaultFormatDate
4124
+ }) {
4125
+ const [uncontrolledDate, setUncontrolledDate] = React24.useState(defaultDate);
4126
+ const [uncontrolledOpen, setUncontrolledOpen] = React24.useState(defaultOpen);
4127
+ const isDateControlled = controlledDate !== void 0;
4128
+ const isOpenControlled = controlledOpen !== void 0;
4129
+ const date = isDateControlled ? controlledDate : uncontrolledDate;
4130
+ const open = isOpenControlled ? controlledOpen : uncontrolledOpen;
4131
+ const setDate = React24.useCallback((newDate) => {
4132
+ if (!isDateControlled) {
4133
+ setUncontrolledDate(newDate);
4134
+ }
4135
+ onDateChange?.(newDate);
4136
+ }, [isDateControlled, onDateChange]);
4137
+ const setOpen = React24.useCallback((newOpen) => {
4138
+ if (!isOpenControlled) {
4139
+ setUncontrolledOpen(newOpen);
4140
+ }
4141
+ onOpenChange?.(newOpen);
4142
+ }, [isOpenControlled, onOpenChange]);
4143
+ const contextValue = React24.useMemo(() => ({
4144
+ date,
4145
+ setDate,
4146
+ open,
4147
+ setOpen,
4148
+ formatDate: formatDateProp
4149
+ }), [date, setDate, open, setOpen, formatDateProp]);
4150
+ return /* @__PURE__ */ jsx(DatePickerContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(Popover, { open, onOpenChange: setOpen, children }) });
4151
+ }
4152
+ function DatePickerTrigger({
4153
+ className,
4154
+ placeholder = "Pick a date",
4155
+ icon = "calendar",
4156
+ children,
4157
+ ...props
4158
+ }) {
4159
+ const { date, formatDate } = useDatePickerContext();
4160
+ return /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
4161
+ Button,
4162
+ {
4163
+ variant: ButtonVariant.Outline,
4164
+ "data-slot": "date-picker-trigger",
4165
+ "data-empty": !date,
4166
+ className: cn(
4167
+ "w-[280px] justify-start text-left font-normal data-[empty=true]:text-muted-foreground",
4168
+ className
4169
+ ),
4170
+ ...props,
4171
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
4172
+ icon === "calendar" && /* @__PURE__ */ jsx(CalendarIcon, { className: "mr-2 size-4" }),
4173
+ date ? formatDate(date) : /* @__PURE__ */ jsx("span", { children: placeholder }),
4174
+ icon === "chevron" && /* @__PURE__ */ jsx(ChevronDownIcon, { className: "ml-auto size-4" })
4175
+ ] })
4176
+ }
4177
+ ) });
4178
+ }
4179
+ function DatePickerContent({
4180
+ className,
4181
+ calendarProps,
4182
+ children,
4183
+ align = "start",
4184
+ ...props
4185
+ }) {
4186
+ const { date, setDate, setOpen } = useDatePickerContext();
4187
+ return /* @__PURE__ */ jsx(
4188
+ PopoverContent,
4189
+ {
4190
+ "data-slot": "date-picker-content",
4191
+ className: cn("w-auto overflow-hidden p-0", className),
4192
+ align,
4193
+ ...props,
4194
+ children: children ?? /* @__PURE__ */ jsx(
4195
+ Calendar,
4196
+ {
4197
+ mode: "single",
4198
+ selected: date,
4199
+ onSelect: (newDate) => {
4200
+ setDate(newDate);
4201
+ setOpen(false);
4202
+ },
4203
+ ...calendarProps
4204
+ }
4205
+ )
4206
+ }
4207
+ );
4208
+ }
4209
+ function DatePickerInput({
4210
+ className,
4211
+ inputProps,
4212
+ placeholder = "Select date",
4213
+ id
4214
+ }) {
4215
+ const { date, setDate, setOpen, formatDate } = useDatePickerContext();
4216
+ const [inputValue, setInputValue] = React24.useState(date ? formatDate(date) : "");
4217
+ const [month, setMonth] = React24.useState(date);
4218
+ React24.useEffect(() => {
4219
+ setInputValue(date ? formatDate(date) : "");
4220
+ }, [date, formatDate]);
4221
+ const handleInputChange = (e) => {
4222
+ const value = e.target.value;
4223
+ setInputValue(value);
4224
+ const parsed = new Date(value);
4225
+ if (!isNaN(parsed.getTime())) {
4226
+ setDate(parsed);
4227
+ setMonth(parsed);
4228
+ }
4229
+ };
4230
+ const handleKeyDown = (e) => {
4231
+ if (e.key === "ArrowDown") {
4232
+ e.preventDefault();
4233
+ setOpen(true);
4234
+ }
4235
+ };
4236
+ const handleCalendarSelect = (newDate) => {
4237
+ setDate(newDate);
4238
+ setInputValue(newDate ? formatDate(newDate) : "");
4239
+ setOpen(false);
4240
+ };
4241
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative flex gap-2", className), "data-slot": "date-picker-input", children: [
4242
+ /* @__PURE__ */ jsx(
4243
+ Input,
4244
+ {
4245
+ id,
4246
+ value: inputValue,
4247
+ placeholder,
4248
+ className: "bg-background pr-10",
4249
+ onChange: handleInputChange,
4250
+ onKeyDown: handleKeyDown,
4251
+ ...inputProps
4252
+ }
4253
+ ),
4254
+ /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
4255
+ Button,
4256
+ {
4257
+ variant: ButtonVariant.Ghost,
4258
+ className: "absolute top-1/2 right-2 size-6 -translate-y-1/2 p-0",
4259
+ "aria-label": "Select date",
4260
+ children: /* @__PURE__ */ jsx(CalendarIcon, { className: "size-3.5" })
4261
+ }
4262
+ ) }),
4263
+ /* @__PURE__ */ jsx(
4264
+ PopoverContent,
4265
+ {
4266
+ className: "w-auto overflow-hidden p-0",
4267
+ align: "end",
4268
+ alignOffset: -8,
4269
+ sideOffset: 10,
4270
+ children: /* @__PURE__ */ jsx(
4271
+ Calendar,
4272
+ {
4273
+ mode: "single",
4274
+ selected: date,
4275
+ captionLayout: "dropdown",
4276
+ month,
4277
+ onMonthChange: setMonth,
4278
+ onSelect: handleCalendarSelect
4279
+ }
4280
+ )
4281
+ }
4282
+ )
4283
+ ] });
4284
+ }
4285
+ var Sidebar = React24.forwardRef(({ collapsed = false, className, children, ...props }, ref) => {
4286
+ return /* @__PURE__ */ jsx(
4287
+ "aside",
4288
+ {
4289
+ ref,
4290
+ "data-state": collapsed ? "collapsed" : "expanded",
4291
+ "data-collapsible": collapsed ? "icon" : "",
4292
+ className: cn(
4293
+ "group flex flex-col border-r border-mainMenu-border transition-[width] duration-200 ease-linear",
4294
+ "bg-mainMenu text-mainMenu-foreground",
4295
+ collapsed ? "w-14" : "w-64",
4296
+ className
4297
+ ),
4298
+ ...props,
4299
+ children
4300
+ }
4301
+ );
4302
+ });
4303
+ Sidebar.displayName = "Sidebar";
4304
+ var SidebarContent = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4305
+ "div",
4306
+ {
4307
+ ref,
4308
+ "data-sidebar": "content",
4309
+ className: cn(
4310
+ // HAI3 customization: gap and padding use rem-based spacing for theme scaling
4311
+ "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden p-2",
4312
+ className
4313
+ ),
4314
+ ...props
4315
+ }
4316
+ ));
4317
+ SidebarContent.displayName = "SidebarContent";
4318
+ var SidebarMenu = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4319
+ "ul",
4320
+ {
4321
+ ref,
4322
+ "data-sidebar": "menu",
4323
+ className: cn("flex w-full min-w-0 flex-col gap-1", className),
4324
+ ...props
4325
+ }
4326
+ ));
4327
+ SidebarMenu.displayName = "SidebarMenu";
4328
+ var SidebarMenuItem = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4329
+ "li",
4330
+ {
4331
+ ref,
4332
+ "data-sidebar": "menu-item",
4333
+ className: cn("group/menu-item relative", className),
4334
+ ...props
4335
+ }
4336
+ ));
4337
+ SidebarMenuItem.displayName = "SidebarMenuItem";
4338
+ var sidebarMenuButtonVariants = cva(
4339
+ // HAI3 customization: All sizing uses rem-based Tailwind classes for theme responsiveness
4340
+ "peer/menu-button flex w-full items-center gap-2 rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>span:last-child]:overflow-hidden [&>svg]:size-5 [&>svg]:shrink-0 text-mainMenu-foreground hover:bg-mainMenu-hover data-[active=true]:bg-mainMenu-selected data-[active=true]:text-white data-[active=true]:font-medium",
4341
+ {
4342
+ variants: {
4343
+ variant: {
4344
+ default: "",
4345
+ outline: "bg-background shadow-[0_0_0_1px_hsl(var(--border))] hover:bg-mainMenu-hover"
4346
+ },
4347
+ size: {
4348
+ // HAI3 customization: All heights use rem-based Tailwind classes (h-10=2.5rem, h-7=1.75rem, h-12=3rem)
4349
+ default: "h-10 text-sm",
4350
+ sm: "h-7 text-xs",
4351
+ lg: "h-12 text-sm group-data-[collapsible=icon]:!p-0"
4352
+ }
4353
+ },
4354
+ defaultVariants: {
4355
+ variant: "default",
4356
+ size: "default"
4357
+ }
4358
+ }
4359
+ );
4360
+ var SidebarMenuButton = React24.forwardRef(
4361
+ ({
4362
+ asChild = false,
4363
+ isActive = false,
4364
+ variant = "default",
4365
+ size = "default",
4366
+ tooltip,
4367
+ className,
4368
+ ...props
4369
+ }, ref) => {
4370
+ const Comp = asChild ? Slot : "button";
4371
+ return /* @__PURE__ */ jsx(
4372
+ Comp,
4373
+ {
4374
+ ref,
4375
+ "data-sidebar": "menu-button",
4376
+ "data-size": size,
4377
+ "data-active": isActive,
4378
+ title: tooltip,
4379
+ className: cn(sidebarMenuButtonVariants({ variant, size }), className),
4380
+ ...props
4381
+ }
4382
+ );
4383
+ }
4384
+ );
4385
+ SidebarMenuButton.displayName = "SidebarMenuButton";
4386
+ var SidebarMenuIcon = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4387
+ "span",
4388
+ {
4389
+ ref,
4390
+ className: cn("size-5 min-w-[1.5rem] flex-shrink-0 [&>svg]:w-full [&>svg]:h-full", className),
4391
+ ...props
4392
+ }
4393
+ ));
4394
+ SidebarMenuIcon.displayName = "SidebarMenuIcon";
4395
+ var SidebarMenuLabel = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
4396
+ "span",
4397
+ {
4398
+ ref,
4399
+ className: cn(className),
4400
+ ...props
4401
+ }
4402
+ ));
4403
+ SidebarMenuLabel.displayName = "SidebarMenuLabel";
4404
+ var SidebarHeader = React24.forwardRef(
4405
+ ({ logo, logoText, collapsed = false, onClick, className, ...props }, ref) => {
4406
+ return /* @__PURE__ */ jsxs(
4407
+ "div",
4408
+ {
4409
+ ref,
4410
+ className: cn(
4411
+ "flex flex-col h-16",
4412
+ className
4413
+ ),
4414
+ ...props,
4415
+ children: [
4416
+ /* @__PURE__ */ jsx("div", { className: "flex items-center flex-1 px-2", children: /* @__PURE__ */ jsxs(SidebarMenuButton, { onClick, tooltip: collapsed ? "Expand menu" : "Collapse menu", children: [
4417
+ logo && /* @__PURE__ */ jsx(SidebarMenuIcon, { children: logo }),
4418
+ logoText && /* @__PURE__ */ jsx(SidebarMenuLabel, { className: "[&>svg]:h-5 [&>svg]:w-auto", children: logoText })
4419
+ ] }) }),
4420
+ /* @__PURE__ */ jsx("div", { className: "border-b border-mainMenu-border mx-4" })
4421
+ ]
4422
+ }
4423
+ );
4424
+ }
4425
+ );
4426
+ SidebarHeader.displayName = "SidebarHeader";
4427
+ var UserInfo = React24__default.forwardRef(
4428
+ ({ displayName, email, avatarUrl, className, loading }, ref) => {
4429
+ const getInitials = () => {
4430
+ if (!displayName) return toUpper(email?.[0] || "") || "?";
4431
+ const parts = trim(displayName).split(/\s+/);
4432
+ if (parts.length >= 2) {
4433
+ return toUpper(`${parts[0][0]}${parts[parts.length - 1][0]}`);
4434
+ }
4435
+ return toUpper(displayName.slice(0, 2));
4436
+ };
4437
+ const initials = getInitials();
4438
+ const displayText = displayName || email || "User";
4439
+ if (loading) {
4440
+ return /* @__PURE__ */ jsxs("div", { ref, className: cn("flex items-center gap-2 text-sm", className), children: [
4441
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8 rounded-full" }),
4442
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" })
4443
+ ] });
4444
+ }
4445
+ return /* @__PURE__ */ jsxs(
4446
+ "div",
4447
+ {
4448
+ ref,
4449
+ className: cn(
4450
+ "flex items-center gap-2 text-sm text-muted-foreground",
4451
+ className
4452
+ ),
4453
+ children: [
4454
+ /* @__PURE__ */ jsxs(Avatar, { className: "h-8 w-8", children: [
4455
+ avatarUrl && /* @__PURE__ */ jsx(AvatarImage, { src: avatarUrl, alt: displayText }),
4456
+ /* @__PURE__ */ jsx(AvatarFallback, { children: initials })
4457
+ ] }),
4458
+ /* @__PURE__ */ jsx("span", { children: displayText })
4459
+ ]
4460
+ }
4461
+ );
4462
+ }
4463
+ );
4464
+ UserInfo.displayName = "UserInfo";
4465
+ var MessageType = /* @__PURE__ */ ((MessageType2) => {
4466
+ MessageType2["User"] = "user";
4467
+ MessageType2["Assistant"] = "assistant";
4468
+ return MessageType2;
4469
+ })(MessageType || {});
4470
+ var MessageBubble = ({
4471
+ type,
4472
+ content,
4473
+ className = "",
4474
+ onCopy,
4475
+ onEdit,
4476
+ onDelete
4477
+ }) => {
4478
+ const isUser = type === "user" /* User */;
4479
+ return /* @__PURE__ */ jsxs("div", { className: `flex gap-4 group ${className}`, children: [
4480
+ /* @__PURE__ */ jsx(Avatar, { className: "h-8 w-8 flex-shrink-0", children: /* @__PURE__ */ jsx(
4481
+ AvatarFallback,
4482
+ {
4483
+ className: isUser ? "bg-blue-500 text-white" : "bg-green-500 text-white",
4484
+ children: isUser ? /* @__PURE__ */ jsx(User, { size: 16 }) : /* @__PURE__ */ jsx(Bot, { size: 16 })
4485
+ }
4486
+ ) }),
4487
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
4488
+ /* @__PURE__ */ jsx("div", { className: "prose prose-sm max-w-none", children: /* @__PURE__ */ jsx("div", { className: "leading-relaxed whitespace-pre-wrap", children: content }) }),
4489
+ (onCopy || onEdit || onDelete) && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 mt-2 opacity-0 group-hover:opacity-100 transition-opacity", children: [
4490
+ onCopy && /* @__PURE__ */ jsx(
4491
+ "button",
4492
+ {
4493
+ onClick: onCopy,
4494
+ className: "p-1.5 hover:bg-muted rounded-lg transition-colors text-muted-foreground hover:text-foreground",
4495
+ title: "Copy message",
4496
+ children: /* @__PURE__ */ jsxs(
4497
+ "svg",
4498
+ {
4499
+ width: "14",
4500
+ height: "14",
4501
+ viewBox: "0 0 24 24",
4502
+ fill: "none",
4503
+ stroke: "currentColor",
4504
+ strokeWidth: "2",
4505
+ strokeLinecap: "round",
4506
+ strokeLinejoin: "round",
4507
+ children: [
4508
+ /* @__PURE__ */ jsx("rect", { x: "9", y: "9", width: "13", height: "13", rx: "2", ry: "2" }),
4509
+ /* @__PURE__ */ jsx("path", { d: "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" })
4510
+ ]
4511
+ }
4512
+ )
4513
+ }
4514
+ ),
4515
+ onEdit && /* @__PURE__ */ jsx(
4516
+ "button",
4517
+ {
4518
+ onClick: onEdit,
4519
+ className: "p-1.5 hover:bg-muted rounded-lg transition-colors text-muted-foreground hover:text-foreground",
4520
+ title: "Edit message",
4521
+ children: /* @__PURE__ */ jsxs(
4522
+ "svg",
4523
+ {
4524
+ width: "14",
4525
+ height: "14",
4526
+ viewBox: "0 0 24 24",
4527
+ fill: "none",
4528
+ stroke: "currentColor",
4529
+ strokeWidth: "2",
4530
+ strokeLinecap: "round",
4531
+ strokeLinejoin: "round",
4532
+ children: [
4533
+ /* @__PURE__ */ jsx("path", { d: "M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" }),
4534
+ /* @__PURE__ */ jsx("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })
4535
+ ]
4536
+ }
4537
+ )
4538
+ }
4539
+ ),
4540
+ onDelete && /* @__PURE__ */ jsx(
4541
+ "button",
4542
+ {
4543
+ onClick: onDelete,
4544
+ className: "p-1.5 hover:bg-destructive/10 rounded-lg transition-colors text-muted-foreground hover:text-destructive",
4545
+ title: "Delete message",
4546
+ children: /* @__PURE__ */ jsxs(
4547
+ "svg",
4548
+ {
4549
+ width: "14",
4550
+ height: "14",
4551
+ viewBox: "0 0 24 24",
4552
+ fill: "none",
4553
+ stroke: "currentColor",
4554
+ strokeWidth: "2",
4555
+ strokeLinecap: "round",
4556
+ strokeLinejoin: "round",
4557
+ children: [
4558
+ /* @__PURE__ */ jsx("polyline", { points: "3 6 5 6 21 6" }),
4559
+ /* @__PURE__ */ jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
4560
+ ]
4561
+ }
4562
+ )
4563
+ }
4564
+ )
4565
+ ] })
4566
+ ] })
4567
+ ] });
4568
+ };
4569
+ var ChatInput = ({
4570
+ value,
4571
+ onChange,
4572
+ onSend,
4573
+ onAttachFile,
4574
+ placeholder = "Type a message...",
4575
+ disabled = false,
4576
+ maxRows = 14,
4577
+ className = ""
4578
+ }) => {
4579
+ const handleKeyDown = (e) => {
4580
+ if (e.key === "Enter" && !e.shiftKey) {
4581
+ e.preventDefault();
4582
+ if (!disabled && trim(value)) {
4583
+ onSend();
4584
+ }
4585
+ }
4586
+ };
4587
+ const rows = Math.min(
4588
+ Math.max(value.split("\n").length, 1),
4589
+ maxRows
4590
+ );
4591
+ return /* @__PURE__ */ jsxs("div", { className: `flex items-end gap-2 ${className}`, children: [
4592
+ onAttachFile && /* @__PURE__ */ jsx(
4593
+ Button,
4594
+ {
4595
+ variant: ButtonVariant.Ghost,
4596
+ size: ButtonSize.Icon,
4597
+ onClick: onAttachFile,
4598
+ disabled,
4599
+ className: "flex-shrink-0",
4600
+ "aria-label": "Attach file",
4601
+ children: /* @__PURE__ */ jsx(Paperclip, { size: 20 })
4602
+ }
4603
+ ),
4604
+ /* @__PURE__ */ jsx(
4605
+ "textarea",
4606
+ {
4607
+ value,
4608
+ onChange: (e) => onChange(e.target.value),
4609
+ onKeyDown: handleKeyDown,
4610
+ placeholder,
4611
+ disabled,
4612
+ rows,
4613
+ className: "flex-1 resize-none rounded-lg border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"
4614
+ }
4615
+ ),
4616
+ /* @__PURE__ */ jsx(
4617
+ Button,
4618
+ {
4619
+ onClick: onSend,
4620
+ disabled: disabled || !trim(value),
4621
+ className: "flex-shrink-0",
4622
+ "aria-label": "Send message",
4623
+ children: /* @__PURE__ */ jsx(Send, { size: 20 })
4624
+ }
4625
+ )
4626
+ ] });
4627
+ };
4628
+ var ThreadList = ({
4629
+ threads,
4630
+ selectedThreadId,
4631
+ onThreadSelect,
4632
+ onNewThread,
4633
+ onDeleteThread,
4634
+ searchQuery = "",
4635
+ onSearchChange,
4636
+ loading = false,
4637
+ className = ""
4638
+ }) => {
4639
+ if (loading) {
4640
+ return /* @__PURE__ */ jsxs("div", { className: `flex flex-col h-full ${className}`, children: [
4641
+ /* @__PURE__ */ jsxs("div", { className: "p-4 border-b", children: [
4642
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-full mb-3" }),
4643
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-10 w-full" })
4644
+ ] }),
4645
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto p-2", children: [1, 2, 3, 4, 5].map((i) => /* @__PURE__ */ jsx(Skeleton, { className: "h-16 w-full mb-2" }, i)) })
4646
+ ] });
4647
+ }
4648
+ return /* @__PURE__ */ jsxs("div", { className: `flex flex-col h-full ${className}`, children: [
4649
+ /* @__PURE__ */ jsxs("div", { className: "p-4 border-b", children: [
4650
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-3", children: [
4651
+ /* @__PURE__ */ jsx("h2", { className: "text-lg font-semibold", children: "Recent Chats" }),
4652
+ /* @__PURE__ */ jsx(
4653
+ Button,
4654
+ {
4655
+ variant: ButtonVariant.Ghost,
4656
+ size: ButtonSize.Icon,
4657
+ onClick: onNewThread,
4658
+ "aria-label": "New chat",
4659
+ children: /* @__PURE__ */ jsx(Plus, { size: 16 })
4660
+ }
4661
+ )
4662
+ ] }),
4663
+ onSearchChange && /* @__PURE__ */ jsxs("div", { className: "relative", children: [
4664
+ /* @__PURE__ */ jsx(
4665
+ Search,
4666
+ {
4667
+ size: 16,
4668
+ className: "absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground"
4669
+ }
4670
+ ),
4671
+ /* @__PURE__ */ jsx(
4672
+ "input",
4673
+ {
4674
+ type: "text",
4675
+ placeholder: "Search chats...",
4676
+ value: searchQuery,
4677
+ onChange: (e) => onSearchChange(e.target.value),
4678
+ className: "w-full pl-9 pr-3 py-2 border border-input rounded-lg text-sm bg-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
4679
+ }
4680
+ )
4681
+ ] })
4682
+ ] }),
4683
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto", children: threads.length === 0 ? /* @__PURE__ */ jsx("div", { className: "p-4 text-center text-muted-foreground text-sm", children: "No chats yet. Start a new conversation!" }) : threads.map((thread) => /* @__PURE__ */ jsx(
4684
+ "div",
4685
+ {
4686
+ onClick: () => onThreadSelect(thread.id),
4687
+ className: `p-3 border-b cursor-pointer transition-colors hover:bg-muted/50 ${selectedThreadId === thread.id ? "bg-muted" : ""}`,
4688
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-2", children: [
4689
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
4690
+ /* @__PURE__ */ jsxs("h3", { className: "font-medium text-sm truncate mb-1", children: [
4691
+ thread.title,
4692
+ thread.isTemporary && /* @__PURE__ */ jsx("span", { className: "ml-2 text-xs text-muted-foreground", children: "(Temporary)" })
4693
+ ] }),
4694
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground truncate", children: thread.preview })
4695
+ ] }),
4696
+ onDeleteThread && /* @__PURE__ */ jsx(
4697
+ "button",
4698
+ {
4699
+ onClick: (e) => {
4700
+ e.stopPropagation();
4701
+ onDeleteThread(thread.id);
4702
+ },
4703
+ className: "p-1 opacity-0 group-hover:opacity-100 hover:bg-destructive/10 rounded transition-opacity text-muted-foreground hover:text-destructive",
4704
+ "aria-label": "Delete thread",
4705
+ children: /* @__PURE__ */ jsxs(
4706
+ "svg",
4707
+ {
4708
+ width: "14",
4709
+ height: "14",
4710
+ viewBox: "0 0 24 24",
4711
+ fill: "none",
4712
+ stroke: "currentColor",
4713
+ strokeWidth: "2",
4714
+ strokeLinecap: "round",
4715
+ strokeLinejoin: "round",
4716
+ children: [
4717
+ /* @__PURE__ */ jsx("polyline", { points: "3 6 5 6 21 6" }),
4718
+ /* @__PURE__ */ jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
4719
+ ]
4720
+ }
4721
+ )
4722
+ }
4723
+ )
4724
+ ] })
4725
+ },
4726
+ thread.id
4727
+ )) })
4728
+ ] });
4729
+ };
4730
+ var MENU_ICON_ID = "menu";
4731
+ var MenuIcon = ({ className = "" }) => {
4732
+ return /* @__PURE__ */ jsxs(
4733
+ "svg",
4734
+ {
4735
+ className,
4736
+ width: "20",
4737
+ height: "20",
4738
+ viewBox: "0 0 24 24",
4739
+ fill: "none",
4740
+ stroke: "currentColor",
4741
+ strokeWidth: "2",
4742
+ strokeLinecap: "round",
4743
+ strokeLinejoin: "round",
4744
+ children: [
4745
+ /* @__PURE__ */ jsx("line", { x1: "3", y1: "12", x2: "21", y2: "12" }),
4746
+ /* @__PURE__ */ jsx("line", { x1: "3", y1: "6", x2: "21", y2: "6" }),
4747
+ /* @__PURE__ */ jsx("line", { x1: "3", y1: "18", x2: "21", y2: "18" })
4748
+ ]
4749
+ }
4750
+ );
4751
+ };
4752
+ var CLOSE_ICON_ID = "close";
4753
+ var CloseIcon = ({ className = "" }) => {
4754
+ return /* @__PURE__ */ jsxs(
4755
+ "svg",
4756
+ {
4757
+ className,
4758
+ width: "20",
4759
+ height: "20",
4760
+ viewBox: "0 0 24 24",
4761
+ fill: "none",
4762
+ stroke: "currentColor",
4763
+ strokeWidth: "2",
4764
+ strokeLinecap: "round",
4765
+ strokeLinejoin: "round",
4766
+ children: [
4767
+ /* @__PURE__ */ jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
4768
+ /* @__PURE__ */ jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
4769
+ ]
4770
+ }
4771
+ );
4772
+ };
4773
+
4774
+ // src/styles/applyTheme.ts
4775
+ var hslToVar = (color) => {
4776
+ if (color === "transparent") {
4777
+ return "transparent";
4778
+ }
4779
+ if (color.startsWith("hsl(")) {
4780
+ return color.replace("hsl(", "").replace(")", "");
4781
+ }
4782
+ return color;
4783
+ };
4784
+ var applyTheme = (theme, themeName) => {
4785
+ const root = document.documentElement;
4786
+ if (themeName) {
4787
+ root.setAttribute("data-theme", themeName);
4788
+ }
4789
+ root.style.setProperty("--background", hslToVar(theme.colors.background));
4790
+ root.style.setProperty("--foreground", hslToVar(theme.colors.foreground));
4791
+ root.style.setProperty("--card", hslToVar(theme.colors.background));
4792
+ root.style.setProperty("--card-foreground", hslToVar(theme.colors.foreground));
4793
+ root.style.setProperty("--popover", hslToVar(theme.colors.background));
4794
+ root.style.setProperty("--popover-foreground", hslToVar(theme.colors.foreground));
4795
+ root.style.setProperty("--primary", hslToVar(theme.colors.primary));
4796
+ root.style.setProperty("--primary-foreground", hslToVar(theme.colors.background));
4797
+ root.style.setProperty("--secondary", hslToVar(theme.colors.secondary));
4798
+ root.style.setProperty("--secondary-foreground", hslToVar(theme.colors.foreground));
4799
+ root.style.setProperty("--muted", hslToVar(theme.colors.muted));
4800
+ root.style.setProperty("--muted-foreground", hslToVar(theme.colors.foreground));
4801
+ root.style.setProperty("--accent", hslToVar(theme.colors.accent));
4802
+ root.style.setProperty("--accent-foreground", hslToVar(theme.colors.background));
4803
+ root.style.setProperty("--destructive", hslToVar(theme.colors.error));
4804
+ root.style.setProperty("--destructive-foreground", hslToVar(theme.colors.foreground));
4805
+ root.style.setProperty("--border", hslToVar(theme.colors.border));
4806
+ root.style.setProperty("--input", hslToVar(theme.colors.border));
4807
+ root.style.setProperty("--ring", hslToVar(theme.colors.primary));
4808
+ root.style.setProperty("--error", hslToVar(theme.colors.error));
4809
+ root.style.setProperty("--warning", hslToVar(theme.colors.warning));
4810
+ root.style.setProperty("--success", hslToVar(theme.colors.success));
4811
+ root.style.setProperty("--info", hslToVar(theme.colors.info));
4812
+ root.style.setProperty("--chart-1", theme.colors.chart[1]);
4813
+ root.style.setProperty("--chart-2", theme.colors.chart[2]);
4814
+ root.style.setProperty("--chart-3", theme.colors.chart[3]);
4815
+ root.style.setProperty("--chart-4", theme.colors.chart[4]);
4816
+ root.style.setProperty("--chart-5", theme.colors.chart[5]);
4817
+ root.style.setProperty("--left-menu", hslToVar(theme.colors.mainMenu.DEFAULT));
4818
+ root.style.setProperty("--left-menu-foreground", hslToVar(theme.colors.mainMenu.foreground));
4819
+ root.style.setProperty("--left-menu-hover", hslToVar(theme.colors.mainMenu.hover));
4820
+ root.style.setProperty("--left-menu-selected", hslToVar(theme.colors.mainMenu.selected));
4821
+ root.style.setProperty("--left-menu-border", hslToVar(theme.colors.mainMenu.border));
4822
+ Object.entries(theme.spacing).forEach(([key, value]) => {
4823
+ root.style.setProperty(`--spacing-${key}`, value);
4824
+ });
4825
+ Object.entries(theme.borderRadius).forEach(([key, value]) => {
4826
+ root.style.setProperty(`--radius-${key}`, value);
4827
+ });
4828
+ Object.entries(theme.shadows).forEach(([key, value]) => {
4829
+ root.style.setProperty(`--shadow-${key}`, value);
4830
+ });
4831
+ Object.entries(theme.transitions).forEach(([key, value]) => {
4832
+ root.style.setProperty(`--transition-${key}`, value);
4833
+ });
4834
+ if (themeName?.endsWith("-large")) {
4835
+ root.style.fontSize = "125%";
4836
+ } else {
4837
+ root.style.fontSize = "";
4838
+ }
4839
+ };
4840
+
4841
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, CLOSE_ICON_ID, Calendar, CalendarDayButton, CalendarIcon, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegendContent, ChartTooltipContent, ChatInput, Checkbox, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CloseIcon, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DataTable, DataTableColumnHeader, DataTablePagination, DataTableViewOptions, DatePicker, DatePickerContent, DatePickerInput, DatePickerTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownButton, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Header, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item6 as Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, MENU_ICON_ID, MenuIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MessageBubble, MessageType, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuIcon, SidebarMenuItem, SidebarMenuLabel, Skeleton, Slider, SliderRange, SliderThumb, SliderTrack, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThreadList, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserInfo, alertVariants, applyTheme, badgeVariants, emptyMediaVariants, useFormField };
4842
+ //# sourceMappingURL=index.js.map
4843
+ //# sourceMappingURL=index.js.map