@doscientos/ui 0.1.32 → 0.1.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -314,6 +314,7 @@ function useAsyncAction(action) {
314
314
  pendingRef.current = true;
315
315
  setStatus("pending");
316
316
  setError(null);
317
+ setData(null);
317
318
  try {
318
319
  const result = await action(...args);
319
320
  setData(result);
@@ -330,6 +331,7 @@ function useAsyncAction(action) {
330
331
  [action]
331
332
  );
332
333
  const reset = (0, import_react.useCallback)(() => {
334
+ if (pendingRef.current) return;
333
335
  setData(null);
334
336
  setError(null);
335
337
  setStatus("idle");
@@ -352,24 +354,45 @@ function useAutosave({
352
354
  const saveRef = (0, import_react2.useRef)(onSave);
353
355
  const serializeRef = (0, import_react2.useRef)(serialize);
354
356
  const latestSaveId = (0, import_react2.useRef)(0);
357
+ const queue = (0, import_react2.useRef)(Promise.resolve());
358
+ const queuedCount = (0, import_react2.useRef)(0);
359
+ const timeoutRef = (0, import_react2.useRef)(void 0);
360
+ const mounted = (0, import_react2.useRef)(true);
361
+ (0, import_react2.useEffect)(() => {
362
+ mounted.current = true;
363
+ return () => {
364
+ mounted.current = false;
365
+ clearTimeout(timeoutRef.current);
366
+ };
367
+ }, []);
355
368
  (0, import_react2.useEffect)(() => {
356
369
  saveRef.current = onSave;
357
370
  serializeRef.current = serialize;
358
371
  }, [onSave, serialize]);
359
- const save = (0, import_react2.useCallback)(async (value) => {
372
+ const save = (0, import_react2.useCallback)((value, force = false) => {
373
+ clearTimeout(timeoutRef.current);
360
374
  const saveId = ++latestSaveId.current;
375
+ const snapshot = serializeRef.current(value);
376
+ const write = saveRef.current;
377
+ queuedCount.current += 1;
361
378
  setStatus("saving");
362
379
  setError(null);
363
- try {
364
- await saveRef.current(value);
365
- if (saveId !== latestSaveId.current) return;
366
- lastSaved.current = serializeRef.current(value);
367
- setStatus("saved");
368
- } catch (cause) {
369
- if (saveId !== latestSaveId.current) return;
370
- setError(cause instanceof Error ? cause : new Error("No se pudo guardar."));
371
- setStatus("error");
372
- }
380
+ const pending = queue.current.then(async () => {
381
+ try {
382
+ if (!mounted.current) return;
383
+ if (force || lastSaved.current !== snapshot) await write(value);
384
+ lastSaved.current = snapshot;
385
+ if (mounted.current && saveId === latestSaveId.current) setStatus("saved");
386
+ } catch (cause) {
387
+ if (!mounted.current || saveId !== latestSaveId.current) return;
388
+ setError(cause instanceof Error ? cause : new Error("No se pudo guardar."));
389
+ setStatus("error");
390
+ } finally {
391
+ queuedCount.current -= 1;
392
+ }
393
+ });
394
+ queue.current = pending;
395
+ return pending;
373
396
  }, []);
374
397
  (0, import_react2.useEffect)(() => {
375
398
  if (!enabled) return;
@@ -378,11 +401,11 @@ function useAutosave({
378
401
  lastSaved.current = snapshot;
379
402
  return;
380
403
  }
381
- if (snapshot === lastSaved.current) return;
382
- const timeout = window.setTimeout(() => void save(data), debounceMs);
383
- return () => window.clearTimeout(timeout);
404
+ if (snapshot === lastSaved.current && queuedCount.current === 0) return;
405
+ timeoutRef.current = setTimeout(() => void save(data), debounceMs);
406
+ return () => clearTimeout(timeoutRef.current);
384
407
  }, [data, debounceMs, enabled, save]);
385
- return { status, error, saveNow: () => save(data) };
408
+ return { status, error, saveNow: () => save(data, true) };
386
409
  }
387
410
 
388
411
  // src/hooks/use-clipboard.ts
@@ -1783,10 +1806,10 @@ function ComboboxContent({ className, ...props }) {
1783
1806
  import_react_aria_components9.Popover,
1784
1807
  {
1785
1808
  "data-slot": "combobox-content",
1786
- className: cn(
1809
+ className: (state) => cn(
1787
1810
  floatingSurfaceClassName,
1788
1811
  "max-h-72 w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground",
1789
- className
1812
+ typeof className === "function" ? className(state) : className
1790
1813
  ),
1791
1814
  ...props
1792
1815
  }
@@ -1801,7 +1824,10 @@ function ComboboxList({
1801
1824
  import_react_aria_components9.ListBox,
1802
1825
  {
1803
1826
  "data-slot": "combobox-list",
1804
- className: cn("max-h-64 overflow-y-auto", className),
1827
+ className: (state) => cn(
1828
+ "max-h-64 overflow-y-auto",
1829
+ typeof className === "function" ? className(state) : className
1830
+ ),
1805
1831
  renderEmptyState: emptyState ? () => emptyState : void 0,
1806
1832
  ...props
1807
1833
  }
@@ -1816,9 +1842,9 @@ function ComboboxItem({
1816
1842
  import_react_aria_components9.ListBoxItem,
1817
1843
  {
1818
1844
  "data-slot": "combobox-item",
1819
- className: cn(
1845
+ className: (state) => cn(
1820
1846
  "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",
1821
- className
1847
+ typeof className === "function" ? className(state) : className
1822
1848
  ),
1823
1849
  ...props,
1824
1850
  children
@@ -1893,7 +1919,10 @@ function AutocompleteCombobox({
1893
1919
  import_react_aria_components9.ComboBox,
1894
1920
  {
1895
1921
  ...props,
1896
- className: cn("group/combobox flex w-full flex-col gap-1.5", className),
1922
+ className: (state) => cn(
1923
+ "group/combobox flex w-full flex-col gap-1.5",
1924
+ typeof className === "function" ? className(state) : className
1925
+ ),
1897
1926
  items: filteredItems,
1898
1927
  selectedKey,
1899
1928
  inputValue,
@@ -1997,15 +2026,197 @@ function CommandItem({ className, ...props }) {
1997
2026
  );
1998
2027
  }
1999
2028
 
2000
- // src/ui/sheet/sheet.tsx
2029
+ // src/ui/confirm-dialog/confirm-dialog.tsx
2030
+ var import_jsx_runtime17 = require("react/jsx-runtime");
2031
+ function ConfirmDialog({
2032
+ open,
2033
+ onOpenChange,
2034
+ title,
2035
+ description,
2036
+ confirmLabel = "Confirmar",
2037
+ cancelLabel = "Cancelar",
2038
+ destructive = false,
2039
+ pending = false,
2040
+ onConfirm
2041
+ }) {
2042
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2043
+ AlertDialog,
2044
+ {
2045
+ open,
2046
+ onOpenChange: (nextOpen) => {
2047
+ if (!pending || nextOpen) onOpenChange(nextOpen);
2048
+ },
2049
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogContent, { children: [
2050
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogHeader, { children: [
2051
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialogTitle, { children: title }),
2052
+ description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialogDescription, { children: description }) : null
2053
+ ] }),
2054
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogFooter, { children: [
2055
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
2056
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2057
+ Button,
2058
+ {
2059
+ variant: destructive ? "destructive" : "default",
2060
+ isDisabled: pending,
2061
+ onPress: onConfirm,
2062
+ children: confirmLabel
2063
+ }
2064
+ )
2065
+ ] })
2066
+ ] })
2067
+ }
2068
+ );
2069
+ }
2070
+
2071
+ // src/ui/copy-button/copy-button.tsx
2001
2072
  var import_lucide_react4 = require("lucide-react");
2073
+ var import_jsx_runtime18 = require("react/jsx-runtime");
2074
+ function CopyButton({
2075
+ value,
2076
+ children,
2077
+ copiedLabel = "Copiado",
2078
+ resetMs,
2079
+ onCopied,
2080
+ onCopyError,
2081
+ ...props
2082
+ }) {
2083
+ const { copy, status } = useClipboard({ resetMs, onError: onCopyError });
2084
+ const copied = status === "copied";
2085
+ const label = copied ? copiedLabel : children ?? "Copiar";
2086
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2087
+ Button,
2088
+ {
2089
+ "aria-label": typeof label === "string" ? label : void 0,
2090
+ onPress: () => {
2091
+ void copy(value).then((wasCopied) => {
2092
+ if (wasCopied) onCopied?.(value);
2093
+ });
2094
+ },
2095
+ ...props,
2096
+ children: [
2097
+ copied ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.Check, { "aria-hidden": "true", className: "size-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.Copy, { "aria-hidden": "true", className: "size-3.5" }),
2098
+ label
2099
+ ]
2100
+ }
2101
+ );
2102
+ }
2103
+
2104
+ // src/ui/danger-zone/danger-zone.tsx
2105
+ var import_lucide_react5 = require("lucide-react");
2002
2106
  var import_react_aria_components11 = require("react-aria-components");
2003
- var import_jsx_runtime17 = require("react/jsx-runtime");
2107
+ var import_jsx_runtime19 = require("react/jsx-runtime");
2108
+ function DangerZone({
2109
+ title = "Zona de peligro",
2110
+ description = "Acciones irreversibles. \xC1brela solo si est\xE1s seguro.",
2111
+ defaultOpen = false,
2112
+ className,
2113
+ children
2114
+ }) {
2115
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components11.Disclosure, { defaultExpanded: defaultOpen, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Card, { className: cn("border-destructive/30", className), children: [
2116
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components11.Heading, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2117
+ import_react_aria_components11.Button,
2118
+ {
2119
+ slot: "trigger",
2120
+ "data-slot": "danger-zone-trigger",
2121
+ className: "group/danger focus-visible:ring-ring/50 flex w-full items-center gap-3 px-4 text-left outline-none focus-visible:ring-3",
2122
+ children: [
2123
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.ShieldAlert, { className: "text-destructive size-4 shrink-0" }),
2124
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "flex flex-1 flex-col gap-0.5", children: [
2125
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "font-heading text-destructive text-base leading-snug font-medium", children: title }),
2126
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-muted-foreground text-xs", children: description })
2127
+ ] }),
2128
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.ChevronDown, { className: "text-muted-foreground size-4 shrink-0 transition-transform group-aria-expanded/danger:rotate-180" })
2129
+ ]
2130
+ }
2131
+ ) }),
2132
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components11.DisclosurePanel, { "data-slot": "danger-zone-content", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CardContent, { children }) })
2133
+ ] }) });
2134
+ }
2135
+
2136
+ // src/ui/data-view-state/data-view-state.tsx
2137
+ var import_jsx_runtime20 = require("react/jsx-runtime");
2138
+ function DataViewState({ className, ...props }) {
2139
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2140
+ "section",
2141
+ {
2142
+ "data-slot": "data-view-state",
2143
+ className: cn(
2144
+ "flex min-h-40 flex-col items-center justify-center gap-3 rounded-xl border p-6 text-center",
2145
+ className
2146
+ ),
2147
+ ...props
2148
+ }
2149
+ );
2150
+ }
2151
+ function DataViewStateTitle({ children, className, ...props }) {
2152
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h2", { "data-slot": "data-view-state-title", className: cn("font-semibold", className), ...props, children });
2153
+ }
2154
+ function DataViewStateDescription({ className, ...props }) {
2155
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2156
+ "p",
2157
+ {
2158
+ "data-slot": "data-view-state-description",
2159
+ className: cn("text-sm text-muted-foreground", className),
2160
+ ...props
2161
+ }
2162
+ );
2163
+ }
2164
+ function DataViewStateActions({ className, ...props }) {
2165
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2166
+ "div",
2167
+ {
2168
+ "data-slot": "data-view-state-actions",
2169
+ className: cn("flex items-center gap-2", className),
2170
+ ...props
2171
+ }
2172
+ );
2173
+ }
2174
+
2175
+ // src/ui/description-list/description-list.tsx
2176
+ var import_jsx_runtime21 = require("react/jsx-runtime");
2177
+ function DescriptionList({ className, ...props }) {
2178
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2179
+ "dl",
2180
+ {
2181
+ "data-slot": "description-list",
2182
+ className: cn("grid gap-x-6 gap-y-4 sm:grid-cols-2", className),
2183
+ ...props
2184
+ }
2185
+ );
2186
+ }
2187
+ function DescriptionItem({ className, ...props }) {
2188
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "data-slot": "description-item", className: cn("min-w-0", className), ...props });
2189
+ }
2190
+ function DescriptionTerm({ className, ...props }) {
2191
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2192
+ "dt",
2193
+ {
2194
+ "data-slot": "description-term",
2195
+ className: cn("text-xs font-medium text-muted-foreground", className),
2196
+ ...props
2197
+ }
2198
+ );
2199
+ }
2200
+ function DescriptionDetails({ className, ...props }) {
2201
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2202
+ "dd",
2203
+ {
2204
+ "data-slot": "description-details",
2205
+ className: cn("mt-1 wrap-break-word text-sm", className),
2206
+ ...props
2207
+ }
2208
+ );
2209
+ }
2210
+
2211
+ // src/ui/drawer/drawer.tsx
2212
+ var import_lucide_react6 = require("lucide-react");
2213
+ var import_react_aria_components12 = require("react-aria-components");
2214
+ var import_jsx_runtime22 = require("react/jsx-runtime");
2004
2215
  function DrawerTrigger({ ...props }) {
2005
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.DialogTrigger, { "data-slot": "drawer-trigger", ...props });
2216
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components12.DialogTrigger, { "data-slot": "drawer-trigger", ...props });
2006
2217
  }
2007
2218
  function DrawerClose({ className, variant = "outline", size = "default", ...props }) {
2008
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2219
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2009
2220
  Button,
2010
2221
  {
2011
2222
  slot: "close",
@@ -2022,8 +2233,8 @@ function DrawerOverlay({
2022
2233
  children,
2023
2234
  ...props
2024
2235
  }) {
2025
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2026
- import_react_aria_components11.ModalOverlay,
2236
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2237
+ import_react_aria_components12.ModalOverlay,
2027
2238
  {
2028
2239
  "data-slot": "drawer-overlay",
2029
2240
  isDismissable: true,
@@ -2044,8 +2255,8 @@ function DrawerContent({
2044
2255
  showCloseButton = true,
2045
2256
  ...props
2046
2257
  }) {
2047
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DrawerOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2048
- import_react_aria_components11.Modal,
2258
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DrawerOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2259
+ import_react_aria_components12.Modal,
2049
2260
  {
2050
2261
  "data-slot": "drawer-content",
2051
2262
  "data-side": side,
@@ -2053,17 +2264,17 @@ function DrawerContent({
2053
2264
  "fixed z-50 flex max-h-svh flex-col gap-4 border-border bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg motion-safe:transition motion-safe:duration-200 motion-safe:ease-in-out motion-safe:data-entering:opacity-0 motion-safe:data-exiting:opacity-0 motion-reduce:transition-none data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:pb-[env(safe-area-inset-bottom)] motion-safe:data-[side=bottom]:data-entering:translate-y-10 motion-safe: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 motion-safe:data-[side=left]:data-entering:-translate-x-10 motion-safe: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 motion-safe:data-[side=right]:data-entering:translate-x-10 motion-safe: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]:pt-[env(safe-area-inset-top)] motion-safe:data-[side=top]:data-entering:-translate-y-10 motion-safe:data-[side=top]:data-exiting:-translate-y-10 data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",
2054
2265
  className
2055
2266
  ),
2056
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
2057
- import_react_aria_components11.Dialog,
2267
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2268
+ import_react_aria_components12.Dialog,
2058
2269
  {
2059
2270
  "data-slot": "drawer",
2060
2271
  className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
2061
2272
  ...dialogProps,
2062
2273
  children: [
2063
2274
  children,
2064
- showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DrawerClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2065
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.XIcon, {}),
2066
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "sr-only", children: "Cerrar" })
2275
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DrawerClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2276
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react6.XIcon, {}),
2277
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "sr-only", children: "Cerrar" })
2067
2278
  ] })
2068
2279
  ]
2069
2280
  }
@@ -2072,16 +2283,16 @@ function DrawerContent({
2072
2283
  ) });
2073
2284
  }
2074
2285
  function Drawer(props) {
2075
- if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DrawerContent, { ...props });
2286
+ if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DrawerContent, { ...props });
2076
2287
  const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
2077
- const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
2078
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(DrawerTrigger, { defaultOpen, isOpen, onOpenChange, children: [
2288
+ const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
2289
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DrawerTrigger, { defaultOpen, isOpen, onOpenChange, children: [
2079
2290
  triggerElement,
2080
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DrawerContent, { ...contentProps, children })
2291
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DrawerContent, { ...contentProps, children })
2081
2292
  ] });
2082
2293
  }
2083
2294
  function DrawerHeader({ className, ...props }) {
2084
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2295
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2085
2296
  "div",
2086
2297
  {
2087
2298
  "data-slot": "drawer-header",
@@ -2091,7 +2302,7 @@ function DrawerHeader({ className, ...props }) {
2091
2302
  );
2092
2303
  }
2093
2304
  function DrawerFooter({ className, ...props }) {
2094
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2305
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2095
2306
  "div",
2096
2307
  {
2097
2308
  "data-slot": "drawer-footer",
@@ -2101,8 +2312,8 @@ function DrawerFooter({ className, ...props }) {
2101
2312
  );
2102
2313
  }
2103
2314
  function DrawerTitle({ className, ...props }) {
2104
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2105
- import_react_aria_components11.Heading,
2315
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2316
+ import_react_aria_components12.Heading,
2106
2317
  {
2107
2318
  slot: "title",
2108
2319
  "data-slot": "drawer-title",
@@ -2115,8 +2326,8 @@ function DrawerDescription({
2115
2326
  className,
2116
2327
  ...props
2117
2328
  }) {
2118
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2119
- import_react_aria_components11.Text,
2329
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2330
+ import_react_aria_components12.Text,
2120
2331
  {
2121
2332
  slot: "description",
2122
2333
  "data-slot": "drawer-description",
@@ -2134,281 +2345,29 @@ var SheetHeader = DrawerHeader;
2134
2345
  var SheetTitle = DrawerTitle;
2135
2346
  var SheetTrigger = DrawerTrigger;
2136
2347
 
2137
- // src/ui/composition/composition.tsx
2138
- var import_jsx_runtime18 = require("react/jsx-runtime");
2139
- function FilterBar({ className, ...props }) {
2140
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2141
- "div",
2142
- {
2143
- "data-slot": "filter-bar",
2144
- className: cn("flex flex-wrap items-center gap-2", className),
2145
- ...props
2146
- }
2147
- );
2148
- }
2149
- function FilterGroup({ className, ...props }) {
2150
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2151
- "div",
2152
- {
2153
- "data-slot": "filter-group",
2154
- className: cn("flex flex-wrap items-center gap-2", className),
2155
- ...props
2156
- }
2157
- );
2158
- }
2159
- function ActiveFilters({ className, ...props }) {
2160
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2161
- "div",
2162
- {
2163
- "data-slot": "active-filters",
2164
- "aria-label": "Filtros activos",
2165
- className: cn("flex flex-wrap items-center gap-1.5", className),
2166
- ...props
2167
- }
2168
- );
2169
- }
2170
- function FilterChip({
2171
- children,
2172
- onRemove,
2173
- ...props
2174
- }) {
2175
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(Button, { size: "sm", variant: "outline", onPress: onRemove, ...props, children: [
2176
- children,
2177
- " \xD7"
2178
- ] });
2179
- }
2180
- function SelectionToolbar({
2181
- count,
2182
- className,
2183
- children,
2184
- ...props
2185
- }) {
2186
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2187
- "div",
2188
- {
2189
- "data-slot": "selection-toolbar",
2190
- className: cn(
2191
- "flex flex-wrap items-center justify-between gap-2 rounded-lg border bg-muted/40 p-2",
2192
- className
2193
- ),
2194
- ...props,
2195
- children: [
2196
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("output", { "aria-live": "polite", className: "text-sm font-medium", children: [
2197
- count,
2198
- " seleccionados"
2199
- ] }),
2200
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex items-center gap-2", children })
2201
- ]
2202
- }
2203
- );
2204
- }
2205
- function DescriptionList({ className, ...props }) {
2206
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2207
- "dl",
2208
- {
2209
- "data-slot": "description-list",
2210
- className: cn("grid gap-x-6 gap-y-4 sm:grid-cols-2", className),
2211
- ...props
2212
- }
2213
- );
2214
- }
2215
- function DescriptionItem({ className, ...props }) {
2216
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { "data-slot": "description-item", className: cn("min-w-0", className), ...props });
2217
- }
2218
- function DescriptionTerm({ className, ...props }) {
2219
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2220
- "dt",
2221
- {
2222
- "data-slot": "description-term",
2223
- className: cn("text-xs font-medium text-muted-foreground", className),
2224
- ...props
2225
- }
2226
- );
2227
- }
2228
- function DescriptionDetails({ className, ...props }) {
2229
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2230
- "dd",
2231
- {
2232
- "data-slot": "description-details",
2233
- className: cn("mt-1 wrap-break-word text-sm", className),
2234
- ...props
2235
- }
2236
- );
2237
- }
2238
- function DataViewState({ className, ...props }) {
2239
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2240
- "section",
2241
- {
2242
- "data-slot": "data-view-state",
2243
- className: cn(
2244
- "flex min-h-40 flex-col items-center justify-center gap-3 rounded-xl border p-6 text-center",
2245
- className
2246
- ),
2247
- ...props
2248
- }
2249
- );
2250
- }
2251
- function DataViewStateTitle({ children, className, ...props }) {
2252
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("h2", { "data-slot": "data-view-state-title", className: cn("font-semibold", className), ...props, children });
2253
- }
2254
- function DataViewStateDescription({ className, ...props }) {
2255
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2256
- "p",
2257
- {
2258
- "data-slot": "data-view-state-description",
2259
- className: cn("text-sm text-muted-foreground", className),
2260
- ...props
2261
- }
2262
- );
2263
- }
2264
- function DataViewStateActions({ className, ...props }) {
2265
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2266
- "div",
2267
- {
2268
- "data-slot": "data-view-state-actions",
2269
- className: cn("flex items-center gap-2", className),
2270
- ...props
2271
- }
2272
- );
2273
- }
2274
- function MetricGrid({ className, ...props }) {
2275
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2276
- "div",
2277
- {
2278
- "data-slot": "metric-grid",
2279
- className: cn("grid gap-4 sm:grid-cols-2 xl:grid-cols-4", className),
2280
- ...props
2281
- }
2282
- );
2283
- }
2348
+ // src/ui/detail-drawer/detail-drawer.tsx
2349
+ var import_jsx_runtime23 = require("react/jsx-runtime");
2284
2350
  function DetailDrawer({ children, ...props }) {
2285
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(DrawerContent, { ...props, children });
2351
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DrawerContent, { ...props, children });
2286
2352
  }
2287
2353
  function DetailDrawerBody({ className, ...props }) {
2288
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2354
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2289
2355
  "div",
2290
2356
  {
2291
2357
  "data-slot": "detail-drawer-body",
2292
2358
  className: cn("min-h-0 flex-1 overflow-y-auto px-4", className),
2293
- ...props
2294
- }
2295
- );
2296
- }
2297
-
2298
- // src/ui/confirm-dialog/confirm-dialog.tsx
2299
- var import_jsx_runtime19 = require("react/jsx-runtime");
2300
- function ConfirmDialog({
2301
- open,
2302
- onOpenChange,
2303
- title,
2304
- description,
2305
- confirmLabel = "Confirmar",
2306
- cancelLabel = "Cancelar",
2307
- destructive = false,
2308
- pending = false,
2309
- onConfirm
2310
- }) {
2311
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2312
- AlertDialog,
2313
- {
2314
- open,
2315
- onOpenChange: (nextOpen) => {
2316
- if (!pending || nextOpen) onOpenChange(nextOpen);
2317
- },
2318
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(AlertDialogContent, { children: [
2319
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(AlertDialogHeader, { children: [
2320
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogTitle, { children: title }),
2321
- description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AlertDialogDescription, { children: description }) : null
2322
- ] }),
2323
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(AlertDialogFooter, { children: [
2324
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
2325
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2326
- Button,
2327
- {
2328
- variant: destructive ? "destructive" : "default",
2329
- isDisabled: pending,
2330
- onPress: onConfirm,
2331
- children: confirmLabel
2332
- }
2333
- )
2334
- ] })
2335
- ] })
2336
- }
2337
- );
2338
- }
2339
-
2340
- // src/ui/copy-button/copy-button.tsx
2341
- var import_lucide_react5 = require("lucide-react");
2342
- var import_jsx_runtime20 = require("react/jsx-runtime");
2343
- function CopyButton({
2344
- value,
2345
- children,
2346
- copiedLabel = "Copiado",
2347
- resetMs,
2348
- onCopied,
2349
- onCopyError,
2350
- ...props
2351
- }) {
2352
- const { copy, status } = useClipboard({ resetMs, onError: onCopyError });
2353
- const copied = status === "copied";
2354
- const label = copied ? copiedLabel : children ?? "Copiar";
2355
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
2356
- Button,
2357
- {
2358
- "aria-label": typeof label === "string" ? label : void 0,
2359
- onPress: () => {
2360
- void copy(value).then((wasCopied) => {
2361
- if (wasCopied) onCopied?.(value);
2362
- });
2363
- },
2364
- ...props,
2365
- children: [
2366
- copied ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react5.Check, { "aria-hidden": "true", className: "size-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react5.Copy, { "aria-hidden": "true", className: "size-3.5" }),
2367
- label
2368
- ]
2359
+ ...props
2369
2360
  }
2370
2361
  );
2371
2362
  }
2372
2363
 
2373
- // src/ui/danger-zone/danger-zone.tsx
2374
- var import_lucide_react6 = require("lucide-react");
2375
- var import_react_aria_components12 = require("react-aria-components");
2376
- var import_jsx_runtime21 = require("react/jsx-runtime");
2377
- function DangerZone({
2378
- title = "Zona de peligro",
2379
- description = "Acciones irreversibles. \xC1brela solo si est\xE1s seguro.",
2380
- defaultOpen = false,
2381
- className,
2382
- children
2383
- }) {
2384
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components12.Disclosure, { defaultExpanded: defaultOpen, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(Card, { className: cn("border-destructive/30", className), children: [
2385
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components12.Heading, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
2386
- import_react_aria_components12.Button,
2387
- {
2388
- slot: "trigger",
2389
- "data-slot": "danger-zone-trigger",
2390
- className: "group/danger focus-visible:ring-ring/50 flex w-full items-center gap-3 px-4 text-left outline-none focus-visible:ring-3",
2391
- children: [
2392
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react6.ShieldAlert, { className: "text-destructive size-4 shrink-0" }),
2393
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { className: "flex flex-1 flex-col gap-0.5", children: [
2394
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "font-heading text-destructive text-base leading-snug font-medium", children: title }),
2395
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-muted-foreground text-xs", children: description })
2396
- ] }),
2397
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react6.ChevronDown, { className: "text-muted-foreground size-4 shrink-0 transition-transform group-aria-expanded/danger:rotate-180" })
2398
- ]
2399
- }
2400
- ) }),
2401
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components12.DisclosurePanel, { "data-slot": "danger-zone-content", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(CardContent, { children }) })
2402
- ] }) });
2403
- }
2404
-
2405
2364
  // src/ui/doc-preview/doc-preview.tsx
2406
2365
  var import_lucide_react7 = require("lucide-react");
2407
- var import_jsx_runtime22 = require("react/jsx-runtime");
2366
+ var import_jsx_runtime24 = require("react/jsx-runtime");
2408
2367
  function DocPreview({ url, mimeType, name }) {
2409
- if (!url) return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Fallback, { mimeType, reason: "no-url" });
2368
+ if (!url) return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Fallback, { mimeType, reason: "no-url" });
2410
2369
  if (mimeType === "application/pdf" || mimeType === "text/plain" || mimeType === "text/csv") {
2411
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2370
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2412
2371
  "iframe",
2413
2372
  {
2414
2373
  src: url,
@@ -2419,9 +2378,9 @@ function DocPreview({ url, mimeType, name }) {
2419
2378
  );
2420
2379
  }
2421
2380
  if (mimeType?.startsWith("image/")) {
2422
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "bg-muted/30 flex justify-center rounded-sm p-6", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("img", { src: url, alt: name, className: "max-h-[75vh] max-w-full rounded object-contain" }) });
2381
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "bg-muted/30 flex justify-center rounded-sm p-6", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src: url, alt: name, className: "max-h-[75vh] max-w-full rounded object-contain" }) });
2423
2382
  }
2424
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Fallback, { mimeType, reason: "unsupported" });
2383
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Fallback, { mimeType, reason: "unsupported" });
2425
2384
  }
2426
2385
  function Fallback({
2427
2386
  mimeType,
@@ -2429,11 +2388,11 @@ function Fallback({
2429
2388
  }) {
2430
2389
  const Icon = mimeType?.startsWith("image/") ? import_lucide_react7.Image : import_lucide_react7.FileText;
2431
2390
  const message = reason === "no-url" ? "No se pudo generar la URL de preview." : "Preview no disponible para este tipo de archivo.";
2432
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "text-muted-foreground flex flex-col items-center justify-center gap-2 py-14", children: [
2433
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Icon, { className: "size-9 opacity-30" }),
2434
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-sm", children: message }),
2435
- mimeType ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
2436
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
2391
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "text-muted-foreground flex flex-col items-center justify-center gap-2 py-14", children: [
2392
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Icon, { className: "size-9 opacity-30" }),
2393
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-sm", children: message }),
2394
+ mimeType ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
2395
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
2437
2396
  ] });
2438
2397
  }
2439
2398
 
@@ -2442,9 +2401,9 @@ var import_class_variance_authority6 = require("class-variance-authority");
2442
2401
  var import_lucide_react8 = require("lucide-react");
2443
2402
  var React5 = require("react");
2444
2403
  var import_react_aria_components13 = require("react-aria-components");
2445
- var import_jsx_runtime23 = require("react/jsx-runtime");
2404
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2446
2405
  function DropdownMenuTrigger({ ...props }) {
2447
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components13.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
2406
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components13.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
2448
2407
  }
2449
2408
  function DropdownMenuContent({
2450
2409
  "data-slot": dataSlot = "dropdown-menu-content",
@@ -2455,7 +2414,7 @@ function DropdownMenuContent({
2455
2414
  children,
2456
2415
  ...props
2457
2416
  }) {
2458
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2417
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2459
2418
  import_react_aria_components13.Popover,
2460
2419
  {
2461
2420
  "data-slot": dataSlot,
@@ -2467,7 +2426,7 @@ function DropdownMenuContent({
2467
2426
  "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",
2468
2427
  className
2469
2428
  ),
2470
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2429
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2471
2430
  import_react_aria_components13.Menu,
2472
2431
  {
2473
2432
  className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
@@ -2479,25 +2438,25 @@ function DropdownMenuContent({
2479
2438
  );
2480
2439
  }
2481
2440
  function DropdownMenu(props) {
2482
- if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DropdownMenuContent, { ...props });
2441
+ if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropdownMenuContent, { ...props });
2483
2442
  const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
2484
- const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
2485
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(DropdownMenuTrigger, { defaultOpen, isOpen, onOpenChange, children: [
2443
+ const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
2444
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(DropdownMenuTrigger, { defaultOpen, isOpen, onOpenChange, children: [
2486
2445
  triggerElement,
2487
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DropdownMenuContent, { ...contentProps, children })
2446
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropdownMenuContent, { ...contentProps, children })
2488
2447
  ] });
2489
2448
  }
2490
2449
  function DropdownMenuGroup({
2491
2450
  ...props
2492
2451
  }) {
2493
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components13.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
2452
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components13.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
2494
2453
  }
2495
2454
  function DropdownMenuLabel({
2496
2455
  className,
2497
2456
  inset,
2498
2457
  ...props
2499
2458
  }) {
2500
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2459
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2501
2460
  import_react_aria_components13.Header,
2502
2461
  {
2503
2462
  "data-slot": "dropdown-menu-label",
@@ -2529,7 +2488,7 @@ function DropdownMenuItem({
2529
2488
  children,
2530
2489
  ...props
2531
2490
  }) {
2532
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2491
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2533
2492
  import_react_aria_components13.MenuItem,
2534
2493
  {
2535
2494
  "data-slot": "dropdown-menu-item",
@@ -2541,13 +2500,13 @@ function DropdownMenuItem({
2541
2500
  (className2, { selectionMode }) => cn(dropdownMenuItemVariants({ selectionMode }), className2)
2542
2501
  ),
2543
2502
  ...props,
2544
- children: (0, import_react_aria_components13.composeRenderProps)(children, (children2, { isSelected, selectionMode }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
2545
- selectionMode !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2503
+ children: (0, import_react_aria_components13.composeRenderProps)(children, (children2, { isSelected, selectionMode }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
2504
+ selectionMode !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2546
2505
  "span",
2547
2506
  {
2548
2507
  className: "pointer-events-none absolute right-2 flex items-center justify-center",
2549
2508
  "data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
2550
- children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.CheckIcon, {}) : null
2509
+ children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react8.CheckIcon, {}) : null
2551
2510
  }
2552
2511
  ) : null,
2553
2512
  children2
@@ -2556,7 +2515,7 @@ function DropdownMenuItem({
2556
2515
  );
2557
2516
  }
2558
2517
  function DropdownMenuSub({ ...props }) {
2559
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components13.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
2518
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components13.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
2560
2519
  }
2561
2520
  function DropdownMenuSubTrigger({
2562
2521
  className,
@@ -2564,7 +2523,7 @@ function DropdownMenuSubTrigger({
2564
2523
  children,
2565
2524
  ...props
2566
2525
  }) {
2567
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2526
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2568
2527
  import_react_aria_components13.MenuItem,
2569
2528
  {
2570
2529
  "data-slot": "dropdown-menu-sub-trigger",
@@ -2575,9 +2534,9 @@ function DropdownMenuSubTrigger({
2575
2534
  className
2576
2535
  ),
2577
2536
  ...props,
2578
- children: (0, import_react_aria_components13.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
2537
+ children: (0, import_react_aria_components13.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
2579
2538
  children2,
2580
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
2539
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react8.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
2581
2540
  ] }))
2582
2541
  }
2583
2542
  );
@@ -2589,7 +2548,7 @@ function DropdownMenuSubContent({
2589
2548
  className,
2590
2549
  ...props
2591
2550
  }) {
2592
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2551
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2593
2552
  DropdownMenuContent,
2594
2553
  {
2595
2554
  "data-slot": "dropdown-menu-sub-content",
@@ -2608,7 +2567,7 @@ function DropdownMenuSeparator({
2608
2567
  className,
2609
2568
  ...props
2610
2569
  }) {
2611
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2570
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2612
2571
  import_react_aria_components13.Separator,
2613
2572
  {
2614
2573
  "data-slot": "dropdown-menu-separator",
@@ -2618,7 +2577,7 @@ function DropdownMenuSeparator({
2618
2577
  );
2619
2578
  }
2620
2579
  function DropdownMenuShortcut({ className, ...props }) {
2621
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2580
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2622
2581
  "span",
2623
2582
  {
2624
2583
  "data-slot": "dropdown-menu-shortcut",
@@ -2647,9 +2606,9 @@ var emptyStateMediaVariants = (0, import_class_variance_authority7.cva)(
2647
2606
  );
2648
2607
 
2649
2608
  // src/ui/empty-state/empty-state.tsx
2650
- var import_jsx_runtime24 = require("react/jsx-runtime");
2609
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2651
2610
  function EmptyState({ className, ...props }) {
2652
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2611
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2653
2612
  "div",
2654
2613
  {
2655
2614
  "data-slot": "empty-state",
@@ -2662,7 +2621,7 @@ function EmptyState({ className, ...props }) {
2662
2621
  );
2663
2622
  }
2664
2623
  function EmptyStateHeader({ className, ...props }) {
2665
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2624
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2666
2625
  "div",
2667
2626
  {
2668
2627
  "data-slot": "empty-state-header",
@@ -2676,7 +2635,7 @@ function EmptyStateMedia({
2676
2635
  variant = "default",
2677
2636
  ...props
2678
2637
  }) {
2679
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2638
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2680
2639
  "div",
2681
2640
  {
2682
2641
  "data-slot": "empty-state-media",
@@ -2687,7 +2646,7 @@ function EmptyStateMedia({
2687
2646
  );
2688
2647
  }
2689
2648
  function EmptyStateTitle({ className, children, ...props }) {
2690
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2649
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2691
2650
  "h3",
2692
2651
  {
2693
2652
  "data-slot": "empty-state-title",
@@ -2698,7 +2657,7 @@ function EmptyStateTitle({ className, children, ...props }) {
2698
2657
  );
2699
2658
  }
2700
2659
  function EmptyStateDescription({ className, ...props }) {
2701
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2660
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2702
2661
  "p",
2703
2662
  {
2704
2663
  "data-slot": "empty-state-description",
@@ -2711,7 +2670,7 @@ function EmptyStateDescription({ className, ...props }) {
2711
2670
  );
2712
2671
  }
2713
2672
  function EmptyStateContent({ className, ...props }) {
2714
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2673
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2715
2674
  "div",
2716
2675
  {
2717
2676
  "data-slot": "empty-state-content",
@@ -2729,9 +2688,9 @@ var import_react9 = require("react");
2729
2688
 
2730
2689
  // src/ui/error-state/error-state.tsx
2731
2690
  var import_lucide_react9 = require("lucide-react");
2732
- var import_jsx_runtime25 = require("react/jsx-runtime");
2691
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2733
2692
  function ErrorState({ className, ...props }) {
2734
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2693
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2735
2694
  "section",
2736
2695
  {
2737
2696
  "data-slot": "error-state",
@@ -2748,7 +2707,7 @@ function ErrorStateIcon({
2748
2707
  className,
2749
2708
  ...props
2750
2709
  }) {
2751
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2710
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2752
2711
  import_lucide_react9.AlertCircle,
2753
2712
  {
2754
2713
  "data-slot": "error-state-icon",
@@ -2759,7 +2718,7 @@ function ErrorStateIcon({
2759
2718
  );
2760
2719
  }
2761
2720
  function ErrorStateTitle({ className, ...props }) {
2762
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2721
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2763
2722
  "h2",
2764
2723
  {
2765
2724
  "data-slot": "error-state-title",
@@ -2769,7 +2728,7 @@ function ErrorStateTitle({ className, ...props }) {
2769
2728
  );
2770
2729
  }
2771
2730
  function ErrorStateDescription({ className, ...props }) {
2772
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2731
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2773
2732
  "p",
2774
2733
  {
2775
2734
  "data-slot": "error-state-description",
@@ -2779,7 +2738,7 @@ function ErrorStateDescription({ className, ...props }) {
2779
2738
  );
2780
2739
  }
2781
2740
  function ErrorStateActions({ className, ...props }) {
2782
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2741
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2783
2742
  "div",
2784
2743
  {
2785
2744
  "data-slot": "error-state-actions",
@@ -2790,17 +2749,20 @@ function ErrorStateActions({ className, ...props }) {
2790
2749
  }
2791
2750
 
2792
2751
  // src/ui/error-boundary/error-boundary.tsx
2793
- var import_jsx_runtime26 = require("react/jsx-runtime");
2752
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2753
+ function normalizeError(cause) {
2754
+ return cause instanceof Error ? cause : new Error("No se pudo renderizar este contenido.", { cause });
2755
+ }
2794
2756
  function changedResetKeys(previous = [], next = []) {
2795
2757
  return previous.length !== next.length || previous.some((value, index) => !Object.is(value, next[index]));
2796
2758
  }
2797
2759
  var Boundary = class extends import_react9.Component {
2798
2760
  state = { error: null };
2799
2761
  static getDerivedStateFromError(error) {
2800
- return { error };
2762
+ return { error: normalizeError(error) };
2801
2763
  }
2802
2764
  componentDidCatch(error, info) {
2803
- this.props.onError?.(error, info);
2765
+ this.props.onError?.(this.state.error ?? normalizeError(error), info);
2804
2766
  }
2805
2767
  componentDidUpdate(previousProps) {
2806
2768
  if (this.state.error && changedResetKeys(previousProps.resetKeys, this.props.resetKeys))
@@ -2812,32 +2774,32 @@ var Boundary = class extends import_react9.Component {
2812
2774
  if (!this.state.error) return children;
2813
2775
  if (typeof fallback === "function")
2814
2776
  return fallback({ error: this.state.error, reset: this.reset });
2815
- if (fallback) return fallback;
2816
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(ErrorState, { children: [
2817
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ErrorStateIcon, {}),
2818
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ErrorStateTitle, { children: "No se pudo cargar este contenido" }),
2819
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ErrorStateDescription, { children: "Prueba a cargarlo de nuevo." }),
2820
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ErrorStateActions, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Button, { onPress: this.reset, children: "Reintentar" }) })
2777
+ if (fallback !== void 0) return fallback;
2778
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(ErrorState, { children: [
2779
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ErrorStateIcon, {}),
2780
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ErrorStateTitle, { children: "No se pudo cargar este contenido" }),
2781
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ErrorStateDescription, { children: "Prueba a cargarlo de nuevo." }),
2782
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ErrorStateActions, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Button, { onPress: this.reset, children: "Reintentar" }) })
2821
2783
  ] });
2822
2784
  }
2823
2785
  };
2824
2786
  function ErrorBoundary(props) {
2825
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Boundary, { ...props });
2787
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Boundary, { ...props });
2826
2788
  }
2827
2789
  function AsyncBoundary({
2828
2790
  pending = null,
2829
2791
  ...props
2830
2792
  }) {
2831
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ErrorBoundary, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react9.Suspense, { fallback: pending, children: props.children }) });
2793
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ErrorBoundary, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react9.Suspense, { fallback: pending, children: props.children }) });
2832
2794
  }
2833
2795
 
2834
2796
  // src/ui/label/label.tsx
2835
2797
  var import_react10 = require("react");
2836
2798
  var import_react_aria_components14 = require("react-aria-components");
2837
- var import_jsx_runtime27 = require("react/jsx-runtime");
2799
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2838
2800
  var Label2 = (0, import_react10.forwardRef)(
2839
2801
  function Label3({ className, ...props }, ref) {
2840
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2802
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2841
2803
  import_react_aria_components14.Label,
2842
2804
  {
2843
2805
  ref,
@@ -2869,16 +2831,16 @@ var fieldVariants = (0, import_class_variance_authority8.cva)(
2869
2831
  );
2870
2832
 
2871
2833
  // src/ui/field/field.tsx
2872
- var import_jsx_runtime28 = require("react/jsx-runtime");
2834
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2873
2835
  function FieldSet({ className, ...props }) {
2874
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
2836
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
2875
2837
  }
2876
2838
  function FieldLegend({
2877
2839
  className,
2878
2840
  variant = "legend",
2879
2841
  ...props
2880
2842
  }) {
2881
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2843
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2882
2844
  "legend",
2883
2845
  {
2884
2846
  "data-slot": "field-legend",
@@ -2892,7 +2854,7 @@ function FieldLegend({
2892
2854
  );
2893
2855
  }
2894
2856
  function FieldGroup({ className, ...props }) {
2895
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2857
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2896
2858
  "div",
2897
2859
  {
2898
2860
  "data-slot": "field-group",
@@ -2907,7 +2869,7 @@ function FieldGroup({ className, ...props }) {
2907
2869
  function Field({ className, orientation = "vertical", ...props }) {
2908
2870
  return (
2909
2871
  // biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
2910
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2872
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2911
2873
  "div",
2912
2874
  {
2913
2875
  role: "group",
@@ -2920,7 +2882,7 @@ function Field({ className, orientation = "vertical", ...props }) {
2920
2882
  );
2921
2883
  }
2922
2884
  function FieldContent({ className, ...props }) {
2923
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2885
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2924
2886
  "div",
2925
2887
  {
2926
2888
  "data-slot": "field-content",
@@ -2930,7 +2892,7 @@ function FieldContent({ className, ...props }) {
2930
2892
  );
2931
2893
  }
2932
2894
  function FieldLabel({ className, ...props }) {
2933
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2895
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2934
2896
  Label2,
2935
2897
  {
2936
2898
  "data-slot": "field-label",
@@ -2943,7 +2905,7 @@ function FieldLabel({ className, ...props }) {
2943
2905
  );
2944
2906
  }
2945
2907
  function FieldTitle({ className, ...props }) {
2946
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2908
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2947
2909
  "div",
2948
2910
  {
2949
2911
  "data-slot": "field-title",
@@ -2953,7 +2915,7 @@ function FieldTitle({ className, ...props }) {
2953
2915
  );
2954
2916
  }
2955
2917
  function FieldDescription({ className, ...props }) {
2956
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2918
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2957
2919
  "p",
2958
2920
  {
2959
2921
  "data-slot": "field-description",
@@ -2966,7 +2928,7 @@ function FieldDescription({ className, ...props }) {
2966
2928
  );
2967
2929
  }
2968
2930
  function FieldSeparator({ className, children, ...props }) {
2969
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2931
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2970
2932
  "div",
2971
2933
  {
2972
2934
  "data-slot": "field-separator",
@@ -2974,8 +2936,8 @@ function FieldSeparator({ className, children, ...props }) {
2974
2936
  className: cn("relative -my-2 h-5 text-sm", className),
2975
2937
  ...props,
2976
2938
  children: [
2977
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
2978
- children ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2939
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
2940
+ children ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2979
2941
  "span",
2980
2942
  {
2981
2943
  "data-slot": "field-separator-content",
@@ -2989,9 +2951,9 @@ function FieldSeparator({ className, children, ...props }) {
2989
2951
  }
2990
2952
  function FieldError2({ className, children, errors, ...props }) {
2991
2953
  const messages = [...new Set(errors?.flatMap((error) => error?.message ?? []) ?? [])];
2992
- const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("li", { children: message }, message)) }) : null);
2954
+ const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("li", { children: message }, message)) }) : null);
2993
2955
  if (!content) return null;
2994
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2956
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2995
2957
  "div",
2996
2958
  {
2997
2959
  role: "alert",
@@ -3003,9 +2965,53 @@ function FieldError2({ className, children, errors, ...props }) {
3003
2965
  );
3004
2966
  }
3005
2967
 
2968
+ // src/ui/filter-bar/filter-bar.tsx
2969
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2970
+ function FilterBar({ className, ...props }) {
2971
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2972
+ "div",
2973
+ {
2974
+ "data-slot": "filter-bar",
2975
+ className: cn("flex flex-wrap items-center gap-2", className),
2976
+ ...props
2977
+ }
2978
+ );
2979
+ }
2980
+ function FilterGroup({ className, ...props }) {
2981
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2982
+ "div",
2983
+ {
2984
+ "data-slot": "filter-group",
2985
+ className: cn("flex flex-wrap items-center gap-2", className),
2986
+ ...props
2987
+ }
2988
+ );
2989
+ }
2990
+ function ActiveFilters({ className, ...props }) {
2991
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2992
+ "div",
2993
+ {
2994
+ "data-slot": "active-filters",
2995
+ "aria-label": "Filtros activos",
2996
+ className: cn("flex flex-wrap items-center gap-1.5", className),
2997
+ ...props
2998
+ }
2999
+ );
3000
+ }
3001
+ function FilterChip({
3002
+ children,
3003
+ onRemove,
3004
+ ...props
3005
+ }) {
3006
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Button, { size: "sm", variant: "outline", onPress: onRemove, ...props, children: [
3007
+ children,
3008
+ " \xD7"
3009
+ ] });
3010
+ }
3011
+
3006
3012
  // src/ui/form-feedback/form-feedback.tsx
3007
3013
  var import_lucide_react10 = require("lucide-react");
3008
- var import_jsx_runtime29 = require("react/jsx-runtime");
3014
+ var import_jsx_runtime32 = require("react/jsx-runtime");
3009
3015
  function FormFeedback({
3010
3016
  state,
3011
3017
  className,
@@ -3013,10 +3019,10 @@ function FormFeedback({
3013
3019
  successLabel = "Guardado"
3014
3020
  }) {
3015
3021
  if (state.status === "idle")
3016
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
3022
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
3017
3023
  const error = state.status === "error";
3018
3024
  const success = state.status === "success";
3019
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
3025
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
3020
3026
  "span",
3021
3027
  {
3022
3028
  role: error ? "alert" : "status",
@@ -3029,10 +3035,10 @@ function FormFeedback({
3029
3035
  className
3030
3036
  ),
3031
3037
  children: [
3032
- state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react10.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
3033
- success && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react10.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
3034
- error && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react10.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
3035
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
3038
+ state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react10.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
3039
+ success && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react10.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
3040
+ error && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react10.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
3041
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
3036
3042
  ]
3037
3043
  }
3038
3044
  );
@@ -3076,7 +3082,7 @@ function useFormFeedback(options) {
3076
3082
  }
3077
3083
 
3078
3084
  // src/ui/form-row/form-row.tsx
3079
- var import_jsx_runtime30 = require("react/jsx-runtime");
3085
+ var import_jsx_runtime33 = require("react/jsx-runtime");
3080
3086
  function FormRow({
3081
3087
  label,
3082
3088
  htmlFor,
@@ -3088,17 +3094,17 @@ function FormRow({
3088
3094
  }) {
3089
3095
  const hintId = hint ? `${htmlFor}-hint` : void 0;
3090
3096
  const errorId = error ? `${htmlFor}-error` : void 0;
3091
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
3092
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("label", { htmlFor, className: "text-foreground text-sm font-medium", children: [
3097
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
3098
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("label", { htmlFor, className: "text-foreground text-sm font-medium", children: [
3093
3099
  label,
3094
- required && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
3095
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { "aria-hidden": "true", className: "text-destructive ml-0.5", children: "*" }),
3096
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "sr-only", children: " (obligatorio)" })
3100
+ required && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
3101
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { "aria-hidden": "true", className: "text-destructive ml-0.5", children: "*" }),
3102
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "sr-only", children: " (obligatorio)" })
3097
3103
  ] })
3098
3104
  ] }),
3099
3105
  children,
3100
- hint && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { id: hintId, className: "text-muted-foreground text-xs", children: hint }),
3101
- error && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { id: errorId, role: "alert", className: "text-destructive text-xs font-medium", children: error })
3106
+ hint && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { id: hintId, className: "text-muted-foreground text-xs", children: hint }),
3107
+ error && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { id: errorId, role: "alert", className: "text-destructive text-xs font-medium", children: error })
3102
3108
  ] });
3103
3109
  }
3104
3110
 
@@ -3107,17 +3113,17 @@ var import_react_aria_components16 = require("react-aria-components");
3107
3113
 
3108
3114
  // src/ui/tooltip/tooltip.tsx
3109
3115
  var import_react_aria_components15 = require("react-aria-components");
3110
- var import_jsx_runtime31 = require("react/jsx-runtime");
3116
+ var import_jsx_runtime34 = require("react/jsx-runtime");
3111
3117
  function TooltipTrigger({
3112
3118
  delay = 0,
3113
3119
  ...props
3114
3120
  }) {
3115
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_aria_components15.TooltipTrigger, { "data-slot": "tooltip-trigger", delay, ...props });
3121
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_aria_components15.TooltipTrigger, { "data-slot": "tooltip-trigger", delay, ...props });
3116
3122
  }
3117
3123
  function Tooltip({ label, children, delay, ...props }) {
3118
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(TooltipTrigger, { delay, children: [
3124
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(TooltipTrigger, { delay, children: [
3119
3125
  children,
3120
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(TooltipContent, { ...props, children: label })
3126
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TooltipContent, { ...props, children: label })
3121
3127
  ] });
3122
3128
  }
3123
3129
  function TooltipContent({
@@ -3128,7 +3134,7 @@ function TooltipContent({
3128
3134
  children,
3129
3135
  ...props
3130
3136
  }) {
3131
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
3137
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
3132
3138
  import_react_aria_components15.Tooltip,
3133
3139
  {
3134
3140
  "data-slot": "tooltip-content",
@@ -3142,7 +3148,7 @@ function TooltipContent({
3142
3148
  ...props,
3143
3149
  children: [
3144
3150
  children,
3145
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
3151
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3146
3152
  import_react_aria_components15.OverlayArrow,
3147
3153
  {
3148
3154
  className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs",
@@ -3160,7 +3166,7 @@ function TooltipContent({
3160
3166
  }
3161
3167
 
3162
3168
  // src/ui/icon-button/icon-button.tsx
3163
- var import_jsx_runtime32 = require("react/jsx-runtime");
3169
+ var import_jsx_runtime35 = require("react/jsx-runtime");
3164
3170
  function IconButton({
3165
3171
  label,
3166
3172
  children,
@@ -3170,7 +3176,7 @@ function IconButton({
3170
3176
  ...props
3171
3177
  }) {
3172
3178
  const linkClassName = cn(buttonVariants({ variant, size: "icon" }), className);
3173
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Tooltip, { label, children: href ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_aria_components16.Link, { "data-slot": "icon-button", "aria-label": label, href, className: linkClassName, children }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
3179
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Tooltip, { label, children: href ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components16.Link, { "data-slot": "icon-button", "aria-label": label, href, className: linkClassName, children }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3174
3180
  Button,
3175
3181
  {
3176
3182
  "data-slot": "icon-button",
@@ -3190,9 +3196,9 @@ var import_class_variance_authority10 = require("class-variance-authority");
3190
3196
  // src/ui/input/input.tsx
3191
3197
  var import_react12 = require("react");
3192
3198
  var import_react_aria_components17 = require("react-aria-components");
3193
- var import_jsx_runtime33 = require("react/jsx-runtime");
3199
+ var import_jsx_runtime36 = require("react/jsx-runtime");
3194
3200
  var InputImpl = (0, import_react12.forwardRef)(function Input2({ className, type, ...props }, ref) {
3195
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3201
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3196
3202
  import_react_aria_components17.Input,
3197
3203
  {
3198
3204
  ref,
@@ -3211,9 +3217,9 @@ var Input3 = InputImpl;
3211
3217
  // src/ui/textarea/textarea.tsx
3212
3218
  var import_react13 = require("react");
3213
3219
  var import_react_aria_components18 = require("react-aria-components");
3214
- var import_jsx_runtime34 = require("react/jsx-runtime");
3220
+ var import_jsx_runtime37 = require("react/jsx-runtime");
3215
3221
  var TextareaImpl = (0, import_react13.forwardRef)(function Textarea({ className, ...props }, ref) {
3216
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3222
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3217
3223
  import_react_aria_components18.TextArea,
3218
3224
  {
3219
3225
  ref,
@@ -3246,12 +3252,12 @@ var inputGroupAddonVariants = (0, import_class_variance_authority9.cva)(
3246
3252
  );
3247
3253
 
3248
3254
  // src/ui/input-group/input-group.tsx
3249
- var import_jsx_runtime35 = (
3255
+ var import_jsx_runtime38 = (
3250
3256
  // biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
3251
3257
  require("react/jsx-runtime")
3252
3258
  );
3253
3259
  function InputGroup({ className, ...props }) {
3254
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3260
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3255
3261
  "div",
3256
3262
  {
3257
3263
  role: "group",
@@ -3272,7 +3278,7 @@ function InputGroupAddon({
3272
3278
  }) {
3273
3279
  return (
3274
3280
  // biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
3275
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3281
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3276
3282
  "div",
3277
3283
  {
3278
3284
  role: "group",
@@ -3303,7 +3309,7 @@ function InputGroupButton({
3303
3309
  ...props
3304
3310
  }) {
3305
3311
  const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
3306
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3312
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3307
3313
  Button,
3308
3314
  {
3309
3315
  "data-slot": "input-group-button",
@@ -3316,7 +3322,7 @@ function InputGroupButton({
3316
3322
  );
3317
3323
  }
3318
3324
  function InputGroupText({ className, ...props }) {
3319
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3325
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3320
3326
  "span",
3321
3327
  {
3322
3328
  "data-slot": "input-group-text",
@@ -3329,7 +3335,7 @@ function InputGroupText({ className, ...props }) {
3329
3335
  );
3330
3336
  }
3331
3337
  function InputGroupInput({ className, ...props }) {
3332
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3338
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3333
3339
  Input3,
3334
3340
  {
3335
3341
  "data-slot": "input-group-control",
@@ -3342,7 +3348,7 @@ function InputGroupInput({ className, ...props }) {
3342
3348
  );
3343
3349
  }
3344
3350
  function InputGroupTextarea({ className, ...props }) {
3345
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3351
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3346
3352
  Textarea2,
3347
3353
  {
3348
3354
  "data-slot": "input-group-control",
@@ -3356,7 +3362,7 @@ function InputGroupTextarea({ className, ...props }) {
3356
3362
  }
3357
3363
 
3358
3364
  // src/ui/kanban/kanban.tsx
3359
- var import_jsx_runtime36 = require("react/jsx-runtime");
3365
+ var import_jsx_runtime39 = require("react/jsx-runtime");
3360
3366
  var columnSize = {
3361
3367
  compact: "w-56",
3362
3368
  default: "w-72",
@@ -3368,13 +3374,13 @@ function KanbanViewport({
3368
3374
  contentClassName,
3369
3375
  ...props
3370
3376
  }) {
3371
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3377
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3372
3378
  "div",
3373
3379
  {
3374
3380
  "data-slot": "kanban-viewport",
3375
3381
  className: cn("-mx-1 overflow-x-auto pb-3", className),
3376
3382
  ...props,
3377
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3383
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3378
3384
  "div",
3379
3385
  {
3380
3386
  "data-slot": "kanban-viewport-content",
@@ -3390,7 +3396,7 @@ function KanbanColumn({
3390
3396
  size = "default",
3391
3397
  ...props
3392
3398
  }) {
3393
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3399
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3394
3400
  "section",
3395
3401
  {
3396
3402
  "data-slot": "kanban-column",
@@ -3401,7 +3407,7 @@ function KanbanColumn({
3401
3407
  );
3402
3408
  }
3403
3409
  function KanbanColumnHeader({ className, ...props }) {
3404
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3410
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3405
3411
  "header",
3406
3412
  {
3407
3413
  "data-slot": "kanban-column-header",
@@ -3411,7 +3417,7 @@ function KanbanColumnHeader({ className, ...props }) {
3411
3417
  );
3412
3418
  }
3413
3419
  function KanbanColumnTitle({ className, ...props }) {
3414
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3420
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3415
3421
  "span",
3416
3422
  {
3417
3423
  "data-slot": "kanban-column-title",
@@ -3424,14 +3430,14 @@ function KanbanColumnTitle({ className, ...props }) {
3424
3430
  );
3425
3431
  }
3426
3432
  function KanbanColumnBody({ className, ...props }) {
3427
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { "data-slot": "kanban-column-body", className: cn("space-y-2", className), ...props });
3433
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { "data-slot": "kanban-column-body", className: cn("space-y-2", className), ...props });
3428
3434
  }
3429
3435
  function KanbanEmpty({
3430
3436
  className,
3431
3437
  compact = false,
3432
3438
  ...props
3433
3439
  }) {
3434
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3440
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3435
3441
  "p",
3436
3442
  {
3437
3443
  "data-slot": "kanban-empty",
@@ -3447,9 +3453,9 @@ function KanbanEmpty({
3447
3453
  }
3448
3454
 
3449
3455
  // src/ui/kbd/kbd.tsx
3450
- var import_jsx_runtime37 = require("react/jsx-runtime");
3456
+ var import_jsx_runtime40 = require("react/jsx-runtime");
3451
3457
  function Kbd({ className, ...props }) {
3452
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3458
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3453
3459
  "kbd",
3454
3460
  {
3455
3461
  "data-slot": "kbd",
@@ -3462,7 +3468,7 @@ function Kbd({ className, ...props }) {
3462
3468
  );
3463
3469
  }
3464
3470
  function KbdGroup({ className, ...props }) {
3465
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3471
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3466
3472
  "span",
3467
3473
  {
3468
3474
  "data-slot": "kbd-group",
@@ -3474,13 +3480,13 @@ function KbdGroup({ className, ...props }) {
3474
3480
 
3475
3481
  // src/ui/loading-overlay/loading-overlay.tsx
3476
3482
  var import_lucide_react11 = require("lucide-react");
3477
- var import_jsx_runtime38 = require("react/jsx-runtime");
3483
+ var import_jsx_runtime41 = require("react/jsx-runtime");
3478
3484
  function LoadingOverlay({
3479
3485
  label = "Cargando",
3480
3486
  className,
3481
3487
  ...props
3482
3488
  }) {
3483
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3489
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3484
3490
  "output",
3485
3491
  {
3486
3492
  "aria-live": "polite",
@@ -3489,9 +3495,9 @@ function LoadingOverlay({
3489
3495
  className
3490
3496
  ),
3491
3497
  ...props,
3492
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "border-border bg-background flex items-center gap-2 rounded-lg border px-3 py-2 text-sm shadow-sm", children: [
3493
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react11.LoaderCircle, { className: "motion-safe:animate-spin", "aria-hidden": "true" }),
3494
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { children: label })
3498
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "border-border bg-background flex items-center gap-2 rounded-lg border px-3 py-2 text-sm shadow-sm", children: [
3499
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react11.LoaderCircle, { className: "motion-safe:animate-spin", "aria-hidden": "true" }),
3500
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { children: label })
3495
3501
  ] })
3496
3502
  }
3497
3503
  );
@@ -3499,10 +3505,10 @@ function LoadingOverlay({
3499
3505
 
3500
3506
  // src/ui/menu/menu.tsx
3501
3507
  var import_react_aria_components19 = require("react-aria-components");
3502
- var import_jsx_runtime39 = require("react/jsx-runtime");
3508
+ var import_jsx_runtime42 = require("react/jsx-runtime");
3503
3509
  var MenuTrigger = import_react_aria_components19.MenuTrigger;
3504
3510
  function MenuContent({ className, ...props }) {
3505
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3511
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3506
3512
  import_react_aria_components19.Popover,
3507
3513
  {
3508
3514
  "data-slot": "menu-content",
@@ -3516,10 +3522,10 @@ function MenuContent({ className, ...props }) {
3516
3522
  );
3517
3523
  }
3518
3524
  function Menu({ className, ...props }) {
3519
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_aria_components19.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
3525
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components19.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
3520
3526
  }
3521
3527
  function MenuItem({ className, children, ...props }) {
3522
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3528
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3523
3529
  import_react_aria_components19.MenuItem,
3524
3530
  {
3525
3531
  "data-slot": "menu-item",
@@ -3534,7 +3540,7 @@ function MenuItem({ className, children, ...props }) {
3534
3540
  }
3535
3541
 
3536
3542
  // src/ui/metric-card/metric-card.tsx
3537
- var import_jsx_runtime40 = require("react/jsx-runtime");
3543
+ var import_jsx_runtime43 = require("react/jsx-runtime");
3538
3544
  function MetricCard({
3539
3545
  className,
3540
3546
  label,
@@ -3548,7 +3554,7 @@ function MetricCard({
3548
3554
  loadingLabel = "Cargando m\xE9trica",
3549
3555
  ...props
3550
3556
  }) {
3551
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3557
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3552
3558
  Card,
3553
3559
  {
3554
3560
  "data-slot": "metric-card",
@@ -3557,16 +3563,16 @@ function MetricCard({
3557
3563
  "aria-busy": loading || void 0,
3558
3564
  className: cn("min-w-0", className),
3559
3565
  ...props,
3560
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(CardContent, { className: "flex items-start gap-3", children: [
3561
- icon ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { "data-slot": "metric-card-icon", className: "text-muted-foreground shrink-0", children: icon }) : null,
3562
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "min-w-0", children: [
3563
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { "data-slot": "metric-card-label", className: "text-muted-foreground text-sm", children: label }),
3564
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3566
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(CardContent, { className: "flex items-start gap-3", children: [
3567
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { "data-slot": "metric-card-icon", className: "text-muted-foreground shrink-0", children: icon }) : null,
3568
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "min-w-0", children: [
3569
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { "data-slot": "metric-card-label", className: "text-muted-foreground text-sm", children: label }),
3570
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3565
3571
  "strong",
3566
3572
  {
3567
3573
  "data-slot": "metric-card-value",
3568
3574
  className: "mt-1 block text-2xl font-semibold tracking-tight",
3569
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3575
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3570
3576
  "span",
3571
3577
  {
3572
3578
  "data-slot": "metric-card-loading",
@@ -3576,7 +3582,7 @@ function MetricCard({
3576
3582
  ) : value
3577
3583
  }
3578
3584
  ),
3579
- delta ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3585
+ delta ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3580
3586
  "span",
3581
3587
  {
3582
3588
  "data-slot": "metric-card-delta",
@@ -3589,17 +3595,30 @@ function MetricCard({
3589
3595
  children: delta
3590
3596
  }
3591
3597
  ) : null,
3592
- description ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { "data-slot": "metric-card-description", className: "text-muted-foreground mt-1 text-xs", children: description }) : null
3598
+ description ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { "data-slot": "metric-card-description", className: "text-muted-foreground mt-1 text-xs", children: description }) : null
3593
3599
  ] })
3594
3600
  ] })
3595
3601
  }
3596
3602
  );
3597
3603
  }
3598
3604
 
3605
+ // src/ui/metric-grid/metric-grid.tsx
3606
+ var import_jsx_runtime44 = require("react/jsx-runtime");
3607
+ function MetricGrid({ className, ...props }) {
3608
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3609
+ "div",
3610
+ {
3611
+ "data-slot": "metric-grid",
3612
+ className: cn("grid gap-4 sm:grid-cols-2 xl:grid-cols-4", className),
3613
+ ...props
3614
+ }
3615
+ );
3616
+ }
3617
+
3599
3618
  // src/ui/otp-input/otp-input.tsx
3600
3619
  var import_react14 = require("react");
3601
3620
  var import_react_aria_components20 = require("react-aria-components");
3602
- var import_jsx_runtime41 = require("react/jsx-runtime");
3621
+ var import_jsx_runtime45 = require("react/jsx-runtime");
3603
3622
  function normalizeOtp(value, length) {
3604
3623
  return value.replace(/[^0-9]/g, "").slice(0, length);
3605
3624
  }
@@ -3651,7 +3670,7 @@ var OtpInputImpl = (0, import_react14.forwardRef)(function OtpInput({
3651
3670
  input.setSelectionRange(position, position);
3652
3671
  setSelectionStart(position);
3653
3672
  }
3654
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
3673
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
3655
3674
  "div",
3656
3675
  {
3657
3676
  "data-slot": "otp-input",
@@ -3661,7 +3680,7 @@ var OtpInputImpl = (0, import_react14.forwardRef)(function OtpInput({
3661
3680
  style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
3662
3681
  onPointerDown: handlePointerDown,
3663
3682
  children: [
3664
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3683
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3665
3684
  import_react_aria_components20.Input,
3666
3685
  {
3667
3686
  ...props,
@@ -3701,7 +3720,7 @@ var OtpInputImpl = (0, import_react14.forwardRef)(function OtpInput({
3701
3720
  }
3702
3721
  }
3703
3722
  ),
3704
- slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3723
+ slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3705
3724
  "span",
3706
3725
  {
3707
3726
  "aria-hidden": "true",
@@ -3724,9 +3743,9 @@ var OtpInputImpl = (0, import_react14.forwardRef)(function OtpInput({
3724
3743
  var OtpInput2 = OtpInputImpl;
3725
3744
 
3726
3745
  // src/ui/page-header/page-header.tsx
3727
- var import_jsx_runtime42 = require("react/jsx-runtime");
3746
+ var import_jsx_runtime46 = require("react/jsx-runtime");
3728
3747
  function PageHeader({ className, ...props }) {
3729
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3748
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3730
3749
  "header",
3731
3750
  {
3732
3751
  "data-slot": "page-header",
@@ -3739,10 +3758,10 @@ function PageHeader({ className, ...props }) {
3739
3758
  );
3740
3759
  }
3741
3760
  function PageHeaderHeading({ className, ...props }) {
3742
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
3761
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
3743
3762
  }
3744
3763
  function PageHeaderTitle({ className, children, ...props }) {
3745
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3764
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3746
3765
  "h1",
3747
3766
  {
3748
3767
  "data-slot": "page-header-title",
@@ -3753,7 +3772,7 @@ function PageHeaderTitle({ className, children, ...props }) {
3753
3772
  );
3754
3773
  }
3755
3774
  function PageHeaderDescription({ className, ...props }) {
3756
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3775
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3757
3776
  "p",
3758
3777
  {
3759
3778
  "data-slot": "page-header-description",
@@ -3763,7 +3782,7 @@ function PageHeaderDescription({ className, ...props }) {
3763
3782
  );
3764
3783
  }
3765
3784
  function PageHeaderActions({ className, ...props }) {
3766
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3785
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3767
3786
  "div",
3768
3787
  {
3769
3788
  "data-slot": "page-header-actions",
@@ -3773,7 +3792,7 @@ function PageHeaderActions({ className, ...props }) {
3773
3792
  );
3774
3793
  }
3775
3794
  function SectionHeader({ className, ...props }) {
3776
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3795
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3777
3796
  "div",
3778
3797
  {
3779
3798
  "data-slot": "section-header",
@@ -3783,10 +3802,10 @@ function SectionHeader({ className, ...props }) {
3783
3802
  );
3784
3803
  }
3785
3804
  function SectionHeaderHeading({ className, ...props }) {
3786
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { "data-slot": "section-header-heading", className: cn("min-w-0", className), ...props });
3805
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { "data-slot": "section-header-heading", className: cn("min-w-0", className), ...props });
3787
3806
  }
3788
3807
  function SectionHeaderTitle({ className, ...props }) {
3789
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3808
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3790
3809
  "h2",
3791
3810
  {
3792
3811
  "data-slot": "section-header-title",
@@ -3796,7 +3815,7 @@ function SectionHeaderTitle({ className, ...props }) {
3796
3815
  );
3797
3816
  }
3798
3817
  function SectionHeaderDescription({ className, ...props }) {
3799
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3818
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3800
3819
  "p",
3801
3820
  {
3802
3821
  "data-slot": "section-header-description",
@@ -3806,7 +3825,7 @@ function SectionHeaderDescription({ className, ...props }) {
3806
3825
  );
3807
3826
  }
3808
3827
  function SectionHeaderActions({ className, ...props }) {
3809
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3828
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3810
3829
  "div",
3811
3830
  {
3812
3831
  "data-slot": "section-header-actions",
@@ -3819,18 +3838,19 @@ function SectionHeaderActions({ className, ...props }) {
3819
3838
  // src/ui/pagination/pagination.tsx
3820
3839
  var import_lucide_react12 = require("lucide-react");
3821
3840
  var React6 = __toESM(require("react"), 1);
3822
- var import_jsx_runtime43 = require("react/jsx-runtime");
3841
+ var import_jsx_runtime47 = require("react/jsx-runtime");
3823
3842
  function visiblePages(page, pageCount, siblingCount) {
3843
+ const siblings = Number.isFinite(siblingCount) ? Math.min(10, Math.max(0, Math.floor(siblingCount))) : 1;
3824
3844
  return [
3825
3845
  .../* @__PURE__ */ new Set([
3826
3846
  1,
3827
- ...Array.from({ length: siblingCount * 2 + 1 }, (_, index) => page - siblingCount + index),
3847
+ ...Array.from({ length: siblings * 2 + 1 }, (_, index) => page - siblings + index),
3828
3848
  pageCount
3829
3849
  ])
3830
3850
  ].filter((item) => item >= 1 && item <= pageCount).sort((left, right) => left - right);
3831
3851
  }
3832
3852
  function normalizedPageCount(pageCount) {
3833
- return Number.isFinite(pageCount) ? Math.max(0, Math.floor(pageCount)) : 0;
3853
+ return Number.isFinite(pageCount) ? Math.min(Number.MAX_SAFE_INTEGER, Math.max(0, Math.floor(pageCount))) : 0;
3834
3854
  }
3835
3855
  function normalizedPage(page, pageCount) {
3836
3856
  if (!Number.isFinite(page)) return 1;
@@ -3849,15 +3869,15 @@ function Pagination({
3849
3869
  if (totalPages <= 1) return null;
3850
3870
  const currentPage = normalizedPage(page, totalPages);
3851
3871
  const pages = visiblePages(currentPage, totalPages, siblingCount);
3852
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
3872
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
3853
3873
  "nav",
3854
3874
  {
3855
3875
  "aria-label": ariaLabel,
3856
3876
  className: cn("flex flex-wrap items-center justify-between gap-4", className),
3857
3877
  children: [
3858
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "text-muted-foreground text-sm", children: summary ?? `P\xE1gina ${currentPage} de ${totalPages}` }),
3859
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex items-center gap-1", children: [
3860
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3878
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "text-muted-foreground text-sm", children: summary ?? `P\xE1gina ${currentPage} de ${totalPages}` }),
3879
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1", children: [
3880
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3861
3881
  Button,
3862
3882
  {
3863
3883
  "aria-label": "P\xE1gina anterior",
@@ -3865,27 +3885,27 @@ function Pagination({
3865
3885
  onPress: () => onPageChange(currentPage - 1),
3866
3886
  size: "icon",
3867
3887
  variant: "ghost",
3868
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react12.ChevronLeft, {})
3888
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react12.ChevronLeft, {})
3869
3889
  }
3870
3890
  ),
3871
3891
  pages.map((item, index) => {
3872
3892
  const previousPage = pages[index - 1];
3873
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(React6.Fragment, { children: [
3874
- previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { "aria-hidden": "true", className: "text-muted-foreground px-1", children: "\u2026" }) : null,
3875
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3893
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(React6.Fragment, { children: [
3894
+ previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { "aria-hidden": "true", className: "text-muted-foreground px-1", children: "\u2026" }) : null,
3895
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3876
3896
  Button,
3877
3897
  {
3878
3898
  "aria-current": item === currentPage ? "page" : void 0,
3879
3899
  "aria-label": `P\xE1gina ${item}`,
3880
3900
  onPress: () => onPageChange(item),
3881
3901
  size: "icon",
3882
- variant: item === page ? "secondary" : "ghost",
3902
+ variant: item === currentPage ? "secondary" : "ghost",
3883
3903
  children: item
3884
3904
  }
3885
3905
  )
3886
3906
  ] }, item);
3887
3907
  }),
3888
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3908
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3889
3909
  Button,
3890
3910
  {
3891
3911
  "aria-label": "P\xE1gina siguiente",
@@ -3893,7 +3913,7 @@ function Pagination({
3893
3913
  onPress: () => onPageChange(currentPage + 1),
3894
3914
  size: "icon",
3895
3915
  variant: "ghost",
3896
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react12.ChevronRight, {})
3916
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react12.ChevronRight, {})
3897
3917
  }
3898
3918
  )
3899
3919
  ] })
@@ -3904,10 +3924,10 @@ function Pagination({
3904
3924
 
3905
3925
  // src/ui/popover/popover.tsx
3906
3926
  var import_react_aria_components21 = require("react-aria-components");
3907
- var import_jsx_runtime44 = require("react/jsx-runtime");
3927
+ var import_jsx_runtime48 = require("react/jsx-runtime");
3908
3928
  var PopoverTrigger = import_react_aria_components21.DialogTrigger;
3909
3929
  function PopoverContent({ className, ...props }) {
3910
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3930
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3911
3931
  import_react_aria_components21.Popover,
3912
3932
  {
3913
3933
  "data-slot": "popover",
@@ -3922,19 +3942,19 @@ function PopoverContent({ className, ...props }) {
3922
3942
  );
3923
3943
  }
3924
3944
  function Popover4(props) {
3925
- if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(PopoverContent, { ...props });
3945
+ if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(PopoverContent, { ...props });
3926
3946
  const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
3927
- const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
3928
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(PopoverTrigger, { defaultOpen, isOpen, onOpenChange, children: [
3947
+ const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
3948
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(PopoverTrigger, { defaultOpen, isOpen, onOpenChange, children: [
3929
3949
  triggerElement,
3930
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(PopoverContent, { ...contentProps, children })
3950
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(PopoverContent, { ...contentProps, children })
3931
3951
  ] });
3932
3952
  }
3933
3953
 
3934
3954
  // src/ui/quantity-input/quantity-input.tsx
3935
3955
  var import_lucide_react13 = require("lucide-react");
3936
3956
  var import_react_aria_components22 = require("react-aria-components");
3937
- var import_jsx_runtime45 = require("react/jsx-runtime");
3957
+ var import_jsx_runtime49 = require("react/jsx-runtime");
3938
3958
  function QuantityInput({
3939
3959
  className,
3940
3960
  inputClassName,
@@ -3944,7 +3964,7 @@ function QuantityInput({
3944
3964
  step = 1,
3945
3965
  ...props
3946
3966
  }) {
3947
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3967
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3948
3968
  import_react_aria_components22.NumberField,
3949
3969
  {
3950
3970
  ...props,
@@ -3955,23 +3975,23 @@ function QuantityInput({
3955
3975
  "group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50",
3956
3976
  className
3957
3977
  ),
3958
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
3978
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
3959
3979
  import_react_aria_components22.Group,
3960
3980
  {
3961
3981
  "data-slot": "quantity-input-group",
3962
3982
  className: "border-border bg-background text-foreground focus-within:border-ring focus-within:ring-ring/50 group-data-invalid/quantity-input:border-destructive flex h-8 min-w-0 items-stretch overflow-hidden rounded-lg border transition-[border-color,box-shadow] focus-within:ring-3",
3963
3983
  children: [
3964
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3984
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3965
3985
  import_react_aria_components22.Button,
3966
3986
  {
3967
3987
  slot: "decrement",
3968
3988
  "aria-label": decrementAriaLabel,
3969
3989
  "data-slot": "quantity-input-decrement",
3970
3990
  className: "border-border text-muted-foreground hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted flex size-8 shrink-0 cursor-pointer items-center justify-center border-r transition-colors outline-none data-disabled:pointer-events-none",
3971
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react13.Minus, { "aria-hidden": "true", className: "size-4" })
3991
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react13.Minus, { "aria-hidden": "true", className: "size-4" })
3972
3992
  }
3973
3993
  ),
3974
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3994
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3975
3995
  import_react_aria_components22.Input,
3976
3996
  {
3977
3997
  "data-slot": "quantity-input-value",
@@ -3981,14 +4001,14 @@ function QuantityInput({
3981
4001
  )
3982
4002
  }
3983
4003
  ),
3984
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4004
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3985
4005
  import_react_aria_components22.Button,
3986
4006
  {
3987
4007
  slot: "increment",
3988
4008
  "aria-label": incrementAriaLabel,
3989
4009
  "data-slot": "quantity-input-increment",
3990
4010
  className: "border-border text-muted-foreground hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted flex size-8 shrink-0 cursor-pointer items-center justify-center border-l transition-colors outline-none data-disabled:pointer-events-none",
3991
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react13.Plus, { "aria-hidden": "true", className: "size-4" })
4011
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react13.Plus, { "aria-hidden": "true", className: "size-4" })
3992
4012
  }
3993
4013
  )
3994
4014
  ]
@@ -4001,10 +4021,10 @@ function QuantityInput({
4001
4021
  // src/ui/select/select.tsx
4002
4022
  var import_lucide_react14 = require("lucide-react");
4003
4023
  var import_react_aria_components23 = require("react-aria-components");
4004
- var import_jsx_runtime46 = require("react/jsx-runtime");
4024
+ var import_jsx_runtime50 = require("react/jsx-runtime");
4005
4025
  var Select = import_react_aria_components23.Select;
4006
4026
  function SelectTrigger({ className, children, ...props }) {
4007
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4027
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4008
4028
  import_react_aria_components23.Button,
4009
4029
  {
4010
4030
  "data-slot": "select-trigger",
@@ -4013,9 +4033,9 @@ function SelectTrigger({ className, children, ...props }) {
4013
4033
  className
4014
4034
  ),
4015
4035
  ...props,
4016
- children: (state) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
4036
+ children: (state) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
4017
4037
  typeof children === "function" ? children(state) : children,
4018
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4038
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4019
4039
  import_lucide_react14.ChevronDown,
4020
4040
  {
4021
4041
  "aria-hidden": "true",
@@ -4027,7 +4047,7 @@ function SelectTrigger({ className, children, ...props }) {
4027
4047
  );
4028
4048
  }
4029
4049
  function SelectValue({ className, ...props }) {
4030
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4050
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4031
4051
  import_react_aria_components23.SelectValue,
4032
4052
  {
4033
4053
  "data-slot": "select-value",
@@ -4037,7 +4057,7 @@ function SelectValue({ className, ...props }) {
4037
4057
  );
4038
4058
  }
4039
4059
  function SelectContent({ className, ...props }) {
4040
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4060
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4041
4061
  import_react_aria_components23.Popover,
4042
4062
  {
4043
4063
  "data-slot": "select-content",
@@ -4051,7 +4071,7 @@ function SelectContent({ className, ...props }) {
4051
4071
  );
4052
4072
  }
4053
4073
  function SelectList({ className, ...props }) {
4054
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4074
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4055
4075
  import_react_aria_components23.ListBox,
4056
4076
  {
4057
4077
  "data-slot": "select-list",
@@ -4065,7 +4085,7 @@ function SelectItem({
4065
4085
  children,
4066
4086
  ...props
4067
4087
  }) {
4068
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4088
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4069
4089
  import_react_aria_components23.ListBoxItem,
4070
4090
  {
4071
4091
  "data-slot": "select-item",
@@ -4079,6 +4099,34 @@ function SelectItem({
4079
4099
  );
4080
4100
  }
4081
4101
 
4102
+ // src/ui/selection-toolbar/selection-toolbar.tsx
4103
+ var import_jsx_runtime51 = require("react/jsx-runtime");
4104
+ function SelectionToolbar({
4105
+ count,
4106
+ className,
4107
+ children,
4108
+ ...props
4109
+ }) {
4110
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
4111
+ "div",
4112
+ {
4113
+ "data-slot": "selection-toolbar",
4114
+ className: cn(
4115
+ "flex flex-wrap items-center justify-between gap-2 rounded-lg border bg-muted/40 p-2",
4116
+ className
4117
+ ),
4118
+ ...props,
4119
+ children: [
4120
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("output", { "aria-live": "polite", className: "text-sm font-medium", children: [
4121
+ count,
4122
+ " seleccionados"
4123
+ ] }),
4124
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "flex items-center gap-2", children })
4125
+ ]
4126
+ }
4127
+ );
4128
+ }
4129
+
4082
4130
  // src/ui/sidebar/sidebar.tsx
4083
4131
  var import_lucide_react15 = require("lucide-react");
4084
4132
  var import_react16 = require("react");
@@ -4094,7 +4142,7 @@ function useSidebar() {
4094
4142
  }
4095
4143
 
4096
4144
  // src/ui/sidebar/sidebar.tsx
4097
- var import_jsx_runtime47 = require("react/jsx-runtime");
4145
+ var import_jsx_runtime52 = require("react/jsx-runtime");
4098
4146
  function SidebarProvider({
4099
4147
  defaultCollapsed = false,
4100
4148
  collapsed: controlledCollapsed,
@@ -4119,11 +4167,11 @@ function SidebarProvider({
4119
4167
  }),
4120
4168
  [collapsed, setCollapsed, toggle]
4121
4169
  );
4122
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(SidebarContext.Provider, { value, children });
4170
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(SidebarContext.Provider, { value, children });
4123
4171
  }
4124
4172
  function Sidebar({ className, ...props }) {
4125
4173
  const { collapsed } = useSidebar();
4126
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4174
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4127
4175
  "aside",
4128
4176
  {
4129
4177
  "data-slot": "sidebar",
@@ -4137,7 +4185,7 @@ function Sidebar({ className, ...props }) {
4137
4185
  );
4138
4186
  }
4139
4187
  function SidebarHeader({ className, ...props }) {
4140
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4188
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4141
4189
  "div",
4142
4190
  {
4143
4191
  "data-slot": "sidebar-header",
@@ -4152,7 +4200,7 @@ function SidebarSearch({
4152
4200
  className,
4153
4201
  ...props
4154
4202
  }) {
4155
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
4203
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
4156
4204
  "button",
4157
4205
  {
4158
4206
  type: "button",
@@ -4163,15 +4211,15 @@ function SidebarSearch({
4163
4211
  ),
4164
4212
  ...props,
4165
4213
  children: [
4166
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.Search, { className: "size-4 shrink-0" }),
4167
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "flex-1 text-left", children: label }),
4168
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("kbd", { className: "bg-secondary text-muted-foreground rounded px-1.5 py-0.5 font-mono text-[10px]", children: shortcut })
4214
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react15.Search, { className: "size-4 shrink-0" }),
4215
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "flex-1 text-left", children: label }),
4216
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("kbd", { className: "bg-secondary text-muted-foreground rounded px-1.5 py-0.5 font-mono text-[10px]", children: shortcut })
4169
4217
  ]
4170
4218
  }
4171
4219
  );
4172
4220
  }
4173
4221
  function SidebarContent({ className, ...props }) {
4174
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4222
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4175
4223
  "nav",
4176
4224
  {
4177
4225
  "data-slot": "sidebar-content",
@@ -4182,7 +4230,7 @@ function SidebarContent({ className, ...props }) {
4182
4230
  );
4183
4231
  }
4184
4232
  function SidebarFooter({ className, ...props }) {
4185
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4233
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4186
4234
  "div",
4187
4235
  {
4188
4236
  "data-slot": "sidebar-footer",
@@ -4198,8 +4246,8 @@ function SidebarGroup({
4198
4246
  ...props
4199
4247
  }) {
4200
4248
  const { collapsed } = useSidebar();
4201
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("section", { "data-slot": "sidebar-group", className: cn("mb-4 last:mb-0", className), ...props, children: [
4202
- label && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4249
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("section", { "data-slot": "sidebar-group", className: cn("mb-4 last:mb-0", className), ...props, children: [
4250
+ label && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4203
4251
  "h2",
4204
4252
  {
4205
4253
  className: cn(
@@ -4223,7 +4271,7 @@ function SidebarItem({
4223
4271
  }) {
4224
4272
  const { collapsed } = useSidebar();
4225
4273
  const content = typeof children === "function" ? label : children ?? label;
4226
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4274
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4227
4275
  import_react_aria_components24.Link,
4228
4276
  {
4229
4277
  "data-slot": "sidebar-item",
@@ -4235,16 +4283,16 @@ function SidebarItem({
4235
4283
  typeof className === "function" ? className : className
4236
4284
  ),
4237
4285
  ...props,
4238
- children: (values) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
4239
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
4240
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"), children: typeof children === "function" ? children(values) : content }),
4241
- badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-muted-foreground text-xs", children: badge })
4286
+ children: (values) => /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
4287
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
4288
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"), children: typeof children === "function" ? children(values) : content }),
4289
+ badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "text-muted-foreground text-xs", children: badge })
4242
4290
  ] })
4243
4291
  }
4244
4292
  );
4245
4293
  }
4246
4294
  function SidebarSeparator({ className, ...props }) {
4247
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4295
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4248
4296
  "hr",
4249
4297
  {
4250
4298
  "data-slot": "sidebar-separator",
@@ -4256,7 +4304,7 @@ function SidebarSeparator({ className, ...props }) {
4256
4304
  function SidebarTrigger({ className, ...props }) {
4257
4305
  const { collapsed, toggle } = useSidebar();
4258
4306
  const { onPress, ...buttonProps } = props;
4259
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4307
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4260
4308
  Button,
4261
4309
  {
4262
4310
  "aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
@@ -4268,14 +4316,14 @@ function SidebarTrigger({ className, ...props }) {
4268
4316
  variant: "ghost",
4269
4317
  className: cn("ml-auto", className),
4270
4318
  ...buttonProps,
4271
- children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.ChevronLeft, {})
4319
+ children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react15.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react15.ChevronLeft, {})
4272
4320
  }
4273
4321
  );
4274
4322
  }
4275
4323
  function SidebarRail({ className, ...props }) {
4276
4324
  const { toggle } = useSidebar();
4277
4325
  const { onClick, ...buttonProps } = props;
4278
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4326
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4279
4327
  "button",
4280
4328
  {
4281
4329
  type: "button",
@@ -4293,7 +4341,7 @@ function SidebarRail({ className, ...props }) {
4293
4341
  );
4294
4342
  }
4295
4343
  function SidebarMore({ className, ...props }) {
4296
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4344
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4297
4345
  Button,
4298
4346
  {
4299
4347
  "aria-label": "M\xE1s opciones",
@@ -4301,15 +4349,15 @@ function SidebarMore({ className, ...props }) {
4301
4349
  variant: "ghost",
4302
4350
  className: cn("size-7", className),
4303
4351
  ...props,
4304
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.Ellipsis, {})
4352
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react15.Ellipsis, {})
4305
4353
  }
4306
4354
  );
4307
4355
  }
4308
4356
 
4309
4357
  // src/ui/skeleton/skeleton.tsx
4310
- var import_jsx_runtime48 = require("react/jsx-runtime");
4358
+ var import_jsx_runtime53 = require("react/jsx-runtime");
4311
4359
  function Skeleton({ className, ...props }) {
4312
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4360
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4313
4361
  "div",
4314
4362
  {
4315
4363
  "aria-hidden": "true",
@@ -4324,7 +4372,7 @@ function Skeleton({ className, ...props }) {
4324
4372
  var import_lucide_react16 = require("lucide-react");
4325
4373
  var import_react17 = require("react");
4326
4374
  var import_react_dom = require("react-dom");
4327
- var import_jsx_runtime49 = require("react/jsx-runtime");
4375
+ var import_jsx_runtime54 = require("react/jsx-runtime");
4328
4376
  function assignRef(ref, node) {
4329
4377
  if (typeof ref === "function") {
4330
4378
  ref(node);
@@ -4359,7 +4407,7 @@ function SubmitButton({
4359
4407
  if (busy) button.setAttribute("aria-busy", "true");
4360
4408
  else button.removeAttribute("aria-busy");
4361
4409
  }, [busy]);
4362
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
4410
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4363
4411
  Button,
4364
4412
  {
4365
4413
  ref: setButtonRef,
@@ -4368,8 +4416,8 @@ function SubmitButton({
4368
4416
  isDisabled: busy || isDisabled,
4369
4417
  "aria-busy": busy || void 0,
4370
4418
  ...props,
4371
- children: busy ? /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [
4372
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react16.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 motion-safe:animate-spin" }),
4419
+ children: busy ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
4420
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react16.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 motion-safe:animate-spin" }),
4373
4421
  label
4374
4422
  ] }) : children
4375
4423
  }
@@ -4379,7 +4427,7 @@ function SubmitButton({
4379
4427
  // src/ui/switch/switch.tsx
4380
4428
  var import_react18 = require("react");
4381
4429
  var import_react_aria_components25 = require("react-aria-components");
4382
- var import_jsx_runtime50 = require("react/jsx-runtime");
4430
+ var import_jsx_runtime55 = require("react/jsx-runtime");
4383
4431
  var switchSizes = {
4384
4432
  sm: {
4385
4433
  control: "h-4 w-[1.875rem] p-0.5",
@@ -4436,7 +4484,7 @@ function Switch({
4436
4484
  ownerDocument.addEventListener("keydown", handleDirectionalKey);
4437
4485
  return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
4438
4486
  }, [isDisabled, isReadOnly, resolvedInputRef]);
4439
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4487
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4440
4488
  import_react_aria_components25.Switch,
4441
4489
  {
4442
4490
  "data-slot": "switch",
@@ -4453,8 +4501,8 @@ function Switch({
4453
4501
  children: (state) => {
4454
4502
  const isThumbPressed = state.isPressed;
4455
4503
  const thumbOffset = state.isSelected ? isThumbPressed ? styles.activeSelectedOffset : styles.selectedOffset : "0";
4456
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
4457
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4504
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment, { children: [
4505
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4458
4506
  "span",
4459
4507
  {
4460
4508
  "aria-hidden": "true",
@@ -4468,7 +4516,7 @@ function Switch({
4468
4516
  "group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
4469
4517
  styles.control
4470
4518
  ),
4471
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4519
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4472
4520
  "span",
4473
4521
  {
4474
4522
  "data-slot": "switch-thumb",
@@ -4488,9 +4536,9 @@ function Switch({
4488
4536
  )
4489
4537
  }
4490
4538
  ),
4491
- children || description ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { className: "grid gap-0.5 leading-tight", children: [
4492
- children ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
4493
- description ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4539
+ children || description ? /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: "grid gap-0.5 leading-tight", children: [
4540
+ children ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
4541
+ description ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4494
4542
  "span",
4495
4543
  {
4496
4544
  "data-slot": "switch-description",
@@ -4506,9 +4554,9 @@ function Switch({
4506
4554
  }
4507
4555
 
4508
4556
  // src/ui/table/table.tsx
4509
- var import_jsx_runtime51 = require("react/jsx-runtime");
4557
+ var import_jsx_runtime56 = require("react/jsx-runtime");
4510
4558
  function Table({ className, ...props }) {
4511
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4559
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4512
4560
  "table",
4513
4561
  {
4514
4562
  "data-slot": "table",
@@ -4518,10 +4566,10 @@ function Table({ className, ...props }) {
4518
4566
  ) });
4519
4567
  }
4520
4568
  function TableHeader({ className, ...props }) {
4521
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
4569
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
4522
4570
  }
4523
4571
  function TableBody({ className, ...props }) {
4524
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4572
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4525
4573
  "tbody",
4526
4574
  {
4527
4575
  "data-slot": "table-body",
@@ -4531,7 +4579,7 @@ function TableBody({ className, ...props }) {
4531
4579
  );
4532
4580
  }
4533
4581
  function TableRow({ className, ...props }) {
4534
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4582
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4535
4583
  "tr",
4536
4584
  {
4537
4585
  "data-slot": "table-row",
@@ -4544,7 +4592,7 @@ function TableRow({ className, ...props }) {
4544
4592
  );
4545
4593
  }
4546
4594
  function TableHead({ className, ...props }) {
4547
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4595
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4548
4596
  "th",
4549
4597
  {
4550
4598
  "data-slot": "table-head",
@@ -4557,7 +4605,7 @@ function TableHead({ className, ...props }) {
4557
4605
  );
4558
4606
  }
4559
4607
  function TableCell({ className, ...props }) {
4560
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4608
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4561
4609
  "td",
4562
4610
  {
4563
4611
  "data-slot": "table-cell",
@@ -4567,7 +4615,7 @@ function TableCell({ className, ...props }) {
4567
4615
  );
4568
4616
  }
4569
4617
  function TableCaption({ className, ...props }) {
4570
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4618
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4571
4619
  "caption",
4572
4620
  {
4573
4621
  "data-slot": "table-caption",
@@ -4577,7 +4625,7 @@ function TableCaption({ className, ...props }) {
4577
4625
  );
4578
4626
  }
4579
4627
  function TableFooter({ className, ...props }) {
4580
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4628
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4581
4629
  "tfoot",
4582
4630
  {
4583
4631
  "data-slot": "table-footer",
@@ -4590,7 +4638,7 @@ function TableFooter({ className, ...props }) {
4590
4638
  );
4591
4639
  }
4592
4640
  function TableToolbar({ className, ...props }) {
4593
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4641
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4594
4642
  "div",
4595
4643
  {
4596
4644
  "data-slot": "table-toolbar",
@@ -4604,7 +4652,7 @@ function TableEmpty({
4604
4652
  className,
4605
4653
  children = "No hay resultados."
4606
4654
  }) {
4607
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TableRow, { "data-slot": "table-empty", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4655
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TableRow, { "data-slot": "table-empty", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4608
4656
  TableCell,
4609
4657
  {
4610
4658
  colSpan,
@@ -4618,7 +4666,7 @@ function TableLoading({
4618
4666
  className,
4619
4667
  children = "Cargando\u2026"
4620
4668
  }) {
4621
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TableRow, { "data-slot": "table-loading", "aria-busy": "true", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4669
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TableRow, { "data-slot": "table-loading", "aria-busy": "true", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4622
4670
  TableCell,
4623
4671
  {
4624
4672
  colSpan,
@@ -4630,9 +4678,9 @@ function TableLoading({
4630
4678
 
4631
4679
  // src/ui/tabs/tabs.tsx
4632
4680
  var import_react_aria_components26 = require("react-aria-components");
4633
- var import_jsx_runtime52 = require("react/jsx-runtime");
4681
+ var import_jsx_runtime57 = require("react/jsx-runtime");
4634
4682
  function Tabs({ className, ...props }) {
4635
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4683
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4636
4684
  import_react_aria_components26.Tabs,
4637
4685
  {
4638
4686
  "data-slot": "tabs",
@@ -4642,7 +4690,7 @@ function Tabs({ className, ...props }) {
4642
4690
  );
4643
4691
  }
4644
4692
  function TabsList({ className, ...props }) {
4645
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4693
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4646
4694
  import_react_aria_components26.TabList,
4647
4695
  {
4648
4696
  "data-slot": "tabs-list",
@@ -4658,7 +4706,7 @@ function TabsList({ className, ...props }) {
4658
4706
  );
4659
4707
  }
4660
4708
  function TabsTrigger({ className, ...props }) {
4661
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4709
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4662
4710
  import_react_aria_components26.Tab,
4663
4711
  {
4664
4712
  "data-slot": "tabs-trigger",
@@ -4674,10 +4722,10 @@ function TabsTrigger({ className, ...props }) {
4674
4722
  );
4675
4723
  }
4676
4724
  function TabsPanels({ className, ...props }) {
4677
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_aria_components26.TabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
4725
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_aria_components26.TabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
4678
4726
  }
4679
4727
  function TabsContent({ className, ...props }) {
4680
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4728
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4681
4729
  import_react_aria_components26.TabPanel,
4682
4730
  {
4683
4731
  "data-slot": "tabs-content",
@@ -4741,15 +4789,15 @@ function useToast() {
4741
4789
  }
4742
4790
 
4743
4791
  // src/ui/toast/toast.tsx
4744
- var import_jsx_runtime53 = require("react/jsx-runtime");
4792
+ var import_jsx_runtime58 = require("react/jsx-runtime");
4745
4793
  function ToastProvider({ children }) {
4746
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
4794
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment, { children: [
4747
4795
  children,
4748
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Toaster, {})
4796
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Toaster, {})
4749
4797
  ] });
4750
4798
  }
4751
4799
  function Toaster({ position }) {
4752
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_sileo2.Toaster, { position, options: { fill: "var(--ui-secondary)" } });
4800
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_sileo2.Toaster, { position, options: { fill: "var(--ui-secondary)" } });
4753
4801
  }
4754
4802
  function ToastViewport({
4755
4803
  position,
@@ -4758,7 +4806,7 @@ function ToastViewport({
4758
4806
  }) {
4759
4807
  void className;
4760
4808
  if (visiblePosition && visiblePosition !== position) return null;
4761
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Toaster, { position });
4809
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Toaster, { position });
4762
4810
  }
4763
4811
  function Toast({
4764
4812
  id,
@@ -4783,9 +4831,9 @@ function Toast({
4783
4831
  }
4784
4832
 
4785
4833
  // src/ui/toolbar/toolbar.tsx
4786
- var import_jsx_runtime54 = require("react/jsx-runtime");
4834
+ var import_jsx_runtime59 = require("react/jsx-runtime");
4787
4835
  function Toolbar({ className, ...props }) {
4788
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4836
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
4789
4837
  "div",
4790
4838
  {
4791
4839
  role: "toolbar",
@@ -4796,7 +4844,7 @@ function Toolbar({ className, ...props }) {
4796
4844
  );
4797
4845
  }
4798
4846
  function ToolbarGroup({ className, ...props }) {
4799
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4847
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
4800
4848
  "div",
4801
4849
  {
4802
4850
  "data-slot": "toolbar-group",
@@ -4806,7 +4854,7 @@ function ToolbarGroup({ className, ...props }) {
4806
4854
  );
4807
4855
  }
4808
4856
  function ToolbarSpacer({ className, ...props }) {
4809
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
4857
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
4810
4858
  }
4811
4859
  // Annotate the CommonJS export names for ESM import in node:
4812
4860
  0 && (module.exports = {