@doscientos/ui 0.1.17 → 0.1.19

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.js CHANGED
@@ -95,6 +95,12 @@ function useFormDirty() {
95
95
  return { formRef, isDirty, markDirty: () => setIsDirty(true), reset };
96
96
  }
97
97
 
98
+ // src/lib/action-ripple.ts
99
+ import { cva } from "class-variance-authority";
100
+ var actionRipple = cva(
101
+ "relative isolate overflow-hidden after:pointer-events-none after:absolute after:top-1/2 after:left-1/2 after:aspect-square after:w-full after:-translate-x-1/2 after:-translate-y-1/2 after:scale-0 after:rounded-full after:bg-current after:opacity-0 after:content-[''] after:transition-[scale,opacity] after:duration-300 after:ease-out active:after:scale-150 active:after:opacity-10 data-pressed:after:scale-150 data-pressed:after:opacity-10 motion-reduce:after:hidden"
102
+ );
103
+
98
104
  // src/lib/cn.ts
99
105
  import { clsx } from "clsx";
100
106
  import { twMerge } from "tailwind-merge";
@@ -233,9 +239,9 @@ function AccordionContent({
233
239
  }
234
240
 
235
241
  // src/ui/alert/alert.tsx
236
- import { cva } from "class-variance-authority";
242
+ import { cva as cva2 } from "class-variance-authority";
237
243
  import { jsx as jsx2 } from "react/jsx-runtime";
238
- var alertVariants = cva(
244
+ var alertVariants = cva2(
239
245
  "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",
240
246
  {
241
247
  variants: {
@@ -408,10 +414,10 @@ function AvatarGroupCount({ className, ...props }) {
408
414
  }
409
415
 
410
416
  // src/ui/badge/badge.tsx
411
- import { cva as cva2 } from "class-variance-authority";
417
+ import { cva as cva3 } from "class-variance-authority";
412
418
  import { Link } from "react-aria-components";
413
419
  import { jsx as jsx5 } from "react/jsx-runtime";
414
- var badgeVariants = cva2(
420
+ var badgeVariants = cva3(
415
421
  "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",
416
422
  {
417
423
  variants: {
@@ -474,80 +480,14 @@ function BreadcrumbSeparator({ children = "/", className, ...props }) {
474
480
  return /* @__PURE__ */ jsx6("span", { "data-slot": "breadcrumb-separator", "aria-hidden": "true", className: cn("text-muted-foreground/60", className), ...props, children });
475
481
  }
476
482
 
477
- // src/ui/button/button.tsx
478
- import { cva as cva3 } from "class-variance-authority";
479
- import {
480
- Button as ButtonPrimitive,
481
- Link as LinkPrimitive
482
- } from "react-aria-components";
483
- import { jsx as jsx7 } from "react/jsx-runtime";
484
- var buttonVariants = cva3(
485
- "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 active:not-aria-[haspopup]:translate-y-px 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",
486
- {
487
- variants: {
488
- variant: {
489
- default: "bg-primary text-primary-foreground hover:bg-primary/80",
490
- 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",
491
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
492
- ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
493
- 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",
494
- link: "text-primary underline-offset-4 hover:underline"
495
- },
496
- size: {
497
- default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
498
- 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",
499
- 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",
500
- lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
501
- icon: "size-8",
502
- "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
503
- "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
504
- "icon-lg": "size-9"
505
- }
506
- },
507
- defaultVariants: {
508
- variant: "default",
509
- size: "default"
510
- }
511
- }
512
- );
513
- function Button({ className, variant = "default", size = "default", ...props }) {
514
- return /* @__PURE__ */ jsx7(
515
- ButtonPrimitive,
516
- {
517
- "data-slot": "button",
518
- "data-variant": variant,
519
- "data-size": size,
520
- className: cn(buttonVariants({ variant, size, className })),
521
- ...props
522
- }
523
- );
524
- }
525
- function LinkButton({
526
- className,
527
- variant = "default",
528
- size = "default",
529
- ...props
530
- }) {
531
- return /* @__PURE__ */ jsx7(
532
- LinkPrimitive,
533
- {
534
- "data-slot": "button",
535
- "data-variant": variant,
536
- "data-size": size,
537
- className: cn(buttonVariants({ variant, size, className })),
538
- ...props
539
- }
540
- );
541
- }
542
-
543
483
  // src/ui/button-group/button-group.tsx
544
484
  import { cva as cva4 } from "class-variance-authority";
545
485
 
546
486
  // src/ui/separator/separator.tsx
547
487
  import { Separator as SeparatorPrimitive } from "react-aria-components";
548
- import { jsx as jsx8 } from "react/jsx-runtime";
488
+ import { jsx as jsx7 } from "react/jsx-runtime";
549
489
  function Separator({ className, orientation = "horizontal", ...props }) {
550
- return /* @__PURE__ */ jsx8(
490
+ return /* @__PURE__ */ jsx7(
551
491
  SeparatorPrimitive,
552
492
  {
553
493
  "data-slot": "separator",
@@ -562,7 +502,7 @@ function Separator({ className, orientation = "horizontal", ...props }) {
562
502
  }
563
503
 
564
504
  // src/ui/button-group/button-group.tsx
565
- import { jsx as jsx9 } from "react/jsx-runtime";
505
+ import { jsx as jsx8 } from "react/jsx-runtime";
566
506
  var buttonGroupVariants = cva4(
567
507
  "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",
568
508
  {
@@ -584,7 +524,7 @@ function ButtonGroup({
584
524
  }) {
585
525
  return (
586
526
  // biome-ignore lint/a11y/useSemanticElements: fieldset would impose form semantics on a generic action group.
587
- /* @__PURE__ */ jsx9(
527
+ /* @__PURE__ */ jsx8(
588
528
  "div",
589
529
  {
590
530
  role: "group",
@@ -612,7 +552,7 @@ function ButtonGroupText({
612
552
  };
613
553
  return render(renderProps);
614
554
  }
615
- return /* @__PURE__ */ jsx9(
555
+ return /* @__PURE__ */ jsx8(
616
556
  "div",
617
557
  {
618
558
  "data-slot": "button-group-text",
@@ -629,7 +569,7 @@ function ButtonGroupSeparator({
629
569
  orientation = "vertical",
630
570
  ...props
631
571
  }) {
632
- return /* @__PURE__ */ jsx9(
572
+ return /* @__PURE__ */ jsx8(
633
573
  Separator,
634
574
  {
635
575
  "data-slot": "button-group-separator",
@@ -643,6 +583,75 @@ function ButtonGroupSeparator({
643
583
  );
644
584
  }
645
585
 
586
+ // src/ui/button/button.tsx
587
+ import { cva as cva5 } from "class-variance-authority";
588
+ import {
589
+ Button as ButtonPrimitive,
590
+ Link as LinkPrimitive
591
+ } from "react-aria-components";
592
+ import { jsx as jsx9 } from "react/jsx-runtime";
593
+ var buttonVariants = cva5(
594
+ cn(
595
+ "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",
596
+ actionRipple()
597
+ ),
598
+ {
599
+ variants: {
600
+ variant: {
601
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
602
+ 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",
603
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
604
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
605
+ 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",
606
+ link: "text-primary underline-offset-4 hover:underline after:hidden"
607
+ },
608
+ size: {
609
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
610
+ 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",
611
+ 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",
612
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
613
+ icon: "size-8",
614
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
615
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
616
+ "icon-lg": "size-9"
617
+ }
618
+ },
619
+ defaultVariants: {
620
+ variant: "default",
621
+ size: "default"
622
+ }
623
+ }
624
+ );
625
+ function Button({ className, variant = "default", size = "default", ...props }) {
626
+ return /* @__PURE__ */ jsx9(
627
+ ButtonPrimitive,
628
+ {
629
+ "data-slot": "button",
630
+ "data-variant": variant,
631
+ "data-size": size,
632
+ className: cn(buttonVariants({ variant, size, className })),
633
+ ...props
634
+ }
635
+ );
636
+ }
637
+ function LinkButton({
638
+ className,
639
+ variant = "default",
640
+ size = "default",
641
+ ...props
642
+ }) {
643
+ return /* @__PURE__ */ jsx9(
644
+ LinkPrimitive,
645
+ {
646
+ "data-slot": "button",
647
+ "data-variant": variant,
648
+ "data-size": size,
649
+ className: cn(buttonVariants({ variant, size, className })),
650
+ ...props
651
+ }
652
+ );
653
+ }
654
+
646
655
  // src/ui/card/card.tsx
647
656
  import { jsx as jsx10 } from "react/jsx-runtime";
648
657
  function Card({ className, size = "default", ...props }) {
@@ -950,29 +959,182 @@ function ConfirmDialog({
950
959
  );
951
960
  }
952
961
 
962
+ // src/ui/dialog/dialog.tsx
963
+ import { XIcon } from "lucide-react";
964
+ import * as React2 from "react";
965
+ import {
966
+ Dialog as AriaDialog2,
967
+ Heading as Heading2,
968
+ Modal as Modal2,
969
+ ModalOverlay as ModalOverlay2,
970
+ Text as Text3
971
+ } from "react-aria-components";
972
+ import { Fragment as Fragment5, jsx as jsx16, jsxs as jsxs6 } from "react/jsx-runtime";
973
+ var DialogContext = React2.createContext(null);
974
+ function useDialogContext() {
975
+ const context = React2.useContext(DialogContext);
976
+ if (!context) throw new Error("Dialog components must be rendered within Dialog.");
977
+ return context;
978
+ }
979
+ function Dialog({ children, defaultOpen = false, onOpenChange, open: controlledOpen }) {
980
+ const [uncontrolledOpen, setUncontrolledOpen] = React2.useState(defaultOpen);
981
+ const open = controlledOpen ?? uncontrolledOpen;
982
+ const setOpen = React2.useCallback(
983
+ (nextOpen) => {
984
+ if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
985
+ onOpenChange?.(nextOpen);
986
+ },
987
+ [controlledOpen, onOpenChange]
988
+ );
989
+ return /* @__PURE__ */ jsx16(DialogContext.Provider, { value: { open, setOpen }, children });
990
+ }
991
+ function DialogTrigger({ asChild = false, children, onClick, ...props }) {
992
+ const { setOpen } = useDialogContext();
993
+ const handleClick = (event) => {
994
+ onClick?.(event);
995
+ if (!event.defaultPrevented) setOpen(true);
996
+ };
997
+ if (asChild && React2.isValidElement(children)) {
998
+ const child = children;
999
+ return React2.cloneElement(child, {
1000
+ ...props,
1001
+ "data-slot": "dialog-trigger",
1002
+ onClick: (event) => {
1003
+ child.props.onClick?.(event);
1004
+ handleClick(event);
1005
+ }
1006
+ });
1007
+ }
1008
+ return /* @__PURE__ */ jsx16(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
1009
+ }
1010
+ function DialogPortal({ children }) {
1011
+ return /* @__PURE__ */ jsx16(Fragment5, { children });
1012
+ }
1013
+ function DialogOverlay({ children, className, ...props }) {
1014
+ const { open, setOpen } = useDialogContext();
1015
+ if (!open) return null;
1016
+ return /* @__PURE__ */ jsx16(
1017
+ ModalOverlay2,
1018
+ {
1019
+ "data-slot": "dialog-overlay",
1020
+ isDismissable: true,
1021
+ isOpen: open,
1022
+ onOpenChange: setOpen,
1023
+ className: cn(
1024
+ "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",
1025
+ className
1026
+ ),
1027
+ ...props,
1028
+ children
1029
+ }
1030
+ );
1031
+ }
1032
+ function DialogContent({
1033
+ children,
1034
+ className,
1035
+ onOverlayClick,
1036
+ showCloseButton = true,
1037
+ ...props
1038
+ }) {
1039
+ const { setOpen } = useDialogContext();
1040
+ return /* @__PURE__ */ jsx16(DialogPortal, { children: /* @__PURE__ */ jsx16(
1041
+ DialogOverlay,
1042
+ {
1043
+ onClick: (event) => {
1044
+ if (event.target === event.currentTarget) onOverlayClick?.(event);
1045
+ },
1046
+ children: /* @__PURE__ */ jsx16(
1047
+ Modal2,
1048
+ {
1049
+ className: cn(
1050
+ "w-full max-w-[calc(100%-2rem)] max-h-[calc(100dvh-2rem)] outline-none sm:max-w-sm",
1051
+ className
1052
+ ),
1053
+ children: /* @__PURE__ */ jsxs6(
1054
+ AriaDialog2,
1055
+ {
1056
+ "data-slot": "dialog-content",
1057
+ className: cn(
1058
+ "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",
1059
+ className
1060
+ ),
1061
+ ...props,
1062
+ children: [
1063
+ children,
1064
+ showCloseButton ? /* @__PURE__ */ jsx16(
1065
+ Button,
1066
+ {
1067
+ "aria-label": "Cerrar di\xE1logo",
1068
+ "data-slot": "dialog-close",
1069
+ variant: "ghost",
1070
+ className: "absolute top-2 right-2",
1071
+ size: "icon-sm",
1072
+ onPress: () => setOpen(false),
1073
+ children: /* @__PURE__ */ jsx16(XIcon, {})
1074
+ }
1075
+ ) : null
1076
+ ]
1077
+ }
1078
+ )
1079
+ }
1080
+ )
1081
+ }
1082
+ ) });
1083
+ }
1084
+ function DialogClose({ asChild = false, children, onClick, ...props }) {
1085
+ const { setOpen } = useDialogContext();
1086
+ if (asChild && React2.isValidElement(children)) {
1087
+ const child = children;
1088
+ return React2.cloneElement(child, {
1089
+ ...props,
1090
+ "data-slot": "dialog-close",
1091
+ onClick: (event) => {
1092
+ child.props.onClick?.(event);
1093
+ if (!event.defaultPrevented) setOpen(false);
1094
+ }
1095
+ });
1096
+ }
1097
+ return /* @__PURE__ */ jsx16(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
1098
+ }
1099
+ function DialogHeader({ className, ...props }) {
1100
+ return /* @__PURE__ */ jsx16("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
1101
+ }
1102
+ function DialogFooter({ className, showCloseButton = false, children, ...props }) {
1103
+ return /* @__PURE__ */ jsxs6("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: [
1104
+ children,
1105
+ showCloseButton ? /* @__PURE__ */ jsx16(DialogClose, { variant: "outline", children: "Cerrar" }) : null
1106
+ ] });
1107
+ }
1108
+ function DialogTitle({ className, ...props }) {
1109
+ return /* @__PURE__ */ jsx16(Heading2, { slot: "title", "data-slot": "dialog-title", className: cn("font-heading text-base leading-none font-medium", className), ...props });
1110
+ }
1111
+ function DialogDescription({ className, ...props }) {
1112
+ return /* @__PURE__ */ jsx16(Text3, { 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 });
1113
+ }
1114
+
953
1115
  // src/ui/drawer/drawer.tsx
954
- import { Dialog as AriaDialog2, Modal as Modal2, ModalOverlay as ModalOverlay2 } from "react-aria-components";
955
- import { jsx as jsx16 } from "react/jsx-runtime";
1116
+ import { Dialog as AriaDialog3, Modal as Modal3, ModalOverlay as ModalOverlay3 } from "react-aria-components";
1117
+ import { jsx as jsx17 } from "react/jsx-runtime";
956
1118
  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" };
957
1119
  function Drawer({ children, side = "right", className, ...props }) {
958
- return /* @__PURE__ */ jsx16(ModalOverlay2, { 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__ */ jsx16(Modal2, { 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__ */ jsx16(AriaDialog2, { "data-slot": "drawer", className: "outline-none", children }) }) });
1120
+ return /* @__PURE__ */ jsx17(ModalOverlay3, { 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__ */ jsx17(Modal3, { 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__ */ jsx17(AriaDialog3, { "data-slot": "drawer", className: "outline-none", children }) }) });
959
1121
  }
960
1122
  function DrawerHeader({ className, ...props }) {
961
- return /* @__PURE__ */ jsx16("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
1123
+ return /* @__PURE__ */ jsx17("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
962
1124
  }
963
1125
  function DrawerFooter({ className, ...props }) {
964
- return /* @__PURE__ */ jsx16("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 });
1126
+ return /* @__PURE__ */ jsx17("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 });
965
1127
  }
966
1128
  function DrawerTitle({ className, ...props }) {
967
- return /* @__PURE__ */ jsx16("h2", { "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
1129
+ return /* @__PURE__ */ jsx17("h2", { "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
968
1130
  }
969
1131
  function DrawerDescription({ className, ...props }) {
970
- return /* @__PURE__ */ jsx16("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
1132
+ return /* @__PURE__ */ jsx17("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
971
1133
  }
972
1134
 
973
1135
  // src/ui/dropdown-menu/dropdown-menu.tsx
974
1136
  import "react";
975
- import { cva as cva5 } from "class-variance-authority";
1137
+ import { cva as cva6 } from "class-variance-authority";
976
1138
  import { CheckIcon, ChevronRightIcon } from "lucide-react";
977
1139
  import {
978
1140
  composeRenderProps,
@@ -985,11 +1147,11 @@ import {
985
1147
  Separator as SeparatorPrimitive2,
986
1148
  SubmenuTrigger as SubmenuTriggerPrimitive
987
1149
  } from "react-aria-components";
988
- import { Fragment as Fragment5, jsx as jsx17, jsxs as jsxs6 } from "react/jsx-runtime";
1150
+ import { Fragment as Fragment6, jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
989
1151
  function DropdownMenuTrigger({
990
1152
  ...props
991
1153
  }) {
992
- return /* @__PURE__ */ jsx17(MenuTriggerPrimitive, { "data-slot": "dropdown-menu-trigger", ...props });
1154
+ return /* @__PURE__ */ jsx18(MenuTriggerPrimitive, { "data-slot": "dropdown-menu-trigger", ...props });
993
1155
  }
994
1156
  function DropdownMenu({
995
1157
  "data-slot": dataSlot = "dropdown-menu-content",
@@ -1000,7 +1162,7 @@ function DropdownMenu({
1000
1162
  children,
1001
1163
  ...props
1002
1164
  }) {
1003
- return /* @__PURE__ */ jsx17(
1165
+ return /* @__PURE__ */ jsx18(
1004
1166
  PopoverPrimitive,
1005
1167
  {
1006
1168
  "data-slot": dataSlot,
@@ -1008,7 +1170,7 @@ function DropdownMenu({
1008
1170
  offset,
1009
1171
  crossOffset,
1010
1172
  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),
1011
- children: /* @__PURE__ */ jsx17(
1173
+ children: /* @__PURE__ */ jsx18(
1012
1174
  MenuPrimitive,
1013
1175
  {
1014
1176
  className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
@@ -1022,14 +1184,14 @@ function DropdownMenu({
1022
1184
  function DropdownMenuGroup({
1023
1185
  ...props
1024
1186
  }) {
1025
- return /* @__PURE__ */ jsx17(MenuSectionPrimitive, { "data-slot": "dropdown-menu-group", ...props });
1187
+ return /* @__PURE__ */ jsx18(MenuSectionPrimitive, { "data-slot": "dropdown-menu-group", ...props });
1026
1188
  }
1027
1189
  function DropdownMenuLabel({
1028
1190
  className,
1029
1191
  inset,
1030
1192
  ...props
1031
1193
  }) {
1032
- return /* @__PURE__ */ jsx17(
1194
+ return /* @__PURE__ */ jsx18(
1033
1195
  HeaderPrimitive,
1034
1196
  {
1035
1197
  "data-slot": "dropdown-menu-label",
@@ -1042,7 +1204,7 @@ function DropdownMenuLabel({
1042
1204
  }
1043
1205
  );
1044
1206
  }
1045
- var dropdownMenuItemVariants = cva5(
1207
+ var dropdownMenuItemVariants = cva6(
1046
1208
  "group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
1047
1209
  {
1048
1210
  variants: {
@@ -1061,7 +1223,7 @@ function DropdownMenuItem({
1061
1223
  children,
1062
1224
  ...props
1063
1225
  }) {
1064
- return /* @__PURE__ */ jsx17(
1226
+ return /* @__PURE__ */ jsx18(
1065
1227
  MenuItemPrimitive,
1066
1228
  {
1067
1229
  "data-slot": "dropdown-menu-item",
@@ -1075,13 +1237,13 @@ function DropdownMenuItem({
1075
1237
  ...props,
1076
1238
  children: composeRenderProps(
1077
1239
  children,
1078
- (children2, { isSelected, selectionMode }) => /* @__PURE__ */ jsxs6(Fragment5, { children: [
1079
- selectionMode !== "none" ? /* @__PURE__ */ jsx17(
1240
+ (children2, { isSelected, selectionMode }) => /* @__PURE__ */ jsxs7(Fragment6, { children: [
1241
+ selectionMode !== "none" ? /* @__PURE__ */ jsx18(
1080
1242
  "span",
1081
1243
  {
1082
1244
  className: "pointer-events-none absolute right-2 flex items-center justify-center",
1083
1245
  "data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
1084
- children: isSelected ? /* @__PURE__ */ jsx17(CheckIcon, {}) : null
1246
+ children: isSelected ? /* @__PURE__ */ jsx18(CheckIcon, {}) : null
1085
1247
  }
1086
1248
  ) : null,
1087
1249
  children2
@@ -1093,7 +1255,7 @@ function DropdownMenuItem({
1093
1255
  function DropdownMenuSub({
1094
1256
  ...props
1095
1257
  }) {
1096
- return /* @__PURE__ */ jsx17(SubmenuTriggerPrimitive, { "data-slot": "dropdown-menu-sub", ...props });
1258
+ return /* @__PURE__ */ jsx18(SubmenuTriggerPrimitive, { "data-slot": "dropdown-menu-sub", ...props });
1097
1259
  }
1098
1260
  function DropdownMenuSubTrigger({
1099
1261
  className,
@@ -1101,7 +1263,7 @@ function DropdownMenuSubTrigger({
1101
1263
  children,
1102
1264
  ...props
1103
1265
  }) {
1104
- return /* @__PURE__ */ jsx17(
1266
+ return /* @__PURE__ */ jsx18(
1105
1267
  MenuItemPrimitive,
1106
1268
  {
1107
1269
  "data-slot": "dropdown-menu-sub-trigger",
@@ -1112,9 +1274,9 @@ function DropdownMenuSubTrigger({
1112
1274
  className
1113
1275
  ),
1114
1276
  ...props,
1115
- children: composeRenderProps(children, (children2) => /* @__PURE__ */ jsxs6(Fragment5, { children: [
1277
+ children: composeRenderProps(children, (children2) => /* @__PURE__ */ jsxs7(Fragment6, { children: [
1116
1278
  children2,
1117
- /* @__PURE__ */ jsx17(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1279
+ /* @__PURE__ */ jsx18(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1118
1280
  ] }))
1119
1281
  }
1120
1282
  );
@@ -1126,7 +1288,7 @@ function DropdownMenuSubContent({
1126
1288
  className,
1127
1289
  ...props
1128
1290
  }) {
1129
- return /* @__PURE__ */ jsx17(
1291
+ return /* @__PURE__ */ jsx18(
1130
1292
  DropdownMenu,
1131
1293
  {
1132
1294
  "data-slot": "dropdown-menu-sub-content",
@@ -1142,7 +1304,7 @@ function DropdownMenuSeparator({
1142
1304
  className,
1143
1305
  ...props
1144
1306
  }) {
1145
- return /* @__PURE__ */ jsx17(
1307
+ return /* @__PURE__ */ jsx18(
1146
1308
  SeparatorPrimitive2,
1147
1309
  {
1148
1310
  "data-slot": "dropdown-menu-separator",
@@ -1155,7 +1317,7 @@ function DropdownMenuShortcut({
1155
1317
  className,
1156
1318
  ...props
1157
1319
  }) {
1158
- return /* @__PURE__ */ jsx17(
1320
+ return /* @__PURE__ */ jsx18(
1159
1321
  "span",
1160
1322
  {
1161
1323
  "data-slot": "dropdown-menu-shortcut",
@@ -1169,10 +1331,10 @@ function DropdownMenuShortcut({
1169
1331
  }
1170
1332
 
1171
1333
  // src/ui/empty-state/empty-state.tsx
1172
- import { cva as cva6 } from "class-variance-authority";
1173
- import { jsx as jsx18 } from "react/jsx-runtime";
1334
+ import { cva as cva7 } from "class-variance-authority";
1335
+ import { jsx as jsx19 } from "react/jsx-runtime";
1174
1336
  function EmptyState({ className, ...props }) {
1175
- return /* @__PURE__ */ jsx18(
1337
+ return /* @__PURE__ */ jsx19(
1176
1338
  "div",
1177
1339
  {
1178
1340
  "data-slot": "empty-state",
@@ -1185,7 +1347,7 @@ function EmptyState({ className, ...props }) {
1185
1347
  );
1186
1348
  }
1187
1349
  function EmptyStateHeader({ className, ...props }) {
1188
- return /* @__PURE__ */ jsx18(
1350
+ return /* @__PURE__ */ jsx19(
1189
1351
  "div",
1190
1352
  {
1191
1353
  "data-slot": "empty-state-header",
@@ -1194,7 +1356,7 @@ function EmptyStateHeader({ className, ...props }) {
1194
1356
  }
1195
1357
  );
1196
1358
  }
1197
- var emptyStateMediaVariants = cva6(
1359
+ var emptyStateMediaVariants = cva7(
1198
1360
  "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
1199
1361
  {
1200
1362
  variants: {
@@ -1211,7 +1373,7 @@ function EmptyStateMedia({
1211
1373
  variant = "default",
1212
1374
  ...props
1213
1375
  }) {
1214
- return /* @__PURE__ */ jsx18(
1376
+ return /* @__PURE__ */ jsx19(
1215
1377
  "div",
1216
1378
  {
1217
1379
  "data-slot": "empty-state-media",
@@ -1222,7 +1384,7 @@ function EmptyStateMedia({
1222
1384
  );
1223
1385
  }
1224
1386
  function EmptyStateTitle({ className, ...props }) {
1225
- return /* @__PURE__ */ jsx18(
1387
+ return /* @__PURE__ */ jsx19(
1226
1388
  "h3",
1227
1389
  {
1228
1390
  "data-slot": "empty-state-title",
@@ -1232,7 +1394,7 @@ function EmptyStateTitle({ className, ...props }) {
1232
1394
  );
1233
1395
  }
1234
1396
  function EmptyStateDescription({ className, ...props }) {
1235
- return /* @__PURE__ */ jsx18(
1397
+ return /* @__PURE__ */ jsx19(
1236
1398
  "p",
1237
1399
  {
1238
1400
  "data-slot": "empty-state-description",
@@ -1245,7 +1407,7 @@ function EmptyStateDescription({ className, ...props }) {
1245
1407
  );
1246
1408
  }
1247
1409
  function EmptyStateContent({ className, ...props }) {
1248
- return /* @__PURE__ */ jsx18(
1410
+ return /* @__PURE__ */ jsx19(
1249
1411
  "div",
1250
1412
  {
1251
1413
  "data-slot": "empty-state-content",
@@ -1259,27 +1421,27 @@ function EmptyStateContent({ className, ...props }) {
1259
1421
  }
1260
1422
 
1261
1423
  // src/ui/field/field.tsx
1262
- import { cva as cva7 } from "class-variance-authority";
1424
+ import { cva as cva8 } from "class-variance-authority";
1263
1425
 
1264
1426
  // src/ui/label/label.tsx
1265
1427
  import { forwardRef } from "react";
1266
1428
  import { Label as LabelPrimitive } from "react-aria-components";
1267
- import { jsx as jsx19 } from "react/jsx-runtime";
1429
+ import { jsx as jsx20 } from "react/jsx-runtime";
1268
1430
  var Label2 = forwardRef(function Label3({ className, ...props }, ref) {
1269
- return /* @__PURE__ */ jsx19(LabelPrimitive, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
1431
+ return /* @__PURE__ */ jsx20(LabelPrimitive, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
1270
1432
  });
1271
1433
 
1272
1434
  // src/ui/field/field.tsx
1273
- import { jsx as jsx20, jsxs as jsxs7 } from "react/jsx-runtime";
1435
+ import { jsx as jsx21, jsxs as jsxs8 } from "react/jsx-runtime";
1274
1436
  function FieldSet({ className, ...props }) {
1275
- return /* @__PURE__ */ jsx20("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1437
+ return /* @__PURE__ */ jsx21("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1276
1438
  }
1277
1439
  function FieldLegend({
1278
1440
  className,
1279
1441
  variant = "legend",
1280
1442
  ...props
1281
1443
  }) {
1282
- return /* @__PURE__ */ jsx20(
1444
+ return /* @__PURE__ */ jsx21(
1283
1445
  "legend",
1284
1446
  {
1285
1447
  "data-slot": "field-legend",
@@ -1293,7 +1455,7 @@ function FieldLegend({
1293
1455
  );
1294
1456
  }
1295
1457
  function FieldGroup({ className, ...props }) {
1296
- return /* @__PURE__ */ jsx20(
1458
+ return /* @__PURE__ */ jsx21(
1297
1459
  "div",
1298
1460
  {
1299
1461
  "data-slot": "field-group",
@@ -1305,7 +1467,7 @@ function FieldGroup({ className, ...props }) {
1305
1467
  }
1306
1468
  );
1307
1469
  }
1308
- var fieldVariants = cva7(
1470
+ var fieldVariants = cva8(
1309
1471
  "group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
1310
1472
  {
1311
1473
  variants: {
@@ -1321,7 +1483,7 @@ var fieldVariants = cva7(
1321
1483
  function Field({ className, orientation = "vertical", ...props }) {
1322
1484
  return (
1323
1485
  // biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
1324
- /* @__PURE__ */ jsx20(
1486
+ /* @__PURE__ */ jsx21(
1325
1487
  "div",
1326
1488
  {
1327
1489
  role: "group",
@@ -1334,7 +1496,7 @@ function Field({ className, orientation = "vertical", ...props }) {
1334
1496
  );
1335
1497
  }
1336
1498
  function FieldContent({ className, ...props }) {
1337
- return /* @__PURE__ */ jsx20(
1499
+ return /* @__PURE__ */ jsx21(
1338
1500
  "div",
1339
1501
  {
1340
1502
  "data-slot": "field-content",
@@ -1344,7 +1506,7 @@ function FieldContent({ className, ...props }) {
1344
1506
  );
1345
1507
  }
1346
1508
  function FieldLabel({ className, ...props }) {
1347
- return /* @__PURE__ */ jsx20(
1509
+ return /* @__PURE__ */ jsx21(
1348
1510
  Label2,
1349
1511
  {
1350
1512
  "data-slot": "field-label",
@@ -1357,7 +1519,7 @@ function FieldLabel({ className, ...props }) {
1357
1519
  );
1358
1520
  }
1359
1521
  function FieldTitle({ className, ...props }) {
1360
- return /* @__PURE__ */ jsx20(
1522
+ return /* @__PURE__ */ jsx21(
1361
1523
  "div",
1362
1524
  {
1363
1525
  "data-slot": "field-title",
@@ -1367,7 +1529,7 @@ function FieldTitle({ className, ...props }) {
1367
1529
  );
1368
1530
  }
1369
1531
  function FieldDescription({ className, ...props }) {
1370
- return /* @__PURE__ */ jsx20(
1532
+ return /* @__PURE__ */ jsx21(
1371
1533
  "p",
1372
1534
  {
1373
1535
  "data-slot": "field-description",
@@ -1380,7 +1542,7 @@ function FieldDescription({ className, ...props }) {
1380
1542
  );
1381
1543
  }
1382
1544
  function FieldSeparator({ className, children, ...props }) {
1383
- return /* @__PURE__ */ jsxs7(
1545
+ return /* @__PURE__ */ jsxs8(
1384
1546
  "div",
1385
1547
  {
1386
1548
  "data-slot": "field-separator",
@@ -1388,8 +1550,8 @@ function FieldSeparator({ className, children, ...props }) {
1388
1550
  className: cn("relative -my-2 h-5 text-sm", className),
1389
1551
  ...props,
1390
1552
  children: [
1391
- /* @__PURE__ */ jsx20(Separator, { className: "absolute inset-0 top-1/2" }),
1392
- children ? /* @__PURE__ */ jsx20(
1553
+ /* @__PURE__ */ jsx21(Separator, { className: "absolute inset-0 top-1/2" }),
1554
+ children ? /* @__PURE__ */ jsx21(
1393
1555
  "span",
1394
1556
  {
1395
1557
  "data-slot": "field-separator-content",
@@ -1403,9 +1565,9 @@ function FieldSeparator({ className, children, ...props }) {
1403
1565
  }
1404
1566
  function FieldError2({ className, children, errors, ...props }) {
1405
1567
  const messages = [...new Set(errors?.flatMap((error) => error?.message ?? []) ?? [])];
1406
- const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ jsx20("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ jsx20("li", { children: message }, message)) }) : null);
1568
+ const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ jsx21("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ jsx21("li", { children: message }, message)) }) : null);
1407
1569
  if (!content) return null;
1408
- return /* @__PURE__ */ jsx20(
1570
+ return /* @__PURE__ */ jsx21(
1409
1571
  "div",
1410
1572
  {
1411
1573
  role: "alert",
@@ -1418,65 +1580,65 @@ function FieldError2({ className, children, errors, ...props }) {
1418
1580
  }
1419
1581
 
1420
1582
  // src/ui/form-feedback/form-feedback.tsx
1421
- import { useCallback as useCallback3, useEffect as useEffect4, useRef as useRef3, useState as useState6 } from "react";
1583
+ import { useCallback as useCallback4, useEffect as useEffect4, useRef as useRef3, useState as useState7 } from "react";
1422
1584
  import { CheckCircle, LoaderCircle, CircleAlert } from "lucide-react";
1423
- import { jsx as jsx21, jsxs as jsxs8 } from "react/jsx-runtime";
1585
+ import { jsx as jsx22, jsxs as jsxs9 } from "react/jsx-runtime";
1424
1586
  function useFormFeedback(options) {
1425
1587
  const resetMs = options?.successResetMs ?? 2500;
1426
- const [state, setState] = useState6({ status: "idle" });
1588
+ const [state, setState] = useState7({ status: "idle" });
1427
1589
  const timer = useRef3(null);
1428
- const clearTimer = useCallback3(() => {
1590
+ const clearTimer = useCallback4(() => {
1429
1591
  if (timer.current) clearTimeout(timer.current);
1430
1592
  timer.current = null;
1431
1593
  }, []);
1432
1594
  useEffect4(() => () => clearTimer(), [clearTimer]);
1433
- const setPending = useCallback3(() => {
1595
+ const setPending = useCallback4(() => {
1434
1596
  clearTimer();
1435
1597
  setState({ status: "pending" });
1436
1598
  }, [clearTimer]);
1437
- const setSuccess = useCallback3((message) => {
1599
+ const setSuccess = useCallback4((message) => {
1438
1600
  clearTimer();
1439
1601
  setState({ status: "success", message });
1440
1602
  if (resetMs > 0) timer.current = setTimeout(() => setState({ status: "idle" }), resetMs);
1441
1603
  }, [clearTimer, resetMs]);
1442
- const setError = useCallback3((message) => {
1604
+ const setError = useCallback4((message) => {
1443
1605
  clearTimer();
1444
1606
  setState({ status: "error", message });
1445
1607
  }, [clearTimer]);
1446
- const reset = useCallback3(() => {
1608
+ const reset = useCallback4(() => {
1447
1609
  clearTimer();
1448
1610
  setState({ status: "idle" });
1449
1611
  }, [clearTimer]);
1450
1612
  return { state, pending: state.status === "pending", setPending, setSuccess, setError, reset };
1451
1613
  }
1452
1614
  function FormFeedback({ state, className, pendingLabel = "Guardando\u2026", successLabel = "Guardado" }) {
1453
- if (state.status === "idle") return /* @__PURE__ */ jsx21("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
1615
+ if (state.status === "idle") return /* @__PURE__ */ jsx22("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
1454
1616
  const error = state.status === "error";
1455
1617
  const success = state.status === "success";
1456
- return /* @__PURE__ */ jsxs8("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: [
1457
- state.status === "pending" && /* @__PURE__ */ jsx21(LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
1458
- success && /* @__PURE__ */ jsx21(CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
1459
- error && /* @__PURE__ */ jsx21(CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
1460
- /* @__PURE__ */ jsx21("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
1618
+ return /* @__PURE__ */ jsxs9("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: [
1619
+ state.status === "pending" && /* @__PURE__ */ jsx22(LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
1620
+ success && /* @__PURE__ */ jsx22(CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
1621
+ error && /* @__PURE__ */ jsx22(CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
1622
+ /* @__PURE__ */ jsx22("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
1461
1623
  ] });
1462
1624
  }
1463
1625
 
1464
1626
  // src/ui/form-row/form-row.tsx
1465
- import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs9 } from "react/jsx-runtime";
1627
+ import { Fragment as Fragment7, jsx as jsx23, jsxs as jsxs10 } from "react/jsx-runtime";
1466
1628
  function FormRow({ label, htmlFor, required, hint, error, className, children }) {
1467
1629
  const hintId = hint ? `${htmlFor}-hint` : void 0;
1468
1630
  const errorId = error ? `${htmlFor}-error` : void 0;
1469
- return /* @__PURE__ */ jsxs9("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
1470
- /* @__PURE__ */ jsxs9("label", { htmlFor, className: "text-sm font-medium text-foreground", children: [
1631
+ return /* @__PURE__ */ jsxs10("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
1632
+ /* @__PURE__ */ jsxs10("label", { htmlFor, className: "text-sm font-medium text-foreground", children: [
1471
1633
  label,
1472
- required && /* @__PURE__ */ jsxs9(Fragment6, { children: [
1473
- /* @__PURE__ */ jsx22("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" }),
1474
- /* @__PURE__ */ jsx22("span", { className: "sr-only", children: " (obligatorio)" })
1634
+ required && /* @__PURE__ */ jsxs10(Fragment7, { children: [
1635
+ /* @__PURE__ */ jsx23("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" }),
1636
+ /* @__PURE__ */ jsx23("span", { className: "sr-only", children: " (obligatorio)" })
1475
1637
  ] })
1476
1638
  ] }),
1477
1639
  children,
1478
- hint && /* @__PURE__ */ jsx22("p", { id: hintId, className: "text-xs text-muted-foreground", children: hint }),
1479
- error && /* @__PURE__ */ jsx22("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive", children: error })
1640
+ hint && /* @__PURE__ */ jsx23("p", { id: hintId, className: "text-xs text-muted-foreground", children: hint }),
1641
+ error && /* @__PURE__ */ jsx23("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive", children: error })
1480
1642
  ] });
1481
1643
  }
1482
1644
 
@@ -1484,28 +1646,28 @@ function FormRow({ label, htmlFor, required, hint, error, className, children })
1484
1646
  import { Link as Link2 } from "react-aria-components";
1485
1647
 
1486
1648
  // src/ui/tooltip/tooltip.tsx
1487
- import * as React3 from "react";
1649
+ import * as React4 from "react";
1488
1650
  import {
1489
1651
  Focusable,
1490
1652
  OverlayArrow,
1491
1653
  Tooltip as TooltipPrimitive,
1492
1654
  TooltipTrigger as TooltipTriggerPrimitive
1493
1655
  } from "react-aria-components";
1494
- import { jsx as jsx23, jsxs as jsxs10 } from "react/jsx-runtime";
1656
+ import { jsx as jsx24, jsxs as jsxs11 } from "react/jsx-runtime";
1495
1657
  function TooltipTrigger({
1496
1658
  delay = 0,
1497
1659
  children,
1498
1660
  ...props
1499
1661
  }) {
1500
- const [trigger, tooltip] = React3.Children.toArray(children);
1501
- return /* @__PURE__ */ jsxs10(
1662
+ const [trigger, tooltip] = React4.Children.toArray(children);
1663
+ return /* @__PURE__ */ jsxs11(
1502
1664
  TooltipTriggerPrimitive,
1503
1665
  {
1504
1666
  "data-slot": "tooltip-trigger",
1505
1667
  delay,
1506
1668
  ...props,
1507
1669
  children: [
1508
- /* @__PURE__ */ jsx23(Focusable, { children: trigger }),
1670
+ /* @__PURE__ */ jsx24(Focusable, { children: trigger }),
1509
1671
  tooltip
1510
1672
  ]
1511
1673
  }
@@ -1519,7 +1681,7 @@ function Tooltip({
1519
1681
  children,
1520
1682
  ...props
1521
1683
  }) {
1522
- return /* @__PURE__ */ jsxs10(
1684
+ return /* @__PURE__ */ jsxs11(
1523
1685
  TooltipPrimitive,
1524
1686
  {
1525
1687
  "data-slot": "tooltip-content",
@@ -1533,7 +1695,7 @@ function Tooltip({
1533
1695
  ...props,
1534
1696
  children: [
1535
1697
  children,
1536
- /* @__PURE__ */ jsx23(
1698
+ /* @__PURE__ */ jsx24(
1537
1699
  OverlayArrow,
1538
1700
  {
1539
1701
  className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground",
@@ -1551,7 +1713,7 @@ function Tooltip({
1551
1713
  }
1552
1714
 
1553
1715
  // src/ui/icon-button/icon-button.tsx
1554
- import { jsx as jsx24, jsxs as jsxs11 } from "react/jsx-runtime";
1716
+ import { jsx as jsx25, jsxs as jsxs12 } from "react/jsx-runtime";
1555
1717
  function IconButton({
1556
1718
  label,
1557
1719
  children,
@@ -1564,8 +1726,8 @@ function IconButton({
1564
1726
  buttonVariants({ variant, size: "icon" }),
1565
1727
  className
1566
1728
  );
1567
- return /* @__PURE__ */ jsxs11(TooltipTrigger, { children: [
1568
- href ? /* @__PURE__ */ jsx24(
1729
+ return /* @__PURE__ */ jsxs12(TooltipTrigger, { children: [
1730
+ href ? /* @__PURE__ */ jsx25(
1569
1731
  Link2,
1570
1732
  {
1571
1733
  "data-slot": "icon-button",
@@ -1574,7 +1736,7 @@ function IconButton({
1574
1736
  className: linkClassName,
1575
1737
  children
1576
1738
  }
1577
- ) : /* @__PURE__ */ jsx24(
1739
+ ) : /* @__PURE__ */ jsx25(
1578
1740
  Button,
1579
1741
  {
1580
1742
  "data-slot": "icon-button",
@@ -1586,37 +1748,37 @@ function IconButton({
1586
1748
  children
1587
1749
  }
1588
1750
  ),
1589
- /* @__PURE__ */ jsx24(Tooltip, { children: label })
1751
+ /* @__PURE__ */ jsx25(Tooltip, { children: label })
1590
1752
  ] });
1591
1753
  }
1592
1754
 
1755
+ // src/ui/input-group/input-group.tsx
1756
+ import { cva as cva9 } from "class-variance-authority";
1757
+
1593
1758
  // src/ui/input/input.tsx
1594
1759
  import { forwardRef as forwardRef2 } from "react";
1595
1760
  import { Input as AriaInput2 } from "react-aria-components";
1596
- import { jsx as jsx25 } from "react/jsx-runtime";
1761
+ import { jsx as jsx26 } from "react/jsx-runtime";
1597
1762
  var InputImpl = forwardRef2(function Input2({ className, type, ...props }, ref) {
1598
- return /* @__PURE__ */ jsx25(AriaInput2, { 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 });
1763
+ return /* @__PURE__ */ jsx26(AriaInput2, { 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 });
1599
1764
  });
1600
1765
  var Input3 = InputImpl;
1601
1766
 
1602
- // src/ui/input-group/input-group.tsx
1603
- import { cva as cva8 } from "class-variance-authority";
1604
-
1605
1767
  // src/ui/textarea/textarea.tsx
1606
1768
  import { forwardRef as forwardRef3 } from "react";
1607
1769
  import { TextArea as AriaTextArea } from "react-aria-components";
1608
- import { jsx as jsx26 } from "react/jsx-runtime";
1770
+ import { jsx as jsx27 } from "react/jsx-runtime";
1609
1771
  var TextareaImpl = forwardRef3(function Textarea({ className, ...props }, ref) {
1610
- return /* @__PURE__ */ jsx26(AriaTextArea, { 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 });
1772
+ return /* @__PURE__ */ jsx27(AriaTextArea, { 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 });
1611
1773
  });
1612
1774
  var Textarea2 = TextareaImpl;
1613
1775
 
1614
1776
  // src/ui/input-group/input-group.tsx
1615
- import { jsx as jsx27 } from "react/jsx-runtime";
1777
+ import { jsx as jsx28 } from "react/jsx-runtime";
1616
1778
  function InputGroup({ className, ...props }) {
1617
1779
  return (
1618
1780
  // biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
1619
- /* @__PURE__ */ jsx27(
1781
+ /* @__PURE__ */ jsx28(
1620
1782
  "div",
1621
1783
  {
1622
1784
  role: "group",
@@ -1630,7 +1792,7 @@ function InputGroup({ className, ...props }) {
1630
1792
  )
1631
1793
  );
1632
1794
  }
1633
- var inputGroupAddonVariants = cva8(
1795
+ var inputGroupAddonVariants = cva9(
1634
1796
  "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",
1635
1797
  {
1636
1798
  variants: {
@@ -1652,7 +1814,7 @@ function InputGroupAddon({
1652
1814
  }) {
1653
1815
  return (
1654
1816
  // biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
1655
- /* @__PURE__ */ jsx27(
1817
+ /* @__PURE__ */ jsx28(
1656
1818
  "div",
1657
1819
  {
1658
1820
  role: "group",
@@ -1669,7 +1831,7 @@ function InputGroupAddon({
1669
1831
  )
1670
1832
  );
1671
1833
  }
1672
- var inputGroupButtonVariants = cva8("shrink-0 shadow-none", {
1834
+ var inputGroupButtonVariants = cva9("shrink-0 shadow-none", {
1673
1835
  variants: {
1674
1836
  size: { xs: "h-6 px-1.5 text-xs", sm: "h-7 px-2", "icon-xs": "size-6", "icon-sm": "size-7" }
1675
1837
  },
@@ -1683,7 +1845,7 @@ function InputGroupButton({
1683
1845
  ...props
1684
1846
  }) {
1685
1847
  const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
1686
- return /* @__PURE__ */ jsx27(
1848
+ return /* @__PURE__ */ jsx28(
1687
1849
  Button,
1688
1850
  {
1689
1851
  "data-slot": "input-group-button",
@@ -1696,7 +1858,7 @@ function InputGroupButton({
1696
1858
  );
1697
1859
  }
1698
1860
  function InputGroupText({ className, ...props }) {
1699
- return /* @__PURE__ */ jsx27(
1861
+ return /* @__PURE__ */ jsx28(
1700
1862
  "span",
1701
1863
  {
1702
1864
  "data-slot": "input-group-text",
@@ -1709,7 +1871,7 @@ function InputGroupText({ className, ...props }) {
1709
1871
  );
1710
1872
  }
1711
1873
  function InputGroupInput({ className, ...props }) {
1712
- return /* @__PURE__ */ jsx27(
1874
+ return /* @__PURE__ */ jsx28(
1713
1875
  Input3,
1714
1876
  {
1715
1877
  "data-slot": "input-group-control",
@@ -1722,7 +1884,7 @@ function InputGroupInput({ className, ...props }) {
1722
1884
  );
1723
1885
  }
1724
1886
  function InputGroupTextarea({ className, ...props }) {
1725
- return /* @__PURE__ */ jsx27(
1887
+ return /* @__PURE__ */ jsx28(
1726
1888
  Textarea2,
1727
1889
  {
1728
1890
  "data-slot": "input-group-control",
@@ -1736,21 +1898,21 @@ function InputGroupTextarea({ className, ...props }) {
1736
1898
  }
1737
1899
 
1738
1900
  // src/ui/kbd/kbd.tsx
1739
- import { jsx as jsx28 } from "react/jsx-runtime";
1901
+ import { jsx as jsx29 } from "react/jsx-runtime";
1740
1902
  function Kbd({ className, ...props }) {
1741
- return /* @__PURE__ */ jsx28("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 });
1903
+ return /* @__PURE__ */ jsx29("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 });
1742
1904
  }
1743
1905
  function KbdGroup({ className, ...props }) {
1744
- return /* @__PURE__ */ jsx28("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
1906
+ return /* @__PURE__ */ jsx29("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
1745
1907
  }
1746
1908
 
1747
1909
  // src/ui/loading-overlay/loading-overlay.tsx
1748
1910
  import { LoaderCircle as LoaderCircle2 } from "lucide-react";
1749
- import { jsx as jsx29, jsxs as jsxs12 } from "react/jsx-runtime";
1911
+ import { jsx as jsx30, jsxs as jsxs13 } from "react/jsx-runtime";
1750
1912
  function LoadingOverlay({ label = "Cargando", className, ...props }) {
1751
- return /* @__PURE__ */ jsx29("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__ */ jsxs12("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
1752
- /* @__PURE__ */ jsx29(LoaderCircle2, { className: "animate-spin", "aria-hidden": "true" }),
1753
- /* @__PURE__ */ jsx29("span", { children: label })
1913
+ return /* @__PURE__ */ jsx30("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__ */ jsxs13("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
1914
+ /* @__PURE__ */ jsx30(LoaderCircle2, { className: "animate-spin", "aria-hidden": "true" }),
1915
+ /* @__PURE__ */ jsx30("span", { children: label })
1754
1916
  ] }) });
1755
1917
  }
1756
1918
 
@@ -1761,16 +1923,16 @@ import {
1761
1923
  MenuTrigger as AriaMenuTrigger,
1762
1924
  Popover as Popover3
1763
1925
  } from "react-aria-components";
1764
- import { jsx as jsx30 } from "react/jsx-runtime";
1926
+ import { jsx as jsx31 } from "react/jsx-runtime";
1765
1927
  var MenuTrigger = AriaMenuTrigger;
1766
1928
  function MenuContent({ className, ...props }) {
1767
- return /* @__PURE__ */ jsx30(Popover3, { "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 });
1929
+ return /* @__PURE__ */ jsx31(Popover3, { "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 });
1768
1930
  }
1769
1931
  function Menu({ className, ...props }) {
1770
- return /* @__PURE__ */ jsx30(AriaMenu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
1932
+ return /* @__PURE__ */ jsx31(AriaMenu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
1771
1933
  }
1772
1934
  function MenuItem({ className, children, ...props }) {
1773
- return /* @__PURE__ */ jsx30(AriaMenuItem, { "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 });
1935
+ return /* @__PURE__ */ jsx31(AriaMenuItem, { "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 });
1774
1936
  }
1775
1937
 
1776
1938
  // src/ui/otp-input/otp-input.tsx
@@ -1778,10 +1940,10 @@ import {
1778
1940
  forwardRef as forwardRef4,
1779
1941
  useImperativeHandle,
1780
1942
  useRef as useRef4,
1781
- useState as useState7
1943
+ useState as useState8
1782
1944
  } from "react";
1783
1945
  import { Input as AriaInput3 } from "react-aria-components";
1784
- import { jsx as jsx31, jsxs as jsxs13 } from "react/jsx-runtime";
1946
+ import { jsx as jsx32, jsxs as jsxs14 } from "react/jsx-runtime";
1785
1947
  function normalizeOtp(value, length) {
1786
1948
  return value.replace(/[^0-9]/g, "").slice(0, length);
1787
1949
  }
@@ -1802,12 +1964,12 @@ var OtpInputImpl = forwardRef4(function OtpInput({
1802
1964
  }, forwardedRef) {
1803
1965
  const slotCount = Math.max(1, Math.floor(length));
1804
1966
  const controlled = value !== void 0;
1805
- const [internalValue, setInternalValue] = useState7(() => normalizeOtp(defaultValue, slotCount));
1967
+ const [internalValue, setInternalValue] = useState8(() => normalizeOtp(defaultValue, slotCount));
1806
1968
  const code = normalizeOtp(controlled ? value : internalValue, slotCount);
1807
1969
  const slots = Array.from({ length: slotCount }, (_, index) => `otp-slot-${index + 1}`);
1808
1970
  const inputRef = useRef4(null);
1809
- const [focused, setFocused] = useState7(false);
1810
- const [selectionStart, setSelectionStart] = useState7(0);
1971
+ const [focused, setFocused] = useState8(false);
1972
+ const [selectionStart, setSelectionStart] = useState8(0);
1811
1973
  const invalid = props["aria-invalid"] === true || props["aria-invalid"] === "true";
1812
1974
  const activeIndex = code.length === slotCount ? slotCount - 1 : Math.min(selectionStart, code.length, slotCount - 1);
1813
1975
  useImperativeHandle(forwardedRef, () => inputRef.current);
@@ -1833,7 +1995,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
1833
1995
  input.setSelectionRange(position, position);
1834
1996
  setSelectionStart(position);
1835
1997
  }
1836
- return /* @__PURE__ */ jsxs13(
1998
+ return /* @__PURE__ */ jsxs14(
1837
1999
  "div",
1838
2000
  {
1839
2001
  "data-slot": "otp-input",
@@ -1843,7 +2005,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
1843
2005
  style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
1844
2006
  onPointerDown: handlePointerDown,
1845
2007
  children: [
1846
- /* @__PURE__ */ jsx31(
2008
+ /* @__PURE__ */ jsx32(
1847
2009
  AriaInput3,
1848
2010
  {
1849
2011
  ...props,
@@ -1883,7 +2045,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
1883
2045
  }
1884
2046
  }
1885
2047
  ),
1886
- slots.map((slot, index) => /* @__PURE__ */ jsx31(
2048
+ slots.map((slot, index) => /* @__PURE__ */ jsx32(
1887
2049
  "span",
1888
2050
  {
1889
2051
  "aria-hidden": "true",
@@ -1906,39 +2068,39 @@ var OtpInputImpl = forwardRef4(function OtpInput({
1906
2068
  var OtpInput2 = OtpInputImpl;
1907
2069
 
1908
2070
  // src/ui/page-header/page-header.tsx
1909
- import { jsx as jsx32 } from "react/jsx-runtime";
2071
+ import { jsx as jsx33 } from "react/jsx-runtime";
1910
2072
  function PageHeader({ className, ...props }) {
1911
- return /* @__PURE__ */ jsx32("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 });
2073
+ return /* @__PURE__ */ jsx33("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 });
1912
2074
  }
1913
2075
  function PageHeaderHeading({ className, ...props }) {
1914
- return /* @__PURE__ */ jsx32("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2076
+ return /* @__PURE__ */ jsx33("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
1915
2077
  }
1916
2078
  function PageHeaderTitle({ className, ...props }) {
1917
- return /* @__PURE__ */ jsx32("h1", { "data-slot": "page-header-title", className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className), ...props });
2079
+ return /* @__PURE__ */ jsx33("h1", { "data-slot": "page-header-title", className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className), ...props });
1918
2080
  }
1919
2081
  function PageHeaderDescription({ className, ...props }) {
1920
- return /* @__PURE__ */ jsx32("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
2082
+ return /* @__PURE__ */ jsx33("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
1921
2083
  }
1922
2084
  function PageHeaderActions({ className, ...props }) {
1923
- return /* @__PURE__ */ jsx32("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
2085
+ return /* @__PURE__ */ jsx33("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
1924
2086
  }
1925
2087
 
1926
2088
  // src/ui/pagination/pagination.tsx
1927
2089
  import { ChevronLeft, ChevronRight } from "lucide-react";
1928
- import { jsx as jsx33, jsxs as jsxs14 } from "react/jsx-runtime";
2090
+ import { jsx as jsx34, jsxs as jsxs15 } from "react/jsx-runtime";
1929
2091
  function Pagination({ page, pageCount, onPageChange, className }) {
1930
2092
  const pages = Array.from({ length: pageCount }, (_, index) => index + 1);
1931
- return /* @__PURE__ */ jsxs14("nav", { "aria-label": "Paginaci\xF3n", className: cn("flex items-center justify-between gap-4", className), children: [
1932
- /* @__PURE__ */ jsxs14("p", { className: "text-sm text-muted-foreground", children: [
2093
+ return /* @__PURE__ */ jsxs15("nav", { "aria-label": "Paginaci\xF3n", className: cn("flex items-center justify-between gap-4", className), children: [
2094
+ /* @__PURE__ */ jsxs15("p", { className: "text-sm text-muted-foreground", children: [
1933
2095
  "P\xE1gina ",
1934
2096
  page,
1935
2097
  " de ",
1936
2098
  pageCount
1937
2099
  ] }),
1938
- /* @__PURE__ */ jsxs14("div", { className: "flex items-center gap-1", children: [
1939
- /* @__PURE__ */ jsx33(Button, { "aria-label": "P\xE1gina anterior", isDisabled: page <= 1, onPress: () => onPageChange(page - 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ jsx33(ChevronLeft, {}) }),
1940
- pages.map((item) => /* @__PURE__ */ jsx33(Button, { "aria-current": item === page ? "page" : void 0, "aria-label": `P\xE1gina ${item}`, onPress: () => onPageChange(item), size: "icon", variant: item === page ? "secondary" : "ghost", children: item }, item)),
1941
- /* @__PURE__ */ jsx33(Button, { "aria-label": "P\xE1gina siguiente", isDisabled: page >= pageCount, onPress: () => onPageChange(page + 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ jsx33(ChevronRight, {}) })
2100
+ /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-1", children: [
2101
+ /* @__PURE__ */ jsx34(Button, { "aria-label": "P\xE1gina anterior", isDisabled: page <= 1, onPress: () => onPageChange(page - 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ jsx34(ChevronLeft, {}) }),
2102
+ pages.map((item) => /* @__PURE__ */ jsx34(Button, { "aria-current": item === page ? "page" : void 0, "aria-label": `P\xE1gina ${item}`, onPress: () => onPageChange(item), size: "icon", variant: item === page ? "secondary" : "ghost", children: item }, item)),
2103
+ /* @__PURE__ */ jsx34(Button, { "aria-label": "P\xE1gina siguiente", isDisabled: page >= pageCount, onPress: () => onPageChange(page + 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ jsx34(ChevronRight, {}) })
1942
2104
  ] })
1943
2105
  ] });
1944
2106
  }
@@ -1948,10 +2110,10 @@ import {
1948
2110
  DialogTrigger as AriaDialogTrigger,
1949
2111
  Popover as AriaPopover
1950
2112
  } from "react-aria-components";
1951
- import { jsx as jsx34 } from "react/jsx-runtime";
2113
+ import { jsx as jsx35 } from "react/jsx-runtime";
1952
2114
  var PopoverTrigger = AriaDialogTrigger;
1953
2115
  function Popover4({ className, ...props }) {
1954
- return /* @__PURE__ */ jsx34(AriaPopover, { "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 });
2116
+ return /* @__PURE__ */ jsx35(AriaPopover, { "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 });
1955
2117
  }
1956
2118
  var PopoverContent = Popover4;
1957
2119
 
@@ -1963,7 +2125,7 @@ import {
1963
2125
  Input as AriaInput4,
1964
2126
  NumberField as AriaNumberField
1965
2127
  } from "react-aria-components";
1966
- import { jsx as jsx35, jsxs as jsxs15 } from "react/jsx-runtime";
2128
+ import { jsx as jsx36, jsxs as jsxs16 } from "react/jsx-runtime";
1967
2129
  function QuantityInput({
1968
2130
  className,
1969
2131
  inputClassName,
@@ -1973,7 +2135,7 @@ function QuantityInput({
1973
2135
  step = 1,
1974
2136
  ...props
1975
2137
  }) {
1976
- return /* @__PURE__ */ jsx35(
2138
+ return /* @__PURE__ */ jsx36(
1977
2139
  AriaNumberField,
1978
2140
  {
1979
2141
  ...props,
@@ -1981,15 +2143,15 @@ function QuantityInput({
1981
2143
  step,
1982
2144
  "data-slot": "quantity-input",
1983
2145
  className: cn("group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
1984
- children: /* @__PURE__ */ jsxs15(
2146
+ children: /* @__PURE__ */ jsxs16(
1985
2147
  AriaGroup,
1986
2148
  {
1987
2149
  "data-slot": "quantity-input-group",
1988
2150
  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",
1989
2151
  children: [
1990
- /* @__PURE__ */ jsx35(AriaButton, { 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__ */ jsx35(Minus, { "aria-hidden": "true", className: "size-4" }) }),
1991
- /* @__PURE__ */ jsx35(AriaInput4, { "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) }),
1992
- /* @__PURE__ */ jsx35(AriaButton, { 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__ */ jsx35(Plus, { "aria-hidden": "true", className: "size-4" }) })
2152
+ /* @__PURE__ */ jsx36(AriaButton, { 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__ */ jsx36(Minus, { "aria-hidden": "true", className: "size-4" }) }),
2153
+ /* @__PURE__ */ jsx36(AriaInput4, { "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) }),
2154
+ /* @__PURE__ */ jsx36(AriaButton, { 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__ */ jsx36(Plus, { "aria-hidden": "true", className: "size-4" }) })
1993
2155
  ]
1994
2156
  }
1995
2157
  )
@@ -2004,13 +2166,13 @@ import {
2004
2166
  Input as Input4
2005
2167
  } from "react-aria-components";
2006
2168
  import { X as X2 } from "lucide-react";
2007
- import { jsx as jsx36 } from "react/jsx-runtime";
2169
+ import { jsx as jsx37 } from "react/jsx-runtime";
2008
2170
  var SearchField = AriaSearchField;
2009
2171
  function SearchInput({ className, ...props }) {
2010
- return /* @__PURE__ */ jsx36(Input4, { "data-slot": "search-input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
2172
+ return /* @__PURE__ */ jsx37(Input4, { "data-slot": "search-input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
2011
2173
  }
2012
- function SearchClearButton({ className, children = /* @__PURE__ */ jsx36(X2, { "aria-hidden": "true", className: "size-4" }), ...props }) {
2013
- return /* @__PURE__ */ jsx36(Button2, { slot: "clear", "data-slot": "search-clear", className: cn("absolute top-1/2 right-1 rounded p-1 text-muted-foreground outline-none hover:bg-muted data-focus-visible:ring-2 data-focus-visible:ring-ring", className), ...props, children });
2174
+ function SearchClearButton({ className, children = /* @__PURE__ */ jsx37(X2, { "aria-hidden": "true", className: "size-4" }), ...props }) {
2175
+ return /* @__PURE__ */ jsx37(Button2, { slot: "clear", "data-slot": "search-clear", className: cn("absolute top-1/2 right-1 rounded p-1 text-muted-foreground outline-none hover:bg-muted data-focus-visible:ring-2 data-focus-visible:ring-ring", className), ...props, children });
2014
2176
  }
2015
2177
 
2016
2178
  // src/ui/select/select.tsx
@@ -2023,43 +2185,43 @@ import {
2023
2185
  Popover as Popover5
2024
2186
  } from "react-aria-components";
2025
2187
  import { ChevronDown } from "lucide-react";
2026
- import { Fragment as Fragment7, jsx as jsx37, jsxs as jsxs16 } from "react/jsx-runtime";
2188
+ import { Fragment as Fragment8, jsx as jsx38, jsxs as jsxs17 } from "react/jsx-runtime";
2027
2189
  var Select = AriaSelect;
2028
2190
  function SelectTrigger({ className, children, ...props }) {
2029
- return /* @__PURE__ */ jsx37(AriaButton2, { "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__ */ jsxs16(Fragment7, { children: [
2191
+ return /* @__PURE__ */ jsx38(AriaButton2, { "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__ */ jsxs17(Fragment8, { children: [
2030
2192
  typeof children === "function" ? children(state) : children,
2031
- /* @__PURE__ */ jsx37(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" })
2193
+ /* @__PURE__ */ jsx38(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" })
2032
2194
  ] }) });
2033
2195
  }
2034
2196
  function SelectValue({ className, ...props }) {
2035
- return /* @__PURE__ */ jsx37(AriaSelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
2197
+ return /* @__PURE__ */ jsx38(AriaSelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
2036
2198
  }
2037
2199
  function SelectContent({ className, ...props }) {
2038
- return /* @__PURE__ */ jsx37(Popover5, { "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 });
2200
+ return /* @__PURE__ */ jsx38(Popover5, { "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 });
2039
2201
  }
2040
2202
  function SelectList({ className, ...props }) {
2041
- return /* @__PURE__ */ jsx37(ListBox3, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
2203
+ return /* @__PURE__ */ jsx38(ListBox3, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
2042
2204
  }
2043
2205
  function SelectItem({ className, children, ...props }) {
2044
- return /* @__PURE__ */ jsx37(ListBoxItem3, { "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 });
2206
+ return /* @__PURE__ */ jsx38(ListBoxItem3, { "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 });
2045
2207
  }
2046
2208
 
2047
2209
  // src/ui/sheet/sheet.tsx
2048
- import { XIcon } from "lucide-react";
2210
+ import { XIcon as XIcon2 } from "lucide-react";
2049
2211
  import {
2050
- Heading as Heading2,
2212
+ Heading as Heading3,
2051
2213
  ModalOverlay as ModalOverlayPrimitive,
2052
2214
  Modal as ModalPrimitive,
2053
2215
  Dialog as SheetPrimitive,
2054
2216
  DialogTrigger as SheetTriggerPrimitive,
2055
- Text as Text3
2217
+ Text as Text4
2056
2218
  } from "react-aria-components";
2057
- import { jsx as jsx38, jsxs as jsxs17 } from "react/jsx-runtime";
2219
+ import { jsx as jsx39, jsxs as jsxs18 } from "react/jsx-runtime";
2058
2220
  function SheetTrigger({ ...props }) {
2059
- return /* @__PURE__ */ jsx38(SheetTriggerPrimitive, { "data-slot": "sheet-trigger", ...props });
2221
+ return /* @__PURE__ */ jsx39(SheetTriggerPrimitive, { "data-slot": "sheet-trigger", ...props });
2060
2222
  }
2061
2223
  function SheetClose({ className, variant = "outline", size = "default", ...props }) {
2062
- return /* @__PURE__ */ jsx38(
2224
+ return /* @__PURE__ */ jsx39(
2063
2225
  Button,
2064
2226
  {
2065
2227
  slot: "close",
@@ -2076,7 +2238,7 @@ function SheetOverlay({
2076
2238
  children,
2077
2239
  ...props
2078
2240
  }) {
2079
- return /* @__PURE__ */ jsx38(
2241
+ return /* @__PURE__ */ jsx39(
2080
2242
  ModalOverlayPrimitive,
2081
2243
  {
2082
2244
  "data-slot": "sheet-overlay",
@@ -2097,7 +2259,7 @@ function Sheet({
2097
2259
  showCloseButton = true,
2098
2260
  ...props
2099
2261
  }) {
2100
- return /* @__PURE__ */ jsx38(SheetOverlay, { ...props, children: /* @__PURE__ */ jsx38(
2262
+ return /* @__PURE__ */ jsx39(SheetOverlay, { ...props, children: /* @__PURE__ */ jsx39(
2101
2263
  ModalPrimitive,
2102
2264
  {
2103
2265
  "data-slot": "sheet-content",
@@ -2106,16 +2268,16 @@ function Sheet({
2106
2268
  "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",
2107
2269
  className
2108
2270
  ),
2109
- children: /* @__PURE__ */ jsxs17(
2271
+ children: /* @__PURE__ */ jsxs18(
2110
2272
  SheetPrimitive,
2111
2273
  {
2112
2274
  "data-slot": "sheet",
2113
2275
  className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
2114
2276
  children: [
2115
2277
  children,
2116
- showCloseButton && /* @__PURE__ */ jsxs17(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2117
- /* @__PURE__ */ jsx38(XIcon, {}),
2118
- /* @__PURE__ */ jsx38("span", { className: "sr-only", children: "Cerrar" })
2278
+ showCloseButton && /* @__PURE__ */ jsxs18(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2279
+ /* @__PURE__ */ jsx39(XIcon2, {}),
2280
+ /* @__PURE__ */ jsx39("span", { className: "sr-only", children: "Cerrar" })
2119
2281
  ] })
2120
2282
  ]
2121
2283
  }
@@ -2130,10 +2292,10 @@ function SheetContent({
2130
2292
  showCloseButton = true,
2131
2293
  ...props
2132
2294
  }) {
2133
- return /* @__PURE__ */ jsx38(Sheet, { className, side, showCloseButton, ...props, children });
2295
+ return /* @__PURE__ */ jsx39(Sheet, { className, side, showCloseButton, ...props, children });
2134
2296
  }
2135
2297
  function SheetHeader({ className, ...props }) {
2136
- return /* @__PURE__ */ jsx38(
2298
+ return /* @__PURE__ */ jsx39(
2137
2299
  "div",
2138
2300
  {
2139
2301
  "data-slot": "sheet-header",
@@ -2143,7 +2305,7 @@ function SheetHeader({ className, ...props }) {
2143
2305
  );
2144
2306
  }
2145
2307
  function SheetFooter({ className, ...props }) {
2146
- return /* @__PURE__ */ jsx38(
2308
+ return /* @__PURE__ */ jsx39(
2147
2309
  "div",
2148
2310
  {
2149
2311
  "data-slot": "sheet-footer",
@@ -2153,8 +2315,8 @@ function SheetFooter({ className, ...props }) {
2153
2315
  );
2154
2316
  }
2155
2317
  function SheetTitle({ className, ...props }) {
2156
- return /* @__PURE__ */ jsx38(
2157
- Heading2,
2318
+ return /* @__PURE__ */ jsx39(
2319
+ Heading3,
2158
2320
  {
2159
2321
  slot: "title",
2160
2322
  "data-slot": "sheet-title",
@@ -2167,8 +2329,8 @@ function SheetDescription({
2167
2329
  className,
2168
2330
  ...props
2169
2331
  }) {
2170
- return /* @__PURE__ */ jsx38(
2171
- Text3,
2332
+ return /* @__PURE__ */ jsx39(
2333
+ Text4,
2172
2334
  {
2173
2335
  slot: "description",
2174
2336
  "data-slot": "sheet-description",
@@ -2186,16 +2348,16 @@ import {
2186
2348
  Search
2187
2349
  } from "lucide-react";
2188
2350
  import {
2189
- createContext as createContext2,
2190
- useContext as useContext2,
2351
+ createContext as createContext3,
2352
+ useContext as useContext3,
2191
2353
  useMemo as useMemo2,
2192
- useState as useState8
2354
+ useState as useState9
2193
2355
  } from "react";
2194
2356
  import { Link as Link3 } from "react-aria-components";
2195
- import { Fragment as Fragment8, jsx as jsx39, jsxs as jsxs18 } from "react/jsx-runtime";
2196
- var SidebarContext = createContext2(null);
2357
+ import { Fragment as Fragment9, jsx as jsx40, jsxs as jsxs19 } from "react/jsx-runtime";
2358
+ var SidebarContext = createContext3(null);
2197
2359
  function useSidebar() {
2198
- const context = useContext2(SidebarContext);
2360
+ const context = useContext3(SidebarContext);
2199
2361
  if (!context)
2200
2362
  throw new Error("useSidebar must be used inside SidebarProvider");
2201
2363
  return context;
@@ -2204,7 +2366,7 @@ function SidebarProvider({
2204
2366
  defaultCollapsed = false,
2205
2367
  children
2206
2368
  }) {
2207
- const [collapsed, setCollapsed] = useState8(defaultCollapsed);
2369
+ const [collapsed, setCollapsed] = useState9(defaultCollapsed);
2208
2370
  const value = useMemo2(
2209
2371
  () => ({
2210
2372
  collapsed,
@@ -2213,14 +2375,14 @@ function SidebarProvider({
2213
2375
  }),
2214
2376
  [collapsed]
2215
2377
  );
2216
- return /* @__PURE__ */ jsx39(SidebarContext.Provider, { value, children });
2378
+ return /* @__PURE__ */ jsx40(SidebarContext.Provider, { value, children });
2217
2379
  }
2218
2380
  function Sidebar({
2219
2381
  className,
2220
2382
  ...props
2221
2383
  }) {
2222
2384
  const { collapsed } = useSidebar();
2223
- return /* @__PURE__ */ jsx39(
2385
+ return /* @__PURE__ */ jsx40(
2224
2386
  "aside",
2225
2387
  {
2226
2388
  "data-slot": "sidebar",
@@ -2237,7 +2399,7 @@ function SidebarHeader({
2237
2399
  className,
2238
2400
  ...props
2239
2401
  }) {
2240
- return /* @__PURE__ */ jsx39(
2402
+ return /* @__PURE__ */ jsx40(
2241
2403
  "div",
2242
2404
  {
2243
2405
  "data-slot": "sidebar-header",
@@ -2252,7 +2414,7 @@ function SidebarSearch({
2252
2414
  className,
2253
2415
  ...props
2254
2416
  }) {
2255
- return /* @__PURE__ */ jsxs18(
2417
+ return /* @__PURE__ */ jsxs19(
2256
2418
  "button",
2257
2419
  {
2258
2420
  type: "button",
@@ -2263,9 +2425,9 @@ function SidebarSearch({
2263
2425
  ),
2264
2426
  ...props,
2265
2427
  children: [
2266
- /* @__PURE__ */ jsx39(Search, { className: "size-4 shrink-0" }),
2267
- /* @__PURE__ */ jsx39("span", { className: "flex-1 text-left", children: label }),
2268
- /* @__PURE__ */ jsx39("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
2428
+ /* @__PURE__ */ jsx40(Search, { className: "size-4 shrink-0" }),
2429
+ /* @__PURE__ */ jsx40("span", { className: "flex-1 text-left", children: label }),
2430
+ /* @__PURE__ */ jsx40("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
2269
2431
  ]
2270
2432
  }
2271
2433
  );
@@ -2274,7 +2436,7 @@ function SidebarContent({
2274
2436
  className,
2275
2437
  ...props
2276
2438
  }) {
2277
- return /* @__PURE__ */ jsx39(
2439
+ return /* @__PURE__ */ jsx40(
2278
2440
  "nav",
2279
2441
  {
2280
2442
  "data-slot": "sidebar-content",
@@ -2288,7 +2450,7 @@ function SidebarFooter({
2288
2450
  className,
2289
2451
  ...props
2290
2452
  }) {
2291
- return /* @__PURE__ */ jsx39(
2453
+ return /* @__PURE__ */ jsx40(
2292
2454
  "div",
2293
2455
  {
2294
2456
  "data-slot": "sidebar-footer",
@@ -2307,14 +2469,14 @@ function SidebarGroup({
2307
2469
  ...props
2308
2470
  }) {
2309
2471
  const { collapsed } = useSidebar();
2310
- return /* @__PURE__ */ jsxs18(
2472
+ return /* @__PURE__ */ jsxs19(
2311
2473
  "section",
2312
2474
  {
2313
2475
  "data-slot": "sidebar-group",
2314
2476
  className: cn("mb-4 last:mb-0", className),
2315
2477
  ...props,
2316
2478
  children: [
2317
- label && /* @__PURE__ */ jsx39(
2479
+ label && /* @__PURE__ */ jsx40(
2318
2480
  "h2",
2319
2481
  {
2320
2482
  className: cn(
@@ -2340,7 +2502,7 @@ function SidebarItem({
2340
2502
  }) {
2341
2503
  const { collapsed } = useSidebar();
2342
2504
  const content = typeof children === "function" ? label : children ?? label;
2343
- return /* @__PURE__ */ jsx39(
2505
+ return /* @__PURE__ */ jsx40(
2344
2506
  Link3,
2345
2507
  {
2346
2508
  "data-slot": "sidebar-item",
@@ -2352,16 +2514,16 @@ function SidebarItem({
2352
2514
  typeof className === "function" ? className : className
2353
2515
  ),
2354
2516
  ...props,
2355
- children: (values) => /* @__PURE__ */ jsxs18(Fragment8, { children: [
2356
- /* @__PURE__ */ jsx39("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
2357
- /* @__PURE__ */ jsx39(
2517
+ children: (values) => /* @__PURE__ */ jsxs19(Fragment9, { children: [
2518
+ /* @__PURE__ */ jsx40("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
2519
+ /* @__PURE__ */ jsx40(
2358
2520
  "span",
2359
2521
  {
2360
2522
  className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"),
2361
2523
  children: typeof children === "function" ? children(values) : content
2362
2524
  }
2363
2525
  ),
2364
- badge && !collapsed && /* @__PURE__ */ jsx39("span", { className: "text-xs text-muted-foreground", children: badge })
2526
+ badge && !collapsed && /* @__PURE__ */ jsx40("span", { className: "text-xs text-muted-foreground", children: badge })
2365
2527
  ] })
2366
2528
  }
2367
2529
  );
@@ -2370,7 +2532,7 @@ function SidebarSeparator({
2370
2532
  className,
2371
2533
  ...props
2372
2534
  }) {
2373
- return /* @__PURE__ */ jsx39(
2535
+ return /* @__PURE__ */ jsx40(
2374
2536
  "hr",
2375
2537
  {
2376
2538
  "data-slot": "sidebar-separator",
@@ -2381,7 +2543,7 @@ function SidebarSeparator({
2381
2543
  }
2382
2544
  function SidebarTrigger({ className, ...props }) {
2383
2545
  const { collapsed, toggle } = useSidebar();
2384
- return /* @__PURE__ */ jsx39(
2546
+ return /* @__PURE__ */ jsx40(
2385
2547
  Button,
2386
2548
  {
2387
2549
  "aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
@@ -2390,7 +2552,7 @@ function SidebarTrigger({ className, ...props }) {
2390
2552
  variant: "ghost",
2391
2553
  className: cn("ml-auto", className),
2392
2554
  ...props,
2393
- children: collapsed ? /* @__PURE__ */ jsx39(ChevronRight2, {}) : /* @__PURE__ */ jsx39(ChevronLeft2, {})
2555
+ children: collapsed ? /* @__PURE__ */ jsx40(ChevronRight2, {}) : /* @__PURE__ */ jsx40(ChevronLeft2, {})
2394
2556
  }
2395
2557
  );
2396
2558
  }
@@ -2399,7 +2561,7 @@ function SidebarRail({
2399
2561
  ...props
2400
2562
  }) {
2401
2563
  const { toggle } = useSidebar();
2402
- return /* @__PURE__ */ jsx39(
2564
+ return /* @__PURE__ */ jsx40(
2403
2565
  "button",
2404
2566
  {
2405
2567
  type: "button",
@@ -2414,7 +2576,7 @@ function SidebarRail({
2414
2576
  );
2415
2577
  }
2416
2578
  function SidebarMore({ className, ...props }) {
2417
- return /* @__PURE__ */ jsx39(
2579
+ return /* @__PURE__ */ jsx40(
2418
2580
  Button,
2419
2581
  {
2420
2582
  "aria-label": "M\xE1s opciones",
@@ -2422,26 +2584,26 @@ function SidebarMore({ className, ...props }) {
2422
2584
  variant: "ghost",
2423
2585
  className: cn("size-7", className),
2424
2586
  ...props,
2425
- children: /* @__PURE__ */ jsx39(Ellipsis, {})
2587
+ children: /* @__PURE__ */ jsx40(Ellipsis, {})
2426
2588
  }
2427
2589
  );
2428
2590
  }
2429
2591
 
2430
2592
  // src/ui/skeleton/skeleton.tsx
2431
- import { jsx as jsx40 } from "react/jsx-runtime";
2593
+ import { jsx as jsx41 } from "react/jsx-runtime";
2432
2594
  function Skeleton({ className, ...props }) {
2433
- return /* @__PURE__ */ jsx40("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
2595
+ return /* @__PURE__ */ jsx41("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
2434
2596
  }
2435
2597
 
2436
2598
  // src/ui/submit-button/submit-button.tsx
2437
2599
  import { useFormStatus } from "react-dom";
2438
2600
  import { LoaderCircle as LoaderCircle3 } from "lucide-react";
2439
- import { Fragment as Fragment9, jsx as jsx41, jsxs as jsxs19 } from "react/jsx-runtime";
2601
+ import { Fragment as Fragment10, jsx as jsx42, jsxs as jsxs20 } from "react/jsx-runtime";
2440
2602
  function SubmitButton({ pendingLabel = "Guardando\u2026", loading = false, children, isDisabled, size = "sm", ...props }) {
2441
2603
  const { pending } = useFormStatus();
2442
2604
  const busy = pending || loading;
2443
- return /* @__PURE__ */ jsx41(Button, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ jsxs19(Fragment9, { children: [
2444
- /* @__PURE__ */ jsx41(LoaderCircle3, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
2605
+ return /* @__PURE__ */ jsx42(Button, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ jsxs20(Fragment10, { children: [
2606
+ /* @__PURE__ */ jsx42(LoaderCircle3, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
2445
2607
  pendingLabel
2446
2608
  ] }) : children });
2447
2609
  }
@@ -2451,7 +2613,7 @@ import { useEffect as useEffect5, useRef as useRef5 } from "react";
2451
2613
  import {
2452
2614
  Switch as AriaSwitch
2453
2615
  } from "react-aria-components";
2454
- import { Fragment as Fragment10, jsx as jsx42, jsxs as jsxs20 } from "react/jsx-runtime";
2616
+ import { Fragment as Fragment11, jsx as jsx43, jsxs as jsxs21 } from "react/jsx-runtime";
2455
2617
  var switchSizes = {
2456
2618
  sm: {
2457
2619
  control: "h-4 w-[1.875rem] p-0.5",
@@ -2507,7 +2669,7 @@ function Switch({
2507
2669
  ownerDocument.addEventListener("keydown", handleDirectionalKey);
2508
2670
  return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
2509
2671
  }, [isDisabled, isReadOnly, resolvedInputRef]);
2510
- return /* @__PURE__ */ jsx42(
2672
+ return /* @__PURE__ */ jsx43(
2511
2673
  AriaSwitch,
2512
2674
  {
2513
2675
  "data-slot": "switch",
@@ -2524,8 +2686,8 @@ function Switch({
2524
2686
  children: (state) => {
2525
2687
  const isThumbActive = state.isHovered || state.isPressed;
2526
2688
  const thumbOffset = state.isSelected ? isThumbActive ? styles.activeSelectedOffset : styles.selectedOffset : "0";
2527
- return /* @__PURE__ */ jsxs20(Fragment10, { children: [
2528
- /* @__PURE__ */ jsx42(
2689
+ return /* @__PURE__ */ jsxs21(Fragment11, { children: [
2690
+ /* @__PURE__ */ jsx43(
2529
2691
  "span",
2530
2692
  {
2531
2693
  "aria-hidden": "true",
@@ -2539,7 +2701,7 @@ function Switch({
2539
2701
  "group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
2540
2702
  styles.control
2541
2703
  ),
2542
- children: /* @__PURE__ */ jsx42(
2704
+ children: /* @__PURE__ */ jsx43(
2543
2705
  "span",
2544
2706
  {
2545
2707
  "data-slot": "switch-thumb",
@@ -2559,9 +2721,9 @@ function Switch({
2559
2721
  )
2560
2722
  }
2561
2723
  ),
2562
- children || description ? /* @__PURE__ */ jsxs20("span", { className: "grid gap-0.5 leading-tight", children: [
2563
- children ? /* @__PURE__ */ jsx42("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
2564
- description ? /* @__PURE__ */ jsx42("span", { "data-slot": "switch-description", className: "text-xs font-normal text-muted-foreground", children: description }) : null
2724
+ children || description ? /* @__PURE__ */ jsxs21("span", { className: "grid gap-0.5 leading-tight", children: [
2725
+ children ? /* @__PURE__ */ jsx43("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
2726
+ description ? /* @__PURE__ */ jsx43("span", { "data-slot": "switch-description", className: "text-xs font-normal text-muted-foreground", children: description }) : null
2565
2727
  ] }) : null
2566
2728
  ] });
2567
2729
  }
@@ -2570,9 +2732,9 @@ function Switch({
2570
2732
  }
2571
2733
 
2572
2734
  // src/ui/table/table.tsx
2573
- import { jsx as jsx43 } from "react/jsx-runtime";
2735
+ import { jsx as jsx44 } from "react/jsx-runtime";
2574
2736
  function Table({ className, ...props }) {
2575
- return /* @__PURE__ */ jsx43("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ jsx43(
2737
+ return /* @__PURE__ */ jsx44("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ jsx44(
2576
2738
  "table",
2577
2739
  {
2578
2740
  "data-slot": "table",
@@ -2582,10 +2744,10 @@ function Table({ className, ...props }) {
2582
2744
  ) });
2583
2745
  }
2584
2746
  function TableHeader({ className, ...props }) {
2585
- return /* @__PURE__ */ jsx43("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
2747
+ return /* @__PURE__ */ jsx44("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
2586
2748
  }
2587
2749
  function TableBody({ className, ...props }) {
2588
- return /* @__PURE__ */ jsx43(
2750
+ return /* @__PURE__ */ jsx44(
2589
2751
  "tbody",
2590
2752
  {
2591
2753
  "data-slot": "table-body",
@@ -2595,7 +2757,7 @@ function TableBody({ className, ...props }) {
2595
2757
  );
2596
2758
  }
2597
2759
  function TableRow({ className, ...props }) {
2598
- return /* @__PURE__ */ jsx43(
2760
+ return /* @__PURE__ */ jsx44(
2599
2761
  "tr",
2600
2762
  {
2601
2763
  "data-slot": "table-row",
@@ -2608,7 +2770,7 @@ function TableRow({ className, ...props }) {
2608
2770
  );
2609
2771
  }
2610
2772
  function TableHead({ className, ...props }) {
2611
- return /* @__PURE__ */ jsx43(
2773
+ return /* @__PURE__ */ jsx44(
2612
2774
  "th",
2613
2775
  {
2614
2776
  "data-slot": "table-head",
@@ -2621,7 +2783,7 @@ function TableHead({ className, ...props }) {
2621
2783
  );
2622
2784
  }
2623
2785
  function TableCell({ className, ...props }) {
2624
- return /* @__PURE__ */ jsx43(
2786
+ return /* @__PURE__ */ jsx44(
2625
2787
  "td",
2626
2788
  {
2627
2789
  "data-slot": "table-cell",
@@ -2631,7 +2793,7 @@ function TableCell({ className, ...props }) {
2631
2793
  );
2632
2794
  }
2633
2795
  function TableCaption({ className, ...props }) {
2634
- return /* @__PURE__ */ jsx43(
2796
+ return /* @__PURE__ */ jsx44(
2635
2797
  "caption",
2636
2798
  {
2637
2799
  "data-slot": "table-caption",
@@ -2641,7 +2803,7 @@ function TableCaption({ className, ...props }) {
2641
2803
  );
2642
2804
  }
2643
2805
  function TableFooter({ className, ...props }) {
2644
- return /* @__PURE__ */ jsx43(
2806
+ return /* @__PURE__ */ jsx44(
2645
2807
  "tfoot",
2646
2808
  {
2647
2809
  "data-slot": "table-footer",
@@ -2660,27 +2822,27 @@ import {
2660
2822
  Tabs as AriaTabs,
2661
2823
  composeRenderProps as composeRenderProps2
2662
2824
  } from "react-aria-components";
2663
- import { jsx as jsx44 } from "react/jsx-runtime";
2825
+ import { jsx as jsx45 } from "react/jsx-runtime";
2664
2826
  function Tabs({ className, ...props }) {
2665
- return /* @__PURE__ */ jsx44(AriaTabs, { "data-slot": "tabs", className: composeRenderProps2(className, (value) => cn("flex flex-col gap-2", value)), ...props });
2827
+ return /* @__PURE__ */ jsx45(AriaTabs, { "data-slot": "tabs", className: composeRenderProps2(className, (value) => cn("flex flex-col gap-2", value)), ...props });
2666
2828
  }
2667
2829
  function TabsList({ className, ...props }) {
2668
- return /* @__PURE__ */ jsx44(AriaTabList, { "data-slot": "tabs-list", className: composeRenderProps2(className, (value) => cn("inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground", value)), ...props });
2830
+ return /* @__PURE__ */ jsx45(AriaTabList, { "data-slot": "tabs-list", className: composeRenderProps2(className, (value) => cn("inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground", value)), ...props });
2669
2831
  }
2670
2832
  function TabsTrigger({ className, ...props }) {
2671
- return /* @__PURE__ */ jsx44(AriaTab, { "data-slot": "tabs-trigger", className: composeRenderProps2(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 });
2833
+ return /* @__PURE__ */ jsx45(AriaTab, { "data-slot": "tabs-trigger", className: composeRenderProps2(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 });
2672
2834
  }
2673
2835
  function TabsPanels({ className, ...props }) {
2674
- return /* @__PURE__ */ jsx44(AriaTabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
2836
+ return /* @__PURE__ */ jsx45(AriaTabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
2675
2837
  }
2676
2838
  function TabsContent({ className, ...props }) {
2677
- return /* @__PURE__ */ jsx44(AriaTabPanel, { "data-slot": "tabs-content", className: composeRenderProps2(className, (value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)), ...props });
2839
+ return /* @__PURE__ */ jsx45(AriaTabPanel, { "data-slot": "tabs-content", className: composeRenderProps2(className, (value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)), ...props });
2678
2840
  }
2679
2841
 
2680
2842
  // src/ui/toast/toast.tsx
2681
2843
  import { useEffect as useEffect6 } from "react";
2682
2844
  import { sileo, Toaster as SileoToaster } from "sileo";
2683
- import { Fragment as Fragment11, jsx as jsx45, jsxs as jsxs21 } from "react/jsx-runtime";
2845
+ import { Fragment as Fragment12, jsx as jsx46, jsxs as jsxs22 } from "react/jsx-runtime";
2684
2846
  function toSileoOptions({ title, description, duration, position, action }) {
2685
2847
  return {
2686
2848
  title,
@@ -2719,18 +2881,18 @@ function useToast() {
2719
2881
  return toast;
2720
2882
  }
2721
2883
  function ToastProvider({ children }) {
2722
- return /* @__PURE__ */ jsxs21(Fragment11, { children: [
2884
+ return /* @__PURE__ */ jsxs22(Fragment12, { children: [
2723
2885
  children,
2724
- /* @__PURE__ */ jsx45(Toaster, {})
2886
+ /* @__PURE__ */ jsx46(Toaster, {})
2725
2887
  ] });
2726
2888
  }
2727
2889
  function Toaster({ position }) {
2728
- return /* @__PURE__ */ jsx45(SileoToaster, { position });
2890
+ return /* @__PURE__ */ jsx46(SileoToaster, { position, options: { fill: "var(--ui-secondary)" } });
2729
2891
  }
2730
2892
  function ToastViewport({ position, visiblePosition, className }) {
2731
2893
  void className;
2732
2894
  if (visiblePosition && visiblePosition !== position) return null;
2733
- return /* @__PURE__ */ jsx45(Toaster, { position });
2895
+ return /* @__PURE__ */ jsx46(Toaster, { position });
2734
2896
  }
2735
2897
  function Toast({ id, title, description, variant = "default", action, state = "open", duration = 0, position, onDismiss }) {
2736
2898
  useEffect6(() => {
@@ -2745,15 +2907,15 @@ function Toast({ id, title, description, variant = "default", action, state = "o
2745
2907
  }
2746
2908
 
2747
2909
  // src/ui/toolbar/toolbar.tsx
2748
- import { jsx as jsx46 } from "react/jsx-runtime";
2910
+ import { jsx as jsx47 } from "react/jsx-runtime";
2749
2911
  function Toolbar({ className, ...props }) {
2750
- return /* @__PURE__ */ jsx46("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
2912
+ return /* @__PURE__ */ jsx47("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
2751
2913
  }
2752
2914
  function ToolbarGroup({ className, ...props }) {
2753
- return /* @__PURE__ */ jsx46("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
2915
+ return /* @__PURE__ */ jsx47("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
2754
2916
  }
2755
2917
  function ToolbarSpacer({ className, ...props }) {
2756
- return /* @__PURE__ */ jsx46("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
2918
+ return /* @__PURE__ */ jsx47("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
2757
2919
  }
2758
2920
  export {
2759
2921
  Accordion,
@@ -2808,6 +2970,16 @@ export {
2808
2970
  CommandItem,
2809
2971
  CommandList,
2810
2972
  ConfirmDialog,
2973
+ Dialog,
2974
+ DialogClose,
2975
+ DialogContent,
2976
+ DialogDescription,
2977
+ DialogFooter,
2978
+ DialogHeader,
2979
+ DialogOverlay,
2980
+ DialogPortal,
2981
+ DialogTitle,
2982
+ DialogTrigger,
2811
2983
  Drawer,
2812
2984
  DrawerDescription,
2813
2985
  DrawerFooter,
@@ -2927,6 +3099,7 @@ export {
2927
3099
  ToolbarSpacer,
2928
3100
  Tooltip,
2929
3101
  TooltipTrigger,
3102
+ actionRipple,
2930
3103
  alertVariants,
2931
3104
  badgeVariants,
2932
3105
  buttonGroupVariants,