@skill-academy/uikit 0.0.2

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