@doscientos/ui 0.1.28 → 0.1.29

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
@@ -90,7 +90,7 @@ __export(index_exports, {
90
90
  ComboboxInput: () => ComboboxInput,
91
91
  ComboboxItem: () => ComboboxItem,
92
92
  ComboboxList: () => ComboboxList,
93
- ComboboxValue: () => import_react_aria_components8.ComboBoxValue,
93
+ ComboboxValue: () => import_react_aria_components9.ComboBoxValue,
94
94
  Command: () => Command,
95
95
  CommandContent: () => CommandContent,
96
96
  CommandInput: () => CommandInput,
@@ -106,15 +106,20 @@ __export(index_exports, {
106
106
  DialogHeader: () => DialogHeader,
107
107
  DialogOverlay: () => DialogOverlay,
108
108
  DialogPortal: () => DialogPortal,
109
+ DialogRoot: () => DialogRoot,
109
110
  DialogTitle: () => DialogTitle,
110
111
  DialogTrigger: () => DialogTrigger,
111
112
  DocPreview: () => DocPreview,
112
113
  Drawer: () => Drawer,
114
+ DrawerClose: () => DrawerClose,
115
+ DrawerContent: () => DrawerContent,
113
116
  DrawerDescription: () => DrawerDescription,
114
117
  DrawerFooter: () => DrawerFooter,
115
118
  DrawerHeader: () => DrawerHeader,
116
119
  DrawerTitle: () => DrawerTitle,
120
+ DrawerTrigger: () => DrawerTrigger,
117
121
  DropdownMenu: () => DropdownMenu,
122
+ DropdownMenuContent: () => DropdownMenuContent,
118
123
  DropdownMenuGroup: () => DropdownMenuGroup,
119
124
  DropdownMenuItem: () => DropdownMenuItem,
120
125
  DropdownMenuLabel: () => DropdownMenuLabel,
@@ -161,7 +166,6 @@ __export(index_exports, {
161
166
  MenuItem: () => MenuItem,
162
167
  MenuTrigger: () => MenuTrigger,
163
168
  MetricCard: () => MetricCard,
164
- ModalDialog: () => ModalDialog,
165
169
  OtpInput: () => OtpInput2,
166
170
  PageHeader: () => PageHeader,
167
171
  PageHeaderActions: () => PageHeaderActions,
@@ -190,6 +194,7 @@ __export(index_exports, {
190
194
  SheetTrigger: () => SheetTrigger,
191
195
  Sidebar: () => Sidebar,
192
196
  SidebarContent: () => SidebarContent,
197
+ SidebarContext: () => SidebarContext,
193
198
  SidebarFooter: () => SidebarFooter,
194
199
  SidebarGroup: () => SidebarGroup,
195
200
  SidebarHeader: () => SidebarHeader,
@@ -225,6 +230,7 @@ __export(index_exports, {
225
230
  ToolbarGroup: () => ToolbarGroup,
226
231
  ToolbarSpacer: () => ToolbarSpacer,
227
232
  Tooltip: () => Tooltip,
233
+ TooltipContent: () => TooltipContent,
228
234
  TooltipTrigger: () => TooltipTrigger,
229
235
  actionRipple: () => actionRipple,
230
236
  alertVariants: () => alertVariants,
@@ -305,7 +311,10 @@ function useDebouncedValue(value, delay = 250) {
305
311
  // src/hooks/use-form-dirty.ts
306
312
  var import_react3 = require("react");
307
313
  function formSnapshot(form) {
308
- const entries = Array.from(new FormData(form), ([key, value]) => [key, typeof value === "string" ? value : value.name]);
314
+ const entries = Array.from(new FormData(form), ([key, value]) => [
315
+ key,
316
+ typeof value === "string" ? value : value.name
317
+ ]);
309
318
  entries.sort(([left], [right]) => left.localeCompare(right));
310
319
  return JSON.stringify(entries);
311
320
  }
@@ -324,29 +333,30 @@ function useFormDirty() {
324
333
  setIsDirty(false);
325
334
  }
326
335
  }, []);
327
- const formRef = (0, import_react3.useCallback)((form) => {
328
- if (formElement.current) {
329
- formElement.current.removeEventListener("input", recompute);
330
- formElement.current.removeEventListener("change", recompute);
331
- formElement.current.removeEventListener("reset", recompute);
332
- }
333
- formElement.current = form;
334
- if (form) {
335
- baseline.current = formSnapshot(form);
336
- setIsDirty(false);
337
- form.addEventListener("input", recompute);
338
- form.addEventListener("change", recompute);
339
- form.addEventListener("reset", recompute);
340
- }
341
- }, [recompute]);
336
+ const formRef = (0, import_react3.useCallback)(
337
+ (form) => {
338
+ if (formElement.current) {
339
+ formElement.current.removeEventListener("input", recompute);
340
+ formElement.current.removeEventListener("change", recompute);
341
+ formElement.current.removeEventListener("reset", recompute);
342
+ }
343
+ formElement.current = form;
344
+ if (form) {
345
+ baseline.current = formSnapshot(form);
346
+ setIsDirty(false);
347
+ form.addEventListener("input", recompute);
348
+ form.addEventListener("change", recompute);
349
+ form.addEventListener("reset", recompute);
350
+ }
351
+ },
352
+ [recompute]
353
+ );
342
354
  return { formRef, isDirty, markDirty: () => setIsDirty(true), reset };
343
355
  }
344
356
 
345
357
  // src/lib/action-ripple.ts
346
358
  var import_class_variance_authority = require("class-variance-authority");
347
- var actionRipple = (0, import_class_variance_authority.cva)(
348
- "relative isolate overflow-hidden"
349
- );
359
+ var actionRipple = (0, import_class_variance_authority.cva)("relative isolate overflow-hidden");
350
360
 
351
361
  // src/lib/cn.ts
352
362
  var import_clsx = require("clsx");
@@ -385,7 +395,8 @@ function getTextMatchParts(text, query) {
385
395
  const rangeStart = ranges[index]?.start;
386
396
  const rangeEnd = ranges[index + term.length - 1]?.end;
387
397
  if (rangeStart === void 0 || rangeEnd === void 0) break;
388
- if (rangeStart > sourceCursor) parts.push({ text: text.slice(sourceCursor, rangeStart), match: false });
398
+ if (rangeStart > sourceCursor)
399
+ parts.push({ text: text.slice(sourceCursor, rangeStart), match: false });
389
400
  parts.push({ text: text.slice(rangeStart, rangeEnd), match: true });
390
401
  sourceCursor = rangeEnd;
391
402
  index = normalized.indexOf(term, index + term.length);
@@ -395,8 +406,8 @@ function getTextMatchParts(text, query) {
395
406
  }
396
407
 
397
408
  // src/ui/accordion/accordion.tsx
398
- var React = require("react");
399
409
  var import_lucide_react = require("lucide-react");
410
+ var React = require("react");
400
411
  var import_react_aria_components = require("react-aria-components");
401
412
  var import_jsx_runtime = require("react/jsx-runtime");
402
413
  function Accordion({ className, ...props }) {
@@ -454,16 +465,12 @@ function AccordionTrigger({
454
465
  }
455
466
  ) });
456
467
  }
457
- function AccordionContent({
458
- className,
459
- children,
460
- ...props
461
- }) {
468
+ function AccordionContent({ className, children, ...props }) {
462
469
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
463
470
  import_react_aria_components.DisclosurePanel,
464
471
  {
465
472
  "data-slot": "accordion-content",
466
- className: "h-(--disclosure-panel-height) overflow-clip text-sm text-muted-foreground transition-[height] data-open:animate-accordion-down data-closed:animate-accordion-up",
473
+ className: "text-muted-foreground data-open:animate-accordion-down data-closed:animate-accordion-up h-(--disclosure-panel-height) overflow-clip text-sm transition-[height]",
467
474
  ...props,
468
475
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
469
476
  "div",
@@ -480,26 +487,61 @@ function AccordionContent({
480
487
  }
481
488
 
482
489
  // src/ui/alert-dialog/alert-dialog.tsx
483
- var React2 = __toESM(require("react"), 1);
484
- var import_react_aria_components3 = require("react-aria-components");
490
+ var React3 = require("react");
491
+ var import_react_aria_components4 = require("react-aria-components");
485
492
 
486
493
  // src/ui/button/button.tsx
487
- var import_class_variance_authority2 = require("class-variance-authority");
488
494
  var import_react4 = require("react");
489
495
  var import_react_aria_components2 = require("react-aria-components");
496
+
497
+ // src/ui/button/button-variants.ts
498
+ var import_class_variance_authority2 = require("class-variance-authority");
499
+ var buttonVariants = (0, import_class_variance_authority2.cva)(
500
+ cn(
501
+ "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",
502
+ actionRipple()
503
+ ),
504
+ {
505
+ variants: {
506
+ variant: {
507
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
508
+ 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",
509
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
510
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
511
+ 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",
512
+ link: "text-primary underline-offset-4 hover:underline after:hidden"
513
+ },
514
+ size: {
515
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
516
+ 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",
517
+ 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",
518
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
519
+ icon: "size-8",
520
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
521
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
522
+ "icon-lg": "size-9"
523
+ }
524
+ },
525
+ defaultVariants: {
526
+ variant: "default",
527
+ size: "default"
528
+ }
529
+ }
530
+ );
531
+
532
+ // src/ui/button/button.tsx
490
533
  var import_jsx_runtime2 = require("react/jsx-runtime");
491
534
  var centeredRipplePosition = { x: "50%", y: "50%" };
492
535
  function getRipplePosition(event) {
493
536
  if (event.pointerType === "keyboard" || event.pointerType === "virtual") {
494
537
  return centeredRipplePosition;
495
538
  }
496
- if (!(event.target instanceof Element) || event.x === void 0 || event.y === void 0) {
539
+ if (event.x === void 0 || event.y === void 0) {
497
540
  return centeredRipplePosition;
498
541
  }
499
- const bounds = event.target.getBoundingClientRect();
500
542
  return {
501
- x: `${event.x - bounds.left}px`,
502
- y: `${event.y - bounds.top}px`
543
+ x: `${event.x}px`,
544
+ y: `${event.y}px`
503
545
  };
504
546
  }
505
547
  function useActionRipple(enabled) {
@@ -517,7 +559,7 @@ function useActionRipple(enabled) {
517
559
  {
518
560
  "aria-hidden": "true",
519
561
  "data-slot": "button-ripple",
520
- className: "pointer-events-none absolute aspect-square w-full rounded-full bg-current animate-ui-ripple motion-reduce:hidden",
562
+ className: "animate-ui-ripple pointer-events-none absolute aspect-square w-full rounded-full motion-reduce:hidden",
521
563
  style: { left: ripple.position.x, top: ripple.position.y },
522
564
  onAnimationEnd: () => setRipple((currentRipple) => currentRipple?.id === ripple.id ? null : currentRipple)
523
565
  },
@@ -525,39 +567,17 @@ function useActionRipple(enabled) {
525
567
  ) : null;
526
568
  return { ripple: rippleElement, triggerRipple };
527
569
  }
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 }) {
570
+ function Button({
571
+ className,
572
+ variant = "default",
573
+ size = "default",
574
+ children,
575
+ disabled,
576
+ isDisabled,
577
+ onClick,
578
+ onPress,
579
+ ...props
580
+ }) {
561
581
  const { ripple, triggerRipple } = useActionRipple(variant !== "link");
562
582
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
563
583
  import_react_aria_components2.Button,
@@ -611,57 +631,294 @@ function LinkButton({
611
631
  );
612
632
  }
613
633
 
614
- // src/ui/alert-dialog/alert-dialog.tsx
634
+ // src/ui/dialog/dialog.tsx
635
+ var import_lucide_react2 = require("lucide-react");
636
+ var React2 = __toESM(require("react"), 1);
637
+ var import_react_aria_components3 = require("react-aria-components");
615
638
  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.");
639
+ var DialogContext = React2.createContext(null);
640
+ function useDialogContext() {
641
+ const context = React2.useContext(DialogContext);
642
+ if (!context) throw new Error("Dialog components must be rendered within Dialog.");
620
643
  return context;
621
644
  }
645
+ function DialogRoot({
646
+ children,
647
+ defaultOpen = false,
648
+ onOpenChange,
649
+ open: controlledOpen
650
+ }) {
651
+ const [uncontrolledOpen, setUncontrolledOpen] = React2.useState(defaultOpen);
652
+ const open = controlledOpen ?? uncontrolledOpen;
653
+ const setOpen = React2.useCallback(
654
+ (nextOpen) => {
655
+ if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
656
+ onOpenChange?.(nextOpen);
657
+ },
658
+ [controlledOpen, onOpenChange]
659
+ );
660
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogContext.Provider, { value: { open, setOpen }, children });
661
+ }
662
+ function DialogTrigger({
663
+ asChild = false,
664
+ children,
665
+ onClick,
666
+ ...props
667
+ }) {
668
+ const { setOpen } = useDialogContext();
669
+ const handleClick = (event) => {
670
+ onClick?.(event);
671
+ if (!event.defaultPrevented) setOpen(true);
672
+ };
673
+ if (asChild && React2.isValidElement(children)) {
674
+ const child = children;
675
+ return React2.cloneElement(child, {
676
+ ...props,
677
+ "data-slot": "dialog-trigger",
678
+ onClick: (event) => {
679
+ child.props.onClick?.(event);
680
+ handleClick(event);
681
+ }
682
+ });
683
+ }
684
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
685
+ }
686
+ function DialogPortal({ children }) {
687
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children });
688
+ }
689
+ function DialogOverlay({ children, className, ...props }) {
690
+ const { open, setOpen } = useDialogContext();
691
+ if (!open) return null;
692
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
693
+ import_react_aria_components3.ModalOverlay,
694
+ {
695
+ "data-slot": "dialog-overlay",
696
+ isDismissable: true,
697
+ isOpen: open,
698
+ onOpenChange: setOpen,
699
+ className: cn(
700
+ "fixed inset-0 isolate z-50 grid place-items-center bg-black/10 p-4 supports-backdrop-filter:backdrop-blur-xs motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out",
701
+ className
702
+ ),
703
+ ...props,
704
+ children
705
+ }
706
+ );
707
+ }
708
+ function Dialog(props) {
709
+ if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogRoot, { ...props });
710
+ const { children, trigger, triggerProps, defaultOpen, onOpenChange, open, ...contentProps } = props;
711
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(DialogRoot, { defaultOpen, onOpenChange, open, children: [
712
+ typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogTrigger, { ...triggerProps, children: trigger }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogTrigger, { asChild: true, ...triggerProps, children: trigger }),
713
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogContent, { ...contentProps, children })
714
+ ] });
715
+ }
716
+ function DialogContent({
717
+ children,
718
+ className,
719
+ contentSlot = "dialog-content",
720
+ onOverlayClick,
721
+ overlaySlot = "dialog-overlay",
722
+ showCloseButton = true,
723
+ ...props
724
+ }) {
725
+ const { setOpen } = useDialogContext();
726
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
727
+ DialogOverlay,
728
+ {
729
+ "data-slot": overlaySlot,
730
+ onClick: (event) => {
731
+ if (event.target === event.currentTarget) onOverlayClick?.(event);
732
+ },
733
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
734
+ import_react_aria_components3.Modal,
735
+ {
736
+ className: "motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out max-h-full min-h-0 w-full",
737
+ onClick: (event) => {
738
+ if (event.target === event.currentTarget) {
739
+ setOpen(false);
740
+ onOverlayClick?.(event);
741
+ }
742
+ },
743
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
744
+ import_react_aria_components3.Dialog,
745
+ {
746
+ "data-slot": contentSlot,
747
+ className: cn(
748
+ "relative mx-auto grid box-border max-h-full min-h-0 w-full max-w-[calc(100%-2rem)] gap-4 overflow-x-hidden overflow-y-auto rounded-xl bg-background p-4 text-sm text-foreground ring-1 ring-foreground/10 outline-none sm:max-w-sm",
749
+ className
750
+ ),
751
+ ...props,
752
+ children: [
753
+ children,
754
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
755
+ Button,
756
+ {
757
+ "aria-label": "Cerrar di\xE1logo",
758
+ "data-slot": "dialog-close",
759
+ variant: "ghost",
760
+ className: "absolute top-2 right-2",
761
+ size: "icon-sm",
762
+ onPress: () => setOpen(false),
763
+ children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.XIcon, {})
764
+ }
765
+ ) : null
766
+ ]
767
+ }
768
+ )
769
+ }
770
+ )
771
+ }
772
+ ) });
773
+ }
774
+ function DialogClose({ asChild = false, children, onClick, ...props }) {
775
+ const { setOpen } = useDialogContext();
776
+ if (asChild && React2.isValidElement(children)) {
777
+ const child = children;
778
+ return React2.cloneElement(child, {
779
+ ...props,
780
+ "data-slot": "dialog-close",
781
+ onClick: (event) => {
782
+ child.props.onClick?.(event);
783
+ onClick?.(event);
784
+ if (!event.defaultPrevented) setOpen(false);
785
+ }
786
+ });
787
+ }
788
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
789
+ }
790
+ function DialogHeader({ className, ...props }) {
791
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
792
+ }
793
+ function DialogFooter({
794
+ className,
795
+ showCloseButton = false,
796
+ children,
797
+ ...props
798
+ }) {
799
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
800
+ "div",
801
+ {
802
+ "data-slot": "dialog-footer",
803
+ className: cn(
804
+ "-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t border-border bg-muted/50 p-4 sm:flex-row sm:flex-wrap sm:justify-end",
805
+ className
806
+ ),
807
+ ...props,
808
+ children: [
809
+ children,
810
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogClose, { variant: "outline", children: "Cerrar" }) : null
811
+ ]
812
+ }
813
+ );
814
+ }
815
+ function DialogTitle({
816
+ className,
817
+ ...props
818
+ }) {
819
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
820
+ import_react_aria_components3.Heading,
821
+ {
822
+ slot: "title",
823
+ "data-slot": "dialog-title",
824
+ className: cn("font-heading text-base leading-none font-medium", className),
825
+ ...props
826
+ }
827
+ );
828
+ }
829
+ function DialogDescription({
830
+ className,
831
+ ...props
832
+ }) {
833
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
834
+ import_react_aria_components3.Text,
835
+ {
836
+ slot: "description",
837
+ "data-slot": "dialog-description",
838
+ className: cn(
839
+ "text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
840
+ className
841
+ ),
842
+ ...props
843
+ }
844
+ );
845
+ }
846
+
847
+ // src/ui/alert-dialog/alert-dialog.tsx
848
+ var import_jsx_runtime4 = require("react/jsx-runtime");
622
849
  function AlertDialog({ children, open, onOpenChange }) {
623
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(AlertDialogContext.Provider, { value: { open, setOpen: onOpenChange }, children });
850
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Dialog, { open, onOpenChange, children });
624
851
  }
625
852
  function AlertDialogPortal({ children }) {
626
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children });
853
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogPortal, { children });
627
854
  }
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 });
855
+ function AlertDialogTrigger({
856
+ children,
857
+ ...props
858
+ }) {
859
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogTrigger, { "data-slot": "alert-dialog-trigger", ...props, children });
631
860
  }
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 });
861
+ function AlertDialogOverlay({
862
+ className,
863
+ ...props
864
+ }) {
865
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogOverlay, { "data-slot": "alert-dialog-overlay", className, ...props });
636
866
  }
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 }) }) }) });
867
+ function AlertDialogContent({
868
+ className,
869
+ size = "default",
870
+ children
871
+ }) {
872
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
873
+ DialogContent,
874
+ {
875
+ contentSlot: "alert-dialog-content",
876
+ overlaySlot: "alert-dialog-overlay",
877
+ role: "alertdialog",
878
+ showCloseButton: false,
879
+ className: cn(size === "sm" ? "sm:max-w-xs" : "sm:max-w-sm", className),
880
+ children
881
+ }
882
+ );
641
883
  }
642
884
  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 });
885
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
886
+ DialogHeader,
887
+ {
888
+ "data-slot": "alert-dialog-header",
889
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
890
+ ...props
891
+ }
892
+ );
644
893
  }
645
894
  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 });
895
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogFooter, { "data-slot": "alert-dialog-footer", className: cn(className), ...props });
647
896
  }
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 });
897
+ function AlertDialogTitle({
898
+ className,
899
+ ...props
900
+ }) {
901
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogTitle, { "data-slot": "alert-dialog-title", className: cn(className), ...props });
650
902
  }
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 });
903
+ function AlertDialogDescription({
904
+ className,
905
+ ...props
906
+ }) {
907
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogDescription, { "data-slot": "alert-dialog-description", className: cn(className), ...props });
653
908
  }
654
909
  function AlertDialogAction({ className, ...props }) {
655
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { "data-slot": "alert-dialog-action", className: cn(className), ...props });
910
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Button, { "data-slot": "alert-dialog-action", className: cn(className), ...props });
656
911
  }
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 });
912
+ function AlertDialogCancel({
913
+ children = "Cancelar",
914
+ onClick,
915
+ ...props
916
+ }) {
917
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogClose, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Button, { "data-slot": "alert-dialog-cancel", variant: "outline", onClick, ...props, children }) });
660
918
  }
661
919
 
662
- // src/ui/alert/alert.tsx
920
+ // src/ui/alert/alert-variants.ts
663
921
  var import_class_variance_authority3 = require("class-variance-authority");
664
- var import_jsx_runtime4 = require("react/jsx-runtime");
665
922
  var alertVariants = (0, import_class_variance_authority3.cva)(
666
923
  "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",
667
924
  {
@@ -679,8 +936,11 @@ var alertVariants = (0, import_class_variance_authority3.cva)(
679
936
  }
680
937
  }
681
938
  );
939
+
940
+ // src/ui/alert/alert.tsx
941
+ var import_jsx_runtime5 = require("react/jsx-runtime");
682
942
  function Alert({ className, variant, ...props }) {
683
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
943
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
684
944
  "div",
685
945
  {
686
946
  "data-slot": "alert",
@@ -691,7 +951,7 @@ function Alert({ className, variant, ...props }) {
691
951
  );
692
952
  }
693
953
  function AlertTitle({ className, ...props }) {
694
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
954
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
695
955
  "div",
696
956
  {
697
957
  "data-slot": "alert-title",
@@ -704,7 +964,7 @@ function AlertTitle({ className, ...props }) {
704
964
  );
705
965
  }
706
966
  function AlertDescription({ className, ...props }) {
707
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
967
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
708
968
  "div",
709
969
  {
710
970
  "data-slot": "alert-description",
@@ -717,17 +977,13 @@ function AlertDescription({ className, ...props }) {
717
977
  );
718
978
  }
719
979
  function AlertAction({ className, ...props }) {
720
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
980
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
721
981
  }
722
982
 
723
983
  // src/ui/app-shell/app-shell.tsx
724
- var import_jsx_runtime5 = require("react/jsx-runtime");
725
- function AppShell({
726
- className,
727
- sidebarBreakpoint = "md",
728
- ...props
729
- }) {
730
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
984
+ var import_jsx_runtime6 = require("react/jsx-runtime");
985
+ function AppShell({ className, sidebarBreakpoint = "md", ...props }) {
986
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
731
987
  "div",
732
988
  {
733
989
  "data-slot": "app-shell",
@@ -738,7 +994,7 @@ function AppShell({
738
994
  );
739
995
  }
740
996
  function AppShellSidebar({ className, ...props }) {
741
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
997
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
742
998
  "aside",
743
999
  {
744
1000
  "data-slot": "app-shell-sidebar",
@@ -748,27 +1004,27 @@ function AppShellSidebar({ className, ...props }) {
748
1004
  );
749
1005
  }
750
1006
  function AppShellMain({ className, ...props }) {
751
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
1007
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
752
1008
  }
753
1009
  function AppShellHeader({ className, ...props }) {
754
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1010
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
755
1011
  "header",
756
1012
  {
757
1013
  "data-slot": "app-shell-header",
758
1014
  className: cn("border-b border-border bg-background px-4", className),
759
1015
  ...props
760
1016
  }
761
- );
762
- }
763
- function AppShellMobileHeader({
764
- className,
765
- ...props
766
- }) {
767
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1017
+ );
1018
+ }
1019
+ function AppShellMobileHeader({ className, ...props }) {
1020
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
768
1021
  "header",
769
1022
  {
770
1023
  "data-slot": "app-shell-mobile-header",
771
- className: cn("h-14 shrink-0 items-center gap-2 border-b border-border bg-background px-3", className),
1024
+ className: cn(
1025
+ "h-14 shrink-0 items-center gap-2 border-b border-border bg-background px-3",
1026
+ className
1027
+ ),
772
1028
  ...props
773
1029
  }
774
1030
  );
@@ -780,7 +1036,7 @@ function AppShellContent({
780
1036
  scrollable = true,
781
1037
  ...props
782
1038
  }) {
783
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1039
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
784
1040
  "div",
785
1041
  {
786
1042
  "data-slot": "app-shell-content",
@@ -795,14 +1051,38 @@ function AppShellContent({
795
1051
 
796
1052
  // src/ui/avatar/avatar.tsx
797
1053
  var import_react5 = require("react");
798
- var import_jsx_runtime6 = require("react/jsx-runtime");
799
- var sizes = { xs: "size-5 text-[10px]", sm: "size-6 text-xs", default: "size-8 text-sm", lg: "size-10 text-base" };
1054
+ var import_jsx_runtime7 = require("react/jsx-runtime");
1055
+ var sizes = {
1056
+ xs: "size-5 text-[10px]",
1057
+ sm: "size-6 text-xs",
1058
+ default: "size-8 text-sm",
1059
+ lg: "size-10 text-base"
1060
+ };
800
1061
  var AvatarContext = (0, import_react5.createContext)(null);
801
1062
  function Avatar({ className, size = "default", children, ...props }) {
802
1063
  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 }) });
1064
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(AvatarContext.Provider, { value: { status, setStatus }, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1065
+ "div",
1066
+ {
1067
+ "data-slot": "avatar",
1068
+ "data-size": size,
1069
+ className: cn(
1070
+ "group/avatar relative flex shrink-0 overflow-hidden rounded-full bg-muted text-muted-foreground",
1071
+ sizes[size],
1072
+ className
1073
+ ),
1074
+ ...props,
1075
+ children
1076
+ }
1077
+ ) });
804
1078
  }
805
- function AvatarImage({ className, src, onError, onLoad, ...props }) {
1079
+ function AvatarImage({
1080
+ className,
1081
+ src,
1082
+ onError,
1083
+ onLoad,
1084
+ ...props
1085
+ }) {
806
1086
  const avatar = (0, import_react5.useContext)(AvatarContext);
807
1087
  const [failed, setFailed] = (0, import_react5.useState)(false);
808
1088
  (0, import_react5.useEffect)(() => {
@@ -810,34 +1090,83 @@ function AvatarImage({ className, src, onError, onLoad, ...props }) {
810
1090
  avatar?.setStatus(src ? "loading" : "idle");
811
1091
  }, [avatar?.setStatus, src]);
812
1092
  if (failed || avatar?.status === "error") return null;
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) => {
814
- avatar?.setStatus("loaded");
815
- onLoad?.(event);
816
- }, onError: (event) => {
817
- setFailed(true);
818
- avatar?.setStatus("error");
819
- onError?.(event);
820
- }, ...props });
1093
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1094
+ "img",
1095
+ {
1096
+ "data-slot": "avatar-image",
1097
+ src,
1098
+ alt: "",
1099
+ className: cn("aspect-square size-full object-cover", className),
1100
+ onLoad: (event) => {
1101
+ avatar?.setStatus("loaded");
1102
+ onLoad?.(event);
1103
+ },
1104
+ onError: (event) => {
1105
+ setFailed(true);
1106
+ avatar?.setStatus("error");
1107
+ onError?.(event);
1108
+ },
1109
+ ...props
1110
+ }
1111
+ );
821
1112
  }
822
1113
  function AvatarFallback({ className, ...props }) {
823
1114
  const avatar = (0, import_react5.useContext)(AvatarContext);
824
1115
  if (avatar?.status === "loaded") return null;
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 });
1116
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1117
+ "span",
1118
+ {
1119
+ "data-slot": "avatar-fallback",
1120
+ className: cn("flex size-full items-center justify-center font-medium", className),
1121
+ ...props
1122
+ }
1123
+ );
826
1124
  }
827
1125
  function AvatarBadge({ 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 });
1126
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1127
+ "span",
1128
+ {
1129
+ "data-slot": "avatar-badge",
1130
+ className: cn(
1131
+ "absolute right-0 bottom-0 size-2.5 rounded-full bg-success ring-2 ring-background",
1132
+ className
1133
+ ),
1134
+ ...props
1135
+ }
1136
+ );
829
1137
  }
830
1138
  function AvatarGroup({ 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 });
1139
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1140
+ "div",
1141
+ {
1142
+ "data-slot": "avatar-group",
1143
+ className: cn(
1144
+ "flex -space-x-2 [&>[data-slot=avatar]]:ring-2 [&>[data-slot=avatar]]:ring-background",
1145
+ className
1146
+ ),
1147
+ ...props
1148
+ }
1149
+ );
832
1150
  }
833
1151
  function AvatarGroupCount({ 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 });
1152
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1153
+ "span",
1154
+ {
1155
+ "data-slot": "avatar-group-count",
1156
+ className: cn(
1157
+ "flex size-8 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground ring-2 ring-background",
1158
+ className
1159
+ ),
1160
+ ...props
1161
+ }
1162
+ );
835
1163
  }
836
1164
 
837
1165
  // src/ui/badge/badge.tsx
1166
+ var import_react_aria_components5 = require("react-aria-components");
1167
+
1168
+ // src/ui/badge/badge-variants.ts
838
1169
  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
1170
  var badgeVariants = (0, import_class_variance_authority4.cva)(
842
1171
  "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",
843
1172
  {
@@ -859,8 +1188,11 @@ var badgeVariants = (0, import_class_variance_authority4.cva)(
859
1188
  defaultVariants: { variant: "default" }
860
1189
  }
861
1190
  );
1191
+
1192
+ // src/ui/badge/badge.tsx
1193
+ var import_jsx_runtime8 = require("react/jsx-runtime");
862
1194
  function Badge({ className, variant, ...props }) {
863
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1195
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
864
1196
  "span",
865
1197
  {
866
1198
  "data-slot": "badge",
@@ -871,8 +1203,8 @@ function Badge({ className, variant, ...props }) {
871
1203
  );
872
1204
  }
873
1205
  function BadgeLink({ className, variant, ...props }) {
874
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
875
- import_react_aria_components4.Link,
1206
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1207
+ import_react_aria_components5.Link,
876
1208
  {
877
1209
  "data-slot": "badge",
878
1210
  "data-variant": variant ?? "default",
@@ -883,33 +1215,72 @@ function BadgeLink({ className, variant, ...props }) {
883
1215
  }
884
1216
 
885
1217
  // src/ui/breadcrumb/breadcrumb.tsx
886
- var import_react_aria_components5 = require("react-aria-components");
887
- var import_jsx_runtime8 = require("react/jsx-runtime");
1218
+ var import_react_aria_components6 = require("react-aria-components");
1219
+ var import_jsx_runtime9 = require("react/jsx-runtime");
888
1220
  function Breadcrumbs({ 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 });
1221
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1222
+ import_react_aria_components6.Breadcrumbs,
1223
+ {
1224
+ "data-slot": "breadcrumbs",
1225
+ className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className),
1226
+ ...props
1227
+ }
1228
+ );
890
1229
  }
891
1230
  function Breadcrumb({ 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 });
1231
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1232
+ import_react_aria_components6.Breadcrumb,
1233
+ {
1234
+ "data-slot": "breadcrumb",
1235
+ className: cn("inline-flex items-center gap-1.5", className),
1236
+ ...props
1237
+ }
1238
+ );
893
1239
  }
894
1240
  function BreadcrumbLink({ 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 });
1241
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1242
+ import_react_aria_components6.Link,
1243
+ {
1244
+ "data-slot": "breadcrumb-link",
1245
+ className: cn("transition-colors hover:text-foreground", className),
1246
+ ...props
1247
+ }
1248
+ );
896
1249
  }
897
1250
  function BreadcrumbPage({ 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 });
1251
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1252
+ "span",
1253
+ {
1254
+ "data-slot": "breadcrumb-page",
1255
+ "aria-current": "page",
1256
+ className: cn("font-medium text-foreground", className),
1257
+ ...props
1258
+ }
1259
+ );
899
1260
  }
900
- function BreadcrumbSeparator({ children = "/", className, ...props }) {
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 });
1261
+ function BreadcrumbSeparator({
1262
+ children = "/",
1263
+ className,
1264
+ ...props
1265
+ }) {
1266
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1267
+ "span",
1268
+ {
1269
+ "data-slot": "breadcrumb-separator",
1270
+ "aria-hidden": "true",
1271
+ className: cn("text-muted-foreground/60", className),
1272
+ ...props,
1273
+ children
1274
+ }
1275
+ );
902
1276
  }
903
1277
 
904
- // src/ui/button-group/button-group.tsx
905
- var import_class_variance_authority5 = require("class-variance-authority");
906
-
907
1278
  // src/ui/separator/separator.tsx
908
- var import_react_aria_components6 = require("react-aria-components");
909
- var import_jsx_runtime9 = require("react/jsx-runtime");
1279
+ var import_react_aria_components7 = require("react-aria-components");
1280
+ var import_jsx_runtime10 = require("react/jsx-runtime");
910
1281
  function Separator({ className, orientation = "horizontal", ...props }) {
911
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
912
- import_react_aria_components6.Separator,
1282
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1283
+ import_react_aria_components7.Separator,
913
1284
  {
914
1285
  "data-slot": "separator",
915
1286
  orientation,
@@ -922,11 +1293,8 @@ function Separator({ className, orientation = "horizontal", ...props }) {
922
1293
  );
923
1294
  }
924
1295
 
925
- // src/ui/button-group/button-group.tsx
926
- var import_jsx_runtime10 = (
927
- // biome-ignore lint/a11y/useSemanticElements: fieldset would impose form semantics on a generic action group.
928
- require("react/jsx-runtime")
929
- );
1296
+ // src/ui/button-group/button-group-variants.ts
1297
+ var import_class_variance_authority5 = require("class-variance-authority");
930
1298
  var buttonGroupVariants = (0, import_class_variance_authority5.cva)(
931
1299
  "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",
932
1300
  {
@@ -941,12 +1309,18 @@ var buttonGroupVariants = (0, import_class_variance_authority5.cva)(
941
1309
  }
942
1310
  }
943
1311
  );
1312
+
1313
+ // src/ui/button-group/button-group.tsx
1314
+ var import_jsx_runtime11 = (
1315
+ // biome-ignore lint/a11y/useSemanticElements: fieldset would impose form semantics on a generic action group.
1316
+ require("react/jsx-runtime")
1317
+ );
944
1318
  function ButtonGroup({
945
1319
  className,
946
1320
  orientation,
947
1321
  ...props
948
1322
  }) {
949
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1323
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
950
1324
  "div",
951
1325
  {
952
1326
  role: "group",
@@ -973,7 +1347,7 @@ function ButtonGroupText({
973
1347
  };
974
1348
  return render(renderProps);
975
1349
  }
976
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1350
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
977
1351
  "div",
978
1352
  {
979
1353
  "data-slot": "button-group-text",
@@ -990,7 +1364,7 @@ function ButtonGroupSeparator({
990
1364
  orientation = "vertical",
991
1365
  ...props
992
1366
  }) {
993
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1367
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
994
1368
  Separator,
995
1369
  {
996
1370
  "data-slot": "button-group-separator",
@@ -1005,9 +1379,9 @@ function ButtonGroupSeparator({
1005
1379
  }
1006
1380
 
1007
1381
  // src/ui/card/card.tsx
1008
- var import_jsx_runtime11 = require("react/jsx-runtime");
1382
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1009
1383
  function Card({ className, size = "default", ...props }) {
1010
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1384
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1011
1385
  "div",
1012
1386
  {
1013
1387
  "data-slot": "card",
@@ -1021,7 +1395,7 @@ function Card({ className, size = "default", ...props }) {
1021
1395
  );
1022
1396
  }
1023
1397
  function CardHeader({ className, ...props }) {
1024
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1398
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1025
1399
  "div",
1026
1400
  {
1027
1401
  "data-slot": "card-header",
@@ -1034,7 +1408,7 @@ function CardHeader({ className, ...props }) {
1034
1408
  );
1035
1409
  }
1036
1410
  function CardTitle({ className, ...props }) {
1037
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1411
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1038
1412
  "div",
1039
1413
  {
1040
1414
  "data-slot": "card-title",
@@ -1047,7 +1421,7 @@ function CardTitle({ className, ...props }) {
1047
1421
  );
1048
1422
  }
1049
1423
  function CardDescription({ className, ...props }) {
1050
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1424
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1051
1425
  "div",
1052
1426
  {
1053
1427
  "data-slot": "card-description",
@@ -1057,7 +1431,7 @@ function CardDescription({ className, ...props }) {
1057
1431
  );
1058
1432
  }
1059
1433
  function CardAction({ className, ...props }) {
1060
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1434
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1061
1435
  "div",
1062
1436
  {
1063
1437
  "data-slot": "card-action",
@@ -1067,10 +1441,10 @@ function CardAction({ className, ...props }) {
1067
1441
  );
1068
1442
  }
1069
1443
  function CardContent({ className, ...props }) {
1070
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props });
1444
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props });
1071
1445
  }
1072
1446
  function CardFooter({ className, ...props }) {
1073
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1447
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1074
1448
  "div",
1075
1449
  {
1076
1450
  "data-slot": "card-footer",
@@ -1084,12 +1458,12 @@ function CardFooter({ className, ...props }) {
1084
1458
  }
1085
1459
 
1086
1460
  // src/ui/checkbox/checkbox.tsx
1087
- var import_lucide_react2 = require("lucide-react");
1088
- var import_react_aria_components7 = require("react-aria-components");
1089
- var import_jsx_runtime12 = require("react/jsx-runtime");
1461
+ var import_lucide_react3 = require("lucide-react");
1462
+ var import_react_aria_components8 = require("react-aria-components");
1463
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1090
1464
  function Checkbox({ className, children, ...props }) {
1091
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1092
- import_react_aria_components7.Checkbox,
1465
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1466
+ import_react_aria_components8.Checkbox,
1093
1467
  {
1094
1468
  "data-slot": "checkbox",
1095
1469
  className: cn(
@@ -1097,13 +1471,13 @@ function Checkbox({ className, children, ...props }) {
1097
1471
  className
1098
1472
  ),
1099
1473
  ...props,
1100
- children: (state) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
1101
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1474
+ children: (state) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1475
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1102
1476
  "span",
1103
1477
  {
1104
1478
  "aria-hidden": "true",
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",
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" })
1479
+ className: "border-border bg-background text-primary-foreground group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-ring/50 grid size-4 place-items-center rounded border transition-colors group-data-focus-visible:ring-3",
1480
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" })
1107
1481
  }
1108
1482
  ),
1109
1483
  typeof children === "function" ? children(state) : children
@@ -1113,11 +1487,11 @@ function Checkbox({ className, children, ...props }) {
1113
1487
  }
1114
1488
 
1115
1489
  // 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);
1490
+ var React4 = __toESM(require("react"), 1);
1491
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1492
+ var CollapsibleContext = React4.createContext(null);
1119
1493
  function useCollapsibleContext() {
1120
- const context = React3.useContext(CollapsibleContext);
1494
+ const context = React4.useContext(CollapsibleContext);
1121
1495
  if (!context) throw new Error("Collapsible components must be rendered within Collapsible.");
1122
1496
  return context;
1123
1497
  }
@@ -1128,27 +1502,32 @@ function Collapsible({
1128
1502
  open: controlledOpen,
1129
1503
  ...props
1130
1504
  }) {
1131
- const [uncontrolledOpen, setUncontrolledOpen] = React3.useState(defaultOpen);
1132
- const contentId = React3.useId();
1505
+ const [uncontrolledOpen, setUncontrolledOpen] = React4.useState(defaultOpen);
1506
+ const contentId = React4.useId();
1133
1507
  const open = controlledOpen ?? uncontrolledOpen;
1134
- const setOpen = React3.useCallback(
1508
+ const setOpen = React4.useCallback(
1135
1509
  (nextOpen) => {
1136
1510
  if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
1137
1511
  onOpenChange?.(nextOpen);
1138
1512
  },
1139
1513
  [controlledOpen, onOpenChange]
1140
1514
  );
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 }) });
1515
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(CollapsibleContext.Provider, { value: { contentId, open, setOpen }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { "data-slot": "collapsible", "data-state": open ? "open" : "closed", ...props, children }) });
1142
1516
  }
1143
- function CollapsibleTrigger({ asChild = false, children, onClick, ...props }) {
1517
+ function CollapsibleTrigger({
1518
+ asChild = false,
1519
+ children,
1520
+ onClick,
1521
+ ...props
1522
+ }) {
1144
1523
  const { contentId, open, setOpen } = useCollapsibleContext();
1145
1524
  const handleClick = (event) => {
1146
1525
  onClick?.(event);
1147
1526
  if (!event.defaultPrevented) setOpen(!open);
1148
1527
  };
1149
- if (asChild && React3.isValidElement(children)) {
1528
+ if (asChild && React4.isValidElement(children)) {
1150
1529
  const child = children;
1151
- return React3.cloneElement(child, {
1530
+ return React4.cloneElement(child, {
1152
1531
  ...props,
1153
1532
  "aria-controls": contentId,
1154
1533
  "aria-expanded": open,
@@ -1160,7 +1539,7 @@ function CollapsibleTrigger({ asChild = false, children, onClick, ...props }) {
1160
1539
  }
1161
1540
  });
1162
1541
  }
1163
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1542
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1164
1543
  "button",
1165
1544
  {
1166
1545
  type: "button",
@@ -1177,30 +1556,108 @@ function CollapsibleTrigger({ asChild = false, children, onClick, ...props }) {
1177
1556
  function CollapsibleContent({ children, ...props }) {
1178
1557
  const { contentId, open } = useCollapsibleContext();
1179
1558
  if (!open) return null;
1180
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { id: contentId, "data-slot": "collapsible-content", "data-state": "open", ...props, children });
1559
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { id: contentId, "data-slot": "collapsible-content", "data-state": "open", ...props, children });
1181
1560
  }
1182
1561
 
1183
1562
  // src/ui/combobox/combobox.tsx
1184
1563
  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;
1564
+ var import_react_aria_components9 = require("react-aria-components");
1565
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1566
+ var Combobox = import_react_aria_components9.ComboBox;
1188
1567
  function ComboboxInput({ 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 });
1568
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1569
+ import_react_aria_components9.Input,
1570
+ {
1571
+ "data-slot": "combobox-input",
1572
+ className: cn(
1573
+ "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",
1574
+ className
1575
+ ),
1576
+ ...props
1577
+ }
1578
+ );
1190
1579
  }
1191
1580
  function ComboboxContent({ 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 });
1581
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1582
+ import_react_aria_components9.Popover,
1583
+ {
1584
+ "data-slot": "combobox-content",
1585
+ className: cn(
1586
+ "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",
1587
+ className
1588
+ ),
1589
+ ...props
1590
+ }
1591
+ );
1193
1592
  }
1194
- function ComboboxList({ className, emptyState, ...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 });
1593
+ function ComboboxList({
1594
+ className,
1595
+ emptyState,
1596
+ ...props
1597
+ }) {
1598
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1599
+ import_react_aria_components9.ListBox,
1600
+ {
1601
+ "data-slot": "combobox-list",
1602
+ className: cn("max-h-64 overflow-y-auto", className),
1603
+ renderEmptyState: emptyState ? () => emptyState : void 0,
1604
+ ...props
1605
+ }
1606
+ );
1196
1607
  }
1197
- function ComboboxItem({ className, children, ...props }) {
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 });
1608
+ function ComboboxItem({
1609
+ className,
1610
+ children,
1611
+ ...props
1612
+ }) {
1613
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1614
+ import_react_aria_components9.ListBoxItem,
1615
+ {
1616
+ "data-slot": "combobox-item",
1617
+ className: cn(
1618
+ "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",
1619
+ className
1620
+ ),
1621
+ ...props,
1622
+ children
1623
+ }
1624
+ );
1199
1625
  }
1200
- function HighlightMatch({ text, query, className }) {
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}`)) });
1626
+ function HighlightMatch({
1627
+ text,
1628
+ query,
1629
+ className
1630
+ }) {
1631
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className, children: getTextMatchParts(text, query).map(
1632
+ (part, index) => part.match ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1633
+ "mark",
1634
+ {
1635
+ className: "bg-accent text-accent-foreground rounded px-0.5",
1636
+ children: part.text
1637
+ },
1638
+ `${part.text}-${index}`
1639
+ ) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react6.Fragment, { children: part.text }, `${part.text}-${index}`)
1640
+ ) });
1202
1641
  }
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 }) {
1642
+ function AutocompleteCombobox({
1643
+ items,
1644
+ getItemKey,
1645
+ getItemLabel,
1646
+ renderItem,
1647
+ inputValue: controlledInputValue,
1648
+ onInputChange,
1649
+ selectedKey,
1650
+ onSelectionChange,
1651
+ label,
1652
+ description,
1653
+ errorMessage,
1654
+ emptyState = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-muted-foreground px-3 py-7 text-center text-sm", children: "No hay resultados." }),
1655
+ suggestion = true,
1656
+ placeholder,
1657
+ className,
1658
+ onKeyDown: _onKeyDown,
1659
+ ...props
1660
+ }) {
1204
1661
  const [internalInputValue, setInternalInputValue] = (0, import_react6.useState)("");
1205
1662
  const inputValue = controlledInputValue ?? internalInputValue;
1206
1663
  const setInputValue = (value) => {
@@ -1208,8 +1665,16 @@ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inp
1208
1665
  onInputChange?.(value);
1209
1666
  };
1210
1667
  const normalizedQuery = inputValue.trim().toLocaleLowerCase();
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]);
1668
+ const filteredItems = (0, import_react6.useMemo)(
1669
+ () => normalizedQuery ? items.filter((item) => getItemLabel(item).toLocaleLowerCase().includes(normalizedQuery)) : [...items],
1670
+ [getItemLabel, items, normalizedQuery]
1671
+ );
1672
+ const suggestedItem = (0, import_react6.useMemo)(
1673
+ () => !suggestion || !normalizedQuery ? void 0 : items.find(
1674
+ (item) => getItemLabel(item).toLocaleLowerCase().startsWith(normalizedQuery) && getItemLabel(item).length > inputValue.length
1675
+ ),
1676
+ [getItemLabel, inputValue.length, items, normalizedQuery, suggestion]
1677
+ );
1213
1678
  const suggestionLabel = suggestedItem ? getItemLabel(suggestedItem) : void 0;
1214
1679
  const acceptSuggestion = () => {
1215
1680
  if (!suggestedItem || !suggestionLabel) return false;
@@ -1220,124 +1685,109 @@ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inp
1220
1685
  const handleKeyDown = (event) => {
1221
1686
  if ((event.key === "Tab" || event.key === "Enter") && acceptSuggestion()) event.preventDefault();
1222
1687
  };
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) => {
1224
- const item = filteredItems.find((candidate) => String(getItemKey(candidate)) === String(key));
1225
- if (item) setInputValue(getItemLabel(item));
1226
- onSelectionChange?.(key, item);
1227
- }, children: [
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 }),
1232
- suggestionLabel.slice(inputValue.length)
1233
- ] }),
1234
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ComboboxInput, { "aria-autocomplete": suggestionLabel ? "both" : "list", placeholder, onKeyDown: handleKeyDown, className: "relative z-10 bg-transparent" })
1235
- ] }),
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 }) }) }) })
1239
- ] });
1688
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1689
+ import_react_aria_components9.ComboBox,
1690
+ {
1691
+ ...props,
1692
+ className: cn("group/combobox flex w-full flex-col gap-1.5", className),
1693
+ items: filteredItems,
1694
+ selectedKey,
1695
+ inputValue,
1696
+ onInputChange: setInputValue,
1697
+ onSelectionChange: (key) => {
1698
+ const item = filteredItems.find(
1699
+ (candidate) => String(getItemKey(candidate)) === String(key)
1700
+ );
1701
+ if (item) setInputValue(getItemLabel(item));
1702
+ onSelectionChange?.(key, item);
1703
+ },
1704
+ children: [
1705
+ label && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.Label, { className: "text-foreground text-sm font-medium", children: label }),
1706
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "relative", children: [
1707
+ suggestionLabel && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
1708
+ "span",
1709
+ {
1710
+ "aria-hidden": "true",
1711
+ className: "text-muted-foreground/60 pointer-events-none absolute inset-y-0 left-2.5 z-0 flex items-center text-sm whitespace-pre",
1712
+ children: [
1713
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-transparent", children: inputValue }),
1714
+ suggestionLabel.slice(inputValue.length)
1715
+ ]
1716
+ }
1717
+ ),
1718
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1719
+ ComboboxInput,
1720
+ {
1721
+ "aria-autocomplete": suggestionLabel ? "both" : "list",
1722
+ placeholder,
1723
+ onKeyDown: handleKeyDown,
1724
+ className: "relative z-10 bg-transparent"
1725
+ }
1726
+ )
1727
+ ] }),
1728
+ description && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.Text, { slot: "description", className: "text-muted-foreground text-xs", children: description }),
1729
+ errorMessage && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.FieldError, { className: "text-destructive text-xs", children: errorMessage }),
1730
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ComboboxContent, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ComboboxList, { emptyState, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ComboboxItem, { id: getItemKey(item), textValue: getItemLabel(item), children: renderItem ? renderItem(item, inputValue) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(HighlightMatch, { text: getItemLabel(item), query: inputValue }) }) }) })
1731
+ ]
1732
+ }
1733
+ );
1240
1734
  }
1241
1735
 
1242
1736
  // src/ui/command/command.tsx
1243
- var import_react_aria_components9 = require("react-aria-components");
1244
- var import_jsx_runtime15 = require("react/jsx-runtime");
1737
+ var import_react_aria_components10 = require("react-aria-components");
1738
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1245
1739
  function Command({ className, ...props }) {
1246
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.ComboBox, { "data-slot": "command", className: cn("w-full", className), ...props });
1740
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.ComboBox, { "data-slot": "command", className: cn("w-full", className), ...props });
1247
1741
  }
1248
1742
  function CommandInput({ 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 });
1743
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1744
+ import_react_aria_components10.Input,
1745
+ {
1746
+ "data-slot": "command-input",
1747
+ className: cn(
1748
+ "h-9 w-full border-0 bg-transparent px-3 text-sm text-foreground outline-none placeholder:text-muted-foreground",
1749
+ className
1750
+ ),
1751
+ ...props
1752
+ }
1753
+ );
1250
1754
  }
1251
1755
  function CommandContent({ 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 });
1253
- }
1254
- function CommandList({ 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 });
1256
- }
1257
- function CommandItem({ 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 });
1756
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1757
+ import_react_aria_components10.Popover,
1758
+ {
1759
+ "data-slot": "command-content",
1760
+ className: cn(
1761
+ "w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 shadow-lg outline-none",
1762
+ className
1763
+ ),
1764
+ ...props
1765
+ }
1766
+ );
1259
1767
  }
1260
-
1261
- // src/ui/modal-dialog/modal-dialog.tsx
1262
- var import_lucide_react3 = require("lucide-react");
1263
- var import_react_aria_components10 = require("react-aria-components");
1264
- var import_jsx_runtime16 = require("react/jsx-runtime");
1265
- var sizeClasses = {
1266
- sm: "w-[min(calc(100dvw-2rem),24rem)]",
1267
- md: "w-[min(calc(100dvw-2rem),28rem)]",
1268
- lg: "w-[min(calc(100dvw-2rem),36rem)]"
1269
- };
1270
- function ModalDialog({
1271
- open,
1272
- onOpenChange,
1273
- title,
1274
- description,
1275
- children,
1276
- footer,
1277
- size = "sm",
1278
- showCloseButton = true,
1768
+ function CommandList({
1279
1769
  className,
1280
- footerClassName,
1281
1770
  ...props
1282
1771
  }) {
1283
- const layoutClass = children ? footer ? "grid-rows-[auto_minmax(0,1fr)_auto]" : "grid-rows-[auto_minmax(0,1fr)]" : "grid-rows-[auto_auto]";
1284
1772
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1285
- import_react_aria_components10.ModalOverlay,
1773
+ import_react_aria_components10.ListBox,
1286
1774
  {
1287
- isOpen: open,
1288
- onOpenChange,
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",
1290
- ...props,
1291
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1292
- import_react_aria_components10.Modal,
1293
- {
1294
- className: cn(
1295
- "max-h-[calc(100dvh-2rem)] outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out",
1296
- sizeClasses[size],
1297
- className
1298
- ),
1299
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1300
- import_react_aria_components10.Dialog,
1301
- {
1302
- className: cn(
1303
- "grid max-h-[calc(100dvh-2rem)] overflow-hidden rounded-xl bg-background text-foreground shadow-xl outline-none",
1304
- layoutClass
1305
- ),
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
1311
- ] }),
1312
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1313
- Button,
1314
- {
1315
- "aria-label": "Cerrar di\xE1logo",
1316
- variant: "ghost",
1317
- size: "icon",
1318
- className: "-mr-2 -mt-1",
1319
- onPress: close,
1320
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react3.X, { "aria-hidden": "true", className: "size-4" })
1321
- }
1322
- ) : null
1323
- ] }),
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)(
1326
- "footer",
1327
- {
1328
- "data-slot": "modal-dialog-footer",
1329
- className: cn(
1330
- "flex flex-col-reverse gap-2 border-t border-border bg-muted/50 px-5 py-4 sm:flex-row sm:flex-wrap sm:justify-end",
1331
- footerClassName
1332
- ),
1333
- children: footer
1334
- }
1335
- ) : null
1336
- ] })
1337
- }
1338
- )
1339
- }
1340
- )
1775
+ "data-slot": "command-list",
1776
+ className: cn("max-h-72 overflow-y-auto", className),
1777
+ ...props
1778
+ }
1779
+ );
1780
+ }
1781
+ function CommandItem({ className, ...props }) {
1782
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1783
+ import_react_aria_components10.ListBoxItem,
1784
+ {
1785
+ "data-slot": "command-item",
1786
+ className: cn(
1787
+ "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",
1788
+ className
1789
+ ),
1790
+ ...props
1341
1791
  }
1342
1792
  );
1343
1793
  }
@@ -1355,20 +1805,24 @@ function ConfirmDialog({
1355
1805
  pending = false,
1356
1806
  onConfirm
1357
1807
  }) {
1358
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1359
- ModalDialog,
1360
- {
1361
- open,
1362
- onOpenChange,
1363
- title,
1364
- description,
1365
- showCloseButton: false,
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 })
1369
- ] })
1370
- }
1371
- );
1808
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogContent, { children: [
1809
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogHeader, { children: [
1810
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialogTitle, { children: title }),
1811
+ description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialogDescription, { children: description }) : null
1812
+ ] }),
1813
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogFooter, { children: [
1814
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
1815
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1816
+ Button,
1817
+ {
1818
+ variant: destructive ? "destructive" : "default",
1819
+ isDisabled: pending,
1820
+ onPress: onConfirm,
1821
+ children: confirmLabel
1822
+ }
1823
+ )
1824
+ ] })
1825
+ ] }) });
1372
1826
  }
1373
1827
 
1374
1828
  // src/ui/danger-zone/danger-zone.tsx
@@ -1388,14 +1842,14 @@ function DangerZone({
1388
1842
  {
1389
1843
  slot: "trigger",
1390
1844
  "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",
1845
+ className: "group/danger focus-visible:ring-ring/50 flex w-full items-center gap-3 px-4 text-left outline-none focus-visible:ring-3",
1392
1846
  children: [
1393
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.ShieldAlert, { className: "size-4 shrink-0 text-destructive" }),
1847
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.ShieldAlert, { className: "text-destructive size-4 shrink-0" }),
1394
1848
  /* @__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 })
1849
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "font-heading text-destructive text-base leading-snug font-medium", children: title }),
1850
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-muted-foreground text-xs", children: description })
1397
1851
  ] }),
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" })
1852
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.ChevronDown, { className: "text-muted-foreground size-4 shrink-0 transition-transform group-aria-expanded/danger:rotate-180" })
1399
1853
  ]
1400
1854
  }
1401
1855
  ) }),
@@ -1403,160 +1857,13 @@ function DangerZone({
1403
1857
  ] }) });
1404
1858
  }
1405
1859
 
1406
- // src/ui/dialog/dialog.tsx
1860
+ // src/ui/doc-preview/doc-preview.tsx
1407
1861
  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
1862
  var import_jsx_runtime19 = require("react/jsx-runtime");
1411
- var DialogContext = React4.createContext(null);
1412
- function useDialogContext() {
1413
- const context = React4.useContext(DialogContext);
1414
- if (!context) throw new Error("Dialog components must be rendered within Dialog.");
1415
- return context;
1416
- }
1417
- function Dialog({ children, defaultOpen = false, onOpenChange, open: controlledOpen }) {
1418
- const [uncontrolledOpen, setUncontrolledOpen] = React4.useState(defaultOpen);
1419
- const open = controlledOpen ?? uncontrolledOpen;
1420
- const setOpen = React4.useCallback(
1421
- (nextOpen) => {
1422
- if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
1423
- onOpenChange?.(nextOpen);
1424
- },
1425
- [controlledOpen, onOpenChange]
1426
- );
1427
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogContext.Provider, { value: { open, setOpen }, children });
1428
- }
1429
- function DialogTrigger({ asChild = false, children, onClick, ...props }) {
1430
- const { setOpen } = useDialogContext();
1431
- const handleClick = (event) => {
1432
- onClick?.(event);
1433
- if (!event.defaultPrevented) setOpen(true);
1434
- };
1435
- if (asChild && React4.isValidElement(children)) {
1436
- const child = children;
1437
- return React4.cloneElement(child, {
1438
- ...props,
1439
- "data-slot": "dialog-trigger",
1440
- onClick: (event) => {
1441
- child.props.onClick?.(event);
1442
- handleClick(event);
1443
- }
1444
- });
1445
- }
1446
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
1447
- }
1448
- function DialogPortal({ children }) {
1449
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_jsx_runtime19.Fragment, { children });
1450
- }
1451
- function DialogOverlay({ children, className, ...props }) {
1452
- const { open, setOpen } = useDialogContext();
1453
- if (!open) return null;
1454
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1455
- import_react_aria_components12.ModalOverlay,
1456
- {
1457
- "data-slot": "dialog-overlay",
1458
- isDismissable: true,
1459
- isOpen: open,
1460
- onOpenChange: setOpen,
1461
- className: cn(
1462
- "fixed inset-0 isolate z-50 grid place-items-center bg-black/10 p-4 duration-100 supports-backdrop-filter:backdrop-blur-xs data-entering:animate-ui-overlay-in data-exiting:animate-ui-overlay-out",
1463
- className
1464
- ),
1465
- ...props,
1466
- children
1467
- }
1468
- );
1469
- }
1470
- function DialogContent({
1471
- children,
1472
- className,
1473
- onOverlayClick,
1474
- showCloseButton = true,
1475
- ...props
1476
- }) {
1477
- const { setOpen } = useDialogContext();
1478
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1479
- DialogOverlay,
1480
- {
1481
- onClick: (event) => {
1482
- if (event.target === event.currentTarget) onOverlayClick?.(event);
1483
- },
1484
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1485
- import_react_aria_components12.Modal,
1486
- {
1487
- className: cn(
1488
- "w-full max-w-[calc(100%-2rem)] max-h-[calc(100dvh-2rem)] outline-none sm:max-w-sm",
1489
- className
1490
- ),
1491
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1492
- import_react_aria_components12.Dialog,
1493
- {
1494
- "data-slot": "dialog-content",
1495
- className: cn(
1496
- "grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-4 text-sm text-foreground ring-1 ring-foreground/10 outline-none",
1497
- className
1498
- ),
1499
- ...props,
1500
- children: [
1501
- children,
1502
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1503
- Button,
1504
- {
1505
- "aria-label": "Cerrar di\xE1logo",
1506
- "data-slot": "dialog-close",
1507
- variant: "ghost",
1508
- className: "absolute top-2 right-2",
1509
- size: "icon-sm",
1510
- onPress: () => setOpen(false),
1511
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.XIcon, {})
1512
- }
1513
- ) : null
1514
- ]
1515
- }
1516
- )
1517
- }
1518
- )
1519
- }
1520
- ) });
1521
- }
1522
- function DialogClose({ asChild = false, children, onClick, ...props }) {
1523
- const { setOpen } = useDialogContext();
1524
- if (asChild && React4.isValidElement(children)) {
1525
- const child = children;
1526
- return React4.cloneElement(child, {
1527
- ...props,
1528
- "data-slot": "dialog-close",
1529
- onClick: (event) => {
1530
- child.props.onClick?.(event);
1531
- if (!event.defaultPrevented) setOpen(false);
1532
- }
1533
- });
1534
- }
1535
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
1536
- }
1537
- function DialogHeader({ className, ...props }) {
1538
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
1539
- }
1540
- function DialogFooter({ className, showCloseButton = false, children, ...props }) {
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: [
1542
- children,
1543
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogClose, { variant: "outline", children: "Cerrar" }) : null
1544
- ] });
1545
- }
1546
- function DialogTitle({ 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 });
1548
- }
1549
- function DialogDescription({ 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
1863
  function DocPreview({ url, mimeType, name }) {
1557
- if (!url) return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Fallback, { mimeType, reason: "no-url" });
1864
+ if (!url) return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Fallback, { mimeType, reason: "no-url" });
1558
1865
  if (mimeType === "application/pdf" || mimeType === "text/plain" || mimeType === "text/csv") {
1559
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1866
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1560
1867
  "iframe",
1561
1868
  {
1562
1869
  src: url,
@@ -1567,53 +1874,34 @@ function DocPreview({ url, mimeType, name }) {
1567
1874
  );
1568
1875
  }
1569
1876
  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" }) });
1877
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "bg-muted/30 flex justify-center rounded-sm p-6", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("img", { src: url, alt: name, className: "max-h-[75vh] max-w-full rounded object-contain" }) });
1571
1878
  }
1572
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Fallback, { mimeType, reason: "unsupported" });
1879
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Fallback, { mimeType, reason: "unsupported" });
1573
1880
  }
1574
- function Fallback({ mimeType, reason }) {
1575
- const Icon = mimeType?.startsWith("image/") ? import_lucide_react6.Image : import_lucide_react6.FileText;
1881
+ function Fallback({
1882
+ mimeType,
1883
+ reason
1884
+ }) {
1885
+ const Icon = mimeType?.startsWith("image/") ? import_lucide_react5.Image : import_lucide_react5.FileText;
1576
1886
  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." })
1887
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "text-muted-foreground flex flex-col items-center justify-center gap-2 py-14", children: [
1888
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { className: "size-9 opacity-30" }),
1889
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm", children: message }),
1890
+ mimeType ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
1891
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
1582
1892
  ] });
1583
1893
  }
1584
1894
 
1585
- // src/ui/drawer/drawer.tsx
1586
- var import_react_aria_components13 = require("react-aria-components");
1587
- var import_jsx_runtime21 = require("react/jsx-runtime");
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" };
1589
- function Drawer({ children, side = "right", className, ...props }) {
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 }) }) });
1591
- }
1592
- function DrawerHeader({ 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 });
1594
- }
1595
- function DrawerFooter({ 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 });
1597
- }
1598
- function DrawerTitle({ className, ...props }) {
1599
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components13.Heading, { slot: "title", "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
1600
- }
1601
- function DrawerDescription({ className, ...props }) {
1602
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
1603
- }
1604
-
1605
1895
  // src/ui/dropdown-menu/dropdown-menu.tsx
1606
- var React5 = require("react");
1607
1896
  var import_class_variance_authority6 = require("class-variance-authority");
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");
1611
- function DropdownMenuTrigger({
1612
- ...props
1613
- }) {
1614
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components14.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
1897
+ var import_lucide_react6 = require("lucide-react");
1898
+ var React5 = require("react");
1899
+ var import_react_aria_components12 = require("react-aria-components");
1900
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1901
+ function DropdownMenuTrigger({ ...props }) {
1902
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components12.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
1615
1903
  }
1616
- function DropdownMenu({
1904
+ function DropdownMenuContent({
1617
1905
  "data-slot": dataSlot = "dropdown-menu-content",
1618
1906
  placement = "bottom start",
1619
1907
  offset = 4,
@@ -1622,16 +1910,19 @@ function DropdownMenu({
1622
1910
  children,
1623
1911
  ...props
1624
1912
  }) {
1625
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1626
- import_react_aria_components14.Popover,
1913
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1914
+ import_react_aria_components12.Popover,
1627
1915
  {
1628
1916
  "data-slot": dataSlot,
1629
1917
  placement,
1630
1918
  offset,
1631
1919
  crossOffset,
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),
1633
- children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1634
- import_react_aria_components14.Menu,
1920
+ className: cn(
1921
+ "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",
1922
+ className
1923
+ ),
1924
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1925
+ import_react_aria_components12.Menu,
1635
1926
  {
1636
1927
  className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
1637
1928
  ...props,
@@ -1641,18 +1932,27 @@ function DropdownMenu({
1641
1932
  }
1642
1933
  );
1643
1934
  }
1935
+ function DropdownMenu(props) {
1936
+ if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DropdownMenuContent, { ...props });
1937
+ const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
1938
+ const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
1939
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(DropdownMenuTrigger, { defaultOpen, isOpen, onOpenChange, children: [
1940
+ triggerElement,
1941
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DropdownMenuContent, { ...contentProps, children })
1942
+ ] });
1943
+ }
1644
1944
  function DropdownMenuGroup({
1645
1945
  ...props
1646
1946
  }) {
1647
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components14.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
1947
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components12.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
1648
1948
  }
1649
1949
  function DropdownMenuLabel({
1650
1950
  className,
1651
1951
  inset,
1652
1952
  ...props
1653
1953
  }) {
1654
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1655
- import_react_aria_components14.Header,
1954
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1955
+ import_react_aria_components12.Header,
1656
1956
  {
1657
1957
  "data-slot": "dropdown-menu-label",
1658
1958
  "data-inset": inset,
@@ -1683,39 +1983,34 @@ function DropdownMenuItem({
1683
1983
  children,
1684
1984
  ...props
1685
1985
  }) {
1686
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1687
- import_react_aria_components14.MenuItem,
1986
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1987
+ import_react_aria_components12.MenuItem,
1688
1988
  {
1689
1989
  "data-slot": "dropdown-menu-item",
1690
1990
  "data-inset": inset,
1691
1991
  "data-variant": variant,
1692
1992
  textValue: typeof children === "string" ? children : props.textValue,
1693
- className: (0, import_react_aria_components14.composeRenderProps)(
1993
+ className: (0, import_react_aria_components12.composeRenderProps)(
1694
1994
  className,
1695
1995
  (className2, { selectionMode }) => cn(dropdownMenuItemVariants({ selectionMode }), className2)
1696
1996
  ),
1697
1997
  ...props,
1698
- children: (0, import_react_aria_components14.composeRenderProps)(
1699
- children,
1700
- (children2, { isSelected, selectionMode }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
1701
- selectionMode !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1702
- "span",
1703
- {
1704
- className: "pointer-events-none absolute right-2 flex items-center justify-center",
1705
- "data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
1706
- children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react7.CheckIcon, {}) : null
1707
- }
1708
- ) : null,
1709
- children2
1710
- ] })
1711
- )
1998
+ children: (0, import_react_aria_components12.composeRenderProps)(children, (children2, { isSelected, selectionMode }) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
1999
+ selectionMode !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2000
+ "span",
2001
+ {
2002
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
2003
+ "data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
2004
+ children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react6.CheckIcon, {}) : null
2005
+ }
2006
+ ) : null,
2007
+ children2
2008
+ ] }))
1712
2009
  }
1713
2010
  );
1714
2011
  }
1715
- function DropdownMenuSub({
1716
- ...props
1717
- }) {
1718
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components14.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
2012
+ function DropdownMenuSub({ ...props }) {
2013
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components12.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
1719
2014
  }
1720
2015
  function DropdownMenuSubTrigger({
1721
2016
  className,
@@ -1723,8 +2018,8 @@ function DropdownMenuSubTrigger({
1723
2018
  children,
1724
2019
  ...props
1725
2020
  }) {
1726
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1727
- import_react_aria_components14.MenuItem,
2021
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2022
+ import_react_aria_components12.MenuItem,
1728
2023
  {
1729
2024
  "data-slot": "dropdown-menu-sub-trigger",
1730
2025
  "data-inset": inset,
@@ -1734,9 +2029,9 @@ function DropdownMenuSubTrigger({
1734
2029
  className
1735
2030
  ),
1736
2031
  ...props,
1737
- children: (0, import_react_aria_components14.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
2032
+ children: (0, import_react_aria_components12.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
1738
2033
  children2,
1739
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react7.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
2034
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react6.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1740
2035
  ] }))
1741
2036
  }
1742
2037
  );
@@ -1748,11 +2043,14 @@ function DropdownMenuSubContent({
1748
2043
  className,
1749
2044
  ...props
1750
2045
  }) {
1751
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1752
- DropdownMenu,
2046
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2047
+ DropdownMenuContent,
1753
2048
  {
1754
2049
  "data-slot": "dropdown-menu-sub-content",
1755
- className: cn("w-auto min-w-24 rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg", className),
2050
+ className: cn(
2051
+ "w-auto min-w-24 rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg",
2052
+ className
2053
+ ),
1756
2054
  placement,
1757
2055
  crossOffset,
1758
2056
  offset,
@@ -1764,8 +2062,8 @@ function DropdownMenuSeparator({
1764
2062
  className,
1765
2063
  ...props
1766
2064
  }) {
1767
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1768
- import_react_aria_components14.Separator,
2065
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2066
+ import_react_aria_components12.Separator,
1769
2067
  {
1770
2068
  "data-slot": "dropdown-menu-separator",
1771
2069
  className: cn("-mx-1 my-1 h-px bg-border", className),
@@ -1773,11 +2071,8 @@ function DropdownMenuSeparator({
1773
2071
  }
1774
2072
  );
1775
2073
  }
1776
- function DropdownMenuShortcut({
1777
- className,
1778
- ...props
1779
- }) {
1780
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2074
+ function DropdownMenuShortcut({ className, ...props }) {
2075
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1781
2076
  "span",
1782
2077
  {
1783
2078
  "data-slot": "dropdown-menu-shortcut",
@@ -1790,11 +2085,25 @@ function DropdownMenuShortcut({
1790
2085
  );
1791
2086
  }
1792
2087
 
1793
- // src/ui/empty-state/empty-state.tsx
2088
+ // src/ui/empty-state/empty-state-variants.ts
1794
2089
  var import_class_variance_authority7 = require("class-variance-authority");
1795
- var import_jsx_runtime23 = require("react/jsx-runtime");
2090
+ var emptyStateMediaVariants = (0, import_class_variance_authority7.cva)(
2091
+ "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
2092
+ {
2093
+ variants: {
2094
+ variant: {
2095
+ default: "bg-transparent",
2096
+ icon: "size-8 rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
2097
+ }
2098
+ },
2099
+ defaultVariants: { variant: "default" }
2100
+ }
2101
+ );
2102
+
2103
+ // src/ui/empty-state/empty-state.tsx
2104
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1796
2105
  function EmptyState({ className, ...props }) {
1797
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2106
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1798
2107
  "div",
1799
2108
  {
1800
2109
  "data-slot": "empty-state",
@@ -1807,7 +2116,7 @@ function EmptyState({ className, ...props }) {
1807
2116
  );
1808
2117
  }
1809
2118
  function EmptyStateHeader({ className, ...props }) {
1810
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2119
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1811
2120
  "div",
1812
2121
  {
1813
2122
  "data-slot": "empty-state-header",
@@ -1816,24 +2125,12 @@ function EmptyStateHeader({ className, ...props }) {
1816
2125
  }
1817
2126
  );
1818
2127
  }
1819
- var emptyStateMediaVariants = (0, import_class_variance_authority7.cva)(
1820
- "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
1821
- {
1822
- variants: {
1823
- variant: {
1824
- default: "bg-transparent",
1825
- icon: "size-8 rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
1826
- }
1827
- },
1828
- defaultVariants: { variant: "default" }
1829
- }
1830
- );
1831
2128
  function EmptyStateMedia({
1832
2129
  className,
1833
2130
  variant = "default",
1834
2131
  ...props
1835
2132
  }) {
1836
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2133
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1837
2134
  "div",
1838
2135
  {
1839
2136
  "data-slot": "empty-state-media",
@@ -1843,18 +2140,19 @@ function EmptyStateMedia({
1843
2140
  }
1844
2141
  );
1845
2142
  }
1846
- function EmptyStateTitle({ className, ...props }) {
1847
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2143
+ function EmptyStateTitle({ className, children, ...props }) {
2144
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1848
2145
  "h3",
1849
2146
  {
1850
2147
  "data-slot": "empty-state-title",
1851
2148
  className: cn("text-sm font-medium tracking-tight text-foreground", className),
1852
- ...props
2149
+ ...props,
2150
+ children
1853
2151
  }
1854
2152
  );
1855
2153
  }
1856
2154
  function EmptyStateDescription({ className, ...props }) {
1857
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2155
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1858
2156
  "p",
1859
2157
  {
1860
2158
  "data-slot": "empty-state-description",
@@ -1867,7 +2165,7 @@ function EmptyStateDescription({ className, ...props }) {
1867
2165
  );
1868
2166
  }
1869
2167
  function EmptyStateContent({ className, ...props }) {
1870
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2168
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1871
2169
  "div",
1872
2170
  {
1873
2171
  "data-slot": "empty-state-content",
@@ -1880,28 +2178,54 @@ function EmptyStateContent({ className, ...props }) {
1880
2178
  );
1881
2179
  }
1882
2180
 
1883
- // src/ui/field/field.tsx
2181
+ // src/ui/label/label.tsx
2182
+ var import_react7 = require("react");
2183
+ var import_react_aria_components13 = require("react-aria-components");
2184
+ var import_jsx_runtime22 = require("react/jsx-runtime");
2185
+ var Label2 = (0, import_react7.forwardRef)(
2186
+ function Label3({ className, ...props }, ref) {
2187
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2188
+ import_react_aria_components13.Label,
2189
+ {
2190
+ ref,
2191
+ "data-slot": "label",
2192
+ className: cn(
2193
+ "flex items-center gap-2 text-sm font-medium leading-none select-none",
2194
+ className
2195
+ ),
2196
+ ...props
2197
+ }
2198
+ );
2199
+ }
2200
+ );
2201
+
2202
+ // src/ui/field/field-variants.ts
1884
2203
  var import_class_variance_authority8 = require("class-variance-authority");
1885
-
1886
- // src/ui/label/label.tsx
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 });
1892
- });
2204
+ var fieldVariants = (0, import_class_variance_authority8.cva)(
2205
+ "group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
2206
+ {
2207
+ variants: {
2208
+ orientation: {
2209
+ vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
2210
+ horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto",
2211
+ responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:*:data-[slot=field-label]:flex-auto"
2212
+ }
2213
+ },
2214
+ defaultVariants: { orientation: "vertical" }
2215
+ }
2216
+ );
1893
2217
 
1894
2218
  // src/ui/field/field.tsx
1895
- var import_jsx_runtime25 = require("react/jsx-runtime");
2219
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1896
2220
  function FieldSet({ className, ...props }) {
1897
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
2221
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1898
2222
  }
1899
2223
  function FieldLegend({
1900
2224
  className,
1901
2225
  variant = "legend",
1902
2226
  ...props
1903
2227
  }) {
1904
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2228
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1905
2229
  "legend",
1906
2230
  {
1907
2231
  "data-slot": "field-legend",
@@ -1915,7 +2239,7 @@ function FieldLegend({
1915
2239
  );
1916
2240
  }
1917
2241
  function FieldGroup({ className, ...props }) {
1918
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2242
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1919
2243
  "div",
1920
2244
  {
1921
2245
  "data-slot": "field-group",
@@ -1927,23 +2251,10 @@ function FieldGroup({ className, ...props }) {
1927
2251
  }
1928
2252
  );
1929
2253
  }
1930
- var fieldVariants = (0, import_class_variance_authority8.cva)(
1931
- "group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
1932
- {
1933
- variants: {
1934
- orientation: {
1935
- vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
1936
- horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto",
1937
- responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:*:data-[slot=field-label]:flex-auto"
1938
- }
1939
- },
1940
- defaultVariants: { orientation: "vertical" }
1941
- }
1942
- );
1943
2254
  function Field({ className, orientation = "vertical", ...props }) {
1944
2255
  return (
1945
2256
  // biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
1946
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2257
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1947
2258
  "div",
1948
2259
  {
1949
2260
  role: "group",
@@ -1956,7 +2267,7 @@ function Field({ className, orientation = "vertical", ...props }) {
1956
2267
  );
1957
2268
  }
1958
2269
  function FieldContent({ className, ...props }) {
1959
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2270
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1960
2271
  "div",
1961
2272
  {
1962
2273
  "data-slot": "field-content",
@@ -1966,7 +2277,7 @@ function FieldContent({ className, ...props }) {
1966
2277
  );
1967
2278
  }
1968
2279
  function FieldLabel({ className, ...props }) {
1969
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2280
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1970
2281
  Label2,
1971
2282
  {
1972
2283
  "data-slot": "field-label",
@@ -1979,7 +2290,7 @@ function FieldLabel({ className, ...props }) {
1979
2290
  );
1980
2291
  }
1981
2292
  function FieldTitle({ className, ...props }) {
1982
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2293
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1983
2294
  "div",
1984
2295
  {
1985
2296
  "data-slot": "field-title",
@@ -1989,7 +2300,7 @@ function FieldTitle({ className, ...props }) {
1989
2300
  );
1990
2301
  }
1991
2302
  function FieldDescription({ className, ...props }) {
1992
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2303
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1993
2304
  "p",
1994
2305
  {
1995
2306
  "data-slot": "field-description",
@@ -2002,7 +2313,7 @@ function FieldDescription({ className, ...props }) {
2002
2313
  );
2003
2314
  }
2004
2315
  function FieldSeparator({ className, children, ...props }) {
2005
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2316
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2006
2317
  "div",
2007
2318
  {
2008
2319
  "data-slot": "field-separator",
@@ -2010,12 +2321,12 @@ function FieldSeparator({ className, children, ...props }) {
2010
2321
  className: cn("relative -my-2 h-5 text-sm", className),
2011
2322
  ...props,
2012
2323
  children: [
2013
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
2014
- children ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2324
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
2325
+ children ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2015
2326
  "span",
2016
2327
  {
2017
2328
  "data-slot": "field-separator-content",
2018
- className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
2329
+ className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
2019
2330
  children
2020
2331
  }
2021
2332
  ) : null
@@ -2025,9 +2336,9 @@ function FieldSeparator({ className, children, ...props }) {
2025
2336
  }
2026
2337
  function FieldError2({ className, children, errors, ...props }) {
2027
2338
  const messages = [...new Set(errors?.flatMap((error) => error?.message ?? []) ?? [])];
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);
2339
+ const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("li", { children: message }, message)) }) : null);
2029
2340
  if (!content) return null;
2030
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2341
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2031
2342
  "div",
2032
2343
  {
2033
2344
  role: "alert",
@@ -2040,9 +2351,42 @@ function FieldError2({ className, children, errors, ...props }) {
2040
2351
  }
2041
2352
 
2042
2353
  // src/ui/form-feedback/form-feedback.tsx
2354
+ var import_lucide_react7 = require("lucide-react");
2355
+ var import_jsx_runtime24 = require("react/jsx-runtime");
2356
+ function FormFeedback({
2357
+ state,
2358
+ className,
2359
+ pendingLabel = "Guardando\u2026",
2360
+ successLabel = "Guardado"
2361
+ }) {
2362
+ if (state.status === "idle")
2363
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
2364
+ const error = state.status === "error";
2365
+ const success = state.status === "success";
2366
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2367
+ "span",
2368
+ {
2369
+ role: error ? "alert" : "status",
2370
+ "aria-live": "polite",
2371
+ className: cn(
2372
+ "inline-flex h-5 items-center gap-1.5 text-xs",
2373
+ error && "text-destructive",
2374
+ success && "text-success",
2375
+ state.status === "pending" && "text-muted-foreground",
2376
+ className
2377
+ ),
2378
+ children: [
2379
+ state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react7.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
2380
+ success && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react7.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
2381
+ error && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react7.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
2382
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
2383
+ ]
2384
+ }
2385
+ );
2386
+ }
2387
+
2388
+ // src/ui/form-feedback/use-form-feedback.ts
2043
2389
  var import_react8 = require("react");
2044
- var import_lucide_react8 = require("lucide-react");
2045
- var import_jsx_runtime26 = require("react/jsx-runtime");
2046
2390
  function useFormFeedback(options) {
2047
2391
  const resetMs = options?.successResetMs ?? 2500;
2048
2392
  const [state, setState] = (0, import_react8.useState)({ status: "idle" });
@@ -2056,79 +2400,74 @@ function useFormFeedback(options) {
2056
2400
  clearTimer();
2057
2401
  setState({ status: "pending" });
2058
2402
  }, [clearTimer]);
2059
- const setSuccess = (0, import_react8.useCallback)((message) => {
2060
- clearTimer();
2061
- setState({ status: "success", message });
2062
- if (resetMs > 0) timer.current = setTimeout(() => setState({ status: "idle" }), resetMs);
2063
- }, [clearTimer, resetMs]);
2064
- const setError = (0, import_react8.useCallback)((message) => {
2065
- clearTimer();
2066
- setState({ status: "error", message });
2067
- }, [clearTimer]);
2403
+ const setSuccess = (0, import_react8.useCallback)(
2404
+ (message) => {
2405
+ clearTimer();
2406
+ setState({ status: "success", message });
2407
+ if (resetMs > 0) timer.current = setTimeout(() => setState({ status: "idle" }), resetMs);
2408
+ },
2409
+ [clearTimer, resetMs]
2410
+ );
2411
+ const setError = (0, import_react8.useCallback)(
2412
+ (message) => {
2413
+ clearTimer();
2414
+ setState({ status: "error", message });
2415
+ },
2416
+ [clearTimer]
2417
+ );
2068
2418
  const reset = (0, import_react8.useCallback)(() => {
2069
2419
  clearTimer();
2070
2420
  setState({ status: "idle" });
2071
2421
  }, [clearTimer]);
2072
2422
  return { state, pending: state.status === "pending", setPending, setSuccess, setError, reset };
2073
2423
  }
2074
- function FormFeedback({ state, className, pendingLabel = "Guardando\u2026", successLabel = "Guardado" }) {
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) });
2076
- const error = state.status === "error";
2077
- const success = state.status === "success";
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 })
2083
- ] });
2084
- }
2085
2424
 
2086
2425
  // src/ui/form-row/form-row.tsx
2087
- var import_jsx_runtime27 = require("react/jsx-runtime");
2088
- function FormRow({ label, htmlFor, required, hint, error, className, children }) {
2426
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2427
+ function FormRow({
2428
+ label,
2429
+ htmlFor,
2430
+ required,
2431
+ hint,
2432
+ error,
2433
+ className,
2434
+ children
2435
+ }) {
2089
2436
  const hintId = hint ? `${htmlFor}-hint` : void 0;
2090
2437
  const errorId = error ? `${htmlFor}-error` : void 0;
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: [
2438
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
2439
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("label", { htmlFor, className: "text-foreground text-sm font-medium", children: [
2093
2440
  label,
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)" })
2441
+ required && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
2442
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { "aria-hidden": "true", className: "text-destructive ml-0.5", children: "*" }),
2443
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "sr-only", children: " (obligatorio)" })
2097
2444
  ] })
2098
2445
  ] }),
2099
2446
  children,
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 })
2447
+ hint && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { id: hintId, className: "text-muted-foreground text-xs", children: hint }),
2448
+ error && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { id: errorId, role: "alert", className: "text-destructive text-xs font-medium", children: error })
2102
2449
  ] });
2103
2450
  }
2104
2451
 
2105
2452
  // src/ui/icon-button/icon-button.tsx
2106
- var import_react_aria_components17 = require("react-aria-components");
2453
+ var import_react_aria_components15 = require("react-aria-components");
2107
2454
 
2108
2455
  // src/ui/tooltip/tooltip.tsx
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");
2456
+ var import_react_aria_components14 = require("react-aria-components");
2457
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2112
2458
  function TooltipTrigger({
2113
2459
  delay = 0,
2114
- children,
2115
2460
  ...props
2116
2461
  }) {
2117
- const [trigger, tooltip] = React6.Children.toArray(children);
2118
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2119
- import_react_aria_components16.TooltipTrigger,
2120
- {
2121
- "data-slot": "tooltip-trigger",
2122
- delay,
2123
- ...props,
2124
- children: [
2125
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_aria_components16.Focusable, { children: trigger }),
2126
- tooltip
2127
- ]
2128
- }
2129
- );
2462
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components14.TooltipTrigger, { "data-slot": "tooltip-trigger", delay, ...props });
2463
+ }
2464
+ function Tooltip({ label, children, delay, ...props }) {
2465
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(TooltipTrigger, { delay, children: [
2466
+ children,
2467
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TooltipContent, { ...props, children: label })
2468
+ ] });
2130
2469
  }
2131
- function Tooltip({
2470
+ function TooltipContent({
2132
2471
  className,
2133
2472
  placement = "top",
2134
2473
  offset = 4,
@@ -2136,8 +2475,8 @@ function Tooltip({
2136
2475
  children,
2137
2476
  ...props
2138
2477
  }) {
2139
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2140
- import_react_aria_components16.Tooltip,
2478
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2479
+ import_react_aria_components14.Tooltip,
2141
2480
  {
2142
2481
  "data-slot": "tooltip-content",
2143
2482
  placement,
@@ -2150,10 +2489,10 @@ function Tooltip({
2150
2489
  ...props,
2151
2490
  children: [
2152
2491
  children,
2153
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2154
- import_react_aria_components16.OverlayArrow,
2492
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2493
+ import_react_aria_components14.OverlayArrow,
2155
2494
  {
2156
- className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground",
2495
+ className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs",
2157
2496
  style: ({ placement: placement2, defaultStyle }) => ({
2158
2497
  ...defaultStyle,
2159
2498
  rotate: "0deg",
@@ -2168,7 +2507,7 @@ function Tooltip({
2168
2507
  }
2169
2508
 
2170
2509
  // src/ui/icon-button/icon-button.tsx
2171
- var import_jsx_runtime29 = require("react/jsx-runtime");
2510
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2172
2511
  function IconButton({
2173
2512
  label,
2174
2513
  children,
@@ -2177,76 +2516,67 @@ function IconButton({
2177
2516
  variant,
2178
2517
  ...props
2179
2518
  }) {
2180
- const linkClassName = cn(
2181
- buttonVariants({ variant, size: "icon" }),
2182
- className
2183
- );
2184
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(TooltipTrigger, { children: [
2185
- href ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2186
- import_react_aria_components17.Link,
2187
- {
2188
- "data-slot": "icon-button",
2189
- "aria-label": label,
2190
- href,
2191
- className: linkClassName,
2192
- children
2193
- }
2194
- ) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2195
- Button,
2196
- {
2197
- "data-slot": "icon-button",
2198
- "aria-label": label,
2199
- variant,
2200
- size: "icon",
2201
- className,
2202
- ...props,
2203
- children
2204
- }
2205
- ),
2206
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Tooltip, { children: label })
2207
- ] });
2519
+ const linkClassName = cn(buttonVariants({ variant, size: "icon" }), className);
2520
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Tooltip, { label, children: href ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components15.Link, { "data-slot": "icon-button", "aria-label": label, href, className: linkClassName, children }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2521
+ Button,
2522
+ {
2523
+ "data-slot": "icon-button",
2524
+ "aria-label": label,
2525
+ variant,
2526
+ size: "icon",
2527
+ className,
2528
+ ...props,
2529
+ children
2530
+ }
2531
+ ) });
2208
2532
  }
2209
2533
 
2210
2534
  // src/ui/input-group/input-group.tsx
2211
- var import_class_variance_authority9 = require("class-variance-authority");
2535
+ var import_class_variance_authority10 = require("class-variance-authority");
2212
2536
 
2213
2537
  // src/ui/input/input.tsx
2214
2538
  var import_react9 = require("react");
2215
- var import_react_aria_components18 = require("react-aria-components");
2216
- var import_jsx_runtime30 = require("react/jsx-runtime");
2539
+ var import_react_aria_components16 = require("react-aria-components");
2540
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2217
2541
  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 });
2542
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2543
+ import_react_aria_components16.Input,
2544
+ {
2545
+ ref,
2546
+ type,
2547
+ "data-slot": "input",
2548
+ className: cn(
2549
+ "box-border 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",
2550
+ className
2551
+ ),
2552
+ ...props
2553
+ }
2554
+ );
2219
2555
  });
2220
2556
  var Input3 = InputImpl;
2221
2557
 
2222
2558
  // src/ui/textarea/textarea.tsx
2223
2559
  var import_react10 = require("react");
2224
- var import_react_aria_components19 = require("react-aria-components");
2225
- var import_jsx_runtime31 = require("react/jsx-runtime");
2560
+ var import_react_aria_components17 = require("react-aria-components");
2561
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2226
2562
  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 });
2228
- });
2229
- var Textarea2 = TextareaImpl;
2230
-
2231
- // src/ui/input-group/input-group.tsx
2232
- var import_jsx_runtime32 = (
2233
- // biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
2234
- require("react/jsx-runtime")
2235
- );
2236
- function InputGroup({ className, ...props }) {
2237
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2238
- "div",
2563
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2564
+ import_react_aria_components17.TextArea,
2239
2565
  {
2240
- role: "group",
2241
- "data-slot": "input-group",
2566
+ ref,
2567
+ "data-slot": "textarea",
2242
2568
  className: cn(
2243
- "group/input-group relative flex min-h-8 w-full min-w-0 items-center rounded-lg border border-border transition-colors outline-none has-disabled:bg-muted/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align^=block]]:h-auto has-[>[data-align^=block]]:flex-col",
2569
+ "box-border 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",
2244
2570
  className
2245
2571
  ),
2246
2572
  ...props
2247
2573
  }
2248
2574
  );
2249
- }
2575
+ });
2576
+ var Textarea2 = TextareaImpl;
2577
+
2578
+ // src/ui/input-group/input-group-addon-variants.ts
2579
+ var import_class_variance_authority9 = require("class-variance-authority");
2250
2580
  var inputGroupAddonVariants = (0, import_class_variance_authority9.cva)(
2251
2581
  "flex cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none [&_svg:not([class*='size-'])]:size-4",
2252
2582
  {
@@ -2261,6 +2591,26 @@ var inputGroupAddonVariants = (0, import_class_variance_authority9.cva)(
2261
2591
  defaultVariants: { align: "inline-start" }
2262
2592
  }
2263
2593
  );
2594
+
2595
+ // src/ui/input-group/input-group.tsx
2596
+ var import_jsx_runtime30 = (
2597
+ // biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
2598
+ require("react/jsx-runtime")
2599
+ );
2600
+ function InputGroup({ className, ...props }) {
2601
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2602
+ "div",
2603
+ {
2604
+ role: "group",
2605
+ "data-slot": "input-group",
2606
+ className: cn(
2607
+ "group/input-group relative flex min-h-8 w-full min-w-0 items-center rounded-lg border border-border transition-colors outline-none has-disabled:bg-muted/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align^=block]]:h-auto has-[>[data-align^=block]]:flex-col",
2608
+ className
2609
+ ),
2610
+ ...props
2611
+ }
2612
+ );
2613
+ }
2264
2614
  function InputGroupAddon({
2265
2615
  className,
2266
2616
  align = "inline-start",
@@ -2269,7 +2619,7 @@ function InputGroupAddon({
2269
2619
  }) {
2270
2620
  return (
2271
2621
  // biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
2272
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2622
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2273
2623
  "div",
2274
2624
  {
2275
2625
  role: "group",
@@ -2286,7 +2636,7 @@ function InputGroupAddon({
2286
2636
  )
2287
2637
  );
2288
2638
  }
2289
- var inputGroupButtonVariants = (0, import_class_variance_authority9.cva)("shrink-0 shadow-none", {
2639
+ var inputGroupButtonVariants = (0, import_class_variance_authority10.cva)("shrink-0 shadow-none", {
2290
2640
  variants: {
2291
2641
  size: { xs: "h-6 px-1.5 text-xs", sm: "h-7 px-2", "icon-xs": "size-6", "icon-sm": "size-7" }
2292
2642
  },
@@ -2300,7 +2650,7 @@ function InputGroupButton({
2300
2650
  ...props
2301
2651
  }) {
2302
2652
  const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
2303
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2653
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2304
2654
  Button,
2305
2655
  {
2306
2656
  "data-slot": "input-group-button",
@@ -2313,7 +2663,7 @@ function InputGroupButton({
2313
2663
  );
2314
2664
  }
2315
2665
  function InputGroupText({ className, ...props }) {
2316
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2666
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2317
2667
  "span",
2318
2668
  {
2319
2669
  "data-slot": "input-group-text",
@@ -2326,7 +2676,7 @@ function InputGroupText({ className, ...props }) {
2326
2676
  );
2327
2677
  }
2328
2678
  function InputGroupInput({ className, ...props }) {
2329
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2679
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2330
2680
  Input3,
2331
2681
  {
2332
2682
  "data-slot": "input-group-control",
@@ -2339,7 +2689,7 @@ function InputGroupInput({ className, ...props }) {
2339
2689
  );
2340
2690
  }
2341
2691
  function InputGroupTextarea({ className, ...props }) {
2342
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2692
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2343
2693
  Textarea2,
2344
2694
  {
2345
2695
  "data-slot": "input-group-control",
@@ -2353,40 +2703,93 @@ function InputGroupTextarea({ className, ...props }) {
2353
2703
  }
2354
2704
 
2355
2705
  // src/ui/kbd/kbd.tsx
2356
- var import_jsx_runtime33 = require("react/jsx-runtime");
2706
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2357
2707
  function Kbd({ 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 });
2708
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2709
+ "kbd",
2710
+ {
2711
+ "data-slot": "kbd",
2712
+ className: cn(
2713
+ "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",
2714
+ className
2715
+ ),
2716
+ ...props
2717
+ }
2718
+ );
2359
2719
  }
2360
2720
  function KbdGroup({ 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 });
2721
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2722
+ "span",
2723
+ {
2724
+ "data-slot": "kbd-group",
2725
+ className: cn("inline-flex items-center gap-1", className),
2726
+ ...props
2727
+ }
2728
+ );
2362
2729
  }
2363
2730
 
2364
2731
  // src/ui/loading-overlay/loading-overlay.tsx
2365
- var import_lucide_react9 = require("lucide-react");
2366
- var import_jsx_runtime34 = require("react/jsx-runtime");
2367
- function LoadingOverlay({ label = "Cargando", className, ...props }) {
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 })
2371
- ] }) });
2732
+ var import_lucide_react8 = require("lucide-react");
2733
+ var import_jsx_runtime32 = require("react/jsx-runtime");
2734
+ function LoadingOverlay({
2735
+ label = "Cargando",
2736
+ className,
2737
+ ...props
2738
+ }) {
2739
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2740
+ "output",
2741
+ {
2742
+ "aria-live": "polite",
2743
+ className: cn(
2744
+ "absolute inset-0 z-10 flex items-center justify-center bg-background/70 backdrop-blur-[2px]",
2745
+ className
2746
+ ),
2747
+ ...props,
2748
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "border-border bg-background flex items-center gap-2 rounded-lg border px-3 py-2 text-sm shadow-sm", children: [
2749
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react8.LoaderCircle, { className: "animate-spin", "aria-hidden": "true" }),
2750
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: label })
2751
+ ] })
2752
+ }
2753
+ );
2372
2754
  }
2373
2755
 
2374
2756
  // src/ui/menu/menu.tsx
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;
2757
+ var import_react_aria_components18 = require("react-aria-components");
2758
+ var import_jsx_runtime33 = require("react/jsx-runtime");
2759
+ var MenuTrigger = import_react_aria_components18.MenuTrigger;
2378
2760
  function MenuContent({ 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 });
2761
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2762
+ import_react_aria_components18.Popover,
2763
+ {
2764
+ "data-slot": "menu-content",
2765
+ className: cn(
2766
+ "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",
2767
+ className
2768
+ ),
2769
+ ...props
2770
+ }
2771
+ );
2380
2772
  }
2381
2773
  function Menu({ className, ...props }) {
2382
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components20.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
2774
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components18.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
2383
2775
  }
2384
2776
  function MenuItem({ className, children, ...props }) {
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 });
2777
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2778
+ import_react_aria_components18.MenuItem,
2779
+ {
2780
+ "data-slot": "menu-item",
2781
+ className: cn(
2782
+ "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",
2783
+ className
2784
+ ),
2785
+ ...props,
2786
+ children
2787
+ }
2788
+ );
2386
2789
  }
2387
2790
 
2388
2791
  // src/ui/metric-card/metric-card.tsx
2389
- var import_jsx_runtime36 = require("react/jsx-runtime");
2792
+ var import_jsx_runtime34 = require("react/jsx-runtime");
2390
2793
  function MetricCard({
2391
2794
  className,
2392
2795
  label,
@@ -2396,20 +2799,27 @@ function MetricCard({
2396
2799
  tone = "default",
2397
2800
  ...props
2398
2801
  }) {
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
2802
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Card, { "data-slot": "metric-card", "data-tone": tone, className: cn("min-w-0", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(CardContent, { className: "flex items-start gap-3", children: [
2803
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { "data-slot": "metric-card-icon", className: "text-muted-foreground shrink-0", children: icon }) : null,
2804
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "min-w-0", children: [
2805
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { "data-slot": "metric-card-label", className: "text-muted-foreground text-sm", children: label }),
2806
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2807
+ "strong",
2808
+ {
2809
+ "data-slot": "metric-card-value",
2810
+ className: "mt-1 block text-2xl font-semibold tracking-tight",
2811
+ children: value
2812
+ }
2813
+ ),
2814
+ description ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { "data-slot": "metric-card-description", className: "text-muted-foreground mt-1 text-xs", children: description }) : null
2405
2815
  ] })
2406
2816
  ] }) });
2407
2817
  }
2408
2818
 
2409
2819
  // src/ui/otp-input/otp-input.tsx
2410
2820
  var import_react11 = require("react");
2411
- var import_react_aria_components21 = require("react-aria-components");
2412
- var import_jsx_runtime37 = require("react/jsx-runtime");
2821
+ var import_react_aria_components19 = require("react-aria-components");
2822
+ var import_jsx_runtime35 = require("react/jsx-runtime");
2413
2823
  function normalizeOtp(value, length) {
2414
2824
  return value.replace(/[^0-9]/g, "").slice(0, length);
2415
2825
  }
@@ -2461,7 +2871,7 @@ var OtpInputImpl = (0, import_react11.forwardRef)(function OtpInput({
2461
2871
  input.setSelectionRange(position, position);
2462
2872
  setSelectionStart(position);
2463
2873
  }
2464
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2874
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
2465
2875
  "div",
2466
2876
  {
2467
2877
  "data-slot": "otp-input",
@@ -2471,8 +2881,8 @@ var OtpInputImpl = (0, import_react11.forwardRef)(function OtpInput({
2471
2881
  style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
2472
2882
  onPointerDown: handlePointerDown,
2473
2883
  children: [
2474
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2475
- import_react_aria_components21.Input,
2884
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2885
+ import_react_aria_components19.Input,
2476
2886
  {
2477
2887
  ...props,
2478
2888
  ref: inputRef,
@@ -2511,7 +2921,7 @@ var OtpInputImpl = (0, import_react11.forwardRef)(function OtpInput({
2511
2921
  }
2512
2922
  }
2513
2923
  ),
2514
- slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2924
+ slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2515
2925
  "span",
2516
2926
  {
2517
2927
  "aria-hidden": "true",
@@ -2534,27 +2944,59 @@ var OtpInputImpl = (0, import_react11.forwardRef)(function OtpInput({
2534
2944
  var OtpInput2 = OtpInputImpl;
2535
2945
 
2536
2946
  // src/ui/page-header/page-header.tsx
2537
- var import_jsx_runtime38 = require("react/jsx-runtime");
2947
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2538
2948
  function PageHeader({ 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 });
2949
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2950
+ "header",
2951
+ {
2952
+ "data-slot": "page-header",
2953
+ className: cn(
2954
+ "flex flex-col gap-4 py-2 sm:flex-row sm:items-center sm:justify-between",
2955
+ className
2956
+ ),
2957
+ ...props
2958
+ }
2959
+ );
2540
2960
  }
2541
2961
  function PageHeaderHeading({ className, ...props }) {
2542
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2962
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2543
2963
  }
2544
- function PageHeaderTitle({ 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 });
2964
+ function PageHeaderTitle({ className, children, ...props }) {
2965
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2966
+ "h1",
2967
+ {
2968
+ "data-slot": "page-header-title",
2969
+ className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className),
2970
+ ...props,
2971
+ children
2972
+ }
2973
+ );
2546
2974
  }
2547
2975
  function PageHeaderDescription({ 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 });
2976
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2977
+ "p",
2978
+ {
2979
+ "data-slot": "page-header-description",
2980
+ className: cn("mt-1 text-sm text-muted-foreground", className),
2981
+ ...props
2982
+ }
2983
+ );
2549
2984
  }
2550
2985
  function PageHeaderActions({ 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 });
2986
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2987
+ "div",
2988
+ {
2989
+ "data-slot": "page-header-actions",
2990
+ className: cn("flex shrink-0 items-center gap-2", className),
2991
+ ...props
2992
+ }
2993
+ );
2552
2994
  }
2553
2995
 
2554
2996
  // src/ui/pagination/pagination.tsx
2555
- var import_lucide_react10 = require("lucide-react");
2556
- var React7 = __toESM(require("react"), 1);
2557
- var import_jsx_runtime39 = require("react/jsx-runtime");
2997
+ var import_lucide_react9 = require("lucide-react");
2998
+ var React6 = __toESM(require("react"), 1);
2999
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2558
3000
  function visiblePages(page, pageCount, siblingCount) {
2559
3001
  return [
2560
3002
  .../* @__PURE__ */ new Set([
@@ -2575,15 +3017,15 @@ function Pagination({
2575
3017
  }) {
2576
3018
  if (pageCount <= 1) return null;
2577
3019
  const pages = visiblePages(page, pageCount, siblingCount);
2578
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
3020
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2579
3021
  "nav",
2580
3022
  {
2581
3023
  "aria-label": ariaLabel,
2582
3024
  className: cn("flex flex-wrap items-center justify-between gap-4", className),
2583
3025
  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)(
3026
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "text-muted-foreground text-sm", children: summary ?? `P\xE1gina ${page} de ${pageCount}` }),
3027
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-1", children: [
3028
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2587
3029
  Button,
2588
3030
  {
2589
3031
  "aria-label": "P\xE1gina anterior",
@@ -2591,14 +3033,14 @@ function Pagination({
2591
3033
  onPress: () => onPageChange(page - 1),
2592
3034
  size: "icon",
2593
3035
  variant: "ghost",
2594
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react10.ChevronLeft, {})
3036
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react9.ChevronLeft, {})
2595
3037
  }
2596
3038
  ),
2597
3039
  pages.map((item, index) => {
2598
3040
  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)(
3041
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(React6.Fragment, { children: [
3042
+ previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": "true", className: "text-muted-foreground px-1", children: "\u2026" }) : null,
3043
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2602
3044
  Button,
2603
3045
  {
2604
3046
  "aria-current": item === page ? "page" : void 0,
@@ -2611,7 +3053,7 @@ function Pagination({
2611
3053
  )
2612
3054
  ] }, item);
2613
3055
  }),
2614
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3056
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2615
3057
  Button,
2616
3058
  {
2617
3059
  "aria-label": "P\xE1gina siguiente",
@@ -2619,7 +3061,7 @@ function Pagination({
2619
3061
  onPress: () => onPageChange(page + 1),
2620
3062
  size: "icon",
2621
3063
  variant: "ghost",
2622
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react10.ChevronRight, {})
3064
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react9.ChevronRight, {})
2623
3065
  }
2624
3066
  )
2625
3067
  ] })
@@ -2629,18 +3071,37 @@ function Pagination({
2629
3071
  }
2630
3072
 
2631
3073
  // src/ui/popover/popover.tsx
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;
2635
- function Popover4({ 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 });
3074
+ var import_react_aria_components20 = require("react-aria-components");
3075
+ var import_jsx_runtime38 = require("react/jsx-runtime");
3076
+ var PopoverTrigger = import_react_aria_components20.DialogTrigger;
3077
+ function PopoverContent({ className, ...props }) {
3078
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3079
+ import_react_aria_components20.Popover,
3080
+ {
3081
+ "data-slot": "popover",
3082
+ offset: 6,
3083
+ className: cn(
3084
+ "z-50 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",
3085
+ className
3086
+ ),
3087
+ ...props
3088
+ }
3089
+ );
3090
+ }
3091
+ function Popover4(props) {
3092
+ if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PopoverContent, { ...props });
3093
+ const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
3094
+ const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
3095
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(PopoverTrigger, { defaultOpen, isOpen, onOpenChange, children: [
3096
+ triggerElement,
3097
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PopoverContent, { ...contentProps, children })
3098
+ ] });
2637
3099
  }
2638
- var PopoverContent = Popover4;
2639
3100
 
2640
3101
  // src/ui/quantity-input/quantity-input.tsx
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");
3102
+ var import_lucide_react10 = require("lucide-react");
3103
+ var import_react_aria_components21 = require("react-aria-components");
3104
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2644
3105
  function QuantityInput({
2645
3106
  className,
2646
3107
  inputClassName,
@@ -2650,23 +3111,53 @@ function QuantityInput({
2650
3111
  step = 1,
2651
3112
  ...props
2652
3113
  }) {
2653
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2654
- import_react_aria_components23.NumberField,
3114
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3115
+ import_react_aria_components21.NumberField,
2655
3116
  {
2656
3117
  ...props,
2657
3118
  minValue,
2658
3119
  step,
2659
3120
  "data-slot": "quantity-input",
2660
- className: cn("group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
2661
- children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2662
- import_react_aria_components23.Group,
3121
+ className: cn(
3122
+ "group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50",
3123
+ className
3124
+ ),
3125
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
3126
+ import_react_aria_components21.Group,
2663
3127
  {
2664
3128
  "data-slot": "quantity-input-group",
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",
3129
+ className: "border-border bg-background text-foreground focus-within:border-ring focus-within:ring-ring/50 group-data-invalid/quantity-input:border-destructive flex h-8 min-w-0 items-stretch overflow-hidden rounded-lg border transition-[border-color,box-shadow] focus-within:ring-3",
2666
3130
  children: [
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" }) })
3131
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3132
+ import_react_aria_components21.Button,
3133
+ {
3134
+ slot: "decrement",
3135
+ "aria-label": decrementAriaLabel,
3136
+ "data-slot": "quantity-input-decrement",
3137
+ className: "border-border text-muted-foreground hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted flex size-8 shrink-0 cursor-pointer items-center justify-center border-r transition-colors outline-none data-disabled:pointer-events-none",
3138
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react10.Minus, { "aria-hidden": "true", className: "size-4" })
3139
+ }
3140
+ ),
3141
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3142
+ import_react_aria_components21.Input,
3143
+ {
3144
+ "data-slot": "quantity-input-value",
3145
+ className: cn(
3146
+ "w-14 min-w-0 bg-transparent px-1 text-center text-sm tabular-nums outline-none",
3147
+ inputClassName
3148
+ )
3149
+ }
3150
+ ),
3151
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3152
+ import_react_aria_components21.Button,
3153
+ {
3154
+ slot: "increment",
3155
+ "aria-label": incrementAriaLabel,
3156
+ "data-slot": "quantity-input-increment",
3157
+ className: "border-border text-muted-foreground hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted flex size-8 shrink-0 cursor-pointer items-center justify-center border-l transition-colors outline-none data-disabled:pointer-events-none",
3158
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react10.Plus, { "aria-hidden": "true", className: "size-4" })
3159
+ }
3160
+ )
2670
3161
  ]
2671
3162
  }
2672
3163
  )
@@ -2675,38 +3166,94 @@ function QuantityInput({
2675
3166
  }
2676
3167
 
2677
3168
  // src/ui/select/select.tsx
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;
3169
+ var import_lucide_react11 = require("lucide-react");
3170
+ var import_react_aria_components22 = require("react-aria-components");
3171
+ var import_jsx_runtime40 = require("react/jsx-runtime");
3172
+ var Select = import_react_aria_components22.Select;
2682
3173
  function SelectTrigger({ className, children, ...props }) {
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: [
2684
- typeof children === "function" ? children(state) : children,
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" })
2686
- ] }) });
3174
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3175
+ import_react_aria_components22.Button,
3176
+ {
3177
+ "data-slot": "select-trigger",
3178
+ className: cn(
3179
+ "group/select-trigger box-border 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",
3180
+ className
3181
+ ),
3182
+ ...props,
3183
+ children: (state) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
3184
+ typeof children === "function" ? children(state) : children,
3185
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3186
+ import_lucide_react11.ChevronDown,
3187
+ {
3188
+ "aria-hidden": "true",
3189
+ className: "text-muted-foreground ml-auto size-4 transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none"
3190
+ }
3191
+ )
3192
+ ] })
3193
+ }
3194
+ );
2687
3195
  }
2688
3196
  function SelectValue({ 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 });
3197
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3198
+ import_react_aria_components22.SelectValue,
3199
+ {
3200
+ "data-slot": "select-value",
3201
+ className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className),
3202
+ ...props
3203
+ }
3204
+ );
2690
3205
  }
2691
3206
  function SelectContent({ 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 });
3207
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3208
+ import_react_aria_components22.Popover,
3209
+ {
3210
+ "data-slot": "select-content",
3211
+ className: cn(
3212
+ "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",
3213
+ className
3214
+ ),
3215
+ ...props
3216
+ }
3217
+ );
2693
3218
  }
2694
3219
  function SelectList({ 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 });
3220
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3221
+ import_react_aria_components22.ListBox,
3222
+ {
3223
+ "data-slot": "select-list",
3224
+ className: cn("max-h-64 overflow-y-auto", className),
3225
+ ...props
3226
+ }
3227
+ );
2696
3228
  }
2697
- function SelectItem({ className, children, ...props }) {
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 });
3229
+ function SelectItem({
3230
+ className,
3231
+ children,
3232
+ ...props
3233
+ }) {
3234
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3235
+ import_react_aria_components22.ListBoxItem,
3236
+ {
3237
+ "data-slot": "select-item",
3238
+ className: cn(
3239
+ "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",
3240
+ className
3241
+ ),
3242
+ ...props,
3243
+ children
3244
+ }
3245
+ );
2699
3246
  }
2700
3247
 
2701
3248
  // src/ui/sheet/sheet.tsx
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");
3249
+ var import_lucide_react12 = require("lucide-react");
3250
+ var import_react_aria_components23 = require("react-aria-components");
3251
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2705
3252
  function SheetTrigger({ ...props }) {
2706
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_aria_components25.DialogTrigger, { "data-slot": "sheet-trigger", ...props });
3253
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_aria_components23.DialogTrigger, { "data-slot": "sheet-trigger", ...props });
2707
3254
  }
2708
3255
  function SheetClose({ className, variant = "outline", size = "default", ...props }) {
2709
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3256
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2710
3257
  Button,
2711
3258
  {
2712
3259
  slot: "close",
@@ -2723,8 +3270,8 @@ function SheetOverlay({
2723
3270
  children,
2724
3271
  ...props
2725
3272
  }) {
2726
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2727
- import_react_aria_components25.ModalOverlay,
3273
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3274
+ import_react_aria_components23.ModalOverlay,
2728
3275
  {
2729
3276
  "data-slot": "sheet-overlay",
2730
3277
  isDismissable: true,
@@ -2744,8 +3291,8 @@ function Sheet({
2744
3291
  showCloseButton = true,
2745
3292
  ...props
2746
3293
  }) {
2747
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(SheetOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2748
- import_react_aria_components25.Modal,
3294
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(SheetOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3295
+ import_react_aria_components23.Modal,
2749
3296
  {
2750
3297
  "data-slot": "sheet-content",
2751
3298
  "data-side": side,
@@ -2753,16 +3300,16 @@ function Sheet({
2753
3300
  "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",
2754
3301
  className
2755
3302
  ),
2756
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
2757
- import_react_aria_components25.Dialog,
3303
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
3304
+ import_react_aria_components23.Dialog,
2758
3305
  {
2759
3306
  "data-slot": "sheet",
2760
3307
  className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
2761
3308
  children: [
2762
3309
  children,
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" })
3310
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
3311
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react12.XIcon, {}),
3312
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "sr-only", children: "Cerrar" })
2766
3313
  ] })
2767
3314
  ]
2768
3315
  }
@@ -2777,10 +3324,25 @@ function SheetContent({
2777
3324
  showCloseButton = true,
2778
3325
  ...props
2779
3326
  }) {
2780
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Sheet, { className, side, showCloseButton, ...props, children });
3327
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Sheet, { className, side, showCloseButton, ...props, children });
3328
+ }
3329
+ function Drawer({
3330
+ children,
3331
+ trigger,
3332
+ triggerProps,
3333
+ defaultOpen,
3334
+ isOpen,
3335
+ onOpenChange,
3336
+ ...contentProps
3337
+ }) {
3338
+ const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
3339
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(SheetTrigger, { defaultOpen, isOpen, onOpenChange, children: [
3340
+ triggerElement,
3341
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(SheetContent, { ...contentProps, children })
3342
+ ] });
2781
3343
  }
2782
3344
  function SheetHeader({ className, ...props }) {
2783
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3345
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2784
3346
  "div",
2785
3347
  {
2786
3348
  "data-slot": "sheet-header",
@@ -2790,7 +3352,7 @@ function SheetHeader({ className, ...props }) {
2790
3352
  );
2791
3353
  }
2792
3354
  function SheetFooter({ className, ...props }) {
2793
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3355
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2794
3356
  "div",
2795
3357
  {
2796
3358
  "data-slot": "sheet-footer",
@@ -2800,8 +3362,8 @@ function SheetFooter({ className, ...props }) {
2800
3362
  );
2801
3363
  }
2802
3364
  function SheetTitle({ className, ...props }) {
2803
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2804
- import_react_aria_components25.Heading,
3365
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3366
+ import_react_aria_components23.Heading,
2805
3367
  {
2806
3368
  slot: "title",
2807
3369
  "data-slot": "sheet-title",
@@ -2814,8 +3376,8 @@ function SheetDescription({
2814
3376
  className,
2815
3377
  ...props
2816
3378
  }) {
2817
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2818
- import_react_aria_components25.Text,
3379
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3380
+ import_react_aria_components23.Text,
2819
3381
  {
2820
3382
  slot: "description",
2821
3383
  "data-slot": "sheet-description",
@@ -2824,25 +3386,36 @@ function SheetDescription({
2824
3386
  }
2825
3387
  );
2826
3388
  }
3389
+ var DrawerTrigger = SheetTrigger;
3390
+ var DrawerContent = SheetContent;
3391
+ var DrawerClose = SheetClose;
3392
+ var DrawerHeader = SheetHeader;
3393
+ var DrawerFooter = SheetFooter;
3394
+ var DrawerTitle = SheetTitle;
3395
+ var DrawerDescription = SheetDescription;
2827
3396
 
2828
3397
  // src/ui/sidebar/sidebar.tsx
2829
- var import_lucide_react14 = require("lucide-react");
3398
+ var import_lucide_react13 = require("lucide-react");
3399
+ var import_react13 = require("react");
3400
+ var import_react_aria_components24 = require("react-aria-components");
3401
+
3402
+ // src/ui/sidebar/sidebar-context.ts
2830
3403
  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
3404
  var SidebarContext = (0, import_react12.createContext)(null);
2834
3405
  function useSidebar() {
2835
3406
  const context = (0, import_react12.useContext)(SidebarContext);
2836
- if (!context)
2837
- throw new Error("useSidebar must be used inside SidebarProvider");
3407
+ if (!context) throw new Error("useSidebar must be used inside SidebarProvider");
2838
3408
  return context;
2839
3409
  }
3410
+
3411
+ // src/ui/sidebar/sidebar.tsx
3412
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2840
3413
  function SidebarProvider({
2841
3414
  defaultCollapsed = false,
2842
3415
  children
2843
3416
  }) {
2844
- const [collapsed, setCollapsed] = (0, import_react12.useState)(defaultCollapsed);
2845
- const value = (0, import_react12.useMemo)(
3417
+ const [collapsed, setCollapsed] = (0, import_react13.useState)(defaultCollapsed);
3418
+ const value = (0, import_react13.useMemo)(
2846
3419
  () => ({
2847
3420
  collapsed,
2848
3421
  setCollapsed,
@@ -2850,14 +3423,11 @@ function SidebarProvider({
2850
3423
  }),
2851
3424
  [collapsed]
2852
3425
  );
2853
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(SidebarContext.Provider, { value, children });
3426
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(SidebarContext.Provider, { value, children });
2854
3427
  }
2855
- function Sidebar({
2856
- className,
2857
- ...props
2858
- }) {
3428
+ function Sidebar({ className, ...props }) {
2859
3429
  const { collapsed } = useSidebar();
2860
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3430
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2861
3431
  "aside",
2862
3432
  {
2863
3433
  "data-slot": "sidebar",
@@ -2870,11 +3440,8 @@ function Sidebar({
2870
3440
  }
2871
3441
  );
2872
3442
  }
2873
- function SidebarHeader({
2874
- className,
2875
- ...props
2876
- }) {
2877
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3443
+ function SidebarHeader({ className, ...props }) {
3444
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2878
3445
  "div",
2879
3446
  {
2880
3447
  "data-slot": "sidebar-header",
@@ -2889,7 +3456,7 @@ function SidebarSearch({
2889
3456
  className,
2890
3457
  ...props
2891
3458
  }) {
2892
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
3459
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
2893
3460
  "button",
2894
3461
  {
2895
3462
  type: "button",
@@ -2900,18 +3467,15 @@ function SidebarSearch({
2900
3467
  ),
2901
3468
  ...props,
2902
3469
  children: [
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 })
3470
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.Search, { className: "size-4 shrink-0" }),
3471
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "flex-1 text-left", children: label }),
3472
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("kbd", { className: "bg-secondary text-muted-foreground rounded px-1.5 py-0.5 font-mono text-[10px]", children: shortcut })
2906
3473
  ]
2907
3474
  }
2908
3475
  );
2909
3476
  }
2910
- function SidebarContent({
2911
- className,
2912
- ...props
2913
- }) {
2914
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3477
+ function SidebarContent({ className, ...props }) {
3478
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2915
3479
  "nav",
2916
3480
  {
2917
3481
  "data-slot": "sidebar-content",
@@ -2921,18 +3485,12 @@ function SidebarContent({
2921
3485
  }
2922
3486
  );
2923
3487
  }
2924
- function SidebarFooter({
2925
- className,
2926
- ...props
2927
- }) {
2928
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3488
+ function SidebarFooter({ className, ...props }) {
3489
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2929
3490
  "div",
2930
3491
  {
2931
3492
  "data-slot": "sidebar-footer",
2932
- className: cn(
2933
- "mt-auto flex flex-col gap-2 border-t border-border p-2",
2934
- className
2935
- ),
3493
+ className: cn("mt-auto flex flex-col gap-2 border-t border-border p-2", className),
2936
3494
  ...props
2937
3495
  }
2938
3496
  );
@@ -2944,27 +3502,19 @@ function SidebarGroup({
2944
3502
  ...props
2945
3503
  }) {
2946
3504
  const { collapsed } = useSidebar();
2947
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
2948
- "section",
2949
- {
2950
- "data-slot": "sidebar-group",
2951
- className: cn("mb-4 last:mb-0", className),
2952
- ...props,
2953
- children: [
2954
- label && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2955
- "h2",
2956
- {
2957
- className: cn(
2958
- "mb-1 px-3 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",
2959
- collapsed && "sr-only"
2960
- ),
2961
- children: label
2962
- }
3505
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("section", { "data-slot": "sidebar-group", className: cn("mb-4 last:mb-0", className), ...props, children: [
3506
+ label && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3507
+ "h2",
3508
+ {
3509
+ className: cn(
3510
+ "mb-1 px-3 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",
3511
+ collapsed && "sr-only"
2963
3512
  ),
2964
- children
2965
- ]
2966
- }
2967
- );
3513
+ children: label
3514
+ }
3515
+ ),
3516
+ children
3517
+ ] });
2968
3518
  }
2969
3519
  function SidebarItem({
2970
3520
  icon,
@@ -2977,8 +3527,8 @@ function SidebarItem({
2977
3527
  }) {
2978
3528
  const { collapsed } = useSidebar();
2979
3529
  const content = typeof children === "function" ? label : children ?? label;
2980
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2981
- import_react_aria_components26.Link,
3530
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3531
+ import_react_aria_components24.Link,
2982
3532
  {
2983
3533
  "data-slot": "sidebar-item",
2984
3534
  "aria-current": active ? "page" : void 0,
@@ -2989,25 +3539,16 @@ function SidebarItem({
2989
3539
  typeof className === "function" ? className : className
2990
3540
  ),
2991
3541
  ...props,
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)(
2995
- "span",
2996
- {
2997
- className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"),
2998
- children: typeof children === "function" ? children(values) : content
2999
- }
3000
- ),
3001
- badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "text-xs text-muted-foreground", children: badge })
3542
+ children: (values) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
3543
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
3544
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"), children: typeof children === "function" ? children(values) : content }),
3545
+ badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "text-muted-foreground text-xs", children: badge })
3002
3546
  ] })
3003
3547
  }
3004
3548
  );
3005
3549
  }
3006
- function SidebarSeparator({
3007
- className,
3008
- ...props
3009
- }) {
3010
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3550
+ function SidebarSeparator({ className, ...props }) {
3551
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3011
3552
  "hr",
3012
3553
  {
3013
3554
  "data-slot": "sidebar-separator",
@@ -3018,7 +3559,7 @@ function SidebarSeparator({
3018
3559
  }
3019
3560
  function SidebarTrigger({ className, ...props }) {
3020
3561
  const { collapsed, toggle } = useSidebar();
3021
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3562
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3022
3563
  Button,
3023
3564
  {
3024
3565
  "aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
@@ -3027,16 +3568,13 @@ function SidebarTrigger({ className, ...props }) {
3027
3568
  variant: "ghost",
3028
3569
  className: cn("ml-auto", className),
3029
3570
  ...props,
3030
- children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.ChevronLeft, {})
3571
+ children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.ChevronLeft, {})
3031
3572
  }
3032
3573
  );
3033
3574
  }
3034
- function SidebarRail({
3035
- className,
3036
- ...props
3037
- }) {
3575
+ function SidebarRail({ className, ...props }) {
3038
3576
  const { toggle } = useSidebar();
3039
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3577
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3040
3578
  "button",
3041
3579
  {
3042
3580
  type: "button",
@@ -3051,7 +3589,7 @@ function SidebarRail({
3051
3589
  );
3052
3590
  }
3053
3591
  function SidebarMore({ className, ...props }) {
3054
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3592
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3055
3593
  Button,
3056
3594
  {
3057
3595
  "aria-label": "M\xE1s opciones",
@@ -3059,34 +3597,85 @@ function SidebarMore({ className, ...props }) {
3059
3597
  variant: "ghost",
3060
3598
  className: cn("size-7", className),
3061
3599
  ...props,
3062
- children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.Ellipsis, {})
3600
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.Ellipsis, {})
3063
3601
  }
3064
3602
  );
3065
3603
  }
3066
3604
 
3067
3605
  // src/ui/skeleton/skeleton.tsx
3068
- var import_jsx_runtime45 = require("react/jsx-runtime");
3606
+ var import_jsx_runtime43 = require("react/jsx-runtime");
3069
3607
  function Skeleton({ 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 });
3608
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3609
+ "div",
3610
+ {
3611
+ "aria-hidden": "true",
3612
+ "data-slot": "skeleton",
3613
+ className: cn("animate-pulse rounded-md bg-muted", className),
3614
+ ...props
3615
+ }
3616
+ );
3071
3617
  }
3072
3618
 
3073
3619
  // src/ui/submit-button/submit-button.tsx
3620
+ var import_lucide_react14 = require("lucide-react");
3621
+ var import_react14 = require("react");
3074
3622
  var import_react_dom = require("react-dom");
3075
- var import_lucide_react15 = require("lucide-react");
3076
- var import_jsx_runtime46 = require("react/jsx-runtime");
3077
- function SubmitButton({ pendingLabel = "Guardando\u2026", loading = false, children, isDisabled, size = "sm", ...props }) {
3623
+ var import_jsx_runtime44 = require("react/jsx-runtime");
3624
+ function assignRef(ref, node) {
3625
+ if (typeof ref === "function") {
3626
+ ref(node);
3627
+ } else if (ref) {
3628
+ ref.current = node;
3629
+ }
3630
+ }
3631
+ function SubmitButton({
3632
+ loadingLabel,
3633
+ pendingLabel,
3634
+ loading = false,
3635
+ children,
3636
+ isDisabled,
3637
+ ref: forwardedRef,
3638
+ size = "sm",
3639
+ ...props
3640
+ }) {
3078
3641
  const { pending } = (0, import_react_dom.useFormStatus)();
3079
3642
  const busy = pending || loading;
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" }),
3082
- pendingLabel
3083
- ] }) : children });
3643
+ const label = loadingLabel ?? pendingLabel ?? "Guardando\u2026";
3644
+ const buttonRef = (0, import_react14.useRef)(null);
3645
+ const setButtonRef = (0, import_react14.useCallback)(
3646
+ (node) => {
3647
+ buttonRef.current = node;
3648
+ assignRef(forwardedRef, node);
3649
+ },
3650
+ [forwardedRef]
3651
+ );
3652
+ (0, import_react14.useLayoutEffect)(() => {
3653
+ const button = buttonRef.current;
3654
+ if (!button) return;
3655
+ if (busy) button.setAttribute("aria-busy", "true");
3656
+ else button.removeAttribute("aria-busy");
3657
+ }, [busy]);
3658
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3659
+ Button,
3660
+ {
3661
+ ref: setButtonRef,
3662
+ type: "submit",
3663
+ size,
3664
+ isDisabled: busy || isDisabled,
3665
+ "aria-busy": busy || void 0,
3666
+ ...props,
3667
+ children: busy ? /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
3668
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
3669
+ label
3670
+ ] }) : children
3671
+ }
3672
+ );
3084
3673
  }
3085
3674
 
3086
3675
  // src/ui/switch/switch.tsx
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");
3676
+ var import_react15 = require("react");
3677
+ var import_react_aria_components25 = require("react-aria-components");
3678
+ var import_jsx_runtime45 = require("react/jsx-runtime");
3090
3679
  var switchSizes = {
3091
3680
  sm: {
3092
3681
  control: "h-4 w-[1.875rem] p-0.5",
@@ -3126,13 +3715,14 @@ function Switch({
3126
3715
  ...props
3127
3716
  }) {
3128
3717
  const styles = switchSizes[size];
3129
- const fallbackInputRef = (0, import_react13.useRef)(null);
3718
+ const fallbackInputRef = (0, import_react15.useRef)(null);
3130
3719
  const resolvedInputRef = inputRef ?? fallbackInputRef;
3131
- (0, import_react13.useEffect)(() => {
3720
+ (0, import_react15.useEffect)(() => {
3132
3721
  const input = resolvedInputRef.current;
3133
3722
  if (!input) return;
3134
3723
  const handleDirectionalKey = (event) => {
3135
- if (event.target !== input || event.defaultPrevented || isDisabled || isReadOnly || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) return;
3724
+ if (event.target !== input || event.defaultPrevented || isDisabled || isReadOnly || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
3725
+ return;
3136
3726
  const nextSelected = event.key === "ArrowRight" ? true : event.key === "ArrowLeft" ? false : null;
3137
3727
  if (nextSelected === null) return;
3138
3728
  event.preventDefault();
@@ -3142,8 +3732,8 @@ function Switch({
3142
3732
  ownerDocument.addEventListener("keydown", handleDirectionalKey);
3143
3733
  return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
3144
3734
  }, [isDisabled, isReadOnly, resolvedInputRef]);
3145
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3146
- import_react_aria_components27.Switch,
3735
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3736
+ import_react_aria_components25.Switch,
3147
3737
  {
3148
3738
  "data-slot": "switch",
3149
3739
  "data-size": size,
@@ -3157,10 +3747,10 @@ function Switch({
3157
3747
  ),
3158
3748
  ...props,
3159
3749
  children: (state) => {
3160
- const isThumbActive = state.isHovered || state.isPressed;
3161
- const thumbOffset = state.isSelected ? isThumbActive ? styles.activeSelectedOffset : styles.selectedOffset : "0";
3162
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
3163
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3750
+ const isThumbPressed = state.isPressed;
3751
+ const thumbOffset = state.isSelected ? isThumbPressed ? styles.activeSelectedOffset : styles.selectedOffset : "0";
3752
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
3753
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3164
3754
  "span",
3165
3755
  {
3166
3756
  "aria-hidden": "true",
@@ -3174,13 +3764,13 @@ function Switch({
3174
3764
  "group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
3175
3765
  styles.control
3176
3766
  ),
3177
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3767
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3178
3768
  "span",
3179
3769
  {
3180
3770
  "data-slot": "switch-thumb",
3181
3771
  style: {
3182
3772
  transform: `translate3d(${thumbOffset}, 0, 0)`,
3183
- width: isThumbActive ? styles.activeWidth : styles.idleWidth
3773
+ width: isThumbPressed ? styles.activeWidth : styles.idleWidth
3184
3774
  },
3185
3775
  className: cn(
3186
3776
  "grid shrink-0 place-items-center rounded-full border border-border/60 bg-background text-[0.625rem] text-muted-foreground shadow-sm",
@@ -3194,9 +3784,16 @@ function Switch({
3194
3784
  )
3195
3785
  }
3196
3786
  ),
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
3787
+ children || description ? /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("span", { className: "grid gap-0.5 leading-tight", children: [
3788
+ children ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
3789
+ description ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3790
+ "span",
3791
+ {
3792
+ "data-slot": "switch-description",
3793
+ className: "text-muted-foreground text-xs font-normal",
3794
+ children: description
3795
+ }
3796
+ ) : null
3200
3797
  ] }) : null
3201
3798
  ] });
3202
3799
  }
@@ -3205,9 +3802,9 @@ function Switch({
3205
3802
  }
3206
3803
 
3207
3804
  // src/ui/table/table.tsx
3208
- var import_jsx_runtime48 = require("react/jsx-runtime");
3805
+ var import_jsx_runtime46 = require("react/jsx-runtime");
3209
3806
  function Table({ className, ...props }) {
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)(
3807
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3211
3808
  "table",
3212
3809
  {
3213
3810
  "data-slot": "table",
@@ -3217,10 +3814,10 @@ function Table({ className, ...props }) {
3217
3814
  ) });
3218
3815
  }
3219
3816
  function TableHeader({ className, ...props }) {
3220
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
3817
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
3221
3818
  }
3222
3819
  function TableBody({ className, ...props }) {
3223
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3820
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3224
3821
  "tbody",
3225
3822
  {
3226
3823
  "data-slot": "table-body",
@@ -3230,7 +3827,7 @@ function TableBody({ className, ...props }) {
3230
3827
  );
3231
3828
  }
3232
3829
  function TableRow({ className, ...props }) {
3233
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3830
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3234
3831
  "tr",
3235
3832
  {
3236
3833
  "data-slot": "table-row",
@@ -3243,7 +3840,7 @@ function TableRow({ className, ...props }) {
3243
3840
  );
3244
3841
  }
3245
3842
  function TableHead({ className, ...props }) {
3246
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3843
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3247
3844
  "th",
3248
3845
  {
3249
3846
  "data-slot": "table-head",
@@ -3256,7 +3853,7 @@ function TableHead({ className, ...props }) {
3256
3853
  );
3257
3854
  }
3258
3855
  function TableCell({ className, ...props }) {
3259
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3856
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3260
3857
  "td",
3261
3858
  {
3262
3859
  "data-slot": "table-cell",
@@ -3266,7 +3863,7 @@ function TableCell({ className, ...props }) {
3266
3863
  );
3267
3864
  }
3268
3865
  function TableCaption({ className, ...props }) {
3269
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3866
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3270
3867
  "caption",
3271
3868
  {
3272
3869
  "data-slot": "table-caption",
@@ -3276,39 +3873,87 @@ function TableCaption({ className, ...props }) {
3276
3873
  );
3277
3874
  }
3278
3875
  function TableFooter({ className, ...props }) {
3279
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3876
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3280
3877
  "tfoot",
3281
3878
  {
3282
3879
  "data-slot": "table-footer",
3283
- className: cn("border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0", className),
3880
+ className: cn(
3881
+ "border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0",
3882
+ className
3883
+ ),
3284
3884
  ...props
3285
3885
  }
3286
3886
  );
3287
3887
  }
3288
3888
 
3289
3889
  // src/ui/tabs/tabs.tsx
3290
- var import_react_aria_components28 = require("react-aria-components");
3291
- var import_jsx_runtime49 = require("react/jsx-runtime");
3890
+ var import_react_aria_components26 = require("react-aria-components");
3891
+ var import_jsx_runtime47 = require("react/jsx-runtime");
3292
3892
  function Tabs({ className, ...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 });
3893
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3894
+ import_react_aria_components26.Tabs,
3895
+ {
3896
+ "data-slot": "tabs",
3897
+ className: (0, import_react_aria_components26.composeRenderProps)(className, (value) => cn("flex flex-col gap-2", value)),
3898
+ ...props
3899
+ }
3900
+ );
3294
3901
  }
3295
3902
  function TabsList({ className, ...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 });
3903
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3904
+ import_react_aria_components26.TabList,
3905
+ {
3906
+ "data-slot": "tabs-list",
3907
+ className: (0, import_react_aria_components26.composeRenderProps)(
3908
+ className,
3909
+ (value) => cn(
3910
+ "inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground",
3911
+ value
3912
+ )
3913
+ ),
3914
+ ...props
3915
+ }
3916
+ );
3297
3917
  }
3298
3918
  function TabsTrigger({ className, ...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 });
3919
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3920
+ import_react_aria_components26.Tab,
3921
+ {
3922
+ "data-slot": "tabs-trigger",
3923
+ className: (0, import_react_aria_components26.composeRenderProps)(
3924
+ className,
3925
+ (value) => cn(
3926
+ "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",
3927
+ value
3928
+ )
3929
+ ),
3930
+ ...props
3931
+ }
3932
+ );
3300
3933
  }
3301
3934
  function TabsPanels({ 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 });
3935
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_react_aria_components26.TabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
3303
3936
  }
3304
3937
  function TabsContent({ className, ...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 });
3938
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3939
+ import_react_aria_components26.TabPanel,
3940
+ {
3941
+ "data-slot": "tabs-content",
3942
+ className: (0, import_react_aria_components26.composeRenderProps)(
3943
+ className,
3944
+ (value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)
3945
+ ),
3946
+ ...props
3947
+ }
3948
+ );
3306
3949
  }
3307
3950
 
3308
3951
  // src/ui/toast/toast.tsx
3309
- var import_react14 = require("react");
3952
+ var import_react16 = require("react");
3953
+ var import_sileo2 = require("sileo");
3954
+
3955
+ // src/ui/toast/toast-store.ts
3310
3956
  var import_sileo = require("sileo");
3311
- var import_jsx_runtime50 = require("react/jsx-runtime");
3312
3957
  function toSileoOptions({ title, description, duration, position, action }) {
3313
3958
  return {
3314
3959
  title,
@@ -3337,8 +3982,14 @@ var toast = Object.assign((options) => create(options), {
3337
3982
  const shared = { description: options.description, position: options.position };
3338
3983
  return import_sileo.sileo.promise(promise, {
3339
3984
  loading: { ...shared, title: options.loading },
3340
- success: (value) => ({ ...shared, title: typeof options.success === "function" ? options.success(value) : options.success }),
3341
- error: (error) => ({ ...shared, title: typeof options.error === "function" ? options.error(error) : options.error }),
3985
+ success: (value) => ({
3986
+ ...shared,
3987
+ title: typeof options.success === "function" ? options.success(value) : options.success
3988
+ }),
3989
+ error: (error) => ({
3990
+ ...shared,
3991
+ title: typeof options.error === "function" ? options.error(error) : options.error
3992
+ }),
3342
3993
  position: options.position
3343
3994
  });
3344
3995
  }
@@ -3346,26 +3997,43 @@ var toast = Object.assign((options) => create(options), {
3346
3997
  function useToast() {
3347
3998
  return toast;
3348
3999
  }
4000
+
4001
+ // src/ui/toast/toast.tsx
4002
+ var import_jsx_runtime48 = require("react/jsx-runtime");
3349
4003
  function ToastProvider({ children }) {
3350
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
4004
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
3351
4005
  children,
3352
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Toaster, {})
4006
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Toaster, {})
3353
4007
  ] });
3354
4008
  }
3355
4009
  function Toaster({ position }) {
3356
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_sileo.Toaster, { position, options: { fill: "var(--ui-secondary)" } });
4010
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_sileo2.Toaster, { position, options: { fill: "var(--ui-secondary)" } });
3357
4011
  }
3358
- function ToastViewport({ position, visiblePosition, className }) {
4012
+ function ToastViewport({
4013
+ position,
4014
+ visiblePosition,
4015
+ className
4016
+ }) {
3359
4017
  void className;
3360
4018
  if (visiblePosition && visiblePosition !== position) return null;
3361
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Toaster, { position });
4019
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Toaster, { position });
3362
4020
  }
3363
- function Toast({ id, title, description, variant = "default", action, state = "open", duration = 0, position, onDismiss }) {
3364
- (0, import_react14.useEffect)(() => {
4021
+ function Toast({
4022
+ id,
4023
+ title,
4024
+ description,
4025
+ variant = "default",
4026
+ action,
4027
+ state,
4028
+ duration = 0,
4029
+ position,
4030
+ onDismiss
4031
+ }) {
4032
+ (0, import_react16.useEffect)(() => {
3365
4033
  if (state !== "open") return;
3366
- const toastId = create({ title, description, variant, action, duration, position });
4034
+ const toastId = toast({ title, description, variant, action, duration, position });
3367
4035
  return () => {
3368
- import_sileo.sileo.dismiss(toastId);
4036
+ import_sileo2.sileo.dismiss(toastId);
3369
4037
  onDismiss?.();
3370
4038
  };
3371
4039
  }, [action, description, duration, id, onDismiss, position, state, title, variant]);
@@ -3373,15 +4041,30 @@ function Toast({ id, title, description, variant = "default", action, state = "o
3373
4041
  }
3374
4042
 
3375
4043
  // src/ui/toolbar/toolbar.tsx
3376
- var import_jsx_runtime51 = require("react/jsx-runtime");
4044
+ var import_jsx_runtime49 = require("react/jsx-runtime");
3377
4045
  function Toolbar({ 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 });
4046
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
4047
+ "div",
4048
+ {
4049
+ role: "toolbar",
4050
+ "data-slot": "toolbar",
4051
+ className: cn("flex flex-wrap items-center gap-2", className),
4052
+ ...props
4053
+ }
4054
+ );
3379
4055
  }
3380
4056
  function ToolbarGroup({ className, ...props }) {
3381
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
4057
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
4058
+ "div",
4059
+ {
4060
+ "data-slot": "toolbar-group",
4061
+ className: cn("flex items-center gap-2", className),
4062
+ ...props
4063
+ }
4064
+ );
3382
4065
  }
3383
4066
  function ToolbarSpacer({ className, ...props }) {
3384
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
4067
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
3385
4068
  }
3386
4069
  // Annotate the CommonJS export names for ESM import in node:
3387
4070
  0 && (module.exports = {
@@ -3460,15 +4143,20 @@ function ToolbarSpacer({ className, ...props }) {
3460
4143
  DialogHeader,
3461
4144
  DialogOverlay,
3462
4145
  DialogPortal,
4146
+ DialogRoot,
3463
4147
  DialogTitle,
3464
4148
  DialogTrigger,
3465
4149
  DocPreview,
3466
4150
  Drawer,
4151
+ DrawerClose,
4152
+ DrawerContent,
3467
4153
  DrawerDescription,
3468
4154
  DrawerFooter,
3469
4155
  DrawerHeader,
3470
4156
  DrawerTitle,
4157
+ DrawerTrigger,
3471
4158
  DropdownMenu,
4159
+ DropdownMenuContent,
3472
4160
  DropdownMenuGroup,
3473
4161
  DropdownMenuItem,
3474
4162
  DropdownMenuLabel,
@@ -3515,7 +4203,6 @@ function ToolbarSpacer({ className, ...props }) {
3515
4203
  MenuItem,
3516
4204
  MenuTrigger,
3517
4205
  MetricCard,
3518
- ModalDialog,
3519
4206
  OtpInput,
3520
4207
  PageHeader,
3521
4208
  PageHeaderActions,
@@ -3544,6 +4231,7 @@ function ToolbarSpacer({ className, ...props }) {
3544
4231
  SheetTrigger,
3545
4232
  Sidebar,
3546
4233
  SidebarContent,
4234
+ SidebarContext,
3547
4235
  SidebarFooter,
3548
4236
  SidebarGroup,
3549
4237
  SidebarHeader,
@@ -3579,6 +4267,7 @@ function ToolbarSpacer({ className, ...props }) {
3579
4267
  ToolbarGroup,
3580
4268
  ToolbarSpacer,
3581
4269
  Tooltip,
4270
+ TooltipContent,
3582
4271
  TooltipTrigger,
3583
4272
  actionRipple,
3584
4273
  alertVariants,