@tradalab/lyra 1.10.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui/index.js CHANGED
@@ -1,28 +1,32 @@
1
1
  "use client";
2
- import { Dialog, DialogHeader, DialogTitle, DialogDescription, DialogContent, Label } from '../chunk-44WIOUJJ.js';
3
- export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Label } from '../chunk-44WIOUJJ.js';
2
+ import { Dialog, DialogHeader, DialogTitle, DialogDescription, DialogContent, Label } from '../chunk-RSAN65FI.js';
3
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Label } from '../chunk-RSAN65FI.js';
4
4
  export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from '../chunk-CV3UXQBT.js';
5
- import { Separator, InputGroup, InputGroupAddon } from '../chunk-V6TVUMAU.js';
6
- export { AccountMenu, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, ScrollArea, ScrollBar, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Textarea, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, defaultAccountMenuLabels, initialsOf, useSidebar } from '../chunk-V6TVUMAU.js';
5
+ import { Separator, InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from '../chunk-2PHVSGAE.js';
6
+ export { AccountMenu, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, ScrollArea, ScrollBar, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Textarea, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, defaultAccountMenuLabels, initialsOf, useSidebar } from '../chunk-2PHVSGAE.js';
7
7
  import '../chunk-QYA2HGKW.js';
8
- export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '../chunk-ZG5ZPKFL.js';
8
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from '../chunk-LZZ3UOPT.js';
9
9
  export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Input } from '../chunk-SQA4ILAK.js';
10
- import { Button } from '../chunk-KFQOYZ64.js';
11
- export { Button, buttonVariants } from '../chunk-KFQOYZ64.js';
10
+ import { Button, buttonVariants } from '../chunk-5Q4UTRYU.js';
11
+ export { Button, buttonVariants } from '../chunk-5Q4UTRYU.js';
12
12
  import { cn } from '../chunk-XH55BHUU.js';
13
- import * as React21 from 'react';
13
+ import * as React8 from 'react';
14
14
  import { useMemo } from 'react';
15
- import { Accordion as Accordion$1, AlertDialog as AlertDialog$1, AspectRatio as AspectRatio$1, Slot, Checkbox as Checkbox$1, Collapsible as Collapsible$1, HoverCard as HoverCard$1, Menubar as Menubar$1, NavigationMenu as NavigationMenu$1, Popover as Popover$1, Progress as Progress$1, RadioGroup as RadioGroup$1, Select as Select$1, Slider as Slider$1, Switch as Switch$1, Tabs as Tabs$1, Toggle as Toggle$1, ToggleGroup as ToggleGroup$1 } from 'radix-ui';
16
- import { ChevronDownIcon, ChevronUpIcon, CheckIcon, SearchIcon, MinusIcon, ChevronRightIcon, ChevronLeftIcon, MoreHorizontalIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon } from 'lucide-react';
17
- import { jsx, jsxs } from 'react/jsx-runtime';
15
+ import { Direction, Accordion as Accordion$1, AlertDialog as AlertDialog$1, AspectRatio as AspectRatio$1, Slot, Checkbox as Checkbox$1, Collapsible as Collapsible$1, HoverCard as HoverCard$1, Menubar as Menubar$1, NavigationMenu as NavigationMenu$1, Popover as Popover$1, Progress as Progress$1, RadioGroup as RadioGroup$1, Select as Select$1, Slider as Slider$1, Switch as Switch$1, Tabs as Tabs$1, Toggle as Toggle$1, ToggleGroup as ToggleGroup$1 } from 'radix-ui';
16
+ import { ChevronDownIcon, ChevronUpIcon, ChevronLeftIcon, ChevronRightIcon, CheckIcon, XIcon, SearchIcon, MinusIcon, ArrowDownIcon, MoreHorizontalIcon, Loader2Icon, CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon } from 'lucide-react';
17
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
18
18
  import { cva } from 'class-variance-authority';
19
+ import { getDefaultClassNames, DayPicker } from 'react-day-picker';
20
+ import useEmblaCarousel from 'embla-carousel-react';
21
+ import * as RechartsPrimitive from 'recharts';
22
+ import { Combobox as Combobox$1 } from '@base-ui/react';
19
23
  import { Command as Command$1 } from 'cmdk';
20
24
  import { Drawer as Drawer$1 } from 'vaul';
21
25
  import { OTPInput, OTPInputContext } from 'input-otp';
26
+ import { MessageScroller as MessageScroller$1 } from '@shadcn/react/message-scroller';
27
+ export { useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility } from '@shadcn/react/message-scroller';
22
28
  import * as ResizablePrimitive from 'react-resizable-panels';
23
- import { useTheme } from 'next-themes';
24
- import { Toaster as Toaster$1 } from 'sonner';
25
- export { toast } from 'sonner';
29
+ import { Toast as Toast$1 } from '@base-ui/react/toast';
26
30
 
27
31
  function Accordion({
28
32
  className,
@@ -110,20 +114,38 @@ var alertVariants = cva(
110
114
  }
111
115
  }
112
116
  );
113
- function Alert({ className, variant, ...props }) {
114
- return /* @__PURE__ */ jsx("div", { "data-slot": "alert", role: "alert", className: cn(alertVariants({ variant }), className), ...props });
117
+ function Alert({
118
+ className,
119
+ variant,
120
+ ...props
121
+ }) {
122
+ return /* @__PURE__ */ jsx(
123
+ "div",
124
+ {
125
+ "data-slot": "alert",
126
+ role: "alert",
127
+ className: cn(alertVariants({ variant }), className),
128
+ ...props
129
+ }
130
+ );
115
131
  }
116
132
  function AlertTitle({ className, ...props }) {
117
133
  return /* @__PURE__ */ jsx(
118
134
  "div",
119
135
  {
120
136
  "data-slot": "alert-title",
121
- className: cn("font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground", className),
137
+ className: cn(
138
+ "font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",
139
+ className
140
+ ),
122
141
  ...props
123
142
  }
124
143
  );
125
144
  }
126
- function AlertDescription({ className, ...props }) {
145
+ function AlertDescription({
146
+ className,
147
+ ...props
148
+ }) {
127
149
  return /* @__PURE__ */ jsx(
128
150
  "div",
129
151
  {
@@ -137,7 +159,17 @@ function AlertDescription({ className, ...props }) {
137
159
  );
138
160
  }
139
161
  function AlertAction({ className, ...props }) {
140
- return /* @__PURE__ */ jsx("div", { "data-slot": "alert-action", className: cn("absolute top-[calc(--spacing(1.25))] right-[calc(--spacing(1.25))]", className), ...props });
162
+ return /* @__PURE__ */ jsx(
163
+ "div",
164
+ {
165
+ "data-slot": "alert-action",
166
+ className: cn(
167
+ "absolute top-[calc(--spacing(1.25))] right-[calc(--spacing(1.25))]",
168
+ className
169
+ ),
170
+ ...props
171
+ }
172
+ );
141
173
  }
142
174
  function AlertDialog({
143
175
  ...props
@@ -301,863 +333,2751 @@ function AlertDialogCancel({
301
333
  }
302
334
  ) });
303
335
  }
304
- function AspectRatio({ ...props }) {
336
+ function AspectRatio({
337
+ ...props
338
+ }) {
305
339
  return /* @__PURE__ */ jsx(AspectRatio$1.Root, { "data-slot": "aspect-ratio", ...props });
306
340
  }
307
- var badgeVariants = cva(
308
- "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-none border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
341
+ var attachmentVariants = cva(
342
+ "group/attachment relative flex w-fit max-w-full min-w-0 shrink-0 flex-wrap rounded-none border bg-card text-card-foreground transition-colors focus-within:ring-1 focus-within:ring-ring/50 has-[>a,>button]:hover:bg-muted/50 data-[state=error]:border-destructive/30 data-[state=idle]:border-dashed",
309
343
  {
310
344
  variants: {
311
- variant: {
312
- default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
313
- secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
314
- destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
315
- outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
316
- ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
317
- link: "text-primary underline-offset-4 hover:underline"
345
+ size: {
346
+ default: "gap-2 text-xs has-data-[slot=attachment-content]:px-2 has-data-[slot=attachment-content]:py-1.5 has-data-[slot=attachment-media]:p-1.5",
347
+ sm: "gap-2.5 text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1",
348
+ xs: "gap-1.5 rounded-none text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1"
349
+ },
350
+ orientation: {
351
+ horizontal: "min-w-40 items-center",
352
+ vertical: "w-24 flex-col has-data-[slot=attachment-content]:w-30"
318
353
  }
319
- },
320
- defaultVariants: {
321
- variant: "default"
322
354
  }
323
355
  }
324
356
  );
325
- function Badge({
357
+ function Attachment({
326
358
  className,
327
- variant = "default",
328
- asChild = false,
359
+ state = "done",
360
+ size = "default",
361
+ orientation = "horizontal",
329
362
  ...props
330
363
  }) {
331
- const Comp = asChild ? Slot.Root : "span";
332
364
  return /* @__PURE__ */ jsx(
333
- Comp,
365
+ "div",
334
366
  {
335
- "data-slot": "badge",
336
- "data-variant": variant,
337
- className: cn(badgeVariants({ variant }), className),
367
+ "data-slot": "attachment",
368
+ "data-state": state,
369
+ "data-size": size,
370
+ "data-orientation": orientation,
371
+ className: cn(attachmentVariants({ size, orientation }), className),
338
372
  ...props
339
373
  }
340
374
  );
341
375
  }
342
- var buttonGroupVariants = cva(
343
- "group/button-group flex w-fit items-stretch rounded-none *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-none [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
376
+ var attachmentMediaVariants = cva(
377
+ "relative flex aspect-square w-10 shrink-0 items-center justify-center overflow-hidden rounded-none bg-muted text-foreground group-data-[orientation=vertical]/attachment:w-full group-data-[size=sm]/attachment:w-8 group-data-[size=xs]/attachment:w-7 group-data-[size=xs]/attachment:rounded-none group-data-[state=error]/attachment:bg-destructive/10 group-data-[state=error]/attachment:text-destructive group-data-[orientation=vertical]/attachment:*:data-[slot=spinner]:size-6! [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 group-data-[orientation=vertical]/attachment:[&_svg:not([class*='size-'])]:size-6 group-data-[size=xs]/attachment:[&_svg:not([class*='size-'])]:size-3.5",
344
378
  {
345
379
  variants: {
346
- orientation: {
347
- horizontal: "[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",
348
- vertical: "flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"
380
+ variant: {
381
+ icon: "",
382
+ image: "opacity-60 group-data-[state=done]/attachment:opacity-100 group-data-[state=idle]/attachment:opacity-100 *:[img]:aspect-square *:[img]:w-full *:[img]:object-cover"
349
383
  }
350
384
  },
351
385
  defaultVariants: {
352
- orientation: "horizontal"
386
+ variant: "icon"
353
387
  }
354
388
  }
355
389
  );
356
- function ButtonGroup({
390
+ function AttachmentMedia({
357
391
  className,
358
- orientation,
392
+ variant = "icon",
359
393
  ...props
360
394
  }) {
361
395
  return /* @__PURE__ */ jsx(
362
396
  "div",
363
397
  {
364
- role: "group",
365
- "data-slot": "button-group",
366
- "data-orientation": orientation,
367
- className: cn(buttonGroupVariants({ orientation }), className),
398
+ "data-slot": "attachment-media",
399
+ "data-variant": variant,
400
+ className: cn(attachmentMediaVariants({ variant }), className),
368
401
  ...props
369
402
  }
370
403
  );
371
404
  }
372
- function ButtonGroupText({
405
+ function AttachmentContent({
373
406
  className,
374
- asChild = false,
375
407
  ...props
376
408
  }) {
377
- const Comp = asChild ? Slot.Root : "div";
378
409
  return /* @__PURE__ */ jsx(
379
- Comp,
410
+ "div",
380
411
  {
412
+ "data-slot": "attachment-content",
381
413
  className: cn(
382
- "flex items-center gap-2 rounded-none border bg-muted px-2.5 text-xs font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
414
+ "max-w-full min-w-0 flex-1 leading-tight group-data-[orientation=vertical]/attachment:px-1",
383
415
  className
384
416
  ),
385
417
  ...props
386
418
  }
387
419
  );
388
420
  }
389
- function ButtonGroupSeparator({
421
+ function AttachmentTitle({
390
422
  className,
391
- orientation = "vertical",
392
423
  ...props
393
424
  }) {
394
425
  return /* @__PURE__ */ jsx(
395
- Separator,
426
+ "span",
396
427
  {
397
- "data-slot": "button-group-separator",
398
- orientation,
428
+ "data-slot": "attachment-title",
399
429
  className: cn(
400
- "relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto",
430
+ "block max-w-full min-w-0 truncate font-medium group-data-[state=processing]/attachment:shimmer group-data-[state=uploading]/attachment:shimmer",
401
431
  className
402
432
  ),
403
433
  ...props
404
434
  }
405
435
  );
406
436
  }
407
- function Checkbox({
437
+ function AttachmentDescription({
408
438
  className,
409
439
  ...props
410
440
  }) {
411
441
  return /* @__PURE__ */ jsx(
412
- Checkbox$1.Root,
442
+ "span",
413
443
  {
414
- "data-slot": "checkbox",
444
+ "data-slot": "attachment-description",
415
445
  className: cn(
416
- "peer relative flex size-4 shrink-0 items-center justify-center rounded-none border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-1 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
446
+ "mt-0.5 block min-w-0 truncate text-xs text-muted-foreground group-data-[state=error]/attachment:text-destructive/80",
447
+ "max-w-full",
417
448
  className
418
449
  ),
419
- ...props,
420
- children: /* @__PURE__ */ jsx(
421
- Checkbox$1.Indicator,
422
- {
423
- "data-slot": "checkbox-indicator",
424
- className: "grid place-content-center text-current transition-none [&>svg]:size-3.5",
425
- children: /* @__PURE__ */ jsx(
426
- CheckIcon,
427
- {}
428
- )
429
- }
430
- )
450
+ ...props
431
451
  }
432
452
  );
433
453
  }
434
- function Collapsible({
435
- ...props
436
- }) {
437
- return /* @__PURE__ */ jsx(Collapsible$1.Root, { "data-slot": "collapsible", ...props });
438
- }
439
- function CollapsibleTrigger({
454
+ function AttachmentActions({
455
+ className,
440
456
  ...props
441
457
  }) {
442
458
  return /* @__PURE__ */ jsx(
443
- Collapsible$1.CollapsibleTrigger,
459
+ "div",
444
460
  {
445
- "data-slot": "collapsible-trigger",
461
+ "data-slot": "attachment-actions",
462
+ className: cn(
463
+ "relative z-20 flex shrink-0 items-center group-data-[orientation=vertical]/attachment:absolute group-data-[orientation=vertical]/attachment:top-3 group-data-[orientation=vertical]/attachment:right-3 group-data-[orientation=vertical]/attachment:gap-1",
464
+ className
465
+ ),
446
466
  ...props
447
467
  }
448
468
  );
449
469
  }
450
- function CollapsibleContent({
470
+ function AttachmentAction({
471
+ className,
472
+ variant,
473
+ size = "icon-xs",
451
474
  ...props
452
475
  }) {
453
476
  return /* @__PURE__ */ jsx(
454
- Collapsible$1.CollapsibleContent,
477
+ Button,
455
478
  {
456
- "data-slot": "collapsible-content",
479
+ "data-slot": "attachment-action",
480
+ variant: variant ?? "ghost",
481
+ size,
482
+ className: cn(className),
457
483
  ...props
458
484
  }
459
485
  );
460
486
  }
461
- function Command({
487
+ function AttachmentTrigger({
462
488
  className,
489
+ asChild = false,
490
+ type,
463
491
  ...props
464
492
  }) {
493
+ const Comp = asChild ? Slot.Root : "button";
465
494
  return /* @__PURE__ */ jsx(
466
- Command$1,
495
+ Comp,
467
496
  {
468
- "data-slot": "command",
497
+ "data-slot": "attachment-trigger",
498
+ type: asChild ? void 0 : type ?? "button",
499
+ className: cn("absolute inset-0 z-10 outline-none", className),
500
+ ...props
501
+ }
502
+ );
503
+ }
504
+ function AttachmentGroup({ className, ...props }) {
505
+ return /* @__PURE__ */ jsx(
506
+ "div",
507
+ {
508
+ "data-slot": "attachment-group",
469
509
  className: cn(
470
- "flex size-full flex-col overflow-hidden rounded-none bg-popover text-popover-foreground",
510
+ "flex min-w-0 scroll-fade-x snap-x snap-mandatory scroll-px-1 scrollbar-none gap-3 overflow-x-auto overscroll-x-contain py-1 *:data-[slot=attachment]:flex-none *:data-[slot=attachment]:snap-start",
471
511
  className
472
512
  ),
473
513
  ...props
474
514
  }
475
515
  );
476
516
  }
477
- function CommandDialog({
478
- title = "Command Palette",
479
- description = "Search for a command to run...",
480
- children,
481
- className,
482
- showCloseButton = false,
483
- ...props
484
- }) {
485
- return /* @__PURE__ */ jsxs(Dialog, { ...props, children: [
486
- /* @__PURE__ */ jsxs(DialogHeader, { className: "sr-only", children: [
487
- /* @__PURE__ */ jsx(DialogTitle, { children: title }),
488
- /* @__PURE__ */ jsx(DialogDescription, { children: description })
489
- ] }),
490
- /* @__PURE__ */ jsx(
491
- DialogContent,
492
- {
493
- className: cn(
494
- "top-1/3 translate-y-0 overflow-hidden rounded-none p-0",
495
- className
496
- ),
497
- showCloseButton,
498
- children
517
+ var badgeVariants = cva(
518
+ "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-none border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
519
+ {
520
+ variants: {
521
+ variant: {
522
+ default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
523
+ secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
524
+ destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
525
+ outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
526
+ ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
527
+ link: "text-primary underline-offset-4 hover:underline"
499
528
  }
500
- )
501
- ] });
502
- }
503
- function CommandInput({
529
+ },
530
+ defaultVariants: {
531
+ variant: "default"
532
+ }
533
+ }
534
+ );
535
+ function Badge({
504
536
  className,
537
+ variant = "default",
538
+ asChild = false,
505
539
  ...props
506
540
  }) {
507
- return /* @__PURE__ */ jsx("div", { "data-slot": "command-input-wrapper", className: "border-b pb-0", children: /* @__PURE__ */ jsxs(InputGroup, { className: "h-8 border-none border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!", children: [
508
- /* @__PURE__ */ jsx(
509
- Command$1.Input,
510
- {
511
- "data-slot": "command-input",
512
- className: cn(
513
- "w-full text-xs outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
514
- className
515
- ),
516
- ...props
517
- }
518
- ),
519
- /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })
520
- ] }) });
541
+ const Comp = asChild ? Slot.Root : "span";
542
+ return /* @__PURE__ */ jsx(
543
+ Comp,
544
+ {
545
+ "data-slot": "badge",
546
+ "data-variant": variant,
547
+ className: cn(badgeVariants({ variant }), className),
548
+ ...props
549
+ }
550
+ );
521
551
  }
522
- function CommandList({
523
- className,
524
- ...props
525
- }) {
552
+ function BubbleGroup({ className, ...props }) {
526
553
  return /* @__PURE__ */ jsx(
527
- Command$1.List,
554
+ "div",
528
555
  {
529
- "data-slot": "command-list",
530
- className: cn(
531
- "no-scrollbar max-h-72 scroll-py-0 overflow-x-hidden overflow-y-auto outline-none",
532
- className
533
- ),
556
+ "data-slot": "bubble-group",
557
+ className: cn("flex min-w-0 flex-col gap-2", className),
534
558
  ...props
535
559
  }
536
560
  );
537
561
  }
538
- function CommandEmpty({
562
+ var bubbleVariants = cva(
563
+ "group/bubble relative flex w-fit max-w-[80%] min-w-0 flex-col gap-1 group-data-[align=end]/message:self-end data-[align=end]:self-end data-[variant=ghost]:max-w-full",
564
+ {
565
+ variants: {
566
+ variant: {
567
+ default: "*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80",
568
+ secondary: "*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)]",
569
+ muted: "*:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)]",
570
+ tinted: "*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)]",
571
+ outline: "*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30",
572
+ ghost: "border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50",
573
+ destructive: "*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30"
574
+ }
575
+ },
576
+ defaultVariants: {
577
+ variant: "default"
578
+ }
579
+ }
580
+ );
581
+ function Bubble({
582
+ variant = "default",
583
+ align = "start",
539
584
  className,
540
585
  ...props
541
586
  }) {
542
587
  return /* @__PURE__ */ jsx(
543
- Command$1.Empty,
588
+ "div",
544
589
  {
545
- "data-slot": "command-empty",
546
- className: cn("py-6 text-center text-xs", className),
590
+ "data-slot": "bubble",
591
+ "data-variant": variant,
592
+ "data-align": align,
593
+ className: cn(bubbleVariants({ variant }), className),
547
594
  ...props
548
595
  }
549
596
  );
550
597
  }
551
- function CommandGroup({
598
+ function BubbleContent({
599
+ asChild = false,
552
600
  className,
553
601
  ...props
554
602
  }) {
603
+ const Comp = asChild ? Slot.Root : "div";
555
604
  return /* @__PURE__ */ jsx(
556
- Command$1.Group,
605
+ Comp,
557
606
  {
558
- "data-slot": "command-group",
607
+ "data-slot": "bubble-content",
559
608
  className: cn(
560
- "overflow-hidden text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:text-muted-foreground",
609
+ "w-fit max-w-full min-w-0 overflow-hidden rounded-none border border-transparent px-2.5 py-2 text-xs leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-1 [button,a]:focus-visible:ring-ring/50",
561
610
  className
562
611
  ),
563
612
  ...props
564
613
  }
565
614
  );
566
615
  }
567
- function CommandSeparator({
616
+ var bubbleReactionsVariants = cva(
617
+ "absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-none bg-muted px-1.5 py-0.5 text-xs ring-2 ring-card has-[button]:p-0",
618
+ {
619
+ variants: {
620
+ side: {
621
+ top: "top-0 -translate-y-3/4",
622
+ bottom: "bottom-0 translate-y-3/4"
623
+ },
624
+ align: {
625
+ start: "left-3",
626
+ end: "right-3"
627
+ }
628
+ },
629
+ defaultVariants: {
630
+ side: "bottom",
631
+ align: "end"
632
+ }
633
+ }
634
+ );
635
+ function BubbleReactions({
636
+ side = "bottom",
637
+ align = "end",
568
638
  className,
569
639
  ...props
570
640
  }) {
571
641
  return /* @__PURE__ */ jsx(
572
- Command$1.Separator,
642
+ "div",
573
643
  {
574
- "data-slot": "command-separator",
575
- className: cn("-mx-1 h-px bg-border", className),
644
+ "data-slot": "bubble-reactions",
645
+ "data-align": align,
646
+ "data-side": side,
647
+ className: cn(bubbleReactionsVariants({ side, align }), className),
576
648
  ...props
577
649
  }
578
650
  );
579
651
  }
580
- function CommandItem({
581
- className,
582
- children,
583
- ...props
584
- }) {
652
+ var buttonGroupVariants = cva(
653
+ "group/button-group flex w-fit items-stretch rounded-none *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-none [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
654
+ {
655
+ variants: {
656
+ orientation: {
657
+ horizontal: "[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",
658
+ vertical: "flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"
659
+ }
660
+ },
661
+ defaultVariants: {
662
+ orientation: "horizontal"
663
+ }
664
+ }
665
+ );
666
+ function ButtonGroup({
667
+ className,
668
+ orientation,
669
+ ...props
670
+ }) {
671
+ return /* @__PURE__ */ jsx(
672
+ "div",
673
+ {
674
+ role: "group",
675
+ "data-slot": "button-group",
676
+ "data-orientation": orientation,
677
+ className: cn(buttonGroupVariants({ orientation }), className),
678
+ ...props
679
+ }
680
+ );
681
+ }
682
+ function ButtonGroupText({
683
+ className,
684
+ asChild = false,
685
+ ...props
686
+ }) {
687
+ const Comp = asChild ? Slot.Root : "div";
688
+ return /* @__PURE__ */ jsx(
689
+ Comp,
690
+ {
691
+ className: cn(
692
+ "flex items-center gap-2 rounded-none border bg-muted px-2.5 text-xs font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
693
+ className
694
+ ),
695
+ ...props
696
+ }
697
+ );
698
+ }
699
+ function ButtonGroupSeparator({
700
+ className,
701
+ orientation = "vertical",
702
+ ...props
703
+ }) {
704
+ return /* @__PURE__ */ jsx(
705
+ Separator,
706
+ {
707
+ "data-slot": "button-group-separator",
708
+ orientation,
709
+ className: cn(
710
+ "relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto",
711
+ className
712
+ ),
713
+ ...props
714
+ }
715
+ );
716
+ }
717
+ function Calendar({
718
+ className,
719
+ classNames,
720
+ showOutsideDays = true,
721
+ captionLayout = "label",
722
+ buttonVariant = "ghost",
723
+ locale,
724
+ formatters,
725
+ components,
726
+ ...props
727
+ }) {
728
+ const defaultClassNames = getDefaultClassNames();
729
+ return /* @__PURE__ */ jsx(
730
+ DayPicker,
731
+ {
732
+ showOutsideDays,
733
+ className: cn(
734
+ "group/calendar bg-background p-2 [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",
735
+ String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
736
+ String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
737
+ className
738
+ ),
739
+ captionLayout,
740
+ locale,
741
+ formatters: {
742
+ formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
743
+ ...formatters
744
+ },
745
+ classNames: {
746
+ root: cn("w-fit", defaultClassNames.root),
747
+ months: cn(
748
+ "relative flex flex-col gap-4 md:flex-row",
749
+ defaultClassNames.months
750
+ ),
751
+ month: cn("flex w-full flex-col gap-4", defaultClassNames.month),
752
+ nav: cn(
753
+ "absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",
754
+ defaultClassNames.nav
755
+ ),
756
+ button_previous: cn(
757
+ buttonVariants({ variant: buttonVariant }),
758
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
759
+ defaultClassNames.button_previous
760
+ ),
761
+ button_next: cn(
762
+ buttonVariants({ variant: buttonVariant }),
763
+ "size-(--cell-size) p-0 select-none aria-disabled:opacity-50",
764
+ defaultClassNames.button_next
765
+ ),
766
+ month_caption: cn(
767
+ "flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",
768
+ defaultClassNames.month_caption
769
+ ),
770
+ dropdowns: cn(
771
+ "flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",
772
+ defaultClassNames.dropdowns
773
+ ),
774
+ dropdown_root: cn(
775
+ "relative rounded-(--cell-radius)",
776
+ defaultClassNames.dropdown_root
777
+ ),
778
+ dropdown: cn(
779
+ "absolute inset-0 bg-popover opacity-0",
780
+ defaultClassNames.dropdown
781
+ ),
782
+ caption_label: cn(
783
+ "font-medium select-none",
784
+ captionLayout === "label" ? "text-sm" : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",
785
+ defaultClassNames.caption_label
786
+ ),
787
+ month_grid: cn("w-full border-collapse", defaultClassNames.month_grid),
788
+ weekdays: cn("flex", defaultClassNames.weekdays),
789
+ weekday: cn(
790
+ "flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",
791
+ defaultClassNames.weekday
792
+ ),
793
+ week: cn("mt-2 flex w-full", defaultClassNames.week),
794
+ week_number_header: cn(
795
+ "w-(--cell-size) select-none",
796
+ defaultClassNames.week_number_header
797
+ ),
798
+ week_number: cn(
799
+ "text-[0.8rem] text-muted-foreground select-none",
800
+ defaultClassNames.week_number
801
+ ),
802
+ day: cn(
803
+ "group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",
804
+ props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
805
+ defaultClassNames.day
806
+ ),
807
+ range_start: cn(
808
+ "relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",
809
+ defaultClassNames.range_start
810
+ ),
811
+ range_middle: cn("rounded-none", defaultClassNames.range_middle),
812
+ range_end: cn(
813
+ "relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",
814
+ defaultClassNames.range_end
815
+ ),
816
+ today: cn(
817
+ "rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",
818
+ defaultClassNames.today
819
+ ),
820
+ outside: cn(
821
+ "text-muted-foreground aria-selected:text-muted-foreground",
822
+ defaultClassNames.outside
823
+ ),
824
+ disabled: cn(
825
+ "text-muted-foreground opacity-50",
826
+ defaultClassNames.disabled
827
+ ),
828
+ hidden: cn("invisible", defaultClassNames.hidden),
829
+ ...classNames
830
+ },
831
+ components: {
832
+ Root: ({ className: className2, rootRef, ...props2 }) => {
833
+ return /* @__PURE__ */ jsx(
834
+ "div",
835
+ {
836
+ "data-slot": "calendar",
837
+ ref: rootRef,
838
+ className: cn(className2),
839
+ ...props2
840
+ }
841
+ );
842
+ },
843
+ Chevron: ({ className: className2, orientation, ...props2 }) => {
844
+ if (orientation === "left") {
845
+ return /* @__PURE__ */ jsx(ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
846
+ }
847
+ if (orientation === "right") {
848
+ return /* @__PURE__ */ jsx(ChevronRightIcon, { className: cn("size-4", className2), ...props2 });
849
+ }
850
+ return /* @__PURE__ */ jsx(ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
851
+ },
852
+ DayButton: ({ ...props2 }) => /* @__PURE__ */ jsx(CalendarDayButton, { locale, ...props2 }),
853
+ WeekNumber: ({ children, ...props2 }) => {
854
+ return /* @__PURE__ */ jsx("td", { ...props2, children: /* @__PURE__ */ jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) });
855
+ },
856
+ ...components
857
+ },
858
+ ...props
859
+ }
860
+ );
861
+ }
862
+ function CalendarDayButton({
863
+ className,
864
+ day,
865
+ modifiers,
866
+ locale,
867
+ ...props
868
+ }) {
869
+ const defaultClassNames = getDefaultClassNames();
870
+ const ref = React8.useRef(null);
871
+ React8.useEffect(() => {
872
+ if (modifiers.focused) ref.current?.focus();
873
+ }, [modifiers.focused]);
874
+ return /* @__PURE__ */ jsx(
875
+ Button,
876
+ {
877
+ ref,
878
+ variant: "ghost",
879
+ size: "icon",
880
+ "data-day": day.date.toLocaleDateString(locale?.code),
881
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
882
+ "data-range-start": modifiers.range_start,
883
+ "data-range-end": modifiers.range_end,
884
+ "data-range-middle": modifiers.range_middle,
885
+ className: cn(
886
+ "relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground [&>span]:text-xs [&>span]:opacity-70",
887
+ defaultClassNames.day,
888
+ className
889
+ ),
890
+ ...props
891
+ }
892
+ );
893
+ }
894
+ var CarouselContext = React8.createContext(null);
895
+ function useCarousel() {
896
+ const context = React8.useContext(CarouselContext);
897
+ if (!context) {
898
+ throw new Error("useCarousel must be used within a <Carousel />");
899
+ }
900
+ return context;
901
+ }
902
+ function Carousel({
903
+ orientation = "horizontal",
904
+ opts,
905
+ setApi,
906
+ plugins,
907
+ className,
908
+ children,
909
+ ...props
910
+ }) {
911
+ const [carouselRef, api] = useEmblaCarousel(
912
+ {
913
+ ...opts,
914
+ axis: orientation === "horizontal" ? "x" : "y"
915
+ },
916
+ plugins
917
+ );
918
+ const [canScrollPrev, setCanScrollPrev] = React8.useState(false);
919
+ const [canScrollNext, setCanScrollNext] = React8.useState(false);
920
+ const onSelect = React8.useCallback((api2) => {
921
+ if (!api2) return;
922
+ setCanScrollPrev(api2.canScrollPrev());
923
+ setCanScrollNext(api2.canScrollNext());
924
+ }, []);
925
+ const scrollPrev = React8.useCallback(() => {
926
+ api?.scrollPrev();
927
+ }, [api]);
928
+ const scrollNext = React8.useCallback(() => {
929
+ api?.scrollNext();
930
+ }, [api]);
931
+ const handleKeyDown = React8.useCallback(
932
+ (event) => {
933
+ if (event.key === "ArrowLeft") {
934
+ event.preventDefault();
935
+ scrollPrev();
936
+ } else if (event.key === "ArrowRight") {
937
+ event.preventDefault();
938
+ scrollNext();
939
+ }
940
+ },
941
+ [scrollPrev, scrollNext]
942
+ );
943
+ React8.useEffect(() => {
944
+ if (!api || !setApi) return;
945
+ setApi(api);
946
+ }, [api, setApi]);
947
+ React8.useEffect(() => {
948
+ if (!api) return;
949
+ onSelect(api);
950
+ api.on("reInit", onSelect);
951
+ api.on("select", onSelect);
952
+ return () => {
953
+ api?.off("select", onSelect);
954
+ };
955
+ }, [api, onSelect]);
956
+ return /* @__PURE__ */ jsx(
957
+ CarouselContext.Provider,
958
+ {
959
+ value: {
960
+ carouselRef,
961
+ api,
962
+ opts,
963
+ orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
964
+ scrollPrev,
965
+ scrollNext,
966
+ canScrollPrev,
967
+ canScrollNext
968
+ },
969
+ children: /* @__PURE__ */ jsx(
970
+ "div",
971
+ {
972
+ onKeyDownCapture: handleKeyDown,
973
+ className: cn("relative", className),
974
+ role: "region",
975
+ "aria-roledescription": "carousel",
976
+ "data-slot": "carousel",
977
+ ...props,
978
+ children
979
+ }
980
+ )
981
+ }
982
+ );
983
+ }
984
+ function CarouselContent({ className, ...props }) {
985
+ const { carouselRef, orientation } = useCarousel();
986
+ return /* @__PURE__ */ jsx(
987
+ "div",
988
+ {
989
+ ref: carouselRef,
990
+ className: "overflow-hidden",
991
+ "data-slot": "carousel-content",
992
+ children: /* @__PURE__ */ jsx(
993
+ "div",
994
+ {
995
+ className: cn(
996
+ "flex",
997
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
998
+ className
999
+ ),
1000
+ ...props
1001
+ }
1002
+ )
1003
+ }
1004
+ );
1005
+ }
1006
+ function CarouselItem({ className, ...props }) {
1007
+ const { orientation } = useCarousel();
1008
+ return /* @__PURE__ */ jsx(
1009
+ "div",
1010
+ {
1011
+ role: "group",
1012
+ "aria-roledescription": "slide",
1013
+ "data-slot": "carousel-item",
1014
+ className: cn(
1015
+ "min-w-0 shrink-0 grow-0 basis-full",
1016
+ orientation === "horizontal" ? "pl-4" : "pt-4",
1017
+ className
1018
+ ),
1019
+ ...props
1020
+ }
1021
+ );
1022
+ }
1023
+ function CarouselPrevious({
1024
+ className,
1025
+ variant = "outline",
1026
+ size = "icon-sm",
1027
+ ...props
1028
+ }) {
1029
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
1030
+ return /* @__PURE__ */ jsxs(
1031
+ Button,
1032
+ {
1033
+ "data-slot": "carousel-previous",
1034
+ variant,
1035
+ size,
1036
+ className: cn(
1037
+ "absolute touch-manipulation",
1038
+ orientation === "horizontal" ? "inset-y-0 -left-12 my-auto" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
1039
+ className
1040
+ ),
1041
+ disabled: !canScrollPrev,
1042
+ onClick: scrollPrev,
1043
+ ...props,
1044
+ children: [
1045
+ /* @__PURE__ */ jsx(ChevronLeftIcon, {}),
1046
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
1047
+ ]
1048
+ }
1049
+ );
1050
+ }
1051
+ function CarouselNext({
1052
+ className,
1053
+ variant = "outline",
1054
+ size = "icon-sm",
1055
+ ...props
1056
+ }) {
1057
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
1058
+ return /* @__PURE__ */ jsxs(
1059
+ Button,
1060
+ {
1061
+ "data-slot": "carousel-next",
1062
+ variant,
1063
+ size,
1064
+ className: cn(
1065
+ "absolute touch-manipulation",
1066
+ orientation === "horizontal" ? "inset-y-0 -right-12 my-auto" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
1067
+ className
1068
+ ),
1069
+ disabled: !canScrollNext,
1070
+ onClick: scrollNext,
1071
+ ...props,
1072
+ children: [
1073
+ /* @__PURE__ */ jsx(ChevronRightIcon, {}),
1074
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
1075
+ ]
1076
+ }
1077
+ );
1078
+ }
1079
+ var THEMES = { light: "", dark: ".dark" };
1080
+ var INITIAL_DIMENSION = { width: 320, height: 200 };
1081
+ var ChartContext = React8.createContext(null);
1082
+ function useChart() {
1083
+ const context = React8.useContext(ChartContext);
1084
+ if (!context) {
1085
+ throw new Error("useChart must be used within a <ChartContainer />");
1086
+ }
1087
+ return context;
1088
+ }
1089
+ function ChartContainer({
1090
+ id,
1091
+ className,
1092
+ children,
1093
+ config,
1094
+ initialDimension = INITIAL_DIMENSION,
1095
+ ...props
1096
+ }) {
1097
+ const uniqueId = React8.useId();
1098
+ const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
1099
+ return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
1100
+ "div",
1101
+ {
1102
+ "data-slot": "chart",
1103
+ "data-chart": chartId,
1104
+ className: cn(
1105
+ "flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
1106
+ className
1107
+ ),
1108
+ ...props,
1109
+ children: [
1110
+ /* @__PURE__ */ jsx(ChartStyle, { id: chartId, config }),
1111
+ /* @__PURE__ */ jsx(
1112
+ RechartsPrimitive.ResponsiveContainer,
1113
+ {
1114
+ initialDimension,
1115
+ children
1116
+ }
1117
+ )
1118
+ ]
1119
+ }
1120
+ ) });
1121
+ }
1122
+ var ChartStyle = ({ id, config }) => {
1123
+ const colorConfig = Object.entries(config).filter(
1124
+ ([, config2]) => config2.theme ?? config2.color
1125
+ );
1126
+ if (!colorConfig.length) {
1127
+ return null;
1128
+ }
1129
+ return /* @__PURE__ */ jsx(
1130
+ "style",
1131
+ {
1132
+ dangerouslySetInnerHTML: {
1133
+ __html: Object.entries(THEMES).map(
1134
+ ([theme, prefix]) => `
1135
+ ${prefix} [data-chart=${id}] {
1136
+ ${colorConfig.map(([key, itemConfig]) => {
1137
+ const color = itemConfig.theme?.[theme] ?? itemConfig.color;
1138
+ return color ? ` --color-${key}: ${color};` : null;
1139
+ }).join("\n")}
1140
+ }
1141
+ `
1142
+ ).join("\n")
1143
+ }
1144
+ }
1145
+ );
1146
+ };
1147
+ var ChartTooltip = RechartsPrimitive.Tooltip;
1148
+ function ChartTooltipContent({
1149
+ active,
1150
+ payload,
1151
+ className,
1152
+ indicator = "dot",
1153
+ hideLabel = false,
1154
+ hideIndicator = false,
1155
+ label,
1156
+ labelFormatter,
1157
+ labelClassName,
1158
+ formatter,
1159
+ color,
1160
+ nameKey,
1161
+ labelKey
1162
+ }) {
1163
+ const { config } = useChart();
1164
+ const tooltipLabel = React8.useMemo(() => {
1165
+ if (hideLabel || !payload?.length) {
1166
+ return null;
1167
+ }
1168
+ const [item] = payload;
1169
+ const key = `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`;
1170
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1171
+ const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
1172
+ if (labelFormatter) {
1173
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
1174
+ }
1175
+ if (!value) {
1176
+ return null;
1177
+ }
1178
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: value });
1179
+ }, [
1180
+ label,
1181
+ labelFormatter,
1182
+ payload,
1183
+ hideLabel,
1184
+ labelClassName,
1185
+ config,
1186
+ labelKey
1187
+ ]);
1188
+ if (!active || !payload?.length) {
1189
+ return null;
1190
+ }
1191
+ const nestLabel = payload.length === 1 && indicator !== "dot";
1192
+ return /* @__PURE__ */ jsxs(
1193
+ "div",
1194
+ {
1195
+ className: cn(
1196
+ "grid min-w-32 items-start gap-1.5 rounded-none border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
1197
+ className
1198
+ ),
1199
+ children: [
1200
+ !nestLabel ? tooltipLabel : null,
1201
+ /* @__PURE__ */ jsx("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
1202
+ const key = `${nameKey ?? item.name ?? item.dataKey ?? "value"}`;
1203
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1204
+ const indicatorColor = color ?? item.payload?.fill ?? item.color;
1205
+ return /* @__PURE__ */ jsx(
1206
+ "div",
1207
+ {
1208
+ className: cn(
1209
+ "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
1210
+ indicator === "dot" && "items-center"
1211
+ ),
1212
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [
1213
+ itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx(
1214
+ "div",
1215
+ {
1216
+ className: cn(
1217
+ "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
1218
+ {
1219
+ "h-2.5 w-2.5": indicator === "dot",
1220
+ "w-1": indicator === "line",
1221
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
1222
+ "my-0.5": nestLabel && indicator === "dashed"
1223
+ }
1224
+ ),
1225
+ style: {
1226
+ "--color-bg": indicatorColor,
1227
+ "--color-border": indicatorColor
1228
+ }
1229
+ }
1230
+ ),
1231
+ /* @__PURE__ */ jsxs(
1232
+ "div",
1233
+ {
1234
+ className: cn(
1235
+ "flex flex-1 justify-between leading-none",
1236
+ nestLabel ? "items-end" : "items-center"
1237
+ ),
1238
+ children: [
1239
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
1240
+ nestLabel ? tooltipLabel : null,
1241
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: itemConfig?.label ?? item.name })
1242
+ ] }),
1243
+ item.value != null && /* @__PURE__ */ jsx("span", { className: "font-mono font-medium text-foreground tabular-nums", children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value) })
1244
+ ]
1245
+ }
1246
+ )
1247
+ ] })
1248
+ },
1249
+ index
1250
+ );
1251
+ }) })
1252
+ ]
1253
+ }
1254
+ );
1255
+ }
1256
+ var ChartLegend = RechartsPrimitive.Legend;
1257
+ function ChartLegendContent({
1258
+ className,
1259
+ hideIcon = false,
1260
+ payload,
1261
+ verticalAlign = "bottom",
1262
+ nameKey
1263
+ }) {
1264
+ const { config } = useChart();
1265
+ if (!payload?.length) {
1266
+ return null;
1267
+ }
1268
+ return /* @__PURE__ */ jsx(
1269
+ "div",
1270
+ {
1271
+ className: cn(
1272
+ "flex items-center justify-center gap-4",
1273
+ verticalAlign === "top" ? "pb-3" : "pt-3",
1274
+ className
1275
+ ),
1276
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
1277
+ const key = `${nameKey ?? item.dataKey ?? "value"}`;
1278
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
1279
+ return /* @__PURE__ */ jsxs(
1280
+ "div",
1281
+ {
1282
+ className: cn(
1283
+ "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
1284
+ ),
1285
+ children: [
1286
+ itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx(
1287
+ "div",
1288
+ {
1289
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
1290
+ style: {
1291
+ backgroundColor: item.color
1292
+ }
1293
+ }
1294
+ ),
1295
+ itemConfig?.label
1296
+ ]
1297
+ },
1298
+ index
1299
+ );
1300
+ })
1301
+ }
1302
+ );
1303
+ }
1304
+ function getPayloadConfigFromPayload(config, payload, key) {
1305
+ if (typeof payload !== "object" || payload === null) {
1306
+ return void 0;
1307
+ }
1308
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
1309
+ let configLabelKey = key;
1310
+ if (key in payload && typeof payload[key] === "string") {
1311
+ configLabelKey = payload[key];
1312
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
1313
+ configLabelKey = payloadPayload[key];
1314
+ }
1315
+ return configLabelKey in config ? config[configLabelKey] : config[key];
1316
+ }
1317
+ function Checkbox({
1318
+ className,
1319
+ ...props
1320
+ }) {
1321
+ return /* @__PURE__ */ jsx(
1322
+ Checkbox$1.Root,
1323
+ {
1324
+ "data-slot": "checkbox",
1325
+ className: cn(
1326
+ "peer relative flex size-4 shrink-0 items-center justify-center rounded-none border border-input transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-1 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
1327
+ className
1328
+ ),
1329
+ ...props,
1330
+ children: /* @__PURE__ */ jsx(
1331
+ Checkbox$1.Indicator,
1332
+ {
1333
+ "data-slot": "checkbox-indicator",
1334
+ className: "grid place-content-center text-current transition-none [&>svg]:size-3.5",
1335
+ children: /* @__PURE__ */ jsx(
1336
+ CheckIcon,
1337
+ {}
1338
+ )
1339
+ }
1340
+ )
1341
+ }
1342
+ );
1343
+ }
1344
+ function Collapsible({
1345
+ ...props
1346
+ }) {
1347
+ return /* @__PURE__ */ jsx(Collapsible$1.Root, { "data-slot": "collapsible", ...props });
1348
+ }
1349
+ function CollapsibleTrigger({
1350
+ ...props
1351
+ }) {
1352
+ return /* @__PURE__ */ jsx(
1353
+ Collapsible$1.CollapsibleTrigger,
1354
+ {
1355
+ "data-slot": "collapsible-trigger",
1356
+ ...props
1357
+ }
1358
+ );
1359
+ }
1360
+ function CollapsibleContent({
1361
+ ...props
1362
+ }) {
1363
+ return /* @__PURE__ */ jsx(
1364
+ Collapsible$1.CollapsibleContent,
1365
+ {
1366
+ "data-slot": "collapsible-content",
1367
+ ...props
1368
+ }
1369
+ );
1370
+ }
1371
+ var Combobox = Combobox$1.Root;
1372
+ function ComboboxValue({ ...props }) {
1373
+ return /* @__PURE__ */ jsx(Combobox$1.Value, { "data-slot": "combobox-value", ...props });
1374
+ }
1375
+ function ComboboxTrigger({
1376
+ className,
1377
+ children,
1378
+ ...props
1379
+ }) {
1380
+ return /* @__PURE__ */ jsxs(
1381
+ Combobox$1.Trigger,
1382
+ {
1383
+ "data-slot": "combobox-trigger",
1384
+ className: cn("[&_svg:not([class*='size-'])]:size-4", className),
1385
+ ...props,
1386
+ children: [
1387
+ children,
1388
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none size-4 text-muted-foreground" })
1389
+ ]
1390
+ }
1391
+ );
1392
+ }
1393
+ function ComboboxClear({ className, ...props }) {
1394
+ return /* @__PURE__ */ jsx(
1395
+ Combobox$1.Clear,
1396
+ {
1397
+ "data-slot": "combobox-clear",
1398
+ render: /* @__PURE__ */ jsx(InputGroupButton, { variant: "ghost", size: "icon-xs" }),
1399
+ className: cn(className),
1400
+ ...props,
1401
+ children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
1402
+ }
1403
+ );
1404
+ }
1405
+ function ComboboxInput({
1406
+ className,
1407
+ children,
1408
+ disabled = false,
1409
+ showTrigger = true,
1410
+ showClear = false,
1411
+ ...props
1412
+ }) {
1413
+ return /* @__PURE__ */ jsxs(InputGroup, { className: cn("w-auto", className), children: [
1414
+ /* @__PURE__ */ jsx(
1415
+ Combobox$1.Input,
1416
+ {
1417
+ render: /* @__PURE__ */ jsx(InputGroupInput, { disabled }),
1418
+ ...props
1419
+ }
1420
+ ),
1421
+ /* @__PURE__ */ jsxs(InputGroupAddon, { align: "inline-end", children: [
1422
+ showTrigger && /* @__PURE__ */ jsx(
1423
+ InputGroupButton,
1424
+ {
1425
+ size: "icon-xs",
1426
+ variant: "ghost",
1427
+ asChild: true,
1428
+ "data-slot": "input-group-button",
1429
+ className: "group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent",
1430
+ disabled,
1431
+ children: /* @__PURE__ */ jsx(ComboboxTrigger, {})
1432
+ }
1433
+ ),
1434
+ showClear && /* @__PURE__ */ jsx(ComboboxClear, { disabled })
1435
+ ] }),
1436
+ children
1437
+ ] });
1438
+ }
1439
+ function ComboboxContent({
1440
+ className,
1441
+ side = "bottom",
1442
+ sideOffset = 6,
1443
+ align = "start",
1444
+ alignOffset = 0,
1445
+ anchor,
1446
+ ...props
1447
+ }) {
1448
+ return /* @__PURE__ */ jsx(Combobox$1.Portal, { children: /* @__PURE__ */ jsx(
1449
+ Combobox$1.Positioner,
1450
+ {
1451
+ side,
1452
+ sideOffset,
1453
+ align,
1454
+ alignOffset,
1455
+ anchor,
1456
+ className: "isolate z-50",
1457
+ children: /* @__PURE__ */ jsx(
1458
+ Combobox$1.Popup,
1459
+ {
1460
+ "data-slot": "combobox-content",
1461
+ "data-chips": !!anchor,
1462
+ className: cn("group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-none bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
1463
+ ...props
1464
+ }
1465
+ )
1466
+ }
1467
+ ) });
1468
+ }
1469
+ function ComboboxList({ className, ...props }) {
1470
+ return /* @__PURE__ */ jsx(
1471
+ Combobox$1.List,
1472
+ {
1473
+ "data-slot": "combobox-list",
1474
+ className: cn(
1475
+ "no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain data-empty:p-0",
1476
+ className
1477
+ ),
1478
+ ...props
1479
+ }
1480
+ );
1481
+ }
1482
+ function ComboboxItem({
1483
+ className,
1484
+ children,
1485
+ ...props
1486
+ }) {
1487
+ return /* @__PURE__ */ jsxs(
1488
+ Combobox$1.Item,
1489
+ {
1490
+ "data-slot": "combobox-item",
1491
+ className: cn(
1492
+ "relative flex w-full cursor-default items-center gap-2 rounded-none py-2 pr-8 pl-2 text-xs outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1493
+ className
1494
+ ),
1495
+ ...props,
1496
+ children: [
1497
+ children,
1498
+ /* @__PURE__ */ jsx(
1499
+ Combobox$1.ItemIndicator,
1500
+ {
1501
+ render: /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
1502
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "pointer-events-none" })
1503
+ }
1504
+ )
1505
+ ]
1506
+ }
1507
+ );
1508
+ }
1509
+ function ComboboxGroup({ className, ...props }) {
1510
+ return /* @__PURE__ */ jsx(
1511
+ Combobox$1.Group,
1512
+ {
1513
+ "data-slot": "combobox-group",
1514
+ className: cn(className),
1515
+ ...props
1516
+ }
1517
+ );
1518
+ }
1519
+ function ComboboxLabel({
1520
+ className,
1521
+ ...props
1522
+ }) {
1523
+ return /* @__PURE__ */ jsx(
1524
+ Combobox$1.GroupLabel,
1525
+ {
1526
+ "data-slot": "combobox-label",
1527
+ className: cn("px-2 py-2 text-xs text-muted-foreground", className),
1528
+ ...props
1529
+ }
1530
+ );
1531
+ }
1532
+ function ComboboxCollection({ ...props }) {
1533
+ return /* @__PURE__ */ jsx(Combobox$1.Collection, { "data-slot": "combobox-collection", ...props });
1534
+ }
1535
+ function ComboboxEmpty({ className, ...props }) {
1536
+ return /* @__PURE__ */ jsx(
1537
+ Combobox$1.Empty,
1538
+ {
1539
+ "data-slot": "combobox-empty",
1540
+ className: cn(
1541
+ "hidden w-full justify-center py-2 text-center text-xs text-muted-foreground group-data-empty/combobox-content:flex",
1542
+ className
1543
+ ),
1544
+ ...props
1545
+ }
1546
+ );
1547
+ }
1548
+ function ComboboxSeparator({
1549
+ className,
1550
+ ...props
1551
+ }) {
1552
+ return /* @__PURE__ */ jsx(
1553
+ Combobox$1.Separator,
1554
+ {
1555
+ "data-slot": "combobox-separator",
1556
+ className: cn("-mx-1 h-px bg-border", className),
1557
+ ...props
1558
+ }
1559
+ );
1560
+ }
1561
+ function ComboboxChips({
1562
+ className,
1563
+ ...props
1564
+ }) {
1565
+ return /* @__PURE__ */ jsx(
1566
+ Combobox$1.Chips,
1567
+ {
1568
+ "data-slot": "combobox-chips",
1569
+ className: cn(
1570
+ "flex min-h-8 flex-wrap items-center gap-1 rounded-none border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-xs transition-colors focus-within:border-ring focus-within:ring-1 focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-1 has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40",
1571
+ className
1572
+ ),
1573
+ ...props
1574
+ }
1575
+ );
1576
+ }
1577
+ function ComboboxChip({
1578
+ className,
1579
+ children,
1580
+ showRemove = true,
1581
+ ...props
1582
+ }) {
1583
+ return /* @__PURE__ */ jsxs(
1584
+ Combobox$1.Chip,
1585
+ {
1586
+ "data-slot": "combobox-chip",
1587
+ className: cn(
1588
+ "flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-none bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0",
1589
+ className
1590
+ ),
1591
+ ...props,
1592
+ children: [
1593
+ children,
1594
+ showRemove && /* @__PURE__ */ jsx(
1595
+ Combobox$1.ChipRemove,
1596
+ {
1597
+ render: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon-xs" }),
1598
+ className: "-ml-1 opacity-50 hover:opacity-100",
1599
+ "data-slot": "combobox-chip-remove",
1600
+ children: /* @__PURE__ */ jsx(XIcon, { className: "pointer-events-none" })
1601
+ }
1602
+ )
1603
+ ]
1604
+ }
1605
+ );
1606
+ }
1607
+ function ComboboxChipsInput({
1608
+ className,
1609
+ ...props
1610
+ }) {
1611
+ return /* @__PURE__ */ jsx(
1612
+ Combobox$1.Input,
1613
+ {
1614
+ "data-slot": "combobox-chip-input",
1615
+ className: cn("min-w-16 flex-1 outline-none", className),
1616
+ ...props
1617
+ }
1618
+ );
1619
+ }
1620
+ function useComboboxAnchor() {
1621
+ return React8.useRef(null);
1622
+ }
1623
+ function Command({
1624
+ className,
1625
+ ...props
1626
+ }) {
1627
+ return /* @__PURE__ */ jsx(
1628
+ Command$1,
1629
+ {
1630
+ "data-slot": "command",
1631
+ className: cn(
1632
+ "flex size-full flex-col overflow-hidden rounded-none bg-popover text-popover-foreground",
1633
+ className
1634
+ ),
1635
+ ...props
1636
+ }
1637
+ );
1638
+ }
1639
+ function CommandDialog({
1640
+ title = "Command Palette",
1641
+ description = "Search for a command to run...",
1642
+ children,
1643
+ className,
1644
+ showCloseButton = false,
1645
+ ...props
1646
+ }) {
1647
+ return /* @__PURE__ */ jsxs(Dialog, { ...props, children: [
1648
+ /* @__PURE__ */ jsxs(DialogHeader, { className: "sr-only", children: [
1649
+ /* @__PURE__ */ jsx(DialogTitle, { children: title }),
1650
+ /* @__PURE__ */ jsx(DialogDescription, { children: description })
1651
+ ] }),
1652
+ /* @__PURE__ */ jsx(
1653
+ DialogContent,
1654
+ {
1655
+ className: cn(
1656
+ "top-1/3 translate-y-0 overflow-hidden rounded-none p-0",
1657
+ className
1658
+ ),
1659
+ showCloseButton,
1660
+ children
1661
+ }
1662
+ )
1663
+ ] });
1664
+ }
1665
+ function CommandInput({
1666
+ className,
1667
+ ...props
1668
+ }) {
1669
+ return /* @__PURE__ */ jsx("div", { "data-slot": "command-input-wrapper", className: "border-b pb-0", children: /* @__PURE__ */ jsxs(InputGroup, { className: "h-8 border-none border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!", children: [
1670
+ /* @__PURE__ */ jsx(
1671
+ Command$1.Input,
1672
+ {
1673
+ "data-slot": "command-input",
1674
+ className: cn(
1675
+ "w-full text-xs outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
1676
+ className
1677
+ ),
1678
+ ...props
1679
+ }
1680
+ ),
1681
+ /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })
1682
+ ] }) });
1683
+ }
1684
+ function CommandList({
1685
+ className,
1686
+ ...props
1687
+ }) {
1688
+ return /* @__PURE__ */ jsx(
1689
+ Command$1.List,
1690
+ {
1691
+ "data-slot": "command-list",
1692
+ className: cn(
1693
+ "no-scrollbar max-h-72 scroll-py-0 overflow-x-hidden overflow-y-auto outline-none",
1694
+ className
1695
+ ),
1696
+ ...props
1697
+ }
1698
+ );
1699
+ }
1700
+ function CommandEmpty({
1701
+ className,
1702
+ ...props
1703
+ }) {
1704
+ return /* @__PURE__ */ jsx(
1705
+ Command$1.Empty,
1706
+ {
1707
+ "data-slot": "command-empty",
1708
+ className: cn("py-6 text-center text-xs", className),
1709
+ ...props
1710
+ }
1711
+ );
1712
+ }
1713
+ function CommandGroup({
1714
+ className,
1715
+ ...props
1716
+ }) {
1717
+ return /* @__PURE__ */ jsx(
1718
+ Command$1.Group,
1719
+ {
1720
+ "data-slot": "command-group",
1721
+ className: cn(
1722
+ "overflow-hidden text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:text-muted-foreground",
1723
+ className
1724
+ ),
1725
+ ...props
1726
+ }
1727
+ );
1728
+ }
1729
+ function CommandSeparator({
1730
+ className,
1731
+ ...props
1732
+ }) {
1733
+ return /* @__PURE__ */ jsx(
1734
+ Command$1.Separator,
1735
+ {
1736
+ "data-slot": "command-separator",
1737
+ className: cn("-mx-1 h-px bg-border", className),
1738
+ ...props
1739
+ }
1740
+ );
1741
+ }
1742
+ function CommandItem({
1743
+ className,
1744
+ children,
1745
+ ...props
1746
+ }) {
1747
+ return /* @__PURE__ */ jsxs(
1748
+ Command$1.Item,
1749
+ {
1750
+ "data-slot": "command-item",
1751
+ className: cn(
1752
+ "group/command-item relative flex cursor-default items-center gap-2 rounded-none px-2 py-2 text-xs outline-hidden select-none in-data-[slot=dialog-content]:rounded-none! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground",
1753
+ className
1754
+ ),
1755
+ ...props,
1756
+ children: [
1757
+ children,
1758
+ /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })
1759
+ ]
1760
+ }
1761
+ );
1762
+ }
1763
+ function CommandShortcut({
1764
+ className,
1765
+ ...props
1766
+ }) {
1767
+ return /* @__PURE__ */ jsx(
1768
+ "span",
1769
+ {
1770
+ "data-slot": "command-shortcut",
1771
+ className: cn(
1772
+ "ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground",
1773
+ className
1774
+ ),
1775
+ ...props
1776
+ }
1777
+ );
1778
+ }
1779
+ function DirectionProvider({
1780
+ dir,
1781
+ direction,
1782
+ children
1783
+ }) {
1784
+ return /* @__PURE__ */ jsx(Direction.DirectionProvider, { dir: direction ?? dir, children });
1785
+ }
1786
+ var useDirection = Direction.useDirection;
1787
+ function Drawer({
1788
+ ...props
1789
+ }) {
1790
+ return /* @__PURE__ */ jsx(Drawer$1.Root, { "data-slot": "drawer", ...props });
1791
+ }
1792
+ function DrawerTrigger({
1793
+ ...props
1794
+ }) {
1795
+ return /* @__PURE__ */ jsx(Drawer$1.Trigger, { "data-slot": "drawer-trigger", ...props });
1796
+ }
1797
+ function DrawerPortal({
1798
+ ...props
1799
+ }) {
1800
+ return /* @__PURE__ */ jsx(Drawer$1.Portal, { "data-slot": "drawer-portal", ...props });
1801
+ }
1802
+ function DrawerClose({
1803
+ ...props
1804
+ }) {
1805
+ return /* @__PURE__ */ jsx(Drawer$1.Close, { "data-slot": "drawer-close", ...props });
1806
+ }
1807
+ function DrawerOverlay({
1808
+ className,
1809
+ ...props
1810
+ }) {
1811
+ return /* @__PURE__ */ jsx(
1812
+ Drawer$1.Overlay,
1813
+ {
1814
+ "data-slot": "drawer-overlay",
1815
+ className: cn(
1816
+ "fixed inset-0 z-50 bg-black/10 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
1817
+ className
1818
+ ),
1819
+ ...props
1820
+ }
1821
+ );
1822
+ }
1823
+ function DrawerContent({
1824
+ className,
1825
+ children,
1826
+ ...props
1827
+ }) {
1828
+ return /* @__PURE__ */ jsxs(DrawerPortal, { "data-slot": "drawer-portal", children: [
1829
+ /* @__PURE__ */ jsx(DrawerOverlay, {}),
1830
+ /* @__PURE__ */ jsxs(
1831
+ Drawer$1.Content,
1832
+ {
1833
+ "data-slot": "drawer-content",
1834
+ className: cn(
1835
+ "group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-xs/relaxed text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-none data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-none data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-none data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-none data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
1836
+ className
1837
+ ),
1838
+ ...props,
1839
+ children: [
1840
+ /* @__PURE__ */ jsx("div", { className: "mx-auto mt-4 hidden h-1 w-[100px] shrink-0 rounded-none bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }),
1841
+ children
1842
+ ]
1843
+ }
1844
+ )
1845
+ ] });
1846
+ }
1847
+ function DrawerHeader({ className, ...props }) {
1848
+ return /* @__PURE__ */ jsx(
1849
+ "div",
1850
+ {
1851
+ "data-slot": "drawer-header",
1852
+ className: cn(
1853
+ "flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-0.5 md:text-left",
1854
+ className
1855
+ ),
1856
+ ...props
1857
+ }
1858
+ );
1859
+ }
1860
+ function DrawerFooter({ className, ...props }) {
1861
+ return /* @__PURE__ */ jsx(
1862
+ "div",
1863
+ {
1864
+ "data-slot": "drawer-footer",
1865
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
1866
+ ...props
1867
+ }
1868
+ );
1869
+ }
1870
+ function DrawerTitle({
1871
+ className,
1872
+ ...props
1873
+ }) {
1874
+ return /* @__PURE__ */ jsx(
1875
+ Drawer$1.Title,
1876
+ {
1877
+ "data-slot": "drawer-title",
1878
+ className: cn(
1879
+ "font-heading text-sm font-medium text-foreground",
1880
+ className
1881
+ ),
1882
+ ...props
1883
+ }
1884
+ );
1885
+ }
1886
+ function DrawerDescription({
1887
+ className,
1888
+ ...props
1889
+ }) {
1890
+ return /* @__PURE__ */ jsx(
1891
+ Drawer$1.Description,
1892
+ {
1893
+ "data-slot": "drawer-description",
1894
+ className: cn("text-xs/relaxed text-muted-foreground", className),
1895
+ ...props
1896
+ }
1897
+ );
1898
+ }
1899
+ function Empty({ className, ...props }) {
1900
+ return /* @__PURE__ */ jsx(
1901
+ "div",
1902
+ {
1903
+ "data-slot": "empty",
1904
+ className: cn(
1905
+ "flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-none border-dashed p-6 text-center text-balance",
1906
+ className
1907
+ ),
1908
+ ...props
1909
+ }
1910
+ );
1911
+ }
1912
+ function EmptyHeader({ className, ...props }) {
1913
+ return /* @__PURE__ */ jsx(
1914
+ "div",
1915
+ {
1916
+ "data-slot": "empty-header",
1917
+ className: cn("flex max-w-sm flex-col items-center gap-2", className),
1918
+ ...props
1919
+ }
1920
+ );
1921
+ }
1922
+ var emptyMediaVariants = cva(
1923
+ "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
1924
+ {
1925
+ variants: {
1926
+ variant: {
1927
+ default: "bg-transparent",
1928
+ icon: "flex size-8 shrink-0 items-center justify-center rounded-none bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
1929
+ }
1930
+ },
1931
+ defaultVariants: {
1932
+ variant: "default"
1933
+ }
1934
+ }
1935
+ );
1936
+ function EmptyMedia({
1937
+ className,
1938
+ variant = "default",
1939
+ ...props
1940
+ }) {
1941
+ return /* @__PURE__ */ jsx(
1942
+ "div",
1943
+ {
1944
+ "data-slot": "empty-icon",
1945
+ "data-variant": variant,
1946
+ className: cn(emptyMediaVariants({ variant, className })),
1947
+ ...props
1948
+ }
1949
+ );
1950
+ }
1951
+ function EmptyTitle({ className, ...props }) {
1952
+ return /* @__PURE__ */ jsx(
1953
+ "div",
1954
+ {
1955
+ "data-slot": "empty-title",
1956
+ className: cn("font-heading text-sm font-medium", className),
1957
+ ...props
1958
+ }
1959
+ );
1960
+ }
1961
+ function EmptyDescription({ className, ...props }) {
1962
+ return /* @__PURE__ */ jsx(
1963
+ "div",
1964
+ {
1965
+ "data-slot": "empty-description",
1966
+ className: cn(
1967
+ "text-xs/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
1968
+ className
1969
+ ),
1970
+ ...props
1971
+ }
1972
+ );
1973
+ }
1974
+ function EmptyContent({ className, ...props }) {
1975
+ return /* @__PURE__ */ jsx(
1976
+ "div",
1977
+ {
1978
+ "data-slot": "empty-content",
1979
+ className: cn(
1980
+ "flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-xs text-balance",
1981
+ className
1982
+ ),
1983
+ ...props
1984
+ }
1985
+ );
1986
+ }
1987
+ function FieldSet({ className, ...props }) {
1988
+ return /* @__PURE__ */ jsx(
1989
+ "fieldset",
1990
+ {
1991
+ "data-slot": "field-set",
1992
+ className: cn(
1993
+ "flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
1994
+ className
1995
+ ),
1996
+ ...props
1997
+ }
1998
+ );
1999
+ }
2000
+ function FieldLegend({
2001
+ className,
2002
+ variant = "legend",
2003
+ ...props
2004
+ }) {
2005
+ return /* @__PURE__ */ jsx(
2006
+ "legend",
2007
+ {
2008
+ "data-slot": "field-legend",
2009
+ "data-variant": variant,
2010
+ className: cn(
2011
+ "mb-2.5 font-medium data-[variant=label]:text-xs data-[variant=legend]:text-sm",
2012
+ className
2013
+ ),
2014
+ ...props
2015
+ }
2016
+ );
2017
+ }
2018
+ function FieldGroup({ className, ...props }) {
2019
+ return /* @__PURE__ */ jsx(
2020
+ "div",
2021
+ {
2022
+ "data-slot": "field-group",
2023
+ className: cn(
2024
+ "group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",
2025
+ className
2026
+ ),
2027
+ ...props
2028
+ }
2029
+ );
2030
+ }
2031
+ var fieldVariants = cva(
2032
+ "group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
2033
+ {
2034
+ variants: {
2035
+ orientation: {
2036
+ vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
2037
+ horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
2038
+ responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
2039
+ }
2040
+ },
2041
+ defaultVariants: {
2042
+ orientation: "vertical"
2043
+ }
2044
+ }
2045
+ );
2046
+ function Field({
2047
+ className,
2048
+ orientation = "vertical",
2049
+ ...props
2050
+ }) {
2051
+ return /* @__PURE__ */ jsx(
2052
+ "div",
2053
+ {
2054
+ role: "group",
2055
+ "data-slot": "field",
2056
+ "data-orientation": orientation,
2057
+ className: cn(fieldVariants({ orientation }), className),
2058
+ ...props
2059
+ }
2060
+ );
2061
+ }
2062
+ function FieldContent({ className, ...props }) {
2063
+ return /* @__PURE__ */ jsx(
2064
+ "div",
2065
+ {
2066
+ "data-slot": "field-content",
2067
+ className: cn(
2068
+ "group/field-content flex flex-1 flex-col gap-0.5 leading-snug",
2069
+ className
2070
+ ),
2071
+ ...props
2072
+ }
2073
+ );
2074
+ }
2075
+ function FieldLabel({
2076
+ className,
2077
+ ...props
2078
+ }) {
2079
+ return /* @__PURE__ */ jsx(
2080
+ Label,
2081
+ {
2082
+ "data-slot": "field-label",
2083
+ className: cn(
2084
+ "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-none has-[>[data-slot=field]]:border *:data-[slot=field]:p-2 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10",
2085
+ "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
2086
+ className
2087
+ ),
2088
+ ...props
2089
+ }
2090
+ );
2091
+ }
2092
+ function FieldTitle({ className, ...props }) {
2093
+ return /* @__PURE__ */ jsx(
2094
+ "div",
2095
+ {
2096
+ "data-slot": "field-label",
2097
+ className: cn(
2098
+ "flex w-fit items-center gap-2 text-xs/relaxed group-data-[disabled=true]/field:opacity-50",
2099
+ className
2100
+ ),
2101
+ ...props
2102
+ }
2103
+ );
2104
+ }
2105
+ function FieldDescription({ className, ...props }) {
2106
+ return /* @__PURE__ */ jsx(
2107
+ "p",
2108
+ {
2109
+ "data-slot": "field-description",
2110
+ className: cn(
2111
+ "text-left text-xs/relaxed leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5",
2112
+ "last:mt-0 nth-last-2:-mt-1",
2113
+ "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
2114
+ className
2115
+ ),
2116
+ ...props
2117
+ }
2118
+ );
2119
+ }
2120
+ function FieldSeparator({
2121
+ children,
2122
+ className,
2123
+ ...props
2124
+ }) {
585
2125
  return /* @__PURE__ */ jsxs(
586
- Command$1.Item,
2126
+ "div",
2127
+ {
2128
+ "data-slot": "field-separator",
2129
+ "data-content": !!children,
2130
+ className: cn(
2131
+ "relative -my-2 h-5 text-xs group-data-[variant=outline]/field-group:-mb-2",
2132
+ className
2133
+ ),
2134
+ ...props,
2135
+ children: [
2136
+ /* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }),
2137
+ children && /* @__PURE__ */ jsx(
2138
+ "span",
2139
+ {
2140
+ className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
2141
+ "data-slot": "field-separator-content",
2142
+ children
2143
+ }
2144
+ )
2145
+ ]
2146
+ }
2147
+ );
2148
+ }
2149
+ function FieldError({
2150
+ className,
2151
+ children,
2152
+ errors,
2153
+ ...props
2154
+ }) {
2155
+ const content = useMemo(() => {
2156
+ if (children) {
2157
+ return children;
2158
+ }
2159
+ if (!errors?.length) {
2160
+ return null;
2161
+ }
2162
+ const uniqueErrors = [
2163
+ ...new Map(errors.map((error) => [error?.message, error])).values()
2164
+ ];
2165
+ if (uniqueErrors?.length == 1) {
2166
+ return uniqueErrors[0]?.message;
2167
+ }
2168
+ return /* @__PURE__ */ jsx("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
2169
+ (error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index)
2170
+ ) });
2171
+ }, [children, errors]);
2172
+ if (!content) {
2173
+ return null;
2174
+ }
2175
+ return /* @__PURE__ */ jsx(
2176
+ "div",
2177
+ {
2178
+ role: "alert",
2179
+ "data-slot": "field-error",
2180
+ className: cn("text-xs font-normal text-destructive", className),
2181
+ ...props,
2182
+ children: content
2183
+ }
2184
+ );
2185
+ }
2186
+ function HoverCard({
2187
+ ...props
2188
+ }) {
2189
+ return /* @__PURE__ */ jsx(HoverCard$1.Root, { "data-slot": "hover-card", ...props });
2190
+ }
2191
+ function HoverCardTrigger({
2192
+ ...props
2193
+ }) {
2194
+ return /* @__PURE__ */ jsx(HoverCard$1.Trigger, { "data-slot": "hover-card-trigger", ...props });
2195
+ }
2196
+ function HoverCardContent({
2197
+ className,
2198
+ align = "center",
2199
+ sideOffset = 4,
2200
+ ...props
2201
+ }) {
2202
+ return /* @__PURE__ */ jsx(HoverCard$1.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsx(
2203
+ HoverCard$1.Content,
2204
+ {
2205
+ "data-slot": "hover-card-content",
2206
+ align,
2207
+ sideOffset,
2208
+ className: cn(
2209
+ "z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-none bg-popover p-2.5 text-xs/relaxed text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2210
+ className
2211
+ ),
2212
+ ...props
2213
+ }
2214
+ ) });
2215
+ }
2216
+ function InputOTP({
2217
+ className,
2218
+ containerClassName,
2219
+ ...props
2220
+ }) {
2221
+ return /* @__PURE__ */ jsx(
2222
+ OTPInput,
2223
+ {
2224
+ "data-slot": "input-otp",
2225
+ containerClassName: cn(
2226
+ "cn-input-otp flex items-center has-disabled:opacity-50",
2227
+ containerClassName
2228
+ ),
2229
+ spellCheck: false,
2230
+ className: cn("disabled:cursor-not-allowed", className),
2231
+ ...props
2232
+ }
2233
+ );
2234
+ }
2235
+ function InputOTPGroup({ className, ...props }) {
2236
+ return /* @__PURE__ */ jsx(
2237
+ "div",
2238
+ {
2239
+ "data-slot": "input-otp-group",
2240
+ className: cn(
2241
+ "flex items-center rounded-none has-aria-invalid:border-destructive has-aria-invalid:ring-1 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40",
2242
+ className
2243
+ ),
2244
+ ...props
2245
+ }
2246
+ );
2247
+ }
2248
+ function InputOTPSlot({
2249
+ index,
2250
+ className,
2251
+ ...props
2252
+ }) {
2253
+ const inputOTPContext = React8.useContext(OTPInputContext);
2254
+ const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
2255
+ return /* @__PURE__ */ jsxs(
2256
+ "div",
2257
+ {
2258
+ "data-slot": "input-otp-slot",
2259
+ "data-active": isActive,
2260
+ className: cn(
2261
+ "relative flex size-8 items-center justify-center border-y border-r border-input text-xs transition-all outline-none first:rounded-none first:border-l last:rounded-none aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-1 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40",
2262
+ className
2263
+ ),
2264
+ ...props,
2265
+ children: [
2266
+ char,
2267
+ hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
2268
+ ]
2269
+ }
2270
+ );
2271
+ }
2272
+ function InputOTPSeparator({ ...props }) {
2273
+ return /* @__PURE__ */ jsx(
2274
+ "div",
2275
+ {
2276
+ "data-slot": "input-otp-separator",
2277
+ className: "flex items-center [&_svg:not([class*='size-'])]:size-4",
2278
+ role: "separator",
2279
+ ...props,
2280
+ children: /* @__PURE__ */ jsx(
2281
+ MinusIcon,
2282
+ {}
2283
+ )
2284
+ }
2285
+ );
2286
+ }
2287
+ function ItemGroup({ className, ...props }) {
2288
+ return /* @__PURE__ */ jsx(
2289
+ "div",
2290
+ {
2291
+ role: "list",
2292
+ "data-slot": "item-group",
2293
+ className: cn(
2294
+ "group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2",
2295
+ className
2296
+ ),
2297
+ ...props
2298
+ }
2299
+ );
2300
+ }
2301
+ function ItemSeparator({
2302
+ className,
2303
+ ...props
2304
+ }) {
2305
+ return /* @__PURE__ */ jsx(
2306
+ Separator,
2307
+ {
2308
+ "data-slot": "item-separator",
2309
+ orientation: "horizontal",
2310
+ className: cn("my-2", className),
2311
+ ...props
2312
+ }
2313
+ );
2314
+ }
2315
+ var itemVariants = cva(
2316
+ "group/item flex w-full flex-wrap items-center rounded-none border text-xs transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted",
2317
+ {
2318
+ variants: {
2319
+ variant: {
2320
+ default: "border-transparent",
2321
+ outline: "border-border",
2322
+ muted: "border-transparent bg-muted/50"
2323
+ },
2324
+ size: {
2325
+ default: "gap-2.5 px-3 py-2.5",
2326
+ sm: "gap-2.5 px-3 py-2.5",
2327
+ xs: "gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0"
2328
+ }
2329
+ },
2330
+ defaultVariants: {
2331
+ variant: "default",
2332
+ size: "default"
2333
+ }
2334
+ }
2335
+ );
2336
+ function Item({
2337
+ className,
2338
+ variant = "default",
2339
+ size = "default",
2340
+ asChild = false,
2341
+ ...props
2342
+ }) {
2343
+ const Comp = asChild ? Slot.Root : "div";
2344
+ return /* @__PURE__ */ jsx(
2345
+ Comp,
2346
+ {
2347
+ "data-slot": "item",
2348
+ "data-variant": variant,
2349
+ "data-size": size,
2350
+ className: cn(itemVariants({ variant, size, className })),
2351
+ ...props
2352
+ }
2353
+ );
2354
+ }
2355
+ var itemMediaVariants = cva(
2356
+ "flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none",
2357
+ {
2358
+ variants: {
2359
+ variant: {
2360
+ default: "bg-transparent",
2361
+ icon: "[&_svg:not([class*='size-'])]:size-4",
2362
+ image: "size-10 overflow-hidden rounded-none group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover"
2363
+ }
2364
+ },
2365
+ defaultVariants: {
2366
+ variant: "default"
2367
+ }
2368
+ }
2369
+ );
2370
+ function ItemMedia({
2371
+ className,
2372
+ variant = "default",
2373
+ ...props
2374
+ }) {
2375
+ return /* @__PURE__ */ jsx(
2376
+ "div",
2377
+ {
2378
+ "data-slot": "item-media",
2379
+ "data-variant": variant,
2380
+ className: cn(itemMediaVariants({ variant, className })),
2381
+ ...props
2382
+ }
2383
+ );
2384
+ }
2385
+ function ItemContent({ className, ...props }) {
2386
+ return /* @__PURE__ */ jsx(
2387
+ "div",
2388
+ {
2389
+ "data-slot": "item-content",
2390
+ className: cn(
2391
+ "flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none",
2392
+ className
2393
+ ),
2394
+ ...props
2395
+ }
2396
+ );
2397
+ }
2398
+ function ItemTitle({ className, ...props }) {
2399
+ return /* @__PURE__ */ jsx(
2400
+ "div",
587
2401
  {
588
- "data-slot": "command-item",
2402
+ "data-slot": "item-title",
589
2403
  className: cn(
590
- "group/command-item relative flex cursor-default items-center gap-2 rounded-none px-2 py-2 text-xs outline-hidden select-none in-data-[slot=dialog-content]:rounded-none! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground",
2404
+ "line-clamp-1 flex w-fit items-center gap-2 text-xs font-medium underline-offset-4",
591
2405
  className
592
2406
  ),
593
- ...props,
594
- children: [
595
- children,
596
- /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })
597
- ]
2407
+ ...props
598
2408
  }
599
2409
  );
600
2410
  }
601
- function CommandShortcut({
2411
+ function ItemDescription({ className, ...props }) {
2412
+ return /* @__PURE__ */ jsx(
2413
+ "p",
2414
+ {
2415
+ "data-slot": "item-description",
2416
+ className: cn(
2417
+ "line-clamp-2 text-left text-xs/relaxed font-normal text-muted-foreground group-data-[size=xs]/item:text-xs/relaxed [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
2418
+ className
2419
+ ),
2420
+ ...props
2421
+ }
2422
+ );
2423
+ }
2424
+ function ItemActions({ className, ...props }) {
2425
+ return /* @__PURE__ */ jsx(
2426
+ "div",
2427
+ {
2428
+ "data-slot": "item-actions",
2429
+ className: cn("flex items-center gap-2", className),
2430
+ ...props
2431
+ }
2432
+ );
2433
+ }
2434
+ function ItemHeader({ className, ...props }) {
2435
+ return /* @__PURE__ */ jsx(
2436
+ "div",
2437
+ {
2438
+ "data-slot": "item-header",
2439
+ className: cn(
2440
+ "flex basis-full items-center justify-between gap-2",
2441
+ className
2442
+ ),
2443
+ ...props
2444
+ }
2445
+ );
2446
+ }
2447
+ function ItemFooter({ className, ...props }) {
2448
+ return /* @__PURE__ */ jsx(
2449
+ "div",
2450
+ {
2451
+ "data-slot": "item-footer",
2452
+ className: cn(
2453
+ "flex basis-full items-center justify-between gap-2",
2454
+ className
2455
+ ),
2456
+ ...props
2457
+ }
2458
+ );
2459
+ }
2460
+ function Kbd({ className, ...props }) {
2461
+ return /* @__PURE__ */ jsx(
2462
+ "kbd",
2463
+ {
2464
+ "data-slot": "kbd",
2465
+ className: cn(
2466
+ "pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-none bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3",
2467
+ className
2468
+ ),
2469
+ ...props
2470
+ }
2471
+ );
2472
+ }
2473
+ function KbdGroup({ className, ...props }) {
2474
+ return /* @__PURE__ */ jsx(
2475
+ "kbd",
2476
+ {
2477
+ "data-slot": "kbd-group",
2478
+ className: cn("inline-flex items-center gap-1", className),
2479
+ ...props
2480
+ }
2481
+ );
2482
+ }
2483
+ var markerVariants = cva(
2484
+ "group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-xs text-muted-foreground [&_svg:not([class*='size-'])]:size-3.5 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground",
2485
+ {
2486
+ variants: {
2487
+ variant: {
2488
+ default: "",
2489
+ separator: "before:mr-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1 after:h-px after:min-w-0 after:flex-1 after:bg-border",
2490
+ border: "border-b border-border pb-2"
2491
+ }
2492
+ }
2493
+ }
2494
+ );
2495
+ function Marker({
602
2496
  className,
2497
+ variant = "default",
2498
+ asChild = false,
603
2499
  ...props
604
2500
  }) {
2501
+ const Comp = asChild ? Slot.Root : "div";
2502
+ return /* @__PURE__ */ jsx(
2503
+ Comp,
2504
+ {
2505
+ "data-slot": "marker",
2506
+ "data-variant": variant,
2507
+ className: cn(markerVariants({ variant, className })),
2508
+ ...props
2509
+ }
2510
+ );
2511
+ }
2512
+ function MarkerIcon({ className, ...props }) {
605
2513
  return /* @__PURE__ */ jsx(
606
2514
  "span",
607
2515
  {
608
- "data-slot": "command-shortcut",
2516
+ "data-slot": "marker-icon",
2517
+ "aria-hidden": "true",
609
2518
  className: cn(
610
- "ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground",
2519
+ "size-3.5 shrink-0 [&_svg:not([class*='size-'])]:size-3.5",
611
2520
  className
612
2521
  ),
613
2522
  ...props
614
2523
  }
615
2524
  );
616
2525
  }
617
- function Drawer({
2526
+ function MarkerContent({ className, ...props }) {
2527
+ return /* @__PURE__ */ jsx(
2528
+ "span",
2529
+ {
2530
+ "data-slot": "marker-content",
2531
+ className: cn(
2532
+ "min-w-0 wrap-break-word group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
2533
+ className
2534
+ ),
2535
+ ...props
2536
+ }
2537
+ );
2538
+ }
2539
+ function Menubar({
2540
+ className,
618
2541
  ...props
619
2542
  }) {
620
- return /* @__PURE__ */ jsx(Drawer$1.Root, { "data-slot": "drawer", ...props });
2543
+ return /* @__PURE__ */ jsx(
2544
+ Menubar$1.Root,
2545
+ {
2546
+ "data-slot": "menubar",
2547
+ className: cn(
2548
+ "flex h-8 items-center gap-0.5 rounded-none border p-1",
2549
+ className
2550
+ ),
2551
+ ...props
2552
+ }
2553
+ );
621
2554
  }
622
- function DrawerTrigger({
2555
+ function MenubarMenu({
623
2556
  ...props
624
2557
  }) {
625
- return /* @__PURE__ */ jsx(Drawer$1.Trigger, { "data-slot": "drawer-trigger", ...props });
2558
+ return /* @__PURE__ */ jsx(Menubar$1.Menu, { "data-slot": "menubar-menu", ...props });
626
2559
  }
627
- function DrawerPortal({
2560
+ function MenubarGroup({
628
2561
  ...props
629
2562
  }) {
630
- return /* @__PURE__ */ jsx(Drawer$1.Portal, { "data-slot": "drawer-portal", ...props });
2563
+ return /* @__PURE__ */ jsx(Menubar$1.Group, { "data-slot": "menubar-group", ...props });
631
2564
  }
632
- function DrawerClose({
2565
+ function MenubarPortal({
633
2566
  ...props
634
2567
  }) {
635
- return /* @__PURE__ */ jsx(Drawer$1.Close, { "data-slot": "drawer-close", ...props });
2568
+ return /* @__PURE__ */ jsx(Menubar$1.Portal, { "data-slot": "menubar-portal", ...props });
636
2569
  }
637
- function DrawerOverlay({
2570
+ function MenubarRadioGroup({
2571
+ ...props
2572
+ }) {
2573
+ return /* @__PURE__ */ jsx(Menubar$1.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
2574
+ }
2575
+ function MenubarTrigger({
638
2576
  className,
639
2577
  ...props
640
2578
  }) {
641
2579
  return /* @__PURE__ */ jsx(
642
- Drawer$1.Overlay,
2580
+ Menubar$1.Trigger,
643
2581
  {
644
- "data-slot": "drawer-overlay",
2582
+ "data-slot": "menubar-trigger",
645
2583
  className: cn(
646
- "fixed inset-0 z-50 bg-black/10 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
2584
+ "flex items-center rounded-none px-1.5 py-[calc(--spacing(0.8))] text-xs font-medium outline-hidden select-none hover:bg-muted aria-expanded:bg-muted",
647
2585
  className
648
2586
  ),
649
2587
  ...props
650
2588
  }
651
2589
  );
652
2590
  }
653
- function DrawerContent({
2591
+ function MenubarContent({
654
2592
  className,
655
- children,
2593
+ align = "start",
2594
+ alignOffset = -4,
2595
+ sideOffset = 8,
656
2596
  ...props
657
2597
  }) {
658
- return /* @__PURE__ */ jsxs(DrawerPortal, { "data-slot": "drawer-portal", children: [
659
- /* @__PURE__ */ jsx(DrawerOverlay, {}),
660
- /* @__PURE__ */ jsxs(
661
- Drawer$1.Content,
662
- {
663
- "data-slot": "drawer-content",
664
- className: cn(
665
- "group/drawer-content fixed z-50 flex h-auto flex-col bg-popover text-xs/relaxed text-popover-foreground data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-none data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-none data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-none data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-none data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm",
666
- className
667
- ),
668
- ...props,
669
- children: [
670
- /* @__PURE__ */ jsx("div", { className: "mx-auto mt-4 hidden h-1 w-[100px] shrink-0 rounded-none bg-muted group-data-[vaul-drawer-direction=bottom]/drawer-content:block" }),
671
- children
672
- ]
673
- }
674
- )
675
- ] });
2598
+ return /* @__PURE__ */ jsx(MenubarPortal, { children: /* @__PURE__ */ jsx(
2599
+ Menubar$1.Content,
2600
+ {
2601
+ "data-slot": "menubar-content",
2602
+ align,
2603
+ alignOffset,
2604
+ sideOffset,
2605
+ className: cn("z-50 min-w-36 origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-none bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", className),
2606
+ ...props
2607
+ }
2608
+ ) });
676
2609
  }
677
- function DrawerHeader({ className, ...props }) {
2610
+ function MenubarItem({
2611
+ className,
2612
+ inset,
2613
+ variant = "default",
2614
+ ...props
2615
+ }) {
678
2616
  return /* @__PURE__ */ jsx(
679
- "div",
2617
+ Menubar$1.Item,
680
2618
  {
681
- "data-slot": "drawer-header",
2619
+ "data-slot": "menubar-item",
2620
+ "data-inset": inset,
2621
+ "data-variant": variant,
682
2622
  className: cn(
683
- "flex flex-col gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-0.5 md:text-left",
2623
+ "group/menubar-item relative flex cursor-default items-center gap-2 rounded-none px-2 py-2 text-xs outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive!",
684
2624
  className
685
2625
  ),
686
2626
  ...props
687
2627
  }
688
2628
  );
689
2629
  }
690
- function DrawerFooter({ className, ...props }) {
2630
+ function MenubarCheckboxItem({
2631
+ className,
2632
+ children,
2633
+ checked,
2634
+ inset,
2635
+ ...props
2636
+ }) {
2637
+ return /* @__PURE__ */ jsxs(
2638
+ Menubar$1.CheckboxItem,
2639
+ {
2640
+ "data-slot": "menubar-checkbox-item",
2641
+ "data-inset": inset,
2642
+ className: cn(
2643
+ "relative flex cursor-default items-center gap-2 rounded-none py-2 pr-28 pl-8 text-xs outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0",
2644
+ className
2645
+ ),
2646
+ checked,
2647
+ ...props,
2648
+ children: [
2649
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4", children: /* @__PURE__ */ jsx(Menubar$1.ItemIndicator, { children: /* @__PURE__ */ jsx(
2650
+ CheckIcon,
2651
+ {}
2652
+ ) }) }),
2653
+ children
2654
+ ]
2655
+ }
2656
+ );
2657
+ }
2658
+ function MenubarRadioItem({
2659
+ className,
2660
+ children,
2661
+ inset,
2662
+ ...props
2663
+ }) {
2664
+ return /* @__PURE__ */ jsxs(
2665
+ Menubar$1.RadioItem,
2666
+ {
2667
+ "data-slot": "menubar-radio-item",
2668
+ "data-inset": inset,
2669
+ className: cn(
2670
+ "relative flex cursor-default items-center gap-2 rounded-none py-2 pr-2 pl-8 text-xs outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
2671
+ className
2672
+ ),
2673
+ ...props,
2674
+ children: [
2675
+ /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4", children: /* @__PURE__ */ jsx(Menubar$1.ItemIndicator, { children: /* @__PURE__ */ jsx(
2676
+ CheckIcon,
2677
+ {}
2678
+ ) }) }),
2679
+ children
2680
+ ]
2681
+ }
2682
+ );
2683
+ }
2684
+ function MenubarLabel({
2685
+ className,
2686
+ inset,
2687
+ ...props
2688
+ }) {
691
2689
  return /* @__PURE__ */ jsx(
692
- "div",
2690
+ Menubar$1.Label,
693
2691
  {
694
- "data-slot": "drawer-footer",
695
- className: cn("mt-auto flex flex-col gap-2 p-4", className),
2692
+ "data-slot": "menubar-label",
2693
+ "data-inset": inset,
2694
+ className: cn("px-2 py-2 text-xs data-inset:pl-8", className),
696
2695
  ...props
697
2696
  }
698
2697
  );
699
2698
  }
700
- function DrawerTitle({
2699
+ function MenubarSeparator({
701
2700
  className,
702
2701
  ...props
703
2702
  }) {
704
2703
  return /* @__PURE__ */ jsx(
705
- Drawer$1.Title,
2704
+ Menubar$1.Separator,
2705
+ {
2706
+ "data-slot": "menubar-separator",
2707
+ className: cn("-mx-1 my-1 h-px bg-border", className),
2708
+ ...props
2709
+ }
2710
+ );
2711
+ }
2712
+ function MenubarShortcut({
2713
+ className,
2714
+ ...props
2715
+ }) {
2716
+ return /* @__PURE__ */ jsx(
2717
+ "span",
2718
+ {
2719
+ "data-slot": "menubar-shortcut",
2720
+ className: cn(
2721
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/menubar-item:text-accent-foreground",
2722
+ className
2723
+ ),
2724
+ ...props
2725
+ }
2726
+ );
2727
+ }
2728
+ function MenubarSub({
2729
+ ...props
2730
+ }) {
2731
+ return /* @__PURE__ */ jsx(Menubar$1.Sub, { "data-slot": "menubar-sub", ...props });
2732
+ }
2733
+ function MenubarSubTrigger({
2734
+ className,
2735
+ inset,
2736
+ children,
2737
+ ...props
2738
+ }) {
2739
+ return /* @__PURE__ */ jsxs(
2740
+ Menubar$1.SubTrigger,
706
2741
  {
707
- "data-slot": "drawer-title",
2742
+ "data-slot": "menubar-sub-trigger",
2743
+ "data-inset": inset,
708
2744
  className: cn(
709
- "font-heading text-sm font-medium text-foreground",
2745
+ "flex cursor-default items-center gap-2 rounded-none px-2 py-2 text-xs outline-none select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-8 data-open:bg-accent data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4",
710
2746
  className
711
2747
  ),
712
- ...props
2748
+ ...props,
2749
+ children: [
2750
+ children,
2751
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto size-4" })
2752
+ ]
713
2753
  }
714
2754
  );
715
2755
  }
716
- function DrawerDescription({
2756
+ function MenubarSubContent({
717
2757
  className,
718
2758
  ...props
719
2759
  }) {
720
2760
  return /* @__PURE__ */ jsx(
721
- Drawer$1.Description,
2761
+ Menubar$1.SubContent,
722
2762
  {
723
- "data-slot": "drawer-description",
724
- className: cn("text-xs/relaxed text-muted-foreground", className),
2763
+ "data-slot": "menubar-sub-content",
2764
+ className: cn("z-50 min-w-32 origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-none bg-popover text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
725
2765
  ...props
726
2766
  }
727
2767
  );
728
2768
  }
729
- function FieldSet({ className, ...props }) {
2769
+ function MessageGroup({ className, ...props }) {
730
2770
  return /* @__PURE__ */ jsx(
731
- "fieldset",
2771
+ "div",
732
2772
  {
733
- "data-slot": "field-set",
734
- className: cn("flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", className),
2773
+ "data-slot": "message-group",
2774
+ className: cn("flex min-w-0 flex-col gap-1.5", className),
735
2775
  ...props
736
2776
  }
737
2777
  );
738
2778
  }
739
- function FieldLegend({ className, variant = "legend", ...props }) {
2779
+ function Message({
2780
+ className,
2781
+ align = "start",
2782
+ ...props
2783
+ }) {
740
2784
  return /* @__PURE__ */ jsx(
741
- "legend",
2785
+ "div",
742
2786
  {
743
- "data-slot": "field-legend",
744
- "data-variant": variant,
745
- className: cn("mb-2.5 font-medium data-[variant=label]:text-xs data-[variant=legend]:text-sm", className),
2787
+ "data-slot": "message",
2788
+ "data-align": align,
2789
+ className: cn(
2790
+ "group/message relative flex w-full min-w-0 gap-1.5 text-xs data-[align=end]:flex-row-reverse",
2791
+ className
2792
+ ),
746
2793
  ...props
747
2794
  }
748
2795
  );
749
2796
  }
750
- function FieldGroup({ className, ...props }) {
2797
+ function MessageAvatar({ className, ...props }) {
751
2798
  return /* @__PURE__ */ jsx(
752
2799
  "div",
753
2800
  {
754
- "data-slot": "field-group",
2801
+ "data-slot": "message-avatar",
755
2802
  className: cn(
756
- "group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",
2803
+ "flex w-fit min-w-8 shrink-0 items-center justify-center self-end overflow-hidden rounded-full bg-muted group-has-data-[slot=message-footer]/message:-translate-y-8",
757
2804
  className
758
2805
  ),
759
2806
  ...props
760
2807
  }
761
2808
  );
762
2809
  }
763
- var fieldVariants = cva("group/field flex w-full gap-2 data-[invalid=true]:text-destructive", {
764
- variants: {
765
- orientation: {
766
- vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
767
- horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
768
- responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
769
- }
770
- },
771
- defaultVariants: {
772
- orientation: "vertical"
773
- }
774
- });
775
- function Field({ className, orientation = "vertical", ...props }) {
776
- return /* @__PURE__ */ jsx("div", { role: "group", "data-slot": "field", "data-orientation": orientation, className: cn(fieldVariants({ orientation }), className), ...props });
777
- }
778
- function FieldContent({ className, ...props }) {
779
- return /* @__PURE__ */ jsx("div", { "data-slot": "field-content", className: cn("group/field-content flex flex-1 flex-col gap-0.5 leading-snug", className), ...props });
780
- }
781
- function FieldLabel({ className, ...props }) {
2810
+ function MessageContent({ className, ...props }) {
782
2811
  return /* @__PURE__ */ jsx(
783
- Label,
2812
+ "div",
784
2813
  {
785
- "data-slot": "field-label",
2814
+ "data-slot": "message-content",
786
2815
  className: cn(
787
- "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-none has-[>[data-slot=field]]:border *:data-[slot=field]:p-2 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10",
788
- "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
2816
+ "flex w-full min-w-0 flex-col gap-2 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end",
789
2817
  className
790
2818
  ),
791
2819
  ...props
792
2820
  }
793
2821
  );
794
2822
  }
795
- function FieldTitle({ className, ...props }) {
2823
+ function MessageHeader({ className, ...props }) {
796
2824
  return /* @__PURE__ */ jsx(
797
2825
  "div",
798
2826
  {
799
- "data-slot": "field-label",
800
- className: cn("flex w-fit items-center gap-2 text-xs/relaxed group-data-[disabled=true]/field:opacity-50", className),
2827
+ "data-slot": "message-header",
2828
+ className: cn(
2829
+ "flex max-w-full min-w-0 items-center px-2.5 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0",
2830
+ className
2831
+ ),
801
2832
  ...props
802
2833
  }
803
2834
  );
804
2835
  }
805
- function FieldDescription({ className, ...props }) {
2836
+ function MessageFooter({ className, ...props }) {
806
2837
  return /* @__PURE__ */ jsx(
807
- "p",
2838
+ "div",
808
2839
  {
809
- "data-slot": "field-description",
2840
+ "data-slot": "message-footer",
810
2841
  className: cn(
811
- "text-left text-xs/relaxed leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5",
812
- "last:mt-0 nth-last-2:-mt-1",
813
- "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
2842
+ "flex max-w-full min-w-0 items-center px-2.5 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0 group-data-[align=end]/message:justify-end",
814
2843
  className
815
2844
  ),
816
2845
  ...props
817
2846
  }
818
2847
  );
819
2848
  }
820
- function FieldSeparator({
821
- children,
822
- className,
823
- ...props
824
- }) {
825
- return /* @__PURE__ */ jsxs(
826
- "div",
827
- {
828
- "data-slot": "field-separator",
829
- "data-content": !!children,
830
- className: cn("relative -my-2 h-5 text-xs group-data-[variant=outline]/field-group:-mb-2", className),
831
- ...props,
832
- children: [
833
- /* @__PURE__ */ jsx(Separator, { className: "absolute inset-0 top-1/2" }),
834
- children && /* @__PURE__ */ jsx("span", { className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground", "data-slot": "field-separator-content", children })
835
- ]
836
- }
837
- );
2849
+ function MessageScrollerProvider(props) {
2850
+ return /* @__PURE__ */ jsx(MessageScroller$1.Provider, { ...props });
838
2851
  }
839
- function FieldError({
2852
+ function MessageScroller({
840
2853
  className,
841
- children,
842
- errors,
843
2854
  ...props
844
2855
  }) {
845
- const content = useMemo(() => {
846
- if (children) {
847
- return children;
848
- }
849
- if (!errors?.length) {
850
- return null;
851
- }
852
- const uniqueErrors = [...new Map(errors.map((error) => [error?.message, error])).values()];
853
- if (uniqueErrors?.length == 1) {
854
- return uniqueErrors[0]?.message;
855
- }
856
- return /* @__PURE__ */ jsx("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map((error, index) => error?.message && /* @__PURE__ */ jsx("li", { children: error.message }, index)) });
857
- }, [children, errors]);
858
- if (!content) {
859
- return null;
860
- }
861
- return /* @__PURE__ */ jsx("div", { role: "alert", "data-slot": "field-error", className: cn("text-xs font-normal text-destructive", className), ...props, children: content });
862
- }
863
- function HoverCard({ ...props }) {
864
- return /* @__PURE__ */ jsx(HoverCard$1.Root, { "data-slot": "hover-card", ...props });
865
- }
866
- function HoverCardTrigger({ ...props }) {
867
- return /* @__PURE__ */ jsx(HoverCard$1.Trigger, { "data-slot": "hover-card-trigger", ...props });
868
- }
869
- function HoverCardContent({ className, align = "center", sideOffset = 4, ...props }) {
870
- return /* @__PURE__ */ jsx(HoverCard$1.Portal, { "data-slot": "hover-card-portal", children: /* @__PURE__ */ jsx(
871
- HoverCard$1.Content,
2856
+ return /* @__PURE__ */ jsx(
2857
+ MessageScroller$1.Root,
872
2858
  {
873
- "data-slot": "hover-card-content",
874
- align,
875
- sideOffset,
2859
+ "data-slot": "message-scroller",
876
2860
  className: cn(
877
- "z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded-none bg-popover p-2.5 text-xs/relaxed text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2861
+ "group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden",
878
2862
  className
879
2863
  ),
880
2864
  ...props
881
2865
  }
882
- ) });
2866
+ );
883
2867
  }
884
- function InputOTP({
2868
+ function MessageScrollerViewport({
885
2869
  className,
886
- containerClassName,
887
2870
  ...props
888
2871
  }) {
889
2872
  return /* @__PURE__ */ jsx(
890
- OTPInput,
891
- {
892
- "data-slot": "input-otp",
893
- containerClassName: cn("cn-input-otp flex items-center has-disabled:opacity-50", containerClassName),
894
- spellCheck: false,
895
- className: cn("disabled:cursor-not-allowed", className),
896
- ...props
897
- }
898
- );
899
- }
900
- function InputOTPGroup({ className, ...props }) {
901
- return /* @__PURE__ */ jsx(
902
- "div",
2873
+ MessageScroller$1.Viewport,
903
2874
  {
904
- "data-slot": "input-otp-group",
2875
+ "data-slot": "message-scroller-viewport",
905
2876
  className: cn(
906
- "flex items-center rounded-none has-aria-invalid:border-destructive has-aria-invalid:ring-1 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40",
2877
+ "size-full min-h-0 min-w-0 scroll-fade-b scrollbar-thin scrollbar-gutter-stable overflow-y-auto overscroll-contain contain-content data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent",
907
2878
  className
908
2879
  ),
909
2880
  ...props
910
2881
  }
911
2882
  );
912
2883
  }
913
- function InputOTPSlot({
914
- index,
2884
+ function MessageScrollerContent({
915
2885
  className,
916
2886
  ...props
917
2887
  }) {
918
- const inputOTPContext = React21.useContext(OTPInputContext);
919
- const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
920
- return /* @__PURE__ */ jsxs(
921
- "div",
922
- {
923
- "data-slot": "input-otp-slot",
924
- "data-active": isActive,
925
- className: cn(
926
- "relative flex size-8 items-center justify-center border-y border-r border-input text-xs transition-all outline-none first:rounded-none first:border-l last:rounded-none aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-1 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40",
927
- className
928
- ),
929
- ...props,
930
- children: [
931
- char,
932
- hasFakeCaret && /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
933
- ]
934
- }
935
- );
936
- }
937
- function InputOTPSeparator({ ...props }) {
938
- return /* @__PURE__ */ jsx("div", { "data-slot": "input-otp-separator", className: "flex items-center [&_svg:not([class*='size-'])]:size-4", role: "separator", ...props, children: /* @__PURE__ */ jsx(MinusIcon, {}) });
939
- }
940
- function Menubar({ className, ...props }) {
941
- return /* @__PURE__ */ jsx(Menubar$1.Root, { "data-slot": "menubar", className: cn("flex h-8 items-center gap-0.5 rounded-none border p-1", className), ...props });
942
- }
943
- function MenubarMenu({ ...props }) {
944
- return /* @__PURE__ */ jsx(Menubar$1.Menu, { "data-slot": "menubar-menu", ...props });
945
- }
946
- function MenubarGroup({ ...props }) {
947
- return /* @__PURE__ */ jsx(Menubar$1.Group, { "data-slot": "menubar-group", ...props });
948
- }
949
- function MenubarPortal({ ...props }) {
950
- return /* @__PURE__ */ jsx(Menubar$1.Portal, { "data-slot": "menubar-portal", ...props });
951
- }
952
- function MenubarRadioGroup({ ...props }) {
953
- return /* @__PURE__ */ jsx(Menubar$1.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
954
- }
955
- function MenubarTrigger({ className, ...props }) {
956
2888
  return /* @__PURE__ */ jsx(
957
- Menubar$1.Trigger,
2889
+ MessageScroller$1.Content,
958
2890
  {
959
- "data-slot": "menubar-trigger",
960
- className: cn(
961
- "flex items-center rounded-none px-1.5 py-[calc(--spacing(0.8))] text-xs font-medium outline-hidden select-none hover:bg-muted aria-expanded:bg-muted",
962
- className
963
- ),
2891
+ "data-slot": "message-scroller-content",
2892
+ className: cn("flex h-max min-h-full flex-col gap-6", className),
964
2893
  ...props
965
2894
  }
966
2895
  );
967
2896
  }
968
- function MenubarContent({ className, align = "start", alignOffset = -4, sideOffset = 8, ...props }) {
969
- return /* @__PURE__ */ jsx(MenubarPortal, { children: /* @__PURE__ */ jsx(
970
- Menubar$1.Content,
2897
+ function MessageScrollerItem({
2898
+ className,
2899
+ scrollAnchor = false,
2900
+ ...props
2901
+ }) {
2902
+ return /* @__PURE__ */ jsx(
2903
+ MessageScroller$1.Item,
971
2904
  {
972
- "data-slot": "menubar-content",
973
- align,
974
- alignOffset,
975
- sideOffset,
2905
+ "data-slot": "message-scroller-item",
2906
+ scrollAnchor,
976
2907
  className: cn(
977
- "z-50 min-w-36 origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-none bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95",
2908
+ "min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]",
978
2909
  className
979
2910
  ),
980
2911
  ...props
981
2912
  }
982
- ) });
2913
+ );
983
2914
  }
984
- function MenubarItem({
2915
+ function MessageScrollerButton({
2916
+ direction = "end",
985
2917
  className,
986
- inset,
987
- variant = "default",
2918
+ children,
2919
+ render,
2920
+ variant = "secondary",
2921
+ size = "icon-sm",
988
2922
  ...props
989
2923
  }) {
990
2924
  return /* @__PURE__ */ jsx(
991
- Menubar$1.Item,
2925
+ MessageScroller$1.Button,
992
2926
  {
993
- "data-slot": "menubar-item",
994
- "data-inset": inset,
2927
+ "data-slot": "message-scroller-button",
2928
+ "data-direction": direction,
995
2929
  "data-variant": variant,
2930
+ "data-size": size,
2931
+ direction,
996
2932
  className: cn(
997
- "group/menubar-item relative flex cursor-default items-center gap-2 rounded-none px-2 py-2 text-xs outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive!",
2933
+ "absolute inset-s-1/2 -translate-x-1/2 border-border bg-background text-foreground transition-[translate,scale,opacity] duration-200 hover:bg-muted hover:text-foreground data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[active=true]:ease-[cubic-bezier(0.23,1,0.32,1)] data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full rtl:translate-x-1/2 data-[direction=start]:[&_svg]:rotate-180",
998
2934
  className
999
2935
  ),
1000
- ...props
2936
+ render: render ?? /* @__PURE__ */ jsx(Button, { variant, size }),
2937
+ ...props,
2938
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
2939
+ /* @__PURE__ */ jsx(
2940
+ ArrowDownIcon,
2941
+ {}
2942
+ ),
2943
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: direction === "end" ? "Scroll to end" : "Scroll to start" })
2944
+ ] })
1001
2945
  }
1002
2946
  );
1003
2947
  }
1004
- function MenubarCheckboxItem({
2948
+ function NativeSelect({
1005
2949
  className,
1006
- children,
1007
- checked,
1008
- inset,
2950
+ size = "default",
1009
2951
  ...props
1010
2952
  }) {
1011
2953
  return /* @__PURE__ */ jsxs(
1012
- Menubar$1.CheckboxItem,
2954
+ "div",
1013
2955
  {
1014
- "data-slot": "menubar-checkbox-item",
1015
- "data-inset": inset,
1016
2956
  className: cn(
1017
- "relative flex cursor-default items-center gap-2 rounded-none py-2 pr-28 pl-8 text-xs outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0",
2957
+ "group/native-select relative w-fit has-[select:disabled]:opacity-50",
1018
2958
  className
1019
2959
  ),
1020
- checked,
1021
- ...props,
2960
+ "data-slot": "native-select-wrapper",
2961
+ "data-size": size,
1022
2962
  children: [
1023
- /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4", children: /* @__PURE__ */ jsx(Menubar$1.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) }) }),
1024
- children
2963
+ /* @__PURE__ */ jsx(
2964
+ "select",
2965
+ {
2966
+ "data-slot": "native-select",
2967
+ "data-size": size,
2968
+ className: "h-8 w-full min-w-0 appearance-none rounded-none border border-input bg-transparent py-1 pr-8 pl-2.5 text-xs transition-colors outline-none select-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-1 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:border-destructive aria-invalid:ring-1 aria-invalid:ring-destructive/20 data-[size=sm]:h-7 data-[size=sm]:rounded-none data-[size=sm]:py-0.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
2969
+ ...props
2970
+ }
2971
+ ),
2972
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 text-muted-foreground select-none", "aria-hidden": "true", "data-slot": "native-select-icon" })
1025
2973
  ]
1026
2974
  }
1027
2975
  );
1028
2976
  }
1029
- function MenubarRadioItem({
2977
+ function NativeSelectOption({
1030
2978
  className,
1031
- children,
1032
- inset,
1033
2979
  ...props
1034
2980
  }) {
1035
- return /* @__PURE__ */ jsxs(
1036
- Menubar$1.RadioItem,
2981
+ return /* @__PURE__ */ jsx(
2982
+ "option",
1037
2983
  {
1038
- "data-slot": "menubar-radio-item",
1039
- "data-inset": inset,
1040
- className: cn(
1041
- "relative flex cursor-default items-center gap-2 rounded-none py-2 pr-2 pl-8 text-xs outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1042
- className
1043
- ),
1044
- ...props,
1045
- children: [
1046
- /* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute left-1.5 flex size-4 items-center justify-center [&_svg:not([class*='size-'])]:size-4", children: /* @__PURE__ */ jsx(Menubar$1.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) }) }),
1047
- children
1048
- ]
2984
+ "data-slot": "native-select-option",
2985
+ className: cn("bg-[Canvas] text-[CanvasText]", className),
2986
+ ...props
1049
2987
  }
1050
2988
  );
1051
2989
  }
1052
- function MenubarLabel({
2990
+ function NativeSelectOptGroup({
1053
2991
  className,
1054
- inset,
1055
2992
  ...props
1056
2993
  }) {
1057
- return /* @__PURE__ */ jsx(Menubar$1.Label, { "data-slot": "menubar-label", "data-inset": inset, className: cn("px-2 py-2 text-xs data-inset:pl-8", className), ...props });
1058
- }
1059
- function MenubarSeparator({ className, ...props }) {
1060
- return /* @__PURE__ */ jsx(Menubar$1.Separator, { "data-slot": "menubar-separator", className: cn("-mx-1 my-1 h-px bg-border", className), ...props });
1061
- }
1062
- function MenubarShortcut({ className, ...props }) {
1063
2994
  return /* @__PURE__ */ jsx(
1064
- "span",
2995
+ "optgroup",
1065
2996
  {
1066
- "data-slot": "menubar-shortcut",
1067
- className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/menubar-item:text-accent-foreground", className),
2997
+ "data-slot": "native-select-optgroup",
2998
+ className: cn("bg-[Canvas] text-[CanvasText]", className),
1068
2999
  ...props
1069
3000
  }
1070
3001
  );
1071
3002
  }
1072
- function MenubarSub({ ...props }) {
1073
- return /* @__PURE__ */ jsx(Menubar$1.Sub, { "data-slot": "menubar-sub", ...props });
1074
- }
1075
- function MenubarSubTrigger({
3003
+ function NavigationMenu({
1076
3004
  className,
1077
- inset,
1078
3005
  children,
3006
+ viewport = true,
1079
3007
  ...props
1080
3008
  }) {
1081
3009
  return /* @__PURE__ */ jsxs(
1082
- Menubar$1.SubTrigger,
3010
+ NavigationMenu$1.Root,
1083
3011
  {
1084
- "data-slot": "menubar-sub-trigger",
1085
- "data-inset": inset,
3012
+ "data-slot": "navigation-menu",
3013
+ "data-viewport": viewport,
1086
3014
  className: cn(
1087
- "flex cursor-default items-center gap-2 rounded-none px-2 py-2 text-xs outline-none select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-8 data-open:bg-accent data-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4",
3015
+ "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
1088
3016
  className
1089
3017
  ),
1090
3018
  ...props,
1091
3019
  children: [
1092
3020
  children,
1093
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto size-4" })
3021
+ viewport && /* @__PURE__ */ jsx(NavigationMenuViewport, {})
1094
3022
  ]
1095
3023
  }
1096
3024
  );
1097
3025
  }
1098
- function MenubarSubContent({ className, ...props }) {
3026
+ function NavigationMenuList({
3027
+ className,
3028
+ ...props
3029
+ }) {
1099
3030
  return /* @__PURE__ */ jsx(
1100
- Menubar$1.SubContent,
3031
+ NavigationMenu$1.List,
1101
3032
  {
1102
- "data-slot": "menubar-sub-content",
3033
+ "data-slot": "navigation-menu-list",
1103
3034
  className: cn(
1104
- "z-50 min-w-32 origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-none bg-popover text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
3035
+ "group flex flex-1 list-none items-center justify-center gap-0",
1105
3036
  className
1106
3037
  ),
1107
3038
  ...props
1108
3039
  }
1109
3040
  );
1110
3041
  }
1111
- function NavigationMenu({
3042
+ function NavigationMenuItem({
3043
+ className,
3044
+ ...props
3045
+ }) {
3046
+ return /* @__PURE__ */ jsx(
3047
+ NavigationMenu$1.Item,
3048
+ {
3049
+ "data-slot": "navigation-menu-item",
3050
+ className: cn("relative", className),
3051
+ ...props
3052
+ }
3053
+ );
3054
+ }
3055
+ var navigationMenuTriggerStyle = cva(
3056
+ "group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-none px-2.5 py-1.5 text-xs font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted"
3057
+ );
3058
+ function NavigationMenuTrigger({
1112
3059
  className,
1113
3060
  children,
1114
- viewport = true,
1115
3061
  ...props
1116
3062
  }) {
1117
3063
  return /* @__PURE__ */ jsxs(
1118
- NavigationMenu$1.Root,
3064
+ NavigationMenu$1.Trigger,
1119
3065
  {
1120
- "data-slot": "navigation-menu",
1121
- "data-viewport": viewport,
1122
- className: cn("group/navigation-menu relative flex max-w-max flex-1 items-center justify-center", className),
3066
+ "data-slot": "navigation-menu-trigger",
3067
+ className: cn(navigationMenuTriggerStyle(), "group", className),
1123
3068
  ...props,
1124
3069
  children: [
1125
3070
  children,
1126
- viewport && /* @__PURE__ */ jsx(NavigationMenuViewport, {})
3071
+ " ",
3072
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180", "aria-hidden": "true" })
1127
3073
  ]
1128
3074
  }
1129
3075
  );
1130
3076
  }
1131
- function NavigationMenuList({ className, ...props }) {
1132
- return /* @__PURE__ */ jsx(
1133
- NavigationMenu$1.List,
1134
- {
1135
- "data-slot": "navigation-menu-list",
1136
- className: cn("group flex flex-1 list-none items-center justify-center gap-0", className),
1137
- ...props
1138
- }
1139
- );
1140
- }
1141
- function NavigationMenuItem({ className, ...props }) {
1142
- return /* @__PURE__ */ jsx(NavigationMenu$1.Item, { "data-slot": "navigation-menu-item", className: cn("relative", className), ...props });
1143
- }
1144
- var navigationMenuTriggerStyle = cva(
1145
- "group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center rounded-none px-2.5 py-1.5 text-xs font-medium transition-all outline-none hover:bg-muted focus:bg-muted focus-visible:ring-1 focus-visible:ring-ring/50 focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted"
1146
- );
1147
- function NavigationMenuTrigger({ className, children, ...props }) {
1148
- return /* @__PURE__ */ jsxs(NavigationMenu$1.Trigger, { "data-slot": "navigation-menu-trigger", className: cn(navigationMenuTriggerStyle(), "group", className), ...props, children: [
1149
- children,
1150
- " ",
1151
- /* @__PURE__ */ jsx(
1152
- ChevronDownIcon,
1153
- {
1154
- className: "relative top-px ml-1 size-3 transition duration-300 group-data-popup-open/navigation-menu-trigger:rotate-180 group-data-open/navigation-menu-trigger:rotate-180",
1155
- "aria-hidden": "true"
1156
- }
1157
- )
1158
- ] });
1159
- }
1160
- function NavigationMenuContent({ className, ...props }) {
3077
+ function NavigationMenuContent({
3078
+ className,
3079
+ ...props
3080
+ }) {
1161
3081
  return /* @__PURE__ */ jsx(
1162
3082
  NavigationMenu$1.Content,
1163
3083
  {
@@ -1170,20 +3090,34 @@ function NavigationMenuContent({ className, ...props }) {
1170
3090
  }
1171
3091
  );
1172
3092
  }
1173
- function NavigationMenuViewport({ className, ...props }) {
1174
- return /* @__PURE__ */ jsx("div", { className: cn("absolute top-full left-0 isolate z-50 flex justify-center"), children: /* @__PURE__ */ jsx(
1175
- NavigationMenu$1.Viewport,
3093
+ function NavigationMenuViewport({
3094
+ className,
3095
+ ...props
3096
+ }) {
3097
+ return /* @__PURE__ */ jsx(
3098
+ "div",
1176
3099
  {
1177
- "data-slot": "navigation-menu-viewport",
1178
3100
  className: cn(
1179
- "origin-top-center relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden rounded-none bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 duration-100 md:w-(--radix-navigation-menu-viewport-width) data-open:animate-in data-open:zoom-in-90 data-closed:animate-out data-closed:zoom-out-90",
1180
- className
3101
+ "absolute top-full left-0 isolate z-50 flex justify-center"
1181
3102
  ),
1182
- ...props
3103
+ children: /* @__PURE__ */ jsx(
3104
+ NavigationMenu$1.Viewport,
3105
+ {
3106
+ "data-slot": "navigation-menu-viewport",
3107
+ className: cn(
3108
+ "origin-top-center relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden rounded-none bg-popover text-popover-foreground shadow ring-1 ring-foreground/10 duration-100 md:w-(--radix-navigation-menu-viewport-width) data-open:animate-in data-open:zoom-in-90 data-closed:animate-out data-closed:zoom-out-90",
3109
+ className
3110
+ ),
3111
+ ...props
3112
+ }
3113
+ )
1183
3114
  }
1184
- ) });
3115
+ );
1185
3116
  }
1186
- function NavigationMenuLink({ className, ...props }) {
3117
+ function NavigationMenuLink({
3118
+ className,
3119
+ ...props
3120
+ }) {
1187
3121
  return /* @__PURE__ */ jsx(
1188
3122
  NavigationMenu$1.Link,
1189
3123
  {
@@ -1196,7 +3130,10 @@ function NavigationMenuLink({ className, ...props }) {
1196
3130
  }
1197
3131
  );
1198
3132
  }
1199
- function NavigationMenuIndicator({ className, ...props }) {
3133
+ function NavigationMenuIndicator({
3134
+ className,
3135
+ ...props
3136
+ }) {
1200
3137
  return /* @__PURE__ */ jsx(
1201
3138
  NavigationMenu$1.Indicator,
1202
3139
  {
@@ -1211,39 +3148,115 @@ function NavigationMenuIndicator({ className, ...props }) {
1211
3148
  );
1212
3149
  }
1213
3150
  function Pagination({ className, ...props }) {
1214
- return /* @__PURE__ */ jsx("nav", { role: "navigation", "aria-label": "pagination", "data-slot": "pagination", className: cn("mx-auto flex w-full justify-center", className), ...props });
3151
+ return /* @__PURE__ */ jsx(
3152
+ "nav",
3153
+ {
3154
+ role: "navigation",
3155
+ "aria-label": "pagination",
3156
+ "data-slot": "pagination",
3157
+ className: cn("mx-auto flex w-full justify-center", className),
3158
+ ...props
3159
+ }
3160
+ );
1215
3161
  }
1216
- function PaginationContent({ className, ...props }) {
1217
- return /* @__PURE__ */ jsx("ul", { "data-slot": "pagination-content", className: cn("flex items-center gap-0.5", className), ...props });
3162
+ function PaginationContent({
3163
+ className,
3164
+ ...props
3165
+ }) {
3166
+ return /* @__PURE__ */ jsx(
3167
+ "ul",
3168
+ {
3169
+ "data-slot": "pagination-content",
3170
+ className: cn("flex items-center gap-0.5", className),
3171
+ ...props
3172
+ }
3173
+ );
1218
3174
  }
1219
3175
  function PaginationItem({ ...props }) {
1220
3176
  return /* @__PURE__ */ jsx("li", { "data-slot": "pagination-item", ...props });
1221
3177
  }
1222
- function PaginationLink({ className, isActive, size = "icon", ...props }) {
1223
- return /* @__PURE__ */ jsx(Button, { asChild: true, variant: isActive ? "outline" : "ghost", size, className: cn(className), children: /* @__PURE__ */ jsx("a", { "aria-current": isActive ? "page" : void 0, "data-slot": "pagination-link", "data-active": isActive, ...props }) });
3178
+ function PaginationLink({
3179
+ className,
3180
+ isActive,
3181
+ size = "icon",
3182
+ ...props
3183
+ }) {
3184
+ return /* @__PURE__ */ jsx(
3185
+ Button,
3186
+ {
3187
+ asChild: true,
3188
+ variant: isActive ? "outline" : "ghost",
3189
+ size,
3190
+ className: cn(className),
3191
+ children: /* @__PURE__ */ jsx(
3192
+ "a",
3193
+ {
3194
+ "aria-current": isActive ? "page" : void 0,
3195
+ "data-slot": "pagination-link",
3196
+ "data-active": isActive,
3197
+ ...props
3198
+ }
3199
+ )
3200
+ }
3201
+ );
1224
3202
  }
1225
- function PaginationPrevious({ className, text = "Previous", ...props }) {
1226
- return /* @__PURE__ */ jsxs(PaginationLink, { "aria-label": "Go to previous page", size: "default", className: cn("pl-1.5!", className), ...props, children: [
1227
- /* @__PURE__ */ jsx(ChevronLeftIcon, { "data-icon": "inline-start" }),
1228
- /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: text })
1229
- ] });
3203
+ function PaginationPrevious({
3204
+ className,
3205
+ text = "Previous",
3206
+ ...props
3207
+ }) {
3208
+ return /* @__PURE__ */ jsxs(
3209
+ PaginationLink,
3210
+ {
3211
+ "aria-label": "Go to previous page",
3212
+ size: "default",
3213
+ className: cn("pl-1.5!", className),
3214
+ ...props,
3215
+ children: [
3216
+ /* @__PURE__ */ jsx(ChevronLeftIcon, { "data-icon": "inline-start" }),
3217
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: text })
3218
+ ]
3219
+ }
3220
+ );
1230
3221
  }
1231
- function PaginationNext({ className, text = "Next", ...props }) {
1232
- return /* @__PURE__ */ jsxs(PaginationLink, { "aria-label": "Go to next page", size: "default", className: cn("pr-1.5!", className), ...props, children: [
1233
- /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: text }),
1234
- /* @__PURE__ */ jsx(ChevronRightIcon, { "data-icon": "inline-end" })
1235
- ] });
3222
+ function PaginationNext({
3223
+ className,
3224
+ text = "Next",
3225
+ ...props
3226
+ }) {
3227
+ return /* @__PURE__ */ jsxs(
3228
+ PaginationLink,
3229
+ {
3230
+ "aria-label": "Go to next page",
3231
+ size: "default",
3232
+ className: cn("pr-1.5!", className),
3233
+ ...props,
3234
+ children: [
3235
+ /* @__PURE__ */ jsx("span", { className: "hidden sm:block", children: text }),
3236
+ /* @__PURE__ */ jsx(ChevronRightIcon, { "data-icon": "inline-end" })
3237
+ ]
3238
+ }
3239
+ );
1236
3240
  }
1237
- function PaginationEllipsis({ className, ...props }) {
3241
+ function PaginationEllipsis({
3242
+ className,
3243
+ ...props
3244
+ }) {
1238
3245
  return /* @__PURE__ */ jsxs(
1239
3246
  "span",
1240
3247
  {
1241
3248
  "aria-hidden": true,
1242
3249
  "data-slot": "pagination-ellipsis",
1243
- className: cn("flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4", className),
3250
+ className: cn(
3251
+ "flex size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4",
3252
+ className
3253
+ ),
1244
3254
  ...props,
1245
3255
  children: [
1246
- /* @__PURE__ */ jsx(MoreHorizontalIcon, {}),
3256
+ /* @__PURE__ */ jsx(
3257
+ MoreHorizontalIcon,
3258
+ {}
3259
+ ),
1247
3260
  /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More pages" })
1248
3261
  ]
1249
3262
  }
@@ -1317,12 +3330,19 @@ function PopoverDescription({
1317
3330
  }
1318
3331
  );
1319
3332
  }
1320
- function Progress({ className, value, ...props }) {
3333
+ function Progress({
3334
+ className,
3335
+ value,
3336
+ ...props
3337
+ }) {
1321
3338
  return /* @__PURE__ */ jsx(
1322
3339
  Progress$1.Root,
1323
3340
  {
1324
3341
  "data-slot": "progress",
1325
- className: cn("relative flex h-1 w-full items-center overflow-x-hidden rounded-none bg-muted", className),
3342
+ className: cn(
3343
+ "relative flex h-1 w-full items-center overflow-x-hidden rounded-none bg-muted",
3344
+ className
3345
+ ),
1326
3346
  ...props,
1327
3347
  children: /* @__PURE__ */ jsx(
1328
3348
  Progress$1.Indicator,
@@ -1335,10 +3355,23 @@ function Progress({ className, value, ...props }) {
1335
3355
  }
1336
3356
  );
1337
3357
  }
1338
- function RadioGroup({ className, ...props }) {
1339
- return /* @__PURE__ */ jsx(RadioGroup$1.Root, { "data-slot": "radio-group", className: cn("grid w-full gap-2", className), ...props });
3358
+ function RadioGroup({
3359
+ className,
3360
+ ...props
3361
+ }) {
3362
+ return /* @__PURE__ */ jsx(
3363
+ RadioGroup$1.Root,
3364
+ {
3365
+ "data-slot": "radio-group",
3366
+ className: cn("grid w-full gap-2", className),
3367
+ ...props
3368
+ }
3369
+ );
1340
3370
  }
1341
- function RadioGroupItem({ className, ...props }) {
3371
+ function RadioGroupItem({
3372
+ className,
3373
+ ...props
3374
+ }) {
1342
3375
  return /* @__PURE__ */ jsx(
1343
3376
  RadioGroup$1.Item,
1344
3377
  {
@@ -1348,16 +3381,29 @@ function RadioGroupItem({ className, ...props }) {
1348
3381
  className
1349
3382
  ),
1350
3383
  ...props,
1351
- children: /* @__PURE__ */ jsx(RadioGroup$1.Indicator, { "data-slot": "radio-group-indicator", className: "flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" }) })
3384
+ children: /* @__PURE__ */ jsx(
3385
+ RadioGroup$1.Indicator,
3386
+ {
3387
+ "data-slot": "radio-group-indicator",
3388
+ className: "flex size-4 items-center justify-center",
3389
+ children: /* @__PURE__ */ jsx("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" })
3390
+ }
3391
+ )
1352
3392
  }
1353
3393
  );
1354
3394
  }
1355
- function ResizablePanelGroup({ className, ...props }) {
3395
+ function ResizablePanelGroup({
3396
+ className,
3397
+ ...props
3398
+ }) {
1356
3399
  return /* @__PURE__ */ jsx(
1357
- ResizablePrimitive.PanelGroup,
3400
+ ResizablePrimitive.Group,
1358
3401
  {
1359
3402
  "data-slot": "resizable-panel-group",
1360
- className: cn("flex h-full w-full aria-[orientation=vertical]:flex-col", className),
3403
+ className: cn(
3404
+ "flex h-full w-full aria-[orientation=vertical]:flex-col",
3405
+ className
3406
+ ),
1361
3407
  ...props
1362
3408
  }
1363
3409
  );
@@ -1371,7 +3417,7 @@ function ResizableHandle({
1371
3417
  ...props
1372
3418
  }) {
1373
3419
  return /* @__PURE__ */ jsx(
1374
- ResizablePrimitive.PanelResizeHandle,
3420
+ ResizablePrimitive.Separator,
1375
3421
  {
1376
3422
  "data-slot": "resizable-handle",
1377
3423
  className: cn(
@@ -1558,7 +3604,7 @@ function Slider({
1558
3604
  max = 100,
1559
3605
  ...props
1560
3606
  }) {
1561
- const _values = React21.useMemo(
3607
+ const _values = React8.useMemo(
1562
3608
  () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
1563
3609
  [value, defaultValue, min, max]
1564
3610
  );
@@ -1602,37 +3648,8 @@ function Slider({
1602
3648
  }
1603
3649
  );
1604
3650
  }
1605
- var Toaster = ({ ...props }) => {
1606
- const { theme = "system" } = useTheme();
1607
- return /* @__PURE__ */ jsx(
1608
- Toaster$1,
1609
- {
1610
- theme,
1611
- className: "toaster group",
1612
- icons: {
1613
- success: /* @__PURE__ */ jsx(CircleCheckIcon, { className: "size-4" }),
1614
- info: /* @__PURE__ */ jsx(InfoIcon, { className: "size-4" }),
1615
- warning: /* @__PURE__ */ jsx(TriangleAlertIcon, { className: "size-4" }),
1616
- error: /* @__PURE__ */ jsx(OctagonXIcon, { className: "size-4" }),
1617
- loading: /* @__PURE__ */ jsx(Loader2Icon, { className: "size-4 animate-spin" })
1618
- },
1619
- style: {
1620
- "--normal-bg": "var(--popover)",
1621
- "--normal-text": "var(--popover-foreground)",
1622
- "--normal-border": "var(--border)",
1623
- "--border-radius": "var(--radius)"
1624
- },
1625
- toastOptions: {
1626
- classNames: {
1627
- toast: "cn-toast"
1628
- }
1629
- },
1630
- ...props
1631
- }
1632
- );
1633
- };
1634
3651
  function Spinner({ className, ...props }) {
1635
- return /* @__PURE__ */ jsx(Loader2Icon, { role: "status", "aria-label": "Loading", className: cn("size-4 animate-spin", className), ...props });
3652
+ return /* @__PURE__ */ jsx(Loader2Icon, { "data-slot": "spinner", role: "status", "aria-label": "Loading", className: cn("size-4 animate-spin", className), ...props });
1636
3653
  }
1637
3654
  function Switch({
1638
3655
  className,
@@ -1738,6 +3755,178 @@ function TabsContent({
1738
3755
  }
1739
3756
  );
1740
3757
  }
3758
+ var toast = Toast$1.createToastManager();
3759
+ function ToastProvider({ ...props }) {
3760
+ return /* @__PURE__ */ jsx(Toast$1.Provider, { ...props });
3761
+ }
3762
+ function ToastPortal({ ...props }) {
3763
+ return /* @__PURE__ */ jsx(Toast$1.Portal, { "data-slot": "toast-portal", ...props });
3764
+ }
3765
+ function ToastViewport({ className, ...props }) {
3766
+ return /* @__PURE__ */ jsx(
3767
+ Toast$1.Viewport,
3768
+ {
3769
+ "data-slot": "toast-viewport",
3770
+ className: cn(
3771
+ "pointer-events-none fixed inset-x-4 bottom-4 z-50 mx-auto w-auto max-w-sm outline-none sm:right-4 sm:left-auto sm:mx-0 sm:w-full",
3772
+ className
3773
+ ),
3774
+ ...props
3775
+ }
3776
+ );
3777
+ }
3778
+ function Toast({ className, ...props }) {
3779
+ return /* @__PURE__ */ jsx(
3780
+ Toast$1.Root,
3781
+ {
3782
+ "data-slot": "toast",
3783
+ className: cn(
3784
+ "group/toast pointer-events-auto absolute right-0 bottom-0 z-[calc(1000-var(--toast-index))] w-full origin-bottom rounded-none border bg-popover text-popover-foreground shadow-lg will-change-transform outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50",
3785
+ "[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--offset-y:calc(var(--toast-offset-y)*-1+calc(var(--toast-index)*var(--gap)*-1)+var(--toast-swipe-movement-y))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]",
3786
+ "h-(--height) [transform:translateX(var(--toast-swipe-movement-x))_translateY(calc(var(--toast-swipe-movement-y)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))] [transition:transform_500ms_cubic-bezier(0.22,1,0.36,1),opacity_500ms,height_150ms]",
3787
+ "after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']",
3788
+ "data-expanded:h-(--toast-height) data-expanded:[transform:translateX(var(--toast-swipe-movement-x))_translateY(var(--offset-y))]",
3789
+ "data-limited:opacity-0 data-starting-style:[transform:translateY(150%)]",
3790
+ "[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]",
3791
+ "data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]",
3792
+ "data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]",
3793
+ "data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]",
3794
+ "data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",
3795
+ "data-expanded:data-ending-style:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y)+150%))]",
3796
+ "data-expanded:data-ending-style:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x)-150%))_translateY(var(--offset-y))]",
3797
+ "data-expanded:data-ending-style:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x)+150%))_translateY(var(--offset-y))]",
3798
+ "data-expanded:data-ending-style:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y)-150%))]",
3799
+ className
3800
+ ),
3801
+ ...props
3802
+ }
3803
+ );
3804
+ }
3805
+ function ToastContent({ className, ...props }) {
3806
+ return /* @__PURE__ */ jsx(
3807
+ Toast$1.Content,
3808
+ {
3809
+ "data-slot": "toast-content",
3810
+ className: cn(
3811
+ "flex h-full items-center gap-3 overflow-hidden p-4 transition-opacity duration-250 ease-[cubic-bezier(0.22,1,0.36,1)] data-behind:opacity-0 data-expanded:opacity-100",
3812
+ className
3813
+ ),
3814
+ ...props
3815
+ }
3816
+ );
3817
+ }
3818
+ function ToastTitle({ className, ...props }) {
3819
+ return /* @__PURE__ */ jsx(
3820
+ Toast$1.Title,
3821
+ {
3822
+ "data-slot": "toast-title",
3823
+ className: cn("text-sm font-medium", className),
3824
+ ...props
3825
+ }
3826
+ );
3827
+ }
3828
+ function ToastDescription({
3829
+ className,
3830
+ ...props
3831
+ }) {
3832
+ return /* @__PURE__ */ jsx(
3833
+ Toast$1.Description,
3834
+ {
3835
+ "data-slot": "toast-description",
3836
+ className: cn("text-sm text-muted-foreground", className),
3837
+ ...props
3838
+ }
3839
+ );
3840
+ }
3841
+ function ToastAction({
3842
+ className,
3843
+ render = /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm" }),
3844
+ ...props
3845
+ }) {
3846
+ return /* @__PURE__ */ jsx(
3847
+ Toast$1.Action,
3848
+ {
3849
+ "data-slot": "toast-action",
3850
+ render,
3851
+ className: cn("shrink-0", className),
3852
+ ...props
3853
+ }
3854
+ );
3855
+ }
3856
+ function ToastClose({
3857
+ className,
3858
+ children,
3859
+ render = /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "icon-sm" }),
3860
+ ...props
3861
+ }) {
3862
+ return /* @__PURE__ */ jsx(
3863
+ Toast$1.Close,
3864
+ {
3865
+ "data-slot": "toast-close",
3866
+ "aria-label": "Close toast",
3867
+ render,
3868
+ className: cn(
3869
+ "relative shrink-0 text-muted-foreground after:absolute after:-inset-2 after:content-[''] hover:text-foreground",
3870
+ className
3871
+ ),
3872
+ ...props,
3873
+ children: children ?? /* @__PURE__ */ jsx(XIcon, { "aria-hidden": "true" })
3874
+ }
3875
+ );
3876
+ }
3877
+ function ToastIcon({ type }) {
3878
+ let icon = null;
3879
+ if (type === "success") {
3880
+ icon = /* @__PURE__ */ jsx(CircleCheckIcon, { "aria-hidden": "true" });
3881
+ }
3882
+ if (type === "info") {
3883
+ icon = /* @__PURE__ */ jsx(InfoIcon, { "aria-hidden": "true" });
3884
+ }
3885
+ if (type === "warning") {
3886
+ icon = /* @__PURE__ */ jsx(TriangleAlertIcon, { "aria-hidden": "true" });
3887
+ }
3888
+ if (type === "error") {
3889
+ icon = /* @__PURE__ */ jsx(OctagonXIcon, { className: "text-destructive", "aria-hidden": "true" });
3890
+ }
3891
+ if (type === "loading") {
3892
+ icon = /* @__PURE__ */ jsx(Loader2Icon, { className: "animate-spin", "aria-hidden": "true" });
3893
+ }
3894
+ if (!icon) {
3895
+ return null;
3896
+ }
3897
+ return /* @__PURE__ */ jsx(
3898
+ "span",
3899
+ {
3900
+ "data-slot": "toast-icon",
3901
+ className: "shrink-0 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
3902
+ children: icon
3903
+ }
3904
+ );
3905
+ }
3906
+ function ToastList() {
3907
+ const { toasts } = Toast$1.useToastManager();
3908
+ return toasts.map((toastItem) => /* @__PURE__ */ jsx(Toast, { toast: toastItem, children: /* @__PURE__ */ jsxs(ToastContent, { children: [
3909
+ /* @__PURE__ */ jsx(ToastIcon, { type: toastItem.type }),
3910
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
3911
+ /* @__PURE__ */ jsx(ToastTitle, {}),
3912
+ /* @__PURE__ */ jsx(ToastDescription, {})
3913
+ ] }),
3914
+ /* @__PURE__ */ jsx(ToastAction, {}),
3915
+ /* @__PURE__ */ jsx(ToastClose, {})
3916
+ ] }) }, toastItem.id));
3917
+ }
3918
+ function Toaster({
3919
+ children,
3920
+ toastManager = toast,
3921
+ ...props
3922
+ }) {
3923
+ return /* @__PURE__ */ jsxs(ToastProvider, { toastManager, ...props, children: [
3924
+ children,
3925
+ /* @__PURE__ */ jsx(ToastPortal, { children: /* @__PURE__ */ jsx(ToastViewport, { children: /* @__PURE__ */ jsx(ToastList, {}) }) })
3926
+ ] });
3927
+ }
3928
+ var createToastManager = Toast$1.createToastManager;
3929
+ var useToastManager = Toast$1.useToastManager;
1741
3930
  var toggleVariants = cva(
1742
3931
  "group/toggle inline-flex items-center justify-center gap-1 rounded-none text-xs font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1743
3932
  {
@@ -1764,19 +3953,26 @@ function Toggle({
1764
3953
  size = "default",
1765
3954
  ...props
1766
3955
  }) {
1767
- return /* @__PURE__ */ jsx(Toggle$1.Root, { "data-slot": "toggle", className: cn(toggleVariants({ variant, size, className })), ...props });
3956
+ return /* @__PURE__ */ jsx(
3957
+ Toggle$1.Root,
3958
+ {
3959
+ "data-slot": "toggle",
3960
+ className: cn(toggleVariants({ variant, size, className })),
3961
+ ...props
3962
+ }
3963
+ );
1768
3964
  }
1769
- var ToggleGroupContext = React21.createContext({
3965
+ var ToggleGroupContext = React8.createContext({
1770
3966
  size: "default",
1771
3967
  variant: "default",
1772
- spacing: 0,
3968
+ spacing: 2,
1773
3969
  orientation: "horizontal"
1774
3970
  });
1775
3971
  function ToggleGroup({
1776
3972
  className,
1777
3973
  variant,
1778
3974
  size,
1779
- spacing = 0,
3975
+ spacing = 2,
1780
3976
  orientation = "horizontal",
1781
3977
  children,
1782
3978
  ...props
@@ -1795,7 +3991,13 @@ function ToggleGroup({
1795
3991
  className
1796
3992
  ),
1797
3993
  ...props,
1798
- children: /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: { variant, size, spacing, orientation }, children })
3994
+ children: /* @__PURE__ */ jsx(
3995
+ ToggleGroupContext.Provider,
3996
+ {
3997
+ value: { variant, size, spacing, orientation },
3998
+ children
3999
+ }
4000
+ )
1799
4001
  }
1800
4002
  );
1801
4003
  }
@@ -1806,7 +4008,7 @@ function ToggleGroupItem({
1806
4008
  size = "default",
1807
4009
  ...props
1808
4010
  }) {
1809
- const context = React21.useContext(ToggleGroupContext);
4011
+ const context = React8.useContext(ToggleGroupContext);
1810
4012
  return /* @__PURE__ */ jsx(
1811
4013
  ToggleGroup$1.Item,
1812
4014
  {
@@ -1827,7 +4029,33 @@ function ToggleGroupItem({
1827
4029
  }
1828
4030
  );
1829
4031
  }
4032
+ var maxWidthClass = {
4033
+ sm: "max-w-screen-sm",
4034
+ md: "max-w-screen-md",
4035
+ lg: "max-w-screen-lg",
4036
+ xl: "max-w-screen-xl",
4037
+ "2xl": "max-w-screen-2xl"
4038
+ };
4039
+ function Container({ as: Component = "div", maxWidth = "xl", fluid = false, center, fullHeight = false, className, children, ...props }) {
4040
+ const width = !fluid && maxWidth ? maxWidthClass[maxWidth] : "max-w-none";
4041
+ return /* @__PURE__ */ jsx(
4042
+ Component,
4043
+ {
4044
+ className: cn(
4045
+ "w-full px-4 sm:px-6 lg:px-8",
4046
+ width,
4047
+ center === "x" && "mx-auto",
4048
+ center === "y" && "flex flex-col justify-center",
4049
+ center === "both" && "flex items-center justify-center",
4050
+ center !== "x" && center != null && fullHeight && "min-h-screen",
4051
+ className
4052
+ ),
4053
+ ...props,
4054
+ children
4055
+ }
4056
+ );
4057
+ }
1830
4058
 
1831
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Badge, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, HoverCard, HoverCardContent, HoverCardTrigger, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Slider, Spinner, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Toaster, Toggle, ToggleGroup, ToggleGroupItem, badgeVariants, buttonGroupVariants, navigationMenuTriggerStyle, tabsListVariants, toggleVariants };
4059
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, Badge, Bubble, BubbleContent, BubbleGroup, BubbleReactions, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Container, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, HoverCard, HoverCardContent, HoverCardTrigger, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Marker, MarkerContent, MarkerIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Slider, Spinner, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, badgeVariants, buttonGroupVariants, createToastManager, markerVariants, navigationMenuTriggerStyle, tabsListVariants, toast, toggleVariants, useCarousel, useComboboxAnchor, useDirection, useToastManager };
1832
4060
  //# sourceMappingURL=index.js.map
1833
4061
  //# sourceMappingURL=index.js.map