@formant/aesthetics 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,4072 @@
1
+ import { Accordion as Accordion$1, Slot, AlertDialog as AlertDialog$1, AspectRatio as AspectRatio$1, Avatar as Avatar$1, Checkbox as Checkbox$1, Collapsible as Collapsible$1, Dialog as Dialog$1, ContextMenu as ContextMenu$1, DropdownMenu as DropdownMenu$1, HoverCard as HoverCard$1, Label as Label$1, Menubar as Menubar$1, NavigationMenu as NavigationMenu$1, Popover as Popover$1, Progress as Progress$1, RadioGroup as RadioGroup$1, ScrollArea as ScrollArea$1, Select as Select$1, Separator, Slider as Slider$1, Switch as Switch$1, Tabs as Tabs$1, Toggle as Toggle$1, ToggleGroup as ToggleGroup$1, Tooltip } from 'radix-ui';
2
+ import { clsx } from 'clsx';
3
+ import { twMerge } from 'tailwind-merge';
4
+ import { ChevronDownIcon, ChevronUpIcon, ChevronRightIcon, MoreHorizontalIcon, ChevronLeftIcon, CheckIcon, XIcon, SearchIcon, MinusIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon } from 'lucide-react';
5
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
+ import { cva } from 'class-variance-authority';
7
+ import * as React2 from 'react';
8
+ import { getDefaultClassNames, DayPicker } from 'react-day-picker';
9
+ import useEmblaCarousel from 'embla-carousel-react';
10
+ import * as RechartsPrimitive from 'recharts';
11
+ import { Command as Command$1 } from 'cmdk';
12
+ import { Drawer as Drawer$1 } from 'vaul';
13
+ import { OTPInput, OTPInputContext } from 'input-otp';
14
+ import * as ResizablePrimitive from 'react-resizable-panels';
15
+ import { useTheme, ThemeProvider as ThemeProvider$1 } from 'next-themes';
16
+ import { Toaster as Toaster$1 } from 'sonner';
17
+
18
+ function cn(...inputs) {
19
+ return twMerge(clsx(inputs));
20
+ }
21
+ function Accordion({
22
+ className,
23
+ ...props
24
+ }) {
25
+ return /* @__PURE__ */ jsx(
26
+ Accordion$1.Root,
27
+ {
28
+ "data-slot": "accordion",
29
+ className: cn("flex w-full flex-col", className),
30
+ ...props
31
+ }
32
+ );
33
+ }
34
+ function AccordionItem({
35
+ className,
36
+ ...props
37
+ }) {
38
+ return /* @__PURE__ */ jsx(
39
+ Accordion$1.Item,
40
+ {
41
+ "data-slot": "accordion-item",
42
+ className: cn("not-last:border-b", className),
43
+ ...props
44
+ }
45
+ );
46
+ }
47
+ function AccordionTrigger({
48
+ className,
49
+ children,
50
+ ...props
51
+ }) {
52
+ return /* @__PURE__ */ jsx(Accordion$1.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
53
+ Accordion$1.Trigger,
54
+ {
55
+ "data-slot": "accordion-trigger",
56
+ className: cn(
57
+ "group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground",
58
+ className
59
+ ),
60
+ ...props,
61
+ children: [
62
+ children,
63
+ /* @__PURE__ */ jsx(ChevronDownIcon, { "data-slot": "accordion-trigger-icon", className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden" }),
64
+ /* @__PURE__ */ jsx(ChevronUpIcon, { "data-slot": "accordion-trigger-icon", className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline" })
65
+ ]
66
+ }
67
+ ) });
68
+ }
69
+ function AccordionContent({
70
+ className,
71
+ children,
72
+ ...props
73
+ }) {
74
+ return /* @__PURE__ */ jsx(
75
+ Accordion$1.Content,
76
+ {
77
+ "data-slot": "accordion-content",
78
+ className: "overflow-hidden text-sm data-open:animate-accordion-down data-closed:animate-accordion-up",
79
+ ...props,
80
+ children: /* @__PURE__ */ jsx(
81
+ "div",
82
+ {
83
+ className: cn(
84
+ "h-(--radix-accordion-content-height) pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
85
+ className
86
+ ),
87
+ children
88
+ }
89
+ )
90
+ }
91
+ );
92
+ }
93
+ var alertVariants = cva(
94
+ "group/alert relative grid w-full gap-2 rounded-[4px] border px-4 py-4 text-left text-sm [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:size-4 has-[>svg]:pl-10",
95
+ {
96
+ variants: {
97
+ variant: {
98
+ default: "bg-[rgba(44,65,66,0.3)] border-[rgba(75,94,83,0.4)] text-[#ACC3B3]",
99
+ info: "bg-[rgba(44,65,66,0.3)] border-[rgba(44,65,66,0.6)] text-[#ACC3B3]",
100
+ warning: "bg-[rgba(232,171,127,0.1)] border-[rgba(232,171,127,0.2)] text-[#E8AB7F]",
101
+ ai: "bg-[rgba(139,140,244,0.1)] border-[rgba(139,140,244,0.2)] text-[#8B8CF4]"
102
+ }
103
+ },
104
+ defaultVariants: {
105
+ variant: "default"
106
+ }
107
+ }
108
+ );
109
+ function Alert({
110
+ className,
111
+ variant,
112
+ ...props
113
+ }) {
114
+ return /* @__PURE__ */ jsx(
115
+ "div",
116
+ {
117
+ "data-slot": "alert",
118
+ role: "alert",
119
+ className: cn(alertVariants({ variant }), className),
120
+ ...props
121
+ }
122
+ );
123
+ }
124
+ function AlertTitle({ className, ...props }) {
125
+ return /* @__PURE__ */ jsx(
126
+ "div",
127
+ {
128
+ "data-slot": "alert-title",
129
+ className: cn(
130
+ "font-medium text-sm",
131
+ className
132
+ ),
133
+ ...props
134
+ }
135
+ );
136
+ }
137
+ function AlertDescription({
138
+ className,
139
+ ...props
140
+ }) {
141
+ return /* @__PURE__ */ jsx(
142
+ "div",
143
+ {
144
+ "data-slot": "alert-description",
145
+ className: cn(
146
+ "text-sm leading-relaxed opacity-90",
147
+ className
148
+ ),
149
+ ...props
150
+ }
151
+ );
152
+ }
153
+ var buttonVariants = cva(
154
+ "group/button inline-flex shrink-0 items-center justify-center rounded-[3px] border border-transparent bg-clip-padding text-[13px] font-medium tracking-[0.04em] uppercase whitespace-nowrap transition-all outline-none select-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
155
+ {
156
+ variants: {
157
+ variant: {
158
+ default: "bg-[#ACC3B3] text-[#0A0F11] hover:bg-[#F2F3F4]",
159
+ secondary: "bg-transparent border border-[rgba(172,195,179,0.4)] text-[#ACC3B3] hover:border-[#ACC3B3] hover:bg-[rgba(172,195,179,0.08)]",
160
+ outline: "bg-transparent border border-[rgba(163,171,169,0.2)] text-[#A3ABA9] hover:border-[#A3ABA9] hover:text-[#F2F3F4]",
161
+ ghost: "bg-transparent text-[#A3ABA9] hover:text-[#F2F3F4]",
162
+ destructive: "bg-[#E8AB7F] text-[#0A0F11] hover:bg-[#f0c090]",
163
+ accent: "bg-[#8B8CF4] text-[#F2F3F4] hover:opacity-90",
164
+ link: "text-[#ACC3B3] underline-offset-4 hover:underline"
165
+ },
166
+ size: {
167
+ default: "h-9 gap-2 px-6 py-3",
168
+ sm: "h-8 gap-1.5 px-4 py-2 text-[12px]",
169
+ lg: "h-10 gap-2 px-8 py-4 text-[14px]",
170
+ icon: "size-9",
171
+ "icon-sm": "size-8",
172
+ "icon-lg": "size-10"
173
+ }
174
+ },
175
+ defaultVariants: {
176
+ variant: "default",
177
+ size: "default"
178
+ }
179
+ }
180
+ );
181
+ function Button({
182
+ className,
183
+ variant = "default",
184
+ size = "default",
185
+ asChild = false,
186
+ ...props
187
+ }) {
188
+ const Comp = asChild ? Slot.Root : "button";
189
+ return /* @__PURE__ */ jsx(
190
+ Comp,
191
+ {
192
+ "data-slot": "button",
193
+ "data-variant": variant,
194
+ "data-size": size,
195
+ className: cn(buttonVariants({ variant, size, className })),
196
+ ...props
197
+ }
198
+ );
199
+ }
200
+ function AlertDialog({
201
+ ...props
202
+ }) {
203
+ return /* @__PURE__ */ jsx(AlertDialog$1.Root, { "data-slot": "alert-dialog", ...props });
204
+ }
205
+ function AlertDialogTrigger({
206
+ ...props
207
+ }) {
208
+ return /* @__PURE__ */ jsx(AlertDialog$1.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
209
+ }
210
+ function AlertDialogPortal({
211
+ ...props
212
+ }) {
213
+ return /* @__PURE__ */ jsx(AlertDialog$1.Portal, { "data-slot": "alert-dialog-portal", ...props });
214
+ }
215
+ function AlertDialogOverlay({
216
+ className,
217
+ ...props
218
+ }) {
219
+ return /* @__PURE__ */ jsx(
220
+ AlertDialog$1.Overlay,
221
+ {
222
+ "data-slot": "alert-dialog-overlay",
223
+ className: cn(
224
+ "fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
225
+ className
226
+ ),
227
+ ...props
228
+ }
229
+ );
230
+ }
231
+ function AlertDialogContent({
232
+ className,
233
+ size = "default",
234
+ ...props
235
+ }) {
236
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
237
+ /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
238
+ /* @__PURE__ */ jsx(
239
+ AlertDialog$1.Content,
240
+ {
241
+ "data-slot": "alert-dialog-content",
242
+ "data-size": size,
243
+ className: cn(
244
+ "group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
245
+ className
246
+ ),
247
+ ...props
248
+ }
249
+ )
250
+ ] });
251
+ }
252
+ function AlertDialogHeader({
253
+ className,
254
+ ...props
255
+ }) {
256
+ return /* @__PURE__ */ jsx(
257
+ "div",
258
+ {
259
+ "data-slot": "alert-dialog-header",
260
+ className: cn(
261
+ "grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",
262
+ className
263
+ ),
264
+ ...props
265
+ }
266
+ );
267
+ }
268
+ function AlertDialogFooter({
269
+ className,
270
+ ...props
271
+ }) {
272
+ return /* @__PURE__ */ jsx(
273
+ "div",
274
+ {
275
+ "data-slot": "alert-dialog-footer",
276
+ className: cn(
277
+ "-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
278
+ className
279
+ ),
280
+ ...props
281
+ }
282
+ );
283
+ }
284
+ function AlertDialogTitle({
285
+ className,
286
+ ...props
287
+ }) {
288
+ return /* @__PURE__ */ jsx(
289
+ AlertDialog$1.Title,
290
+ {
291
+ "data-slot": "alert-dialog-title",
292
+ className: cn(
293
+ "font-heading text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",
294
+ className
295
+ ),
296
+ ...props
297
+ }
298
+ );
299
+ }
300
+ function AlertDialogDescription({
301
+ className,
302
+ ...props
303
+ }) {
304
+ return /* @__PURE__ */ jsx(
305
+ AlertDialog$1.Description,
306
+ {
307
+ "data-slot": "alert-dialog-description",
308
+ className: cn(
309
+ "text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
310
+ className
311
+ ),
312
+ ...props
313
+ }
314
+ );
315
+ }
316
+ function AlertDialogAction({
317
+ className,
318
+ variant = "default",
319
+ size = "default",
320
+ ...props
321
+ }) {
322
+ return /* @__PURE__ */ jsx(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx(
323
+ AlertDialog$1.Action,
324
+ {
325
+ "data-slot": "alert-dialog-action",
326
+ className: cn(className),
327
+ ...props
328
+ }
329
+ ) });
330
+ }
331
+ function AlertDialogCancel({
332
+ className,
333
+ variant = "outline",
334
+ size = "default",
335
+ ...props
336
+ }) {
337
+ return /* @__PURE__ */ jsx(Button, { variant, size, asChild: true, children: /* @__PURE__ */ jsx(
338
+ AlertDialog$1.Cancel,
339
+ {
340
+ "data-slot": "alert-dialog-cancel",
341
+ className: cn(className),
342
+ ...props
343
+ }
344
+ ) });
345
+ }
346
+ function AspectRatio({
347
+ ...props
348
+ }) {
349
+ return /* @__PURE__ */ jsx(AspectRatio$1.Root, { "data-slot": "aspect-ratio", ...props });
350
+ }
351
+ function Avatar({
352
+ className,
353
+ size = "default",
354
+ ...props
355
+ }) {
356
+ return /* @__PURE__ */ jsx(
357
+ Avatar$1.Root,
358
+ {
359
+ "data-slot": "avatar",
360
+ "data-size": size,
361
+ className: cn(
362
+ "group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",
363
+ className
364
+ ),
365
+ ...props
366
+ }
367
+ );
368
+ }
369
+ function AvatarImage({
370
+ className,
371
+ ...props
372
+ }) {
373
+ return /* @__PURE__ */ jsx(
374
+ Avatar$1.Image,
375
+ {
376
+ "data-slot": "avatar-image",
377
+ className: cn(
378
+ "aspect-square size-full rounded-full object-cover",
379
+ className
380
+ ),
381
+ ...props
382
+ }
383
+ );
384
+ }
385
+ function AvatarFallback({
386
+ className,
387
+ ...props
388
+ }) {
389
+ return /* @__PURE__ */ jsx(
390
+ Avatar$1.Fallback,
391
+ {
392
+ "data-slot": "avatar-fallback",
393
+ className: cn(
394
+ "flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs",
395
+ className
396
+ ),
397
+ ...props
398
+ }
399
+ );
400
+ }
401
+ var badgeVariants = cva(
402
+ "group/badge inline-flex h-6 w-fit shrink-0 items-center justify-center gap-1.5 overflow-hidden rounded-[2px] border px-3 py-1 text-[11px] font-medium tracking-[0.1em] uppercase whitespace-nowrap transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 [&>svg]:pointer-events-none [&>svg]:size-3!",
403
+ {
404
+ variants: {
405
+ variant: {
406
+ default: "bg-[rgba(75,94,83,0.3)] border-[rgba(75,94,83,0.4)] text-[#ACC3B3]",
407
+ secondary: "bg-[rgba(44,65,66,0.4)] border-[rgba(44,65,66,0.6)] text-[#ACC3B3]",
408
+ destructive: "bg-[rgba(232,171,127,0.1)] border-[rgba(232,171,127,0.25)] text-[#E8AB7F]",
409
+ outline: "bg-transparent border-[rgba(163,171,169,0.2)] text-[#A3ABA9]",
410
+ accent: "bg-[rgba(139,140,244,0.1)] border-[rgba(139,140,244,0.25)] text-[#8B8CF4]"
411
+ }
412
+ },
413
+ defaultVariants: {
414
+ variant: "default"
415
+ }
416
+ }
417
+ );
418
+ function Badge({
419
+ className,
420
+ variant = "default",
421
+ asChild = false,
422
+ ...props
423
+ }) {
424
+ const Comp = asChild ? Slot.Root : "span";
425
+ return /* @__PURE__ */ jsx(
426
+ Comp,
427
+ {
428
+ "data-slot": "badge",
429
+ "data-variant": variant,
430
+ className: cn(badgeVariants({ variant }), className),
431
+ ...props
432
+ }
433
+ );
434
+ }
435
+ function Breadcrumb({ className, ...props }) {
436
+ return /* @__PURE__ */ jsx(
437
+ "nav",
438
+ {
439
+ "aria-label": "breadcrumb",
440
+ "data-slot": "breadcrumb",
441
+ className: cn(className),
442
+ ...props
443
+ }
444
+ );
445
+ }
446
+ function BreadcrumbList({ className, ...props }) {
447
+ return /* @__PURE__ */ jsx(
448
+ "ol",
449
+ {
450
+ "data-slot": "breadcrumb-list",
451
+ className: cn(
452
+ "flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground",
453
+ className
454
+ ),
455
+ ...props
456
+ }
457
+ );
458
+ }
459
+ function BreadcrumbItem({ className, ...props }) {
460
+ return /* @__PURE__ */ jsx(
461
+ "li",
462
+ {
463
+ "data-slot": "breadcrumb-item",
464
+ className: cn("inline-flex items-center gap-1", className),
465
+ ...props
466
+ }
467
+ );
468
+ }
469
+ function BreadcrumbLink({
470
+ asChild,
471
+ className,
472
+ ...props
473
+ }) {
474
+ const Comp = asChild ? Slot.Root : "a";
475
+ return /* @__PURE__ */ jsx(
476
+ Comp,
477
+ {
478
+ "data-slot": "breadcrumb-link",
479
+ className: cn("transition-colors hover:text-foreground", className),
480
+ ...props
481
+ }
482
+ );
483
+ }
484
+ function BreadcrumbPage({ className, ...props }) {
485
+ return /* @__PURE__ */ jsx(
486
+ "span",
487
+ {
488
+ "data-slot": "breadcrumb-page",
489
+ role: "link",
490
+ "aria-disabled": "true",
491
+ "aria-current": "page",
492
+ className: cn("font-normal text-foreground", className),
493
+ ...props
494
+ }
495
+ );
496
+ }
497
+ function BreadcrumbSeparator({
498
+ children,
499
+ className,
500
+ ...props
501
+ }) {
502
+ return /* @__PURE__ */ jsx(
503
+ "li",
504
+ {
505
+ "data-slot": "breadcrumb-separator",
506
+ role: "presentation",
507
+ "aria-hidden": "true",
508
+ className: cn("[&>svg]:size-3.5", className),
509
+ ...props,
510
+ children: children ?? /* @__PURE__ */ jsx(ChevronRightIcon, {})
511
+ }
512
+ );
513
+ }
514
+ function BreadcrumbEllipsis({
515
+ className,
516
+ ...props
517
+ }) {
518
+ return /* @__PURE__ */ jsxs(
519
+ "span",
520
+ {
521
+ "data-slot": "breadcrumb-ellipsis",
522
+ role: "presentation",
523
+ "aria-hidden": "true",
524
+ className: cn(
525
+ "flex size-5 items-center justify-center [&>svg]:size-4",
526
+ className
527
+ ),
528
+ ...props,
529
+ children: [
530
+ /* @__PURE__ */ jsx(
531
+ MoreHorizontalIcon,
532
+ {}
533
+ ),
534
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More" })
535
+ ]
536
+ }
537
+ );
538
+ }
539
+ function Calendar({
540
+ className,
541
+ classNames,
542
+ showOutsideDays = true,
543
+ captionLayout = "label",
544
+ buttonVariant = "ghost",
545
+ locale,
546
+ formatters,
547
+ components,
548
+ ...props
549
+ }) {
550
+ const defaultClassNames = getDefaultClassNames();
551
+ return /* @__PURE__ */ jsx(
552
+ DayPicker,
553
+ {
554
+ showOutsideDays,
555
+ className: cn(
556
+ "group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",
557
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
558
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
559
+ className
560
+ ),
561
+ captionLayout,
562
+ locale,
563
+ formatters: {
564
+ formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
565
+ ...formatters
566
+ },
567
+ classNames: {
568
+ root: cn("w-fit", defaultClassNames.root),
569
+ months: cn(
570
+ "relative flex flex-col gap-4 md:flex-row",
571
+ defaultClassNames.months
572
+ ),
573
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
574
+ nav: cn(
575
+ "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
576
+ defaultClassNames.nav
577
+ ),
578
+ button_previous: cn(
579
+ buttonVariants({ variant: buttonVariant }),
580
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
581
+ defaultClassNames.button_previous
582
+ ),
583
+ button_next: cn(
584
+ buttonVariants({ variant: buttonVariant }),
585
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
586
+ defaultClassNames.button_next
587
+ ),
588
+ month_caption: cn(
589
+ "flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",
590
+ defaultClassNames.month_caption
591
+ ),
592
+ dropdowns: cn(
593
+ "flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",
594
+ defaultClassNames.dropdowns
595
+ ),
596
+ dropdown_root: cn(
597
+ "relative rounded-(--cell-radius)",
598
+ defaultClassNames.dropdown_root
599
+ ),
600
+ dropdown: cn(
601
+ "absolute inset-0 bg-popover opacity-0",
602
+ defaultClassNames.dropdown
603
+ ),
604
+ caption_label: cn(
605
+ "font-medium select-none",
606
+ captionLayout === "label" ? "text-sm" : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",
607
+ defaultClassNames.caption_label
608
+ ),
609
+ table: "w-full border-collapse",
610
+ weekdays: cn("flex", defaultClassNames.weekdays),
611
+ weekday: cn(
612
+ "flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",
613
+ defaultClassNames.weekday
614
+ ),
615
+ week: cn("mt-2 flex w-full", defaultClassNames.week),
616
+ week_number_header: cn(
617
+ "w-(--cell-size) select-none",
618
+ defaultClassNames.week_number_header
619
+ ),
620
+ week_number: cn(
621
+ "text-[0.8rem] text-muted-foreground select-none",
622
+ defaultClassNames.week_number
623
+ ),
624
+ day: cn(
625
+ "group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",
626
+ props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
627
+ defaultClassNames.day
628
+ ),
629
+ range_start: cn(
630
+ "relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",
631
+ defaultClassNames.range_start
632
+ ),
633
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
634
+ range_end: cn(
635
+ "relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",
636
+ defaultClassNames.range_end
637
+ ),
638
+ today: cn(
639
+ "rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",
640
+ defaultClassNames.today
641
+ ),
642
+ outside: cn(
643
+ "text-muted-foreground aria-selected:text-muted-foreground",
644
+ defaultClassNames.outside
645
+ ),
646
+ disabled: cn(
647
+ "text-muted-foreground opacity-50",
648
+ defaultClassNames.disabled
649
+ ),
650
+ hidden: cn("invisible", defaultClassNames.hidden),
651
+ ...classNames
652
+ },
653
+ components: {
654
+ Root: ({ className: className2, rootRef, ...props2 }) => {
655
+ return /* @__PURE__ */ jsx(
656
+ "div",
657
+ {
658
+ "data-slot": "calendar",
659
+ ref: rootRef,
660
+ className: cn(className2),
661
+ ...props2
662
+ }
663
+ );
664
+ },
665
+ Chevron: ({ className: className2, orientation, ...props2 }) => {
666
+ if (orientation === "left") {
667
+ return /* @__PURE__ */ jsx(ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
668
+ }
669
+ if (orientation === "right") {
670
+ return /* @__PURE__ */ jsx(ChevronRightIcon, { className: cn("size-4", className2), ...props2 });
671
+ }
672
+ return /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
673
+ },
674
+ DayButton: ({ ...props2 }) => /* @__PURE__ */ jsx(CalendarDayButton, { locale, ...props2 }),
675
+ WeekNumber: ({ children, ...props2 }) => {
676
+ return /* @__PURE__ */ jsx("td", { ...props2, children: /* @__PURE__ */ jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) });
677
+ },
678
+ ...components
679
+ },
680
+ ...props
681
+ }
682
+ );
683
+ }
684
+ function CalendarDayButton({
685
+ className,
686
+ day,
687
+ modifiers,
688
+ locale,
689
+ ...props
690
+ }) {
691
+ const defaultClassNames = getDefaultClassNames();
692
+ const ref = React2.useRef(null);
693
+ React2.useEffect(() => {
694
+ if (modifiers.focused) ref.current?.focus();
695
+ }, [modifiers.focused]);
696
+ return /* @__PURE__ */ jsx(
697
+ Button,
698
+ {
699
+ ref,
700
+ variant: "ghost",
701
+ size: "icon",
702
+ "data-day": day.date.toLocaleDateString(locale?.code),
703
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
704
+ "data-range-start": modifiers.range_start,
705
+ "data-range-end": modifiers.range_end,
706
+ "data-range-middle": modifiers.range_middle,
707
+ className: cn(
708
+ "relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70",
709
+ defaultClassNames.day,
710
+ className
711
+ ),
712
+ ...props
713
+ }
714
+ );
715
+ }
716
+ function Card({
717
+ className,
718
+ size = "default",
719
+ ...props
720
+ }) {
721
+ return /* @__PURE__ */ jsx(
722
+ "div",
723
+ {
724
+ "data-slot": "card",
725
+ "data-size": size,
726
+ className: cn(
727
+ "group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
728
+ className
729
+ ),
730
+ ...props
731
+ }
732
+ );
733
+ }
734
+ function CardHeader({ className, ...props }) {
735
+ return /* @__PURE__ */ jsx(
736
+ "div",
737
+ {
738
+ "data-slot": "card-header",
739
+ className: cn(
740
+ "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",
741
+ className
742
+ ),
743
+ ...props
744
+ }
745
+ );
746
+ }
747
+ function CardTitle({ className, ...props }) {
748
+ return /* @__PURE__ */ jsx(
749
+ "div",
750
+ {
751
+ "data-slot": "card-title",
752
+ className: cn(
753
+ "font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",
754
+ className
755
+ ),
756
+ ...props
757
+ }
758
+ );
759
+ }
760
+ function CardDescription({ className, ...props }) {
761
+ return /* @__PURE__ */ jsx(
762
+ "div",
763
+ {
764
+ "data-slot": "card-description",
765
+ className: cn("text-sm text-muted-foreground", className),
766
+ ...props
767
+ }
768
+ );
769
+ }
770
+ function CardAction({ className, ...props }) {
771
+ return /* @__PURE__ */ jsx(
772
+ "div",
773
+ {
774
+ "data-slot": "card-action",
775
+ className: cn(
776
+ "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
777
+ className
778
+ ),
779
+ ...props
780
+ }
781
+ );
782
+ }
783
+ function CardContent({ className, ...props }) {
784
+ return /* @__PURE__ */ jsx(
785
+ "div",
786
+ {
787
+ "data-slot": "card-content",
788
+ className: cn("px-4 group-data-[size=sm]/card:px-3", className),
789
+ ...props
790
+ }
791
+ );
792
+ }
793
+ function CardFooter({ className, ...props }) {
794
+ return /* @__PURE__ */ jsx(
795
+ "div",
796
+ {
797
+ "data-slot": "card-footer",
798
+ className: cn(
799
+ "flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3",
800
+ className
801
+ ),
802
+ ...props
803
+ }
804
+ );
805
+ }
806
+ var CarouselContext = React2.createContext(null);
807
+ function useCarousel() {
808
+ const context = React2.useContext(CarouselContext);
809
+ if (!context) {
810
+ throw new Error("useCarousel must be used within a <Carousel />");
811
+ }
812
+ return context;
813
+ }
814
+ function Carousel({
815
+ orientation = "horizontal",
816
+ opts,
817
+ setApi,
818
+ plugins,
819
+ className,
820
+ children,
821
+ ...props
822
+ }) {
823
+ const [carouselRef, api] = useEmblaCarousel(
824
+ {
825
+ ...opts,
826
+ axis: orientation === "horizontal" ? "x" : "y"
827
+ },
828
+ plugins
829
+ );
830
+ const [canScrollPrev, setCanScrollPrev] = React2.useState(false);
831
+ const [canScrollNext, setCanScrollNext] = React2.useState(false);
832
+ const onSelect = React2.useCallback((api2) => {
833
+ if (!api2) return;
834
+ setCanScrollPrev(api2.canScrollPrev());
835
+ setCanScrollNext(api2.canScrollNext());
836
+ }, []);
837
+ const scrollPrev = React2.useCallback(() => {
838
+ api?.scrollPrev();
839
+ }, [api]);
840
+ const scrollNext = React2.useCallback(() => {
841
+ api?.scrollNext();
842
+ }, [api]);
843
+ const handleKeyDown = React2.useCallback(
844
+ (event) => {
845
+ if (event.key === "ArrowLeft") {
846
+ event.preventDefault();
847
+ scrollPrev();
848
+ } else if (event.key === "ArrowRight") {
849
+ event.preventDefault();
850
+ scrollNext();
851
+ }
852
+ },
853
+ [scrollPrev, scrollNext]
854
+ );
855
+ React2.useEffect(() => {
856
+ if (!api || !setApi) return;
857
+ setApi(api);
858
+ }, [api, setApi]);
859
+ React2.useEffect(() => {
860
+ if (!api) return;
861
+ onSelect(api);
862
+ api.on("reInit", onSelect);
863
+ api.on("select", onSelect);
864
+ return () => {
865
+ api?.off("select", onSelect);
866
+ };
867
+ }, [api, onSelect]);
868
+ return /* @__PURE__ */ jsx(
869
+ CarouselContext.Provider,
870
+ {
871
+ value: {
872
+ carouselRef,
873
+ api,
874
+ opts,
875
+ orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
876
+ scrollPrev,
877
+ scrollNext,
878
+ canScrollPrev,
879
+ canScrollNext
880
+ },
881
+ children: /* @__PURE__ */ jsx(
882
+ "div",
883
+ {
884
+ onKeyDownCapture: handleKeyDown,
885
+ className: cn("relative", className),
886
+ role: "region",
887
+ "aria-roledescription": "carousel",
888
+ "data-slot": "carousel",
889
+ ...props,
890
+ children
891
+ }
892
+ )
893
+ }
894
+ );
895
+ }
896
+ function CarouselContent({ className, ...props }) {
897
+ const { carouselRef, orientation } = useCarousel();
898
+ return /* @__PURE__ */ jsx(
899
+ "div",
900
+ {
901
+ ref: carouselRef,
902
+ className: "overflow-hidden",
903
+ "data-slot": "carousel-content",
904
+ children: /* @__PURE__ */ jsx(
905
+ "div",
906
+ {
907
+ className: cn(
908
+ "flex",
909
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
910
+ className
911
+ ),
912
+ ...props
913
+ }
914
+ )
915
+ }
916
+ );
917
+ }
918
+ function CarouselItem({ className, ...props }) {
919
+ const { orientation } = useCarousel();
920
+ return /* @__PURE__ */ jsx(
921
+ "div",
922
+ {
923
+ role: "group",
924
+ "aria-roledescription": "slide",
925
+ "data-slot": "carousel-item",
926
+ className: cn(
927
+ "min-w-0 shrink-0 grow-0 basis-full",
928
+ orientation === "horizontal" ? "pl-4" : "pt-4",
929
+ className
930
+ ),
931
+ ...props
932
+ }
933
+ );
934
+ }
935
+ function CarouselPrevious({
936
+ className,
937
+ variant = "outline",
938
+ size = "icon-sm",
939
+ ...props
940
+ }) {
941
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
942
+ return /* @__PURE__ */ jsxs(
943
+ Button,
944
+ {
945
+ "data-slot": "carousel-previous",
946
+ variant,
947
+ size,
948
+ className: cn(
949
+ "absolute touch-manipulation rounded-full",
950
+ orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
951
+ className
952
+ ),
953
+ disabled: !canScrollPrev,
954
+ onClick: scrollPrev,
955
+ ...props,
956
+ children: [
957
+ /* @__PURE__ */ jsx(ChevronLeftIcon, {}),
958
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
959
+ ]
960
+ }
961
+ );
962
+ }
963
+ function CarouselNext({
964
+ className,
965
+ variant = "outline",
966
+ size = "icon-sm",
967
+ ...props
968
+ }) {
969
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
970
+ return /* @__PURE__ */ jsxs(
971
+ Button,
972
+ {
973
+ "data-slot": "carousel-next",
974
+ variant,
975
+ size,
976
+ className: cn(
977
+ "absolute touch-manipulation rounded-full",
978
+ orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
979
+ className
980
+ ),
981
+ disabled: !canScrollNext,
982
+ onClick: scrollNext,
983
+ ...props,
984
+ children: [
985
+ /* @__PURE__ */ jsx(ChevronRightIcon, {}),
986
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
987
+ ]
988
+ }
989
+ );
990
+ }
991
+ var THEMES = { light: "", dark: ".dark" };
992
+ var INITIAL_DIMENSION = { width: 320, height: 200 };
993
+ var ChartContext = React2.createContext(null);
994
+ function useChart() {
995
+ const context = React2.useContext(ChartContext);
996
+ if (!context) {
997
+ throw new Error("useChart must be used within a <ChartContainer />");
998
+ }
999
+ return context;
1000
+ }
1001
+ function ChartContainer({
1002
+ id,
1003
+ className,
1004
+ children,
1005
+ config,
1006
+ initialDimension = INITIAL_DIMENSION,
1007
+ ...props
1008
+ }) {
1009
+ const uniqueId = React2.useId();
1010
+ const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
1011
+ return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
1012
+ "div",
1013
+ {
1014
+ "data-slot": "chart",
1015
+ "data-chart": chartId,
1016
+ className: cn(
1017
+ "flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
1018
+ className
1019
+ ),
1020
+ ...props,
1021
+ children: [
1022
+ /* @__PURE__ */ jsx(ChartStyle, { id: chartId, config }),
1023
+ /* @__PURE__ */ jsx(
1024
+ RechartsPrimitive.ResponsiveContainer,
1025
+ {
1026
+ initialDimension,
1027
+ children
1028
+ }
1029
+ )
1030
+ ]
1031
+ }
1032
+ ) });
1033
+ }
1034
+ var ChartStyle = ({ id, config }) => {
1035
+ const colorConfig = Object.entries(config).filter(
1036
+ ([, config2]) => config2.theme ?? config2.color
1037
+ );
1038
+ if (!colorConfig.length) {
1039
+ return null;
1040
+ }
1041
+ return /* @__PURE__ */ jsx(
1042
+ "style",
1043
+ {
1044
+ dangerouslySetInnerHTML: {
1045
+ __html: Object.entries(THEMES).map(
1046
+ ([theme, prefix]) => `
1047
+ ${prefix} [data-chart=${id}] {
1048
+ ${colorConfig.map(([key, itemConfig]) => {
1049
+ const color = itemConfig.theme?.[theme] ?? itemConfig.color;
1050
+ return color ? ` --color-${key}: ${color};` : null;
1051
+ }).join("\n")}
1052
+ }
1053
+ `
1054
+ ).join("\n")
1055
+ }
1056
+ }
1057
+ );
1058
+ };
1059
+ var ChartTooltip = RechartsPrimitive.Tooltip;
1060
+ function ChartTooltipContent({
1061
+ active,
1062
+ payload,
1063
+ className,
1064
+ indicator = "dot",
1065
+ hideLabel = false,
1066
+ hideIndicator = false,
1067
+ label,
1068
+ labelFormatter,
1069
+ labelClassName,
1070
+ formatter,
1071
+ color,
1072
+ nameKey,
1073
+ labelKey
1074
+ }) {
1075
+ const { config } = useChart();
1076
+ const tooltipLabel = React2.useMemo(() => {
1077
+ if (hideLabel || !payload?.length) {
1078
+ return null;
1079
+ }
1080
+ const [item] = payload;
1081
+ const key = `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`;
1082
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1083
+ const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
1084
+ if (labelFormatter) {
1085
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
1086
+ }
1087
+ if (!value) {
1088
+ return null;
1089
+ }
1090
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: value });
1091
+ }, [
1092
+ label,
1093
+ labelFormatter,
1094
+ payload,
1095
+ hideLabel,
1096
+ labelClassName,
1097
+ config,
1098
+ labelKey
1099
+ ]);
1100
+ if (!active || !payload?.length) {
1101
+ return null;
1102
+ }
1103
+ const nestLabel = payload.length === 1 && indicator !== "dot";
1104
+ return /* @__PURE__ */ jsxs(
1105
+ "div",
1106
+ {
1107
+ className: cn(
1108
+ "grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
1109
+ className
1110
+ ),
1111
+ children: [
1112
+ !nestLabel ? tooltipLabel : null,
1113
+ /* @__PURE__ */ jsx("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
1114
+ const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`;
1115
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1116
+ const indicatorColor = color ?? item.payload?.fill ?? item.color;
1117
+ return /* @__PURE__ */ jsx(
1118
+ "div",
1119
+ {
1120
+ className: cn(
1121
+ "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
1122
+ indicator === "dot" && "items-center"
1123
+ ),
1124
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [
1125
+ itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx(
1126
+ "div",
1127
+ {
1128
+ className: cn(
1129
+ "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
1130
+ {
1131
+ "h-2.5 w-2.5": indicator === "dot",
1132
+ "w-1": indicator === "line",
1133
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
1134
+ "my-0.5": nestLabel && indicator === "dashed"
1135
+ }
1136
+ ),
1137
+ style: {
1138
+ "--color-bg": indicatorColor,
1139
+ "--color-border": indicatorColor
1140
+ }
1141
+ }
1142
+ ),
1143
+ /* @__PURE__ */ jsxs(
1144
+ "div",
1145
+ {
1146
+ className: cn(
1147
+ "flex flex-1 justify-between leading-none",
1148
+ nestLabel ? "items-end" : "items-center"
1149
+ ),
1150
+ children: [
1151
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
1152
+ nestLabel ? tooltipLabel : null,
1153
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: itemConfig?.label ?? item.name })
1154
+ ] }),
1155
+ item.value != null && /* @__PURE__ */ jsx("span", { className: "font-mono font-medium text-foreground tabular-nums", children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value) })
1156
+ ]
1157
+ }
1158
+ )
1159
+ ] })
1160
+ },
1161
+ index
1162
+ );
1163
+ }) })
1164
+ ]
1165
+ }
1166
+ );
1167
+ }
1168
+ var ChartLegend = RechartsPrimitive.Legend;
1169
+ function ChartLegendContent({
1170
+ className,
1171
+ hideIcon = false,
1172
+ payload,
1173
+ verticalAlign = "bottom",
1174
+ nameKey
1175
+ }) {
1176
+ const { config } = useChart();
1177
+ if (!payload?.length) {
1178
+ return null;
1179
+ }
1180
+ return /* @__PURE__ */ jsx(
1181
+ "div",
1182
+ {
1183
+ className: cn(
1184
+ "flex items-center justify-center gap-4",
1185
+ verticalAlign === "top" ? "pb-3" : "pt-3",
1186
+ className
1187
+ ),
1188
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
1189
+ const key = `${nameKey ?? item.dataKey ?? "value"}`;
1190
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1191
+ return /* @__PURE__ */ jsxs(
1192
+ "div",
1193
+ {
1194
+ className: cn(
1195
+ "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
1196
+ ),
1197
+ children: [
1198
+ itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx(
1199
+ "div",
1200
+ {
1201
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
1202
+ style: {
1203
+ backgroundColor: item.color
1204
+ }
1205
+ }
1206
+ ),
1207
+ itemConfig?.label
1208
+ ]
1209
+ },
1210
+ index
1211
+ );
1212
+ })
1213
+ }
1214
+ );
1215
+ }
1216
+ function getPayloadConfigFromPayload(config, payload, key) {
1217
+ if (typeof payload !== "object" || payload === null) {
1218
+ return void 0;
1219
+ }
1220
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
1221
+ let configLabelKey = key;
1222
+ if (key in payload && typeof payload[key] === "string") {
1223
+ configLabelKey = payload[key];
1224
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
1225
+ configLabelKey = payloadPayload[key];
1226
+ }
1227
+ return configLabelKey in config ? config[configLabelKey] : config[key];
1228
+ }
1229
+ function Checkbox({
1230
+ className,
1231
+ ...props
1232
+ }) {
1233
+ return /* @__PURE__ */ jsx(
1234
+ Checkbox$1.Root,
1235
+ {
1236
+ "data-slot": "checkbox",
1237
+ className: cn(
1238
+ "peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
1239
+ className
1240
+ ),
1241
+ ...props,
1242
+ children: /* @__PURE__ */ jsx(
1243
+ Checkbox$1.Indicator,
1244
+ {
1245
+ "data-slot": "checkbox-indicator",
1246
+ className: "grid place-content-center text-current transition-none [&>svg]:size-3.5",
1247
+ children: /* @__PURE__ */ jsx(
1248
+ CheckIcon,
1249
+ {}
1250
+ )
1251
+ }
1252
+ )
1253
+ }
1254
+ );
1255
+ }
1256
+ function Collapsible({
1257
+ ...props
1258
+ }) {
1259
+ return /* @__PURE__ */ jsx(Collapsible$1.Root, { "data-slot": "collapsible", ...props });
1260
+ }
1261
+ function CollapsibleTrigger({
1262
+ ...props
1263
+ }) {
1264
+ return /* @__PURE__ */ jsx(
1265
+ Collapsible$1.CollapsibleTrigger,
1266
+ {
1267
+ "data-slot": "collapsible-trigger",
1268
+ ...props
1269
+ }
1270
+ );
1271
+ }
1272
+ function CollapsibleContent({
1273
+ ...props
1274
+ }) {
1275
+ return /* @__PURE__ */ jsx(
1276
+ Collapsible$1.CollapsibleContent,
1277
+ {
1278
+ "data-slot": "collapsible-content",
1279
+ ...props
1280
+ }
1281
+ );
1282
+ }
1283
+ function Dialog({
1284
+ ...props
1285
+ }) {
1286
+ return /* @__PURE__ */ jsx(Dialog$1.Root, { "data-slot": "dialog", ...props });
1287
+ }
1288
+ function DialogTrigger({
1289
+ ...props
1290
+ }) {
1291
+ return /* @__PURE__ */ jsx(Dialog$1.Trigger, { "data-slot": "dialog-trigger", ...props });
1292
+ }
1293
+ function DialogPortal({
1294
+ ...props
1295
+ }) {
1296
+ return /* @__PURE__ */ jsx(Dialog$1.Portal, { "data-slot": "dialog-portal", ...props });
1297
+ }
1298
+ function DialogClose({
1299
+ ...props
1300
+ }) {
1301
+ return /* @__PURE__ */ jsx(Dialog$1.Close, { "data-slot": "dialog-close", ...props });
1302
+ }
1303
+ function DialogOverlay({
1304
+ className,
1305
+ ...props
1306
+ }) {
1307
+ return /* @__PURE__ */ jsx(
1308
+ Dialog$1.Overlay,
1309
+ {
1310
+ "data-slot": "dialog-overlay",
1311
+ className: cn(
1312
+ "fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
1313
+ className
1314
+ ),
1315
+ ...props
1316
+ }
1317
+ );
1318
+ }
1319
+ function DialogContent({
1320
+ className,
1321
+ children,
1322
+ showCloseButton = true,
1323
+ ...props
1324
+ }) {
1325
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [
1326
+ /* @__PURE__ */ jsx(DialogOverlay, {}),
1327
+ /* @__PURE__ */ jsxs(
1328
+ Dialog$1.Content,
1329
+ {
1330
+ "data-slot": "dialog-content",
1331
+ className: cn(
1332
+ "fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
1333
+ className
1334
+ ),
1335
+ ...props,
1336
+ children: [
1337
+ children,
1338
+ showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, { "data-slot": "dialog-close", asChild: true, children: /* @__PURE__ */ jsxs(
1339
+ Button,
1340
+ {
1341
+ variant: "ghost",
1342
+ className: "absolute top-2 right-2",
1343
+ size: "icon-sm",
1344
+ children: [
1345
+ /* @__PURE__ */ jsx(
1346
+ XIcon,
1347
+ {}
1348
+ ),
1349
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
1350
+ ]
1351
+ }
1352
+ ) })
1353
+ ]
1354
+ }
1355
+ )
1356
+ ] });
1357
+ }
1358
+ function DialogHeader({ className, ...props }) {
1359
+ return /* @__PURE__ */ jsx(
1360
+ "div",
1361
+ {
1362
+ "data-slot": "dialog-header",
1363
+ className: cn("flex flex-col gap-2", className),
1364
+ ...props
1365
+ }
1366
+ );
1367
+ }
1368
+ function DialogFooter({
1369
+ className,
1370
+ showCloseButton = false,
1371
+ children,
1372
+ ...props
1373
+ }) {
1374
+ return /* @__PURE__ */ jsxs(
1375
+ "div",
1376
+ {
1377
+ "data-slot": "dialog-footer",
1378
+ className: cn(
1379
+ "-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end",
1380
+ className
1381
+ ),
1382
+ ...props,
1383
+ children: [
1384
+ children,
1385
+ showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { variant: "outline", children: "Close" }) })
1386
+ ]
1387
+ }
1388
+ );
1389
+ }
1390
+ function DialogTitle({
1391
+ className,
1392
+ ...props
1393
+ }) {
1394
+ return /* @__PURE__ */ jsx(
1395
+ Dialog$1.Title,
1396
+ {
1397
+ "data-slot": "dialog-title",
1398
+ className: cn(
1399
+ "font-heading text-base leading-none font-medium",
1400
+ className
1401
+ ),
1402
+ ...props
1403
+ }
1404
+ );
1405
+ }
1406
+ function DialogDescription({
1407
+ className,
1408
+ ...props
1409
+ }) {
1410
+ return /* @__PURE__ */ jsx(
1411
+ Dialog$1.Description,
1412
+ {
1413
+ "data-slot": "dialog-description",
1414
+ className: cn(
1415
+ "text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
1416
+ className
1417
+ ),
1418
+ ...props
1419
+ }
1420
+ );
1421
+ }
1422
+ function Input({ className, type, ...props }) {
1423
+ return /* @__PURE__ */ jsx(
1424
+ "input",
1425
+ {
1426
+ type,
1427
+ "data-slot": "input",
1428
+ className: cn(
1429
+ "h-10 w-full min-w-0 rounded-[3px] border border-[rgba(163,171,169,0.2)] bg-[#0A0F11] px-4 py-3 text-sm transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-[rgba(163,171,169,0.5)] focus-visible:border-[#ACC3B3] focus-visible:outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
1430
+ className
1431
+ ),
1432
+ ...props
1433
+ }
1434
+ );
1435
+ }
1436
+ function Textarea({ className, ...props }) {
1437
+ return /* @__PURE__ */ jsx(
1438
+ "textarea",
1439
+ {
1440
+ "data-slot": "textarea",
1441
+ className: cn(
1442
+ "flex field-sizing-content min-h-20 w-full rounded-[3px] border border-[rgba(163,171,169,0.2)] bg-[#0A0F11] px-4 py-3 text-sm transition-colors outline-none placeholder:text-[rgba(163,171,169,0.5)] focus-visible:border-[#ACC3B3] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",
1443
+ className
1444
+ ),
1445
+ ...props
1446
+ }
1447
+ );
1448
+ }
1449
+ function InputGroup({ className, ...props }) {
1450
+ return /* @__PURE__ */ jsx(
1451
+ "div",
1452
+ {
1453
+ "data-slot": "input-group",
1454
+ role: "group",
1455
+ className: cn(
1456
+ "group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5",
1457
+ className
1458
+ ),
1459
+ ...props
1460
+ }
1461
+ );
1462
+ }
1463
+ var inputGroupAddonVariants = cva(
1464
+ "flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4",
1465
+ {
1466
+ variants: {
1467
+ align: {
1468
+ "inline-start": "order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]",
1469
+ "inline-end": "order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]",
1470
+ "block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
1471
+ "block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"
1472
+ }
1473
+ },
1474
+ defaultVariants: {
1475
+ align: "inline-start"
1476
+ }
1477
+ }
1478
+ );
1479
+ function InputGroupAddon({
1480
+ className,
1481
+ align = "inline-start",
1482
+ ...props
1483
+ }) {
1484
+ return /* @__PURE__ */ jsx(
1485
+ "div",
1486
+ {
1487
+ role: "group",
1488
+ "data-slot": "input-group-addon",
1489
+ "data-align": align,
1490
+ className: cn(inputGroupAddonVariants({ align }), className),
1491
+ onClick: (e) => {
1492
+ if (e.target.closest("button")) {
1493
+ return;
1494
+ }
1495
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
1496
+ },
1497
+ ...props
1498
+ }
1499
+ );
1500
+ }
1501
+ cva(
1502
+ "flex items-center gap-2 text-sm shadow-none",
1503
+ {
1504
+ variants: {
1505
+ size: {
1506
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
1507
+ sm: "",
1508
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0",
1509
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
1510
+ }
1511
+ },
1512
+ defaultVariants: {
1513
+ size: "xs"
1514
+ }
1515
+ }
1516
+ );
1517
+ function Command({
1518
+ className,
1519
+ ...props
1520
+ }) {
1521
+ return /* @__PURE__ */ jsx(
1522
+ Command$1,
1523
+ {
1524
+ "data-slot": "command",
1525
+ className: cn(
1526
+ "flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground",
1527
+ className
1528
+ ),
1529
+ ...props
1530
+ }
1531
+ );
1532
+ }
1533
+ function CommandDialog({
1534
+ title = "Command Palette",
1535
+ description = "Search for a command to run...",
1536
+ children,
1537
+ className,
1538
+ showCloseButton = false,
1539
+ ...props
1540
+ }) {
1541
+ return /* @__PURE__ */ jsxs(Dialog, { ...props, children: [
1542
+ /* @__PURE__ */ jsxs(DialogHeader, { className: "sr-only", children: [
1543
+ /* @__PURE__ */ jsx(DialogTitle, { children: title }),
1544
+ /* @__PURE__ */ jsx(DialogDescription, { children: description })
1545
+ ] }),
1546
+ /* @__PURE__ */ jsx(
1547
+ DialogContent,
1548
+ {
1549
+ className: cn(
1550
+ "top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",
1551
+ className
1552
+ ),
1553
+ showCloseButton,
1554
+ children
1555
+ }
1556
+ )
1557
+ ] });
1558
+ }
1559
+ function CommandInput({
1560
+ className,
1561
+ ...props
1562
+ }) {
1563
+ return /* @__PURE__ */ jsx("div", { "data-slot": "command-input-wrapper", className: "p-1 pb-0", children: /* @__PURE__ */ jsxs(InputGroup, { className: "h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!", children: [
1564
+ /* @__PURE__ */ jsx(
1565
+ Command$1.Input,
1566
+ {
1567
+ "data-slot": "command-input",
1568
+ className: cn(
1569
+ "w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
1570
+ className
1571
+ ),
1572
+ ...props
1573
+ }
1574
+ ),
1575
+ /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })
1576
+ ] }) });
1577
+ }
1578
+ function CommandList({
1579
+ className,
1580
+ ...props
1581
+ }) {
1582
+ return /* @__PURE__ */ jsx(
1583
+ Command$1.List,
1584
+ {
1585
+ "data-slot": "command-list",
1586
+ className: cn(
1587
+ "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
1588
+ className
1589
+ ),
1590
+ ...props
1591
+ }
1592
+ );
1593
+ }
1594
+ function CommandEmpty({
1595
+ className,
1596
+ ...props
1597
+ }) {
1598
+ return /* @__PURE__ */ jsx(
1599
+ Command$1.Empty,
1600
+ {
1601
+ "data-slot": "command-empty",
1602
+ className: cn("py-6 text-center text-sm", className),
1603
+ ...props
1604
+ }
1605
+ );
1606
+ }
1607
+ function CommandGroup({
1608
+ className,
1609
+ ...props
1610
+ }) {
1611
+ return /* @__PURE__ */ jsx(
1612
+ Command$1.Group,
1613
+ {
1614
+ "data-slot": "command-group",
1615
+ className: cn(
1616
+ "overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground",
1617
+ className
1618
+ ),
1619
+ ...props
1620
+ }
1621
+ );
1622
+ }
1623
+ function CommandSeparator({
1624
+ className,
1625
+ ...props
1626
+ }) {
1627
+ return /* @__PURE__ */ jsx(
1628
+ Command$1.Separator,
1629
+ {
1630
+ "data-slot": "command-separator",
1631
+ className: cn("-mx-1 h-px bg-border", className),
1632
+ ...props
1633
+ }
1634
+ );
1635
+ }
1636
+ function CommandItem({
1637
+ className,
1638
+ children,
1639
+ ...props
1640
+ }) {
1641
+ return /* @__PURE__ */ jsxs(
1642
+ Command$1.Item,
1643
+ {
1644
+ "data-slot": "command-item",
1645
+ className: cn(
1646
+ "group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground",
1647
+ className
1648
+ ),
1649
+ ...props,
1650
+ children: [
1651
+ children,
1652
+ /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })
1653
+ ]
1654
+ }
1655
+ );
1656
+ }
1657
+ function CommandShortcut({
1658
+ className,
1659
+ ...props
1660
+ }) {
1661
+ return /* @__PURE__ */ jsx(
1662
+ "span",
1663
+ {
1664
+ "data-slot": "command-shortcut",
1665
+ className: cn(
1666
+ "ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground",
1667
+ className
1668
+ ),
1669
+ ...props
1670
+ }
1671
+ );
1672
+ }
1673
+ function ContextMenu({
1674
+ ...props
1675
+ }) {
1676
+ return /* @__PURE__ */ jsx(ContextMenu$1.Root, { "data-slot": "context-menu", ...props });
1677
+ }
1678
+ function ContextMenuTrigger({
1679
+ className,
1680
+ ...props
1681
+ }) {
1682
+ return /* @__PURE__ */ jsx(
1683
+ ContextMenu$1.Trigger,
1684
+ {
1685
+ "data-slot": "context-menu-trigger",
1686
+ className: cn("select-none", className),
1687
+ ...props
1688
+ }
1689
+ );
1690
+ }
1691
+ function ContextMenuSub({
1692
+ ...props
1693
+ }) {
1694
+ return /* @__PURE__ */ jsx(ContextMenu$1.Sub, { "data-slot": "context-menu-sub", ...props });
1695
+ }
1696
+ function ContextMenuRadioGroup({
1697
+ ...props
1698
+ }) {
1699
+ return /* @__PURE__ */ jsx(
1700
+ ContextMenu$1.RadioGroup,
1701
+ {
1702
+ "data-slot": "context-menu-radio-group",
1703
+ ...props
1704
+ }
1705
+ );
1706
+ }
1707
+ function ContextMenuContent({
1708
+ className,
1709
+ ...props
1710
+ }) {
1711
+ return /* @__PURE__ */ jsx(ContextMenu$1.Portal, { children: /* @__PURE__ */ jsx(
1712
+ ContextMenu$1.Content,
1713
+ {
1714
+ "data-slot": "context-menu-content",
1715
+ className: cn("z-50 max-h-(--radix-context-menu-content-available-height) min-w-36 origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
1716
+ ...props
1717
+ }
1718
+ ) });
1719
+ }
1720
+ function ContextMenuItem({
1721
+ className,
1722
+ inset,
1723
+ variant = "default",
1724
+ ...props
1725
+ }) {
1726
+ return /* @__PURE__ */ jsx(
1727
+ ContextMenu$1.Item,
1728
+ {
1729
+ "data-slot": "context-menu-item",
1730
+ "data-inset": inset,
1731
+ "data-variant": variant,
1732
+ className: cn(
1733
+ "group/context-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive",
1734
+ className
1735
+ ),
1736
+ ...props
1737
+ }
1738
+ );
1739
+ }
1740
+ function ContextMenuSubTrigger({
1741
+ className,
1742
+ inset,
1743
+ children,
1744
+ ...props
1745
+ }) {
1746
+ return /* @__PURE__ */ jsxs(
1747
+ ContextMenu$1.SubTrigger,
1748
+ {
1749
+ "data-slot": "context-menu-sub-trigger",
1750
+ "data-inset": inset,
1751
+ className: cn(
1752
+ "flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1753
+ className
1754
+ ),
1755
+ ...props,
1756
+ children: [
1757
+ children,
1758
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })
1759
+ ]
1760
+ }
1761
+ );
1762
+ }
1763
+ function ContextMenuSubContent({
1764
+ className,
1765
+ ...props
1766
+ }) {
1767
+ return /* @__PURE__ */ jsx(
1768
+ ContextMenu$1.SubContent,
1769
+ {
1770
+ "data-slot": "context-menu-sub-content",
1771
+ className: cn("z-50 min-w-32 origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-lg border bg-popover p-1 text-popover-foreground shadow-lg duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
1772
+ ...props
1773
+ }
1774
+ );
1775
+ }
1776
+ function ContextMenuCheckboxItem({
1777
+ className,
1778
+ children,
1779
+ checked,
1780
+ inset,
1781
+ ...props
1782
+ }) {
1783
+ return /* @__PURE__ */ jsxs(
1784
+ ContextMenu$1.CheckboxItem,
1785
+ {
1786
+ "data-slot": "context-menu-checkbox-item",
1787
+ "data-inset": inset,
1788
+ className: cn(
1789
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1790
+ className
1791
+ ),
1792
+ checked,
1793
+ ...props,
1794
+ children: [
1795
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2", children: /* @__PURE__ */ jsx(ContextMenu$1.ItemIndicator, { children: /* @__PURE__ */ jsx(
1796
+ CheckIcon,
1797
+ {}
1798
+ ) }) }),
1799
+ children
1800
+ ]
1801
+ }
1802
+ );
1803
+ }
1804
+ function ContextMenuRadioItem({
1805
+ className,
1806
+ children,
1807
+ inset,
1808
+ ...props
1809
+ }) {
1810
+ return /* @__PURE__ */ jsxs(
1811
+ ContextMenu$1.RadioItem,
1812
+ {
1813
+ "data-slot": "context-menu-radio-item",
1814
+ "data-inset": inset,
1815
+ className: cn(
1816
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1817
+ className
1818
+ ),
1819
+ ...props,
1820
+ children: [
1821
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2", children: /* @__PURE__ */ jsx(ContextMenu$1.ItemIndicator, { children: /* @__PURE__ */ jsx(
1822
+ CheckIcon,
1823
+ {}
1824
+ ) }) }),
1825
+ children
1826
+ ]
1827
+ }
1828
+ );
1829
+ }
1830
+ function ContextMenuLabel({
1831
+ className,
1832
+ inset,
1833
+ ...props
1834
+ }) {
1835
+ return /* @__PURE__ */ jsx(
1836
+ ContextMenu$1.Label,
1837
+ {
1838
+ "data-slot": "context-menu-label",
1839
+ "data-inset": inset,
1840
+ className: cn(
1841
+ "px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7",
1842
+ className
1843
+ ),
1844
+ ...props
1845
+ }
1846
+ );
1847
+ }
1848
+ function ContextMenuSeparator({
1849
+ className,
1850
+ ...props
1851
+ }) {
1852
+ return /* @__PURE__ */ jsx(
1853
+ ContextMenu$1.Separator,
1854
+ {
1855
+ "data-slot": "context-menu-separator",
1856
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1857
+ ...props
1858
+ }
1859
+ );
1860
+ }
1861
+ function ContextMenuShortcut({
1862
+ className,
1863
+ ...props
1864
+ }) {
1865
+ return /* @__PURE__ */ jsx(
1866
+ "span",
1867
+ {
1868
+ "data-slot": "context-menu-shortcut",
1869
+ className: cn(
1870
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/context-menu-item:text-accent-foreground",
1871
+ className
1872
+ ),
1873
+ ...props
1874
+ }
1875
+ );
1876
+ }
1877
+ function Drawer({
1878
+ ...props
1879
+ }) {
1880
+ return /* @__PURE__ */ jsx(Drawer$1.Root, { "data-slot": "drawer", ...props });
1881
+ }
1882
+ function DrawerTrigger({
1883
+ ...props
1884
+ }) {
1885
+ return /* @__PURE__ */ jsx(Drawer$1.Trigger, { "data-slot": "drawer-trigger", ...props });
1886
+ }
1887
+ function DrawerPortal({
1888
+ ...props
1889
+ }) {
1890
+ return /* @__PURE__ */ jsx(Drawer$1.Portal, { "data-slot": "drawer-portal", ...props });
1891
+ }
1892
+ function DrawerClose({
1893
+ ...props
1894
+ }) {
1895
+ return /* @__PURE__ */ jsx(Drawer$1.Close, { "data-slot": "drawer-close", ...props });
1896
+ }
1897
+ function DrawerOverlay({
1898
+ className,
1899
+ ...props
1900
+ }) {
1901
+ return /* @__PURE__ */ jsx(
1902
+ Drawer$1.Overlay,
1903
+ {
1904
+ "data-slot": "drawer-overlay",
1905
+ className: cn(
1906
+ "fixed inset-0 z-50 bg-black/10 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
1907
+ className
1908
+ ),
1909
+ ...props
1910
+ }
1911
+ );
1912
+ }
1913
+ function DrawerContent({
1914
+ className,
1915
+ children,
1916
+ ...props
1917
+ }) {
1918
+ return /* @__PURE__ */ jsxs(DrawerPortal, { "data-slot": "drawer-portal", children: [
1919
+ /* @__PURE__ */ jsx(DrawerOverlay, {}),
1920
+ /* @__PURE__ */ jsxs(
1921
+ Drawer$1.Content,
1922
+ {
1923
+ "data-slot": "drawer-content",
1924
+ className: cn(
1925
+ "group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-sm text-popover-foreground 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-xl data-[vaul-drawer-direction=bottom]:border-t 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]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r 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]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l 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-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
1926
+ className
1927
+ ),
1928
+ ...props,
1929
+ children: [
1930
+ /* @__PURE__ */ jsx("div", { className: "mx-auto mt-4 hidden h-1 w-[100px] shrink-0 rounded-full bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }),
1931
+ children
1932
+ ]
1933
+ }
1934
+ )
1935
+ ] });
1936
+ }
1937
+ function DrawerHeader({ className, ...props }) {
1938
+ return /* @__PURE__ */ jsx(
1939
+ "div",
1940
+ {
1941
+ "data-slot": "drawer-header",
1942
+ className: cn(
1943
+ "flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-0.5 md:text-left",
1944
+ className
1945
+ ),
1946
+ ...props
1947
+ }
1948
+ );
1949
+ }
1950
+ function DrawerFooter({ className, ...props }) {
1951
+ return /* @__PURE__ */ jsx(
1952
+ "div",
1953
+ {
1954
+ "data-slot": "drawer-footer",
1955
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
1956
+ ...props
1957
+ }
1958
+ );
1959
+ }
1960
+ function DrawerTitle({
1961
+ className,
1962
+ ...props
1963
+ }) {
1964
+ return /* @__PURE__ */ jsx(
1965
+ Drawer$1.Title,
1966
+ {
1967
+ "data-slot": "drawer-title",
1968
+ className: cn(
1969
+ "font-heading text-base font-medium text-foreground",
1970
+ className
1971
+ ),
1972
+ ...props
1973
+ }
1974
+ );
1975
+ }
1976
+ function DrawerDescription({
1977
+ className,
1978
+ ...props
1979
+ }) {
1980
+ return /* @__PURE__ */ jsx(
1981
+ Drawer$1.Description,
1982
+ {
1983
+ "data-slot": "drawer-description",
1984
+ className: cn("text-sm text-muted-foreground", className),
1985
+ ...props
1986
+ }
1987
+ );
1988
+ }
1989
+ function DropdownMenu({
1990
+ ...props
1991
+ }) {
1992
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Root, { "data-slot": "dropdown-menu", ...props });
1993
+ }
1994
+ function DropdownMenuPortal({
1995
+ ...props
1996
+ }) {
1997
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Portal, { "data-slot": "dropdown-menu-portal", ...props });
1998
+ }
1999
+ function DropdownMenuTrigger({
2000
+ ...props
2001
+ }) {
2002
+ return /* @__PURE__ */ jsx(
2003
+ DropdownMenu$1.Trigger,
2004
+ {
2005
+ "data-slot": "dropdown-menu-trigger",
2006
+ ...props
2007
+ }
2008
+ );
2009
+ }
2010
+ function DropdownMenuContent({
2011
+ className,
2012
+ align = "start",
2013
+ sideOffset = 4,
2014
+ ...props
2015
+ }) {
2016
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Portal, { children: /* @__PURE__ */ jsx(
2017
+ DropdownMenu$1.Content,
2018
+ {
2019
+ "data-slot": "dropdown-menu-content",
2020
+ sideOffset,
2021
+ align,
2022
+ className: cn("z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 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 data-[state=closed]:overflow-hidden data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
2023
+ ...props
2024
+ }
2025
+ ) });
2026
+ }
2027
+ function DropdownMenuGroup({
2028
+ ...props
2029
+ }) {
2030
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Group, { "data-slot": "dropdown-menu-group", ...props });
2031
+ }
2032
+ function DropdownMenuItem({
2033
+ className,
2034
+ inset,
2035
+ variant = "default",
2036
+ ...props
2037
+ }) {
2038
+ return /* @__PURE__ */ jsx(
2039
+ DropdownMenu$1.Item,
2040
+ {
2041
+ "data-slot": "dropdown-menu-item",
2042
+ "data-inset": inset,
2043
+ "data-variant": variant,
2044
+ className: cn(
2045
+ "group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
2046
+ className
2047
+ ),
2048
+ ...props
2049
+ }
2050
+ );
2051
+ }
2052
+ function DropdownMenuCheckboxItem({
2053
+ className,
2054
+ children,
2055
+ checked,
2056
+ inset,
2057
+ ...props
2058
+ }) {
2059
+ return /* @__PURE__ */ jsxs(
2060
+ DropdownMenu$1.CheckboxItem,
2061
+ {
2062
+ "data-slot": "dropdown-menu-checkbox-item",
2063
+ "data-inset": inset,
2064
+ className: cn(
2065
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2066
+ className
2067
+ ),
2068
+ checked,
2069
+ ...props,
2070
+ children: [
2071
+ /* @__PURE__ */ jsx(
2072
+ "span",
2073
+ {
2074
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
2075
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
2076
+ children: /* @__PURE__ */ jsx(DropdownMenu$1.ItemIndicator, { children: /* @__PURE__ */ jsx(
2077
+ CheckIcon,
2078
+ {}
2079
+ ) })
2080
+ }
2081
+ ),
2082
+ children
2083
+ ]
2084
+ }
2085
+ );
2086
+ }
2087
+ function DropdownMenuRadioGroup({
2088
+ ...props
2089
+ }) {
2090
+ return /* @__PURE__ */ jsx(
2091
+ DropdownMenu$1.RadioGroup,
2092
+ {
2093
+ "data-slot": "dropdown-menu-radio-group",
2094
+ ...props
2095
+ }
2096
+ );
2097
+ }
2098
+ function DropdownMenuRadioItem({
2099
+ className,
2100
+ children,
2101
+ inset,
2102
+ ...props
2103
+ }) {
2104
+ return /* @__PURE__ */ jsxs(
2105
+ DropdownMenu$1.RadioItem,
2106
+ {
2107
+ "data-slot": "dropdown-menu-radio-item",
2108
+ "data-inset": inset,
2109
+ className: cn(
2110
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2111
+ className
2112
+ ),
2113
+ ...props,
2114
+ children: [
2115
+ /* @__PURE__ */ jsx(
2116
+ "span",
2117
+ {
2118
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
2119
+ "data-slot": "dropdown-menu-radio-item-indicator",
2120
+ children: /* @__PURE__ */ jsx(DropdownMenu$1.ItemIndicator, { children: /* @__PURE__ */ jsx(
2121
+ CheckIcon,
2122
+ {}
2123
+ ) })
2124
+ }
2125
+ ),
2126
+ children
2127
+ ]
2128
+ }
2129
+ );
2130
+ }
2131
+ function DropdownMenuLabel({
2132
+ className,
2133
+ inset,
2134
+ ...props
2135
+ }) {
2136
+ return /* @__PURE__ */ jsx(
2137
+ DropdownMenu$1.Label,
2138
+ {
2139
+ "data-slot": "dropdown-menu-label",
2140
+ "data-inset": inset,
2141
+ className: cn(
2142
+ "px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7",
2143
+ className
2144
+ ),
2145
+ ...props
2146
+ }
2147
+ );
2148
+ }
2149
+ function DropdownMenuSeparator({
2150
+ className,
2151
+ ...props
2152
+ }) {
2153
+ return /* @__PURE__ */ jsx(
2154
+ DropdownMenu$1.Separator,
2155
+ {
2156
+ "data-slot": "dropdown-menu-separator",
2157
+ className: cn("-mx-1 my-1 h-px bg-border", className),
2158
+ ...props
2159
+ }
2160
+ );
2161
+ }
2162
+ function DropdownMenuShortcut({
2163
+ className,
2164
+ ...props
2165
+ }) {
2166
+ return /* @__PURE__ */ jsx(
2167
+ "span",
2168
+ {
2169
+ "data-slot": "dropdown-menu-shortcut",
2170
+ className: cn(
2171
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
2172
+ className
2173
+ ),
2174
+ ...props
2175
+ }
2176
+ );
2177
+ }
2178
+ function DropdownMenuSub({
2179
+ ...props
2180
+ }) {
2181
+ return /* @__PURE__ */ jsx(DropdownMenu$1.Sub, { "data-slot": "dropdown-menu-sub", ...props });
2182
+ }
2183
+ function DropdownMenuSubTrigger({
2184
+ className,
2185
+ inset,
2186
+ children,
2187
+ ...props
2188
+ }) {
2189
+ return /* @__PURE__ */ jsxs(
2190
+ DropdownMenu$1.SubTrigger,
2191
+ {
2192
+ "data-slot": "dropdown-menu-sub-trigger",
2193
+ "data-inset": inset,
2194
+ className: cn(
2195
+ "flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2196
+ className
2197
+ ),
2198
+ ...props,
2199
+ children: [
2200
+ children,
2201
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })
2202
+ ]
2203
+ }
2204
+ );
2205
+ }
2206
+ function DropdownMenuSubContent({
2207
+ className,
2208
+ ...props
2209
+ }) {
2210
+ return /* @__PURE__ */ jsx(
2211
+ DropdownMenu$1.SubContent,
2212
+ {
2213
+ "data-slot": "dropdown-menu-sub-content",
2214
+ className: cn("z-50 min-w-[96px] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
2215
+ ...props
2216
+ }
2217
+ );
2218
+ }
2219
+ function HoverCard({
2220
+ ...props
2221
+ }) {
2222
+ return /* @__PURE__ */ jsx(HoverCard$1.Root, { "data-slot": "hover-card", ...props });
2223
+ }
2224
+ function HoverCardTrigger({
2225
+ ...props
2226
+ }) {
2227
+ return /* @__PURE__ */ jsx(HoverCard$1.Trigger, { "data-slot": "hover-card-trigger", ...props });
2228
+ }
2229
+ function HoverCardContent({
2230
+ className,
2231
+ align = "center",
2232
+ sideOffset = 4,
2233
+ ...props
2234
+ }) {
2235
+ return /* @__PURE__ */ jsx(HoverCard$1.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsx(
2236
+ HoverCard$1.Content,
2237
+ {
2238
+ "data-slot": "hover-card-content",
2239
+ align,
2240
+ sideOffset,
2241
+ className: cn(
2242
+ "z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2243
+ className
2244
+ ),
2245
+ ...props
2246
+ }
2247
+ ) });
2248
+ }
2249
+ function InputOTP({
2250
+ className,
2251
+ containerClassName,
2252
+ ...props
2253
+ }) {
2254
+ return /* @__PURE__ */ jsx(
2255
+ OTPInput,
2256
+ {
2257
+ "data-slot": "input-otp",
2258
+ containerClassName: cn(
2259
+ "cn-input-otp flex items-center has-disabled:opacity-50",
2260
+ containerClassName
2261
+ ),
2262
+ spellCheck: false,
2263
+ className: cn("disabled:cursor-not-allowed", className),
2264
+ ...props
2265
+ }
2266
+ );
2267
+ }
2268
+ function InputOTPGroup({ className, ...props }) {
2269
+ return /* @__PURE__ */ jsx(
2270
+ "div",
2271
+ {
2272
+ "data-slot": "input-otp-group",
2273
+ className: cn(
2274
+ "flex items-center rounded-lg has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40",
2275
+ className
2276
+ ),
2277
+ ...props
2278
+ }
2279
+ );
2280
+ }
2281
+ function InputOTPSlot({
2282
+ index,
2283
+ className,
2284
+ ...props
2285
+ }) {
2286
+ const inputOTPContext = React2.useContext(OTPInputContext);
2287
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
2288
+ return /* @__PURE__ */ jsxs(
2289
+ "div",
2290
+ {
2291
+ "data-slot": "input-otp-slot",
2292
+ "data-active": isActive,
2293
+ className: cn(
2294
+ "relative flex size-8 items-center justify-center border-y border-r border-input text-sm transition-all outline-none first:rounded-l-lg first:border-l last:rounded-r-lg aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-3 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40",
2295
+ className
2296
+ ),
2297
+ ...props,
2298
+ children: [
2299
+ char,
2300
+ hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
2301
+ ]
2302
+ }
2303
+ );
2304
+ }
2305
+ function InputOTPSeparator({ ...props }) {
2306
+ return /* @__PURE__ */ jsx(
2307
+ "div",
2308
+ {
2309
+ "data-slot": "input-otp-separator",
2310
+ className: "flex items-center [&_svg:not([class*='size-'])]:size-4",
2311
+ role: "separator",
2312
+ ...props,
2313
+ children: /* @__PURE__ */ jsx(
2314
+ MinusIcon,
2315
+ {}
2316
+ )
2317
+ }
2318
+ );
2319
+ }
2320
+ function Label({
2321
+ className,
2322
+ ...props
2323
+ }) {
2324
+ return /* @__PURE__ */ jsx(
2325
+ Label$1.Root,
2326
+ {
2327
+ "data-slot": "label",
2328
+ className: cn(
2329
+ "flex items-center gap-2 text-[10px] font-mono leading-none tracking-[0.15em] uppercase text-[#A3ABA9] select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50 mb-2",
2330
+ className
2331
+ ),
2332
+ ...props
2333
+ }
2334
+ );
2335
+ }
2336
+ function Menubar({
2337
+ className,
2338
+ ...props
2339
+ }) {
2340
+ return /* @__PURE__ */ jsx(
2341
+ Menubar$1.Root,
2342
+ {
2343
+ "data-slot": "menubar",
2344
+ className: cn(
2345
+ "flex h-8 items-center gap-0.5 rounded-lg border p-[3px]",
2346
+ className
2347
+ ),
2348
+ ...props
2349
+ }
2350
+ );
2351
+ }
2352
+ function MenubarMenu({
2353
+ ...props
2354
+ }) {
2355
+ return /* @__PURE__ */ jsx(Menubar$1.Menu, { "data-slot": "menubar-menu", ...props });
2356
+ }
2357
+ function MenubarGroup({
2358
+ ...props
2359
+ }) {
2360
+ return /* @__PURE__ */ jsx(Menubar$1.Group, { "data-slot": "menubar-group", ...props });
2361
+ }
2362
+ function MenubarPortal({
2363
+ ...props
2364
+ }) {
2365
+ return /* @__PURE__ */ jsx(Menubar$1.Portal, { "data-slot": "menubar-portal", ...props });
2366
+ }
2367
+ function MenubarRadioGroup({
2368
+ ...props
2369
+ }) {
2370
+ return /* @__PURE__ */ jsx(Menubar$1.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
2371
+ }
2372
+ function MenubarTrigger({
2373
+ className,
2374
+ ...props
2375
+ }) {
2376
+ return /* @__PURE__ */ jsx(
2377
+ Menubar$1.Trigger,
2378
+ {
2379
+ "data-slot": "menubar-trigger",
2380
+ className: cn(
2381
+ "flex items-center rounded-sm px-1.5 py-[2px] text-sm font-medium outline-hidden select-none hover:bg-muted aria-expanded:bg-muted",
2382
+ className
2383
+ ),
2384
+ ...props
2385
+ }
2386
+ );
2387
+ }
2388
+ function MenubarContent({
2389
+ className,
2390
+ align = "start",
2391
+ alignOffset = -4,
2392
+ sideOffset = 8,
2393
+ ...props
2394
+ }) {
2395
+ return /* @__PURE__ */ jsx(MenubarPortal, { children: /* @__PURE__ */ jsx(
2396
+ Menubar$1.Content,
2397
+ {
2398
+ "data-slot": "menubar-content",
2399
+ align,
2400
+ alignOffset,
2401
+ sideOffset,
2402
+ className: cn("z-50 min-w-36 origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", className),
2403
+ ...props
2404
+ }
2405
+ ) });
2406
+ }
2407
+ function MenubarItem({
2408
+ className,
2409
+ inset,
2410
+ variant = "default",
2411
+ ...props
2412
+ }) {
2413
+ return /* @__PURE__ */ jsx(
2414
+ Menubar$1.Item,
2415
+ {
2416
+ "data-slot": "menubar-item",
2417
+ "data-inset": inset,
2418
+ "data-variant": variant,
2419
+ className: cn(
2420
+ "group/menubar-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive!",
2421
+ className
2422
+ ),
2423
+ ...props
2424
+ }
2425
+ );
2426
+ }
2427
+ function MenubarCheckboxItem({
2428
+ className,
2429
+ children,
2430
+ checked,
2431
+ inset,
2432
+ ...props
2433
+ }) {
2434
+ return /* @__PURE__ */ jsxs(
2435
+ Menubar$1.CheckboxItem,
2436
+ {
2437
+ "data-slot": "menubar-checkbox-item",
2438
+ "data-inset": inset,
2439
+ className: cn(
2440
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0",
2441
+ className
2442
+ ),
2443
+ checked,
2444
+ ...props,
2445
+ children: [
2446
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4", children: /* @__PURE__ */ jsx(Menubar$1.ItemIndicator, { children: /* @__PURE__ */ jsx(
2447
+ CheckIcon,
2448
+ {}
2449
+ ) }) }),
2450
+ children
2451
+ ]
2452
+ }
2453
+ );
2454
+ }
2455
+ function MenubarRadioItem({
2456
+ className,
2457
+ children,
2458
+ inset,
2459
+ ...props
2460
+ }) {
2461
+ return /* @__PURE__ */ jsxs(
2462
+ Menubar$1.RadioItem,
2463
+ {
2464
+ "data-slot": "menubar-radio-item",
2465
+ "data-inset": inset,
2466
+ className: cn(
2467
+ "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2468
+ className
2469
+ ),
2470
+ ...props,
2471
+ children: [
2472
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4", children: /* @__PURE__ */ jsx(Menubar$1.ItemIndicator, { children: /* @__PURE__ */ jsx(
2473
+ CheckIcon,
2474
+ {}
2475
+ ) }) }),
2476
+ children
2477
+ ]
2478
+ }
2479
+ );
2480
+ }
2481
+ function MenubarSeparator({
2482
+ className,
2483
+ ...props
2484
+ }) {
2485
+ return /* @__PURE__ */ jsx(
2486
+ Menubar$1.Separator,
2487
+ {
2488
+ "data-slot": "menubar-separator",
2489
+ className: cn("-mx-1 my-1 h-px bg-border", className),
2490
+ ...props
2491
+ }
2492
+ );
2493
+ }
2494
+ function MenubarShortcut({
2495
+ className,
2496
+ ...props
2497
+ }) {
2498
+ return /* @__PURE__ */ jsx(
2499
+ "span",
2500
+ {
2501
+ "data-slot": "menubar-shortcut",
2502
+ className: cn(
2503
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/menubar-item:text-accent-foreground",
2504
+ className
2505
+ ),
2506
+ ...props
2507
+ }
2508
+ );
2509
+ }
2510
+ function MenubarSub({
2511
+ ...props
2512
+ }) {
2513
+ return /* @__PURE__ */ jsx(Menubar$1.Sub, { "data-slot": "menubar-sub", ...props });
2514
+ }
2515
+ function MenubarSubTrigger({
2516
+ className,
2517
+ inset,
2518
+ children,
2519
+ ...props
2520
+ }) {
2521
+ return /* @__PURE__ */ jsxs(
2522
+ Menubar$1.SubTrigger,
2523
+ {
2524
+ "data-slot": "menubar-sub-trigger",
2525
+ "data-inset": inset,
2526
+ className: cn(
2527
+ "flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-7 data-open:bg-accent data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4",
2528
+ className
2529
+ ),
2530
+ ...props,
2531
+ children: [
2532
+ children,
2533
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto size-4" })
2534
+ ]
2535
+ }
2536
+ );
2537
+ }
2538
+ function MenubarSubContent({
2539
+ className,
2540
+ ...props
2541
+ }) {
2542
+ return /* @__PURE__ */ jsx(
2543
+ Menubar$1.SubContent,
2544
+ {
2545
+ "data-slot": "menubar-sub-content",
2546
+ className: cn("z-50 min-w-32 origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
2547
+ ...props
2548
+ }
2549
+ );
2550
+ }
2551
+ function NavigationMenu({
2552
+ className,
2553
+ children,
2554
+ viewport = true,
2555
+ ...props
2556
+ }) {
2557
+ return /* @__PURE__ */ jsxs(
2558
+ NavigationMenu$1.Root,
2559
+ {
2560
+ "data-slot": "navigation-menu",
2561
+ "data-viewport": viewport,
2562
+ className: cn(
2563
+ "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
2564
+ className
2565
+ ),
2566
+ ...props,
2567
+ children: [
2568
+ children,
2569
+ viewport && /* @__PURE__ */ jsx(NavigationMenuViewport, {})
2570
+ ]
2571
+ }
2572
+ );
2573
+ }
2574
+ function NavigationMenuList({
2575
+ className,
2576
+ ...props
2577
+ }) {
2578
+ return /* @__PURE__ */ jsx(
2579
+ NavigationMenu$1.List,
2580
+ {
2581
+ "data-slot": "navigation-menu-list",
2582
+ className: cn(
2583
+ "group flex flex-1 list-none items-center justify-center gap-0",
2584
+ className
2585
+ ),
2586
+ ...props
2587
+ }
2588
+ );
2589
+ }
2590
+ function NavigationMenuItem({
2591
+ className,
2592
+ ...props
2593
+ }) {
2594
+ return /* @__PURE__ */ jsx(
2595
+ NavigationMenu$1.Item,
2596
+ {
2597
+ "data-slot": "navigation-menu-item",
2598
+ className: cn("relative", className),
2599
+ ...props
2600
+ }
2601
+ );
2602
+ }
2603
+ var navigationMenuTriggerStyle = cva(
2604
+ "group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted"
2605
+ );
2606
+ function NavigationMenuTrigger({
2607
+ className,
2608
+ children,
2609
+ ...props
2610
+ }) {
2611
+ return /* @__PURE__ */ jsxs(
2612
+ NavigationMenu$1.Trigger,
2613
+ {
2614
+ "data-slot": "navigation-menu-trigger",
2615
+ className: cn(navigationMenuTriggerStyle(), "group", className),
2616
+ ...props,
2617
+ children: [
2618
+ children,
2619
+ " ",
2620
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180", "aria-hidden": "true" })
2621
+ ]
2622
+ }
2623
+ );
2624
+ }
2625
+ function NavigationMenuContent({
2626
+ className,
2627
+ ...props
2628
+ }) {
2629
+ return /* @__PURE__ */ jsx(
2630
+ NavigationMenu$1.Content,
2631
+ {
2632
+ "data-slot": "navigation-menu-content",
2633
+ className: cn(
2634
+ "top-0 left-0 w-full p-1 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:duration-300 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 data-[motion^=from-]:animate-in data-[motion^=from-]:fade-in data-[motion^=to-]:animate-out data-[motion^=to-]:fade-out **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95",
2635
+ className
2636
+ ),
2637
+ ...props
2638
+ }
2639
+ );
2640
+ }
2641
+ function NavigationMenuViewport({
2642
+ className,
2643
+ ...props
2644
+ }) {
2645
+ return /* @__PURE__ */ jsx(
2646
+ "div",
2647
+ {
2648
+ className: cn(
2649
+ "absolute top-full left-0 isolate z-50 flex justify-center"
2650
+ ),
2651
+ children: /* @__PURE__ */ jsx(
2652
+ NavigationMenu$1.Viewport,
2653
+ {
2654
+ "data-slot": "navigation-menu-viewport",
2655
+ className: cn(
2656
+ "origin-top-center relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden rounded-lg bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 duration-100 md:w-(--radix-navigation-menu-viewport-width) data-open:animate-in data-open:zoom-in-90 data-closed:animate-out data-closed:zoom-out-90",
2657
+ className
2658
+ ),
2659
+ ...props
2660
+ }
2661
+ )
2662
+ }
2663
+ );
2664
+ }
2665
+ function NavigationMenuLink({
2666
+ className,
2667
+ ...props
2668
+ }) {
2669
+ return /* @__PURE__ */ jsx(
2670
+ NavigationMenu$1.Link,
2671
+ {
2672
+ "data-slot": "navigation-menu-link",
2673
+ className: cn(
2674
+ "flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md data-active:bg-muted/50 data-active:hover:bg-muted data-active:focus:bg-muted [&_svg:not([class*='size-'])]:size-4",
2675
+ className
2676
+ ),
2677
+ ...props
2678
+ }
2679
+ );
2680
+ }
2681
+ function NavigationMenuIndicator({
2682
+ className,
2683
+ ...props
2684
+ }) {
2685
+ return /* @__PURE__ */ jsx(
2686
+ NavigationMenu$1.Indicator,
2687
+ {
2688
+ "data-slot": "navigation-menu-indicator",
2689
+ className: cn(
2690
+ "top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in",
2691
+ className
2692
+ ),
2693
+ ...props,
2694
+ children: /* @__PURE__ */ jsx("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
2695
+ }
2696
+ );
2697
+ }
2698
+ function Pagination({ className, ...props }) {
2699
+ return /* @__PURE__ */ jsx(
2700
+ "nav",
2701
+ {
2702
+ role: "navigation",
2703
+ "aria-label": "pagination",
2704
+ "data-slot": "pagination",
2705
+ className: cn("mx-auto flex w-full justify-center", className),
2706
+ ...props
2707
+ }
2708
+ );
2709
+ }
2710
+ function PaginationContent({
2711
+ className,
2712
+ ...props
2713
+ }) {
2714
+ return /* @__PURE__ */ jsx(
2715
+ "ul",
2716
+ {
2717
+ "data-slot": "pagination-content",
2718
+ className: cn("flex items-center gap-0.5", className),
2719
+ ...props
2720
+ }
2721
+ );
2722
+ }
2723
+ function PaginationItem({ ...props }) {
2724
+ return /* @__PURE__ */ jsx("li", { "data-slot": "pagination-item", ...props });
2725
+ }
2726
+ function PaginationLink({
2727
+ className,
2728
+ isActive,
2729
+ size = "icon",
2730
+ ...props
2731
+ }) {
2732
+ return /* @__PURE__ */ jsx(
2733
+ Button,
2734
+ {
2735
+ asChild: true,
2736
+ variant: isActive ? "outline" : "ghost",
2737
+ size,
2738
+ className: cn(className),
2739
+ children: /* @__PURE__ */ jsx(
2740
+ "a",
2741
+ {
2742
+ "aria-current": isActive ? "page" : void 0,
2743
+ "data-slot": "pagination-link",
2744
+ "data-active": isActive,
2745
+ ...props
2746
+ }
2747
+ )
2748
+ }
2749
+ );
2750
+ }
2751
+ function PaginationPrevious({
2752
+ className,
2753
+ text = "Previous",
2754
+ ...props
2755
+ }) {
2756
+ return /* @__PURE__ */ jsxs(
2757
+ PaginationLink,
2758
+ {
2759
+ "aria-label": "Go to previous page",
2760
+ size: "default",
2761
+ className: cn("pl-1.5!", className),
2762
+ ...props,
2763
+ children: [
2764
+ /* @__PURE__ */ jsx(ChevronLeftIcon, { "data-icon": "inline-start" }),
2765
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: text })
2766
+ ]
2767
+ }
2768
+ );
2769
+ }
2770
+ function PaginationNext({
2771
+ className,
2772
+ text = "Next",
2773
+ ...props
2774
+ }) {
2775
+ return /* @__PURE__ */ jsxs(
2776
+ PaginationLink,
2777
+ {
2778
+ "aria-label": "Go to next page",
2779
+ size: "default",
2780
+ className: cn("pr-1.5!", className),
2781
+ ...props,
2782
+ children: [
2783
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: text }),
2784
+ /* @__PURE__ */ jsx(ChevronRightIcon, { "data-icon": "inline-end" })
2785
+ ]
2786
+ }
2787
+ );
2788
+ }
2789
+ function PaginationEllipsis({
2790
+ className,
2791
+ ...props
2792
+ }) {
2793
+ return /* @__PURE__ */ jsxs(
2794
+ "span",
2795
+ {
2796
+ "aria-hidden": true,
2797
+ "data-slot": "pagination-ellipsis",
2798
+ className: cn(
2799
+ "flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
2800
+ className
2801
+ ),
2802
+ ...props,
2803
+ children: [
2804
+ /* @__PURE__ */ jsx(
2805
+ MoreHorizontalIcon,
2806
+ {}
2807
+ ),
2808
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More pages" })
2809
+ ]
2810
+ }
2811
+ );
2812
+ }
2813
+ function Popover({
2814
+ ...props
2815
+ }) {
2816
+ return /* @__PURE__ */ jsx(Popover$1.Root, { "data-slot": "popover", ...props });
2817
+ }
2818
+ function PopoverTrigger({
2819
+ ...props
2820
+ }) {
2821
+ return /* @__PURE__ */ jsx(Popover$1.Trigger, { "data-slot": "popover-trigger", ...props });
2822
+ }
2823
+ function PopoverContent({
2824
+ className,
2825
+ align = "center",
2826
+ sideOffset = 4,
2827
+ ...props
2828
+ }) {
2829
+ return /* @__PURE__ */ jsx(Popover$1.Portal, { children: /* @__PURE__ */ jsx(
2830
+ Popover$1.Content,
2831
+ {
2832
+ "data-slot": "popover-content",
2833
+ align,
2834
+ sideOffset,
2835
+ className: cn(
2836
+ "z-50 flex w-72 origin-(--radix-popover-content-transform-origin) flex-col gap-2.5 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2837
+ className
2838
+ ),
2839
+ ...props
2840
+ }
2841
+ ) });
2842
+ }
2843
+ function PopoverAnchor({
2844
+ ...props
2845
+ }) {
2846
+ return /* @__PURE__ */ jsx(Popover$1.Anchor, { "data-slot": "popover-anchor", ...props });
2847
+ }
2848
+ function Progress({
2849
+ className,
2850
+ value,
2851
+ ...props
2852
+ }) {
2853
+ return /* @__PURE__ */ jsx(
2854
+ Progress$1.Root,
2855
+ {
2856
+ "data-slot": "progress",
2857
+ className: cn(
2858
+ "relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted",
2859
+ className
2860
+ ),
2861
+ ...props,
2862
+ children: /* @__PURE__ */ jsx(
2863
+ Progress$1.Indicator,
2864
+ {
2865
+ "data-slot": "progress-indicator",
2866
+ className: "size-full flex-1 bg-primary transition-all",
2867
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
2868
+ }
2869
+ )
2870
+ }
2871
+ );
2872
+ }
2873
+ function RadioGroup({
2874
+ className,
2875
+ ...props
2876
+ }) {
2877
+ return /* @__PURE__ */ jsx(
2878
+ RadioGroup$1.Root,
2879
+ {
2880
+ "data-slot": "radio-group",
2881
+ className: cn("grid w-full gap-2", className),
2882
+ ...props
2883
+ }
2884
+ );
2885
+ }
2886
+ function RadioGroupItem({
2887
+ className,
2888
+ ...props
2889
+ }) {
2890
+ return /* @__PURE__ */ jsx(
2891
+ RadioGroup$1.Item,
2892
+ {
2893
+ "data-slot": "radio-group-item",
2894
+ className: cn(
2895
+ "group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
2896
+ className
2897
+ ),
2898
+ ...props,
2899
+ children: /* @__PURE__ */ jsx(
2900
+ RadioGroup$1.Indicator,
2901
+ {
2902
+ "data-slot": "radio-group-indicator",
2903
+ className: "flex size-4 items-center justify-center",
2904
+ children: /* @__PURE__ */ jsx("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" })
2905
+ }
2906
+ )
2907
+ }
2908
+ );
2909
+ }
2910
+ function ResizablePanelGroup({
2911
+ className,
2912
+ ...props
2913
+ }) {
2914
+ return /* @__PURE__ */ jsx(
2915
+ ResizablePrimitive.Group,
2916
+ {
2917
+ "data-slot": "resizable-panel-group",
2918
+ className: cn(
2919
+ "flex h-full w-full aria-[orientation=vertical]:flex-col",
2920
+ className
2921
+ ),
2922
+ ...props
2923
+ }
2924
+ );
2925
+ }
2926
+ function ResizablePanel({ ...props }) {
2927
+ return /* @__PURE__ */ jsx(ResizablePrimitive.Panel, { "data-slot": "resizable-panel", ...props });
2928
+ }
2929
+ function ResizableHandle({
2930
+ withHandle,
2931
+ className,
2932
+ ...props
2933
+ }) {
2934
+ return /* @__PURE__ */ jsx(
2935
+ ResizablePrimitive.Separator,
2936
+ {
2937
+ "data-slot": "resizable-handle",
2938
+ className: cn(
2939
+ "relative flex w-px items-center justify-center bg-border ring-offset-background 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-ring focus-visible:outline-hidden aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90",
2940
+ className
2941
+ ),
2942
+ ...props,
2943
+ children: withHandle && /* @__PURE__ */ jsx("div", { className: "z-10 flex h-6 w-1 shrink-0 rounded-lg bg-border" })
2944
+ }
2945
+ );
2946
+ }
2947
+ function ScrollArea({
2948
+ className,
2949
+ children,
2950
+ ...props
2951
+ }) {
2952
+ return /* @__PURE__ */ jsxs(
2953
+ ScrollArea$1.Root,
2954
+ {
2955
+ "data-slot": "scroll-area",
2956
+ className: cn("relative", className),
2957
+ ...props,
2958
+ children: [
2959
+ /* @__PURE__ */ jsx(
2960
+ ScrollArea$1.Viewport,
2961
+ {
2962
+ "data-slot": "scroll-area-viewport",
2963
+ className: "size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",
2964
+ children
2965
+ }
2966
+ ),
2967
+ /* @__PURE__ */ jsx(ScrollBar, {}),
2968
+ /* @__PURE__ */ jsx(ScrollArea$1.Corner, {})
2969
+ ]
2970
+ }
2971
+ );
2972
+ }
2973
+ function ScrollBar({
2974
+ className,
2975
+ orientation = "vertical",
2976
+ ...props
2977
+ }) {
2978
+ return /* @__PURE__ */ jsx(
2979
+ ScrollArea$1.ScrollAreaScrollbar,
2980
+ {
2981
+ "data-slot": "scroll-area-scrollbar",
2982
+ "data-orientation": orientation,
2983
+ orientation,
2984
+ className: cn(
2985
+ "flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",
2986
+ className
2987
+ ),
2988
+ ...props,
2989
+ children: /* @__PURE__ */ jsx(
2990
+ ScrollArea$1.ScrollAreaThumb,
2991
+ {
2992
+ "data-slot": "scroll-area-thumb",
2993
+ className: "relative flex-1 rounded-full bg-border"
2994
+ }
2995
+ )
2996
+ }
2997
+ );
2998
+ }
2999
+ function Select({
3000
+ ...props
3001
+ }) {
3002
+ return /* @__PURE__ */ jsx(Select$1.Root, { "data-slot": "select", ...props });
3003
+ }
3004
+ function SelectGroup({
3005
+ className,
3006
+ ...props
3007
+ }) {
3008
+ return /* @__PURE__ */ jsx(
3009
+ Select$1.Group,
3010
+ {
3011
+ "data-slot": "select-group",
3012
+ className: cn("scroll-my-1 p-1", className),
3013
+ ...props
3014
+ }
3015
+ );
3016
+ }
3017
+ function SelectValue({
3018
+ ...props
3019
+ }) {
3020
+ return /* @__PURE__ */ jsx(Select$1.Value, { "data-slot": "select-value", ...props });
3021
+ }
3022
+ function SelectTrigger({
3023
+ className,
3024
+ size = "default",
3025
+ children,
3026
+ ...props
3027
+ }) {
3028
+ return /* @__PURE__ */ jsxs(
3029
+ Select$1.Trigger,
3030
+ {
3031
+ "data-slot": "select-trigger",
3032
+ "data-size": size,
3033
+ className: cn(
3034
+ "flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3035
+ className
3036
+ ),
3037
+ ...props,
3038
+ children: [
3039
+ children,
3040
+ /* @__PURE__ */ jsx(Select$1.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" }) })
3041
+ ]
3042
+ }
3043
+ );
3044
+ }
3045
+ function SelectContent({
3046
+ className,
3047
+ children,
3048
+ position = "item-aligned",
3049
+ align = "center",
3050
+ ...props
3051
+ }) {
3052
+ return /* @__PURE__ */ jsx(Select$1.Portal, { children: /* @__PURE__ */ jsxs(
3053
+ Select$1.Content,
3054
+ {
3055
+ "data-slot": "select-content",
3056
+ "data-align-trigger": position === "item-aligned",
3057
+ className: cn("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className),
3058
+ position,
3059
+ align,
3060
+ ...props,
3061
+ children: [
3062
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
3063
+ /* @__PURE__ */ jsx(
3064
+ Select$1.Viewport,
3065
+ {
3066
+ "data-position": position,
3067
+ className: cn(
3068
+ "data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)",
3069
+ position === "popper" && ""
3070
+ ),
3071
+ children
3072
+ }
3073
+ ),
3074
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
3075
+ ]
3076
+ }
3077
+ ) });
3078
+ }
3079
+ function SelectLabel({
3080
+ className,
3081
+ ...props
3082
+ }) {
3083
+ return /* @__PURE__ */ jsx(
3084
+ Select$1.Label,
3085
+ {
3086
+ "data-slot": "select-label",
3087
+ className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
3088
+ ...props
3089
+ }
3090
+ );
3091
+ }
3092
+ function SelectItem({
3093
+ className,
3094
+ children,
3095
+ ...props
3096
+ }) {
3097
+ return /* @__PURE__ */ jsxs(
3098
+ Select$1.Item,
3099
+ {
3100
+ "data-slot": "select-item",
3101
+ className: cn(
3102
+ "relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
3103
+ className
3104
+ ),
3105
+ ...props,
3106
+ children: [
3107
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx(Select$1.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" }) }) }),
3108
+ /* @__PURE__ */ jsx(Select$1.ItemText, { children })
3109
+ ]
3110
+ }
3111
+ );
3112
+ }
3113
+ function SelectSeparator({
3114
+ className,
3115
+ ...props
3116
+ }) {
3117
+ return /* @__PURE__ */ jsx(
3118
+ Select$1.Separator,
3119
+ {
3120
+ "data-slot": "select-separator",
3121
+ className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
3122
+ ...props
3123
+ }
3124
+ );
3125
+ }
3126
+ function SelectScrollUpButton({
3127
+ className,
3128
+ ...props
3129
+ }) {
3130
+ return /* @__PURE__ */ jsx(
3131
+ Select$1.ScrollUpButton,
3132
+ {
3133
+ "data-slot": "select-scroll-up-button",
3134
+ className: cn(
3135
+ "z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
3136
+ className
3137
+ ),
3138
+ ...props,
3139
+ children: /* @__PURE__ */ jsx(
3140
+ ChevronUpIcon,
3141
+ {}
3142
+ )
3143
+ }
3144
+ );
3145
+ }
3146
+ function SelectScrollDownButton({
3147
+ className,
3148
+ ...props
3149
+ }) {
3150
+ return /* @__PURE__ */ jsx(
3151
+ Select$1.ScrollDownButton,
3152
+ {
3153
+ "data-slot": "select-scroll-down-button",
3154
+ className: cn(
3155
+ "z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",
3156
+ className
3157
+ ),
3158
+ ...props,
3159
+ children: /* @__PURE__ */ jsx(
3160
+ ChevronDownIcon,
3161
+ {}
3162
+ )
3163
+ }
3164
+ );
3165
+ }
3166
+ function Separator2({
3167
+ className,
3168
+ orientation = "horizontal",
3169
+ decorative = true,
3170
+ ...props
3171
+ }) {
3172
+ return /* @__PURE__ */ jsx(
3173
+ Separator.Root,
3174
+ {
3175
+ "data-slot": "separator",
3176
+ decorative,
3177
+ orientation,
3178
+ className: cn(
3179
+ "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
3180
+ className
3181
+ ),
3182
+ ...props
3183
+ }
3184
+ );
3185
+ }
3186
+ function Sheet({ ...props }) {
3187
+ return /* @__PURE__ */ jsx(Dialog$1.Root, { "data-slot": "sheet", ...props });
3188
+ }
3189
+ function SheetTrigger({
3190
+ ...props
3191
+ }) {
3192
+ return /* @__PURE__ */ jsx(Dialog$1.Trigger, { "data-slot": "sheet-trigger", ...props });
3193
+ }
3194
+ function SheetClose({
3195
+ ...props
3196
+ }) {
3197
+ return /* @__PURE__ */ jsx(Dialog$1.Close, { "data-slot": "sheet-close", ...props });
3198
+ }
3199
+ function SheetPortal({
3200
+ ...props
3201
+ }) {
3202
+ return /* @__PURE__ */ jsx(Dialog$1.Portal, { "data-slot": "sheet-portal", ...props });
3203
+ }
3204
+ function SheetOverlay({
3205
+ className,
3206
+ ...props
3207
+ }) {
3208
+ return /* @__PURE__ */ jsx(
3209
+ Dialog$1.Overlay,
3210
+ {
3211
+ "data-slot": "sheet-overlay",
3212
+ className: cn(
3213
+ "fixed inset-0 z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
3214
+ className
3215
+ ),
3216
+ ...props
3217
+ }
3218
+ );
3219
+ }
3220
+ function SheetContent({
3221
+ className,
3222
+ children,
3223
+ side = "right",
3224
+ showCloseButton = true,
3225
+ ...props
3226
+ }) {
3227
+ return /* @__PURE__ */ jsxs(SheetPortal, { children: [
3228
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
3229
+ /* @__PURE__ */ jsxs(
3230
+ Dialog$1.Content,
3231
+ {
3232
+ "data-slot": "sheet-content",
3233
+ "data-side": side,
3234
+ className: cn(
3235
+ "fixed z-50 flex flex-col gap-4 bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10",
3236
+ className
3237
+ ),
3238
+ ...props,
3239
+ children: [
3240
+ children,
3241
+ showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, { "data-slot": "sheet-close", asChild: true, children: /* @__PURE__ */ jsxs(
3242
+ Button,
3243
+ {
3244
+ variant: "ghost",
3245
+ className: "absolute top-3 right-3",
3246
+ size: "icon-sm",
3247
+ children: [
3248
+ /* @__PURE__ */ jsx(
3249
+ XIcon,
3250
+ {}
3251
+ ),
3252
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
3253
+ ]
3254
+ }
3255
+ ) })
3256
+ ]
3257
+ }
3258
+ )
3259
+ ] });
3260
+ }
3261
+ function SheetHeader({ className, ...props }) {
3262
+ return /* @__PURE__ */ jsx(
3263
+ "div",
3264
+ {
3265
+ "data-slot": "sheet-header",
3266
+ className: cn("flex flex-col gap-0.5 p-4", className),
3267
+ ...props
3268
+ }
3269
+ );
3270
+ }
3271
+ function SheetFooter({ className, ...props }) {
3272
+ return /* @__PURE__ */ jsx(
3273
+ "div",
3274
+ {
3275
+ "data-slot": "sheet-footer",
3276
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
3277
+ ...props
3278
+ }
3279
+ );
3280
+ }
3281
+ function SheetTitle({
3282
+ className,
3283
+ ...props
3284
+ }) {
3285
+ return /* @__PURE__ */ jsx(
3286
+ Dialog$1.Title,
3287
+ {
3288
+ "data-slot": "sheet-title",
3289
+ className: cn(
3290
+ "font-heading text-base font-medium text-foreground",
3291
+ className
3292
+ ),
3293
+ ...props
3294
+ }
3295
+ );
3296
+ }
3297
+ function SheetDescription({
3298
+ className,
3299
+ ...props
3300
+ }) {
3301
+ return /* @__PURE__ */ jsx(
3302
+ Dialog$1.Description,
3303
+ {
3304
+ "data-slot": "sheet-description",
3305
+ className: cn("text-sm text-muted-foreground", className),
3306
+ ...props
3307
+ }
3308
+ );
3309
+ }
3310
+ function Skeleton({ className, ...props }) {
3311
+ return /* @__PURE__ */ jsx(
3312
+ "div",
3313
+ {
3314
+ "data-slot": "skeleton",
3315
+ className: cn("animate-pulse rounded-md bg-muted", className),
3316
+ ...props
3317
+ }
3318
+ );
3319
+ }
3320
+ function Slider({
3321
+ className,
3322
+ defaultValue,
3323
+ value,
3324
+ min = 0,
3325
+ max = 100,
3326
+ ...props
3327
+ }) {
3328
+ const _values = React2.useMemo(
3329
+ () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
3330
+ [value, defaultValue, min, max]
3331
+ );
3332
+ return /* @__PURE__ */ jsxs(
3333
+ Slider$1.Root,
3334
+ {
3335
+ "data-slot": "slider",
3336
+ defaultValue,
3337
+ value,
3338
+ min,
3339
+ max,
3340
+ className: cn(
3341
+ "relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:min-h-40 data-vertical:w-auto data-vertical:flex-col",
3342
+ className
3343
+ ),
3344
+ ...props,
3345
+ children: [
3346
+ /* @__PURE__ */ jsx(
3347
+ Slider$1.Track,
3348
+ {
3349
+ "data-slot": "slider-track",
3350
+ className: "relative grow overflow-hidden rounded-full bg-muted data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1",
3351
+ children: /* @__PURE__ */ jsx(
3352
+ Slider$1.Range,
3353
+ {
3354
+ "data-slot": "slider-range",
3355
+ className: "absolute bg-primary select-none data-horizontal:h-full data-vertical:w-full"
3356
+ }
3357
+ )
3358
+ }
3359
+ ),
3360
+ Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx(
3361
+ Slider$1.Thumb,
3362
+ {
3363
+ "data-slot": "slider-thumb",
3364
+ className: "relative block size-3 shrink-0 rounded-full border border-ring bg-white ring-ring/50 transition-[color,box-shadow] select-none after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3 disabled:pointer-events-none disabled:opacity-50"
3365
+ },
3366
+ index
3367
+ ))
3368
+ ]
3369
+ }
3370
+ );
3371
+ }
3372
+ var Toaster = ({ ...props }) => {
3373
+ const { theme = "system" } = useTheme();
3374
+ return /* @__PURE__ */ jsx(
3375
+ Toaster$1,
3376
+ {
3377
+ theme,
3378
+ className: "toaster group",
3379
+ icons: {
3380
+ success: /* @__PURE__ */ jsx(CircleCheckIcon, { className: "size-4" }),
3381
+ info: /* @__PURE__ */ jsx(InfoIcon, { className: "size-4" }),
3382
+ warning: /* @__PURE__ */ jsx(TriangleAlertIcon, { className: "size-4" }),
3383
+ error: /* @__PURE__ */ jsx(OctagonXIcon, { className: "size-4" }),
3384
+ loading: /* @__PURE__ */ jsx(Loader2Icon, { className: "size-4 animate-spin" })
3385
+ },
3386
+ style: {
3387
+ "--normal-bg": "var(--popover)",
3388
+ "--normal-text": "var(--popover-foreground)",
3389
+ "--normal-border": "var(--border)",
3390
+ "--border-radius": "var(--radius)"
3391
+ },
3392
+ toastOptions: {
3393
+ classNames: {
3394
+ toast: "cn-toast"
3395
+ }
3396
+ },
3397
+ ...props
3398
+ }
3399
+ );
3400
+ };
3401
+ function Switch({
3402
+ className,
3403
+ size = "default",
3404
+ ...props
3405
+ }) {
3406
+ return /* @__PURE__ */ jsx(
3407
+ Switch$1.Root,
3408
+ {
3409
+ "data-slot": "switch",
3410
+ "data-size": size,
3411
+ className: cn(
3412
+ "peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",
3413
+ className
3414
+ ),
3415
+ ...props,
3416
+ children: /* @__PURE__ */ jsx(
3417
+ Switch$1.Thumb,
3418
+ {
3419
+ "data-slot": "switch-thumb",
3420
+ className: "pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground"
3421
+ }
3422
+ )
3423
+ }
3424
+ );
3425
+ }
3426
+ function Table({ className, ...props }) {
3427
+ return /* @__PURE__ */ jsx(
3428
+ "div",
3429
+ {
3430
+ "data-slot": "table-container",
3431
+ className: "relative w-full overflow-x-auto",
3432
+ children: /* @__PURE__ */ jsx(
3433
+ "table",
3434
+ {
3435
+ "data-slot": "table",
3436
+ className: cn("w-full caption-bottom text-sm", className),
3437
+ ...props
3438
+ }
3439
+ )
3440
+ }
3441
+ );
3442
+ }
3443
+ function TableHeader({ className, ...props }) {
3444
+ return /* @__PURE__ */ jsx(
3445
+ "thead",
3446
+ {
3447
+ "data-slot": "table-header",
3448
+ className: cn("[&_tr]:border-b", className),
3449
+ ...props
3450
+ }
3451
+ );
3452
+ }
3453
+ function TableBody({ className, ...props }) {
3454
+ return /* @__PURE__ */ jsx(
3455
+ "tbody",
3456
+ {
3457
+ "data-slot": "table-body",
3458
+ className: cn("[&_tr:last-child]:border-0", className),
3459
+ ...props
3460
+ }
3461
+ );
3462
+ }
3463
+ function TableFooter({ className, ...props }) {
3464
+ return /* @__PURE__ */ jsx(
3465
+ "tfoot",
3466
+ {
3467
+ "data-slot": "table-footer",
3468
+ className: cn(
3469
+ "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
3470
+ className
3471
+ ),
3472
+ ...props
3473
+ }
3474
+ );
3475
+ }
3476
+ function TableRow({ className, ...props }) {
3477
+ return /* @__PURE__ */ jsx(
3478
+ "tr",
3479
+ {
3480
+ "data-slot": "table-row",
3481
+ className: cn(
3482
+ "border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",
3483
+ className
3484
+ ),
3485
+ ...props
3486
+ }
3487
+ );
3488
+ }
3489
+ function TableHead({ className, ...props }) {
3490
+ return /* @__PURE__ */ jsx(
3491
+ "th",
3492
+ {
3493
+ "data-slot": "table-head",
3494
+ className: cn(
3495
+ "h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
3496
+ className
3497
+ ),
3498
+ ...props
3499
+ }
3500
+ );
3501
+ }
3502
+ function TableCell({ className, ...props }) {
3503
+ return /* @__PURE__ */ jsx(
3504
+ "td",
3505
+ {
3506
+ "data-slot": "table-cell",
3507
+ className: cn(
3508
+ "p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",
3509
+ className
3510
+ ),
3511
+ ...props
3512
+ }
3513
+ );
3514
+ }
3515
+ function TableCaption({
3516
+ className,
3517
+ ...props
3518
+ }) {
3519
+ return /* @__PURE__ */ jsx(
3520
+ "caption",
3521
+ {
3522
+ "data-slot": "table-caption",
3523
+ className: cn("mt-4 text-sm text-muted-foreground", className),
3524
+ ...props
3525
+ }
3526
+ );
3527
+ }
3528
+ function Tabs({
3529
+ className,
3530
+ orientation = "horizontal",
3531
+ ...props
3532
+ }) {
3533
+ return /* @__PURE__ */ jsx(
3534
+ Tabs$1.Root,
3535
+ {
3536
+ "data-slot": "tabs",
3537
+ "data-orientation": orientation,
3538
+ className: cn(
3539
+ "group/tabs flex gap-2 data-horizontal:flex-col",
3540
+ className
3541
+ ),
3542
+ ...props
3543
+ }
3544
+ );
3545
+ }
3546
+ var tabsListVariants = cva(
3547
+ "group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none",
3548
+ {
3549
+ variants: {
3550
+ variant: {
3551
+ default: "bg-muted",
3552
+ line: "gap-1 bg-transparent"
3553
+ }
3554
+ },
3555
+ defaultVariants: {
3556
+ variant: "default"
3557
+ }
3558
+ }
3559
+ );
3560
+ function TabsList({
3561
+ className,
3562
+ variant = "default",
3563
+ ...props
3564
+ }) {
3565
+ return /* @__PURE__ */ jsx(
3566
+ Tabs$1.List,
3567
+ {
3568
+ "data-slot": "tabs-list",
3569
+ "data-variant": variant,
3570
+ className: cn(tabsListVariants({ variant }), className),
3571
+ ...props
3572
+ }
3573
+ );
3574
+ }
3575
+ function TabsTrigger({
3576
+ className,
3577
+ ...props
3578
+ }) {
3579
+ return /* @__PURE__ */ jsx(
3580
+ Tabs$1.Trigger,
3581
+ {
3582
+ "data-slot": "tabs-trigger",
3583
+ className: cn(
3584
+ "relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3585
+ "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent",
3586
+ "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground",
3587
+ "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",
3588
+ className
3589
+ ),
3590
+ ...props
3591
+ }
3592
+ );
3593
+ }
3594
+ function TabsContent({
3595
+ className,
3596
+ ...props
3597
+ }) {
3598
+ return /* @__PURE__ */ jsx(
3599
+ Tabs$1.Content,
3600
+ {
3601
+ "data-slot": "tabs-content",
3602
+ className: cn("flex-1 text-sm outline-none", className),
3603
+ ...props
3604
+ }
3605
+ );
3606
+ }
3607
+ var toggleVariants = cva(
3608
+ "group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3609
+ {
3610
+ variants: {
3611
+ variant: {
3612
+ default: "bg-transparent",
3613
+ outline: "border border-input bg-transparent hover:bg-muted"
3614
+ },
3615
+ size: {
3616
+ default: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
3617
+ sm: "h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
3618
+ lg: "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"
3619
+ }
3620
+ },
3621
+ defaultVariants: {
3622
+ variant: "default",
3623
+ size: "default"
3624
+ }
3625
+ }
3626
+ );
3627
+ function Toggle({
3628
+ className,
3629
+ variant = "default",
3630
+ size = "default",
3631
+ ...props
3632
+ }) {
3633
+ return /* @__PURE__ */ jsx(
3634
+ Toggle$1.Root,
3635
+ {
3636
+ "data-slot": "toggle",
3637
+ className: cn(toggleVariants({ variant, size, className })),
3638
+ ...props
3639
+ }
3640
+ );
3641
+ }
3642
+ var ToggleGroupContext = React2.createContext({
3643
+ size: "default",
3644
+ variant: "default",
3645
+ spacing: 0,
3646
+ orientation: "horizontal"
3647
+ });
3648
+ function ToggleGroup({
3649
+ className,
3650
+ variant,
3651
+ size,
3652
+ spacing = 0,
3653
+ orientation = "horizontal",
3654
+ children,
3655
+ ...props
3656
+ }) {
3657
+ return /* @__PURE__ */ jsx(
3658
+ ToggleGroup$1.Root,
3659
+ {
3660
+ "data-slot": "toggle-group",
3661
+ "data-variant": variant,
3662
+ "data-size": size,
3663
+ "data-spacing": spacing,
3664
+ "data-orientation": orientation,
3665
+ style: { "--gap": spacing },
3666
+ className: cn(
3667
+ "group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch",
3668
+ className
3669
+ ),
3670
+ ...props,
3671
+ children: /* @__PURE__ */ jsx(
3672
+ ToggleGroupContext.Provider,
3673
+ {
3674
+ value: { variant, size, spacing, orientation },
3675
+ children
3676
+ }
3677
+ )
3678
+ }
3679
+ );
3680
+ }
3681
+ function ToggleGroupItem({
3682
+ className,
3683
+ children,
3684
+ variant = "default",
3685
+ size = "default",
3686
+ ...props
3687
+ }) {
3688
+ const context = React2.useContext(ToggleGroupContext);
3689
+ return /* @__PURE__ */ jsx(
3690
+ ToggleGroup$1.Item,
3691
+ {
3692
+ "data-slot": "toggle-group-item",
3693
+ "data-variant": context.variant || variant,
3694
+ "data-size": context.size || size,
3695
+ "data-spacing": context.spacing,
3696
+ className: cn(
3697
+ "shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t",
3698
+ toggleVariants({
3699
+ variant: context.variant || variant,
3700
+ size: context.size || size
3701
+ }),
3702
+ className
3703
+ ),
3704
+ ...props,
3705
+ children
3706
+ }
3707
+ );
3708
+ }
3709
+ function TooltipProvider({
3710
+ delayDuration = 0,
3711
+ ...props
3712
+ }) {
3713
+ return /* @__PURE__ */ jsx(
3714
+ Tooltip.Provider,
3715
+ {
3716
+ "data-slot": "tooltip-provider",
3717
+ delayDuration,
3718
+ ...props
3719
+ }
3720
+ );
3721
+ }
3722
+ function Tooltip2({
3723
+ ...props
3724
+ }) {
3725
+ return /* @__PURE__ */ jsx(Tooltip.Root, { "data-slot": "tooltip", ...props });
3726
+ }
3727
+ function TooltipTrigger({
3728
+ ...props
3729
+ }) {
3730
+ return /* @__PURE__ */ jsx(Tooltip.Trigger, { "data-slot": "tooltip-trigger", ...props });
3731
+ }
3732
+ function TooltipContent({
3733
+ className,
3734
+ sideOffset = 0,
3735
+ children,
3736
+ ...props
3737
+ }) {
3738
+ return /* @__PURE__ */ jsx(Tooltip.Portal, { children: /* @__PURE__ */ jsxs(
3739
+ Tooltip.Content,
3740
+ {
3741
+ "data-slot": "tooltip-content",
3742
+ sideOffset,
3743
+ className: cn(
3744
+ "z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
3745
+ className
3746
+ ),
3747
+ ...props,
3748
+ children: [
3749
+ children,
3750
+ /* @__PURE__ */ jsx(Tooltip.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" })
3751
+ ]
3752
+ }
3753
+ ) });
3754
+ }
3755
+ function FormantLogo({
3756
+ size = 40,
3757
+ variant = "white",
3758
+ className,
3759
+ withBackground = false
3760
+ }) {
3761
+ const colorMap = {
3762
+ default: "#000000",
3763
+ white: "#FFFFFF",
3764
+ dark: "#0A0F11",
3765
+ "horizon-glow": "#ACC3B3",
3766
+ "terminal-amber": "#E8AB7F",
3767
+ "interface-iris": "#8B8CF4"
3768
+ };
3769
+ const fillColor = colorMap[variant];
3770
+ const bgColor = variant === "default" || variant === "dark" ? "#FFFFFF" : "#0A0F11";
3771
+ const needsBg = withBackground || variant === "default";
3772
+ return /* @__PURE__ */ jsxs(
3773
+ "svg",
3774
+ {
3775
+ width: size,
3776
+ height: size,
3777
+ viewBox: "0 0 120 120",
3778
+ fill: "none",
3779
+ xmlns: "http://www.w3.org/2000/svg",
3780
+ className,
3781
+ "aria-label": "Formant Logo",
3782
+ children: [
3783
+ needsBg && /* @__PURE__ */ jsx("rect", { width: "120", height: "120", fill: bgColor }),
3784
+ /* @__PURE__ */ jsx(
3785
+ "rect",
3786
+ {
3787
+ x: "40",
3788
+ y: "14",
3789
+ width: "71",
3790
+ height: "21",
3791
+ fill: fillColor
3792
+ }
3793
+ ),
3794
+ /* @__PURE__ */ jsx(
3795
+ "polygon",
3796
+ {
3797
+ points: "9,108 72,108 40,43",
3798
+ fill: fillColor
3799
+ }
3800
+ ),
3801
+ /* @__PURE__ */ jsx(
3802
+ "circle",
3803
+ {
3804
+ cx: "78",
3805
+ cy: "61",
3806
+ r: "16",
3807
+ fill: fillColor
3808
+ }
3809
+ )
3810
+ ]
3811
+ }
3812
+ );
3813
+ }
3814
+ function FormantLogoWithText({
3815
+ logoSize = 40,
3816
+ text = "FORMANT",
3817
+ variant = "white",
3818
+ orientation = "horizontal",
3819
+ gap = 12,
3820
+ className
3821
+ }) {
3822
+ const colorMap = {
3823
+ default: "#0A0F11",
3824
+ white: "#F2F3F4",
3825
+ dark: "#0A0F11",
3826
+ "horizon-glow": "#ACC3B3",
3827
+ "terminal-amber": "#E8AB7F",
3828
+ "interface-iris": "#8B8CF4"
3829
+ };
3830
+ const textColor = colorMap[variant];
3831
+ if (orientation === "vertical") {
3832
+ return /* @__PURE__ */ jsxs(
3833
+ "div",
3834
+ {
3835
+ className: `flex flex-col items-center ${className}`,
3836
+ style: { gap },
3837
+ children: [
3838
+ /* @__PURE__ */ jsx(FormantLogo, { size: logoSize, variant }),
3839
+ /* @__PURE__ */ jsx(
3840
+ "span",
3841
+ {
3842
+ className: "font-heading font-bold tracking-tight",
3843
+ style: { color: textColor, fontSize: logoSize * 0.6 },
3844
+ children: text
3845
+ }
3846
+ )
3847
+ ]
3848
+ }
3849
+ );
3850
+ }
3851
+ return /* @__PURE__ */ jsxs(
3852
+ "div",
3853
+ {
3854
+ className: `flex items-center ${className}`,
3855
+ style: { gap },
3856
+ children: [
3857
+ /* @__PURE__ */ jsx(FormantLogo, { size: logoSize, variant }),
3858
+ /* @__PURE__ */ jsx(
3859
+ "span",
3860
+ {
3861
+ className: "font-heading font-bold tracking-tight",
3862
+ style: { color: textColor, fontSize: logoSize * 0.75 },
3863
+ children: text
3864
+ }
3865
+ )
3866
+ ]
3867
+ }
3868
+ );
3869
+ }
3870
+ function ThemeProvider({
3871
+ children,
3872
+ ...props
3873
+ }) {
3874
+ return /* @__PURE__ */ jsxs(
3875
+ ThemeProvider$1,
3876
+ {
3877
+ attribute: "class",
3878
+ defaultTheme: "system",
3879
+ enableSystem: true,
3880
+ disableTransitionOnChange: true,
3881
+ ...props,
3882
+ children: [
3883
+ /* @__PURE__ */ jsx(ThemeHotkey, {}),
3884
+ children
3885
+ ]
3886
+ }
3887
+ );
3888
+ }
3889
+ function isTypingTarget(target) {
3890
+ if (!(target instanceof HTMLElement)) {
3891
+ return false;
3892
+ }
3893
+ return target.isContentEditable || target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.tagName === "SELECT";
3894
+ }
3895
+ function ThemeHotkey() {
3896
+ const { resolvedTheme, setTheme } = useTheme();
3897
+ React2.useEffect(() => {
3898
+ function onKeyDown(event) {
3899
+ if (event.defaultPrevented || event.repeat) {
3900
+ return;
3901
+ }
3902
+ if (event.metaKey || event.ctrlKey || event.altKey) {
3903
+ return;
3904
+ }
3905
+ if (event.key.toLowerCase() !== "d") {
3906
+ return;
3907
+ }
3908
+ if (isTypingTarget(event.target)) {
3909
+ return;
3910
+ }
3911
+ setTheme(resolvedTheme === "dark" ? "light" : "dark");
3912
+ }
3913
+ window.addEventListener("keydown", onKeyDown);
3914
+ return () => {
3915
+ window.removeEventListener("keydown", onKeyDown);
3916
+ };
3917
+ }, [resolvedTheme, setTheme]);
3918
+ return null;
3919
+ }
3920
+ var FORMANT_FONTS = "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@300;400;500&display=swap";
3921
+ var FORMANT_THEME_CSS = `
3922
+ :root {
3923
+ --background: #202428;
3924
+ --foreground: #F2F3F4;
3925
+ --card: #0A0F11;
3926
+ --card-foreground: #F2F3F4;
3927
+ --popover: #202428;
3928
+ --popover-foreground: #F2F3F4;
3929
+ --primary: #ACC3B3;
3930
+ --primary-foreground: #0A0F11;
3931
+ --secondary: #202428;
3932
+ --secondary-foreground: #F2F3F4;
3933
+ --muted: #202428;
3934
+ --muted-foreground: #A3ABA9;
3935
+ --accent: #2C4142;
3936
+ --accent-foreground: #F2F3F4;
3937
+ --destructive: #E8AB7F;
3938
+ --destructive-foreground: #0A0F11;
3939
+ --border: rgba(163, 171, 169, 0.1);
3940
+ --input: rgba(163, 171, 169, 0.2);
3941
+ --ring: #ACC3B3;
3942
+ --chart-1: #ACC3B3;
3943
+ --chart-2: #4B5E53;
3944
+ --chart-3: #2C4142;
3945
+ --chart-4: #E8AB7F;
3946
+ --chart-5: #8B8CF4;
3947
+ --radius: 0.25rem;
3948
+ --sidebar: #0A0F11;
3949
+ --sidebar-foreground: #F2F3F4;
3950
+ --sidebar-primary: #ACC3B3;
3951
+ --sidebar-primary-foreground: #0A0F11;
3952
+ --sidebar-accent: #202428;
3953
+ --sidebar-accent-foreground: #F2F3F4;
3954
+ --sidebar-border: rgba(163, 171, 169, 0.1);
3955
+ --sidebar-ring: #ACC3B3;
3956
+ --deep-command: #0A0F11;
3957
+ --slate-mist: #202428;
3958
+ --formant-white: #F2F3F4;
3959
+ --system-neutral: #A3ABA9;
3960
+ --fog-green: #4B5E53;
3961
+ --ethereal-teal: #2C4142;
3962
+ --horizon-glow: #ACC3B3;
3963
+ --terminal-amber: #E8AB7F;
3964
+ --interface-iris: #8B8CF4;
3965
+ }
3966
+
3967
+ * {
3968
+ border-color: var(--border);
3969
+ outline-color: var(--ring);
3970
+ }
3971
+
3972
+ body {
3973
+ background-color: var(--background);
3974
+ color: var(--foreground);
3975
+ font-family: 'Inter', sans-serif;
3976
+ }
3977
+
3978
+ html {
3979
+ font-family: 'Inter', sans-serif;
3980
+ }
3981
+
3982
+ h1, h2, h3, h4, h5, h6 {
3983
+ font-family: 'Space Grotesk', sans-serif;
3984
+ letter-spacing: -0.02em;
3985
+ }
3986
+
3987
+ code, pre, .font-mono {
3988
+ font-family: 'JetBrains Mono', monospace;
3989
+ }
3990
+
3991
+ .font-heading {
3992
+ font-family: 'Space Grotesk', sans-serif;
3993
+ letter-spacing: -0.02em;
3994
+ }
3995
+
3996
+ .font-sans {
3997
+ font-family: 'Inter', sans-serif;
3998
+ }
3999
+
4000
+ .font-mono {
4001
+ font-family: 'JetBrains Mono', monospace;
4002
+ letter-spacing: 0.02em;
4003
+ }
4004
+
4005
+ .bg-deep-command { background-color: #0A0F11; }
4006
+ .bg-slate-mist { background-color: #202428; }
4007
+ .bg-formant-white { background-color: #F2F3F4; }
4008
+ .bg-system-neutral { background-color: #A3ABA9; }
4009
+ .bg-fog-green { background-color: #4B5E53; }
4010
+ .bg-ethereal-teal { background-color: #2C4142; }
4011
+ .bg-horizon-glow { background-color: #ACC3B3; }
4012
+ .bg-terminal-amber { background-color: #E8AB7F; }
4013
+ .bg-interface-iris { background-color: #8B8CF4; }
4014
+
4015
+ .text-deep-command { color: #0A0F11; }
4016
+ .text-slate-mist { color: #202428; }
4017
+ .text-formant-white { color: #F2F3F4; }
4018
+ .text-system-neutral { color: #A3ABA9; }
4019
+ .text-fog-green { color: #4B5E53; }
4020
+ .text-ethereal-teal { color: #2C4142; }
4021
+ .text-horizon-glow { color: #ACC3B3; }
4022
+ .text-terminal-amber { color: #E8AB7F; }
4023
+ .text-interface-iris { color: #8B8CF4; }
4024
+
4025
+ .border-fog-green { border-color: rgba(75, 94, 83, 0.4); }
4026
+ .border-terminal-amber { border-color: rgba(232, 171, 127, 0.25); }
4027
+ .border-interface-iris { border-color: rgba(139, 140, 244, 0.25); }
4028
+
4029
+ @keyframes fadeUp {
4030
+ from { opacity: 0; transform: translateY(24px); }
4031
+ to { opacity: 1; transform: translateY(0); }
4032
+ }
4033
+
4034
+ .animate-fade-up {
4035
+ animation: fadeUp 0.7s ease forwards;
4036
+ }
4037
+
4038
+ .section-label {
4039
+ font-family: 'JetBrains Mono', monospace;
4040
+ font-size: 10px;
4041
+ letter-spacing: 0.3em;
4042
+ color: #E8AB7F;
4043
+ text-transform: uppercase;
4044
+ display: flex;
4045
+ align-items: center;
4046
+ gap: 12px;
4047
+ }
4048
+
4049
+ .section-label::before {
4050
+ content: '';
4051
+ display: block;
4052
+ width: 24px;
4053
+ height: 1px;
4054
+ background: #E8AB7F;
4055
+ }
4056
+
4057
+ ::-webkit-scrollbar { width: 8px; height: 8px; }
4058
+ ::-webkit-scrollbar-track { background: #0A0F11; }
4059
+ ::-webkit-scrollbar-thumb { background: #4B5E53; border-radius: 4px; }
4060
+ ::-webkit-scrollbar-thumb:hover { background: #ACC3B3; }
4061
+ `;
4062
+ function FormantAesthetics({ children }) {
4063
+ return /* @__PURE__ */ jsxs(ThemeProvider, { children: [
4064
+ /* @__PURE__ */ jsx("link", { rel: "stylesheet", href: FORMANT_FONTS }),
4065
+ /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: FORMANT_THEME_CSS } }),
4066
+ children
4067
+ ] });
4068
+ }
4069
+
4070
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Calendar, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FormantAesthetics, FormantLogo, FormantLogoWithText, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, 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, Separator2 as Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Skeleton, Slider, Toaster as Sonner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeProvider, Toggle, ToggleGroup, ToggleGroupItem, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cn, navigationMenuTriggerStyle, toggleVariants };
4071
+ //# sourceMappingURL=index.js.map
4072
+ //# sourceMappingURL=index.js.map