@doscientos/ui 0.1.21 → 0.1.23

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
@@ -98,7 +98,7 @@ function useFormDirty() {
98
98
  // src/lib/action-ripple.ts
99
99
  import { cva } from "class-variance-authority";
100
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"
101
+ "relative isolate overflow-hidden"
102
102
  );
103
103
 
104
104
  // src/lib/cn.ts
@@ -585,11 +585,29 @@ function ButtonGroupSeparator({
585
585
 
586
586
  // src/ui/button/button.tsx
587
587
  import { cva as cva5 } from "class-variance-authority";
588
+ import { useState as useState5 } from "react";
588
589
  import {
589
590
  Button as ButtonPrimitive,
590
591
  Link as LinkPrimitive
591
592
  } from "react-aria-components";
592
- import { jsx as jsx9 } from "react/jsx-runtime";
593
+ import { Fragment, jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
594
+ function useActionRipple(enabled) {
595
+ const [rippleId, setRippleId] = useState5(0);
596
+ function triggerRipple() {
597
+ if (enabled) setRippleId((currentId) => currentId + 1);
598
+ }
599
+ const ripple = rippleId ? /* @__PURE__ */ jsx9(
600
+ "span",
601
+ {
602
+ "aria-hidden": "true",
603
+ "data-slot": "button-ripple",
604
+ className: "pointer-events-none absolute top-1/2 left-1/2 aspect-square w-full rounded-full bg-current animate-ui-ripple motion-reduce:hidden",
605
+ onAnimationEnd: () => setRippleId(0)
606
+ },
607
+ rippleId
608
+ ) : null;
609
+ return { ripple, triggerRipple };
610
+ }
593
611
  var buttonVariants = cva5(
594
612
  cn(
595
613
  "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",
@@ -622,7 +640,8 @@ var buttonVariants = cva5(
622
640
  }
623
641
  }
624
642
  );
625
- function Button({ className, variant = "default", size = "default", ...props }) {
643
+ function Button({ className, variant = "default", size = "default", onClick, children, ...props }) {
644
+ const { ripple, triggerRipple } = useActionRipple(variant !== "link");
626
645
  return /* @__PURE__ */ jsx9(
627
646
  ButtonPrimitive,
628
647
  {
@@ -630,7 +649,15 @@ function Button({ className, variant = "default", size = "default", ...props })
630
649
  "data-variant": variant,
631
650
  "data-size": size,
632
651
  className: cn(buttonVariants({ variant, size, className })),
633
- ...props
652
+ onClick: (event) => {
653
+ onClick?.(event);
654
+ triggerRipple();
655
+ },
656
+ ...props,
657
+ children: (renderProps) => /* @__PURE__ */ jsxs2(Fragment, { children: [
658
+ typeof children === "function" ? children(renderProps) : children,
659
+ ripple
660
+ ] })
634
661
  }
635
662
  );
636
663
  }
@@ -638,8 +665,11 @@ function LinkButton({
638
665
  className,
639
666
  variant = "default",
640
667
  size = "default",
668
+ onClick,
669
+ children,
641
670
  ...props
642
671
  }) {
672
+ const { ripple, triggerRipple } = useActionRipple(variant !== "link");
643
673
  return /* @__PURE__ */ jsx9(
644
674
  LinkPrimitive,
645
675
  {
@@ -647,7 +677,15 @@ function LinkButton({
647
677
  "data-variant": variant,
648
678
  "data-size": size,
649
679
  className: cn(buttonVariants({ variant, size, className })),
650
- ...props
680
+ onClick: (event) => {
681
+ onClick?.(event);
682
+ triggerRipple();
683
+ },
684
+ ...props,
685
+ children: (renderProps) => /* @__PURE__ */ jsxs2(Fragment, { children: [
686
+ typeof children === "function" ? children(renderProps) : children,
687
+ ripple
688
+ ] })
651
689
  }
652
690
  );
653
691
  }
@@ -736,7 +774,7 @@ import { Check } from "lucide-react";
736
774
  import {
737
775
  Checkbox as AriaCheckbox
738
776
  } from "react-aria-components";
739
- import { Fragment, jsx as jsx11, jsxs as jsxs2 } from "react/jsx-runtime";
777
+ import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs3 } from "react/jsx-runtime";
740
778
  function Checkbox({ className, children, ...props }) {
741
779
  return /* @__PURE__ */ jsx11(
742
780
  AriaCheckbox,
@@ -747,7 +785,7 @@ function Checkbox({ className, children, ...props }) {
747
785
  className
748
786
  ),
749
787
  ...props,
750
- children: (state) => /* @__PURE__ */ jsxs2(Fragment, { children: [
788
+ children: (state) => /* @__PURE__ */ jsxs3(Fragment2, { children: [
751
789
  /* @__PURE__ */ jsx11(
752
790
  "span",
753
791
  {
@@ -763,9 +801,9 @@ function Checkbox({ className, children, ...props }) {
763
801
  }
764
802
 
765
803
  // src/ui/combobox/combobox.tsx
766
- import { Fragment as Fragment2, useMemo, useState as useState5 } from "react";
804
+ import { Fragment as Fragment3, useMemo, useState as useState6 } from "react";
767
805
  import { ComboBox as AriaComboBox, ComboBoxValue, FieldError, Input, Label, ListBox, ListBoxItem, Popover, Text } from "react-aria-components";
768
- import { jsx as jsx12, jsxs as jsxs3 } from "react/jsx-runtime";
806
+ import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
769
807
  var Combobox = AriaComboBox;
770
808
  function ComboboxInput({ className, ...props }) {
771
809
  return /* @__PURE__ */ jsx12(Input, { "data-slot": "combobox-input", className: cn("h-9 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
@@ -780,10 +818,10 @@ function ComboboxItem({ className, children, ...props }) {
780
818
  return /* @__PURE__ */ jsx12(ListBoxItem, { "data-slot": "combobox-item", className: cn("flex w-full cursor-default items-center justify-between rounded-md px-2 py-2 text-sm outline-none transition-colors data-focused:bg-muted data-focused:text-foreground data-hovered:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
781
819
  }
782
820
  function HighlightMatch({ text, query, className }) {
783
- return /* @__PURE__ */ jsx12("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ jsx12("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ jsx12(Fragment2, { children: part.text }, `${part.text}-${index}`)) });
821
+ return /* @__PURE__ */ jsx12("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ jsx12("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ jsx12(Fragment3, { children: part.text }, `${part.text}-${index}`)) });
784
822
  }
785
823
  function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inputValue: controlledInputValue, onInputChange, selectedKey, onSelectionChange, label, description, errorMessage, emptyState = /* @__PURE__ */ jsx12("p", { className: "px-3 py-7 text-center text-sm text-muted-foreground", children: "No hay resultados." }), suggestion = true, placeholder, className, onKeyDown: _onKeyDown, ...props }) {
786
- const [internalInputValue, setInternalInputValue] = useState5("");
824
+ const [internalInputValue, setInternalInputValue] = useState6("");
787
825
  const inputValue = controlledInputValue ?? internalInputValue;
788
826
  const setInputValue = (value) => {
789
827
  setInternalInputValue(value);
@@ -802,14 +840,14 @@ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inp
802
840
  const handleKeyDown = (event) => {
803
841
  if ((event.key === "Tab" || event.key === "Enter") && acceptSuggestion()) event.preventDefault();
804
842
  };
805
- return /* @__PURE__ */ jsxs3(AriaComboBox, { ...props, className: cn("group/combobox flex w-full flex-col gap-1.5", className), items: filteredItems, selectedKey, inputValue, onInputChange: setInputValue, onSelectionChange: (key) => {
843
+ return /* @__PURE__ */ jsxs4(AriaComboBox, { ...props, className: cn("group/combobox flex w-full flex-col gap-1.5", className), items: filteredItems, selectedKey, inputValue, onInputChange: setInputValue, onSelectionChange: (key) => {
806
844
  const item = filteredItems.find((candidate) => String(getItemKey(candidate)) === String(key));
807
845
  if (item) setInputValue(getItemLabel(item));
808
846
  onSelectionChange?.(key, item);
809
847
  }, children: [
810
848
  label && /* @__PURE__ */ jsx12(Label, { className: "text-sm font-medium text-foreground", children: label }),
811
- /* @__PURE__ */ jsxs3("div", { className: "relative", children: [
812
- suggestionLabel && /* @__PURE__ */ jsxs3("span", { "aria-hidden": "true", className: "pointer-events-none absolute inset-y-0 left-2.5 z-0 flex items-center whitespace-pre text-sm text-muted-foreground/60", children: [
849
+ /* @__PURE__ */ jsxs4("div", { className: "relative", children: [
850
+ suggestionLabel && /* @__PURE__ */ jsxs4("span", { "aria-hidden": "true", className: "pointer-events-none absolute inset-y-0 left-2.5 z-0 flex items-center whitespace-pre text-sm text-muted-foreground/60", children: [
813
851
  /* @__PURE__ */ jsx12("span", { className: "text-transparent", children: inputValue }),
814
852
  suggestionLabel.slice(inputValue.length)
815
853
  ] }),
@@ -849,7 +887,7 @@ import {
849
887
  ModalOverlay,
850
888
  Text as Text2
851
889
  } from "react-aria-components";
852
- import { Fragment as Fragment3, jsx as jsx14, jsxs as jsxs4 } from "react/jsx-runtime";
890
+ import { Fragment as Fragment4, jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
853
891
  var sizeClasses = {
854
892
  sm: "w-[min(calc(100dvw-2rem),24rem)]",
855
893
  md: "w-[min(calc(100dvw-2rem),28rem)]",
@@ -891,9 +929,9 @@ function ModalDialog({
891
929
  "grid max-h-[calc(100dvh-2rem)] overflow-hidden rounded-xl bg-background text-foreground shadow-xl outline-none",
892
930
  layoutClass
893
931
  ),
894
- children: ({ close }) => /* @__PURE__ */ jsxs4(Fragment3, { children: [
895
- /* @__PURE__ */ jsxs4("header", { "data-slot": "modal-dialog-header", className: "flex items-start gap-3 border-b border-border px-5 py-4", children: [
896
- /* @__PURE__ */ jsxs4("div", { className: "min-w-0 flex-1", children: [
932
+ children: ({ close }) => /* @__PURE__ */ jsxs5(Fragment4, { children: [
933
+ /* @__PURE__ */ jsxs5("header", { "data-slot": "modal-dialog-header", className: "flex items-start gap-3 border-b border-border px-5 py-4", children: [
934
+ /* @__PURE__ */ jsxs5("div", { className: "min-w-0 flex-1", children: [
897
935
  /* @__PURE__ */ jsx14(Heading, { slot: "title", className: "font-heading text-base leading-none font-medium", children: title }),
898
936
  description ? /* @__PURE__ */ jsx14(Text2, { slot: "description", className: "mt-2 text-sm text-muted-foreground", children: description }) : null
899
937
  ] }),
@@ -931,7 +969,7 @@ function ModalDialog({
931
969
  }
932
970
 
933
971
  // src/ui/confirm-dialog/confirm-dialog.tsx
934
- import { Fragment as Fragment4, jsx as jsx15, jsxs as jsxs5 } from "react/jsx-runtime";
972
+ import { Fragment as Fragment5, jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
935
973
  function ConfirmDialog({
936
974
  open,
937
975
  onOpenChange,
@@ -951,7 +989,7 @@ function ConfirmDialog({
951
989
  title,
952
990
  description,
953
991
  showCloseButton: false,
954
- footer: /* @__PURE__ */ jsxs5(Fragment4, { children: [
992
+ footer: /* @__PURE__ */ jsxs6(Fragment5, { children: [
955
993
  /* @__PURE__ */ jsx15(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
956
994
  /* @__PURE__ */ jsx15(Button, { variant: destructive ? "destructive" : "default", isDisabled: pending, onPress: onConfirm, children: confirmLabel })
957
995
  ] })
@@ -959,17 +997,54 @@ function ConfirmDialog({
959
997
  );
960
998
  }
961
999
 
1000
+ // src/ui/danger-zone/danger-zone.tsx
1001
+ import { ChevronDown, ShieldAlert } from "lucide-react";
1002
+ import {
1003
+ Button as DisclosureButton,
1004
+ Disclosure,
1005
+ DisclosurePanel,
1006
+ Heading as Heading2
1007
+ } from "react-aria-components";
1008
+ import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
1009
+ function DangerZone({
1010
+ title = "Zona de peligro",
1011
+ description = "Acciones irreversibles. \xC1brela solo si est\xE1s seguro.",
1012
+ defaultOpen = false,
1013
+ className,
1014
+ children
1015
+ }) {
1016
+ return /* @__PURE__ */ jsx16(Disclosure, { defaultExpanded: defaultOpen, children: /* @__PURE__ */ jsxs7(Card, { className: cn("border-destructive/30", className), children: [
1017
+ /* @__PURE__ */ jsx16(Heading2, { className: "flex", children: /* @__PURE__ */ jsxs7(
1018
+ DisclosureButton,
1019
+ {
1020
+ slot: "trigger",
1021
+ "data-slot": "danger-zone-trigger",
1022
+ className: "group/danger flex w-full items-center gap-3 px-4 text-left outline-none focus-visible:ring-3 focus-visible:ring-ring/50",
1023
+ children: [
1024
+ /* @__PURE__ */ jsx16(ShieldAlert, { className: "size-4 shrink-0 text-destructive" }),
1025
+ /* @__PURE__ */ jsxs7("span", { className: "flex flex-1 flex-col gap-0.5", children: [
1026
+ /* @__PURE__ */ jsx16("span", { className: "font-heading text-base leading-snug font-medium text-destructive", children: title }),
1027
+ /* @__PURE__ */ jsx16("span", { className: "text-xs text-muted-foreground", children: description })
1028
+ ] }),
1029
+ /* @__PURE__ */ jsx16(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground transition-transform group-aria-expanded/danger:rotate-180" })
1030
+ ]
1031
+ }
1032
+ ) }),
1033
+ /* @__PURE__ */ jsx16(DisclosurePanel, { "data-slot": "danger-zone-content", children: /* @__PURE__ */ jsx16(CardContent, { children }) })
1034
+ ] }) });
1035
+ }
1036
+
962
1037
  // src/ui/dialog/dialog.tsx
963
1038
  import { XIcon } from "lucide-react";
964
1039
  import * as React2 from "react";
965
1040
  import {
966
1041
  Dialog as AriaDialog2,
967
- Heading as Heading2,
1042
+ Heading as Heading3,
968
1043
  Modal as Modal2,
969
1044
  ModalOverlay as ModalOverlay2,
970
1045
  Text as Text3
971
1046
  } from "react-aria-components";
972
- import { Fragment as Fragment5, jsx as jsx16, jsxs as jsxs6 } from "react/jsx-runtime";
1047
+ import { Fragment as Fragment6, jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
973
1048
  var DialogContext = React2.createContext(null);
974
1049
  function useDialogContext() {
975
1050
  const context = React2.useContext(DialogContext);
@@ -986,7 +1061,7 @@ function Dialog({ children, defaultOpen = false, onOpenChange, open: controlledO
986
1061
  },
987
1062
  [controlledOpen, onOpenChange]
988
1063
  );
989
- return /* @__PURE__ */ jsx16(DialogContext.Provider, { value: { open, setOpen }, children });
1064
+ return /* @__PURE__ */ jsx17(DialogContext.Provider, { value: { open, setOpen }, children });
990
1065
  }
991
1066
  function DialogTrigger({ asChild = false, children, onClick, ...props }) {
992
1067
  const { setOpen } = useDialogContext();
@@ -1005,15 +1080,15 @@ function DialogTrigger({ asChild = false, children, onClick, ...props }) {
1005
1080
  }
1006
1081
  });
1007
1082
  }
1008
- return /* @__PURE__ */ jsx16(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
1083
+ return /* @__PURE__ */ jsx17(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
1009
1084
  }
1010
1085
  function DialogPortal({ children }) {
1011
- return /* @__PURE__ */ jsx16(Fragment5, { children });
1086
+ return /* @__PURE__ */ jsx17(Fragment6, { children });
1012
1087
  }
1013
1088
  function DialogOverlay({ children, className, ...props }) {
1014
1089
  const { open, setOpen } = useDialogContext();
1015
1090
  if (!open) return null;
1016
- return /* @__PURE__ */ jsx16(
1091
+ return /* @__PURE__ */ jsx17(
1017
1092
  ModalOverlay2,
1018
1093
  {
1019
1094
  "data-slot": "dialog-overlay",
@@ -1037,20 +1112,20 @@ function DialogContent({
1037
1112
  ...props
1038
1113
  }) {
1039
1114
  const { setOpen } = useDialogContext();
1040
- return /* @__PURE__ */ jsx16(DialogPortal, { children: /* @__PURE__ */ jsx16(
1115
+ return /* @__PURE__ */ jsx17(DialogPortal, { children: /* @__PURE__ */ jsx17(
1041
1116
  DialogOverlay,
1042
1117
  {
1043
1118
  onClick: (event) => {
1044
1119
  if (event.target === event.currentTarget) onOverlayClick?.(event);
1045
1120
  },
1046
- children: /* @__PURE__ */ jsx16(
1121
+ children: /* @__PURE__ */ jsx17(
1047
1122
  Modal2,
1048
1123
  {
1049
1124
  className: cn(
1050
1125
  "w-full max-w-[calc(100%-2rem)] max-h-[calc(100dvh-2rem)] outline-none sm:max-w-sm",
1051
1126
  className
1052
1127
  ),
1053
- children: /* @__PURE__ */ jsxs6(
1128
+ children: /* @__PURE__ */ jsxs8(
1054
1129
  AriaDialog2,
1055
1130
  {
1056
1131
  "data-slot": "dialog-content",
@@ -1061,7 +1136,7 @@ function DialogContent({
1061
1136
  ...props,
1062
1137
  children: [
1063
1138
  children,
1064
- showCloseButton ? /* @__PURE__ */ jsx16(
1139
+ showCloseButton ? /* @__PURE__ */ jsx17(
1065
1140
  Button,
1066
1141
  {
1067
1142
  "aria-label": "Cerrar di\xE1logo",
@@ -1070,7 +1145,7 @@ function DialogContent({
1070
1145
  className: "absolute top-2 right-2",
1071
1146
  size: "icon-sm",
1072
1147
  onPress: () => setOpen(false),
1073
- children: /* @__PURE__ */ jsx16(XIcon, {})
1148
+ children: /* @__PURE__ */ jsx17(XIcon, {})
1074
1149
  }
1075
1150
  ) : null
1076
1151
  ]
@@ -1094,42 +1169,74 @@ function DialogClose({ asChild = false, children, onClick, ...props }) {
1094
1169
  }
1095
1170
  });
1096
1171
  }
1097
- return /* @__PURE__ */ jsx16(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
1172
+ return /* @__PURE__ */ jsx17(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
1098
1173
  }
1099
1174
  function DialogHeader({ className, ...props }) {
1100
- return /* @__PURE__ */ jsx16("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
1175
+ return /* @__PURE__ */ jsx17("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
1101
1176
  }
1102
1177
  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: [
1178
+ return /* @__PURE__ */ jsxs8("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
1179
  children,
1105
- showCloseButton ? /* @__PURE__ */ jsx16(DialogClose, { variant: "outline", children: "Cerrar" }) : null
1180
+ showCloseButton ? /* @__PURE__ */ jsx17(DialogClose, { variant: "outline", children: "Cerrar" }) : null
1106
1181
  ] });
1107
1182
  }
1108
1183
  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 });
1184
+ return /* @__PURE__ */ jsx17(Heading3, { slot: "title", "data-slot": "dialog-title", className: cn("font-heading text-base leading-none font-medium", className), ...props });
1110
1185
  }
1111
1186
  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 });
1187
+ return /* @__PURE__ */ jsx17(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 });
1188
+ }
1189
+
1190
+ // src/ui/doc-preview/doc-preview.tsx
1191
+ import { FileText, Image } from "lucide-react";
1192
+ import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1193
+ function DocPreview({ url, mimeType, name }) {
1194
+ if (!url) return /* @__PURE__ */ jsx18(Fallback, { mimeType, reason: "no-url" });
1195
+ if (mimeType === "application/pdf" || mimeType === "text/plain" || mimeType === "text/csv") {
1196
+ return /* @__PURE__ */ jsx18(
1197
+ "iframe",
1198
+ {
1199
+ src: url,
1200
+ title: name,
1201
+ className: "w-full rounded-sm border-0",
1202
+ style: { height: "75vh", minHeight: 400 }
1203
+ }
1204
+ );
1205
+ }
1206
+ if (mimeType?.startsWith("image/")) {
1207
+ return /* @__PURE__ */ jsx18("div", { className: "flex justify-center rounded-sm bg-muted/30 p-6", children: /* @__PURE__ */ jsx18("img", { src: url, alt: name, className: "max-h-[75vh] max-w-full rounded object-contain" }) });
1208
+ }
1209
+ return /* @__PURE__ */ jsx18(Fallback, { mimeType, reason: "unsupported" });
1210
+ }
1211
+ function Fallback({ mimeType, reason }) {
1212
+ const Icon = mimeType?.startsWith("image/") ? Image : FileText;
1213
+ const message = reason === "no-url" ? "No se pudo generar la URL de preview." : "Preview no disponible para este tipo de archivo.";
1214
+ return /* @__PURE__ */ jsxs9("div", { className: "flex flex-col items-center justify-center gap-2 py-14 text-muted-foreground", children: [
1215
+ /* @__PURE__ */ jsx18(Icon, { className: "size-9 opacity-30" }),
1216
+ /* @__PURE__ */ jsx18("p", { className: "text-sm", children: message }),
1217
+ mimeType ? /* @__PURE__ */ jsx18("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
1218
+ /* @__PURE__ */ jsx18("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
1219
+ ] });
1113
1220
  }
1114
1221
 
1115
1222
  // src/ui/drawer/drawer.tsx
1116
1223
  import { Dialog as AriaDialog3, Modal as Modal3, ModalOverlay as ModalOverlay3 } from "react-aria-components";
1117
- import { jsx as jsx17 } from "react/jsx-runtime";
1224
+ import { jsx as jsx19 } from "react/jsx-runtime";
1118
1225
  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" };
1119
1226
  function Drawer({ children, side = "right", className, ...props }) {
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 }) }) });
1227
+ return /* @__PURE__ */ jsx19(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__ */ jsx19(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__ */ jsx19(AriaDialog3, { "data-slot": "drawer", className: "outline-none", children }) }) });
1121
1228
  }
1122
1229
  function DrawerHeader({ className, ...props }) {
1123
- return /* @__PURE__ */ jsx17("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
1230
+ return /* @__PURE__ */ jsx19("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
1124
1231
  }
1125
1232
  function DrawerFooter({ 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 });
1233
+ return /* @__PURE__ */ jsx19("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 });
1127
1234
  }
1128
1235
  function DrawerTitle({ className, ...props }) {
1129
- return /* @__PURE__ */ jsx17("h2", { "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
1236
+ return /* @__PURE__ */ jsx19("h2", { "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
1130
1237
  }
1131
1238
  function DrawerDescription({ className, ...props }) {
1132
- return /* @__PURE__ */ jsx17("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
1239
+ return /* @__PURE__ */ jsx19("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
1133
1240
  }
1134
1241
 
1135
1242
  // src/ui/dropdown-menu/dropdown-menu.tsx
@@ -1147,11 +1254,11 @@ import {
1147
1254
  Separator as SeparatorPrimitive2,
1148
1255
  SubmenuTrigger as SubmenuTriggerPrimitive
1149
1256
  } from "react-aria-components";
1150
- import { Fragment as Fragment6, jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
1257
+ import { Fragment as Fragment7, jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
1151
1258
  function DropdownMenuTrigger({
1152
1259
  ...props
1153
1260
  }) {
1154
- return /* @__PURE__ */ jsx18(MenuTriggerPrimitive, { "data-slot": "dropdown-menu-trigger", ...props });
1261
+ return /* @__PURE__ */ jsx20(MenuTriggerPrimitive, { "data-slot": "dropdown-menu-trigger", ...props });
1155
1262
  }
1156
1263
  function DropdownMenu({
1157
1264
  "data-slot": dataSlot = "dropdown-menu-content",
@@ -1162,7 +1269,7 @@ function DropdownMenu({
1162
1269
  children,
1163
1270
  ...props
1164
1271
  }) {
1165
- return /* @__PURE__ */ jsx18(
1272
+ return /* @__PURE__ */ jsx20(
1166
1273
  PopoverPrimitive,
1167
1274
  {
1168
1275
  "data-slot": dataSlot,
@@ -1170,7 +1277,7 @@ function DropdownMenu({
1170
1277
  offset,
1171
1278
  crossOffset,
1172
1279
  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),
1173
- children: /* @__PURE__ */ jsx18(
1280
+ children: /* @__PURE__ */ jsx20(
1174
1281
  MenuPrimitive,
1175
1282
  {
1176
1283
  className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
@@ -1184,14 +1291,14 @@ function DropdownMenu({
1184
1291
  function DropdownMenuGroup({
1185
1292
  ...props
1186
1293
  }) {
1187
- return /* @__PURE__ */ jsx18(MenuSectionPrimitive, { "data-slot": "dropdown-menu-group", ...props });
1294
+ return /* @__PURE__ */ jsx20(MenuSectionPrimitive, { "data-slot": "dropdown-menu-group", ...props });
1188
1295
  }
1189
1296
  function DropdownMenuLabel({
1190
1297
  className,
1191
1298
  inset,
1192
1299
  ...props
1193
1300
  }) {
1194
- return /* @__PURE__ */ jsx18(
1301
+ return /* @__PURE__ */ jsx20(
1195
1302
  HeaderPrimitive,
1196
1303
  {
1197
1304
  "data-slot": "dropdown-menu-label",
@@ -1223,7 +1330,7 @@ function DropdownMenuItem({
1223
1330
  children,
1224
1331
  ...props
1225
1332
  }) {
1226
- return /* @__PURE__ */ jsx18(
1333
+ return /* @__PURE__ */ jsx20(
1227
1334
  MenuItemPrimitive,
1228
1335
  {
1229
1336
  "data-slot": "dropdown-menu-item",
@@ -1237,13 +1344,13 @@ function DropdownMenuItem({
1237
1344
  ...props,
1238
1345
  children: composeRenderProps(
1239
1346
  children,
1240
- (children2, { isSelected, selectionMode }) => /* @__PURE__ */ jsxs7(Fragment6, { children: [
1241
- selectionMode !== "none" ? /* @__PURE__ */ jsx18(
1347
+ (children2, { isSelected, selectionMode }) => /* @__PURE__ */ jsxs10(Fragment7, { children: [
1348
+ selectionMode !== "none" ? /* @__PURE__ */ jsx20(
1242
1349
  "span",
1243
1350
  {
1244
1351
  className: "pointer-events-none absolute right-2 flex items-center justify-center",
1245
1352
  "data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
1246
- children: isSelected ? /* @__PURE__ */ jsx18(CheckIcon, {}) : null
1353
+ children: isSelected ? /* @__PURE__ */ jsx20(CheckIcon, {}) : null
1247
1354
  }
1248
1355
  ) : null,
1249
1356
  children2
@@ -1255,7 +1362,7 @@ function DropdownMenuItem({
1255
1362
  function DropdownMenuSub({
1256
1363
  ...props
1257
1364
  }) {
1258
- return /* @__PURE__ */ jsx18(SubmenuTriggerPrimitive, { "data-slot": "dropdown-menu-sub", ...props });
1365
+ return /* @__PURE__ */ jsx20(SubmenuTriggerPrimitive, { "data-slot": "dropdown-menu-sub", ...props });
1259
1366
  }
1260
1367
  function DropdownMenuSubTrigger({
1261
1368
  className,
@@ -1263,7 +1370,7 @@ function DropdownMenuSubTrigger({
1263
1370
  children,
1264
1371
  ...props
1265
1372
  }) {
1266
- return /* @__PURE__ */ jsx18(
1373
+ return /* @__PURE__ */ jsx20(
1267
1374
  MenuItemPrimitive,
1268
1375
  {
1269
1376
  "data-slot": "dropdown-menu-sub-trigger",
@@ -1274,9 +1381,9 @@ function DropdownMenuSubTrigger({
1274
1381
  className
1275
1382
  ),
1276
1383
  ...props,
1277
- children: composeRenderProps(children, (children2) => /* @__PURE__ */ jsxs7(Fragment6, { children: [
1384
+ children: composeRenderProps(children, (children2) => /* @__PURE__ */ jsxs10(Fragment7, { children: [
1278
1385
  children2,
1279
- /* @__PURE__ */ jsx18(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1386
+ /* @__PURE__ */ jsx20(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1280
1387
  ] }))
1281
1388
  }
1282
1389
  );
@@ -1288,7 +1395,7 @@ function DropdownMenuSubContent({
1288
1395
  className,
1289
1396
  ...props
1290
1397
  }) {
1291
- return /* @__PURE__ */ jsx18(
1398
+ return /* @__PURE__ */ jsx20(
1292
1399
  DropdownMenu,
1293
1400
  {
1294
1401
  "data-slot": "dropdown-menu-sub-content",
@@ -1304,7 +1411,7 @@ function DropdownMenuSeparator({
1304
1411
  className,
1305
1412
  ...props
1306
1413
  }) {
1307
- return /* @__PURE__ */ jsx18(
1414
+ return /* @__PURE__ */ jsx20(
1308
1415
  SeparatorPrimitive2,
1309
1416
  {
1310
1417
  "data-slot": "dropdown-menu-separator",
@@ -1317,7 +1424,7 @@ function DropdownMenuShortcut({
1317
1424
  className,
1318
1425
  ...props
1319
1426
  }) {
1320
- return /* @__PURE__ */ jsx18(
1427
+ return /* @__PURE__ */ jsx20(
1321
1428
  "span",
1322
1429
  {
1323
1430
  "data-slot": "dropdown-menu-shortcut",
@@ -1332,9 +1439,9 @@ function DropdownMenuShortcut({
1332
1439
 
1333
1440
  // src/ui/empty-state/empty-state.tsx
1334
1441
  import { cva as cva7 } from "class-variance-authority";
1335
- import { jsx as jsx19 } from "react/jsx-runtime";
1442
+ import { jsx as jsx21 } from "react/jsx-runtime";
1336
1443
  function EmptyState({ className, ...props }) {
1337
- return /* @__PURE__ */ jsx19(
1444
+ return /* @__PURE__ */ jsx21(
1338
1445
  "div",
1339
1446
  {
1340
1447
  "data-slot": "empty-state",
@@ -1347,7 +1454,7 @@ function EmptyState({ className, ...props }) {
1347
1454
  );
1348
1455
  }
1349
1456
  function EmptyStateHeader({ className, ...props }) {
1350
- return /* @__PURE__ */ jsx19(
1457
+ return /* @__PURE__ */ jsx21(
1351
1458
  "div",
1352
1459
  {
1353
1460
  "data-slot": "empty-state-header",
@@ -1373,7 +1480,7 @@ function EmptyStateMedia({
1373
1480
  variant = "default",
1374
1481
  ...props
1375
1482
  }) {
1376
- return /* @__PURE__ */ jsx19(
1483
+ return /* @__PURE__ */ jsx21(
1377
1484
  "div",
1378
1485
  {
1379
1486
  "data-slot": "empty-state-media",
@@ -1384,7 +1491,7 @@ function EmptyStateMedia({
1384
1491
  );
1385
1492
  }
1386
1493
  function EmptyStateTitle({ className, ...props }) {
1387
- return /* @__PURE__ */ jsx19(
1494
+ return /* @__PURE__ */ jsx21(
1388
1495
  "h3",
1389
1496
  {
1390
1497
  "data-slot": "empty-state-title",
@@ -1394,7 +1501,7 @@ function EmptyStateTitle({ className, ...props }) {
1394
1501
  );
1395
1502
  }
1396
1503
  function EmptyStateDescription({ className, ...props }) {
1397
- return /* @__PURE__ */ jsx19(
1504
+ return /* @__PURE__ */ jsx21(
1398
1505
  "p",
1399
1506
  {
1400
1507
  "data-slot": "empty-state-description",
@@ -1407,7 +1514,7 @@ function EmptyStateDescription({ className, ...props }) {
1407
1514
  );
1408
1515
  }
1409
1516
  function EmptyStateContent({ className, ...props }) {
1410
- return /* @__PURE__ */ jsx19(
1517
+ return /* @__PURE__ */ jsx21(
1411
1518
  "div",
1412
1519
  {
1413
1520
  "data-slot": "empty-state-content",
@@ -1426,22 +1533,22 @@ import { cva as cva8 } from "class-variance-authority";
1426
1533
  // src/ui/label/label.tsx
1427
1534
  import { forwardRef } from "react";
1428
1535
  import { Label as LabelPrimitive } from "react-aria-components";
1429
- import { jsx as jsx20 } from "react/jsx-runtime";
1536
+ import { jsx as jsx22 } from "react/jsx-runtime";
1430
1537
  var Label2 = forwardRef(function Label3({ className, ...props }, ref) {
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 });
1538
+ return /* @__PURE__ */ jsx22(LabelPrimitive, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
1432
1539
  });
1433
1540
 
1434
1541
  // src/ui/field/field.tsx
1435
- import { jsx as jsx21, jsxs as jsxs8 } from "react/jsx-runtime";
1542
+ import { jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
1436
1543
  function FieldSet({ className, ...props }) {
1437
- return /* @__PURE__ */ jsx21("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1544
+ return /* @__PURE__ */ jsx23("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1438
1545
  }
1439
1546
  function FieldLegend({
1440
1547
  className,
1441
1548
  variant = "legend",
1442
1549
  ...props
1443
1550
  }) {
1444
- return /* @__PURE__ */ jsx21(
1551
+ return /* @__PURE__ */ jsx23(
1445
1552
  "legend",
1446
1553
  {
1447
1554
  "data-slot": "field-legend",
@@ -1455,7 +1562,7 @@ function FieldLegend({
1455
1562
  );
1456
1563
  }
1457
1564
  function FieldGroup({ className, ...props }) {
1458
- return /* @__PURE__ */ jsx21(
1565
+ return /* @__PURE__ */ jsx23(
1459
1566
  "div",
1460
1567
  {
1461
1568
  "data-slot": "field-group",
@@ -1483,7 +1590,7 @@ var fieldVariants = cva8(
1483
1590
  function Field({ className, orientation = "vertical", ...props }) {
1484
1591
  return (
1485
1592
  // biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
1486
- /* @__PURE__ */ jsx21(
1593
+ /* @__PURE__ */ jsx23(
1487
1594
  "div",
1488
1595
  {
1489
1596
  role: "group",
@@ -1496,7 +1603,7 @@ function Field({ className, orientation = "vertical", ...props }) {
1496
1603
  );
1497
1604
  }
1498
1605
  function FieldContent({ className, ...props }) {
1499
- return /* @__PURE__ */ jsx21(
1606
+ return /* @__PURE__ */ jsx23(
1500
1607
  "div",
1501
1608
  {
1502
1609
  "data-slot": "field-content",
@@ -1506,7 +1613,7 @@ function FieldContent({ className, ...props }) {
1506
1613
  );
1507
1614
  }
1508
1615
  function FieldLabel({ className, ...props }) {
1509
- return /* @__PURE__ */ jsx21(
1616
+ return /* @__PURE__ */ jsx23(
1510
1617
  Label2,
1511
1618
  {
1512
1619
  "data-slot": "field-label",
@@ -1519,7 +1626,7 @@ function FieldLabel({ className, ...props }) {
1519
1626
  );
1520
1627
  }
1521
1628
  function FieldTitle({ className, ...props }) {
1522
- return /* @__PURE__ */ jsx21(
1629
+ return /* @__PURE__ */ jsx23(
1523
1630
  "div",
1524
1631
  {
1525
1632
  "data-slot": "field-title",
@@ -1529,7 +1636,7 @@ function FieldTitle({ className, ...props }) {
1529
1636
  );
1530
1637
  }
1531
1638
  function FieldDescription({ className, ...props }) {
1532
- return /* @__PURE__ */ jsx21(
1639
+ return /* @__PURE__ */ jsx23(
1533
1640
  "p",
1534
1641
  {
1535
1642
  "data-slot": "field-description",
@@ -1542,7 +1649,7 @@ function FieldDescription({ className, ...props }) {
1542
1649
  );
1543
1650
  }
1544
1651
  function FieldSeparator({ className, children, ...props }) {
1545
- return /* @__PURE__ */ jsxs8(
1652
+ return /* @__PURE__ */ jsxs11(
1546
1653
  "div",
1547
1654
  {
1548
1655
  "data-slot": "field-separator",
@@ -1550,8 +1657,8 @@ function FieldSeparator({ className, children, ...props }) {
1550
1657
  className: cn("relative -my-2 h-5 text-sm", className),
1551
1658
  ...props,
1552
1659
  children: [
1553
- /* @__PURE__ */ jsx21(Separator, { className: "absolute inset-0 top-1/2" }),
1554
- children ? /* @__PURE__ */ jsx21(
1660
+ /* @__PURE__ */ jsx23(Separator, { className: "absolute inset-0 top-1/2" }),
1661
+ children ? /* @__PURE__ */ jsx23(
1555
1662
  "span",
1556
1663
  {
1557
1664
  "data-slot": "field-separator-content",
@@ -1565,9 +1672,9 @@ function FieldSeparator({ className, children, ...props }) {
1565
1672
  }
1566
1673
  function FieldError2({ className, children, errors, ...props }) {
1567
1674
  const messages = [...new Set(errors?.flatMap((error) => error?.message ?? []) ?? [])];
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);
1675
+ const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ jsx23("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ jsx23("li", { children: message }, message)) }) : null);
1569
1676
  if (!content) return null;
1570
- return /* @__PURE__ */ jsx21(
1677
+ return /* @__PURE__ */ jsx23(
1571
1678
  "div",
1572
1679
  {
1573
1680
  role: "alert",
@@ -1580,12 +1687,12 @@ function FieldError2({ className, children, errors, ...props }) {
1580
1687
  }
1581
1688
 
1582
1689
  // src/ui/form-feedback/form-feedback.tsx
1583
- import { useCallback as useCallback4, useEffect as useEffect4, useRef as useRef3, useState as useState7 } from "react";
1690
+ import { useCallback as useCallback4, useEffect as useEffect4, useRef as useRef3, useState as useState8 } from "react";
1584
1691
  import { CheckCircle, LoaderCircle, CircleAlert } from "lucide-react";
1585
- import { jsx as jsx22, jsxs as jsxs9 } from "react/jsx-runtime";
1692
+ import { jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
1586
1693
  function useFormFeedback(options) {
1587
1694
  const resetMs = options?.successResetMs ?? 2500;
1588
- const [state, setState] = useState7({ status: "idle" });
1695
+ const [state, setState] = useState8({ status: "idle" });
1589
1696
  const timer = useRef3(null);
1590
1697
  const clearTimer = useCallback4(() => {
1591
1698
  if (timer.current) clearTimeout(timer.current);
@@ -1612,33 +1719,33 @@ function useFormFeedback(options) {
1612
1719
  return { state, pending: state.status === "pending", setPending, setSuccess, setError, reset };
1613
1720
  }
1614
1721
  function FormFeedback({ state, className, pendingLabel = "Guardando\u2026", successLabel = "Guardado" }) {
1615
- if (state.status === "idle") return /* @__PURE__ */ jsx22("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
1722
+ if (state.status === "idle") return /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
1616
1723
  const error = state.status === "error";
1617
1724
  const success = state.status === "success";
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 })
1725
+ return /* @__PURE__ */ jsxs12("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: [
1726
+ state.status === "pending" && /* @__PURE__ */ jsx24(LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
1727
+ success && /* @__PURE__ */ jsx24(CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
1728
+ error && /* @__PURE__ */ jsx24(CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
1729
+ /* @__PURE__ */ jsx24("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
1623
1730
  ] });
1624
1731
  }
1625
1732
 
1626
1733
  // src/ui/form-row/form-row.tsx
1627
- import { Fragment as Fragment7, jsx as jsx23, jsxs as jsxs10 } from "react/jsx-runtime";
1734
+ import { Fragment as Fragment8, jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
1628
1735
  function FormRow({ label, htmlFor, required, hint, error, className, children }) {
1629
1736
  const hintId = hint ? `${htmlFor}-hint` : void 0;
1630
1737
  const errorId = error ? `${htmlFor}-error` : void 0;
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: [
1738
+ return /* @__PURE__ */ jsxs13("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
1739
+ /* @__PURE__ */ jsxs13("label", { htmlFor, className: "text-sm font-medium text-foreground", children: [
1633
1740
  label,
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)" })
1741
+ required && /* @__PURE__ */ jsxs13(Fragment8, { children: [
1742
+ /* @__PURE__ */ jsx25("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" }),
1743
+ /* @__PURE__ */ jsx25("span", { className: "sr-only", children: " (obligatorio)" })
1637
1744
  ] })
1638
1745
  ] }),
1639
1746
  children,
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 })
1747
+ hint && /* @__PURE__ */ jsx25("p", { id: hintId, className: "text-xs text-muted-foreground", children: hint }),
1748
+ error && /* @__PURE__ */ jsx25("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive", children: error })
1642
1749
  ] });
1643
1750
  }
1644
1751
 
@@ -1653,21 +1760,21 @@ import {
1653
1760
  Tooltip as TooltipPrimitive,
1654
1761
  TooltipTrigger as TooltipTriggerPrimitive
1655
1762
  } from "react-aria-components";
1656
- import { jsx as jsx24, jsxs as jsxs11 } from "react/jsx-runtime";
1763
+ import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
1657
1764
  function TooltipTrigger({
1658
1765
  delay = 0,
1659
1766
  children,
1660
1767
  ...props
1661
1768
  }) {
1662
1769
  const [trigger, tooltip] = React4.Children.toArray(children);
1663
- return /* @__PURE__ */ jsxs11(
1770
+ return /* @__PURE__ */ jsxs14(
1664
1771
  TooltipTriggerPrimitive,
1665
1772
  {
1666
1773
  "data-slot": "tooltip-trigger",
1667
1774
  delay,
1668
1775
  ...props,
1669
1776
  children: [
1670
- /* @__PURE__ */ jsx24(Focusable, { children: trigger }),
1777
+ /* @__PURE__ */ jsx26(Focusable, { children: trigger }),
1671
1778
  tooltip
1672
1779
  ]
1673
1780
  }
@@ -1681,7 +1788,7 @@ function Tooltip({
1681
1788
  children,
1682
1789
  ...props
1683
1790
  }) {
1684
- return /* @__PURE__ */ jsxs11(
1791
+ return /* @__PURE__ */ jsxs14(
1685
1792
  TooltipPrimitive,
1686
1793
  {
1687
1794
  "data-slot": "tooltip-content",
@@ -1695,7 +1802,7 @@ function Tooltip({
1695
1802
  ...props,
1696
1803
  children: [
1697
1804
  children,
1698
- /* @__PURE__ */ jsx24(
1805
+ /* @__PURE__ */ jsx26(
1699
1806
  OverlayArrow,
1700
1807
  {
1701
1808
  className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground",
@@ -1713,7 +1820,7 @@ function Tooltip({
1713
1820
  }
1714
1821
 
1715
1822
  // src/ui/icon-button/icon-button.tsx
1716
- import { jsx as jsx25, jsxs as jsxs12 } from "react/jsx-runtime";
1823
+ import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
1717
1824
  function IconButton({
1718
1825
  label,
1719
1826
  children,
@@ -1726,8 +1833,8 @@ function IconButton({
1726
1833
  buttonVariants({ variant, size: "icon" }),
1727
1834
  className
1728
1835
  );
1729
- return /* @__PURE__ */ jsxs12(TooltipTrigger, { children: [
1730
- href ? /* @__PURE__ */ jsx25(
1836
+ return /* @__PURE__ */ jsxs15(TooltipTrigger, { children: [
1837
+ href ? /* @__PURE__ */ jsx27(
1731
1838
  Link2,
1732
1839
  {
1733
1840
  "data-slot": "icon-button",
@@ -1736,7 +1843,7 @@ function IconButton({
1736
1843
  className: linkClassName,
1737
1844
  children
1738
1845
  }
1739
- ) : /* @__PURE__ */ jsx25(
1846
+ ) : /* @__PURE__ */ jsx27(
1740
1847
  Button,
1741
1848
  {
1742
1849
  "data-slot": "icon-button",
@@ -1748,7 +1855,7 @@ function IconButton({
1748
1855
  children
1749
1856
  }
1750
1857
  ),
1751
- /* @__PURE__ */ jsx25(Tooltip, { children: label })
1858
+ /* @__PURE__ */ jsx27(Tooltip, { children: label })
1752
1859
  ] });
1753
1860
  }
1754
1861
 
@@ -1758,27 +1865,27 @@ import { cva as cva9 } from "class-variance-authority";
1758
1865
  // src/ui/input/input.tsx
1759
1866
  import { forwardRef as forwardRef2 } from "react";
1760
1867
  import { Input as AriaInput2 } from "react-aria-components";
1761
- import { jsx as jsx26 } from "react/jsx-runtime";
1868
+ import { jsx as jsx28 } from "react/jsx-runtime";
1762
1869
  var InputImpl = forwardRef2(function Input2({ className, type, ...props }, ref) {
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 });
1870
+ return /* @__PURE__ */ jsx28(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 });
1764
1871
  });
1765
1872
  var Input3 = InputImpl;
1766
1873
 
1767
1874
  // src/ui/textarea/textarea.tsx
1768
1875
  import { forwardRef as forwardRef3 } from "react";
1769
1876
  import { TextArea as AriaTextArea } from "react-aria-components";
1770
- import { jsx as jsx27 } from "react/jsx-runtime";
1877
+ import { jsx as jsx29 } from "react/jsx-runtime";
1771
1878
  var TextareaImpl = forwardRef3(function Textarea({ className, ...props }, ref) {
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 });
1879
+ return /* @__PURE__ */ jsx29(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 });
1773
1880
  });
1774
1881
  var Textarea2 = TextareaImpl;
1775
1882
 
1776
1883
  // src/ui/input-group/input-group.tsx
1777
- import { jsx as jsx28 } from "react/jsx-runtime";
1884
+ import { jsx as jsx30 } from "react/jsx-runtime";
1778
1885
  function InputGroup({ className, ...props }) {
1779
1886
  return (
1780
1887
  // biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
1781
- /* @__PURE__ */ jsx28(
1888
+ /* @__PURE__ */ jsx30(
1782
1889
  "div",
1783
1890
  {
1784
1891
  role: "group",
@@ -1814,7 +1921,7 @@ function InputGroupAddon({
1814
1921
  }) {
1815
1922
  return (
1816
1923
  // biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
1817
- /* @__PURE__ */ jsx28(
1924
+ /* @__PURE__ */ jsx30(
1818
1925
  "div",
1819
1926
  {
1820
1927
  role: "group",
@@ -1845,7 +1952,7 @@ function InputGroupButton({
1845
1952
  ...props
1846
1953
  }) {
1847
1954
  const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
1848
- return /* @__PURE__ */ jsx28(
1955
+ return /* @__PURE__ */ jsx30(
1849
1956
  Button,
1850
1957
  {
1851
1958
  "data-slot": "input-group-button",
@@ -1858,7 +1965,7 @@ function InputGroupButton({
1858
1965
  );
1859
1966
  }
1860
1967
  function InputGroupText({ className, ...props }) {
1861
- return /* @__PURE__ */ jsx28(
1968
+ return /* @__PURE__ */ jsx30(
1862
1969
  "span",
1863
1970
  {
1864
1971
  "data-slot": "input-group-text",
@@ -1871,7 +1978,7 @@ function InputGroupText({ className, ...props }) {
1871
1978
  );
1872
1979
  }
1873
1980
  function InputGroupInput({ className, ...props }) {
1874
- return /* @__PURE__ */ jsx28(
1981
+ return /* @__PURE__ */ jsx30(
1875
1982
  Input3,
1876
1983
  {
1877
1984
  "data-slot": "input-group-control",
@@ -1884,7 +1991,7 @@ function InputGroupInput({ className, ...props }) {
1884
1991
  );
1885
1992
  }
1886
1993
  function InputGroupTextarea({ className, ...props }) {
1887
- return /* @__PURE__ */ jsx28(
1994
+ return /* @__PURE__ */ jsx30(
1888
1995
  Textarea2,
1889
1996
  {
1890
1997
  "data-slot": "input-group-control",
@@ -1898,21 +2005,21 @@ function InputGroupTextarea({ className, ...props }) {
1898
2005
  }
1899
2006
 
1900
2007
  // src/ui/kbd/kbd.tsx
1901
- import { jsx as jsx29 } from "react/jsx-runtime";
2008
+ import { jsx as jsx31 } from "react/jsx-runtime";
1902
2009
  function Kbd({ 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 });
2010
+ return /* @__PURE__ */ jsx31("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 });
1904
2011
  }
1905
2012
  function KbdGroup({ className, ...props }) {
1906
- return /* @__PURE__ */ jsx29("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
2013
+ return /* @__PURE__ */ jsx31("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
1907
2014
  }
1908
2015
 
1909
2016
  // src/ui/loading-overlay/loading-overlay.tsx
1910
2017
  import { LoaderCircle as LoaderCircle2 } from "lucide-react";
1911
- import { jsx as jsx30, jsxs as jsxs13 } from "react/jsx-runtime";
2018
+ import { jsx as jsx32, jsxs as jsxs16 } from "react/jsx-runtime";
1912
2019
  function LoadingOverlay({ label = "Cargando", className, ...props }) {
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 })
2020
+ return /* @__PURE__ */ jsx32("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__ */ jsxs16("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
2021
+ /* @__PURE__ */ jsx32(LoaderCircle2, { className: "animate-spin", "aria-hidden": "true" }),
2022
+ /* @__PURE__ */ jsx32("span", { children: label })
1916
2023
  ] }) });
1917
2024
  }
1918
2025
 
@@ -1923,16 +2030,16 @@ import {
1923
2030
  MenuTrigger as AriaMenuTrigger,
1924
2031
  Popover as Popover3
1925
2032
  } from "react-aria-components";
1926
- import { jsx as jsx31 } from "react/jsx-runtime";
2033
+ import { jsx as jsx33 } from "react/jsx-runtime";
1927
2034
  var MenuTrigger = AriaMenuTrigger;
1928
2035
  function MenuContent({ 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 });
2036
+ return /* @__PURE__ */ jsx33(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 });
1930
2037
  }
1931
2038
  function Menu({ className, ...props }) {
1932
- return /* @__PURE__ */ jsx31(AriaMenu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
2039
+ return /* @__PURE__ */ jsx33(AriaMenu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
1933
2040
  }
1934
2041
  function MenuItem({ className, children, ...props }) {
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 });
2042
+ return /* @__PURE__ */ jsx33(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 });
1936
2043
  }
1937
2044
 
1938
2045
  // src/ui/otp-input/otp-input.tsx
@@ -1940,10 +2047,10 @@ import {
1940
2047
  forwardRef as forwardRef4,
1941
2048
  useImperativeHandle,
1942
2049
  useRef as useRef4,
1943
- useState as useState8
2050
+ useState as useState9
1944
2051
  } from "react";
1945
2052
  import { Input as AriaInput3 } from "react-aria-components";
1946
- import { jsx as jsx32, jsxs as jsxs14 } from "react/jsx-runtime";
2053
+ import { jsx as jsx34, jsxs as jsxs17 } from "react/jsx-runtime";
1947
2054
  function normalizeOtp(value, length) {
1948
2055
  return value.replace(/[^0-9]/g, "").slice(0, length);
1949
2056
  }
@@ -1964,12 +2071,12 @@ var OtpInputImpl = forwardRef4(function OtpInput({
1964
2071
  }, forwardedRef) {
1965
2072
  const slotCount = Math.max(1, Math.floor(length));
1966
2073
  const controlled = value !== void 0;
1967
- const [internalValue, setInternalValue] = useState8(() => normalizeOtp(defaultValue, slotCount));
2074
+ const [internalValue, setInternalValue] = useState9(() => normalizeOtp(defaultValue, slotCount));
1968
2075
  const code = normalizeOtp(controlled ? value : internalValue, slotCount);
1969
2076
  const slots = Array.from({ length: slotCount }, (_, index) => `otp-slot-${index + 1}`);
1970
2077
  const inputRef = useRef4(null);
1971
- const [focused, setFocused] = useState8(false);
1972
- const [selectionStart, setSelectionStart] = useState8(0);
2078
+ const [focused, setFocused] = useState9(false);
2079
+ const [selectionStart, setSelectionStart] = useState9(0);
1973
2080
  const invalid = props["aria-invalid"] === true || props["aria-invalid"] === "true";
1974
2081
  const activeIndex = code.length === slotCount ? slotCount - 1 : Math.min(selectionStart, code.length, slotCount - 1);
1975
2082
  useImperativeHandle(forwardedRef, () => inputRef.current);
@@ -1995,7 +2102,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
1995
2102
  input.setSelectionRange(position, position);
1996
2103
  setSelectionStart(position);
1997
2104
  }
1998
- return /* @__PURE__ */ jsxs14(
2105
+ return /* @__PURE__ */ jsxs17(
1999
2106
  "div",
2000
2107
  {
2001
2108
  "data-slot": "otp-input",
@@ -2005,7 +2112,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
2005
2112
  style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
2006
2113
  onPointerDown: handlePointerDown,
2007
2114
  children: [
2008
- /* @__PURE__ */ jsx32(
2115
+ /* @__PURE__ */ jsx34(
2009
2116
  AriaInput3,
2010
2117
  {
2011
2118
  ...props,
@@ -2045,7 +2152,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
2045
2152
  }
2046
2153
  }
2047
2154
  ),
2048
- slots.map((slot, index) => /* @__PURE__ */ jsx32(
2155
+ slots.map((slot, index) => /* @__PURE__ */ jsx34(
2049
2156
  "span",
2050
2157
  {
2051
2158
  "aria-hidden": "true",
@@ -2068,39 +2175,39 @@ var OtpInputImpl = forwardRef4(function OtpInput({
2068
2175
  var OtpInput2 = OtpInputImpl;
2069
2176
 
2070
2177
  // src/ui/page-header/page-header.tsx
2071
- import { jsx as jsx33 } from "react/jsx-runtime";
2178
+ import { jsx as jsx35 } from "react/jsx-runtime";
2072
2179
  function PageHeader({ 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 });
2180
+ return /* @__PURE__ */ jsx35("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 });
2074
2181
  }
2075
2182
  function PageHeaderHeading({ className, ...props }) {
2076
- return /* @__PURE__ */ jsx33("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2183
+ return /* @__PURE__ */ jsx35("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2077
2184
  }
2078
2185
  function PageHeaderTitle({ 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 });
2186
+ return /* @__PURE__ */ jsx35("h1", { "data-slot": "page-header-title", className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className), ...props });
2080
2187
  }
2081
2188
  function PageHeaderDescription({ className, ...props }) {
2082
- return /* @__PURE__ */ jsx33("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
2189
+ return /* @__PURE__ */ jsx35("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
2083
2190
  }
2084
2191
  function PageHeaderActions({ className, ...props }) {
2085
- return /* @__PURE__ */ jsx33("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
2192
+ return /* @__PURE__ */ jsx35("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
2086
2193
  }
2087
2194
 
2088
2195
  // src/ui/pagination/pagination.tsx
2089
2196
  import { ChevronLeft, ChevronRight } from "lucide-react";
2090
- import { jsx as jsx34, jsxs as jsxs15 } from "react/jsx-runtime";
2197
+ import { jsx as jsx36, jsxs as jsxs18 } from "react/jsx-runtime";
2091
2198
  function Pagination({ page, pageCount, onPageChange, className }) {
2092
2199
  const pages = Array.from({ length: pageCount }, (_, index) => index + 1);
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: [
2200
+ return /* @__PURE__ */ jsxs18("nav", { "aria-label": "Paginaci\xF3n", className: cn("flex items-center justify-between gap-4", className), children: [
2201
+ /* @__PURE__ */ jsxs18("p", { className: "text-sm text-muted-foreground", children: [
2095
2202
  "P\xE1gina ",
2096
2203
  page,
2097
2204
  " de ",
2098
2205
  pageCount
2099
2206
  ] }),
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, {}) })
2207
+ /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-1", children: [
2208
+ /* @__PURE__ */ jsx36(Button, { "aria-label": "P\xE1gina anterior", isDisabled: page <= 1, onPress: () => onPageChange(page - 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ jsx36(ChevronLeft, {}) }),
2209
+ pages.map((item) => /* @__PURE__ */ jsx36(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)),
2210
+ /* @__PURE__ */ jsx36(Button, { "aria-label": "P\xE1gina siguiente", isDisabled: page >= pageCount, onPress: () => onPageChange(page + 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ jsx36(ChevronRight, {}) })
2104
2211
  ] })
2105
2212
  ] });
2106
2213
  }
@@ -2110,10 +2217,10 @@ import {
2110
2217
  DialogTrigger as AriaDialogTrigger,
2111
2218
  Popover as AriaPopover
2112
2219
  } from "react-aria-components";
2113
- import { jsx as jsx35 } from "react/jsx-runtime";
2220
+ import { jsx as jsx37 } from "react/jsx-runtime";
2114
2221
  var PopoverTrigger = AriaDialogTrigger;
2115
2222
  function Popover4({ 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 });
2223
+ return /* @__PURE__ */ jsx37(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 });
2117
2224
  }
2118
2225
  var PopoverContent = Popover4;
2119
2226
 
@@ -2125,7 +2232,7 @@ import {
2125
2232
  Input as AriaInput4,
2126
2233
  NumberField as AriaNumberField
2127
2234
  } from "react-aria-components";
2128
- import { jsx as jsx36, jsxs as jsxs16 } from "react/jsx-runtime";
2235
+ import { jsx as jsx38, jsxs as jsxs19 } from "react/jsx-runtime";
2129
2236
  function QuantityInput({
2130
2237
  className,
2131
2238
  inputClassName,
@@ -2135,7 +2242,7 @@ function QuantityInput({
2135
2242
  step = 1,
2136
2243
  ...props
2137
2244
  }) {
2138
- return /* @__PURE__ */ jsx36(
2245
+ return /* @__PURE__ */ jsx38(
2139
2246
  AriaNumberField,
2140
2247
  {
2141
2248
  ...props,
@@ -2143,15 +2250,15 @@ function QuantityInput({
2143
2250
  step,
2144
2251
  "data-slot": "quantity-input",
2145
2252
  className: cn("group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
2146
- children: /* @__PURE__ */ jsxs16(
2253
+ children: /* @__PURE__ */ jsxs19(
2147
2254
  AriaGroup,
2148
2255
  {
2149
2256
  "data-slot": "quantity-input-group",
2150
2257
  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",
2151
2258
  children: [
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" }) })
2259
+ /* @__PURE__ */ jsx38(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__ */ jsx38(Minus, { "aria-hidden": "true", className: "size-4" }) }),
2260
+ /* @__PURE__ */ jsx38(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) }),
2261
+ /* @__PURE__ */ jsx38(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__ */ jsx38(Plus, { "aria-hidden": "true", className: "size-4" }) })
2155
2262
  ]
2156
2263
  }
2157
2264
  )
@@ -2166,13 +2273,13 @@ import {
2166
2273
  Input as Input4
2167
2274
  } from "react-aria-components";
2168
2275
  import { X as X2 } from "lucide-react";
2169
- import { jsx as jsx37 } from "react/jsx-runtime";
2276
+ import { jsx as jsx39 } from "react/jsx-runtime";
2170
2277
  var SearchField = AriaSearchField;
2171
2278
  function SearchInput({ 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 });
2279
+ return /* @__PURE__ */ jsx39(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 });
2173
2280
  }
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 });
2281
+ function SearchClearButton({ className, children = /* @__PURE__ */ jsx39(X2, { "aria-hidden": "true", className: "size-4" }), ...props }) {
2282
+ return /* @__PURE__ */ jsx39(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 });
2176
2283
  }
2177
2284
 
2178
2285
  // src/ui/select/select.tsx
@@ -2184,44 +2291,44 @@ import {
2184
2291
  ListBoxItem as ListBoxItem3,
2185
2292
  Popover as Popover5
2186
2293
  } from "react-aria-components";
2187
- import { ChevronDown } from "lucide-react";
2188
- import { Fragment as Fragment8, jsx as jsx38, jsxs as jsxs17 } from "react/jsx-runtime";
2294
+ import { ChevronDown as ChevronDown2 } from "lucide-react";
2295
+ import { Fragment as Fragment9, jsx as jsx40, jsxs as jsxs20 } from "react/jsx-runtime";
2189
2296
  var Select = AriaSelect;
2190
2297
  function SelectTrigger({ className, children, ...props }) {
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: [
2298
+ return /* @__PURE__ */ jsx40(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__ */ jsxs20(Fragment9, { children: [
2192
2299
  typeof children === "function" ? children(state) : children,
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" })
2300
+ /* @__PURE__ */ jsx40(ChevronDown2, { "aria-hidden": "true", className: "ml-auto size-4 text-muted-foreground transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none" })
2194
2301
  ] }) });
2195
2302
  }
2196
2303
  function SelectValue({ className, ...props }) {
2197
- return /* @__PURE__ */ jsx38(AriaSelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
2304
+ return /* @__PURE__ */ jsx40(AriaSelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
2198
2305
  }
2199
2306
  function SelectContent({ 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 });
2307
+ return /* @__PURE__ */ jsx40(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 });
2201
2308
  }
2202
2309
  function SelectList({ className, ...props }) {
2203
- return /* @__PURE__ */ jsx38(ListBox3, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
2310
+ return /* @__PURE__ */ jsx40(ListBox3, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
2204
2311
  }
2205
2312
  function SelectItem({ className, children, ...props }) {
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 });
2313
+ return /* @__PURE__ */ jsx40(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 });
2207
2314
  }
2208
2315
 
2209
2316
  // src/ui/sheet/sheet.tsx
2210
2317
  import { XIcon as XIcon2 } from "lucide-react";
2211
2318
  import {
2212
- Heading as Heading3,
2319
+ Heading as Heading4,
2213
2320
  ModalOverlay as ModalOverlayPrimitive,
2214
2321
  Modal as ModalPrimitive,
2215
2322
  Dialog as SheetPrimitive,
2216
2323
  DialogTrigger as SheetTriggerPrimitive,
2217
2324
  Text as Text4
2218
2325
  } from "react-aria-components";
2219
- import { jsx as jsx39, jsxs as jsxs18 } from "react/jsx-runtime";
2326
+ import { jsx as jsx41, jsxs as jsxs21 } from "react/jsx-runtime";
2220
2327
  function SheetTrigger({ ...props }) {
2221
- return /* @__PURE__ */ jsx39(SheetTriggerPrimitive, { "data-slot": "sheet-trigger", ...props });
2328
+ return /* @__PURE__ */ jsx41(SheetTriggerPrimitive, { "data-slot": "sheet-trigger", ...props });
2222
2329
  }
2223
2330
  function SheetClose({ className, variant = "outline", size = "default", ...props }) {
2224
- return /* @__PURE__ */ jsx39(
2331
+ return /* @__PURE__ */ jsx41(
2225
2332
  Button,
2226
2333
  {
2227
2334
  slot: "close",
@@ -2238,7 +2345,7 @@ function SheetOverlay({
2238
2345
  children,
2239
2346
  ...props
2240
2347
  }) {
2241
- return /* @__PURE__ */ jsx39(
2348
+ return /* @__PURE__ */ jsx41(
2242
2349
  ModalOverlayPrimitive,
2243
2350
  {
2244
2351
  "data-slot": "sheet-overlay",
@@ -2259,7 +2366,7 @@ function Sheet({
2259
2366
  showCloseButton = true,
2260
2367
  ...props
2261
2368
  }) {
2262
- return /* @__PURE__ */ jsx39(SheetOverlay, { ...props, children: /* @__PURE__ */ jsx39(
2369
+ return /* @__PURE__ */ jsx41(SheetOverlay, { ...props, children: /* @__PURE__ */ jsx41(
2263
2370
  ModalPrimitive,
2264
2371
  {
2265
2372
  "data-slot": "sheet-content",
@@ -2268,16 +2375,16 @@ function Sheet({
2268
2375
  "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",
2269
2376
  className
2270
2377
  ),
2271
- children: /* @__PURE__ */ jsxs18(
2378
+ children: /* @__PURE__ */ jsxs21(
2272
2379
  SheetPrimitive,
2273
2380
  {
2274
2381
  "data-slot": "sheet",
2275
2382
  className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
2276
2383
  children: [
2277
2384
  children,
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" })
2385
+ showCloseButton && /* @__PURE__ */ jsxs21(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2386
+ /* @__PURE__ */ jsx41(XIcon2, {}),
2387
+ /* @__PURE__ */ jsx41("span", { className: "sr-only", children: "Cerrar" })
2281
2388
  ] })
2282
2389
  ]
2283
2390
  }
@@ -2292,10 +2399,10 @@ function SheetContent({
2292
2399
  showCloseButton = true,
2293
2400
  ...props
2294
2401
  }) {
2295
- return /* @__PURE__ */ jsx39(Sheet, { className, side, showCloseButton, ...props, children });
2402
+ return /* @__PURE__ */ jsx41(Sheet, { className, side, showCloseButton, ...props, children });
2296
2403
  }
2297
2404
  function SheetHeader({ className, ...props }) {
2298
- return /* @__PURE__ */ jsx39(
2405
+ return /* @__PURE__ */ jsx41(
2299
2406
  "div",
2300
2407
  {
2301
2408
  "data-slot": "sheet-header",
@@ -2305,7 +2412,7 @@ function SheetHeader({ className, ...props }) {
2305
2412
  );
2306
2413
  }
2307
2414
  function SheetFooter({ className, ...props }) {
2308
- return /* @__PURE__ */ jsx39(
2415
+ return /* @__PURE__ */ jsx41(
2309
2416
  "div",
2310
2417
  {
2311
2418
  "data-slot": "sheet-footer",
@@ -2315,8 +2422,8 @@ function SheetFooter({ className, ...props }) {
2315
2422
  );
2316
2423
  }
2317
2424
  function SheetTitle({ className, ...props }) {
2318
- return /* @__PURE__ */ jsx39(
2319
- Heading3,
2425
+ return /* @__PURE__ */ jsx41(
2426
+ Heading4,
2320
2427
  {
2321
2428
  slot: "title",
2322
2429
  "data-slot": "sheet-title",
@@ -2329,7 +2436,7 @@ function SheetDescription({
2329
2436
  className,
2330
2437
  ...props
2331
2438
  }) {
2332
- return /* @__PURE__ */ jsx39(
2439
+ return /* @__PURE__ */ jsx41(
2333
2440
  Text4,
2334
2441
  {
2335
2442
  slot: "description",
@@ -2351,10 +2458,10 @@ import {
2351
2458
  createContext as createContext3,
2352
2459
  useContext as useContext3,
2353
2460
  useMemo as useMemo2,
2354
- useState as useState9
2461
+ useState as useState10
2355
2462
  } from "react";
2356
2463
  import { Link as Link3 } from "react-aria-components";
2357
- import { Fragment as Fragment9, jsx as jsx40, jsxs as jsxs19 } from "react/jsx-runtime";
2464
+ import { Fragment as Fragment10, jsx as jsx42, jsxs as jsxs22 } from "react/jsx-runtime";
2358
2465
  var SidebarContext = createContext3(null);
2359
2466
  function useSidebar() {
2360
2467
  const context = useContext3(SidebarContext);
@@ -2366,7 +2473,7 @@ function SidebarProvider({
2366
2473
  defaultCollapsed = false,
2367
2474
  children
2368
2475
  }) {
2369
- const [collapsed, setCollapsed] = useState9(defaultCollapsed);
2476
+ const [collapsed, setCollapsed] = useState10(defaultCollapsed);
2370
2477
  const value = useMemo2(
2371
2478
  () => ({
2372
2479
  collapsed,
@@ -2375,14 +2482,14 @@ function SidebarProvider({
2375
2482
  }),
2376
2483
  [collapsed]
2377
2484
  );
2378
- return /* @__PURE__ */ jsx40(SidebarContext.Provider, { value, children });
2485
+ return /* @__PURE__ */ jsx42(SidebarContext.Provider, { value, children });
2379
2486
  }
2380
2487
  function Sidebar({
2381
2488
  className,
2382
2489
  ...props
2383
2490
  }) {
2384
2491
  const { collapsed } = useSidebar();
2385
- return /* @__PURE__ */ jsx40(
2492
+ return /* @__PURE__ */ jsx42(
2386
2493
  "aside",
2387
2494
  {
2388
2495
  "data-slot": "sidebar",
@@ -2399,7 +2506,7 @@ function SidebarHeader({
2399
2506
  className,
2400
2507
  ...props
2401
2508
  }) {
2402
- return /* @__PURE__ */ jsx40(
2509
+ return /* @__PURE__ */ jsx42(
2403
2510
  "div",
2404
2511
  {
2405
2512
  "data-slot": "sidebar-header",
@@ -2414,7 +2521,7 @@ function SidebarSearch({
2414
2521
  className,
2415
2522
  ...props
2416
2523
  }) {
2417
- return /* @__PURE__ */ jsxs19(
2524
+ return /* @__PURE__ */ jsxs22(
2418
2525
  "button",
2419
2526
  {
2420
2527
  type: "button",
@@ -2425,9 +2532,9 @@ function SidebarSearch({
2425
2532
  ),
2426
2533
  ...props,
2427
2534
  children: [
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 })
2535
+ /* @__PURE__ */ jsx42(Search, { className: "size-4 shrink-0" }),
2536
+ /* @__PURE__ */ jsx42("span", { className: "flex-1 text-left", children: label }),
2537
+ /* @__PURE__ */ jsx42("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
2431
2538
  ]
2432
2539
  }
2433
2540
  );
@@ -2436,7 +2543,7 @@ function SidebarContent({
2436
2543
  className,
2437
2544
  ...props
2438
2545
  }) {
2439
- return /* @__PURE__ */ jsx40(
2546
+ return /* @__PURE__ */ jsx42(
2440
2547
  "nav",
2441
2548
  {
2442
2549
  "data-slot": "sidebar-content",
@@ -2450,7 +2557,7 @@ function SidebarFooter({
2450
2557
  className,
2451
2558
  ...props
2452
2559
  }) {
2453
- return /* @__PURE__ */ jsx40(
2560
+ return /* @__PURE__ */ jsx42(
2454
2561
  "div",
2455
2562
  {
2456
2563
  "data-slot": "sidebar-footer",
@@ -2469,14 +2576,14 @@ function SidebarGroup({
2469
2576
  ...props
2470
2577
  }) {
2471
2578
  const { collapsed } = useSidebar();
2472
- return /* @__PURE__ */ jsxs19(
2579
+ return /* @__PURE__ */ jsxs22(
2473
2580
  "section",
2474
2581
  {
2475
2582
  "data-slot": "sidebar-group",
2476
2583
  className: cn("mb-4 last:mb-0", className),
2477
2584
  ...props,
2478
2585
  children: [
2479
- label && /* @__PURE__ */ jsx40(
2586
+ label && /* @__PURE__ */ jsx42(
2480
2587
  "h2",
2481
2588
  {
2482
2589
  className: cn(
@@ -2502,7 +2609,7 @@ function SidebarItem({
2502
2609
  }) {
2503
2610
  const { collapsed } = useSidebar();
2504
2611
  const content = typeof children === "function" ? label : children ?? label;
2505
- return /* @__PURE__ */ jsx40(
2612
+ return /* @__PURE__ */ jsx42(
2506
2613
  Link3,
2507
2614
  {
2508
2615
  "data-slot": "sidebar-item",
@@ -2514,16 +2621,16 @@ function SidebarItem({
2514
2621
  typeof className === "function" ? className : className
2515
2622
  ),
2516
2623
  ...props,
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(
2624
+ children: (values) => /* @__PURE__ */ jsxs22(Fragment10, { children: [
2625
+ /* @__PURE__ */ jsx42("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
2626
+ /* @__PURE__ */ jsx42(
2520
2627
  "span",
2521
2628
  {
2522
2629
  className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"),
2523
2630
  children: typeof children === "function" ? children(values) : content
2524
2631
  }
2525
2632
  ),
2526
- badge && !collapsed && /* @__PURE__ */ jsx40("span", { className: "text-xs text-muted-foreground", children: badge })
2633
+ badge && !collapsed && /* @__PURE__ */ jsx42("span", { className: "text-xs text-muted-foreground", children: badge })
2527
2634
  ] })
2528
2635
  }
2529
2636
  );
@@ -2532,7 +2639,7 @@ function SidebarSeparator({
2532
2639
  className,
2533
2640
  ...props
2534
2641
  }) {
2535
- return /* @__PURE__ */ jsx40(
2642
+ return /* @__PURE__ */ jsx42(
2536
2643
  "hr",
2537
2644
  {
2538
2645
  "data-slot": "sidebar-separator",
@@ -2543,7 +2650,7 @@ function SidebarSeparator({
2543
2650
  }
2544
2651
  function SidebarTrigger({ className, ...props }) {
2545
2652
  const { collapsed, toggle } = useSidebar();
2546
- return /* @__PURE__ */ jsx40(
2653
+ return /* @__PURE__ */ jsx42(
2547
2654
  Button,
2548
2655
  {
2549
2656
  "aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
@@ -2552,7 +2659,7 @@ function SidebarTrigger({ className, ...props }) {
2552
2659
  variant: "ghost",
2553
2660
  className: cn("ml-auto", className),
2554
2661
  ...props,
2555
- children: collapsed ? /* @__PURE__ */ jsx40(ChevronRight2, {}) : /* @__PURE__ */ jsx40(ChevronLeft2, {})
2662
+ children: collapsed ? /* @__PURE__ */ jsx42(ChevronRight2, {}) : /* @__PURE__ */ jsx42(ChevronLeft2, {})
2556
2663
  }
2557
2664
  );
2558
2665
  }
@@ -2561,7 +2668,7 @@ function SidebarRail({
2561
2668
  ...props
2562
2669
  }) {
2563
2670
  const { toggle } = useSidebar();
2564
- return /* @__PURE__ */ jsx40(
2671
+ return /* @__PURE__ */ jsx42(
2565
2672
  "button",
2566
2673
  {
2567
2674
  type: "button",
@@ -2576,7 +2683,7 @@ function SidebarRail({
2576
2683
  );
2577
2684
  }
2578
2685
  function SidebarMore({ className, ...props }) {
2579
- return /* @__PURE__ */ jsx40(
2686
+ return /* @__PURE__ */ jsx42(
2580
2687
  Button,
2581
2688
  {
2582
2689
  "aria-label": "M\xE1s opciones",
@@ -2584,26 +2691,26 @@ function SidebarMore({ className, ...props }) {
2584
2691
  variant: "ghost",
2585
2692
  className: cn("size-7", className),
2586
2693
  ...props,
2587
- children: /* @__PURE__ */ jsx40(Ellipsis, {})
2694
+ children: /* @__PURE__ */ jsx42(Ellipsis, {})
2588
2695
  }
2589
2696
  );
2590
2697
  }
2591
2698
 
2592
2699
  // src/ui/skeleton/skeleton.tsx
2593
- import { jsx as jsx41 } from "react/jsx-runtime";
2700
+ import { jsx as jsx43 } from "react/jsx-runtime";
2594
2701
  function Skeleton({ className, ...props }) {
2595
- return /* @__PURE__ */ jsx41("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
2702
+ return /* @__PURE__ */ jsx43("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
2596
2703
  }
2597
2704
 
2598
2705
  // src/ui/submit-button/submit-button.tsx
2599
2706
  import { useFormStatus } from "react-dom";
2600
2707
  import { LoaderCircle as LoaderCircle3 } from "lucide-react";
2601
- import { Fragment as Fragment10, jsx as jsx42, jsxs as jsxs20 } from "react/jsx-runtime";
2708
+ import { Fragment as Fragment11, jsx as jsx44, jsxs as jsxs23 } from "react/jsx-runtime";
2602
2709
  function SubmitButton({ pendingLabel = "Guardando\u2026", loading = false, children, isDisabled, size = "sm", ...props }) {
2603
2710
  const { pending } = useFormStatus();
2604
2711
  const busy = pending || loading;
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" }),
2712
+ return /* @__PURE__ */ jsx44(Button, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ jsxs23(Fragment11, { children: [
2713
+ /* @__PURE__ */ jsx44(LoaderCircle3, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
2607
2714
  pendingLabel
2608
2715
  ] }) : children });
2609
2716
  }
@@ -2613,7 +2720,7 @@ import { useEffect as useEffect5, useRef as useRef5 } from "react";
2613
2720
  import {
2614
2721
  Switch as AriaSwitch
2615
2722
  } from "react-aria-components";
2616
- import { Fragment as Fragment11, jsx as jsx43, jsxs as jsxs21 } from "react/jsx-runtime";
2723
+ import { Fragment as Fragment12, jsx as jsx45, jsxs as jsxs24 } from "react/jsx-runtime";
2617
2724
  var switchSizes = {
2618
2725
  sm: {
2619
2726
  control: "h-4 w-[1.875rem] p-0.5",
@@ -2669,7 +2776,7 @@ function Switch({
2669
2776
  ownerDocument.addEventListener("keydown", handleDirectionalKey);
2670
2777
  return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
2671
2778
  }, [isDisabled, isReadOnly, resolvedInputRef]);
2672
- return /* @__PURE__ */ jsx43(
2779
+ return /* @__PURE__ */ jsx45(
2673
2780
  AriaSwitch,
2674
2781
  {
2675
2782
  "data-slot": "switch",
@@ -2686,8 +2793,8 @@ function Switch({
2686
2793
  children: (state) => {
2687
2794
  const isThumbActive = state.isHovered || state.isPressed;
2688
2795
  const thumbOffset = state.isSelected ? isThumbActive ? styles.activeSelectedOffset : styles.selectedOffset : "0";
2689
- return /* @__PURE__ */ jsxs21(Fragment11, { children: [
2690
- /* @__PURE__ */ jsx43(
2796
+ return /* @__PURE__ */ jsxs24(Fragment12, { children: [
2797
+ /* @__PURE__ */ jsx45(
2691
2798
  "span",
2692
2799
  {
2693
2800
  "aria-hidden": "true",
@@ -2701,7 +2808,7 @@ function Switch({
2701
2808
  "group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
2702
2809
  styles.control
2703
2810
  ),
2704
- children: /* @__PURE__ */ jsx43(
2811
+ children: /* @__PURE__ */ jsx45(
2705
2812
  "span",
2706
2813
  {
2707
2814
  "data-slot": "switch-thumb",
@@ -2721,9 +2828,9 @@ function Switch({
2721
2828
  )
2722
2829
  }
2723
2830
  ),
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
2831
+ children || description ? /* @__PURE__ */ jsxs24("span", { className: "grid gap-0.5 leading-tight", children: [
2832
+ children ? /* @__PURE__ */ jsx45("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
2833
+ description ? /* @__PURE__ */ jsx45("span", { "data-slot": "switch-description", className: "text-xs font-normal text-muted-foreground", children: description }) : null
2727
2834
  ] }) : null
2728
2835
  ] });
2729
2836
  }
@@ -2732,9 +2839,9 @@ function Switch({
2732
2839
  }
2733
2840
 
2734
2841
  // src/ui/table/table.tsx
2735
- import { jsx as jsx44 } from "react/jsx-runtime";
2842
+ import { jsx as jsx46 } from "react/jsx-runtime";
2736
2843
  function Table({ className, ...props }) {
2737
- return /* @__PURE__ */ jsx44("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ jsx44(
2844
+ return /* @__PURE__ */ jsx46("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ jsx46(
2738
2845
  "table",
2739
2846
  {
2740
2847
  "data-slot": "table",
@@ -2744,10 +2851,10 @@ function Table({ className, ...props }) {
2744
2851
  ) });
2745
2852
  }
2746
2853
  function TableHeader({ className, ...props }) {
2747
- return /* @__PURE__ */ jsx44("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
2854
+ return /* @__PURE__ */ jsx46("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
2748
2855
  }
2749
2856
  function TableBody({ className, ...props }) {
2750
- return /* @__PURE__ */ jsx44(
2857
+ return /* @__PURE__ */ jsx46(
2751
2858
  "tbody",
2752
2859
  {
2753
2860
  "data-slot": "table-body",
@@ -2757,7 +2864,7 @@ function TableBody({ className, ...props }) {
2757
2864
  );
2758
2865
  }
2759
2866
  function TableRow({ className, ...props }) {
2760
- return /* @__PURE__ */ jsx44(
2867
+ return /* @__PURE__ */ jsx46(
2761
2868
  "tr",
2762
2869
  {
2763
2870
  "data-slot": "table-row",
@@ -2770,7 +2877,7 @@ function TableRow({ className, ...props }) {
2770
2877
  );
2771
2878
  }
2772
2879
  function TableHead({ className, ...props }) {
2773
- return /* @__PURE__ */ jsx44(
2880
+ return /* @__PURE__ */ jsx46(
2774
2881
  "th",
2775
2882
  {
2776
2883
  "data-slot": "table-head",
@@ -2783,7 +2890,7 @@ function TableHead({ className, ...props }) {
2783
2890
  );
2784
2891
  }
2785
2892
  function TableCell({ className, ...props }) {
2786
- return /* @__PURE__ */ jsx44(
2893
+ return /* @__PURE__ */ jsx46(
2787
2894
  "td",
2788
2895
  {
2789
2896
  "data-slot": "table-cell",
@@ -2793,7 +2900,7 @@ function TableCell({ className, ...props }) {
2793
2900
  );
2794
2901
  }
2795
2902
  function TableCaption({ className, ...props }) {
2796
- return /* @__PURE__ */ jsx44(
2903
+ return /* @__PURE__ */ jsx46(
2797
2904
  "caption",
2798
2905
  {
2799
2906
  "data-slot": "table-caption",
@@ -2803,7 +2910,7 @@ function TableCaption({ className, ...props }) {
2803
2910
  );
2804
2911
  }
2805
2912
  function TableFooter({ className, ...props }) {
2806
- return /* @__PURE__ */ jsx44(
2913
+ return /* @__PURE__ */ jsx46(
2807
2914
  "tfoot",
2808
2915
  {
2809
2916
  "data-slot": "table-footer",
@@ -2822,27 +2929,27 @@ import {
2822
2929
  Tabs as AriaTabs,
2823
2930
  composeRenderProps as composeRenderProps2
2824
2931
  } from "react-aria-components";
2825
- import { jsx as jsx45 } from "react/jsx-runtime";
2932
+ import { jsx as jsx47 } from "react/jsx-runtime";
2826
2933
  function Tabs({ className, ...props }) {
2827
- return /* @__PURE__ */ jsx45(AriaTabs, { "data-slot": "tabs", className: composeRenderProps2(className, (value) => cn("flex flex-col gap-2", value)), ...props });
2934
+ return /* @__PURE__ */ jsx47(AriaTabs, { "data-slot": "tabs", className: composeRenderProps2(className, (value) => cn("flex flex-col gap-2", value)), ...props });
2828
2935
  }
2829
2936
  function TabsList({ className, ...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 });
2937
+ return /* @__PURE__ */ jsx47(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 });
2831
2938
  }
2832
2939
  function TabsTrigger({ className, ...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 });
2940
+ return /* @__PURE__ */ jsx47(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 });
2834
2941
  }
2835
2942
  function TabsPanels({ className, ...props }) {
2836
- return /* @__PURE__ */ jsx45(AriaTabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
2943
+ return /* @__PURE__ */ jsx47(AriaTabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
2837
2944
  }
2838
2945
  function TabsContent({ className, ...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 });
2946
+ return /* @__PURE__ */ jsx47(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 });
2840
2947
  }
2841
2948
 
2842
2949
  // src/ui/toast/toast.tsx
2843
2950
  import { useEffect as useEffect6 } from "react";
2844
2951
  import { sileo, Toaster as SileoToaster } from "sileo";
2845
- import { Fragment as Fragment12, jsx as jsx46, jsxs as jsxs22 } from "react/jsx-runtime";
2952
+ import { Fragment as Fragment13, jsx as jsx48, jsxs as jsxs25 } from "react/jsx-runtime";
2846
2953
  function toSileoOptions({ title, description, duration, position, action }) {
2847
2954
  return {
2848
2955
  title,
@@ -2881,18 +2988,18 @@ function useToast() {
2881
2988
  return toast;
2882
2989
  }
2883
2990
  function ToastProvider({ children }) {
2884
- return /* @__PURE__ */ jsxs22(Fragment12, { children: [
2991
+ return /* @__PURE__ */ jsxs25(Fragment13, { children: [
2885
2992
  children,
2886
- /* @__PURE__ */ jsx46(Toaster, {})
2993
+ /* @__PURE__ */ jsx48(Toaster, {})
2887
2994
  ] });
2888
2995
  }
2889
2996
  function Toaster({ position }) {
2890
- return /* @__PURE__ */ jsx46(SileoToaster, { position, options: { fill: "var(--ui-secondary)" } });
2997
+ return /* @__PURE__ */ jsx48(SileoToaster, { position, options: { fill: "var(--ui-secondary)" } });
2891
2998
  }
2892
2999
  function ToastViewport({ position, visiblePosition, className }) {
2893
3000
  void className;
2894
3001
  if (visiblePosition && visiblePosition !== position) return null;
2895
- return /* @__PURE__ */ jsx46(Toaster, { position });
3002
+ return /* @__PURE__ */ jsx48(Toaster, { position });
2896
3003
  }
2897
3004
  function Toast({ id, title, description, variant = "default", action, state = "open", duration = 0, position, onDismiss }) {
2898
3005
  useEffect6(() => {
@@ -2907,15 +3014,15 @@ function Toast({ id, title, description, variant = "default", action, state = "o
2907
3014
  }
2908
3015
 
2909
3016
  // src/ui/toolbar/toolbar.tsx
2910
- import { jsx as jsx47 } from "react/jsx-runtime";
3017
+ import { jsx as jsx49 } from "react/jsx-runtime";
2911
3018
  function Toolbar({ className, ...props }) {
2912
- return /* @__PURE__ */ jsx47("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
3019
+ return /* @__PURE__ */ jsx49("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
2913
3020
  }
2914
3021
  function ToolbarGroup({ className, ...props }) {
2915
- return /* @__PURE__ */ jsx47("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
3022
+ return /* @__PURE__ */ jsx49("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
2916
3023
  }
2917
3024
  function ToolbarSpacer({ className, ...props }) {
2918
- return /* @__PURE__ */ jsx47("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
3025
+ return /* @__PURE__ */ jsx49("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
2919
3026
  }
2920
3027
  export {
2921
3028
  Accordion,
@@ -2970,6 +3077,7 @@ export {
2970
3077
  CommandItem,
2971
3078
  CommandList,
2972
3079
  ConfirmDialog,
3080
+ DangerZone,
2973
3081
  Dialog,
2974
3082
  DialogClose,
2975
3083
  DialogContent,
@@ -2980,6 +3088,7 @@ export {
2980
3088
  DialogPortal,
2981
3089
  DialogTitle,
2982
3090
  DialogTrigger,
3091
+ DocPreview,
2983
3092
  Drawer,
2984
3093
  DrawerDescription,
2985
3094
  DrawerFooter,