@doscientos/ui 0.1.22 → 0.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -38,6 +38,17 @@ __export(index_exports, {
38
38
  Alert: () => Alert,
39
39
  AlertAction: () => AlertAction,
40
40
  AlertDescription: () => AlertDescription,
41
+ AlertDialog: () => AlertDialog,
42
+ AlertDialogAction: () => AlertDialogAction,
43
+ AlertDialogCancel: () => AlertDialogCancel,
44
+ AlertDialogContent: () => AlertDialogContent,
45
+ AlertDialogDescription: () => AlertDialogDescription,
46
+ AlertDialogFooter: () => AlertDialogFooter,
47
+ AlertDialogHeader: () => AlertDialogHeader,
48
+ AlertDialogOverlay: () => AlertDialogOverlay,
49
+ AlertDialogPortal: () => AlertDialogPortal,
50
+ AlertDialogTitle: () => AlertDialogTitle,
51
+ AlertDialogTrigger: () => AlertDialogTrigger,
41
52
  AlertTitle: () => AlertTitle,
42
53
  AppShell: () => AppShell,
43
54
  AppShellContent: () => AppShellContent,
@@ -71,18 +82,22 @@ __export(index_exports, {
71
82
  CardHeader: () => CardHeader,
72
83
  CardTitle: () => CardTitle,
73
84
  Checkbox: () => Checkbox,
85
+ Collapsible: () => Collapsible,
86
+ CollapsibleContent: () => CollapsibleContent,
87
+ CollapsibleTrigger: () => CollapsibleTrigger,
74
88
  Combobox: () => Combobox,
75
89
  ComboboxContent: () => ComboboxContent,
76
90
  ComboboxInput: () => ComboboxInput,
77
91
  ComboboxItem: () => ComboboxItem,
78
92
  ComboboxList: () => ComboboxList,
79
- ComboboxValue: () => import_react_aria_components7.ComboBoxValue,
93
+ ComboboxValue: () => import_react_aria_components8.ComboBoxValue,
80
94
  Command: () => Command,
81
95
  CommandContent: () => CommandContent,
82
96
  CommandInput: () => CommandInput,
83
97
  CommandItem: () => CommandItem,
84
98
  CommandList: () => CommandList,
85
99
  ConfirmDialog: () => ConfirmDialog,
100
+ DangerZone: () => DangerZone,
86
101
  Dialog: () => Dialog,
87
102
  DialogClose: () => DialogClose,
88
103
  DialogContent: () => DialogContent,
@@ -93,6 +108,7 @@ __export(index_exports, {
93
108
  DialogPortal: () => DialogPortal,
94
109
  DialogTitle: () => DialogTitle,
95
110
  DialogTrigger: () => DialogTrigger,
111
+ DocPreview: () => DocPreview,
96
112
  Drawer: () => Drawer,
97
113
  DrawerDescription: () => DrawerDescription,
98
114
  DrawerFooter: () => DrawerFooter,
@@ -144,6 +160,7 @@ __export(index_exports, {
144
160
  MenuContent: () => MenuContent,
145
161
  MenuItem: () => MenuItem,
146
162
  MenuTrigger: () => MenuTrigger,
163
+ MetricCard: () => MetricCard,
147
164
  ModalDialog: () => ModalDialog,
148
165
  OtpInput: () => OtpInput2,
149
166
  PageHeader: () => PageHeader,
@@ -156,9 +173,6 @@ __export(index_exports, {
156
173
  PopoverContent: () => PopoverContent,
157
174
  PopoverTrigger: () => PopoverTrigger,
158
175
  QuantityInput: () => QuantityInput,
159
- SearchClearButton: () => SearchClearButton,
160
- SearchField: () => SearchField,
161
- SearchInput: () => SearchInput,
162
176
  Select: () => Select,
163
177
  SelectContent: () => SelectContent,
164
178
  SelectItem: () => SelectItem,
@@ -331,7 +345,7 @@ function useFormDirty() {
331
345
  // src/lib/action-ripple.ts
332
346
  var import_class_variance_authority = require("class-variance-authority");
333
347
  var actionRipple = (0, import_class_variance_authority.cva)(
334
- "relative isolate overflow-hidden after:pointer-events-none after:absolute after:top-1/2 after:left-1/2 after:aspect-square after:w-full after:-translate-x-1/2 after:-translate-y-1/2 after:scale-0 after:rounded-full after:bg-current after:opacity-0 after:content-[''] after:transition-[scale,opacity] after:duration-300 after:ease-out active:after:scale-150 active:after:opacity-10 data-pressed:after:scale-150 data-pressed:after:opacity-10 motion-reduce:after:hidden"
348
+ "relative isolate overflow-hidden"
335
349
  );
336
350
 
337
351
  // src/lib/cn.ts
@@ -465,10 +479,190 @@ function AccordionContent({
465
479
  );
466
480
  }
467
481
 
468
- // src/ui/alert/alert.tsx
482
+ // src/ui/alert-dialog/alert-dialog.tsx
483
+ var React2 = __toESM(require("react"), 1);
484
+ var import_react_aria_components3 = require("react-aria-components");
485
+
486
+ // src/ui/button/button.tsx
469
487
  var import_class_variance_authority2 = require("class-variance-authority");
488
+ var import_react4 = require("react");
489
+ var import_react_aria_components2 = require("react-aria-components");
470
490
  var import_jsx_runtime2 = require("react/jsx-runtime");
471
- var alertVariants = (0, import_class_variance_authority2.cva)(
491
+ var centeredRipplePosition = { x: "50%", y: "50%" };
492
+ function getRipplePosition(event) {
493
+ if (event.pointerType === "keyboard" || event.pointerType === "virtual") {
494
+ return centeredRipplePosition;
495
+ }
496
+ if (!(event.target instanceof Element) || event.x === void 0 || event.y === void 0) {
497
+ return centeredRipplePosition;
498
+ }
499
+ const bounds = event.target.getBoundingClientRect();
500
+ return {
501
+ x: `${event.x - bounds.left}px`,
502
+ y: `${event.y - bounds.top}px`
503
+ };
504
+ }
505
+ function useActionRipple(enabled) {
506
+ const [ripple, setRipple] = (0, import_react4.useState)(null);
507
+ function triggerRipple(event) {
508
+ if (!enabled) return;
509
+ const position = getRipplePosition(event);
510
+ setRipple((currentRipple) => ({
511
+ id: (currentRipple?.id ?? 0) + 1,
512
+ position
513
+ }));
514
+ }
515
+ const rippleElement = ripple ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
516
+ "span",
517
+ {
518
+ "aria-hidden": "true",
519
+ "data-slot": "button-ripple",
520
+ className: "pointer-events-none absolute aspect-square w-full rounded-full bg-current animate-ui-ripple motion-reduce:hidden",
521
+ style: { left: ripple.position.x, top: ripple.position.y },
522
+ onAnimationEnd: () => setRipple((currentRipple) => currentRipple?.id === ripple.id ? null : currentRipple)
523
+ },
524
+ ripple.id
525
+ ) : null;
526
+ return { ripple: rippleElement, triggerRipple };
527
+ }
528
+ var buttonVariants = (0, import_class_variance_authority2.cva)(
529
+ cn(
530
+ "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
531
+ actionRipple()
532
+ ),
533
+ {
534
+ variants: {
535
+ variant: {
536
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
537
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
538
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
539
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
540
+ destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
541
+ link: "text-primary underline-offset-4 hover:underline after:hidden"
542
+ },
543
+ size: {
544
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
545
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
546
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
547
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
548
+ icon: "size-8",
549
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
550
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
551
+ "icon-lg": "size-9"
552
+ }
553
+ },
554
+ defaultVariants: {
555
+ variant: "default",
556
+ size: "default"
557
+ }
558
+ }
559
+ );
560
+ function Button({ className, variant = "default", size = "default", children, disabled, isDisabled, onClick, onPress, ...props }) {
561
+ const { ripple, triggerRipple } = useActionRipple(variant !== "link");
562
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
563
+ import_react_aria_components2.Button,
564
+ {
565
+ "data-slot": "button",
566
+ "data-variant": variant,
567
+ "data-size": size,
568
+ className: cn(buttonVariants({ variant, size, className })),
569
+ onClick,
570
+ isDisabled: isDisabled ?? disabled,
571
+ onPress: (event) => {
572
+ onPress?.(event);
573
+ triggerRipple(event);
574
+ },
575
+ ...props,
576
+ children: (renderProps) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
577
+ typeof children === "function" ? children(renderProps) : children,
578
+ ripple
579
+ ] })
580
+ }
581
+ );
582
+ }
583
+ function LinkButton({
584
+ className,
585
+ variant = "default",
586
+ size = "default",
587
+ children,
588
+ onClick,
589
+ onPress,
590
+ ...props
591
+ }) {
592
+ const { ripple, triggerRipple } = useActionRipple(variant !== "link");
593
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
594
+ import_react_aria_components2.Link,
595
+ {
596
+ "data-slot": "button",
597
+ "data-variant": variant,
598
+ "data-size": size,
599
+ className: cn(buttonVariants({ variant, size, className })),
600
+ onClick,
601
+ onPress: (event) => {
602
+ onPress?.(event);
603
+ triggerRipple(event);
604
+ },
605
+ ...props,
606
+ children: (renderProps) => /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
607
+ typeof children === "function" ? children(renderProps) : children,
608
+ ripple
609
+ ] })
610
+ }
611
+ );
612
+ }
613
+
614
+ // src/ui/alert-dialog/alert-dialog.tsx
615
+ var import_jsx_runtime3 = require("react/jsx-runtime");
616
+ var AlertDialogContext = React2.createContext(null);
617
+ function useAlertDialogContext() {
618
+ const context = React2.useContext(AlertDialogContext);
619
+ if (!context) throw new Error("AlertDialog components must be rendered within AlertDialog.");
620
+ return context;
621
+ }
622
+ function AlertDialog({ children, open, onOpenChange }) {
623
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(AlertDialogContext.Provider, { value: { open, setOpen: onOpenChange }, children });
624
+ }
625
+ function AlertDialogPortal({ children }) {
626
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children });
627
+ }
628
+ function AlertDialogTrigger({ children, ...props }) {
629
+ const { setOpen } = useAlertDialogContext();
630
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { "data-slot": "alert-dialog-trigger", onPress: () => setOpen(true), ...props, children });
631
+ }
632
+ function AlertDialogOverlay({ className, ...props }) {
633
+ const { open, setOpen } = useAlertDialogContext();
634
+ if (!open) return null;
635
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_aria_components3.ModalOverlay, { "data-slot": "alert-dialog-overlay", isDismissable: true, isOpen: open, onOpenChange: setOpen, className: cn("fixed inset-0 isolate z-50 grid place-items-center bg-black/10 p-4 backdrop-blur-[1px]", className), ...props });
636
+ }
637
+ function AlertDialogContent({ className, size = "default", children }) {
638
+ const { open, setOpen } = useAlertDialogContext();
639
+ if (!open) return null;
640
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(AlertDialogPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_aria_components3.ModalOverlay, { isDismissable: true, isOpen: open, onOpenChange: setOpen, className: "fixed inset-0 isolate z-50 grid place-items-center bg-black/10 p-4 backdrop-blur-[1px]", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_aria_components3.Modal, { className: cn("w-full max-w-[calc(100%-2rem)] outline-none", size === "sm" ? "sm:max-w-xs" : "sm:max-w-sm", className), children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_aria_components3.Dialog, { role: "alertdialog", "data-slot": "alert-dialog-content", className: "grid gap-4 rounded-xl bg-background p-4 text-sm text-foreground ring-1 ring-foreground/10 outline-none", children }) }) }) });
641
+ }
642
+ function AlertDialogHeader({ className, ...props }) {
643
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { "data-slot": "alert-dialog-header", className: cn("flex flex-col gap-2 text-center sm:text-left", className), ...props });
644
+ }
645
+ function AlertDialogFooter({ className, ...props }) {
646
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { "data-slot": "alert-dialog-footer", className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end", className), ...props });
647
+ }
648
+ function AlertDialogTitle({ className, ...props }) {
649
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_aria_components3.Heading, { slot: "title", "data-slot": "alert-dialog-title", className: cn("font-heading text-base font-medium", className), ...props });
650
+ }
651
+ function AlertDialogDescription({ className, ...props }) {
652
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_aria_components3.Text, { slot: "description", "data-slot": "alert-dialog-description", className: cn("text-sm text-muted-foreground", className), ...props });
653
+ }
654
+ function AlertDialogAction({ className, ...props }) {
655
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { "data-slot": "alert-dialog-action", className: cn(className), ...props });
656
+ }
657
+ function AlertDialogCancel({ children = "Cancelar", onClick, ...props }) {
658
+ const { setOpen } = useAlertDialogContext();
659
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { "data-slot": "alert-dialog-cancel", variant: "outline", onClick, onPress: () => setOpen(false), ...props, children });
660
+ }
661
+
662
+ // src/ui/alert/alert.tsx
663
+ var import_class_variance_authority3 = require("class-variance-authority");
664
+ var import_jsx_runtime4 = require("react/jsx-runtime");
665
+ var alertVariants = (0, import_class_variance_authority3.cva)(
472
666
  "group/alert relative grid w-full gap-0.5 rounded-lg border border-border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",
473
667
  {
474
668
  variants: {
@@ -486,7 +680,7 @@ var alertVariants = (0, import_class_variance_authority2.cva)(
486
680
  }
487
681
  );
488
682
  function Alert({ className, variant, ...props }) {
489
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
683
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
490
684
  "div",
491
685
  {
492
686
  "data-slot": "alert",
@@ -497,7 +691,7 @@ function Alert({ className, variant, ...props }) {
497
691
  );
498
692
  }
499
693
  function AlertTitle({ className, ...props }) {
500
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
694
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
501
695
  "div",
502
696
  {
503
697
  "data-slot": "alert-title",
@@ -510,7 +704,7 @@ function AlertTitle({ className, ...props }) {
510
704
  );
511
705
  }
512
706
  function AlertDescription({ className, ...props }) {
513
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
707
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
514
708
  "div",
515
709
  {
516
710
  "data-slot": "alert-description",
@@ -523,17 +717,17 @@ function AlertDescription({ className, ...props }) {
523
717
  );
524
718
  }
525
719
  function AlertAction({ className, ...props }) {
526
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
720
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
527
721
  }
528
722
 
529
723
  // src/ui/app-shell/app-shell.tsx
530
- var import_jsx_runtime3 = require("react/jsx-runtime");
724
+ var import_jsx_runtime5 = require("react/jsx-runtime");
531
725
  function AppShell({
532
726
  className,
533
727
  sidebarBreakpoint = "md",
534
728
  ...props
535
729
  }) {
536
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
730
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
537
731
  "div",
538
732
  {
539
733
  "data-slot": "app-shell",
@@ -544,7 +738,7 @@ function AppShell({
544
738
  );
545
739
  }
546
740
  function AppShellSidebar({ className, ...props }) {
547
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
741
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
548
742
  "aside",
549
743
  {
550
744
  "data-slot": "app-shell-sidebar",
@@ -554,10 +748,10 @@ function AppShellSidebar({ className, ...props }) {
554
748
  );
555
749
  }
556
750
  function AppShellMain({ className, ...props }) {
557
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
751
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
558
752
  }
559
753
  function AppShellHeader({ className, ...props }) {
560
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
754
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
561
755
  "header",
562
756
  {
563
757
  "data-slot": "app-shell-header",
@@ -570,7 +764,7 @@ function AppShellMobileHeader({
570
764
  className,
571
765
  ...props
572
766
  }) {
573
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
767
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
574
768
  "header",
575
769
  {
576
770
  "data-slot": "app-shell-mobile-header",
@@ -586,7 +780,7 @@ function AppShellContent({
586
780
  scrollable = true,
587
781
  ...props
588
782
  }) {
589
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
783
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
590
784
  "div",
591
785
  {
592
786
  "data-slot": "app-shell-content",
@@ -600,23 +794,23 @@ function AppShellContent({
600
794
  }
601
795
 
602
796
  // src/ui/avatar/avatar.tsx
603
- var import_react4 = require("react");
604
- var import_jsx_runtime4 = require("react/jsx-runtime");
797
+ var import_react5 = require("react");
798
+ var import_jsx_runtime6 = require("react/jsx-runtime");
605
799
  var sizes = { xs: "size-5 text-[10px]", sm: "size-6 text-xs", default: "size-8 text-sm", lg: "size-10 text-base" };
606
- var AvatarContext = (0, import_react4.createContext)(null);
800
+ var AvatarContext = (0, import_react5.createContext)(null);
607
801
  function Avatar({ className, size = "default", children, ...props }) {
608
- const [status, setStatus] = (0, import_react4.useState)("idle");
609
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AvatarContext.Provider, { value: { status, setStatus }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { "data-slot": "avatar", "data-size": size, className: cn("group/avatar relative flex shrink-0 overflow-hidden rounded-full bg-muted text-muted-foreground", sizes[size], className), ...props, children }) });
802
+ const [status, setStatus] = (0, import_react5.useState)("idle");
803
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(AvatarContext.Provider, { value: { status, setStatus }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { "data-slot": "avatar", "data-size": size, className: cn("group/avatar relative flex shrink-0 overflow-hidden rounded-full bg-muted text-muted-foreground", sizes[size], className), ...props, children }) });
610
804
  }
611
805
  function AvatarImage({ className, src, onError, onLoad, ...props }) {
612
- const avatar = (0, import_react4.useContext)(AvatarContext);
613
- const [failed, setFailed] = (0, import_react4.useState)(false);
614
- (0, import_react4.useEffect)(() => {
806
+ const avatar = (0, import_react5.useContext)(AvatarContext);
807
+ const [failed, setFailed] = (0, import_react5.useState)(false);
808
+ (0, import_react5.useEffect)(() => {
615
809
  setFailed(false);
616
810
  avatar?.setStatus(src ? "loading" : "idle");
617
811
  }, [avatar?.setStatus, src]);
618
812
  if (failed || avatar?.status === "error") return null;
619
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("img", { "data-slot": "avatar-image", src, className: cn("aspect-square size-full object-cover", className), onLoad: (event) => {
813
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { "data-slot": "avatar-image", src, className: cn("aspect-square size-full object-cover", className), onLoad: (event) => {
620
814
  avatar?.setStatus("loaded");
621
815
  onLoad?.(event);
622
816
  }, onError: (event) => {
@@ -626,25 +820,25 @@ function AvatarImage({ className, src, onError, onLoad, ...props }) {
626
820
  }, ...props });
627
821
  }
628
822
  function AvatarFallback({ className, ...props }) {
629
- const avatar = (0, import_react4.useContext)(AvatarContext);
823
+ const avatar = (0, import_react5.useContext)(AvatarContext);
630
824
  if (avatar?.status === "loaded") return null;
631
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-slot": "avatar-fallback", className: cn("flex size-full items-center justify-center font-medium", className), ...props });
825
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "data-slot": "avatar-fallback", className: cn("flex size-full items-center justify-center font-medium", className), ...props });
632
826
  }
633
827
  function AvatarBadge({ className, ...props }) {
634
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-slot": "avatar-badge", className: cn("absolute right-0 bottom-0 size-2.5 rounded-full bg-success ring-2 ring-background", className), ...props });
828
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "data-slot": "avatar-badge", className: cn("absolute right-0 bottom-0 size-2.5 rounded-full bg-success ring-2 ring-background", className), ...props });
635
829
  }
636
830
  function AvatarGroup({ className, ...props }) {
637
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { "data-slot": "avatar-group", className: cn("flex -space-x-2 [&>[data-slot=avatar]]:ring-2 [&>[data-slot=avatar]]:ring-background", className), ...props });
831
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { "data-slot": "avatar-group", className: cn("flex -space-x-2 [&>[data-slot=avatar]]:ring-2 [&>[data-slot=avatar]]:ring-background", className), ...props });
638
832
  }
639
833
  function AvatarGroupCount({ className, ...props }) {
640
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "data-slot": "avatar-group-count", className: cn("flex size-8 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground ring-2 ring-background", className), ...props });
834
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "data-slot": "avatar-group-count", className: cn("flex size-8 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground ring-2 ring-background", className), ...props });
641
835
  }
642
836
 
643
837
  // src/ui/badge/badge.tsx
644
- var import_class_variance_authority3 = require("class-variance-authority");
645
- var import_react_aria_components2 = require("react-aria-components");
646
- var import_jsx_runtime5 = require("react/jsx-runtime");
647
- var badgeVariants = (0, import_class_variance_authority3.cva)(
838
+ var import_class_variance_authority4 = require("class-variance-authority");
839
+ var import_react_aria_components4 = require("react-aria-components");
840
+ var import_jsx_runtime7 = require("react/jsx-runtime");
841
+ var badgeVariants = (0, import_class_variance_authority4.cva)(
648
842
  "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 [&>svg]:pointer-events-none [&>svg]:size-3",
649
843
  {
650
844
  variants: {
@@ -666,7 +860,7 @@ var badgeVariants = (0, import_class_variance_authority3.cva)(
666
860
  }
667
861
  );
668
862
  function Badge({ className, variant, ...props }) {
669
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
863
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
670
864
  "span",
671
865
  {
672
866
  "data-slot": "badge",
@@ -677,8 +871,8 @@ function Badge({ className, variant, ...props }) {
677
871
  );
678
872
  }
679
873
  function BadgeLink({ className, variant, ...props }) {
680
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
681
- import_react_aria_components2.Link,
874
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
875
+ import_react_aria_components4.Link,
682
876
  {
683
877
  "data-slot": "badge",
684
878
  "data-variant": variant ?? "default",
@@ -689,33 +883,33 @@ function BadgeLink({ className, variant, ...props }) {
689
883
  }
690
884
 
691
885
  // src/ui/breadcrumb/breadcrumb.tsx
692
- var import_react_aria_components3 = require("react-aria-components");
693
- var import_jsx_runtime6 = require("react/jsx-runtime");
886
+ var import_react_aria_components5 = require("react-aria-components");
887
+ var import_jsx_runtime8 = require("react/jsx-runtime");
694
888
  function Breadcrumbs({ className, ...props }) {
695
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components3.Breadcrumbs, { "data-slot": "breadcrumbs", className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className), ...props });
889
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_aria_components5.Breadcrumbs, { "data-slot": "breadcrumbs", className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className), ...props });
696
890
  }
697
891
  function Breadcrumb({ className, ...props }) {
698
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components3.Breadcrumb, { "data-slot": "breadcrumb", className: cn("inline-flex items-center gap-1.5", className), ...props });
892
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_aria_components5.Breadcrumb, { "data-slot": "breadcrumb", className: cn("inline-flex items-center gap-1.5", className), ...props });
699
893
  }
700
894
  function BreadcrumbLink({ className, ...props }) {
701
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components3.Link, { "data-slot": "breadcrumb-link", className: cn("transition-colors hover:text-foreground", className), ...props });
895
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_aria_components5.Link, { "data-slot": "breadcrumb-link", className: cn("transition-colors hover:text-foreground", className), ...props });
702
896
  }
703
897
  function BreadcrumbPage({ className, ...props }) {
704
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "data-slot": "breadcrumb-page", "aria-current": "page", className: cn("font-medium text-foreground", className), ...props });
898
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { "data-slot": "breadcrumb-page", "aria-current": "page", className: cn("font-medium text-foreground", className), ...props });
705
899
  }
706
900
  function BreadcrumbSeparator({ children = "/", className, ...props }) {
707
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "data-slot": "breadcrumb-separator", "aria-hidden": "true", className: cn("text-muted-foreground/60", className), ...props, children });
901
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { "data-slot": "breadcrumb-separator", "aria-hidden": "true", className: cn("text-muted-foreground/60", className), ...props, children });
708
902
  }
709
903
 
710
904
  // src/ui/button-group/button-group.tsx
711
- var import_class_variance_authority4 = require("class-variance-authority");
905
+ var import_class_variance_authority5 = require("class-variance-authority");
712
906
 
713
907
  // src/ui/separator/separator.tsx
714
- var import_react_aria_components4 = require("react-aria-components");
715
- var import_jsx_runtime7 = require("react/jsx-runtime");
908
+ var import_react_aria_components6 = require("react-aria-components");
909
+ var import_jsx_runtime9 = require("react/jsx-runtime");
716
910
  function Separator({ className, orientation = "horizontal", ...props }) {
717
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
718
- import_react_aria_components4.Separator,
911
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
912
+ import_react_aria_components6.Separator,
719
913
  {
720
914
  "data-slot": "separator",
721
915
  orientation,
@@ -729,11 +923,11 @@ function Separator({ className, orientation = "horizontal", ...props }) {
729
923
  }
730
924
 
731
925
  // src/ui/button-group/button-group.tsx
732
- var import_jsx_runtime8 = (
926
+ var import_jsx_runtime10 = (
733
927
  // biome-ignore lint/a11y/useSemanticElements: fieldset would impose form semantics on a generic action group.
734
928
  require("react/jsx-runtime")
735
929
  );
736
- var buttonGroupVariants = (0, import_class_variance_authority4.cva)(
930
+ var buttonGroupVariants = (0, import_class_variance_authority5.cva)(
737
931
  "flex w-fit items-stretch *: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-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
738
932
  {
739
933
  variants: {
@@ -752,7 +946,7 @@ function ButtonGroup({
752
946
  orientation,
753
947
  ...props
754
948
  }) {
755
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
949
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
756
950
  "div",
757
951
  {
758
952
  role: "group",
@@ -779,7 +973,7 @@ function ButtonGroupText({
779
973
  };
780
974
  return render(renderProps);
781
975
  }
782
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
976
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
783
977
  "div",
784
978
  {
785
979
  "data-slot": "button-group-text",
@@ -796,7 +990,7 @@ function ButtonGroupSeparator({
796
990
  orientation = "vertical",
797
991
  ...props
798
992
  }) {
799
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
993
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
800
994
  Separator,
801
995
  {
802
996
  "data-slot": "button-group-separator",
@@ -810,76 +1004,10 @@ function ButtonGroupSeparator({
810
1004
  );
811
1005
  }
812
1006
 
813
- // src/ui/button/button.tsx
814
- var import_class_variance_authority5 = require("class-variance-authority");
815
- var import_react_aria_components5 = require("react-aria-components");
816
- var import_jsx_runtime9 = require("react/jsx-runtime");
817
- var buttonVariants = (0, import_class_variance_authority5.cva)(
818
- cn(
819
- "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
820
- actionRipple()
821
- ),
822
- {
823
- variants: {
824
- variant: {
825
- default: "bg-primary text-primary-foreground hover:bg-primary/80",
826
- outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
827
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
828
- ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
829
- destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
830
- link: "text-primary underline-offset-4 hover:underline after:hidden"
831
- },
832
- size: {
833
- default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
834
- xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
835
- sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
836
- lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
837
- icon: "size-8",
838
- "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
839
- "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
840
- "icon-lg": "size-9"
841
- }
842
- },
843
- defaultVariants: {
844
- variant: "default",
845
- size: "default"
846
- }
847
- }
848
- );
849
- function Button({ className, variant = "default", size = "default", ...props }) {
850
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
851
- import_react_aria_components5.Button,
852
- {
853
- "data-slot": "button",
854
- "data-variant": variant,
855
- "data-size": size,
856
- className: cn(buttonVariants({ variant, size, className })),
857
- ...props
858
- }
859
- );
860
- }
861
- function LinkButton({
862
- className,
863
- variant = "default",
864
- size = "default",
865
- ...props
866
- }) {
867
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
868
- import_react_aria_components5.Link,
869
- {
870
- "data-slot": "button",
871
- "data-variant": variant,
872
- "data-size": size,
873
- className: cn(buttonVariants({ variant, size, className })),
874
- ...props
875
- }
876
- );
877
- }
878
-
879
1007
  // src/ui/card/card.tsx
880
- var import_jsx_runtime10 = require("react/jsx-runtime");
1008
+ var import_jsx_runtime11 = require("react/jsx-runtime");
881
1009
  function Card({ className, size = "default", ...props }) {
882
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1010
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
883
1011
  "div",
884
1012
  {
885
1013
  "data-slot": "card",
@@ -893,7 +1021,7 @@ function Card({ className, size = "default", ...props }) {
893
1021
  );
894
1022
  }
895
1023
  function CardHeader({ className, ...props }) {
896
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1024
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
897
1025
  "div",
898
1026
  {
899
1027
  "data-slot": "card-header",
@@ -906,7 +1034,7 @@ function CardHeader({ className, ...props }) {
906
1034
  );
907
1035
  }
908
1036
  function CardTitle({ className, ...props }) {
909
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1037
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
910
1038
  "div",
911
1039
  {
912
1040
  "data-slot": "card-title",
@@ -919,7 +1047,7 @@ function CardTitle({ className, ...props }) {
919
1047
  );
920
1048
  }
921
1049
  function CardDescription({ className, ...props }) {
922
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1050
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
923
1051
  "div",
924
1052
  {
925
1053
  "data-slot": "card-description",
@@ -929,7 +1057,7 @@ function CardDescription({ className, ...props }) {
929
1057
  );
930
1058
  }
931
1059
  function CardAction({ className, ...props }) {
932
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1060
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
933
1061
  "div",
934
1062
  {
935
1063
  "data-slot": "card-action",
@@ -939,10 +1067,10 @@ function CardAction({ className, ...props }) {
939
1067
  );
940
1068
  }
941
1069
  function CardContent({ className, ...props }) {
942
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props });
1070
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props });
943
1071
  }
944
1072
  function CardFooter({ className, ...props }) {
945
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1073
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
946
1074
  "div",
947
1075
  {
948
1076
  "data-slot": "card-footer",
@@ -957,11 +1085,11 @@ function CardFooter({ className, ...props }) {
957
1085
 
958
1086
  // src/ui/checkbox/checkbox.tsx
959
1087
  var import_lucide_react2 = require("lucide-react");
960
- var import_react_aria_components6 = require("react-aria-components");
961
- var import_jsx_runtime11 = require("react/jsx-runtime");
1088
+ var import_react_aria_components7 = require("react-aria-components");
1089
+ var import_jsx_runtime12 = require("react/jsx-runtime");
962
1090
  function Checkbox({ className, children, ...props }) {
963
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
964
- import_react_aria_components6.Checkbox,
1091
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1092
+ import_react_aria_components7.Checkbox,
965
1093
  {
966
1094
  "data-slot": "checkbox",
967
1095
  className: cn(
@@ -969,13 +1097,13 @@ function Checkbox({ className, children, ...props }) {
969
1097
  className
970
1098
  ),
971
1099
  ...props,
972
- children: (state) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
973
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1100
+ children: (state) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
1101
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
974
1102
  "span",
975
1103
  {
976
1104
  "aria-hidden": "true",
977
1105
  className: "grid size-4 place-items-center rounded border border-border bg-background text-primary-foreground transition-colors group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50",
978
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react2.Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" })
1106
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react2.Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" })
979
1107
  }
980
1108
  ),
981
1109
  typeof children === "function" ? children(state) : children
@@ -984,36 +1112,104 @@ function Checkbox({ className, children, ...props }) {
984
1112
  );
985
1113
  }
986
1114
 
1115
+ // src/ui/collapsible/collapsible.tsx
1116
+ var React3 = __toESM(require("react"), 1);
1117
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1118
+ var CollapsibleContext = React3.createContext(null);
1119
+ function useCollapsibleContext() {
1120
+ const context = React3.useContext(CollapsibleContext);
1121
+ if (!context) throw new Error("Collapsible components must be rendered within Collapsible.");
1122
+ return context;
1123
+ }
1124
+ function Collapsible({
1125
+ children,
1126
+ defaultOpen = false,
1127
+ onOpenChange,
1128
+ open: controlledOpen,
1129
+ ...props
1130
+ }) {
1131
+ const [uncontrolledOpen, setUncontrolledOpen] = React3.useState(defaultOpen);
1132
+ const contentId = React3.useId();
1133
+ const open = controlledOpen ?? uncontrolledOpen;
1134
+ const setOpen = React3.useCallback(
1135
+ (nextOpen) => {
1136
+ if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
1137
+ onOpenChange?.(nextOpen);
1138
+ },
1139
+ [controlledOpen, onOpenChange]
1140
+ );
1141
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(CollapsibleContext.Provider, { value: { contentId, open, setOpen }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { "data-slot": "collapsible", "data-state": open ? "open" : "closed", ...props, children }) });
1142
+ }
1143
+ function CollapsibleTrigger({ asChild = false, children, onClick, ...props }) {
1144
+ const { contentId, open, setOpen } = useCollapsibleContext();
1145
+ const handleClick = (event) => {
1146
+ onClick?.(event);
1147
+ if (!event.defaultPrevented) setOpen(!open);
1148
+ };
1149
+ if (asChild && React3.isValidElement(children)) {
1150
+ const child = children;
1151
+ return React3.cloneElement(child, {
1152
+ ...props,
1153
+ "aria-controls": contentId,
1154
+ "aria-expanded": open,
1155
+ "data-slot": "collapsible-trigger",
1156
+ "data-state": open ? "open" : "closed",
1157
+ onClick: (event) => {
1158
+ child.props.onClick?.(event);
1159
+ handleClick(event);
1160
+ }
1161
+ });
1162
+ }
1163
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1164
+ "button",
1165
+ {
1166
+ type: "button",
1167
+ "data-slot": "collapsible-trigger",
1168
+ "data-state": open ? "open" : "closed",
1169
+ "aria-controls": contentId,
1170
+ "aria-expanded": open,
1171
+ onClick: handleClick,
1172
+ ...props,
1173
+ children
1174
+ }
1175
+ );
1176
+ }
1177
+ function CollapsibleContent({ children, ...props }) {
1178
+ const { contentId, open } = useCollapsibleContext();
1179
+ if (!open) return null;
1180
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { id: contentId, "data-slot": "collapsible-content", "data-state": "open", ...props, children });
1181
+ }
1182
+
987
1183
  // src/ui/combobox/combobox.tsx
988
- var import_react5 = require("react");
989
- var import_react_aria_components7 = require("react-aria-components");
990
- var import_jsx_runtime12 = require("react/jsx-runtime");
991
- var Combobox = import_react_aria_components7.ComboBox;
1184
+ var import_react6 = require("react");
1185
+ var import_react_aria_components8 = require("react-aria-components");
1186
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1187
+ var Combobox = import_react_aria_components8.ComboBox;
992
1188
  function ComboboxInput({ className, ...props }) {
993
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.Input, { "data-slot": "combobox-input", className: cn("h-9 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
1189
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components8.Input, { "data-slot": "combobox-input", className: cn("h-9 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
994
1190
  }
995
1191
  function ComboboxContent({ className, ...props }) {
996
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.Popover, { "data-slot": "combobox-content", className: cn("max-h-72 w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
1192
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components8.Popover, { "data-slot": "combobox-content", className: cn("max-h-72 w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
997
1193
  }
998
1194
  function ComboboxList({ className, emptyState, ...props }) {
999
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.ListBox, { "data-slot": "combobox-list", className: cn("max-h-64 overflow-y-auto", className), renderEmptyState: emptyState ? () => emptyState : void 0, ...props });
1195
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components8.ListBox, { "data-slot": "combobox-list", className: cn("max-h-64 overflow-y-auto", className), renderEmptyState: emptyState ? () => emptyState : void 0, ...props });
1000
1196
  }
1001
1197
  function ComboboxItem({ className, children, ...props }) {
1002
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.ListBoxItem, { "data-slot": "combobox-item", className: cn("flex w-full cursor-default items-center justify-between rounded-md px-2 py-2 text-sm outline-none transition-colors data-focused:bg-muted data-focused:text-foreground data-hovered:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
1198
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components8.ListBoxItem, { "data-slot": "combobox-item", className: cn("flex w-full cursor-default items-center justify-between rounded-md px-2 py-2 text-sm outline-none transition-colors data-focused:bg-muted data-focused:text-foreground data-hovered:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
1003
1199
  }
1004
1200
  function HighlightMatch({ text, query, className }) {
1005
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react5.Fragment, { children: part.text }, `${part.text}-${index}`)) });
1201
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react6.Fragment, { children: part.text }, `${part.text}-${index}`)) });
1006
1202
  }
1007
- function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inputValue: controlledInputValue, onInputChange, selectedKey, onSelectionChange, label, description, errorMessage, emptyState = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "px-3 py-7 text-center text-sm text-muted-foreground", children: "No hay resultados." }), suggestion = true, placeholder, className, onKeyDown: _onKeyDown, ...props }) {
1008
- const [internalInputValue, setInternalInputValue] = (0, import_react5.useState)("");
1203
+ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inputValue: controlledInputValue, onInputChange, selectedKey, onSelectionChange, label, description, errorMessage, emptyState = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "px-3 py-7 text-center text-sm text-muted-foreground", children: "No hay resultados." }), suggestion = true, placeholder, className, onKeyDown: _onKeyDown, ...props }) {
1204
+ const [internalInputValue, setInternalInputValue] = (0, import_react6.useState)("");
1009
1205
  const inputValue = controlledInputValue ?? internalInputValue;
1010
1206
  const setInputValue = (value) => {
1011
1207
  setInternalInputValue(value);
1012
1208
  onInputChange?.(value);
1013
1209
  };
1014
1210
  const normalizedQuery = inputValue.trim().toLocaleLowerCase();
1015
- const filteredItems = (0, import_react5.useMemo)(() => normalizedQuery ? items.filter((item) => getItemLabel(item).toLocaleLowerCase().includes(normalizedQuery)) : [...items], [getItemLabel, items, normalizedQuery]);
1016
- const suggestedItem = (0, import_react5.useMemo)(() => !suggestion || !normalizedQuery ? void 0 : items.find((item) => getItemLabel(item).toLocaleLowerCase().startsWith(normalizedQuery) && getItemLabel(item).length > inputValue.length), [getItemLabel, inputValue.length, items, normalizedQuery, suggestion]);
1211
+ const filteredItems = (0, import_react6.useMemo)(() => normalizedQuery ? items.filter((item) => getItemLabel(item).toLocaleLowerCase().includes(normalizedQuery)) : [...items], [getItemLabel, items, normalizedQuery]);
1212
+ const suggestedItem = (0, import_react6.useMemo)(() => !suggestion || !normalizedQuery ? void 0 : items.find((item) => getItemLabel(item).toLocaleLowerCase().startsWith(normalizedQuery) && getItemLabel(item).length > inputValue.length), [getItemLabel, inputValue.length, items, normalizedQuery, suggestion]);
1017
1213
  const suggestionLabel = suggestedItem ? getItemLabel(suggestedItem) : void 0;
1018
1214
  const acceptSuggestion = () => {
1019
1215
  if (!suggestedItem || !suggestionLabel) return false;
@@ -1024,48 +1220,48 @@ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inp
1024
1220
  const handleKeyDown = (event) => {
1025
1221
  if ((event.key === "Tab" || event.key === "Enter") && acceptSuggestion()) event.preventDefault();
1026
1222
  };
1027
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_aria_components7.ComboBox, { ...props, className: cn("group/combobox flex w-full flex-col gap-1.5", className), items: filteredItems, selectedKey, inputValue, onInputChange: setInputValue, onSelectionChange: (key) => {
1223
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_react_aria_components8.ComboBox, { ...props, className: cn("group/combobox flex w-full flex-col gap-1.5", className), items: filteredItems, selectedKey, inputValue, onInputChange: setInputValue, onSelectionChange: (key) => {
1028
1224
  const item = filteredItems.find((candidate) => String(getItemKey(candidate)) === String(key));
1029
1225
  if (item) setInputValue(getItemLabel(item));
1030
1226
  onSelectionChange?.(key, item);
1031
1227
  }, children: [
1032
- label && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.Label, { className: "text-sm font-medium text-foreground", children: label }),
1033
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "relative", children: [
1034
- suggestionLabel && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("span", { "aria-hidden": "true", className: "pointer-events-none absolute inset-y-0 left-2.5 z-0 flex items-center whitespace-pre text-sm text-muted-foreground/60", children: [
1035
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-transparent", children: inputValue }),
1228
+ label && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components8.Label, { className: "text-sm font-medium text-foreground", children: label }),
1229
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "relative", children: [
1230
+ suggestionLabel && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("span", { "aria-hidden": "true", className: "pointer-events-none absolute inset-y-0 left-2.5 z-0 flex items-center whitespace-pre text-sm text-muted-foreground/60", children: [
1231
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-transparent", children: inputValue }),
1036
1232
  suggestionLabel.slice(inputValue.length)
1037
1233
  ] }),
1038
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxInput, { "aria-autocomplete": suggestionLabel ? "both" : "list", placeholder, onKeyDown: handleKeyDown, className: "relative z-10 bg-transparent" })
1234
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ComboboxInput, { "aria-autocomplete": suggestionLabel ? "both" : "list", placeholder, onKeyDown: handleKeyDown, className: "relative z-10 bg-transparent" })
1039
1235
  ] }),
1040
- description && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.Text, { slot: "description", className: "text-xs text-muted-foreground", children: description }),
1041
- errorMessage && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.FieldError, { className: "text-xs text-destructive", children: errorMessage }),
1042
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxContent, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxList, { emptyState, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxItem, { id: getItemKey(item), textValue: getItemLabel(item), children: renderItem ? renderItem(item, inputValue) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(HighlightMatch, { text: getItemLabel(item), query: inputValue }) }) }) })
1236
+ description && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components8.Text, { slot: "description", className: "text-xs text-muted-foreground", children: description }),
1237
+ errorMessage && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components8.FieldError, { className: "text-xs text-destructive", children: errorMessage }),
1238
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ComboboxContent, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ComboboxList, { emptyState, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ComboboxItem, { id: getItemKey(item), textValue: getItemLabel(item), children: renderItem ? renderItem(item, inputValue) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(HighlightMatch, { text: getItemLabel(item), query: inputValue }) }) }) })
1043
1239
  ] });
1044
1240
  }
1045
1241
 
1046
1242
  // src/ui/command/command.tsx
1047
- var import_react_aria_components8 = require("react-aria-components");
1048
- var import_jsx_runtime13 = require("react/jsx-runtime");
1243
+ var import_react_aria_components9 = require("react-aria-components");
1244
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1049
1245
  function Command({ className, ...props }) {
1050
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.ComboBox, { "data-slot": "command", className: cn("w-full", className), ...props });
1246
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.ComboBox, { "data-slot": "command", className: cn("w-full", className), ...props });
1051
1247
  }
1052
1248
  function CommandInput({ className, ...props }) {
1053
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.Input, { "data-slot": "command-input", className: cn("h-9 w-full border-0 bg-transparent px-3 text-sm text-foreground outline-none placeholder:text-muted-foreground", className), ...props });
1249
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.Input, { "data-slot": "command-input", className: cn("h-9 w-full border-0 bg-transparent px-3 text-sm text-foreground outline-none placeholder:text-muted-foreground", className), ...props });
1054
1250
  }
1055
1251
  function CommandContent({ className, ...props }) {
1056
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.Popover, { "data-slot": "command-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 shadow-lg outline-none", className), ...props });
1252
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.Popover, { "data-slot": "command-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 shadow-lg outline-none", className), ...props });
1057
1253
  }
1058
1254
  function CommandList({ className, ...props }) {
1059
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.ListBox, { "data-slot": "command-list", className: cn("max-h-72 overflow-y-auto", className), ...props });
1255
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.ListBox, { "data-slot": "command-list", className: cn("max-h-72 overflow-y-auto", className), ...props });
1060
1256
  }
1061
1257
  function CommandItem({ className, ...props }) {
1062
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.ListBoxItem, { "data-slot": "command-item", className: cn("flex cursor-default items-center rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props });
1258
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.ListBoxItem, { "data-slot": "command-item", className: cn("flex cursor-default items-center rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props });
1063
1259
  }
1064
1260
 
1065
1261
  // src/ui/modal-dialog/modal-dialog.tsx
1066
1262
  var import_lucide_react3 = require("lucide-react");
1067
- var import_react_aria_components9 = require("react-aria-components");
1068
- var import_jsx_runtime14 = require("react/jsx-runtime");
1263
+ var import_react_aria_components10 = require("react-aria-components");
1264
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1069
1265
  var sizeClasses = {
1070
1266
  sm: "w-[min(calc(100dvw-2rem),24rem)]",
1071
1267
  md: "w-[min(calc(100dvw-2rem),28rem)]",
@@ -1085,35 +1281,35 @@ function ModalDialog({
1085
1281
  ...props
1086
1282
  }) {
1087
1283
  const layoutClass = children ? footer ? "grid-rows-[auto_minmax(0,1fr)_auto]" : "grid-rows-[auto_minmax(0,1fr)]" : "grid-rows-[auto_auto]";
1088
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1089
- import_react_aria_components9.ModalOverlay,
1284
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1285
+ import_react_aria_components10.ModalOverlay,
1090
1286
  {
1091
1287
  isOpen: open,
1092
1288
  onOpenChange,
1093
1289
  className: "fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out",
1094
1290
  ...props,
1095
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1096
- import_react_aria_components9.Modal,
1291
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1292
+ import_react_aria_components10.Modal,
1097
1293
  {
1098
1294
  className: cn(
1099
1295
  "max-h-[calc(100dvh-2rem)] outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out",
1100
1296
  sizeClasses[size],
1101
1297
  className
1102
1298
  ),
1103
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1104
- import_react_aria_components9.Dialog,
1299
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1300
+ import_react_aria_components10.Dialog,
1105
1301
  {
1106
1302
  className: cn(
1107
1303
  "grid max-h-[calc(100dvh-2rem)] overflow-hidden rounded-xl bg-background text-foreground shadow-xl outline-none",
1108
1304
  layoutClass
1109
1305
  ),
1110
- children: ({ close }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1111
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("header", { "data-slot": "modal-dialog-header", className: "flex items-start gap-3 border-b border-border px-5 py-4", children: [
1112
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "min-w-0 flex-1", children: [
1113
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components9.Heading, { slot: "title", className: "font-heading text-base leading-none font-medium", children: title }),
1114
- description ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components9.Text, { slot: "description", className: "mt-2 text-sm text-muted-foreground", children: description }) : null
1306
+ children: ({ close }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
1307
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("header", { "data-slot": "modal-dialog-header", className: "flex items-start gap-3 border-b border-border px-5 py-4", children: [
1308
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "min-w-0 flex-1", children: [
1309
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Heading, { slot: "title", className: "font-heading text-base leading-none font-medium", children: title }),
1310
+ description ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Text, { slot: "description", className: "mt-2 text-sm text-muted-foreground", children: description }) : null
1115
1311
  ] }),
1116
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1312
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1117
1313
  Button,
1118
1314
  {
1119
1315
  "aria-label": "Cerrar di\xE1logo",
@@ -1121,12 +1317,12 @@ function ModalDialog({
1121
1317
  size: "icon",
1122
1318
  className: "-mr-2 -mt-1",
1123
1319
  onPress: close,
1124
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react3.X, { "aria-hidden": "true", className: "size-4" })
1320
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react3.X, { "aria-hidden": "true", className: "size-4" })
1125
1321
  }
1126
1322
  ) : null
1127
1323
  ] }),
1128
- children ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { "data-slot": "modal-dialog-body", className: "min-h-0 overflow-y-auto px-5 py-4", children }) : null,
1129
- footer ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1324
+ children ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { "data-slot": "modal-dialog-body", className: "min-h-0 overflow-y-auto px-5 py-4", children }) : null,
1325
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1130
1326
  "footer",
1131
1327
  {
1132
1328
  "data-slot": "modal-dialog-footer",
@@ -1147,7 +1343,7 @@ function ModalDialog({
1147
1343
  }
1148
1344
 
1149
1345
  // src/ui/confirm-dialog/confirm-dialog.tsx
1150
- var import_jsx_runtime15 = require("react/jsx-runtime");
1346
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1151
1347
  function ConfirmDialog({
1152
1348
  open,
1153
1349
  onOpenChange,
@@ -1159,7 +1355,7 @@ function ConfirmDialog({
1159
1355
  pending = false,
1160
1356
  onConfirm
1161
1357
  }) {
1162
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1358
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1163
1359
  ModalDialog,
1164
1360
  {
1165
1361
  open,
@@ -1167,36 +1363,68 @@ function ConfirmDialog({
1167
1363
  title,
1168
1364
  description,
1169
1365
  showCloseButton: false,
1170
- footer: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
1171
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
1172
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Button, { variant: destructive ? "destructive" : "default", isDisabled: pending, onPress: onConfirm, children: confirmLabel })
1366
+ footer: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
1367
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
1368
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { variant: destructive ? "destructive" : "default", isDisabled: pending, onPress: onConfirm, children: confirmLabel })
1173
1369
  ] })
1174
1370
  }
1175
1371
  );
1176
1372
  }
1177
1373
 
1178
- // src/ui/dialog/dialog.tsx
1374
+ // src/ui/danger-zone/danger-zone.tsx
1179
1375
  var import_lucide_react4 = require("lucide-react");
1180
- var React2 = __toESM(require("react"), 1);
1181
- var import_react_aria_components10 = require("react-aria-components");
1182
- var import_jsx_runtime16 = require("react/jsx-runtime");
1183
- var DialogContext = React2.createContext(null);
1376
+ var import_react_aria_components11 = require("react-aria-components");
1377
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1378
+ function DangerZone({
1379
+ title = "Zona de peligro",
1380
+ description = "Acciones irreversibles. \xC1brela solo si est\xE1s seguro.",
1381
+ defaultOpen = false,
1382
+ className,
1383
+ children
1384
+ }) {
1385
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components11.Disclosure, { defaultExpanded: defaultOpen, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Card, { className: cn("border-destructive/30", className), children: [
1386
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components11.Heading, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1387
+ import_react_aria_components11.Button,
1388
+ {
1389
+ slot: "trigger",
1390
+ "data-slot": "danger-zone-trigger",
1391
+ className: "group/danger flex w-full items-center gap-3 px-4 text-left outline-none focus-visible:ring-3 focus-visible:ring-ring/50",
1392
+ children: [
1393
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.ShieldAlert, { className: "size-4 shrink-0 text-destructive" }),
1394
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", { className: "flex flex-1 flex-col gap-0.5", children: [
1395
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "font-heading text-base leading-snug font-medium text-destructive", children: title }),
1396
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-xs text-muted-foreground", children: description })
1397
+ ] }),
1398
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.ChevronDown, { className: "size-4 shrink-0 text-muted-foreground transition-transform group-aria-expanded/danger:rotate-180" })
1399
+ ]
1400
+ }
1401
+ ) }),
1402
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components11.DisclosurePanel, { "data-slot": "danger-zone-content", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardContent, { children }) })
1403
+ ] }) });
1404
+ }
1405
+
1406
+ // src/ui/dialog/dialog.tsx
1407
+ var import_lucide_react5 = require("lucide-react");
1408
+ var React4 = __toESM(require("react"), 1);
1409
+ var import_react_aria_components12 = require("react-aria-components");
1410
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1411
+ var DialogContext = React4.createContext(null);
1184
1412
  function useDialogContext() {
1185
- const context = React2.useContext(DialogContext);
1413
+ const context = React4.useContext(DialogContext);
1186
1414
  if (!context) throw new Error("Dialog components must be rendered within Dialog.");
1187
1415
  return context;
1188
1416
  }
1189
1417
  function Dialog({ children, defaultOpen = false, onOpenChange, open: controlledOpen }) {
1190
- const [uncontrolledOpen, setUncontrolledOpen] = React2.useState(defaultOpen);
1418
+ const [uncontrolledOpen, setUncontrolledOpen] = React4.useState(defaultOpen);
1191
1419
  const open = controlledOpen ?? uncontrolledOpen;
1192
- const setOpen = React2.useCallback(
1420
+ const setOpen = React4.useCallback(
1193
1421
  (nextOpen) => {
1194
1422
  if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
1195
1423
  onOpenChange?.(nextOpen);
1196
1424
  },
1197
1425
  [controlledOpen, onOpenChange]
1198
1426
  );
1199
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DialogContext.Provider, { value: { open, setOpen }, children });
1427
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogContext.Provider, { value: { open, setOpen }, children });
1200
1428
  }
1201
1429
  function DialogTrigger({ asChild = false, children, onClick, ...props }) {
1202
1430
  const { setOpen } = useDialogContext();
@@ -1204,9 +1432,9 @@ function DialogTrigger({ asChild = false, children, onClick, ...props }) {
1204
1432
  onClick?.(event);
1205
1433
  if (!event.defaultPrevented) setOpen(true);
1206
1434
  };
1207
- if (asChild && React2.isValidElement(children)) {
1435
+ if (asChild && React4.isValidElement(children)) {
1208
1436
  const child = children;
1209
- return React2.cloneElement(child, {
1437
+ return React4.cloneElement(child, {
1210
1438
  ...props,
1211
1439
  "data-slot": "dialog-trigger",
1212
1440
  onClick: (event) => {
@@ -1215,16 +1443,16 @@ function DialogTrigger({ asChild = false, children, onClick, ...props }) {
1215
1443
  }
1216
1444
  });
1217
1445
  }
1218
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
1446
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
1219
1447
  }
1220
1448
  function DialogPortal({ children }) {
1221
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_jsx_runtime16.Fragment, { children });
1449
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_jsx_runtime19.Fragment, { children });
1222
1450
  }
1223
1451
  function DialogOverlay({ children, className, ...props }) {
1224
1452
  const { open, setOpen } = useDialogContext();
1225
1453
  if (!open) return null;
1226
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1227
- import_react_aria_components10.ModalOverlay,
1454
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1455
+ import_react_aria_components12.ModalOverlay,
1228
1456
  {
1229
1457
  "data-slot": "dialog-overlay",
1230
1458
  isDismissable: true,
@@ -1247,21 +1475,21 @@ function DialogContent({
1247
1475
  ...props
1248
1476
  }) {
1249
1477
  const { setOpen } = useDialogContext();
1250
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DialogPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1478
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1251
1479
  DialogOverlay,
1252
1480
  {
1253
1481
  onClick: (event) => {
1254
1482
  if (event.target === event.currentTarget) onOverlayClick?.(event);
1255
1483
  },
1256
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1257
- import_react_aria_components10.Modal,
1484
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1485
+ import_react_aria_components12.Modal,
1258
1486
  {
1259
1487
  className: cn(
1260
1488
  "w-full max-w-[calc(100%-2rem)] max-h-[calc(100dvh-2rem)] outline-none sm:max-w-sm",
1261
1489
  className
1262
1490
  ),
1263
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
1264
- import_react_aria_components10.Dialog,
1491
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1492
+ import_react_aria_components12.Dialog,
1265
1493
  {
1266
1494
  "data-slot": "dialog-content",
1267
1495
  className: cn(
@@ -1271,7 +1499,7 @@ function DialogContent({
1271
1499
  ...props,
1272
1500
  children: [
1273
1501
  children,
1274
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1502
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1275
1503
  Button,
1276
1504
  {
1277
1505
  "aria-label": "Cerrar di\xE1logo",
@@ -1280,7 +1508,7 @@ function DialogContent({
1280
1508
  className: "absolute top-2 right-2",
1281
1509
  size: "icon-sm",
1282
1510
  onPress: () => setOpen(false),
1283
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react4.XIcon, {})
1511
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.XIcon, {})
1284
1512
  }
1285
1513
  ) : null
1286
1514
  ]
@@ -1293,9 +1521,9 @@ function DialogContent({
1293
1521
  }
1294
1522
  function DialogClose({ asChild = false, children, onClick, ...props }) {
1295
1523
  const { setOpen } = useDialogContext();
1296
- if (asChild && React2.isValidElement(children)) {
1524
+ if (asChild && React4.isValidElement(children)) {
1297
1525
  const child = children;
1298
- return React2.cloneElement(child, {
1526
+ return React4.cloneElement(child, {
1299
1527
  ...props,
1300
1528
  "data-slot": "dialog-close",
1301
1529
  onClick: (event) => {
@@ -1304,54 +1532,86 @@ function DialogClose({ asChild = false, children, onClick, ...props }) {
1304
1532
  }
1305
1533
  });
1306
1534
  }
1307
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
1535
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
1308
1536
  }
1309
1537
  function DialogHeader({ className, ...props }) {
1310
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
1538
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
1311
1539
  }
1312
1540
  function DialogFooter({ className, showCloseButton = false, children, ...props }) {
1313
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { "data-slot": "dialog-footer", className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:flex-wrap sm:justify-end", className), ...props, children: [
1541
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { "data-slot": "dialog-footer", className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:flex-wrap sm:justify-end", className), ...props, children: [
1314
1542
  children,
1315
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DialogClose, { variant: "outline", children: "Cerrar" }) : null
1543
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogClose, { variant: "outline", children: "Cerrar" }) : null
1316
1544
  ] });
1317
1545
  }
1318
1546
  function DialogTitle({ className, ...props }) {
1319
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Heading, { slot: "title", "data-slot": "dialog-title", className: cn("font-heading text-base leading-none font-medium", className), ...props });
1547
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components12.Heading, { slot: "title", "data-slot": "dialog-title", className: cn("font-heading text-base leading-none font-medium", className), ...props });
1320
1548
  }
1321
1549
  function DialogDescription({ className, ...props }) {
1322
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Text, { slot: "description", "data-slot": "dialog-description", className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props });
1550
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components12.Text, { slot: "description", "data-slot": "dialog-description", className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props });
1551
+ }
1552
+
1553
+ // src/ui/doc-preview/doc-preview.tsx
1554
+ var import_lucide_react6 = require("lucide-react");
1555
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1556
+ function DocPreview({ url, mimeType, name }) {
1557
+ if (!url) return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Fallback, { mimeType, reason: "no-url" });
1558
+ if (mimeType === "application/pdf" || mimeType === "text/plain" || mimeType === "text/csv") {
1559
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1560
+ "iframe",
1561
+ {
1562
+ src: url,
1563
+ title: name,
1564
+ className: "w-full rounded-sm border-0",
1565
+ style: { height: "75vh", minHeight: 400 }
1566
+ }
1567
+ );
1568
+ }
1569
+ if (mimeType?.startsWith("image/")) {
1570
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex justify-center rounded-sm bg-muted/30 p-6", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("img", { src: url, alt: name, className: "max-h-[75vh] max-w-full rounded object-contain" }) });
1571
+ }
1572
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Fallback, { mimeType, reason: "unsupported" });
1573
+ }
1574
+ function Fallback({ mimeType, reason }) {
1575
+ const Icon = mimeType?.startsWith("image/") ? import_lucide_react6.Image : import_lucide_react6.FileText;
1576
+ const message = reason === "no-url" ? "No se pudo generar la URL de preview." : "Preview no disponible para este tipo de archivo.";
1577
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex flex-col items-center justify-center gap-2 py-14 text-muted-foreground", children: [
1578
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon, { className: "size-9 opacity-30" }),
1579
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-sm", children: message }),
1580
+ mimeType ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
1581
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
1582
+ ] });
1323
1583
  }
1324
1584
 
1325
1585
  // src/ui/drawer/drawer.tsx
1326
- var import_react_aria_components11 = require("react-aria-components");
1327
- var import_jsx_runtime17 = require("react/jsx-runtime");
1586
+ var import_react_aria_components13 = require("react-aria-components");
1587
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1328
1588
  var sideStyles = { left: "inset-y-0 left-0 h-full w-[min(22rem,calc(100%-2rem))] data-entering:animate-ui-surface-in", right: "inset-y-0 right-0 h-full w-[min(22rem,calc(100%-2rem))] data-entering:animate-ui-surface-in", bottom: "inset-x-0 bottom-0 max-h-[85vh] w-full data-entering:animate-ui-surface-in" };
1329
1589
  function Drawer({ children, side = "right", className, ...props }) {
1330
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.ModalOverlay, { isDismissable: true, className: "fixed inset-0 z-50 bg-black/20 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.Modal, { className: cn("absolute grid gap-4 overflow-y-auto rounded-xl border border-border bg-background p-5 text-foreground shadow-xl outline-none", sideStyles[side], className), children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.Dialog, { "data-slot": "drawer", className: "outline-none", children }) }) });
1590
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components13.ModalOverlay, { isDismissable: true, className: "fixed inset-0 z-50 bg-black/20 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components13.Modal, { className: cn("absolute grid gap-4 overflow-y-auto rounded-xl border border-border bg-background p-5 text-foreground shadow-xl outline-none", sideStyles[side], className), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components13.Dialog, { "data-slot": "drawer", className: "outline-none", children }) }) });
1331
1591
  }
1332
1592
  function DrawerHeader({ className, ...props }) {
1333
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
1593
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
1334
1594
  }
1335
1595
  function DrawerFooter({ className, ...props }) {
1336
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { "data-slot": "drawer-footer", className: cn("mt-auto flex flex-col-reverse gap-2 pt-4 sm:flex-row sm:justify-end", className), ...props });
1596
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "data-slot": "drawer-footer", className: cn("mt-auto flex flex-col-reverse gap-2 pt-4 sm:flex-row sm:justify-end", className), ...props });
1337
1597
  }
1338
1598
  function DrawerTitle({ className, ...props }) {
1339
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h2", { "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
1599
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h2", { "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
1340
1600
  }
1341
1601
  function DrawerDescription({ className, ...props }) {
1342
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
1602
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
1343
1603
  }
1344
1604
 
1345
1605
  // src/ui/dropdown-menu/dropdown-menu.tsx
1346
- var React3 = require("react");
1606
+ var React5 = require("react");
1347
1607
  var import_class_variance_authority6 = require("class-variance-authority");
1348
- var import_lucide_react5 = require("lucide-react");
1349
- var import_react_aria_components12 = require("react-aria-components");
1350
- var import_jsx_runtime18 = require("react/jsx-runtime");
1608
+ var import_lucide_react7 = require("lucide-react");
1609
+ var import_react_aria_components14 = require("react-aria-components");
1610
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1351
1611
  function DropdownMenuTrigger({
1352
1612
  ...props
1353
1613
  }) {
1354
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components12.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
1614
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components14.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
1355
1615
  }
1356
1616
  function DropdownMenu({
1357
1617
  "data-slot": dataSlot = "dropdown-menu-content",
@@ -1362,16 +1622,16 @@ function DropdownMenu({
1362
1622
  children,
1363
1623
  ...props
1364
1624
  }) {
1365
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1366
- import_react_aria_components12.Popover,
1625
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1626
+ import_react_aria_components14.Popover,
1367
1627
  {
1368
1628
  "data-slot": dataSlot,
1369
1629
  placement,
1370
1630
  offset,
1371
1631
  crossOffset,
1372
1632
  className: cn("z-50 w-(--trigger-width) min-w-32 origin-(--trigger-anchor-point) overflow-x-hidden overflow-y-auto rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className),
1373
- children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1374
- import_react_aria_components12.Menu,
1633
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1634
+ import_react_aria_components14.Menu,
1375
1635
  {
1376
1636
  className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
1377
1637
  ...props,
@@ -1384,15 +1644,15 @@ function DropdownMenu({
1384
1644
  function DropdownMenuGroup({
1385
1645
  ...props
1386
1646
  }) {
1387
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components12.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
1647
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components14.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
1388
1648
  }
1389
1649
  function DropdownMenuLabel({
1390
1650
  className,
1391
1651
  inset,
1392
1652
  ...props
1393
1653
  }) {
1394
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1395
- import_react_aria_components12.Header,
1654
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1655
+ import_react_aria_components14.Header,
1396
1656
  {
1397
1657
  "data-slot": "dropdown-menu-label",
1398
1658
  "data-inset": inset,
@@ -1423,27 +1683,27 @@ function DropdownMenuItem({
1423
1683
  children,
1424
1684
  ...props
1425
1685
  }) {
1426
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1427
- import_react_aria_components12.MenuItem,
1686
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1687
+ import_react_aria_components14.MenuItem,
1428
1688
  {
1429
1689
  "data-slot": "dropdown-menu-item",
1430
1690
  "data-inset": inset,
1431
1691
  "data-variant": variant,
1432
1692
  textValue: typeof children === "string" ? children : props.textValue,
1433
- className: (0, import_react_aria_components12.composeRenderProps)(
1693
+ className: (0, import_react_aria_components14.composeRenderProps)(
1434
1694
  className,
1435
1695
  (className2, { selectionMode }) => cn(dropdownMenuItemVariants({ selectionMode }), className2)
1436
1696
  ),
1437
1697
  ...props,
1438
- children: (0, import_react_aria_components12.composeRenderProps)(
1698
+ children: (0, import_react_aria_components14.composeRenderProps)(
1439
1699
  children,
1440
- (children2, { isSelected, selectionMode }) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
1441
- selectionMode !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1700
+ (children2, { isSelected, selectionMode }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
1701
+ selectionMode !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1442
1702
  "span",
1443
1703
  {
1444
1704
  className: "pointer-events-none absolute right-2 flex items-center justify-center",
1445
1705
  "data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
1446
- children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.CheckIcon, {}) : null
1706
+ children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react7.CheckIcon, {}) : null
1447
1707
  }
1448
1708
  ) : null,
1449
1709
  children2
@@ -1455,7 +1715,7 @@ function DropdownMenuItem({
1455
1715
  function DropdownMenuSub({
1456
1716
  ...props
1457
1717
  }) {
1458
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components12.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
1718
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components14.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
1459
1719
  }
1460
1720
  function DropdownMenuSubTrigger({
1461
1721
  className,
@@ -1463,8 +1723,8 @@ function DropdownMenuSubTrigger({
1463
1723
  children,
1464
1724
  ...props
1465
1725
  }) {
1466
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1467
- import_react_aria_components12.MenuItem,
1726
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1727
+ import_react_aria_components14.MenuItem,
1468
1728
  {
1469
1729
  "data-slot": "dropdown-menu-sub-trigger",
1470
1730
  "data-inset": inset,
@@ -1474,9 +1734,9 @@ function DropdownMenuSubTrigger({
1474
1734
  className
1475
1735
  ),
1476
1736
  ...props,
1477
- children: (0, import_react_aria_components12.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
1737
+ children: (0, import_react_aria_components14.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
1478
1738
  children2,
1479
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react5.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1739
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react7.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1480
1740
  ] }))
1481
1741
  }
1482
1742
  );
@@ -1488,7 +1748,7 @@ function DropdownMenuSubContent({
1488
1748
  className,
1489
1749
  ...props
1490
1750
  }) {
1491
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1751
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1492
1752
  DropdownMenu,
1493
1753
  {
1494
1754
  "data-slot": "dropdown-menu-sub-content",
@@ -1504,8 +1764,8 @@ function DropdownMenuSeparator({
1504
1764
  className,
1505
1765
  ...props
1506
1766
  }) {
1507
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1508
- import_react_aria_components12.Separator,
1767
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1768
+ import_react_aria_components14.Separator,
1509
1769
  {
1510
1770
  "data-slot": "dropdown-menu-separator",
1511
1771
  className: cn("-mx-1 my-1 h-px bg-border", className),
@@ -1517,7 +1777,7 @@ function DropdownMenuShortcut({
1517
1777
  className,
1518
1778
  ...props
1519
1779
  }) {
1520
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1780
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1521
1781
  "span",
1522
1782
  {
1523
1783
  "data-slot": "dropdown-menu-shortcut",
@@ -1532,9 +1792,9 @@ function DropdownMenuShortcut({
1532
1792
 
1533
1793
  // src/ui/empty-state/empty-state.tsx
1534
1794
  var import_class_variance_authority7 = require("class-variance-authority");
1535
- var import_jsx_runtime19 = require("react/jsx-runtime");
1795
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1536
1796
  function EmptyState({ className, ...props }) {
1537
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1797
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1538
1798
  "div",
1539
1799
  {
1540
1800
  "data-slot": "empty-state",
@@ -1547,7 +1807,7 @@ function EmptyState({ className, ...props }) {
1547
1807
  );
1548
1808
  }
1549
1809
  function EmptyStateHeader({ className, ...props }) {
1550
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1810
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1551
1811
  "div",
1552
1812
  {
1553
1813
  "data-slot": "empty-state-header",
@@ -1573,7 +1833,7 @@ function EmptyStateMedia({
1573
1833
  variant = "default",
1574
1834
  ...props
1575
1835
  }) {
1576
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1836
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1577
1837
  "div",
1578
1838
  {
1579
1839
  "data-slot": "empty-state-media",
@@ -1584,7 +1844,7 @@ function EmptyStateMedia({
1584
1844
  );
1585
1845
  }
1586
1846
  function EmptyStateTitle({ className, ...props }) {
1587
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1847
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1588
1848
  "h3",
1589
1849
  {
1590
1850
  "data-slot": "empty-state-title",
@@ -1594,7 +1854,7 @@ function EmptyStateTitle({ className, ...props }) {
1594
1854
  );
1595
1855
  }
1596
1856
  function EmptyStateDescription({ className, ...props }) {
1597
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1857
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1598
1858
  "p",
1599
1859
  {
1600
1860
  "data-slot": "empty-state-description",
@@ -1607,7 +1867,7 @@ function EmptyStateDescription({ className, ...props }) {
1607
1867
  );
1608
1868
  }
1609
1869
  function EmptyStateContent({ className, ...props }) {
1610
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1870
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1611
1871
  "div",
1612
1872
  {
1613
1873
  "data-slot": "empty-state-content",
@@ -1624,24 +1884,24 @@ function EmptyStateContent({ className, ...props }) {
1624
1884
  var import_class_variance_authority8 = require("class-variance-authority");
1625
1885
 
1626
1886
  // src/ui/label/label.tsx
1627
- var import_react6 = require("react");
1628
- var import_react_aria_components13 = require("react-aria-components");
1629
- var import_jsx_runtime20 = require("react/jsx-runtime");
1630
- var Label2 = (0, import_react6.forwardRef)(function Label3({ className, ...props }, ref) {
1631
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components13.Label, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
1887
+ var import_react7 = require("react");
1888
+ var import_react_aria_components15 = require("react-aria-components");
1889
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1890
+ var Label2 = (0, import_react7.forwardRef)(function Label3({ className, ...props }, ref) {
1891
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components15.Label, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
1632
1892
  });
1633
1893
 
1634
1894
  // src/ui/field/field.tsx
1635
- var import_jsx_runtime21 = require("react/jsx-runtime");
1895
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1636
1896
  function FieldSet({ className, ...props }) {
1637
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1897
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1638
1898
  }
1639
1899
  function FieldLegend({
1640
1900
  className,
1641
1901
  variant = "legend",
1642
1902
  ...props
1643
1903
  }) {
1644
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1904
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1645
1905
  "legend",
1646
1906
  {
1647
1907
  "data-slot": "field-legend",
@@ -1655,7 +1915,7 @@ function FieldLegend({
1655
1915
  );
1656
1916
  }
1657
1917
  function FieldGroup({ className, ...props }) {
1658
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1918
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1659
1919
  "div",
1660
1920
  {
1661
1921
  "data-slot": "field-group",
@@ -1683,7 +1943,7 @@ var fieldVariants = (0, import_class_variance_authority8.cva)(
1683
1943
  function Field({ className, orientation = "vertical", ...props }) {
1684
1944
  return (
1685
1945
  // biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
1686
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1946
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1687
1947
  "div",
1688
1948
  {
1689
1949
  role: "group",
@@ -1696,7 +1956,7 @@ function Field({ className, orientation = "vertical", ...props }) {
1696
1956
  );
1697
1957
  }
1698
1958
  function FieldContent({ className, ...props }) {
1699
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1959
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1700
1960
  "div",
1701
1961
  {
1702
1962
  "data-slot": "field-content",
@@ -1706,7 +1966,7 @@ function FieldContent({ className, ...props }) {
1706
1966
  );
1707
1967
  }
1708
1968
  function FieldLabel({ className, ...props }) {
1709
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1969
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1710
1970
  Label2,
1711
1971
  {
1712
1972
  "data-slot": "field-label",
@@ -1719,7 +1979,7 @@ function FieldLabel({ className, ...props }) {
1719
1979
  );
1720
1980
  }
1721
1981
  function FieldTitle({ className, ...props }) {
1722
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1982
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1723
1983
  "div",
1724
1984
  {
1725
1985
  "data-slot": "field-title",
@@ -1729,7 +1989,7 @@ function FieldTitle({ className, ...props }) {
1729
1989
  );
1730
1990
  }
1731
1991
  function FieldDescription({ className, ...props }) {
1732
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1992
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1733
1993
  "p",
1734
1994
  {
1735
1995
  "data-slot": "field-description",
@@ -1742,7 +2002,7 @@ function FieldDescription({ className, ...props }) {
1742
2002
  );
1743
2003
  }
1744
2004
  function FieldSeparator({ className, children, ...props }) {
1745
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
2005
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1746
2006
  "div",
1747
2007
  {
1748
2008
  "data-slot": "field-separator",
@@ -1750,8 +2010,8 @@ function FieldSeparator({ className, children, ...props }) {
1750
2010
  className: cn("relative -my-2 h-5 text-sm", className),
1751
2011
  ...props,
1752
2012
  children: [
1753
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
1754
- children ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2013
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
2014
+ children ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1755
2015
  "span",
1756
2016
  {
1757
2017
  "data-slot": "field-separator-content",
@@ -1765,9 +2025,9 @@ function FieldSeparator({ className, children, ...props }) {
1765
2025
  }
1766
2026
  function FieldError2({ className, children, errors, ...props }) {
1767
2027
  const messages = [...new Set(errors?.flatMap((error) => error?.message ?? []) ?? [])];
1768
- const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { children: message }, message)) }) : null);
2028
+ const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { children: message }, message)) }) : null);
1769
2029
  if (!content) return null;
1770
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2030
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1771
2031
  "div",
1772
2032
  {
1773
2033
  role: "alert",
@@ -1780,89 +2040,89 @@ function FieldError2({ className, children, errors, ...props }) {
1780
2040
  }
1781
2041
 
1782
2042
  // src/ui/form-feedback/form-feedback.tsx
1783
- var import_react7 = require("react");
1784
- var import_lucide_react6 = require("lucide-react");
1785
- var import_jsx_runtime22 = require("react/jsx-runtime");
2043
+ var import_react8 = require("react");
2044
+ var import_lucide_react8 = require("lucide-react");
2045
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1786
2046
  function useFormFeedback(options) {
1787
2047
  const resetMs = options?.successResetMs ?? 2500;
1788
- const [state, setState] = (0, import_react7.useState)({ status: "idle" });
1789
- const timer = (0, import_react7.useRef)(null);
1790
- const clearTimer = (0, import_react7.useCallback)(() => {
2048
+ const [state, setState] = (0, import_react8.useState)({ status: "idle" });
2049
+ const timer = (0, import_react8.useRef)(null);
2050
+ const clearTimer = (0, import_react8.useCallback)(() => {
1791
2051
  if (timer.current) clearTimeout(timer.current);
1792
2052
  timer.current = null;
1793
2053
  }, []);
1794
- (0, import_react7.useEffect)(() => () => clearTimer(), [clearTimer]);
1795
- const setPending = (0, import_react7.useCallback)(() => {
2054
+ (0, import_react8.useEffect)(() => () => clearTimer(), [clearTimer]);
2055
+ const setPending = (0, import_react8.useCallback)(() => {
1796
2056
  clearTimer();
1797
2057
  setState({ status: "pending" });
1798
2058
  }, [clearTimer]);
1799
- const setSuccess = (0, import_react7.useCallback)((message) => {
2059
+ const setSuccess = (0, import_react8.useCallback)((message) => {
1800
2060
  clearTimer();
1801
2061
  setState({ status: "success", message });
1802
2062
  if (resetMs > 0) timer.current = setTimeout(() => setState({ status: "idle" }), resetMs);
1803
2063
  }, [clearTimer, resetMs]);
1804
- const setError = (0, import_react7.useCallback)((message) => {
2064
+ const setError = (0, import_react8.useCallback)((message) => {
1805
2065
  clearTimer();
1806
2066
  setState({ status: "error", message });
1807
2067
  }, [clearTimer]);
1808
- const reset = (0, import_react7.useCallback)(() => {
2068
+ const reset = (0, import_react8.useCallback)(() => {
1809
2069
  clearTimer();
1810
2070
  setState({ status: "idle" });
1811
2071
  }, [clearTimer]);
1812
2072
  return { state, pending: state.status === "pending", setPending, setSuccess, setError, reset };
1813
2073
  }
1814
2074
  function FormFeedback({ state, className, pendingLabel = "Guardando\u2026", successLabel = "Guardado" }) {
1815
- if (state.status === "idle") return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
2075
+ if (state.status === "idle") return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
1816
2076
  const error = state.status === "error";
1817
2077
  const success = state.status === "success";
1818
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { role: error ? "alert" : "status", "aria-live": "polite", className: cn("inline-flex h-5 items-center gap-1.5 text-xs", error && "text-destructive", success && "text-success", state.status === "pending" && "text-muted-foreground", className), children: [
1819
- state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react6.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
1820
- success && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react6.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
1821
- error && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react6.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
1822
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
2078
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { role: error ? "alert" : "status", "aria-live": "polite", className: cn("inline-flex h-5 items-center gap-1.5 text-xs", error && "text-destructive", success && "text-success", state.status === "pending" && "text-muted-foreground", className), children: [
2079
+ state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react8.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
2080
+ success && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react8.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
2081
+ error && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react8.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
2082
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
1823
2083
  ] });
1824
2084
  }
1825
2085
 
1826
2086
  // src/ui/form-row/form-row.tsx
1827
- var import_jsx_runtime23 = require("react/jsx-runtime");
2087
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1828
2088
  function FormRow({ label, htmlFor, required, hint, error, className, children }) {
1829
2089
  const hintId = hint ? `${htmlFor}-hint` : void 0;
1830
2090
  const errorId = error ? `${htmlFor}-error` : void 0;
1831
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
1832
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("label", { htmlFor, className: "text-sm font-medium text-foreground", children: [
2091
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
2092
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("label", { htmlFor, className: "text-sm font-medium text-foreground", children: [
1833
2093
  label,
1834
- required && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
1835
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" }),
1836
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "sr-only", children: " (obligatorio)" })
2094
+ required && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
2095
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" }),
2096
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "sr-only", children: " (obligatorio)" })
1837
2097
  ] })
1838
2098
  ] }),
1839
2099
  children,
1840
- hint && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { id: hintId, className: "text-xs text-muted-foreground", children: hint }),
1841
- error && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive", children: error })
2100
+ hint && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { id: hintId, className: "text-xs text-muted-foreground", children: hint }),
2101
+ error && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive", children: error })
1842
2102
  ] });
1843
2103
  }
1844
2104
 
1845
2105
  // src/ui/icon-button/icon-button.tsx
1846
- var import_react_aria_components15 = require("react-aria-components");
2106
+ var import_react_aria_components17 = require("react-aria-components");
1847
2107
 
1848
2108
  // src/ui/tooltip/tooltip.tsx
1849
- var React4 = __toESM(require("react"), 1);
1850
- var import_react_aria_components14 = require("react-aria-components");
1851
- var import_jsx_runtime24 = require("react/jsx-runtime");
2109
+ var React6 = __toESM(require("react"), 1);
2110
+ var import_react_aria_components16 = require("react-aria-components");
2111
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1852
2112
  function TooltipTrigger({
1853
2113
  delay = 0,
1854
2114
  children,
1855
2115
  ...props
1856
2116
  }) {
1857
- const [trigger, tooltip] = React4.Children.toArray(children);
1858
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1859
- import_react_aria_components14.TooltipTrigger,
2117
+ const [trigger, tooltip] = React6.Children.toArray(children);
2118
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2119
+ import_react_aria_components16.TooltipTrigger,
1860
2120
  {
1861
2121
  "data-slot": "tooltip-trigger",
1862
2122
  delay,
1863
2123
  ...props,
1864
2124
  children: [
1865
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components14.Focusable, { children: trigger }),
2125
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_aria_components16.Focusable, { children: trigger }),
1866
2126
  tooltip
1867
2127
  ]
1868
2128
  }
@@ -1876,8 +2136,8 @@ function Tooltip({
1876
2136
  children,
1877
2137
  ...props
1878
2138
  }) {
1879
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1880
- import_react_aria_components14.Tooltip,
2139
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2140
+ import_react_aria_components16.Tooltip,
1881
2141
  {
1882
2142
  "data-slot": "tooltip-content",
1883
2143
  placement,
@@ -1890,8 +2150,8 @@ function Tooltip({
1890
2150
  ...props,
1891
2151
  children: [
1892
2152
  children,
1893
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1894
- import_react_aria_components14.OverlayArrow,
2153
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2154
+ import_react_aria_components16.OverlayArrow,
1895
2155
  {
1896
2156
  className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground",
1897
2157
  style: ({ placement: placement2, defaultStyle }) => ({
@@ -1908,7 +2168,7 @@ function Tooltip({
1908
2168
  }
1909
2169
 
1910
2170
  // src/ui/icon-button/icon-button.tsx
1911
- var import_jsx_runtime25 = require("react/jsx-runtime");
2171
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1912
2172
  function IconButton({
1913
2173
  label,
1914
2174
  children,
@@ -1921,9 +2181,9 @@ function IconButton({
1921
2181
  buttonVariants({ variant, size: "icon" }),
1922
2182
  className
1923
2183
  );
1924
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(TooltipTrigger, { children: [
1925
- href ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1926
- import_react_aria_components15.Link,
2184
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(TooltipTrigger, { children: [
2185
+ href ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2186
+ import_react_aria_components17.Link,
1927
2187
  {
1928
2188
  "data-slot": "icon-button",
1929
2189
  "aria-label": label,
@@ -1931,7 +2191,7 @@ function IconButton({
1931
2191
  className: linkClassName,
1932
2192
  children
1933
2193
  }
1934
- ) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2194
+ ) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1935
2195
  Button,
1936
2196
  {
1937
2197
  "data-slot": "icon-button",
@@ -1943,7 +2203,7 @@ function IconButton({
1943
2203
  children
1944
2204
  }
1945
2205
  ),
1946
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Tooltip, { children: label })
2206
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Tooltip, { children: label })
1947
2207
  ] });
1948
2208
  }
1949
2209
 
@@ -1951,30 +2211,30 @@ function IconButton({
1951
2211
  var import_class_variance_authority9 = require("class-variance-authority");
1952
2212
 
1953
2213
  // src/ui/input/input.tsx
1954
- var import_react8 = require("react");
1955
- var import_react_aria_components16 = require("react-aria-components");
1956
- var import_jsx_runtime26 = require("react/jsx-runtime");
1957
- var InputImpl = (0, import_react8.forwardRef)(function Input2({ className, type, ...props }, ref) {
1958
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components16.Input, { ref, type, "data-slot": "input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
2214
+ var import_react9 = require("react");
2215
+ var import_react_aria_components18 = require("react-aria-components");
2216
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2217
+ var InputImpl = (0, import_react9.forwardRef)(function Input2({ className, type, ...props }, ref) {
2218
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_aria_components18.Input, { ref, type, "data-slot": "input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
1959
2219
  });
1960
2220
  var Input3 = InputImpl;
1961
2221
 
1962
2222
  // src/ui/textarea/textarea.tsx
1963
- var import_react9 = require("react");
1964
- var import_react_aria_components17 = require("react-aria-components");
1965
- var import_jsx_runtime27 = require("react/jsx-runtime");
1966
- var TextareaImpl = (0, import_react9.forwardRef)(function Textarea({ className, ...props }, ref) {
1967
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components17.TextArea, { ref, "data-slot": "textarea", className: cn("min-h-20 w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
2223
+ var import_react10 = require("react");
2224
+ var import_react_aria_components19 = require("react-aria-components");
2225
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2226
+ var TextareaImpl = (0, import_react10.forwardRef)(function Textarea({ className, ...props }, ref) {
2227
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_aria_components19.TextArea, { ref, "data-slot": "textarea", className: cn("min-h-20 w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
1968
2228
  });
1969
2229
  var Textarea2 = TextareaImpl;
1970
2230
 
1971
2231
  // src/ui/input-group/input-group.tsx
1972
- var import_jsx_runtime28 = (
2232
+ var import_jsx_runtime32 = (
1973
2233
  // biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
1974
2234
  require("react/jsx-runtime")
1975
2235
  );
1976
2236
  function InputGroup({ className, ...props }) {
1977
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2237
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1978
2238
  "div",
1979
2239
  {
1980
2240
  role: "group",
@@ -2009,7 +2269,7 @@ function InputGroupAddon({
2009
2269
  }) {
2010
2270
  return (
2011
2271
  // biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
2012
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2272
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2013
2273
  "div",
2014
2274
  {
2015
2275
  role: "group",
@@ -2040,7 +2300,7 @@ function InputGroupButton({
2040
2300
  ...props
2041
2301
  }) {
2042
2302
  const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
2043
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2303
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2044
2304
  Button,
2045
2305
  {
2046
2306
  "data-slot": "input-group-button",
@@ -2053,7 +2313,7 @@ function InputGroupButton({
2053
2313
  );
2054
2314
  }
2055
2315
  function InputGroupText({ className, ...props }) {
2056
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2316
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2057
2317
  "span",
2058
2318
  {
2059
2319
  "data-slot": "input-group-text",
@@ -2066,7 +2326,7 @@ function InputGroupText({ className, ...props }) {
2066
2326
  );
2067
2327
  }
2068
2328
  function InputGroupInput({ className, ...props }) {
2069
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2329
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2070
2330
  Input3,
2071
2331
  {
2072
2332
  "data-slot": "input-group-control",
@@ -2079,7 +2339,7 @@ function InputGroupInput({ className, ...props }) {
2079
2339
  );
2080
2340
  }
2081
2341
  function InputGroupTextarea({ className, ...props }) {
2082
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2342
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2083
2343
  Textarea2,
2084
2344
  {
2085
2345
  "data-slot": "input-group-control",
@@ -2093,46 +2353,67 @@ function InputGroupTextarea({ className, ...props }) {
2093
2353
  }
2094
2354
 
2095
2355
  // src/ui/kbd/kbd.tsx
2096
- var import_jsx_runtime29 = require("react/jsx-runtime");
2356
+ var import_jsx_runtime33 = require("react/jsx-runtime");
2097
2357
  function Kbd({ className, ...props }) {
2098
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("kbd", { "data-slot": "kbd", className: cn("pointer-events-none inline-flex h-5 min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none", className), ...props });
2358
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("kbd", { "data-slot": "kbd", className: cn("pointer-events-none inline-flex h-5 min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none", className), ...props });
2099
2359
  }
2100
2360
  function KbdGroup({ className, ...props }) {
2101
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
2361
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
2102
2362
  }
2103
2363
 
2104
2364
  // src/ui/loading-overlay/loading-overlay.tsx
2105
- var import_lucide_react7 = require("lucide-react");
2106
- var import_jsx_runtime30 = require("react/jsx-runtime");
2365
+ var import_lucide_react9 = require("lucide-react");
2366
+ var import_jsx_runtime34 = require("react/jsx-runtime");
2107
2367
  function LoadingOverlay({ label = "Cargando", className, ...props }) {
2108
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { role: "status", "aria-live": "polite", className: cn("absolute inset-0 z-10 flex items-center justify-center bg-background/70 backdrop-blur-[2px]", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
2109
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react7.LoaderCircle, { className: "animate-spin", "aria-hidden": "true" }),
2110
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: label })
2368
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { role: "status", "aria-live": "polite", className: cn("absolute inset-0 z-10 flex items-center justify-center bg-background/70 backdrop-blur-[2px]", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
2369
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react9.LoaderCircle, { className: "animate-spin", "aria-hidden": "true" }),
2370
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: label })
2111
2371
  ] }) });
2112
2372
  }
2113
2373
 
2114
2374
  // src/ui/menu/menu.tsx
2115
- var import_react_aria_components18 = require("react-aria-components");
2116
- var import_jsx_runtime31 = require("react/jsx-runtime");
2117
- var MenuTrigger = import_react_aria_components18.MenuTrigger;
2375
+ var import_react_aria_components20 = require("react-aria-components");
2376
+ var import_jsx_runtime35 = require("react/jsx-runtime");
2377
+ var MenuTrigger = import_react_aria_components20.MenuTrigger;
2118
2378
  function MenuContent({ className, ...props }) {
2119
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_aria_components18.Popover, { "data-slot": "menu-content", className: cn("min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2379
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components20.Popover, { "data-slot": "menu-content", className: cn("min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2120
2380
  }
2121
2381
  function Menu({ className, ...props }) {
2122
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_aria_components18.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
2382
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components20.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
2123
2383
  }
2124
2384
  function MenuItem({ className, children, ...props }) {
2125
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_aria_components18.MenuItem, { "data-slot": "menu-item", className: cn("flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
2385
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components20.MenuItem, { "data-slot": "menu-item", className: cn("flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
2386
+ }
2387
+
2388
+ // src/ui/metric-card/metric-card.tsx
2389
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2390
+ function MetricCard({
2391
+ className,
2392
+ label,
2393
+ value,
2394
+ description,
2395
+ icon,
2396
+ tone = "default",
2397
+ ...props
2398
+ }) {
2399
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Card, { "data-slot": "metric-card", "data-tone": tone, className: cn("min-w-0", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(CardContent, { className: "flex items-start gap-3", children: [
2400
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { "data-slot": "metric-card-icon", className: "shrink-0 text-muted-foreground", children: icon }) : null,
2401
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "min-w-0", children: [
2402
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { "data-slot": "metric-card-label", className: "text-sm text-muted-foreground", children: label }),
2403
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("strong", { "data-slot": "metric-card-value", className: "mt-1 block text-2xl font-semibold tracking-tight", children: value }),
2404
+ description ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { "data-slot": "metric-card-description", className: "mt-1 text-xs text-muted-foreground", children: description }) : null
2405
+ ] })
2406
+ ] }) });
2126
2407
  }
2127
2408
 
2128
2409
  // src/ui/otp-input/otp-input.tsx
2129
- var import_react10 = require("react");
2130
- var import_react_aria_components19 = require("react-aria-components");
2131
- var import_jsx_runtime32 = require("react/jsx-runtime");
2410
+ var import_react11 = require("react");
2411
+ var import_react_aria_components21 = require("react-aria-components");
2412
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2132
2413
  function normalizeOtp(value, length) {
2133
2414
  return value.replace(/[^0-9]/g, "").slice(0, length);
2134
2415
  }
2135
- var OtpInputImpl = (0, import_react10.forwardRef)(function OtpInput({
2416
+ var OtpInputImpl = (0, import_react11.forwardRef)(function OtpInput({
2136
2417
  length = 6,
2137
2418
  value,
2138
2419
  defaultValue = "",
@@ -2149,15 +2430,15 @@ var OtpInputImpl = (0, import_react10.forwardRef)(function OtpInput({
2149
2430
  }, forwardedRef) {
2150
2431
  const slotCount = Math.max(1, Math.floor(length));
2151
2432
  const controlled = value !== void 0;
2152
- const [internalValue, setInternalValue] = (0, import_react10.useState)(() => normalizeOtp(defaultValue, slotCount));
2433
+ const [internalValue, setInternalValue] = (0, import_react11.useState)(() => normalizeOtp(defaultValue, slotCount));
2153
2434
  const code = normalizeOtp(controlled ? value : internalValue, slotCount);
2154
2435
  const slots = Array.from({ length: slotCount }, (_, index) => `otp-slot-${index + 1}`);
2155
- const inputRef = (0, import_react10.useRef)(null);
2156
- const [focused, setFocused] = (0, import_react10.useState)(false);
2157
- const [selectionStart, setSelectionStart] = (0, import_react10.useState)(0);
2436
+ const inputRef = (0, import_react11.useRef)(null);
2437
+ const [focused, setFocused] = (0, import_react11.useState)(false);
2438
+ const [selectionStart, setSelectionStart] = (0, import_react11.useState)(0);
2158
2439
  const invalid = props["aria-invalid"] === true || props["aria-invalid"] === "true";
2159
2440
  const activeIndex = code.length === slotCount ? slotCount - 1 : Math.min(selectionStart, code.length, slotCount - 1);
2160
- (0, import_react10.useImperativeHandle)(forwardedRef, () => inputRef.current);
2441
+ (0, import_react11.useImperativeHandle)(forwardedRef, () => inputRef.current);
2161
2442
  function updateSelection(input) {
2162
2443
  setSelectionStart(input.selectionStart ?? code.length);
2163
2444
  }
@@ -2180,7 +2461,7 @@ var OtpInputImpl = (0, import_react10.forwardRef)(function OtpInput({
2180
2461
  input.setSelectionRange(position, position);
2181
2462
  setSelectionStart(position);
2182
2463
  }
2183
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
2464
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2184
2465
  "div",
2185
2466
  {
2186
2467
  "data-slot": "otp-input",
@@ -2190,8 +2471,8 @@ var OtpInputImpl = (0, import_react10.forwardRef)(function OtpInput({
2190
2471
  style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
2191
2472
  onPointerDown: handlePointerDown,
2192
2473
  children: [
2193
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2194
- import_react_aria_components19.Input,
2474
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2475
+ import_react_aria_components21.Input,
2195
2476
  {
2196
2477
  ...props,
2197
2478
  ref: inputRef,
@@ -2230,7 +2511,7 @@ var OtpInputImpl = (0, import_react10.forwardRef)(function OtpInput({
2230
2511
  }
2231
2512
  }
2232
2513
  ),
2233
- slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2514
+ slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2234
2515
  "span",
2235
2516
  {
2236
2517
  "aria-hidden": "true",
@@ -2253,56 +2534,113 @@ var OtpInputImpl = (0, import_react10.forwardRef)(function OtpInput({
2253
2534
  var OtpInput2 = OtpInputImpl;
2254
2535
 
2255
2536
  // src/ui/page-header/page-header.tsx
2256
- var import_jsx_runtime33 = require("react/jsx-runtime");
2537
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2257
2538
  function PageHeader({ className, ...props }) {
2258
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("header", { "data-slot": "page-header", className: cn("flex flex-col gap-4 py-2 sm:flex-row sm:items-center sm:justify-between", className), ...props });
2539
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("header", { "data-slot": "page-header", className: cn("flex flex-col gap-4 py-2 sm:flex-row sm:items-center sm:justify-between", className), ...props });
2259
2540
  }
2260
2541
  function PageHeaderHeading({ className, ...props }) {
2261
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2542
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2262
2543
  }
2263
2544
  function PageHeaderTitle({ className, ...props }) {
2264
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h1", { "data-slot": "page-header-title", className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className), ...props });
2545
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("h1", { "data-slot": "page-header-title", className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className), ...props });
2265
2546
  }
2266
2547
  function PageHeaderDescription({ className, ...props }) {
2267
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
2548
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
2268
2549
  }
2269
2550
  function PageHeaderActions({ className, ...props }) {
2270
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
2551
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
2271
2552
  }
2272
2553
 
2273
2554
  // src/ui/pagination/pagination.tsx
2274
- var import_lucide_react8 = require("lucide-react");
2275
- var import_jsx_runtime34 = require("react/jsx-runtime");
2276
- function Pagination({ page, pageCount, onPageChange, className }) {
2277
- const pages = Array.from({ length: pageCount }, (_, index) => index + 1);
2278
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("nav", { "aria-label": "Paginaci\xF3n", className: cn("flex items-center justify-between gap-4", className), children: [
2279
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
2280
- "P\xE1gina ",
2281
- page,
2282
- " de ",
2555
+ var import_lucide_react10 = require("lucide-react");
2556
+ var React7 = __toESM(require("react"), 1);
2557
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2558
+ function visiblePages(page, pageCount, siblingCount) {
2559
+ return [
2560
+ .../* @__PURE__ */ new Set([
2561
+ 1,
2562
+ ...Array.from({ length: siblingCount * 2 + 1 }, (_, index) => page - siblingCount + index),
2283
2563
  pageCount
2284
- ] }),
2285
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center gap-1", children: [
2286
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button, { "aria-label": "P\xE1gina anterior", isDisabled: page <= 1, onPress: () => onPageChange(page - 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react8.ChevronLeft, {}) }),
2287
- pages.map((item) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button, { "aria-current": item === page ? "page" : void 0, "aria-label": `P\xE1gina ${item}`, onPress: () => onPageChange(item), size: "icon", variant: item === page ? "secondary" : "ghost", children: item }, item)),
2288
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button, { "aria-label": "P\xE1gina siguiente", isDisabled: page >= pageCount, onPress: () => onPageChange(page + 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react8.ChevronRight, {}) })
2289
- ] })
2290
- ] });
2564
+ ])
2565
+ ].filter((item) => item >= 1 && item <= pageCount).sort((left, right) => left - right);
2566
+ }
2567
+ function Pagination({
2568
+ page,
2569
+ pageCount,
2570
+ onPageChange,
2571
+ ariaLabel = "Paginaci\xF3n",
2572
+ summary,
2573
+ siblingCount = 1,
2574
+ className
2575
+ }) {
2576
+ if (pageCount <= 1) return null;
2577
+ const pages = visiblePages(page, pageCount, siblingCount);
2578
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
2579
+ "nav",
2580
+ {
2581
+ "aria-label": ariaLabel,
2582
+ className: cn("flex flex-wrap items-center justify-between gap-4", className),
2583
+ children: [
2584
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("p", { className: "text-sm text-muted-foreground", children: summary ?? `P\xE1gina ${page} de ${pageCount}` }),
2585
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex items-center gap-1", children: [
2586
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2587
+ Button,
2588
+ {
2589
+ "aria-label": "P\xE1gina anterior",
2590
+ isDisabled: page <= 1,
2591
+ onPress: () => onPageChange(page - 1),
2592
+ size: "icon",
2593
+ variant: "ghost",
2594
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react10.ChevronLeft, {})
2595
+ }
2596
+ ),
2597
+ pages.map((item, index) => {
2598
+ const previousPage = pages[index - 1];
2599
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(React7.Fragment, { children: [
2600
+ previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { "aria-hidden": "true", className: "px-1 text-muted-foreground", children: "\u2026" }) : null,
2601
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2602
+ Button,
2603
+ {
2604
+ "aria-current": item === page ? "page" : void 0,
2605
+ "aria-label": `P\xE1gina ${item}`,
2606
+ onPress: () => onPageChange(item),
2607
+ size: "icon",
2608
+ variant: item === page ? "secondary" : "ghost",
2609
+ children: item
2610
+ }
2611
+ )
2612
+ ] }, item);
2613
+ }),
2614
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2615
+ Button,
2616
+ {
2617
+ "aria-label": "P\xE1gina siguiente",
2618
+ isDisabled: page >= pageCount,
2619
+ onPress: () => onPageChange(page + 1),
2620
+ size: "icon",
2621
+ variant: "ghost",
2622
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react10.ChevronRight, {})
2623
+ }
2624
+ )
2625
+ ] })
2626
+ ]
2627
+ }
2628
+ );
2291
2629
  }
2292
2630
 
2293
2631
  // src/ui/popover/popover.tsx
2294
- var import_react_aria_components20 = require("react-aria-components");
2295
- var import_jsx_runtime35 = require("react/jsx-runtime");
2296
- var PopoverTrigger = import_react_aria_components20.DialogTrigger;
2632
+ var import_react_aria_components22 = require("react-aria-components");
2633
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2634
+ var PopoverTrigger = import_react_aria_components22.DialogTrigger;
2297
2635
  function Popover4({ className, ...props }) {
2298
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components20.Popover, { "data-slot": "popover", offset: 6, className: cn("min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2636
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_aria_components22.Popover, { "data-slot": "popover", offset: 6, className: cn("min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2299
2637
  }
2300
2638
  var PopoverContent = Popover4;
2301
2639
 
2302
2640
  // src/ui/quantity-input/quantity-input.tsx
2303
- var import_lucide_react9 = require("lucide-react");
2304
- var import_react_aria_components21 = require("react-aria-components");
2305
- var import_jsx_runtime36 = require("react/jsx-runtime");
2641
+ var import_lucide_react11 = require("lucide-react");
2642
+ var import_react_aria_components23 = require("react-aria-components");
2643
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2306
2644
  function QuantityInput({
2307
2645
  className,
2308
2646
  inputClassName,
@@ -2312,23 +2650,23 @@ function QuantityInput({
2312
2650
  step = 1,
2313
2651
  ...props
2314
2652
  }) {
2315
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2316
- import_react_aria_components21.NumberField,
2653
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2654
+ import_react_aria_components23.NumberField,
2317
2655
  {
2318
2656
  ...props,
2319
2657
  minValue,
2320
2658
  step,
2321
2659
  "data-slot": "quantity-input",
2322
2660
  className: cn("group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
2323
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2324
- import_react_aria_components21.Group,
2661
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2662
+ import_react_aria_components23.Group,
2325
2663
  {
2326
2664
  "data-slot": "quantity-input-group",
2327
2665
  className: "flex h-8 min-w-0 items-stretch overflow-hidden rounded-lg border border-border bg-background text-foreground transition-[border-color,box-shadow] focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 group-data-invalid/quantity-input:border-destructive",
2328
2666
  children: [
2329
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components21.Button, { slot: "decrement", "aria-label": decrementAriaLabel, "data-slot": "quantity-input-decrement", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-r border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react9.Minus, { "aria-hidden": "true", className: "size-4" }) }),
2330
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components21.Input, { "data-slot": "quantity-input-value", className: cn("w-14 min-w-0 bg-transparent px-1 text-center text-sm tabular-nums outline-none", inputClassName) }),
2331
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components21.Button, { slot: "increment", "aria-label": incrementAriaLabel, "data-slot": "quantity-input-increment", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-l border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react9.Plus, { "aria-hidden": "true", className: "size-4" }) })
2667
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_aria_components23.Button, { slot: "decrement", "aria-label": decrementAriaLabel, "data-slot": "quantity-input-decrement", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-r border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react11.Minus, { "aria-hidden": "true", className: "size-4" }) }),
2668
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_aria_components23.Input, { "data-slot": "quantity-input-value", className: cn("w-14 min-w-0 bg-transparent px-1 text-center text-sm tabular-nums outline-none", inputClassName) }),
2669
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_aria_components23.Button, { slot: "increment", "aria-label": incrementAriaLabel, "data-slot": "quantity-input-increment", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-l border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react11.Plus, { "aria-hidden": "true", className: "size-4" }) })
2332
2670
  ]
2333
2671
  }
2334
2672
  )
@@ -2336,51 +2674,39 @@ function QuantityInput({
2336
2674
  );
2337
2675
  }
2338
2676
 
2339
- // src/ui/search-field/search-field.tsx
2340
- var import_react_aria_components22 = require("react-aria-components");
2341
- var import_lucide_react10 = require("lucide-react");
2342
- var import_jsx_runtime37 = require("react/jsx-runtime");
2343
- var SearchField = import_react_aria_components22.SearchField;
2344
- function SearchInput({ className, ...props }) {
2345
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components22.Input, { "data-slot": "search-input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
2346
- }
2347
- function SearchClearButton({ className, children = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.X, { "aria-hidden": "true", className: "size-4" }), ...props }) {
2348
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components22.Button, { slot: "clear", "data-slot": "search-clear", className: cn("absolute top-1/2 right-1 rounded p-1 text-muted-foreground outline-none hover:bg-muted data-focus-visible:ring-2 data-focus-visible:ring-ring", className), ...props, children });
2349
- }
2350
-
2351
2677
  // src/ui/select/select.tsx
2352
- var import_react_aria_components23 = require("react-aria-components");
2353
- var import_lucide_react11 = require("lucide-react");
2354
- var import_jsx_runtime38 = require("react/jsx-runtime");
2355
- var Select = import_react_aria_components23.Select;
2678
+ var import_react_aria_components24 = require("react-aria-components");
2679
+ var import_lucide_react12 = require("lucide-react");
2680
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2681
+ var Select = import_react_aria_components24.Select;
2356
2682
  function SelectTrigger({ className, children, ...props }) {
2357
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components23.Button, { "data-slot": "select-trigger", className: cn("group/select-trigger flex h-8 w-full min-w-36 items-center gap-2 rounded-lg border border-border bg-background px-2.5 text-left text-sm text-foreground outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: (state) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
2683
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components24.Button, { "data-slot": "select-trigger", className: cn("group/select-trigger flex h-8 w-full min-w-36 items-center gap-2 rounded-lg border border-border bg-background px-2.5 text-left text-sm text-foreground outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: (state) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
2358
2684
  typeof children === "function" ? children(state) : children,
2359
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react11.ChevronDown, { "aria-hidden": "true", className: "ml-auto size-4 text-muted-foreground transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none" })
2685
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react12.ChevronDown, { "aria-hidden": "true", className: "ml-auto size-4 text-muted-foreground transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none" })
2360
2686
  ] }) });
2361
2687
  }
2362
2688
  function SelectValue({ className, ...props }) {
2363
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components23.SelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
2689
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components24.SelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
2364
2690
  }
2365
2691
  function SelectContent({ className, ...props }) {
2366
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components23.Popover, { "data-slot": "select-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2692
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components24.Popover, { "data-slot": "select-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2367
2693
  }
2368
2694
  function SelectList({ className, ...props }) {
2369
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components23.ListBox, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
2695
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components24.ListBox, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
2370
2696
  }
2371
2697
  function SelectItem({ className, children, ...props }) {
2372
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components23.ListBoxItem, { "data-slot": "select-item", className: cn("flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-selected:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
2698
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components24.ListBoxItem, { "data-slot": "select-item", className: cn("flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-selected:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
2373
2699
  }
2374
2700
 
2375
2701
  // src/ui/sheet/sheet.tsx
2376
- var import_lucide_react12 = require("lucide-react");
2377
- var import_react_aria_components24 = require("react-aria-components");
2378
- var import_jsx_runtime39 = require("react/jsx-runtime");
2702
+ var import_lucide_react13 = require("lucide-react");
2703
+ var import_react_aria_components25 = require("react-aria-components");
2704
+ var import_jsx_runtime43 = require("react/jsx-runtime");
2379
2705
  function SheetTrigger({ ...props }) {
2380
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_aria_components24.DialogTrigger, { "data-slot": "sheet-trigger", ...props });
2706
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_aria_components25.DialogTrigger, { "data-slot": "sheet-trigger", ...props });
2381
2707
  }
2382
2708
  function SheetClose({ className, variant = "outline", size = "default", ...props }) {
2383
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2709
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2384
2710
  Button,
2385
2711
  {
2386
2712
  slot: "close",
@@ -2397,8 +2723,8 @@ function SheetOverlay({
2397
2723
  children,
2398
2724
  ...props
2399
2725
  }) {
2400
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2401
- import_react_aria_components24.ModalOverlay,
2726
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2727
+ import_react_aria_components25.ModalOverlay,
2402
2728
  {
2403
2729
  "data-slot": "sheet-overlay",
2404
2730
  isDismissable: true,
@@ -2418,8 +2744,8 @@ function Sheet({
2418
2744
  showCloseButton = true,
2419
2745
  ...props
2420
2746
  }) {
2421
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(SheetOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2422
- import_react_aria_components24.Modal,
2747
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(SheetOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2748
+ import_react_aria_components25.Modal,
2423
2749
  {
2424
2750
  "data-slot": "sheet-content",
2425
2751
  "data-side": side,
@@ -2427,16 +2753,16 @@ function Sheet({
2427
2753
  "fixed z-50 flex flex-col gap-4 border-border bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-entering:opacity-0 data-exiting:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-entering:translate-y-10 data-[side=bottom]:data-exiting:translate-y-10 data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-entering:-translate-x-10 data-[side=left]:data-exiting:-translate-x-10 data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-entering:translate-x-10 data-[side=right]:data-exiting:translate-x-10 data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-entering:-translate-y-10 data-[side=top]:data-exiting:-translate-y-10 data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",
2428
2754
  className
2429
2755
  ),
2430
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
2431
- import_react_aria_components24.Dialog,
2756
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
2757
+ import_react_aria_components25.Dialog,
2432
2758
  {
2433
2759
  "data-slot": "sheet",
2434
2760
  className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
2435
2761
  children: [
2436
2762
  children,
2437
- showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2438
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react12.XIcon, {}),
2439
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "sr-only", children: "Cerrar" })
2763
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2764
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react13.XIcon, {}),
2765
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "sr-only", children: "Cerrar" })
2440
2766
  ] })
2441
2767
  ]
2442
2768
  }
@@ -2451,10 +2777,10 @@ function SheetContent({
2451
2777
  showCloseButton = true,
2452
2778
  ...props
2453
2779
  }) {
2454
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Sheet, { className, side, showCloseButton, ...props, children });
2780
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Sheet, { className, side, showCloseButton, ...props, children });
2455
2781
  }
2456
2782
  function SheetHeader({ className, ...props }) {
2457
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2783
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2458
2784
  "div",
2459
2785
  {
2460
2786
  "data-slot": "sheet-header",
@@ -2464,7 +2790,7 @@ function SheetHeader({ className, ...props }) {
2464
2790
  );
2465
2791
  }
2466
2792
  function SheetFooter({ className, ...props }) {
2467
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2793
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2468
2794
  "div",
2469
2795
  {
2470
2796
  "data-slot": "sheet-footer",
@@ -2474,8 +2800,8 @@ function SheetFooter({ className, ...props }) {
2474
2800
  );
2475
2801
  }
2476
2802
  function SheetTitle({ className, ...props }) {
2477
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2478
- import_react_aria_components24.Heading,
2803
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2804
+ import_react_aria_components25.Heading,
2479
2805
  {
2480
2806
  slot: "title",
2481
2807
  "data-slot": "sheet-title",
@@ -2488,8 +2814,8 @@ function SheetDescription({
2488
2814
  className,
2489
2815
  ...props
2490
2816
  }) {
2491
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2492
- import_react_aria_components24.Text,
2817
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2818
+ import_react_aria_components25.Text,
2493
2819
  {
2494
2820
  slot: "description",
2495
2821
  "data-slot": "sheet-description",
@@ -2500,13 +2826,13 @@ function SheetDescription({
2500
2826
  }
2501
2827
 
2502
2828
  // src/ui/sidebar/sidebar.tsx
2503
- var import_lucide_react13 = require("lucide-react");
2504
- var import_react11 = require("react");
2505
- var import_react_aria_components25 = require("react-aria-components");
2506
- var import_jsx_runtime40 = require("react/jsx-runtime");
2507
- var SidebarContext = (0, import_react11.createContext)(null);
2829
+ var import_lucide_react14 = require("lucide-react");
2830
+ var import_react12 = require("react");
2831
+ var import_react_aria_components26 = require("react-aria-components");
2832
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2833
+ var SidebarContext = (0, import_react12.createContext)(null);
2508
2834
  function useSidebar() {
2509
- const context = (0, import_react11.useContext)(SidebarContext);
2835
+ const context = (0, import_react12.useContext)(SidebarContext);
2510
2836
  if (!context)
2511
2837
  throw new Error("useSidebar must be used inside SidebarProvider");
2512
2838
  return context;
@@ -2515,8 +2841,8 @@ function SidebarProvider({
2515
2841
  defaultCollapsed = false,
2516
2842
  children
2517
2843
  }) {
2518
- const [collapsed, setCollapsed] = (0, import_react11.useState)(defaultCollapsed);
2519
- const value = (0, import_react11.useMemo)(
2844
+ const [collapsed, setCollapsed] = (0, import_react12.useState)(defaultCollapsed);
2845
+ const value = (0, import_react12.useMemo)(
2520
2846
  () => ({
2521
2847
  collapsed,
2522
2848
  setCollapsed,
@@ -2524,14 +2850,14 @@ function SidebarProvider({
2524
2850
  }),
2525
2851
  [collapsed]
2526
2852
  );
2527
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SidebarContext.Provider, { value, children });
2853
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(SidebarContext.Provider, { value, children });
2528
2854
  }
2529
2855
  function Sidebar({
2530
2856
  className,
2531
2857
  ...props
2532
2858
  }) {
2533
2859
  const { collapsed } = useSidebar();
2534
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2860
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2535
2861
  "aside",
2536
2862
  {
2537
2863
  "data-slot": "sidebar",
@@ -2548,7 +2874,7 @@ function SidebarHeader({
2548
2874
  className,
2549
2875
  ...props
2550
2876
  }) {
2551
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2877
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2552
2878
  "div",
2553
2879
  {
2554
2880
  "data-slot": "sidebar-header",
@@ -2563,7 +2889,7 @@ function SidebarSearch({
2563
2889
  className,
2564
2890
  ...props
2565
2891
  }) {
2566
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2892
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
2567
2893
  "button",
2568
2894
  {
2569
2895
  type: "button",
@@ -2574,9 +2900,9 @@ function SidebarSearch({
2574
2900
  ),
2575
2901
  ...props,
2576
2902
  children: [
2577
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react13.Search, { className: "size-4 shrink-0" }),
2578
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "flex-1 text-left", children: label }),
2579
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
2903
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.Search, { className: "size-4 shrink-0" }),
2904
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "flex-1 text-left", children: label }),
2905
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
2580
2906
  ]
2581
2907
  }
2582
2908
  );
@@ -2585,7 +2911,7 @@ function SidebarContent({
2585
2911
  className,
2586
2912
  ...props
2587
2913
  }) {
2588
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2914
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2589
2915
  "nav",
2590
2916
  {
2591
2917
  "data-slot": "sidebar-content",
@@ -2599,7 +2925,7 @@ function SidebarFooter({
2599
2925
  className,
2600
2926
  ...props
2601
2927
  }) {
2602
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2928
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2603
2929
  "div",
2604
2930
  {
2605
2931
  "data-slot": "sidebar-footer",
@@ -2618,14 +2944,14 @@ function SidebarGroup({
2618
2944
  ...props
2619
2945
  }) {
2620
2946
  const { collapsed } = useSidebar();
2621
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2947
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
2622
2948
  "section",
2623
2949
  {
2624
2950
  "data-slot": "sidebar-group",
2625
2951
  className: cn("mb-4 last:mb-0", className),
2626
2952
  ...props,
2627
2953
  children: [
2628
- label && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2954
+ label && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2629
2955
  "h2",
2630
2956
  {
2631
2957
  className: cn(
@@ -2651,8 +2977,8 @@ function SidebarItem({
2651
2977
  }) {
2652
2978
  const { collapsed } = useSidebar();
2653
2979
  const content = typeof children === "function" ? label : children ?? label;
2654
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2655
- import_react_aria_components25.Link,
2980
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2981
+ import_react_aria_components26.Link,
2656
2982
  {
2657
2983
  "data-slot": "sidebar-item",
2658
2984
  "aria-current": active ? "page" : void 0,
@@ -2663,16 +2989,16 @@ function SidebarItem({
2663
2989
  typeof className === "function" ? className : className
2664
2990
  ),
2665
2991
  ...props,
2666
- children: (values) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
2667
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
2668
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2992
+ children: (values) => /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
2993
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
2994
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2669
2995
  "span",
2670
2996
  {
2671
2997
  className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"),
2672
2998
  children: typeof children === "function" ? children(values) : content
2673
2999
  }
2674
3000
  ),
2675
- badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "text-xs text-muted-foreground", children: badge })
3001
+ badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "text-xs text-muted-foreground", children: badge })
2676
3002
  ] })
2677
3003
  }
2678
3004
  );
@@ -2681,7 +3007,7 @@ function SidebarSeparator({
2681
3007
  className,
2682
3008
  ...props
2683
3009
  }) {
2684
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3010
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2685
3011
  "hr",
2686
3012
  {
2687
3013
  "data-slot": "sidebar-separator",
@@ -2692,7 +3018,7 @@ function SidebarSeparator({
2692
3018
  }
2693
3019
  function SidebarTrigger({ className, ...props }) {
2694
3020
  const { collapsed, toggle } = useSidebar();
2695
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3021
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2696
3022
  Button,
2697
3023
  {
2698
3024
  "aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
@@ -2701,7 +3027,7 @@ function SidebarTrigger({ className, ...props }) {
2701
3027
  variant: "ghost",
2702
3028
  className: cn("ml-auto", className),
2703
3029
  ...props,
2704
- children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react13.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react13.ChevronLeft, {})
3030
+ children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.ChevronLeft, {})
2705
3031
  }
2706
3032
  );
2707
3033
  }
@@ -2710,7 +3036,7 @@ function SidebarRail({
2710
3036
  ...props
2711
3037
  }) {
2712
3038
  const { toggle } = useSidebar();
2713
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3039
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2714
3040
  "button",
2715
3041
  {
2716
3042
  type: "button",
@@ -2725,7 +3051,7 @@ function SidebarRail({
2725
3051
  );
2726
3052
  }
2727
3053
  function SidebarMore({ className, ...props }) {
2728
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3054
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2729
3055
  Button,
2730
3056
  {
2731
3057
  "aria-label": "M\xE1s opciones",
@@ -2733,34 +3059,34 @@ function SidebarMore({ className, ...props }) {
2733
3059
  variant: "ghost",
2734
3060
  className: cn("size-7", className),
2735
3061
  ...props,
2736
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react13.Ellipsis, {})
3062
+ children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.Ellipsis, {})
2737
3063
  }
2738
3064
  );
2739
3065
  }
2740
3066
 
2741
3067
  // src/ui/skeleton/skeleton.tsx
2742
- var import_jsx_runtime41 = require("react/jsx-runtime");
3068
+ var import_jsx_runtime45 = require("react/jsx-runtime");
2743
3069
  function Skeleton({ className, ...props }) {
2744
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
3070
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
2745
3071
  }
2746
3072
 
2747
3073
  // src/ui/submit-button/submit-button.tsx
2748
3074
  var import_react_dom = require("react-dom");
2749
- var import_lucide_react14 = require("lucide-react");
2750
- var import_jsx_runtime42 = require("react/jsx-runtime");
3075
+ var import_lucide_react15 = require("lucide-react");
3076
+ var import_jsx_runtime46 = require("react/jsx-runtime");
2751
3077
  function SubmitButton({ pendingLabel = "Guardando\u2026", loading = false, children, isDisabled, size = "sm", ...props }) {
2752
3078
  const { pending } = (0, import_react_dom.useFormStatus)();
2753
3079
  const busy = pending || loading;
2754
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Button, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
2755
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react14.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
3080
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Button, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
3081
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react15.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
2756
3082
  pendingLabel
2757
3083
  ] }) : children });
2758
3084
  }
2759
3085
 
2760
3086
  // src/ui/switch/switch.tsx
2761
- var import_react12 = require("react");
2762
- var import_react_aria_components26 = require("react-aria-components");
2763
- var import_jsx_runtime43 = require("react/jsx-runtime");
3087
+ var import_react13 = require("react");
3088
+ var import_react_aria_components27 = require("react-aria-components");
3089
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2764
3090
  var switchSizes = {
2765
3091
  sm: {
2766
3092
  control: "h-4 w-[1.875rem] p-0.5",
@@ -2800,9 +3126,9 @@ function Switch({
2800
3126
  ...props
2801
3127
  }) {
2802
3128
  const styles = switchSizes[size];
2803
- const fallbackInputRef = (0, import_react12.useRef)(null);
3129
+ const fallbackInputRef = (0, import_react13.useRef)(null);
2804
3130
  const resolvedInputRef = inputRef ?? fallbackInputRef;
2805
- (0, import_react12.useEffect)(() => {
3131
+ (0, import_react13.useEffect)(() => {
2806
3132
  const input = resolvedInputRef.current;
2807
3133
  if (!input) return;
2808
3134
  const handleDirectionalKey = (event) => {
@@ -2816,8 +3142,8 @@ function Switch({
2816
3142
  ownerDocument.addEventListener("keydown", handleDirectionalKey);
2817
3143
  return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
2818
3144
  }, [isDisabled, isReadOnly, resolvedInputRef]);
2819
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2820
- import_react_aria_components26.Switch,
3145
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3146
+ import_react_aria_components27.Switch,
2821
3147
  {
2822
3148
  "data-slot": "switch",
2823
3149
  "data-size": size,
@@ -2833,8 +3159,8 @@ function Switch({
2833
3159
  children: (state) => {
2834
3160
  const isThumbActive = state.isHovered || state.isPressed;
2835
3161
  const thumbOffset = state.isSelected ? isThumbActive ? styles.activeSelectedOffset : styles.selectedOffset : "0";
2836
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
2837
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3162
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
3163
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
2838
3164
  "span",
2839
3165
  {
2840
3166
  "aria-hidden": "true",
@@ -2848,7 +3174,7 @@ function Switch({
2848
3174
  "group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
2849
3175
  styles.control
2850
3176
  ),
2851
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3177
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
2852
3178
  "span",
2853
3179
  {
2854
3180
  "data-slot": "switch-thumb",
@@ -2868,9 +3194,9 @@ function Switch({
2868
3194
  )
2869
3195
  }
2870
3196
  ),
2871
- children || description ? /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("span", { className: "grid gap-0.5 leading-tight", children: [
2872
- children ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
2873
- description ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { "data-slot": "switch-description", className: "text-xs font-normal text-muted-foreground", children: description }) : null
3197
+ children || description ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("span", { className: "grid gap-0.5 leading-tight", children: [
3198
+ children ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
3199
+ description ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { "data-slot": "switch-description", className: "text-xs font-normal text-muted-foreground", children: description }) : null
2874
3200
  ] }) : null
2875
3201
  ] });
2876
3202
  }
@@ -2879,9 +3205,9 @@ function Switch({
2879
3205
  }
2880
3206
 
2881
3207
  // src/ui/table/table.tsx
2882
- var import_jsx_runtime44 = require("react/jsx-runtime");
3208
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2883
3209
  function Table({ className, ...props }) {
2884
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3210
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2885
3211
  "table",
2886
3212
  {
2887
3213
  "data-slot": "table",
@@ -2891,10 +3217,10 @@ function Table({ className, ...props }) {
2891
3217
  ) });
2892
3218
  }
2893
3219
  function TableHeader({ className, ...props }) {
2894
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
3220
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
2895
3221
  }
2896
3222
  function TableBody({ className, ...props }) {
2897
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3223
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2898
3224
  "tbody",
2899
3225
  {
2900
3226
  "data-slot": "table-body",
@@ -2904,7 +3230,7 @@ function TableBody({ className, ...props }) {
2904
3230
  );
2905
3231
  }
2906
3232
  function TableRow({ className, ...props }) {
2907
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3233
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2908
3234
  "tr",
2909
3235
  {
2910
3236
  "data-slot": "table-row",
@@ -2917,7 +3243,7 @@ function TableRow({ className, ...props }) {
2917
3243
  );
2918
3244
  }
2919
3245
  function TableHead({ className, ...props }) {
2920
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3246
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2921
3247
  "th",
2922
3248
  {
2923
3249
  "data-slot": "table-head",
@@ -2930,7 +3256,7 @@ function TableHead({ className, ...props }) {
2930
3256
  );
2931
3257
  }
2932
3258
  function TableCell({ className, ...props }) {
2933
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3259
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2934
3260
  "td",
2935
3261
  {
2936
3262
  "data-slot": "table-cell",
@@ -2940,7 +3266,7 @@ function TableCell({ className, ...props }) {
2940
3266
  );
2941
3267
  }
2942
3268
  function TableCaption({ className, ...props }) {
2943
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3269
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2944
3270
  "caption",
2945
3271
  {
2946
3272
  "data-slot": "table-caption",
@@ -2950,7 +3276,7 @@ function TableCaption({ className, ...props }) {
2950
3276
  );
2951
3277
  }
2952
3278
  function TableFooter({ className, ...props }) {
2953
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3279
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2954
3280
  "tfoot",
2955
3281
  {
2956
3282
  "data-slot": "table-footer",
@@ -2961,28 +3287,28 @@ function TableFooter({ className, ...props }) {
2961
3287
  }
2962
3288
 
2963
3289
  // src/ui/tabs/tabs.tsx
2964
- var import_react_aria_components27 = require("react-aria-components");
2965
- var import_jsx_runtime45 = require("react/jsx-runtime");
3290
+ var import_react_aria_components28 = require("react-aria-components");
3291
+ var import_jsx_runtime49 = require("react/jsx-runtime");
2966
3292
  function Tabs({ className, ...props }) {
2967
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_aria_components27.Tabs, { "data-slot": "tabs", className: (0, import_react_aria_components27.composeRenderProps)(className, (value) => cn("flex flex-col gap-2", value)), ...props });
3293
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_react_aria_components28.Tabs, { "data-slot": "tabs", className: (0, import_react_aria_components28.composeRenderProps)(className, (value) => cn("flex flex-col gap-2", value)), ...props });
2968
3294
  }
2969
3295
  function TabsList({ className, ...props }) {
2970
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_aria_components27.TabList, { "data-slot": "tabs-list", className: (0, import_react_aria_components27.composeRenderProps)(className, (value) => cn("inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground", value)), ...props });
3296
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_react_aria_components28.TabList, { "data-slot": "tabs-list", className: (0, import_react_aria_components28.composeRenderProps)(className, (value) => cn("inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground", value)), ...props });
2971
3297
  }
2972
3298
  function TabsTrigger({ className, ...props }) {
2973
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_aria_components27.Tab, { "data-slot": "tabs-trigger", className: (0, import_react_aria_components27.composeRenderProps)(className, (value) => cn("inline-flex h-7 items-center justify-center gap-1.5 rounded-md px-2.5 text-sm font-medium outline-none transition-colors data-hovered:text-foreground data-selected:bg-background data-selected:text-foreground data-selected:shadow-sm data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50", value)), ...props });
3299
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_react_aria_components28.Tab, { "data-slot": "tabs-trigger", className: (0, import_react_aria_components28.composeRenderProps)(className, (value) => cn("inline-flex h-7 items-center justify-center gap-1.5 rounded-md px-2.5 text-sm font-medium outline-none transition-colors data-hovered:text-foreground data-selected:bg-background data-selected:text-foreground data-selected:shadow-sm data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50", value)), ...props });
2974
3300
  }
2975
3301
  function TabsPanels({ className, ...props }) {
2976
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_aria_components27.TabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
3302
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_react_aria_components28.TabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
2977
3303
  }
2978
3304
  function TabsContent({ className, ...props }) {
2979
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_aria_components27.TabPanel, { "data-slot": "tabs-content", className: (0, import_react_aria_components27.composeRenderProps)(className, (value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)), ...props });
3305
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_react_aria_components28.TabPanel, { "data-slot": "tabs-content", className: (0, import_react_aria_components28.composeRenderProps)(className, (value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)), ...props });
2980
3306
  }
2981
3307
 
2982
3308
  // src/ui/toast/toast.tsx
2983
- var import_react13 = require("react");
3309
+ var import_react14 = require("react");
2984
3310
  var import_sileo = require("sileo");
2985
- var import_jsx_runtime46 = require("react/jsx-runtime");
3311
+ var import_jsx_runtime50 = require("react/jsx-runtime");
2986
3312
  function toSileoOptions({ title, description, duration, position, action }) {
2987
3313
  return {
2988
3314
  title,
@@ -3021,21 +3347,21 @@ function useToast() {
3021
3347
  return toast;
3022
3348
  }
3023
3349
  function ToastProvider({ children }) {
3024
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
3350
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
3025
3351
  children,
3026
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Toaster, {})
3352
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Toaster, {})
3027
3353
  ] });
3028
3354
  }
3029
3355
  function Toaster({ position }) {
3030
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_sileo.Toaster, { position, options: { fill: "var(--ui-secondary)" } });
3356
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_sileo.Toaster, { position, options: { fill: "var(--ui-secondary)" } });
3031
3357
  }
3032
3358
  function ToastViewport({ position, visiblePosition, className }) {
3033
3359
  void className;
3034
3360
  if (visiblePosition && visiblePosition !== position) return null;
3035
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Toaster, { position });
3361
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Toaster, { position });
3036
3362
  }
3037
3363
  function Toast({ id, title, description, variant = "default", action, state = "open", duration = 0, position, onDismiss }) {
3038
- (0, import_react13.useEffect)(() => {
3364
+ (0, import_react14.useEffect)(() => {
3039
3365
  if (state !== "open") return;
3040
3366
  const toastId = create({ title, description, variant, action, duration, position });
3041
3367
  return () => {
@@ -3047,15 +3373,15 @@ function Toast({ id, title, description, variant = "default", action, state = "o
3047
3373
  }
3048
3374
 
3049
3375
  // src/ui/toolbar/toolbar.tsx
3050
- var import_jsx_runtime47 = require("react/jsx-runtime");
3376
+ var import_jsx_runtime51 = require("react/jsx-runtime");
3051
3377
  function Toolbar({ className, ...props }) {
3052
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
3378
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
3053
3379
  }
3054
3380
  function ToolbarGroup({ className, ...props }) {
3055
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
3381
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
3056
3382
  }
3057
3383
  function ToolbarSpacer({ className, ...props }) {
3058
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
3384
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
3059
3385
  }
3060
3386
  // Annotate the CommonJS export names for ESM import in node:
3061
3387
  0 && (module.exports = {
@@ -3066,6 +3392,17 @@ function ToolbarSpacer({ className, ...props }) {
3066
3392
  Alert,
3067
3393
  AlertAction,
3068
3394
  AlertDescription,
3395
+ AlertDialog,
3396
+ AlertDialogAction,
3397
+ AlertDialogCancel,
3398
+ AlertDialogContent,
3399
+ AlertDialogDescription,
3400
+ AlertDialogFooter,
3401
+ AlertDialogHeader,
3402
+ AlertDialogOverlay,
3403
+ AlertDialogPortal,
3404
+ AlertDialogTitle,
3405
+ AlertDialogTrigger,
3069
3406
  AlertTitle,
3070
3407
  AppShell,
3071
3408
  AppShellContent,
@@ -3099,6 +3436,9 @@ function ToolbarSpacer({ className, ...props }) {
3099
3436
  CardHeader,
3100
3437
  CardTitle,
3101
3438
  Checkbox,
3439
+ Collapsible,
3440
+ CollapsibleContent,
3441
+ CollapsibleTrigger,
3102
3442
  Combobox,
3103
3443
  ComboboxContent,
3104
3444
  ComboboxInput,
@@ -3111,6 +3451,7 @@ function ToolbarSpacer({ className, ...props }) {
3111
3451
  CommandItem,
3112
3452
  CommandList,
3113
3453
  ConfirmDialog,
3454
+ DangerZone,
3114
3455
  Dialog,
3115
3456
  DialogClose,
3116
3457
  DialogContent,
@@ -3121,6 +3462,7 @@ function ToolbarSpacer({ className, ...props }) {
3121
3462
  DialogPortal,
3122
3463
  DialogTitle,
3123
3464
  DialogTrigger,
3465
+ DocPreview,
3124
3466
  Drawer,
3125
3467
  DrawerDescription,
3126
3468
  DrawerFooter,
@@ -3172,6 +3514,7 @@ function ToolbarSpacer({ className, ...props }) {
3172
3514
  MenuContent,
3173
3515
  MenuItem,
3174
3516
  MenuTrigger,
3517
+ MetricCard,
3175
3518
  ModalDialog,
3176
3519
  OtpInput,
3177
3520
  PageHeader,
@@ -3184,9 +3527,6 @@ function ToolbarSpacer({ className, ...props }) {
3184
3527
  PopoverContent,
3185
3528
  PopoverTrigger,
3186
3529
  QuantityInput,
3187
- SearchClearButton,
3188
- SearchField,
3189
- SearchInput,
3190
3530
  Select,
3191
3531
  SelectContent,
3192
3532
  SelectItem,