@doscientos/ui 0.1.32 → 0.1.33

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
@@ -1997,15 +1997,197 @@ function CommandItem({ className, ...props }) {
1997
1997
  );
1998
1998
  }
1999
1999
 
2000
- // src/ui/sheet/sheet.tsx
2000
+ // src/ui/confirm-dialog/confirm-dialog.tsx
2001
+ var import_jsx_runtime17 = require("react/jsx-runtime");
2002
+ function ConfirmDialog({
2003
+ open,
2004
+ onOpenChange,
2005
+ title,
2006
+ description,
2007
+ confirmLabel = "Confirmar",
2008
+ cancelLabel = "Cancelar",
2009
+ destructive = false,
2010
+ pending = false,
2011
+ onConfirm
2012
+ }) {
2013
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2014
+ AlertDialog,
2015
+ {
2016
+ open,
2017
+ onOpenChange: (nextOpen) => {
2018
+ if (!pending || nextOpen) onOpenChange(nextOpen);
2019
+ },
2020
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogContent, { children: [
2021
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogHeader, { children: [
2022
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialogTitle, { children: title }),
2023
+ description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialogDescription, { children: description }) : null
2024
+ ] }),
2025
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogFooter, { children: [
2026
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
2027
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2028
+ Button,
2029
+ {
2030
+ variant: destructive ? "destructive" : "default",
2031
+ isDisabled: pending,
2032
+ onPress: onConfirm,
2033
+ children: confirmLabel
2034
+ }
2035
+ )
2036
+ ] })
2037
+ ] })
2038
+ }
2039
+ );
2040
+ }
2041
+
2042
+ // src/ui/copy-button/copy-button.tsx
2001
2043
  var import_lucide_react4 = require("lucide-react");
2044
+ var import_jsx_runtime18 = require("react/jsx-runtime");
2045
+ function CopyButton({
2046
+ value,
2047
+ children,
2048
+ copiedLabel = "Copiado",
2049
+ resetMs,
2050
+ onCopied,
2051
+ onCopyError,
2052
+ ...props
2053
+ }) {
2054
+ const { copy, status } = useClipboard({ resetMs, onError: onCopyError });
2055
+ const copied = status === "copied";
2056
+ const label = copied ? copiedLabel : children ?? "Copiar";
2057
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2058
+ Button,
2059
+ {
2060
+ "aria-label": typeof label === "string" ? label : void 0,
2061
+ onPress: () => {
2062
+ void copy(value).then((wasCopied) => {
2063
+ if (wasCopied) onCopied?.(value);
2064
+ });
2065
+ },
2066
+ ...props,
2067
+ children: [
2068
+ 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" }),
2069
+ label
2070
+ ]
2071
+ }
2072
+ );
2073
+ }
2074
+
2075
+ // src/ui/danger-zone/danger-zone.tsx
2076
+ var import_lucide_react5 = require("lucide-react");
2002
2077
  var import_react_aria_components11 = require("react-aria-components");
2003
- var import_jsx_runtime17 = require("react/jsx-runtime");
2078
+ var import_jsx_runtime19 = require("react/jsx-runtime");
2079
+ function DangerZone({
2080
+ title = "Zona de peligro",
2081
+ description = "Acciones irreversibles. \xC1brela solo si est\xE1s seguro.",
2082
+ defaultOpen = false,
2083
+ className,
2084
+ children
2085
+ }) {
2086
+ 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: [
2087
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components11.Heading, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2088
+ import_react_aria_components11.Button,
2089
+ {
2090
+ slot: "trigger",
2091
+ "data-slot": "danger-zone-trigger",
2092
+ 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",
2093
+ children: [
2094
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.ShieldAlert, { className: "text-destructive size-4 shrink-0" }),
2095
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "flex flex-1 flex-col gap-0.5", children: [
2096
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "font-heading text-destructive text-base leading-snug font-medium", children: title }),
2097
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-muted-foreground text-xs", children: description })
2098
+ ] }),
2099
+ /* @__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" })
2100
+ ]
2101
+ }
2102
+ ) }),
2103
+ /* @__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 }) })
2104
+ ] }) });
2105
+ }
2106
+
2107
+ // src/ui/data-view-state/data-view-state.tsx
2108
+ var import_jsx_runtime20 = require("react/jsx-runtime");
2109
+ function DataViewState({ className, ...props }) {
2110
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2111
+ "section",
2112
+ {
2113
+ "data-slot": "data-view-state",
2114
+ className: cn(
2115
+ "flex min-h-40 flex-col items-center justify-center gap-3 rounded-xl border p-6 text-center",
2116
+ className
2117
+ ),
2118
+ ...props
2119
+ }
2120
+ );
2121
+ }
2122
+ function DataViewStateTitle({ children, className, ...props }) {
2123
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h2", { "data-slot": "data-view-state-title", className: cn("font-semibold", className), ...props, children });
2124
+ }
2125
+ function DataViewStateDescription({ className, ...props }) {
2126
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2127
+ "p",
2128
+ {
2129
+ "data-slot": "data-view-state-description",
2130
+ className: cn("text-sm text-muted-foreground", className),
2131
+ ...props
2132
+ }
2133
+ );
2134
+ }
2135
+ function DataViewStateActions({ className, ...props }) {
2136
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2137
+ "div",
2138
+ {
2139
+ "data-slot": "data-view-state-actions",
2140
+ className: cn("flex items-center gap-2", className),
2141
+ ...props
2142
+ }
2143
+ );
2144
+ }
2145
+
2146
+ // src/ui/description-list/description-list.tsx
2147
+ var import_jsx_runtime21 = require("react/jsx-runtime");
2148
+ function DescriptionList({ className, ...props }) {
2149
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2150
+ "dl",
2151
+ {
2152
+ "data-slot": "description-list",
2153
+ className: cn("grid gap-x-6 gap-y-4 sm:grid-cols-2", className),
2154
+ ...props
2155
+ }
2156
+ );
2157
+ }
2158
+ function DescriptionItem({ className, ...props }) {
2159
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "data-slot": "description-item", className: cn("min-w-0", className), ...props });
2160
+ }
2161
+ function DescriptionTerm({ className, ...props }) {
2162
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2163
+ "dt",
2164
+ {
2165
+ "data-slot": "description-term",
2166
+ className: cn("text-xs font-medium text-muted-foreground", className),
2167
+ ...props
2168
+ }
2169
+ );
2170
+ }
2171
+ function DescriptionDetails({ className, ...props }) {
2172
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2173
+ "dd",
2174
+ {
2175
+ "data-slot": "description-details",
2176
+ className: cn("mt-1 wrap-break-word text-sm", className),
2177
+ ...props
2178
+ }
2179
+ );
2180
+ }
2181
+
2182
+ // src/ui/drawer/drawer.tsx
2183
+ var import_lucide_react6 = require("lucide-react");
2184
+ var import_react_aria_components12 = require("react-aria-components");
2185
+ var import_jsx_runtime22 = require("react/jsx-runtime");
2004
2186
  function DrawerTrigger({ ...props }) {
2005
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.DialogTrigger, { "data-slot": "drawer-trigger", ...props });
2187
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components12.DialogTrigger, { "data-slot": "drawer-trigger", ...props });
2006
2188
  }
2007
2189
  function DrawerClose({ className, variant = "outline", size = "default", ...props }) {
2008
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2190
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2009
2191
  Button,
2010
2192
  {
2011
2193
  slot: "close",
@@ -2022,8 +2204,8 @@ function DrawerOverlay({
2022
2204
  children,
2023
2205
  ...props
2024
2206
  }) {
2025
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2026
- import_react_aria_components11.ModalOverlay,
2207
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2208
+ import_react_aria_components12.ModalOverlay,
2027
2209
  {
2028
2210
  "data-slot": "drawer-overlay",
2029
2211
  isDismissable: true,
@@ -2044,8 +2226,8 @@ function DrawerContent({
2044
2226
  showCloseButton = true,
2045
2227
  ...props
2046
2228
  }) {
2047
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DrawerOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2048
- import_react_aria_components11.Modal,
2229
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DrawerOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2230
+ import_react_aria_components12.Modal,
2049
2231
  {
2050
2232
  "data-slot": "drawer-content",
2051
2233
  "data-side": side,
@@ -2053,17 +2235,17 @@ function DrawerContent({
2053
2235
  "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
2236
  className
2055
2237
  ),
2056
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
2057
- import_react_aria_components11.Dialog,
2238
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2239
+ import_react_aria_components12.Dialog,
2058
2240
  {
2059
2241
  "data-slot": "drawer",
2060
2242
  className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
2061
2243
  ...dialogProps,
2062
2244
  children: [
2063
2245
  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" })
2246
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DrawerClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2247
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react6.XIcon, {}),
2248
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "sr-only", children: "Cerrar" })
2067
2249
  ] })
2068
2250
  ]
2069
2251
  }
@@ -2072,16 +2254,16 @@ function DrawerContent({
2072
2254
  ) });
2073
2255
  }
2074
2256
  function Drawer(props) {
2075
- if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DrawerContent, { ...props });
2257
+ if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DrawerContent, { ...props });
2076
2258
  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: [
2259
+ const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
2260
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DrawerTrigger, { defaultOpen, isOpen, onOpenChange, children: [
2079
2261
  triggerElement,
2080
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(DrawerContent, { ...contentProps, children })
2262
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DrawerContent, { ...contentProps, children })
2081
2263
  ] });
2082
2264
  }
2083
2265
  function DrawerHeader({ className, ...props }) {
2084
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2266
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2085
2267
  "div",
2086
2268
  {
2087
2269
  "data-slot": "drawer-header",
@@ -2091,7 +2273,7 @@ function DrawerHeader({ className, ...props }) {
2091
2273
  );
2092
2274
  }
2093
2275
  function DrawerFooter({ className, ...props }) {
2094
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2276
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2095
2277
  "div",
2096
2278
  {
2097
2279
  "data-slot": "drawer-footer",
@@ -2101,8 +2283,8 @@ function DrawerFooter({ className, ...props }) {
2101
2283
  );
2102
2284
  }
2103
2285
  function DrawerTitle({ className, ...props }) {
2104
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2105
- import_react_aria_components11.Heading,
2286
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2287
+ import_react_aria_components12.Heading,
2106
2288
  {
2107
2289
  slot: "title",
2108
2290
  "data-slot": "drawer-title",
@@ -2115,8 +2297,8 @@ function DrawerDescription({
2115
2297
  className,
2116
2298
  ...props
2117
2299
  }) {
2118
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2119
- import_react_aria_components11.Text,
2300
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2301
+ import_react_aria_components12.Text,
2120
2302
  {
2121
2303
  slot: "description",
2122
2304
  "data-slot": "drawer-description",
@@ -2134,281 +2316,29 @@ var SheetHeader = DrawerHeader;
2134
2316
  var SheetTitle = DrawerTitle;
2135
2317
  var SheetTrigger = DrawerTrigger;
2136
2318
 
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
- }
2319
+ // src/ui/detail-drawer/detail-drawer.tsx
2320
+ var import_jsx_runtime23 = require("react/jsx-runtime");
2284
2321
  function DetailDrawer({ children, ...props }) {
2285
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(DrawerContent, { ...props, children });
2322
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DrawerContent, { ...props, children });
2286
2323
  }
2287
2324
  function DetailDrawerBody({ className, ...props }) {
2288
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2325
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2289
2326
  "div",
2290
2327
  {
2291
2328
  "data-slot": "detail-drawer-body",
2292
- 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
- ]
2329
+ className: cn("min-h-0 flex-1 overflow-y-auto px-4", className),
2330
+ ...props
2369
2331
  }
2370
2332
  );
2371
2333
  }
2372
2334
 
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
2335
  // src/ui/doc-preview/doc-preview.tsx
2406
2336
  var import_lucide_react7 = require("lucide-react");
2407
- var import_jsx_runtime22 = require("react/jsx-runtime");
2337
+ var import_jsx_runtime24 = require("react/jsx-runtime");
2408
2338
  function DocPreview({ url, mimeType, name }) {
2409
- if (!url) return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Fallback, { mimeType, reason: "no-url" });
2339
+ if (!url) return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Fallback, { mimeType, reason: "no-url" });
2410
2340
  if (mimeType === "application/pdf" || mimeType === "text/plain" || mimeType === "text/csv") {
2411
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2341
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2412
2342
  "iframe",
2413
2343
  {
2414
2344
  src: url,
@@ -2419,9 +2349,9 @@ function DocPreview({ url, mimeType, name }) {
2419
2349
  );
2420
2350
  }
2421
2351
  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" }) });
2352
+ 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
2353
  }
2424
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Fallback, { mimeType, reason: "unsupported" });
2354
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Fallback, { mimeType, reason: "unsupported" });
2425
2355
  }
2426
2356
  function Fallback({
2427
2357
  mimeType,
@@ -2429,11 +2359,11 @@ function Fallback({
2429
2359
  }) {
2430
2360
  const Icon = mimeType?.startsWith("image/") ? import_lucide_react7.Image : import_lucide_react7.FileText;
2431
2361
  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." })
2362
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "text-muted-foreground flex flex-col items-center justify-center gap-2 py-14", children: [
2363
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Icon, { className: "size-9 opacity-30" }),
2364
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-sm", children: message }),
2365
+ mimeType ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
2366
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
2437
2367
  ] });
2438
2368
  }
2439
2369
 
@@ -2442,9 +2372,9 @@ var import_class_variance_authority6 = require("class-variance-authority");
2442
2372
  var import_lucide_react8 = require("lucide-react");
2443
2373
  var React5 = require("react");
2444
2374
  var import_react_aria_components13 = require("react-aria-components");
2445
- var import_jsx_runtime23 = require("react/jsx-runtime");
2375
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2446
2376
  function DropdownMenuTrigger({ ...props }) {
2447
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components13.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
2377
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components13.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
2448
2378
  }
2449
2379
  function DropdownMenuContent({
2450
2380
  "data-slot": dataSlot = "dropdown-menu-content",
@@ -2455,7 +2385,7 @@ function DropdownMenuContent({
2455
2385
  children,
2456
2386
  ...props
2457
2387
  }) {
2458
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2388
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2459
2389
  import_react_aria_components13.Popover,
2460
2390
  {
2461
2391
  "data-slot": dataSlot,
@@ -2467,7 +2397,7 @@ function DropdownMenuContent({
2467
2397
  "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
2398
  className
2469
2399
  ),
2470
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2400
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2471
2401
  import_react_aria_components13.Menu,
2472
2402
  {
2473
2403
  className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
@@ -2479,25 +2409,25 @@ function DropdownMenuContent({
2479
2409
  );
2480
2410
  }
2481
2411
  function DropdownMenu(props) {
2482
- if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DropdownMenuContent, { ...props });
2412
+ if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropdownMenuContent, { ...props });
2483
2413
  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: [
2414
+ const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
2415
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(DropdownMenuTrigger, { defaultOpen, isOpen, onOpenChange, children: [
2486
2416
  triggerElement,
2487
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DropdownMenuContent, { ...contentProps, children })
2417
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(DropdownMenuContent, { ...contentProps, children })
2488
2418
  ] });
2489
2419
  }
2490
2420
  function DropdownMenuGroup({
2491
2421
  ...props
2492
2422
  }) {
2493
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components13.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
2423
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components13.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
2494
2424
  }
2495
2425
  function DropdownMenuLabel({
2496
2426
  className,
2497
2427
  inset,
2498
2428
  ...props
2499
2429
  }) {
2500
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2430
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2501
2431
  import_react_aria_components13.Header,
2502
2432
  {
2503
2433
  "data-slot": "dropdown-menu-label",
@@ -2529,7 +2459,7 @@ function DropdownMenuItem({
2529
2459
  children,
2530
2460
  ...props
2531
2461
  }) {
2532
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2462
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2533
2463
  import_react_aria_components13.MenuItem,
2534
2464
  {
2535
2465
  "data-slot": "dropdown-menu-item",
@@ -2541,13 +2471,13 @@ function DropdownMenuItem({
2541
2471
  (className2, { selectionMode }) => cn(dropdownMenuItemVariants({ selectionMode }), className2)
2542
2472
  ),
2543
2473
  ...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)(
2474
+ children: (0, import_react_aria_components13.composeRenderProps)(children, (children2, { isSelected, selectionMode }) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
2475
+ selectionMode !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2546
2476
  "span",
2547
2477
  {
2548
2478
  className: "pointer-events-none absolute right-2 flex items-center justify-center",
2549
2479
  "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
2480
+ children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react8.CheckIcon, {}) : null
2551
2481
  }
2552
2482
  ) : null,
2553
2483
  children2
@@ -2556,7 +2486,7 @@ function DropdownMenuItem({
2556
2486
  );
2557
2487
  }
2558
2488
  function DropdownMenuSub({ ...props }) {
2559
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components13.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
2489
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components13.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
2560
2490
  }
2561
2491
  function DropdownMenuSubTrigger({
2562
2492
  className,
@@ -2564,7 +2494,7 @@ function DropdownMenuSubTrigger({
2564
2494
  children,
2565
2495
  ...props
2566
2496
  }) {
2567
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2497
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2568
2498
  import_react_aria_components13.MenuItem,
2569
2499
  {
2570
2500
  "data-slot": "dropdown-menu-sub-trigger",
@@ -2575,9 +2505,9 @@ function DropdownMenuSubTrigger({
2575
2505
  className
2576
2506
  ),
2577
2507
  ...props,
2578
- children: (0, import_react_aria_components13.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
2508
+ children: (0, import_react_aria_components13.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
2579
2509
  children2,
2580
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react8.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
2510
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react8.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
2581
2511
  ] }))
2582
2512
  }
2583
2513
  );
@@ -2589,7 +2519,7 @@ function DropdownMenuSubContent({
2589
2519
  className,
2590
2520
  ...props
2591
2521
  }) {
2592
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2522
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2593
2523
  DropdownMenuContent,
2594
2524
  {
2595
2525
  "data-slot": "dropdown-menu-sub-content",
@@ -2608,7 +2538,7 @@ function DropdownMenuSeparator({
2608
2538
  className,
2609
2539
  ...props
2610
2540
  }) {
2611
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2541
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2612
2542
  import_react_aria_components13.Separator,
2613
2543
  {
2614
2544
  "data-slot": "dropdown-menu-separator",
@@ -2618,7 +2548,7 @@ function DropdownMenuSeparator({
2618
2548
  );
2619
2549
  }
2620
2550
  function DropdownMenuShortcut({ className, ...props }) {
2621
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2551
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2622
2552
  "span",
2623
2553
  {
2624
2554
  "data-slot": "dropdown-menu-shortcut",
@@ -2647,9 +2577,9 @@ var emptyStateMediaVariants = (0, import_class_variance_authority7.cva)(
2647
2577
  );
2648
2578
 
2649
2579
  // src/ui/empty-state/empty-state.tsx
2650
- var import_jsx_runtime24 = require("react/jsx-runtime");
2580
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2651
2581
  function EmptyState({ className, ...props }) {
2652
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2582
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2653
2583
  "div",
2654
2584
  {
2655
2585
  "data-slot": "empty-state",
@@ -2662,7 +2592,7 @@ function EmptyState({ className, ...props }) {
2662
2592
  );
2663
2593
  }
2664
2594
  function EmptyStateHeader({ className, ...props }) {
2665
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2595
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2666
2596
  "div",
2667
2597
  {
2668
2598
  "data-slot": "empty-state-header",
@@ -2676,7 +2606,7 @@ function EmptyStateMedia({
2676
2606
  variant = "default",
2677
2607
  ...props
2678
2608
  }) {
2679
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2609
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2680
2610
  "div",
2681
2611
  {
2682
2612
  "data-slot": "empty-state-media",
@@ -2687,7 +2617,7 @@ function EmptyStateMedia({
2687
2617
  );
2688
2618
  }
2689
2619
  function EmptyStateTitle({ className, children, ...props }) {
2690
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2620
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2691
2621
  "h3",
2692
2622
  {
2693
2623
  "data-slot": "empty-state-title",
@@ -2698,7 +2628,7 @@ function EmptyStateTitle({ className, children, ...props }) {
2698
2628
  );
2699
2629
  }
2700
2630
  function EmptyStateDescription({ className, ...props }) {
2701
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2631
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2702
2632
  "p",
2703
2633
  {
2704
2634
  "data-slot": "empty-state-description",
@@ -2711,7 +2641,7 @@ function EmptyStateDescription({ className, ...props }) {
2711
2641
  );
2712
2642
  }
2713
2643
  function EmptyStateContent({ className, ...props }) {
2714
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2644
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2715
2645
  "div",
2716
2646
  {
2717
2647
  "data-slot": "empty-state-content",
@@ -2729,9 +2659,9 @@ var import_react9 = require("react");
2729
2659
 
2730
2660
  // src/ui/error-state/error-state.tsx
2731
2661
  var import_lucide_react9 = require("lucide-react");
2732
- var import_jsx_runtime25 = require("react/jsx-runtime");
2662
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2733
2663
  function ErrorState({ className, ...props }) {
2734
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2664
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2735
2665
  "section",
2736
2666
  {
2737
2667
  "data-slot": "error-state",
@@ -2748,7 +2678,7 @@ function ErrorStateIcon({
2748
2678
  className,
2749
2679
  ...props
2750
2680
  }) {
2751
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2681
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2752
2682
  import_lucide_react9.AlertCircle,
2753
2683
  {
2754
2684
  "data-slot": "error-state-icon",
@@ -2759,7 +2689,7 @@ function ErrorStateIcon({
2759
2689
  );
2760
2690
  }
2761
2691
  function ErrorStateTitle({ className, ...props }) {
2762
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2692
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2763
2693
  "h2",
2764
2694
  {
2765
2695
  "data-slot": "error-state-title",
@@ -2769,7 +2699,7 @@ function ErrorStateTitle({ className, ...props }) {
2769
2699
  );
2770
2700
  }
2771
2701
  function ErrorStateDescription({ className, ...props }) {
2772
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2702
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2773
2703
  "p",
2774
2704
  {
2775
2705
  "data-slot": "error-state-description",
@@ -2779,7 +2709,7 @@ function ErrorStateDescription({ className, ...props }) {
2779
2709
  );
2780
2710
  }
2781
2711
  function ErrorStateActions({ className, ...props }) {
2782
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2712
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2783
2713
  "div",
2784
2714
  {
2785
2715
  "data-slot": "error-state-actions",
@@ -2790,7 +2720,7 @@ function ErrorStateActions({ className, ...props }) {
2790
2720
  }
2791
2721
 
2792
2722
  // src/ui/error-boundary/error-boundary.tsx
2793
- var import_jsx_runtime26 = require("react/jsx-runtime");
2723
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2794
2724
  function changedResetKeys(previous = [], next = []) {
2795
2725
  return previous.length !== next.length || previous.some((value, index) => !Object.is(value, next[index]));
2796
2726
  }
@@ -2813,31 +2743,31 @@ var Boundary = class extends import_react9.Component {
2813
2743
  if (typeof fallback === "function")
2814
2744
  return fallback({ error: this.state.error, reset: this.reset });
2815
2745
  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" }) })
2746
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(ErrorState, { children: [
2747
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ErrorStateIcon, {}),
2748
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ErrorStateTitle, { children: "No se pudo cargar este contenido" }),
2749
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ErrorStateDescription, { children: "Prueba a cargarlo de nuevo." }),
2750
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ErrorStateActions, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Button, { onPress: this.reset, children: "Reintentar" }) })
2821
2751
  ] });
2822
2752
  }
2823
2753
  };
2824
2754
  function ErrorBoundary(props) {
2825
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Boundary, { ...props });
2755
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Boundary, { ...props });
2826
2756
  }
2827
2757
  function AsyncBoundary({
2828
2758
  pending = null,
2829
2759
  ...props
2830
2760
  }) {
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 }) });
2761
+ 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
2762
  }
2833
2763
 
2834
2764
  // src/ui/label/label.tsx
2835
2765
  var import_react10 = require("react");
2836
2766
  var import_react_aria_components14 = require("react-aria-components");
2837
- var import_jsx_runtime27 = require("react/jsx-runtime");
2767
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2838
2768
  var Label2 = (0, import_react10.forwardRef)(
2839
2769
  function Label3({ className, ...props }, ref) {
2840
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2770
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2841
2771
  import_react_aria_components14.Label,
2842
2772
  {
2843
2773
  ref,
@@ -2869,16 +2799,16 @@ var fieldVariants = (0, import_class_variance_authority8.cva)(
2869
2799
  );
2870
2800
 
2871
2801
  // src/ui/field/field.tsx
2872
- var import_jsx_runtime28 = require("react/jsx-runtime");
2802
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2873
2803
  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 });
2804
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
2875
2805
  }
2876
2806
  function FieldLegend({
2877
2807
  className,
2878
2808
  variant = "legend",
2879
2809
  ...props
2880
2810
  }) {
2881
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2811
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2882
2812
  "legend",
2883
2813
  {
2884
2814
  "data-slot": "field-legend",
@@ -2892,7 +2822,7 @@ function FieldLegend({
2892
2822
  );
2893
2823
  }
2894
2824
  function FieldGroup({ className, ...props }) {
2895
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2825
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2896
2826
  "div",
2897
2827
  {
2898
2828
  "data-slot": "field-group",
@@ -2907,7 +2837,7 @@ function FieldGroup({ className, ...props }) {
2907
2837
  function Field({ className, orientation = "vertical", ...props }) {
2908
2838
  return (
2909
2839
  // biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
2910
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2840
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2911
2841
  "div",
2912
2842
  {
2913
2843
  role: "group",
@@ -2920,7 +2850,7 @@ function Field({ className, orientation = "vertical", ...props }) {
2920
2850
  );
2921
2851
  }
2922
2852
  function FieldContent({ className, ...props }) {
2923
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2853
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2924
2854
  "div",
2925
2855
  {
2926
2856
  "data-slot": "field-content",
@@ -2930,7 +2860,7 @@ function FieldContent({ className, ...props }) {
2930
2860
  );
2931
2861
  }
2932
2862
  function FieldLabel({ className, ...props }) {
2933
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2863
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2934
2864
  Label2,
2935
2865
  {
2936
2866
  "data-slot": "field-label",
@@ -2943,7 +2873,7 @@ function FieldLabel({ className, ...props }) {
2943
2873
  );
2944
2874
  }
2945
2875
  function FieldTitle({ className, ...props }) {
2946
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2876
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2947
2877
  "div",
2948
2878
  {
2949
2879
  "data-slot": "field-title",
@@ -2953,7 +2883,7 @@ function FieldTitle({ className, ...props }) {
2953
2883
  );
2954
2884
  }
2955
2885
  function FieldDescription({ className, ...props }) {
2956
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2886
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2957
2887
  "p",
2958
2888
  {
2959
2889
  "data-slot": "field-description",
@@ -2966,7 +2896,7 @@ function FieldDescription({ className, ...props }) {
2966
2896
  );
2967
2897
  }
2968
2898
  function FieldSeparator({ className, children, ...props }) {
2969
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2899
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2970
2900
  "div",
2971
2901
  {
2972
2902
  "data-slot": "field-separator",
@@ -2974,8 +2904,8 @@ function FieldSeparator({ className, children, ...props }) {
2974
2904
  className: cn("relative -my-2 h-5 text-sm", className),
2975
2905
  ...props,
2976
2906
  children: [
2977
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
2978
- children ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2907
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
2908
+ children ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2979
2909
  "span",
2980
2910
  {
2981
2911
  "data-slot": "field-separator-content",
@@ -2989,9 +2919,9 @@ function FieldSeparator({ className, children, ...props }) {
2989
2919
  }
2990
2920
  function FieldError2({ className, children, errors, ...props }) {
2991
2921
  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);
2922
+ 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
2923
  if (!content) return null;
2994
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2924
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2995
2925
  "div",
2996
2926
  {
2997
2927
  role: "alert",
@@ -3003,9 +2933,53 @@ function FieldError2({ className, children, errors, ...props }) {
3003
2933
  );
3004
2934
  }
3005
2935
 
2936
+ // src/ui/filter-bar/filter-bar.tsx
2937
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2938
+ function FilterBar({ className, ...props }) {
2939
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2940
+ "div",
2941
+ {
2942
+ "data-slot": "filter-bar",
2943
+ className: cn("flex flex-wrap items-center gap-2", className),
2944
+ ...props
2945
+ }
2946
+ );
2947
+ }
2948
+ function FilterGroup({ className, ...props }) {
2949
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2950
+ "div",
2951
+ {
2952
+ "data-slot": "filter-group",
2953
+ className: cn("flex flex-wrap items-center gap-2", className),
2954
+ ...props
2955
+ }
2956
+ );
2957
+ }
2958
+ function ActiveFilters({ className, ...props }) {
2959
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2960
+ "div",
2961
+ {
2962
+ "data-slot": "active-filters",
2963
+ "aria-label": "Filtros activos",
2964
+ className: cn("flex flex-wrap items-center gap-1.5", className),
2965
+ ...props
2966
+ }
2967
+ );
2968
+ }
2969
+ function FilterChip({
2970
+ children,
2971
+ onRemove,
2972
+ ...props
2973
+ }) {
2974
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(Button, { size: "sm", variant: "outline", onPress: onRemove, ...props, children: [
2975
+ children,
2976
+ " \xD7"
2977
+ ] });
2978
+ }
2979
+
3006
2980
  // src/ui/form-feedback/form-feedback.tsx
3007
2981
  var import_lucide_react10 = require("lucide-react");
3008
- var import_jsx_runtime29 = require("react/jsx-runtime");
2982
+ var import_jsx_runtime32 = require("react/jsx-runtime");
3009
2983
  function FormFeedback({
3010
2984
  state,
3011
2985
  className,
@@ -3013,10 +2987,10 @@ function FormFeedback({
3013
2987
  successLabel = "Guardado"
3014
2988
  }) {
3015
2989
  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) });
2990
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
3017
2991
  const error = state.status === "error";
3018
2992
  const success = state.status === "success";
3019
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
2993
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
3020
2994
  "span",
3021
2995
  {
3022
2996
  role: error ? "alert" : "status",
@@ -3029,10 +3003,10 @@ function FormFeedback({
3029
3003
  className
3030
3004
  ),
3031
3005
  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 })
3006
+ state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react10.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
3007
+ success && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react10.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
3008
+ error && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react10.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
3009
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
3036
3010
  ]
3037
3011
  }
3038
3012
  );
@@ -3076,7 +3050,7 @@ function useFormFeedback(options) {
3076
3050
  }
3077
3051
 
3078
3052
  // src/ui/form-row/form-row.tsx
3079
- var import_jsx_runtime30 = require("react/jsx-runtime");
3053
+ var import_jsx_runtime33 = require("react/jsx-runtime");
3080
3054
  function FormRow({
3081
3055
  label,
3082
3056
  htmlFor,
@@ -3088,17 +3062,17 @@ function FormRow({
3088
3062
  }) {
3089
3063
  const hintId = hint ? `${htmlFor}-hint` : void 0;
3090
3064
  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: [
3065
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
3066
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("label", { htmlFor, className: "text-foreground text-sm font-medium", children: [
3093
3067
  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)" })
3068
+ required && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
3069
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { "aria-hidden": "true", className: "text-destructive ml-0.5", children: "*" }),
3070
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "sr-only", children: " (obligatorio)" })
3097
3071
  ] })
3098
3072
  ] }),
3099
3073
  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 })
3074
+ hint && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { id: hintId, className: "text-muted-foreground text-xs", children: hint }),
3075
+ error && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { id: errorId, role: "alert", className: "text-destructive text-xs font-medium", children: error })
3102
3076
  ] });
3103
3077
  }
3104
3078
 
@@ -3107,17 +3081,17 @@ var import_react_aria_components16 = require("react-aria-components");
3107
3081
 
3108
3082
  // src/ui/tooltip/tooltip.tsx
3109
3083
  var import_react_aria_components15 = require("react-aria-components");
3110
- var import_jsx_runtime31 = require("react/jsx-runtime");
3084
+ var import_jsx_runtime34 = require("react/jsx-runtime");
3111
3085
  function TooltipTrigger({
3112
3086
  delay = 0,
3113
3087
  ...props
3114
3088
  }) {
3115
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_aria_components15.TooltipTrigger, { "data-slot": "tooltip-trigger", delay, ...props });
3089
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_aria_components15.TooltipTrigger, { "data-slot": "tooltip-trigger", delay, ...props });
3116
3090
  }
3117
3091
  function Tooltip({ label, children, delay, ...props }) {
3118
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(TooltipTrigger, { delay, children: [
3092
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(TooltipTrigger, { delay, children: [
3119
3093
  children,
3120
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(TooltipContent, { ...props, children: label })
3094
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(TooltipContent, { ...props, children: label })
3121
3095
  ] });
3122
3096
  }
3123
3097
  function TooltipContent({
@@ -3128,7 +3102,7 @@ function TooltipContent({
3128
3102
  children,
3129
3103
  ...props
3130
3104
  }) {
3131
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
3105
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
3132
3106
  import_react_aria_components15.Tooltip,
3133
3107
  {
3134
3108
  "data-slot": "tooltip-content",
@@ -3142,7 +3116,7 @@ function TooltipContent({
3142
3116
  ...props,
3143
3117
  children: [
3144
3118
  children,
3145
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
3119
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3146
3120
  import_react_aria_components15.OverlayArrow,
3147
3121
  {
3148
3122
  className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs",
@@ -3160,7 +3134,7 @@ function TooltipContent({
3160
3134
  }
3161
3135
 
3162
3136
  // src/ui/icon-button/icon-button.tsx
3163
- var import_jsx_runtime32 = require("react/jsx-runtime");
3137
+ var import_jsx_runtime35 = require("react/jsx-runtime");
3164
3138
  function IconButton({
3165
3139
  label,
3166
3140
  children,
@@ -3170,7 +3144,7 @@ function IconButton({
3170
3144
  ...props
3171
3145
  }) {
3172
3146
  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)(
3147
+ 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
3148
  Button,
3175
3149
  {
3176
3150
  "data-slot": "icon-button",
@@ -3190,9 +3164,9 @@ var import_class_variance_authority10 = require("class-variance-authority");
3190
3164
  // src/ui/input/input.tsx
3191
3165
  var import_react12 = require("react");
3192
3166
  var import_react_aria_components17 = require("react-aria-components");
3193
- var import_jsx_runtime33 = require("react/jsx-runtime");
3167
+ var import_jsx_runtime36 = require("react/jsx-runtime");
3194
3168
  var InputImpl = (0, import_react12.forwardRef)(function Input2({ className, type, ...props }, ref) {
3195
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
3169
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3196
3170
  import_react_aria_components17.Input,
3197
3171
  {
3198
3172
  ref,
@@ -3211,9 +3185,9 @@ var Input3 = InputImpl;
3211
3185
  // src/ui/textarea/textarea.tsx
3212
3186
  var import_react13 = require("react");
3213
3187
  var import_react_aria_components18 = require("react-aria-components");
3214
- var import_jsx_runtime34 = require("react/jsx-runtime");
3188
+ var import_jsx_runtime37 = require("react/jsx-runtime");
3215
3189
  var TextareaImpl = (0, import_react13.forwardRef)(function Textarea({ className, ...props }, ref) {
3216
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3190
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3217
3191
  import_react_aria_components18.TextArea,
3218
3192
  {
3219
3193
  ref,
@@ -3246,12 +3220,12 @@ var inputGroupAddonVariants = (0, import_class_variance_authority9.cva)(
3246
3220
  );
3247
3221
 
3248
3222
  // src/ui/input-group/input-group.tsx
3249
- var import_jsx_runtime35 = (
3223
+ var import_jsx_runtime38 = (
3250
3224
  // biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
3251
3225
  require("react/jsx-runtime")
3252
3226
  );
3253
3227
  function InputGroup({ className, ...props }) {
3254
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3228
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3255
3229
  "div",
3256
3230
  {
3257
3231
  role: "group",
@@ -3272,7 +3246,7 @@ function InputGroupAddon({
3272
3246
  }) {
3273
3247
  return (
3274
3248
  // biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
3275
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3249
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3276
3250
  "div",
3277
3251
  {
3278
3252
  role: "group",
@@ -3303,7 +3277,7 @@ function InputGroupButton({
3303
3277
  ...props
3304
3278
  }) {
3305
3279
  const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
3306
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3280
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3307
3281
  Button,
3308
3282
  {
3309
3283
  "data-slot": "input-group-button",
@@ -3316,7 +3290,7 @@ function InputGroupButton({
3316
3290
  );
3317
3291
  }
3318
3292
  function InputGroupText({ className, ...props }) {
3319
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3293
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3320
3294
  "span",
3321
3295
  {
3322
3296
  "data-slot": "input-group-text",
@@ -3329,7 +3303,7 @@ function InputGroupText({ className, ...props }) {
3329
3303
  );
3330
3304
  }
3331
3305
  function InputGroupInput({ className, ...props }) {
3332
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3306
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3333
3307
  Input3,
3334
3308
  {
3335
3309
  "data-slot": "input-group-control",
@@ -3342,7 +3316,7 @@ function InputGroupInput({ className, ...props }) {
3342
3316
  );
3343
3317
  }
3344
3318
  function InputGroupTextarea({ className, ...props }) {
3345
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3319
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3346
3320
  Textarea2,
3347
3321
  {
3348
3322
  "data-slot": "input-group-control",
@@ -3356,7 +3330,7 @@ function InputGroupTextarea({ className, ...props }) {
3356
3330
  }
3357
3331
 
3358
3332
  // src/ui/kanban/kanban.tsx
3359
- var import_jsx_runtime36 = require("react/jsx-runtime");
3333
+ var import_jsx_runtime39 = require("react/jsx-runtime");
3360
3334
  var columnSize = {
3361
3335
  compact: "w-56",
3362
3336
  default: "w-72",
@@ -3368,13 +3342,13 @@ function KanbanViewport({
3368
3342
  contentClassName,
3369
3343
  ...props
3370
3344
  }) {
3371
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3345
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3372
3346
  "div",
3373
3347
  {
3374
3348
  "data-slot": "kanban-viewport",
3375
3349
  className: cn("-mx-1 overflow-x-auto pb-3", className),
3376
3350
  ...props,
3377
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3351
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3378
3352
  "div",
3379
3353
  {
3380
3354
  "data-slot": "kanban-viewport-content",
@@ -3390,7 +3364,7 @@ function KanbanColumn({
3390
3364
  size = "default",
3391
3365
  ...props
3392
3366
  }) {
3393
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3367
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3394
3368
  "section",
3395
3369
  {
3396
3370
  "data-slot": "kanban-column",
@@ -3401,7 +3375,7 @@ function KanbanColumn({
3401
3375
  );
3402
3376
  }
3403
3377
  function KanbanColumnHeader({ className, ...props }) {
3404
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3378
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3405
3379
  "header",
3406
3380
  {
3407
3381
  "data-slot": "kanban-column-header",
@@ -3411,7 +3385,7 @@ function KanbanColumnHeader({ className, ...props }) {
3411
3385
  );
3412
3386
  }
3413
3387
  function KanbanColumnTitle({ className, ...props }) {
3414
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3388
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3415
3389
  "span",
3416
3390
  {
3417
3391
  "data-slot": "kanban-column-title",
@@ -3424,14 +3398,14 @@ function KanbanColumnTitle({ className, ...props }) {
3424
3398
  );
3425
3399
  }
3426
3400
  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 });
3401
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { "data-slot": "kanban-column-body", className: cn("space-y-2", className), ...props });
3428
3402
  }
3429
3403
  function KanbanEmpty({
3430
3404
  className,
3431
3405
  compact = false,
3432
3406
  ...props
3433
3407
  }) {
3434
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3408
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3435
3409
  "p",
3436
3410
  {
3437
3411
  "data-slot": "kanban-empty",
@@ -3447,9 +3421,9 @@ function KanbanEmpty({
3447
3421
  }
3448
3422
 
3449
3423
  // src/ui/kbd/kbd.tsx
3450
- var import_jsx_runtime37 = require("react/jsx-runtime");
3424
+ var import_jsx_runtime40 = require("react/jsx-runtime");
3451
3425
  function Kbd({ className, ...props }) {
3452
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3426
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3453
3427
  "kbd",
3454
3428
  {
3455
3429
  "data-slot": "kbd",
@@ -3462,7 +3436,7 @@ function Kbd({ className, ...props }) {
3462
3436
  );
3463
3437
  }
3464
3438
  function KbdGroup({ className, ...props }) {
3465
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3439
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3466
3440
  "span",
3467
3441
  {
3468
3442
  "data-slot": "kbd-group",
@@ -3474,13 +3448,13 @@ function KbdGroup({ className, ...props }) {
3474
3448
 
3475
3449
  // src/ui/loading-overlay/loading-overlay.tsx
3476
3450
  var import_lucide_react11 = require("lucide-react");
3477
- var import_jsx_runtime38 = require("react/jsx-runtime");
3451
+ var import_jsx_runtime41 = require("react/jsx-runtime");
3478
3452
  function LoadingOverlay({
3479
3453
  label = "Cargando",
3480
3454
  className,
3481
3455
  ...props
3482
3456
  }) {
3483
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3457
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3484
3458
  "output",
3485
3459
  {
3486
3460
  "aria-live": "polite",
@@ -3489,9 +3463,9 @@ function LoadingOverlay({
3489
3463
  className
3490
3464
  ),
3491
3465
  ...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 })
3466
+ 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: [
3467
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react11.LoaderCircle, { className: "motion-safe:animate-spin", "aria-hidden": "true" }),
3468
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { children: label })
3495
3469
  ] })
3496
3470
  }
3497
3471
  );
@@ -3499,10 +3473,10 @@ function LoadingOverlay({
3499
3473
 
3500
3474
  // src/ui/menu/menu.tsx
3501
3475
  var import_react_aria_components19 = require("react-aria-components");
3502
- var import_jsx_runtime39 = require("react/jsx-runtime");
3476
+ var import_jsx_runtime42 = require("react/jsx-runtime");
3503
3477
  var MenuTrigger = import_react_aria_components19.MenuTrigger;
3504
3478
  function MenuContent({ className, ...props }) {
3505
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3479
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3506
3480
  import_react_aria_components19.Popover,
3507
3481
  {
3508
3482
  "data-slot": "menu-content",
@@ -3516,10 +3490,10 @@ function MenuContent({ className, ...props }) {
3516
3490
  );
3517
3491
  }
3518
3492
  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 });
3493
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components19.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
3520
3494
  }
3521
3495
  function MenuItem({ className, children, ...props }) {
3522
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3496
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3523
3497
  import_react_aria_components19.MenuItem,
3524
3498
  {
3525
3499
  "data-slot": "menu-item",
@@ -3534,7 +3508,7 @@ function MenuItem({ className, children, ...props }) {
3534
3508
  }
3535
3509
 
3536
3510
  // src/ui/metric-card/metric-card.tsx
3537
- var import_jsx_runtime40 = require("react/jsx-runtime");
3511
+ var import_jsx_runtime43 = require("react/jsx-runtime");
3538
3512
  function MetricCard({
3539
3513
  className,
3540
3514
  label,
@@ -3548,7 +3522,7 @@ function MetricCard({
3548
3522
  loadingLabel = "Cargando m\xE9trica",
3549
3523
  ...props
3550
3524
  }) {
3551
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3525
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3552
3526
  Card,
3553
3527
  {
3554
3528
  "data-slot": "metric-card",
@@ -3557,16 +3531,16 @@ function MetricCard({
3557
3531
  "aria-busy": loading || void 0,
3558
3532
  className: cn("min-w-0", className),
3559
3533
  ...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)(
3534
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(CardContent, { className: "flex items-start gap-3", children: [
3535
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { "data-slot": "metric-card-icon", className: "text-muted-foreground shrink-0", children: icon }) : null,
3536
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "min-w-0", children: [
3537
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { "data-slot": "metric-card-label", className: "text-muted-foreground text-sm", children: label }),
3538
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3565
3539
  "strong",
3566
3540
  {
3567
3541
  "data-slot": "metric-card-value",
3568
3542
  className: "mt-1 block text-2xl font-semibold tracking-tight",
3569
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3543
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3570
3544
  "span",
3571
3545
  {
3572
3546
  "data-slot": "metric-card-loading",
@@ -3576,7 +3550,7 @@ function MetricCard({
3576
3550
  ) : value
3577
3551
  }
3578
3552
  ),
3579
- delta ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3553
+ delta ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3580
3554
  "span",
3581
3555
  {
3582
3556
  "data-slot": "metric-card-delta",
@@ -3589,17 +3563,30 @@ function MetricCard({
3589
3563
  children: delta
3590
3564
  }
3591
3565
  ) : 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
3566
+ 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
3567
  ] })
3594
3568
  ] })
3595
3569
  }
3596
3570
  );
3597
3571
  }
3598
3572
 
3573
+ // src/ui/metric-grid/metric-grid.tsx
3574
+ var import_jsx_runtime44 = require("react/jsx-runtime");
3575
+ function MetricGrid({ className, ...props }) {
3576
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3577
+ "div",
3578
+ {
3579
+ "data-slot": "metric-grid",
3580
+ className: cn("grid gap-4 sm:grid-cols-2 xl:grid-cols-4", className),
3581
+ ...props
3582
+ }
3583
+ );
3584
+ }
3585
+
3599
3586
  // src/ui/otp-input/otp-input.tsx
3600
3587
  var import_react14 = require("react");
3601
3588
  var import_react_aria_components20 = require("react-aria-components");
3602
- var import_jsx_runtime41 = require("react/jsx-runtime");
3589
+ var import_jsx_runtime45 = require("react/jsx-runtime");
3603
3590
  function normalizeOtp(value, length) {
3604
3591
  return value.replace(/[^0-9]/g, "").slice(0, length);
3605
3592
  }
@@ -3651,7 +3638,7 @@ var OtpInputImpl = (0, import_react14.forwardRef)(function OtpInput({
3651
3638
  input.setSelectionRange(position, position);
3652
3639
  setSelectionStart(position);
3653
3640
  }
3654
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
3641
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
3655
3642
  "div",
3656
3643
  {
3657
3644
  "data-slot": "otp-input",
@@ -3661,7 +3648,7 @@ var OtpInputImpl = (0, import_react14.forwardRef)(function OtpInput({
3661
3648
  style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
3662
3649
  onPointerDown: handlePointerDown,
3663
3650
  children: [
3664
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3651
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3665
3652
  import_react_aria_components20.Input,
3666
3653
  {
3667
3654
  ...props,
@@ -3701,7 +3688,7 @@ var OtpInputImpl = (0, import_react14.forwardRef)(function OtpInput({
3701
3688
  }
3702
3689
  }
3703
3690
  ),
3704
- slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3691
+ slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3705
3692
  "span",
3706
3693
  {
3707
3694
  "aria-hidden": "true",
@@ -3724,9 +3711,9 @@ var OtpInputImpl = (0, import_react14.forwardRef)(function OtpInput({
3724
3711
  var OtpInput2 = OtpInputImpl;
3725
3712
 
3726
3713
  // src/ui/page-header/page-header.tsx
3727
- var import_jsx_runtime42 = require("react/jsx-runtime");
3714
+ var import_jsx_runtime46 = require("react/jsx-runtime");
3728
3715
  function PageHeader({ className, ...props }) {
3729
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3716
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3730
3717
  "header",
3731
3718
  {
3732
3719
  "data-slot": "page-header",
@@ -3739,10 +3726,10 @@ function PageHeader({ className, ...props }) {
3739
3726
  );
3740
3727
  }
3741
3728
  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 });
3729
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
3743
3730
  }
3744
3731
  function PageHeaderTitle({ className, children, ...props }) {
3745
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3732
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3746
3733
  "h1",
3747
3734
  {
3748
3735
  "data-slot": "page-header-title",
@@ -3753,7 +3740,7 @@ function PageHeaderTitle({ className, children, ...props }) {
3753
3740
  );
3754
3741
  }
3755
3742
  function PageHeaderDescription({ className, ...props }) {
3756
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3743
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3757
3744
  "p",
3758
3745
  {
3759
3746
  "data-slot": "page-header-description",
@@ -3763,7 +3750,7 @@ function PageHeaderDescription({ className, ...props }) {
3763
3750
  );
3764
3751
  }
3765
3752
  function PageHeaderActions({ className, ...props }) {
3766
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3753
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3767
3754
  "div",
3768
3755
  {
3769
3756
  "data-slot": "page-header-actions",
@@ -3773,7 +3760,7 @@ function PageHeaderActions({ className, ...props }) {
3773
3760
  );
3774
3761
  }
3775
3762
  function SectionHeader({ className, ...props }) {
3776
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3763
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3777
3764
  "div",
3778
3765
  {
3779
3766
  "data-slot": "section-header",
@@ -3783,10 +3770,10 @@ function SectionHeader({ className, ...props }) {
3783
3770
  );
3784
3771
  }
3785
3772
  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 });
3773
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { "data-slot": "section-header-heading", className: cn("min-w-0", className), ...props });
3787
3774
  }
3788
3775
  function SectionHeaderTitle({ className, ...props }) {
3789
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3776
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3790
3777
  "h2",
3791
3778
  {
3792
3779
  "data-slot": "section-header-title",
@@ -3796,7 +3783,7 @@ function SectionHeaderTitle({ className, ...props }) {
3796
3783
  );
3797
3784
  }
3798
3785
  function SectionHeaderDescription({ className, ...props }) {
3799
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3786
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3800
3787
  "p",
3801
3788
  {
3802
3789
  "data-slot": "section-header-description",
@@ -3806,7 +3793,7 @@ function SectionHeaderDescription({ className, ...props }) {
3806
3793
  );
3807
3794
  }
3808
3795
  function SectionHeaderActions({ className, ...props }) {
3809
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3796
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3810
3797
  "div",
3811
3798
  {
3812
3799
  "data-slot": "section-header-actions",
@@ -3819,7 +3806,7 @@ function SectionHeaderActions({ className, ...props }) {
3819
3806
  // src/ui/pagination/pagination.tsx
3820
3807
  var import_lucide_react12 = require("lucide-react");
3821
3808
  var React6 = __toESM(require("react"), 1);
3822
- var import_jsx_runtime43 = require("react/jsx-runtime");
3809
+ var import_jsx_runtime47 = require("react/jsx-runtime");
3823
3810
  function visiblePages(page, pageCount, siblingCount) {
3824
3811
  return [
3825
3812
  .../* @__PURE__ */ new Set([
@@ -3849,15 +3836,15 @@ function Pagination({
3849
3836
  if (totalPages <= 1) return null;
3850
3837
  const currentPage = normalizedPage(page, totalPages);
3851
3838
  const pages = visiblePages(currentPage, totalPages, siblingCount);
3852
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
3839
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
3853
3840
  "nav",
3854
3841
  {
3855
3842
  "aria-label": ariaLabel,
3856
3843
  className: cn("flex flex-wrap items-center justify-between gap-4", className),
3857
3844
  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)(
3845
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "text-muted-foreground text-sm", children: summary ?? `P\xE1gina ${currentPage} de ${totalPages}` }),
3846
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1", children: [
3847
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3861
3848
  Button,
3862
3849
  {
3863
3850
  "aria-label": "P\xE1gina anterior",
@@ -3865,14 +3852,14 @@ function Pagination({
3865
3852
  onPress: () => onPageChange(currentPage - 1),
3866
3853
  size: "icon",
3867
3854
  variant: "ghost",
3868
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react12.ChevronLeft, {})
3855
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react12.ChevronLeft, {})
3869
3856
  }
3870
3857
  ),
3871
3858
  pages.map((item, index) => {
3872
3859
  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)(
3860
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(React6.Fragment, { children: [
3861
+ 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,
3862
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3876
3863
  Button,
3877
3864
  {
3878
3865
  "aria-current": item === currentPage ? "page" : void 0,
@@ -3885,7 +3872,7 @@ function Pagination({
3885
3872
  )
3886
3873
  ] }, item);
3887
3874
  }),
3888
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3875
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3889
3876
  Button,
3890
3877
  {
3891
3878
  "aria-label": "P\xE1gina siguiente",
@@ -3893,7 +3880,7 @@ function Pagination({
3893
3880
  onPress: () => onPageChange(currentPage + 1),
3894
3881
  size: "icon",
3895
3882
  variant: "ghost",
3896
- children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react12.ChevronRight, {})
3883
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react12.ChevronRight, {})
3897
3884
  }
3898
3885
  )
3899
3886
  ] })
@@ -3904,10 +3891,10 @@ function Pagination({
3904
3891
 
3905
3892
  // src/ui/popover/popover.tsx
3906
3893
  var import_react_aria_components21 = require("react-aria-components");
3907
- var import_jsx_runtime44 = require("react/jsx-runtime");
3894
+ var import_jsx_runtime48 = require("react/jsx-runtime");
3908
3895
  var PopoverTrigger = import_react_aria_components21.DialogTrigger;
3909
3896
  function PopoverContent({ className, ...props }) {
3910
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3897
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3911
3898
  import_react_aria_components21.Popover,
3912
3899
  {
3913
3900
  "data-slot": "popover",
@@ -3922,19 +3909,19 @@ function PopoverContent({ className, ...props }) {
3922
3909
  );
3923
3910
  }
3924
3911
  function Popover4(props) {
3925
- if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(PopoverContent, { ...props });
3912
+ if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(PopoverContent, { ...props });
3926
3913
  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: [
3914
+ const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
3915
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(PopoverTrigger, { defaultOpen, isOpen, onOpenChange, children: [
3929
3916
  triggerElement,
3930
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(PopoverContent, { ...contentProps, children })
3917
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(PopoverContent, { ...contentProps, children })
3931
3918
  ] });
3932
3919
  }
3933
3920
 
3934
3921
  // src/ui/quantity-input/quantity-input.tsx
3935
3922
  var import_lucide_react13 = require("lucide-react");
3936
3923
  var import_react_aria_components22 = require("react-aria-components");
3937
- var import_jsx_runtime45 = require("react/jsx-runtime");
3924
+ var import_jsx_runtime49 = require("react/jsx-runtime");
3938
3925
  function QuantityInput({
3939
3926
  className,
3940
3927
  inputClassName,
@@ -3944,7 +3931,7 @@ function QuantityInput({
3944
3931
  step = 1,
3945
3932
  ...props
3946
3933
  }) {
3947
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3934
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3948
3935
  import_react_aria_components22.NumberField,
3949
3936
  {
3950
3937
  ...props,
@@ -3955,23 +3942,23 @@ function QuantityInput({
3955
3942
  "group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50",
3956
3943
  className
3957
3944
  ),
3958
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
3945
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
3959
3946
  import_react_aria_components22.Group,
3960
3947
  {
3961
3948
  "data-slot": "quantity-input-group",
3962
3949
  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
3950
  children: [
3964
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3951
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3965
3952
  import_react_aria_components22.Button,
3966
3953
  {
3967
3954
  slot: "decrement",
3968
3955
  "aria-label": decrementAriaLabel,
3969
3956
  "data-slot": "quantity-input-decrement",
3970
3957
  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" })
3958
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react13.Minus, { "aria-hidden": "true", className: "size-4" })
3972
3959
  }
3973
3960
  ),
3974
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3961
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3975
3962
  import_react_aria_components22.Input,
3976
3963
  {
3977
3964
  "data-slot": "quantity-input-value",
@@ -3981,14 +3968,14 @@ function QuantityInput({
3981
3968
  )
3982
3969
  }
3983
3970
  ),
3984
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3971
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3985
3972
  import_react_aria_components22.Button,
3986
3973
  {
3987
3974
  slot: "increment",
3988
3975
  "aria-label": incrementAriaLabel,
3989
3976
  "data-slot": "quantity-input-increment",
3990
3977
  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" })
3978
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react13.Plus, { "aria-hidden": "true", className: "size-4" })
3992
3979
  }
3993
3980
  )
3994
3981
  ]
@@ -4001,10 +3988,10 @@ function QuantityInput({
4001
3988
  // src/ui/select/select.tsx
4002
3989
  var import_lucide_react14 = require("lucide-react");
4003
3990
  var import_react_aria_components23 = require("react-aria-components");
4004
- var import_jsx_runtime46 = require("react/jsx-runtime");
3991
+ var import_jsx_runtime50 = require("react/jsx-runtime");
4005
3992
  var Select = import_react_aria_components23.Select;
4006
3993
  function SelectTrigger({ className, children, ...props }) {
4007
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3994
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4008
3995
  import_react_aria_components23.Button,
4009
3996
  {
4010
3997
  "data-slot": "select-trigger",
@@ -4013,9 +4000,9 @@ function SelectTrigger({ className, children, ...props }) {
4013
4000
  className
4014
4001
  ),
4015
4002
  ...props,
4016
- children: (state) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
4003
+ children: (state) => /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
4017
4004
  typeof children === "function" ? children(state) : children,
4018
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4005
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4019
4006
  import_lucide_react14.ChevronDown,
4020
4007
  {
4021
4008
  "aria-hidden": "true",
@@ -4027,7 +4014,7 @@ function SelectTrigger({ className, children, ...props }) {
4027
4014
  );
4028
4015
  }
4029
4016
  function SelectValue({ className, ...props }) {
4030
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4017
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4031
4018
  import_react_aria_components23.SelectValue,
4032
4019
  {
4033
4020
  "data-slot": "select-value",
@@ -4037,7 +4024,7 @@ function SelectValue({ className, ...props }) {
4037
4024
  );
4038
4025
  }
4039
4026
  function SelectContent({ className, ...props }) {
4040
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4027
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4041
4028
  import_react_aria_components23.Popover,
4042
4029
  {
4043
4030
  "data-slot": "select-content",
@@ -4051,7 +4038,7 @@ function SelectContent({ className, ...props }) {
4051
4038
  );
4052
4039
  }
4053
4040
  function SelectList({ className, ...props }) {
4054
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4041
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4055
4042
  import_react_aria_components23.ListBox,
4056
4043
  {
4057
4044
  "data-slot": "select-list",
@@ -4065,7 +4052,7 @@ function SelectItem({
4065
4052
  children,
4066
4053
  ...props
4067
4054
  }) {
4068
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4055
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4069
4056
  import_react_aria_components23.ListBoxItem,
4070
4057
  {
4071
4058
  "data-slot": "select-item",
@@ -4079,6 +4066,34 @@ function SelectItem({
4079
4066
  );
4080
4067
  }
4081
4068
 
4069
+ // src/ui/selection-toolbar/selection-toolbar.tsx
4070
+ var import_jsx_runtime51 = require("react/jsx-runtime");
4071
+ function SelectionToolbar({
4072
+ count,
4073
+ className,
4074
+ children,
4075
+ ...props
4076
+ }) {
4077
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
4078
+ "div",
4079
+ {
4080
+ "data-slot": "selection-toolbar",
4081
+ className: cn(
4082
+ "flex flex-wrap items-center justify-between gap-2 rounded-lg border bg-muted/40 p-2",
4083
+ className
4084
+ ),
4085
+ ...props,
4086
+ children: [
4087
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("output", { "aria-live": "polite", className: "text-sm font-medium", children: [
4088
+ count,
4089
+ " seleccionados"
4090
+ ] }),
4091
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "flex items-center gap-2", children })
4092
+ ]
4093
+ }
4094
+ );
4095
+ }
4096
+
4082
4097
  // src/ui/sidebar/sidebar.tsx
4083
4098
  var import_lucide_react15 = require("lucide-react");
4084
4099
  var import_react16 = require("react");
@@ -4094,7 +4109,7 @@ function useSidebar() {
4094
4109
  }
4095
4110
 
4096
4111
  // src/ui/sidebar/sidebar.tsx
4097
- var import_jsx_runtime47 = require("react/jsx-runtime");
4112
+ var import_jsx_runtime52 = require("react/jsx-runtime");
4098
4113
  function SidebarProvider({
4099
4114
  defaultCollapsed = false,
4100
4115
  collapsed: controlledCollapsed,
@@ -4119,11 +4134,11 @@ function SidebarProvider({
4119
4134
  }),
4120
4135
  [collapsed, setCollapsed, toggle]
4121
4136
  );
4122
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(SidebarContext.Provider, { value, children });
4137
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(SidebarContext.Provider, { value, children });
4123
4138
  }
4124
4139
  function Sidebar({ className, ...props }) {
4125
4140
  const { collapsed } = useSidebar();
4126
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4141
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4127
4142
  "aside",
4128
4143
  {
4129
4144
  "data-slot": "sidebar",
@@ -4137,7 +4152,7 @@ function Sidebar({ className, ...props }) {
4137
4152
  );
4138
4153
  }
4139
4154
  function SidebarHeader({ className, ...props }) {
4140
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4155
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4141
4156
  "div",
4142
4157
  {
4143
4158
  "data-slot": "sidebar-header",
@@ -4152,7 +4167,7 @@ function SidebarSearch({
4152
4167
  className,
4153
4168
  ...props
4154
4169
  }) {
4155
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
4170
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
4156
4171
  "button",
4157
4172
  {
4158
4173
  type: "button",
@@ -4163,15 +4178,15 @@ function SidebarSearch({
4163
4178
  ),
4164
4179
  ...props,
4165
4180
  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 })
4181
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react15.Search, { className: "size-4 shrink-0" }),
4182
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "flex-1 text-left", children: label }),
4183
+ /* @__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
4184
  ]
4170
4185
  }
4171
4186
  );
4172
4187
  }
4173
4188
  function SidebarContent({ className, ...props }) {
4174
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4189
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4175
4190
  "nav",
4176
4191
  {
4177
4192
  "data-slot": "sidebar-content",
@@ -4182,7 +4197,7 @@ function SidebarContent({ className, ...props }) {
4182
4197
  );
4183
4198
  }
4184
4199
  function SidebarFooter({ className, ...props }) {
4185
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4200
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4186
4201
  "div",
4187
4202
  {
4188
4203
  "data-slot": "sidebar-footer",
@@ -4198,8 +4213,8 @@ function SidebarGroup({
4198
4213
  ...props
4199
4214
  }) {
4200
4215
  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)(
4216
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("section", { "data-slot": "sidebar-group", className: cn("mb-4 last:mb-0", className), ...props, children: [
4217
+ label && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4203
4218
  "h2",
4204
4219
  {
4205
4220
  className: cn(
@@ -4223,7 +4238,7 @@ function SidebarItem({
4223
4238
  }) {
4224
4239
  const { collapsed } = useSidebar();
4225
4240
  const content = typeof children === "function" ? label : children ?? label;
4226
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4241
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4227
4242
  import_react_aria_components24.Link,
4228
4243
  {
4229
4244
  "data-slot": "sidebar-item",
@@ -4235,16 +4250,16 @@ function SidebarItem({
4235
4250
  typeof className === "function" ? className : className
4236
4251
  ),
4237
4252
  ...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 })
4253
+ children: (values) => /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
4254
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
4255
+ /* @__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 }),
4256
+ badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "text-muted-foreground text-xs", children: badge })
4242
4257
  ] })
4243
4258
  }
4244
4259
  );
4245
4260
  }
4246
4261
  function SidebarSeparator({ className, ...props }) {
4247
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4262
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4248
4263
  "hr",
4249
4264
  {
4250
4265
  "data-slot": "sidebar-separator",
@@ -4256,7 +4271,7 @@ function SidebarSeparator({ className, ...props }) {
4256
4271
  function SidebarTrigger({ className, ...props }) {
4257
4272
  const { collapsed, toggle } = useSidebar();
4258
4273
  const { onPress, ...buttonProps } = props;
4259
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4274
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4260
4275
  Button,
4261
4276
  {
4262
4277
  "aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
@@ -4268,14 +4283,14 @@ function SidebarTrigger({ className, ...props }) {
4268
4283
  variant: "ghost",
4269
4284
  className: cn("ml-auto", className),
4270
4285
  ...buttonProps,
4271
- children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.ChevronLeft, {})
4286
+ children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react15.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react15.ChevronLeft, {})
4272
4287
  }
4273
4288
  );
4274
4289
  }
4275
4290
  function SidebarRail({ className, ...props }) {
4276
4291
  const { toggle } = useSidebar();
4277
4292
  const { onClick, ...buttonProps } = props;
4278
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4293
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4279
4294
  "button",
4280
4295
  {
4281
4296
  type: "button",
@@ -4293,7 +4308,7 @@ function SidebarRail({ className, ...props }) {
4293
4308
  );
4294
4309
  }
4295
4310
  function SidebarMore({ className, ...props }) {
4296
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4311
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4297
4312
  Button,
4298
4313
  {
4299
4314
  "aria-label": "M\xE1s opciones",
@@ -4301,15 +4316,15 @@ function SidebarMore({ className, ...props }) {
4301
4316
  variant: "ghost",
4302
4317
  className: cn("size-7", className),
4303
4318
  ...props,
4304
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.Ellipsis, {})
4319
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react15.Ellipsis, {})
4305
4320
  }
4306
4321
  );
4307
4322
  }
4308
4323
 
4309
4324
  // src/ui/skeleton/skeleton.tsx
4310
- var import_jsx_runtime48 = require("react/jsx-runtime");
4325
+ var import_jsx_runtime53 = require("react/jsx-runtime");
4311
4326
  function Skeleton({ className, ...props }) {
4312
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4327
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
4313
4328
  "div",
4314
4329
  {
4315
4330
  "aria-hidden": "true",
@@ -4324,7 +4339,7 @@ function Skeleton({ className, ...props }) {
4324
4339
  var import_lucide_react16 = require("lucide-react");
4325
4340
  var import_react17 = require("react");
4326
4341
  var import_react_dom = require("react-dom");
4327
- var import_jsx_runtime49 = require("react/jsx-runtime");
4342
+ var import_jsx_runtime54 = require("react/jsx-runtime");
4328
4343
  function assignRef(ref, node) {
4329
4344
  if (typeof ref === "function") {
4330
4345
  ref(node);
@@ -4359,7 +4374,7 @@ function SubmitButton({
4359
4374
  if (busy) button.setAttribute("aria-busy", "true");
4360
4375
  else button.removeAttribute("aria-busy");
4361
4376
  }, [busy]);
4362
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
4377
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4363
4378
  Button,
4364
4379
  {
4365
4380
  ref: setButtonRef,
@@ -4368,8 +4383,8 @@ function SubmitButton({
4368
4383
  isDisabled: busy || isDisabled,
4369
4384
  "aria-busy": busy || void 0,
4370
4385
  ...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" }),
4386
+ children: busy ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
4387
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react16.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 motion-safe:animate-spin" }),
4373
4388
  label
4374
4389
  ] }) : children
4375
4390
  }
@@ -4379,7 +4394,7 @@ function SubmitButton({
4379
4394
  // src/ui/switch/switch.tsx
4380
4395
  var import_react18 = require("react");
4381
4396
  var import_react_aria_components25 = require("react-aria-components");
4382
- var import_jsx_runtime50 = require("react/jsx-runtime");
4397
+ var import_jsx_runtime55 = require("react/jsx-runtime");
4383
4398
  var switchSizes = {
4384
4399
  sm: {
4385
4400
  control: "h-4 w-[1.875rem] p-0.5",
@@ -4436,7 +4451,7 @@ function Switch({
4436
4451
  ownerDocument.addEventListener("keydown", handleDirectionalKey);
4437
4452
  return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
4438
4453
  }, [isDisabled, isReadOnly, resolvedInputRef]);
4439
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4454
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4440
4455
  import_react_aria_components25.Switch,
4441
4456
  {
4442
4457
  "data-slot": "switch",
@@ -4453,8 +4468,8 @@ function Switch({
4453
4468
  children: (state) => {
4454
4469
  const isThumbPressed = state.isPressed;
4455
4470
  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)(
4471
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment, { children: [
4472
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4458
4473
  "span",
4459
4474
  {
4460
4475
  "aria-hidden": "true",
@@ -4468,7 +4483,7 @@ function Switch({
4468
4483
  "group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
4469
4484
  styles.control
4470
4485
  ),
4471
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4486
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4472
4487
  "span",
4473
4488
  {
4474
4489
  "data-slot": "switch-thumb",
@@ -4488,9 +4503,9 @@ function Switch({
4488
4503
  )
4489
4504
  }
4490
4505
  ),
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)(
4506
+ children || description ? /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: "grid gap-0.5 leading-tight", children: [
4507
+ children ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
4508
+ description ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
4494
4509
  "span",
4495
4510
  {
4496
4511
  "data-slot": "switch-description",
@@ -4506,9 +4521,9 @@ function Switch({
4506
4521
  }
4507
4522
 
4508
4523
  // src/ui/table/table.tsx
4509
- var import_jsx_runtime51 = require("react/jsx-runtime");
4524
+ var import_jsx_runtime56 = require("react/jsx-runtime");
4510
4525
  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)(
4526
+ 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
4527
  "table",
4513
4528
  {
4514
4529
  "data-slot": "table",
@@ -4518,10 +4533,10 @@ function Table({ className, ...props }) {
4518
4533
  ) });
4519
4534
  }
4520
4535
  function TableHeader({ className, ...props }) {
4521
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
4536
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
4522
4537
  }
4523
4538
  function TableBody({ className, ...props }) {
4524
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4539
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4525
4540
  "tbody",
4526
4541
  {
4527
4542
  "data-slot": "table-body",
@@ -4531,7 +4546,7 @@ function TableBody({ className, ...props }) {
4531
4546
  );
4532
4547
  }
4533
4548
  function TableRow({ className, ...props }) {
4534
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4549
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4535
4550
  "tr",
4536
4551
  {
4537
4552
  "data-slot": "table-row",
@@ -4544,7 +4559,7 @@ function TableRow({ className, ...props }) {
4544
4559
  );
4545
4560
  }
4546
4561
  function TableHead({ className, ...props }) {
4547
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4562
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4548
4563
  "th",
4549
4564
  {
4550
4565
  "data-slot": "table-head",
@@ -4557,7 +4572,7 @@ function TableHead({ className, ...props }) {
4557
4572
  );
4558
4573
  }
4559
4574
  function TableCell({ className, ...props }) {
4560
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4575
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4561
4576
  "td",
4562
4577
  {
4563
4578
  "data-slot": "table-cell",
@@ -4567,7 +4582,7 @@ function TableCell({ className, ...props }) {
4567
4582
  );
4568
4583
  }
4569
4584
  function TableCaption({ className, ...props }) {
4570
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4585
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4571
4586
  "caption",
4572
4587
  {
4573
4588
  "data-slot": "table-caption",
@@ -4577,7 +4592,7 @@ function TableCaption({ className, ...props }) {
4577
4592
  );
4578
4593
  }
4579
4594
  function TableFooter({ className, ...props }) {
4580
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4595
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4581
4596
  "tfoot",
4582
4597
  {
4583
4598
  "data-slot": "table-footer",
@@ -4590,7 +4605,7 @@ function TableFooter({ className, ...props }) {
4590
4605
  );
4591
4606
  }
4592
4607
  function TableToolbar({ className, ...props }) {
4593
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4608
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4594
4609
  "div",
4595
4610
  {
4596
4611
  "data-slot": "table-toolbar",
@@ -4604,7 +4619,7 @@ function TableEmpty({
4604
4619
  className,
4605
4620
  children = "No hay resultados."
4606
4621
  }) {
4607
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TableRow, { "data-slot": "table-empty", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4622
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TableRow, { "data-slot": "table-empty", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4608
4623
  TableCell,
4609
4624
  {
4610
4625
  colSpan,
@@ -4618,7 +4633,7 @@ function TableLoading({
4618
4633
  className,
4619
4634
  children = "Cargando\u2026"
4620
4635
  }) {
4621
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TableRow, { "data-slot": "table-loading", "aria-busy": "true", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
4636
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(TableRow, { "data-slot": "table-loading", "aria-busy": "true", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
4622
4637
  TableCell,
4623
4638
  {
4624
4639
  colSpan,
@@ -4630,9 +4645,9 @@ function TableLoading({
4630
4645
 
4631
4646
  // src/ui/tabs/tabs.tsx
4632
4647
  var import_react_aria_components26 = require("react-aria-components");
4633
- var import_jsx_runtime52 = require("react/jsx-runtime");
4648
+ var import_jsx_runtime57 = require("react/jsx-runtime");
4634
4649
  function Tabs({ className, ...props }) {
4635
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4650
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4636
4651
  import_react_aria_components26.Tabs,
4637
4652
  {
4638
4653
  "data-slot": "tabs",
@@ -4642,7 +4657,7 @@ function Tabs({ className, ...props }) {
4642
4657
  );
4643
4658
  }
4644
4659
  function TabsList({ className, ...props }) {
4645
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4660
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4646
4661
  import_react_aria_components26.TabList,
4647
4662
  {
4648
4663
  "data-slot": "tabs-list",
@@ -4658,7 +4673,7 @@ function TabsList({ className, ...props }) {
4658
4673
  );
4659
4674
  }
4660
4675
  function TabsTrigger({ className, ...props }) {
4661
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4676
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4662
4677
  import_react_aria_components26.Tab,
4663
4678
  {
4664
4679
  "data-slot": "tabs-trigger",
@@ -4674,10 +4689,10 @@ function TabsTrigger({ className, ...props }) {
4674
4689
  );
4675
4690
  }
4676
4691
  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 });
4692
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_react_aria_components26.TabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
4678
4693
  }
4679
4694
  function TabsContent({ className, ...props }) {
4680
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
4695
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
4681
4696
  import_react_aria_components26.TabPanel,
4682
4697
  {
4683
4698
  "data-slot": "tabs-content",
@@ -4741,15 +4756,15 @@ function useToast() {
4741
4756
  }
4742
4757
 
4743
4758
  // src/ui/toast/toast.tsx
4744
- var import_jsx_runtime53 = require("react/jsx-runtime");
4759
+ var import_jsx_runtime58 = require("react/jsx-runtime");
4745
4760
  function ToastProvider({ children }) {
4746
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
4761
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment, { children: [
4747
4762
  children,
4748
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Toaster, {})
4763
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Toaster, {})
4749
4764
  ] });
4750
4765
  }
4751
4766
  function Toaster({ position }) {
4752
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_sileo2.Toaster, { position, options: { fill: "var(--ui-secondary)" } });
4767
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_sileo2.Toaster, { position, options: { fill: "var(--ui-secondary)" } });
4753
4768
  }
4754
4769
  function ToastViewport({
4755
4770
  position,
@@ -4758,7 +4773,7 @@ function ToastViewport({
4758
4773
  }) {
4759
4774
  void className;
4760
4775
  if (visiblePosition && visiblePosition !== position) return null;
4761
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Toaster, { position });
4776
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Toaster, { position });
4762
4777
  }
4763
4778
  function Toast({
4764
4779
  id,
@@ -4783,9 +4798,9 @@ function Toast({
4783
4798
  }
4784
4799
 
4785
4800
  // src/ui/toolbar/toolbar.tsx
4786
- var import_jsx_runtime54 = require("react/jsx-runtime");
4801
+ var import_jsx_runtime59 = require("react/jsx-runtime");
4787
4802
  function Toolbar({ className, ...props }) {
4788
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4803
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
4789
4804
  "div",
4790
4805
  {
4791
4806
  role: "toolbar",
@@ -4796,7 +4811,7 @@ function Toolbar({ className, ...props }) {
4796
4811
  );
4797
4812
  }
4798
4813
  function ToolbarGroup({ className, ...props }) {
4799
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
4814
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
4800
4815
  "div",
4801
4816
  {
4802
4817
  "data-slot": "toolbar-group",
@@ -4806,7 +4821,7 @@ function ToolbarGroup({ className, ...props }) {
4806
4821
  );
4807
4822
  }
4808
4823
  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 });
4824
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
4810
4825
  }
4811
4826
  // Annotate the CommonJS export names for ESM import in node:
4812
4827
  0 && (module.exports = {