@diyet24/design-system 0.1.0 → 0.1.1

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