@doscientos/ui 0.1.23 → 0.1.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -238,10 +238,199 @@ function AccordionContent({
238
238
  );
239
239
  }
240
240
 
241
- // src/ui/alert/alert.tsx
241
+ // src/ui/alert-dialog/alert-dialog.tsx
242
+ import * as React2 from "react";
243
+ import {
244
+ Dialog as AriaDialog,
245
+ Heading,
246
+ Modal,
247
+ ModalOverlay,
248
+ Text
249
+ } from "react-aria-components";
250
+
251
+ // src/ui/button/button.tsx
242
252
  import { cva as cva2 } from "class-variance-authority";
243
- import { jsx as jsx2 } from "react/jsx-runtime";
244
- var alertVariants = cva2(
253
+ import { useState as useState4 } from "react";
254
+ import {
255
+ Button as ButtonPrimitive,
256
+ Link as LinkPrimitive
257
+ } from "react-aria-components";
258
+ import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
259
+ var centeredRipplePosition = { x: "50%", y: "50%" };
260
+ function getRipplePosition(event) {
261
+ if (event.pointerType === "keyboard" || event.pointerType === "virtual") {
262
+ return centeredRipplePosition;
263
+ }
264
+ if (!(event.target instanceof Element) || event.x === void 0 || event.y === void 0) {
265
+ return centeredRipplePosition;
266
+ }
267
+ const bounds = event.target.getBoundingClientRect();
268
+ return {
269
+ x: `${event.x - bounds.left}px`,
270
+ y: `${event.y - bounds.top}px`
271
+ };
272
+ }
273
+ function useActionRipple(enabled) {
274
+ const [ripple, setRipple] = useState4(null);
275
+ function triggerRipple(event) {
276
+ if (!enabled) return;
277
+ const position = getRipplePosition(event);
278
+ setRipple((currentRipple) => ({
279
+ id: (currentRipple?.id ?? 0) + 1,
280
+ position
281
+ }));
282
+ }
283
+ const rippleElement = ripple ? /* @__PURE__ */ jsx2(
284
+ "span",
285
+ {
286
+ "aria-hidden": "true",
287
+ "data-slot": "button-ripple",
288
+ className: "pointer-events-none absolute aspect-square w-full rounded-full bg-current animate-ui-ripple motion-reduce:hidden",
289
+ style: { left: ripple.position.x, top: ripple.position.y },
290
+ onAnimationEnd: () => setRipple((currentRipple) => currentRipple?.id === ripple.id ? null : currentRipple)
291
+ },
292
+ ripple.id
293
+ ) : null;
294
+ return { ripple: rippleElement, triggerRipple };
295
+ }
296
+ var buttonVariants = cva2(
297
+ cn(
298
+ "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
299
+ actionRipple()
300
+ ),
301
+ {
302
+ variants: {
303
+ variant: {
304
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
305
+ outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
306
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
307
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
308
+ destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
309
+ link: "text-primary underline-offset-4 hover:underline after:hidden"
310
+ },
311
+ size: {
312
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
313
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
314
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
315
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
316
+ icon: "size-8",
317
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
318
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
319
+ "icon-lg": "size-9"
320
+ }
321
+ },
322
+ defaultVariants: {
323
+ variant: "default",
324
+ size: "default"
325
+ }
326
+ }
327
+ );
328
+ function Button({ className, variant = "default", size = "default", children, disabled, isDisabled, onClick, onPress, ...props }) {
329
+ const { ripple, triggerRipple } = useActionRipple(variant !== "link");
330
+ return /* @__PURE__ */ jsx2(
331
+ ButtonPrimitive,
332
+ {
333
+ "data-slot": "button",
334
+ "data-variant": variant,
335
+ "data-size": size,
336
+ className: cn(buttonVariants({ variant, size, className })),
337
+ onClick,
338
+ isDisabled: isDisabled ?? disabled,
339
+ onPress: (event) => {
340
+ onPress?.(event);
341
+ triggerRipple(event);
342
+ },
343
+ ...props,
344
+ children: (renderProps) => /* @__PURE__ */ jsxs2(Fragment, { children: [
345
+ typeof children === "function" ? children(renderProps) : children,
346
+ ripple
347
+ ] })
348
+ }
349
+ );
350
+ }
351
+ function LinkButton({
352
+ className,
353
+ variant = "default",
354
+ size = "default",
355
+ children,
356
+ onClick,
357
+ onPress,
358
+ ...props
359
+ }) {
360
+ const { ripple, triggerRipple } = useActionRipple(variant !== "link");
361
+ return /* @__PURE__ */ jsx2(
362
+ LinkPrimitive,
363
+ {
364
+ "data-slot": "button",
365
+ "data-variant": variant,
366
+ "data-size": size,
367
+ className: cn(buttonVariants({ variant, size, className })),
368
+ onClick,
369
+ onPress: (event) => {
370
+ onPress?.(event);
371
+ triggerRipple(event);
372
+ },
373
+ ...props,
374
+ children: (renderProps) => /* @__PURE__ */ jsxs2(Fragment, { children: [
375
+ typeof children === "function" ? children(renderProps) : children,
376
+ ripple
377
+ ] })
378
+ }
379
+ );
380
+ }
381
+
382
+ // src/ui/alert-dialog/alert-dialog.tsx
383
+ import { Fragment as Fragment2, jsx as jsx3 } from "react/jsx-runtime";
384
+ var AlertDialogContext = React2.createContext(null);
385
+ function useAlertDialogContext() {
386
+ const context = React2.useContext(AlertDialogContext);
387
+ if (!context) throw new Error("AlertDialog components must be rendered within AlertDialog.");
388
+ return context;
389
+ }
390
+ function AlertDialog({ children, open, onOpenChange }) {
391
+ return /* @__PURE__ */ jsx3(AlertDialogContext.Provider, { value: { open, setOpen: onOpenChange }, children });
392
+ }
393
+ function AlertDialogPortal({ children }) {
394
+ return /* @__PURE__ */ jsx3(Fragment2, { children });
395
+ }
396
+ function AlertDialogTrigger({ children, ...props }) {
397
+ const { setOpen } = useAlertDialogContext();
398
+ return /* @__PURE__ */ jsx3(Button, { "data-slot": "alert-dialog-trigger", onPress: () => setOpen(true), ...props, children });
399
+ }
400
+ function AlertDialogOverlay({ className, ...props }) {
401
+ const { open, setOpen } = useAlertDialogContext();
402
+ if (!open) return null;
403
+ return /* @__PURE__ */ jsx3(ModalOverlay, { "data-slot": "alert-dialog-overlay", isDismissable: true, isOpen: open, onOpenChange: setOpen, className: cn("fixed inset-0 isolate z-50 grid place-items-center bg-black/10 p-4 backdrop-blur-[1px]", className), ...props });
404
+ }
405
+ function AlertDialogContent({ className, size = "default", children }) {
406
+ const { open, setOpen } = useAlertDialogContext();
407
+ if (!open) return null;
408
+ return /* @__PURE__ */ jsx3(AlertDialogPortal, { children: /* @__PURE__ */ jsx3(ModalOverlay, { isDismissable: true, isOpen: open, onOpenChange: setOpen, className: "fixed inset-0 isolate z-50 grid place-items-center bg-black/10 p-4 backdrop-blur-[1px]", children: /* @__PURE__ */ jsx3(Modal, { className: cn("w-full max-w-[calc(100%-2rem)] outline-none", size === "sm" ? "sm:max-w-xs" : "sm:max-w-sm", className), children: /* @__PURE__ */ jsx3(AriaDialog, { role: "alertdialog", "data-slot": "alert-dialog-content", className: "grid gap-4 rounded-xl bg-background p-4 text-sm text-foreground ring-1 ring-foreground/10 outline-none", children }) }) }) });
409
+ }
410
+ function AlertDialogHeader({ className, ...props }) {
411
+ return /* @__PURE__ */ jsx3("div", { "data-slot": "alert-dialog-header", className: cn("flex flex-col gap-2 text-center sm:text-left", className), ...props });
412
+ }
413
+ function AlertDialogFooter({ className, ...props }) {
414
+ return /* @__PURE__ */ jsx3("div", { "data-slot": "alert-dialog-footer", className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end", className), ...props });
415
+ }
416
+ function AlertDialogTitle({ className, ...props }) {
417
+ return /* @__PURE__ */ jsx3(Heading, { slot: "title", "data-slot": "alert-dialog-title", className: cn("font-heading text-base font-medium", className), ...props });
418
+ }
419
+ function AlertDialogDescription({ className, ...props }) {
420
+ return /* @__PURE__ */ jsx3(Text, { slot: "description", "data-slot": "alert-dialog-description", className: cn("text-sm text-muted-foreground", className), ...props });
421
+ }
422
+ function AlertDialogAction({ className, ...props }) {
423
+ return /* @__PURE__ */ jsx3(Button, { "data-slot": "alert-dialog-action", className: cn(className), ...props });
424
+ }
425
+ function AlertDialogCancel({ children = "Cancelar", onClick, ...props }) {
426
+ const { setOpen } = useAlertDialogContext();
427
+ return /* @__PURE__ */ jsx3(Button, { "data-slot": "alert-dialog-cancel", variant: "outline", onClick, onPress: () => setOpen(false), ...props, children });
428
+ }
429
+
430
+ // src/ui/alert/alert.tsx
431
+ import { cva as cva3 } from "class-variance-authority";
432
+ import { jsx as jsx4 } from "react/jsx-runtime";
433
+ var alertVariants = cva3(
245
434
  "group/alert relative grid w-full gap-0.5 rounded-lg border border-border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",
246
435
  {
247
436
  variants: {
@@ -259,7 +448,7 @@ var alertVariants = cva2(
259
448
  }
260
449
  );
261
450
  function Alert({ className, variant, ...props }) {
262
- return /* @__PURE__ */ jsx2(
451
+ return /* @__PURE__ */ jsx4(
263
452
  "div",
264
453
  {
265
454
  "data-slot": "alert",
@@ -270,7 +459,7 @@ function Alert({ className, variant, ...props }) {
270
459
  );
271
460
  }
272
461
  function AlertTitle({ className, ...props }) {
273
- return /* @__PURE__ */ jsx2(
462
+ return /* @__PURE__ */ jsx4(
274
463
  "div",
275
464
  {
276
465
  "data-slot": "alert-title",
@@ -283,7 +472,7 @@ function AlertTitle({ className, ...props }) {
283
472
  );
284
473
  }
285
474
  function AlertDescription({ className, ...props }) {
286
- return /* @__PURE__ */ jsx2(
475
+ return /* @__PURE__ */ jsx4(
287
476
  "div",
288
477
  {
289
478
  "data-slot": "alert-description",
@@ -296,17 +485,17 @@ function AlertDescription({ className, ...props }) {
296
485
  );
297
486
  }
298
487
  function AlertAction({ className, ...props }) {
299
- return /* @__PURE__ */ jsx2("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
488
+ return /* @__PURE__ */ jsx4("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
300
489
  }
301
490
 
302
491
  // src/ui/app-shell/app-shell.tsx
303
- import { jsx as jsx3 } from "react/jsx-runtime";
492
+ import { jsx as jsx5 } from "react/jsx-runtime";
304
493
  function AppShell({
305
494
  className,
306
495
  sidebarBreakpoint = "md",
307
496
  ...props
308
497
  }) {
309
- return /* @__PURE__ */ jsx3(
498
+ return /* @__PURE__ */ jsx5(
310
499
  "div",
311
500
  {
312
501
  "data-slot": "app-shell",
@@ -317,7 +506,7 @@ function AppShell({
317
506
  );
318
507
  }
319
508
  function AppShellSidebar({ className, ...props }) {
320
- return /* @__PURE__ */ jsx3(
509
+ return /* @__PURE__ */ jsx5(
321
510
  "aside",
322
511
  {
323
512
  "data-slot": "app-shell-sidebar",
@@ -327,10 +516,10 @@ function AppShellSidebar({ className, ...props }) {
327
516
  );
328
517
  }
329
518
  function AppShellMain({ className, ...props }) {
330
- return /* @__PURE__ */ jsx3("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
519
+ return /* @__PURE__ */ jsx5("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
331
520
  }
332
521
  function AppShellHeader({ className, ...props }) {
333
- return /* @__PURE__ */ jsx3(
522
+ return /* @__PURE__ */ jsx5(
334
523
  "header",
335
524
  {
336
525
  "data-slot": "app-shell-header",
@@ -343,7 +532,7 @@ function AppShellMobileHeader({
343
532
  className,
344
533
  ...props
345
534
  }) {
346
- return /* @__PURE__ */ jsx3(
535
+ return /* @__PURE__ */ jsx5(
347
536
  "header",
348
537
  {
349
538
  "data-slot": "app-shell-mobile-header",
@@ -359,7 +548,7 @@ function AppShellContent({
359
548
  scrollable = true,
360
549
  ...props
361
550
  }) {
362
- return /* @__PURE__ */ jsx3(
551
+ return /* @__PURE__ */ jsx5(
363
552
  "div",
364
553
  {
365
554
  "data-slot": "app-shell-content",
@@ -373,23 +562,23 @@ function AppShellContent({
373
562
  }
374
563
 
375
564
  // src/ui/avatar/avatar.tsx
376
- import { createContext, useContext, useEffect as useEffect3, useState as useState4 } from "react";
377
- import { jsx as jsx4 } from "react/jsx-runtime";
565
+ import { createContext as createContext2, useContext as useContext2, useEffect as useEffect3, useState as useState5 } from "react";
566
+ import { jsx as jsx6 } from "react/jsx-runtime";
378
567
  var sizes = { xs: "size-5 text-[10px]", sm: "size-6 text-xs", default: "size-8 text-sm", lg: "size-10 text-base" };
379
- var AvatarContext = createContext(null);
568
+ var AvatarContext = createContext2(null);
380
569
  function Avatar({ className, size = "default", children, ...props }) {
381
- const [status, setStatus] = useState4("idle");
382
- return /* @__PURE__ */ jsx4(AvatarContext.Provider, { value: { status, setStatus }, children: /* @__PURE__ */ jsx4("div", { "data-slot": "avatar", "data-size": size, className: cn("group/avatar relative flex shrink-0 overflow-hidden rounded-full bg-muted text-muted-foreground", sizes[size], className), ...props, children }) });
570
+ const [status, setStatus] = useState5("idle");
571
+ return /* @__PURE__ */ jsx6(AvatarContext.Provider, { value: { status, setStatus }, children: /* @__PURE__ */ jsx6("div", { "data-slot": "avatar", "data-size": size, className: cn("group/avatar relative flex shrink-0 overflow-hidden rounded-full bg-muted text-muted-foreground", sizes[size], className), ...props, children }) });
383
572
  }
384
573
  function AvatarImage({ className, src, onError, onLoad, ...props }) {
385
- const avatar = useContext(AvatarContext);
386
- const [failed, setFailed] = useState4(false);
574
+ const avatar = useContext2(AvatarContext);
575
+ const [failed, setFailed] = useState5(false);
387
576
  useEffect3(() => {
388
577
  setFailed(false);
389
578
  avatar?.setStatus(src ? "loading" : "idle");
390
579
  }, [avatar?.setStatus, src]);
391
580
  if (failed || avatar?.status === "error") return null;
392
- return /* @__PURE__ */ jsx4("img", { "data-slot": "avatar-image", src, className: cn("aspect-square size-full object-cover", className), onLoad: (event) => {
581
+ return /* @__PURE__ */ jsx6("img", { "data-slot": "avatar-image", src, className: cn("aspect-square size-full object-cover", className), onLoad: (event) => {
393
582
  avatar?.setStatus("loaded");
394
583
  onLoad?.(event);
395
584
  }, onError: (event) => {
@@ -399,25 +588,25 @@ function AvatarImage({ className, src, onError, onLoad, ...props }) {
399
588
  }, ...props });
400
589
  }
401
590
  function AvatarFallback({ className, ...props }) {
402
- const avatar = useContext(AvatarContext);
591
+ const avatar = useContext2(AvatarContext);
403
592
  if (avatar?.status === "loaded") return null;
404
- return /* @__PURE__ */ jsx4("span", { "data-slot": "avatar-fallback", className: cn("flex size-full items-center justify-center font-medium", className), ...props });
593
+ return /* @__PURE__ */ jsx6("span", { "data-slot": "avatar-fallback", className: cn("flex size-full items-center justify-center font-medium", className), ...props });
405
594
  }
406
595
  function AvatarBadge({ className, ...props }) {
407
- return /* @__PURE__ */ jsx4("span", { "data-slot": "avatar-badge", className: cn("absolute right-0 bottom-0 size-2.5 rounded-full bg-success ring-2 ring-background", className), ...props });
596
+ return /* @__PURE__ */ jsx6("span", { "data-slot": "avatar-badge", className: cn("absolute right-0 bottom-0 size-2.5 rounded-full bg-success ring-2 ring-background", className), ...props });
408
597
  }
409
598
  function AvatarGroup({ className, ...props }) {
410
- return /* @__PURE__ */ jsx4("div", { "data-slot": "avatar-group", className: cn("flex -space-x-2 [&>[data-slot=avatar]]:ring-2 [&>[data-slot=avatar]]:ring-background", className), ...props });
599
+ return /* @__PURE__ */ jsx6("div", { "data-slot": "avatar-group", className: cn("flex -space-x-2 [&>[data-slot=avatar]]:ring-2 [&>[data-slot=avatar]]:ring-background", className), ...props });
411
600
  }
412
601
  function AvatarGroupCount({ className, ...props }) {
413
- return /* @__PURE__ */ jsx4("span", { "data-slot": "avatar-group-count", className: cn("flex size-8 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground ring-2 ring-background", className), ...props });
602
+ return /* @__PURE__ */ jsx6("span", { "data-slot": "avatar-group-count", className: cn("flex size-8 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground ring-2 ring-background", className), ...props });
414
603
  }
415
604
 
416
605
  // src/ui/badge/badge.tsx
417
- import { cva as cva3 } from "class-variance-authority";
606
+ import { cva as cva4 } from "class-variance-authority";
418
607
  import { Link } from "react-aria-components";
419
- import { jsx as jsx5 } from "react/jsx-runtime";
420
- var badgeVariants = cva3(
608
+ import { jsx as jsx7 } from "react/jsx-runtime";
609
+ var badgeVariants = cva4(
421
610
  "inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 [&>svg]:pointer-events-none [&>svg]:size-3",
422
611
  {
423
612
  variants: {
@@ -439,7 +628,7 @@ var badgeVariants = cva3(
439
628
  }
440
629
  );
441
630
  function Badge({ className, variant, ...props }) {
442
- return /* @__PURE__ */ jsx5(
631
+ return /* @__PURE__ */ jsx7(
443
632
  "span",
444
633
  {
445
634
  "data-slot": "badge",
@@ -450,7 +639,7 @@ function Badge({ className, variant, ...props }) {
450
639
  );
451
640
  }
452
641
  function BadgeLink({ className, variant, ...props }) {
453
- return /* @__PURE__ */ jsx5(
642
+ return /* @__PURE__ */ jsx7(
454
643
  Link,
455
644
  {
456
645
  "data-slot": "badge",
@@ -463,31 +652,31 @@ function BadgeLink({ className, variant, ...props }) {
463
652
 
464
653
  // src/ui/breadcrumb/breadcrumb.tsx
465
654
  import { Breadcrumb as AriaBreadcrumb, Breadcrumbs as AriaBreadcrumbs, Link as AriaLink } from "react-aria-components";
466
- import { jsx as jsx6 } from "react/jsx-runtime";
655
+ import { jsx as jsx8 } from "react/jsx-runtime";
467
656
  function Breadcrumbs({ className, ...props }) {
468
- return /* @__PURE__ */ jsx6(AriaBreadcrumbs, { "data-slot": "breadcrumbs", className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className), ...props });
657
+ return /* @__PURE__ */ jsx8(AriaBreadcrumbs, { "data-slot": "breadcrumbs", className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className), ...props });
469
658
  }
470
659
  function Breadcrumb({ className, ...props }) {
471
- return /* @__PURE__ */ jsx6(AriaBreadcrumb, { "data-slot": "breadcrumb", className: cn("inline-flex items-center gap-1.5", className), ...props });
660
+ return /* @__PURE__ */ jsx8(AriaBreadcrumb, { "data-slot": "breadcrumb", className: cn("inline-flex items-center gap-1.5", className), ...props });
472
661
  }
473
662
  function BreadcrumbLink({ className, ...props }) {
474
- return /* @__PURE__ */ jsx6(AriaLink, { "data-slot": "breadcrumb-link", className: cn("transition-colors hover:text-foreground", className), ...props });
663
+ return /* @__PURE__ */ jsx8(AriaLink, { "data-slot": "breadcrumb-link", className: cn("transition-colors hover:text-foreground", className), ...props });
475
664
  }
476
665
  function BreadcrumbPage({ className, ...props }) {
477
- return /* @__PURE__ */ jsx6("span", { "data-slot": "breadcrumb-page", "aria-current": "page", className: cn("font-medium text-foreground", className), ...props });
666
+ return /* @__PURE__ */ jsx8("span", { "data-slot": "breadcrumb-page", "aria-current": "page", className: cn("font-medium text-foreground", className), ...props });
478
667
  }
479
668
  function BreadcrumbSeparator({ children = "/", className, ...props }) {
480
- return /* @__PURE__ */ jsx6("span", { "data-slot": "breadcrumb-separator", "aria-hidden": "true", className: cn("text-muted-foreground/60", className), ...props, children });
669
+ return /* @__PURE__ */ jsx8("span", { "data-slot": "breadcrumb-separator", "aria-hidden": "true", className: cn("text-muted-foreground/60", className), ...props, children });
481
670
  }
482
671
 
483
672
  // src/ui/button-group/button-group.tsx
484
- import { cva as cva4 } from "class-variance-authority";
673
+ import { cva as cva5 } from "class-variance-authority";
485
674
 
486
675
  // src/ui/separator/separator.tsx
487
676
  import { Separator as SeparatorPrimitive } from "react-aria-components";
488
- import { jsx as jsx7 } from "react/jsx-runtime";
677
+ import { jsx as jsx9 } from "react/jsx-runtime";
489
678
  function Separator({ className, orientation = "horizontal", ...props }) {
490
- return /* @__PURE__ */ jsx7(
679
+ return /* @__PURE__ */ jsx9(
491
680
  SeparatorPrimitive,
492
681
  {
493
682
  "data-slot": "separator",
@@ -502,8 +691,8 @@ function Separator({ className, orientation = "horizontal", ...props }) {
502
691
  }
503
692
 
504
693
  // src/ui/button-group/button-group.tsx
505
- import { jsx as jsx8 } from "react/jsx-runtime";
506
- var buttonGroupVariants = cva4(
694
+ import { jsx as jsx10 } from "react/jsx-runtime";
695
+ var buttonGroupVariants = cva5(
507
696
  "flex w-fit items-stretch *:focus-visible:relative *:focus-visible:z-10 has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
508
697
  {
509
698
  variants: {
@@ -524,7 +713,7 @@ function ButtonGroup({
524
713
  }) {
525
714
  return (
526
715
  // biome-ignore lint/a11y/useSemanticElements: fieldset would impose form semantics on a generic action group.
527
- /* @__PURE__ */ jsx8(
716
+ /* @__PURE__ */ jsx10(
528
717
  "div",
529
718
  {
530
719
  role: "group",
@@ -552,7 +741,7 @@ function ButtonGroupText({
552
741
  };
553
742
  return render(renderProps);
554
743
  }
555
- return /* @__PURE__ */ jsx8(
744
+ return /* @__PURE__ */ jsx10(
556
745
  "div",
557
746
  {
558
747
  "data-slot": "button-group-text",
@@ -569,7 +758,7 @@ function ButtonGroupSeparator({
569
758
  orientation = "vertical",
570
759
  ...props
571
760
  }) {
572
- return /* @__PURE__ */ jsx8(
761
+ return /* @__PURE__ */ jsx10(
573
762
  Separator,
574
763
  {
575
764
  "data-slot": "button-group-separator",
@@ -583,117 +772,10 @@ function ButtonGroupSeparator({
583
772
  );
584
773
  }
585
774
 
586
- // src/ui/button/button.tsx
587
- import { cva as cva5 } from "class-variance-authority";
588
- import { useState as useState5 } from "react";
589
- import {
590
- Button as ButtonPrimitive,
591
- Link as LinkPrimitive
592
- } from "react-aria-components";
593
- import { Fragment, jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
594
- function useActionRipple(enabled) {
595
- const [rippleId, setRippleId] = useState5(0);
596
- function triggerRipple() {
597
- if (enabled) setRippleId((currentId) => currentId + 1);
598
- }
599
- const ripple = rippleId ? /* @__PURE__ */ jsx9(
600
- "span",
601
- {
602
- "aria-hidden": "true",
603
- "data-slot": "button-ripple",
604
- className: "pointer-events-none absolute top-1/2 left-1/2 aspect-square w-full rounded-full bg-current animate-ui-ripple motion-reduce:hidden",
605
- onAnimationEnd: () => setRippleId(0)
606
- },
607
- rippleId
608
- ) : null;
609
- return { ripple, triggerRipple };
610
- }
611
- var buttonVariants = cva5(
612
- cn(
613
- "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
614
- actionRipple()
615
- ),
616
- {
617
- variants: {
618
- variant: {
619
- default: "bg-primary text-primary-foreground hover:bg-primary/80",
620
- outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
621
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
622
- ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
623
- destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
624
- link: "text-primary underline-offset-4 hover:underline after:hidden"
625
- },
626
- size: {
627
- default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
628
- xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
629
- sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
630
- lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
631
- icon: "size-8",
632
- "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
633
- "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
634
- "icon-lg": "size-9"
635
- }
636
- },
637
- defaultVariants: {
638
- variant: "default",
639
- size: "default"
640
- }
641
- }
642
- );
643
- function Button({ className, variant = "default", size = "default", onClick, children, ...props }) {
644
- const { ripple, triggerRipple } = useActionRipple(variant !== "link");
645
- return /* @__PURE__ */ jsx9(
646
- ButtonPrimitive,
647
- {
648
- "data-slot": "button",
649
- "data-variant": variant,
650
- "data-size": size,
651
- className: cn(buttonVariants({ variant, size, className })),
652
- onClick: (event) => {
653
- onClick?.(event);
654
- triggerRipple();
655
- },
656
- ...props,
657
- children: (renderProps) => /* @__PURE__ */ jsxs2(Fragment, { children: [
658
- typeof children === "function" ? children(renderProps) : children,
659
- ripple
660
- ] })
661
- }
662
- );
663
- }
664
- function LinkButton({
665
- className,
666
- variant = "default",
667
- size = "default",
668
- onClick,
669
- children,
670
- ...props
671
- }) {
672
- const { ripple, triggerRipple } = useActionRipple(variant !== "link");
673
- return /* @__PURE__ */ jsx9(
674
- LinkPrimitive,
675
- {
676
- "data-slot": "button",
677
- "data-variant": variant,
678
- "data-size": size,
679
- className: cn(buttonVariants({ variant, size, className })),
680
- onClick: (event) => {
681
- onClick?.(event);
682
- triggerRipple();
683
- },
684
- ...props,
685
- children: (renderProps) => /* @__PURE__ */ jsxs2(Fragment, { children: [
686
- typeof children === "function" ? children(renderProps) : children,
687
- ripple
688
- ] })
689
- }
690
- );
691
- }
692
-
693
775
  // src/ui/card/card.tsx
694
- import { jsx as jsx10 } from "react/jsx-runtime";
776
+ import { jsx as jsx11 } from "react/jsx-runtime";
695
777
  function Card({ className, size = "default", ...props }) {
696
- return /* @__PURE__ */ jsx10(
778
+ return /* @__PURE__ */ jsx11(
697
779
  "div",
698
780
  {
699
781
  "data-slot": "card",
@@ -707,7 +789,7 @@ function Card({ className, size = "default", ...props }) {
707
789
  );
708
790
  }
709
791
  function CardHeader({ className, ...props }) {
710
- return /* @__PURE__ */ jsx10(
792
+ return /* @__PURE__ */ jsx11(
711
793
  "div",
712
794
  {
713
795
  "data-slot": "card-header",
@@ -720,7 +802,7 @@ function CardHeader({ className, ...props }) {
720
802
  );
721
803
  }
722
804
  function CardTitle({ className, ...props }) {
723
- return /* @__PURE__ */ jsx10(
805
+ return /* @__PURE__ */ jsx11(
724
806
  "div",
725
807
  {
726
808
  "data-slot": "card-title",
@@ -733,7 +815,7 @@ function CardTitle({ className, ...props }) {
733
815
  );
734
816
  }
735
817
  function CardDescription({ className, ...props }) {
736
- return /* @__PURE__ */ jsx10(
818
+ return /* @__PURE__ */ jsx11(
737
819
  "div",
738
820
  {
739
821
  "data-slot": "card-description",
@@ -743,7 +825,7 @@ function CardDescription({ className, ...props }) {
743
825
  );
744
826
  }
745
827
  function CardAction({ className, ...props }) {
746
- return /* @__PURE__ */ jsx10(
828
+ return /* @__PURE__ */ jsx11(
747
829
  "div",
748
830
  {
749
831
  "data-slot": "card-action",
@@ -753,10 +835,10 @@ function CardAction({ className, ...props }) {
753
835
  );
754
836
  }
755
837
  function CardContent({ className, ...props }) {
756
- return /* @__PURE__ */ jsx10("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props });
838
+ return /* @__PURE__ */ jsx11("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props });
757
839
  }
758
840
  function CardFooter({ className, ...props }) {
759
- return /* @__PURE__ */ jsx10(
841
+ return /* @__PURE__ */ jsx11(
760
842
  "div",
761
843
  {
762
844
  "data-slot": "card-footer",
@@ -774,9 +856,9 @@ import { Check } from "lucide-react";
774
856
  import {
775
857
  Checkbox as AriaCheckbox
776
858
  } from "react-aria-components";
777
- import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs3 } from "react/jsx-runtime";
859
+ import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs3 } from "react/jsx-runtime";
778
860
  function Checkbox({ className, children, ...props }) {
779
- return /* @__PURE__ */ jsx11(
861
+ return /* @__PURE__ */ jsx12(
780
862
  AriaCheckbox,
781
863
  {
782
864
  "data-slot": "checkbox",
@@ -785,13 +867,13 @@ function Checkbox({ className, children, ...props }) {
785
867
  className
786
868
  ),
787
869
  ...props,
788
- children: (state) => /* @__PURE__ */ jsxs3(Fragment2, { children: [
789
- /* @__PURE__ */ jsx11(
870
+ children: (state) => /* @__PURE__ */ jsxs3(Fragment3, { children: [
871
+ /* @__PURE__ */ jsx12(
790
872
  "span",
791
873
  {
792
874
  "aria-hidden": "true",
793
875
  className: "grid size-4 place-items-center rounded border border-border bg-background text-primary-foreground transition-colors group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50",
794
- children: /* @__PURE__ */ jsx11(Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" })
876
+ children: /* @__PURE__ */ jsx12(Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" })
795
877
  }
796
878
  ),
797
879
  typeof children === "function" ? children(state) : children
@@ -800,28 +882,96 @@ function Checkbox({ className, children, ...props }) {
800
882
  );
801
883
  }
802
884
 
885
+ // src/ui/collapsible/collapsible.tsx
886
+ import * as React3 from "react";
887
+ import { jsx as jsx13 } from "react/jsx-runtime";
888
+ var CollapsibleContext = React3.createContext(null);
889
+ function useCollapsibleContext() {
890
+ const context = React3.useContext(CollapsibleContext);
891
+ if (!context) throw new Error("Collapsible components must be rendered within Collapsible.");
892
+ return context;
893
+ }
894
+ function Collapsible({
895
+ children,
896
+ defaultOpen = false,
897
+ onOpenChange,
898
+ open: controlledOpen,
899
+ ...props
900
+ }) {
901
+ const [uncontrolledOpen, setUncontrolledOpen] = React3.useState(defaultOpen);
902
+ const contentId = React3.useId();
903
+ const open = controlledOpen ?? uncontrolledOpen;
904
+ const setOpen = React3.useCallback(
905
+ (nextOpen) => {
906
+ if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
907
+ onOpenChange?.(nextOpen);
908
+ },
909
+ [controlledOpen, onOpenChange]
910
+ );
911
+ return /* @__PURE__ */ jsx13(CollapsibleContext.Provider, { value: { contentId, open, setOpen }, children: /* @__PURE__ */ jsx13("div", { "data-slot": "collapsible", "data-state": open ? "open" : "closed", ...props, children }) });
912
+ }
913
+ function CollapsibleTrigger({ asChild = false, children, onClick, ...props }) {
914
+ const { contentId, open, setOpen } = useCollapsibleContext();
915
+ const handleClick = (event) => {
916
+ onClick?.(event);
917
+ if (!event.defaultPrevented) setOpen(!open);
918
+ };
919
+ if (asChild && React3.isValidElement(children)) {
920
+ const child = children;
921
+ return React3.cloneElement(child, {
922
+ ...props,
923
+ "aria-controls": contentId,
924
+ "aria-expanded": open,
925
+ "data-slot": "collapsible-trigger",
926
+ "data-state": open ? "open" : "closed",
927
+ onClick: (event) => {
928
+ child.props.onClick?.(event);
929
+ handleClick(event);
930
+ }
931
+ });
932
+ }
933
+ return /* @__PURE__ */ jsx13(
934
+ "button",
935
+ {
936
+ type: "button",
937
+ "data-slot": "collapsible-trigger",
938
+ "data-state": open ? "open" : "closed",
939
+ "aria-controls": contentId,
940
+ "aria-expanded": open,
941
+ onClick: handleClick,
942
+ ...props,
943
+ children
944
+ }
945
+ );
946
+ }
947
+ function CollapsibleContent({ children, ...props }) {
948
+ const { contentId, open } = useCollapsibleContext();
949
+ if (!open) return null;
950
+ return /* @__PURE__ */ jsx13("div", { id: contentId, "data-slot": "collapsible-content", "data-state": "open", ...props, children });
951
+ }
952
+
803
953
  // src/ui/combobox/combobox.tsx
804
- import { Fragment as Fragment3, useMemo, useState as useState6 } from "react";
805
- import { ComboBox as AriaComboBox, ComboBoxValue, FieldError, Input, Label, ListBox, ListBoxItem, Popover, Text } from "react-aria-components";
806
- import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
954
+ import { Fragment as Fragment4, useMemo, useState as useState7 } from "react";
955
+ import { ComboBox as AriaComboBox, ComboBoxValue, FieldError, Input, Label, ListBox, ListBoxItem, Popover, Text as Text2 } from "react-aria-components";
956
+ import { jsx as jsx14, jsxs as jsxs4 } from "react/jsx-runtime";
807
957
  var Combobox = AriaComboBox;
808
958
  function ComboboxInput({ className, ...props }) {
809
- return /* @__PURE__ */ jsx12(Input, { "data-slot": "combobox-input", className: cn("h-9 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
959
+ return /* @__PURE__ */ jsx14(Input, { "data-slot": "combobox-input", className: cn("h-9 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
810
960
  }
811
961
  function ComboboxContent({ className, ...props }) {
812
- return /* @__PURE__ */ jsx12(Popover, { "data-slot": "combobox-content", className: cn("max-h-72 w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
962
+ return /* @__PURE__ */ jsx14(Popover, { "data-slot": "combobox-content", className: cn("max-h-72 w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
813
963
  }
814
964
  function ComboboxList({ className, emptyState, ...props }) {
815
- return /* @__PURE__ */ jsx12(ListBox, { "data-slot": "combobox-list", className: cn("max-h-64 overflow-y-auto", className), renderEmptyState: emptyState ? () => emptyState : void 0, ...props });
965
+ return /* @__PURE__ */ jsx14(ListBox, { "data-slot": "combobox-list", className: cn("max-h-64 overflow-y-auto", className), renderEmptyState: emptyState ? () => emptyState : void 0, ...props });
816
966
  }
817
967
  function ComboboxItem({ className, children, ...props }) {
818
- return /* @__PURE__ */ jsx12(ListBoxItem, { "data-slot": "combobox-item", className: cn("flex w-full cursor-default items-center justify-between rounded-md px-2 py-2 text-sm outline-none transition-colors data-focused:bg-muted data-focused:text-foreground data-hovered:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
968
+ return /* @__PURE__ */ jsx14(ListBoxItem, { "data-slot": "combobox-item", className: cn("flex w-full cursor-default items-center justify-between rounded-md px-2 py-2 text-sm outline-none transition-colors data-focused:bg-muted data-focused:text-foreground data-hovered:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
819
969
  }
820
970
  function HighlightMatch({ text, query, className }) {
821
- return /* @__PURE__ */ jsx12("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ jsx12("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ jsx12(Fragment3, { children: part.text }, `${part.text}-${index}`)) });
971
+ return /* @__PURE__ */ jsx14("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ jsx14("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ jsx14(Fragment4, { children: part.text }, `${part.text}-${index}`)) });
822
972
  }
823
- function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inputValue: controlledInputValue, onInputChange, selectedKey, onSelectionChange, label, description, errorMessage, emptyState = /* @__PURE__ */ jsx12("p", { className: "px-3 py-7 text-center text-sm text-muted-foreground", children: "No hay resultados." }), suggestion = true, placeholder, className, onKeyDown: _onKeyDown, ...props }) {
824
- const [internalInputValue, setInternalInputValue] = useState6("");
973
+ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inputValue: controlledInputValue, onInputChange, selectedKey, onSelectionChange, label, description, errorMessage, emptyState = /* @__PURE__ */ jsx14("p", { className: "px-3 py-7 text-center text-sm text-muted-foreground", children: "No hay resultados." }), suggestion = true, placeholder, className, onKeyDown: _onKeyDown, ...props }) {
974
+ const [internalInputValue, setInternalInputValue] = useState7("");
825
975
  const inputValue = controlledInputValue ?? internalInputValue;
826
976
  const setInputValue = (value) => {
827
977
  setInternalInputValue(value);
@@ -845,49 +995,49 @@ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inp
845
995
  if (item) setInputValue(getItemLabel(item));
846
996
  onSelectionChange?.(key, item);
847
997
  }, children: [
848
- label && /* @__PURE__ */ jsx12(Label, { className: "text-sm font-medium text-foreground", children: label }),
998
+ label && /* @__PURE__ */ jsx14(Label, { className: "text-sm font-medium text-foreground", children: label }),
849
999
  /* @__PURE__ */ jsxs4("div", { className: "relative", children: [
850
1000
  suggestionLabel && /* @__PURE__ */ jsxs4("span", { "aria-hidden": "true", className: "pointer-events-none absolute inset-y-0 left-2.5 z-0 flex items-center whitespace-pre text-sm text-muted-foreground/60", children: [
851
- /* @__PURE__ */ jsx12("span", { className: "text-transparent", children: inputValue }),
1001
+ /* @__PURE__ */ jsx14("span", { className: "text-transparent", children: inputValue }),
852
1002
  suggestionLabel.slice(inputValue.length)
853
1003
  ] }),
854
- /* @__PURE__ */ jsx12(ComboboxInput, { "aria-autocomplete": suggestionLabel ? "both" : "list", placeholder, onKeyDown: handleKeyDown, className: "relative z-10 bg-transparent" })
1004
+ /* @__PURE__ */ jsx14(ComboboxInput, { "aria-autocomplete": suggestionLabel ? "both" : "list", placeholder, onKeyDown: handleKeyDown, className: "relative z-10 bg-transparent" })
855
1005
  ] }),
856
- description && /* @__PURE__ */ jsx12(Text, { slot: "description", className: "text-xs text-muted-foreground", children: description }),
857
- errorMessage && /* @__PURE__ */ jsx12(FieldError, { className: "text-xs text-destructive", children: errorMessage }),
858
- /* @__PURE__ */ jsx12(ComboboxContent, { children: /* @__PURE__ */ jsx12(ComboboxList, { emptyState, children: (item) => /* @__PURE__ */ jsx12(ComboboxItem, { id: getItemKey(item), textValue: getItemLabel(item), children: renderItem ? renderItem(item, inputValue) : /* @__PURE__ */ jsx12(HighlightMatch, { text: getItemLabel(item), query: inputValue }) }) }) })
1006
+ description && /* @__PURE__ */ jsx14(Text2, { slot: "description", className: "text-xs text-muted-foreground", children: description }),
1007
+ errorMessage && /* @__PURE__ */ jsx14(FieldError, { className: "text-xs text-destructive", children: errorMessage }),
1008
+ /* @__PURE__ */ jsx14(ComboboxContent, { children: /* @__PURE__ */ jsx14(ComboboxList, { emptyState, children: (item) => /* @__PURE__ */ jsx14(ComboboxItem, { id: getItemKey(item), textValue: getItemLabel(item), children: renderItem ? renderItem(item, inputValue) : /* @__PURE__ */ jsx14(HighlightMatch, { text: getItemLabel(item), query: inputValue }) }) }) })
859
1009
  ] });
860
1010
  }
861
1011
 
862
1012
  // src/ui/command/command.tsx
863
1013
  import { ComboBox as AriaComboBox2, Input as AriaInput, ListBox as ListBox2, ListBoxItem as ListBoxItem2, Popover as Popover2 } from "react-aria-components";
864
- import { jsx as jsx13 } from "react/jsx-runtime";
1014
+ import { jsx as jsx15 } from "react/jsx-runtime";
865
1015
  function Command({ className, ...props }) {
866
- return /* @__PURE__ */ jsx13(AriaComboBox2, { "data-slot": "command", className: cn("w-full", className), ...props });
1016
+ return /* @__PURE__ */ jsx15(AriaComboBox2, { "data-slot": "command", className: cn("w-full", className), ...props });
867
1017
  }
868
1018
  function CommandInput({ className, ...props }) {
869
- return /* @__PURE__ */ jsx13(AriaInput, { "data-slot": "command-input", className: cn("h-9 w-full border-0 bg-transparent px-3 text-sm text-foreground outline-none placeholder:text-muted-foreground", className), ...props });
1019
+ return /* @__PURE__ */ jsx15(AriaInput, { "data-slot": "command-input", className: cn("h-9 w-full border-0 bg-transparent px-3 text-sm text-foreground outline-none placeholder:text-muted-foreground", className), ...props });
870
1020
  }
871
1021
  function CommandContent({ className, ...props }) {
872
- return /* @__PURE__ */ jsx13(Popover2, { "data-slot": "command-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 shadow-lg outline-none", className), ...props });
1022
+ return /* @__PURE__ */ jsx15(Popover2, { "data-slot": "command-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 shadow-lg outline-none", className), ...props });
873
1023
  }
874
1024
  function CommandList({ className, ...props }) {
875
- return /* @__PURE__ */ jsx13(ListBox2, { "data-slot": "command-list", className: cn("max-h-72 overflow-y-auto", className), ...props });
1025
+ return /* @__PURE__ */ jsx15(ListBox2, { "data-slot": "command-list", className: cn("max-h-72 overflow-y-auto", className), ...props });
876
1026
  }
877
1027
  function CommandItem({ className, ...props }) {
878
- return /* @__PURE__ */ jsx13(ListBoxItem2, { "data-slot": "command-item", className: cn("flex cursor-default items-center rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props });
1028
+ return /* @__PURE__ */ jsx15(ListBoxItem2, { "data-slot": "command-item", className: cn("flex cursor-default items-center rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props });
879
1029
  }
880
1030
 
881
1031
  // src/ui/modal-dialog/modal-dialog.tsx
882
1032
  import { X } from "lucide-react";
883
1033
  import {
884
- Dialog as AriaDialog,
885
- Heading,
886
- Modal,
887
- ModalOverlay,
888
- Text as Text2
1034
+ Dialog as AriaDialog2,
1035
+ Heading as Heading2,
1036
+ Modal as Modal2,
1037
+ ModalOverlay as ModalOverlay2,
1038
+ Text as Text3
889
1039
  } from "react-aria-components";
890
- import { Fragment as Fragment4, jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
1040
+ import { Fragment as Fragment5, jsx as jsx16, jsxs as jsxs5 } from "react/jsx-runtime";
891
1041
  var sizeClasses = {
892
1042
  sm: "w-[min(calc(100dvw-2rem),24rem)]",
893
1043
  md: "w-[min(calc(100dvw-2rem),28rem)]",
@@ -907,35 +1057,35 @@ function ModalDialog({
907
1057
  ...props
908
1058
  }) {
909
1059
  const layoutClass = children ? footer ? "grid-rows-[auto_minmax(0,1fr)_auto]" : "grid-rows-[auto_minmax(0,1fr)]" : "grid-rows-[auto_auto]";
910
- return /* @__PURE__ */ jsx14(
911
- ModalOverlay,
1060
+ return /* @__PURE__ */ jsx16(
1061
+ ModalOverlay2,
912
1062
  {
913
1063
  isOpen: open,
914
1064
  onOpenChange,
915
1065
  className: "fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out",
916
1066
  ...props,
917
- children: /* @__PURE__ */ jsx14(
918
- Modal,
1067
+ children: /* @__PURE__ */ jsx16(
1068
+ Modal2,
919
1069
  {
920
1070
  className: cn(
921
1071
  "max-h-[calc(100dvh-2rem)] outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out",
922
1072
  sizeClasses[size],
923
1073
  className
924
1074
  ),
925
- children: /* @__PURE__ */ jsx14(
926
- AriaDialog,
1075
+ children: /* @__PURE__ */ jsx16(
1076
+ AriaDialog2,
927
1077
  {
928
1078
  className: cn(
929
1079
  "grid max-h-[calc(100dvh-2rem)] overflow-hidden rounded-xl bg-background text-foreground shadow-xl outline-none",
930
1080
  layoutClass
931
1081
  ),
932
- children: ({ close }) => /* @__PURE__ */ jsxs5(Fragment4, { children: [
1082
+ children: ({ close }) => /* @__PURE__ */ jsxs5(Fragment5, { children: [
933
1083
  /* @__PURE__ */ jsxs5("header", { "data-slot": "modal-dialog-header", className: "flex items-start gap-3 border-b border-border px-5 py-4", children: [
934
1084
  /* @__PURE__ */ jsxs5("div", { className: "min-w-0 flex-1", children: [
935
- /* @__PURE__ */ jsx14(Heading, { slot: "title", className: "font-heading text-base leading-none font-medium", children: title }),
936
- description ? /* @__PURE__ */ jsx14(Text2, { slot: "description", className: "mt-2 text-sm text-muted-foreground", children: description }) : null
1085
+ /* @__PURE__ */ jsx16(Heading2, { slot: "title", className: "font-heading text-base leading-none font-medium", children: title }),
1086
+ description ? /* @__PURE__ */ jsx16(Text3, { slot: "description", className: "mt-2 text-sm text-muted-foreground", children: description }) : null
937
1087
  ] }),
938
- showCloseButton ? /* @__PURE__ */ jsx14(
1088
+ showCloseButton ? /* @__PURE__ */ jsx16(
939
1089
  Button,
940
1090
  {
941
1091
  "aria-label": "Cerrar di\xE1logo",
@@ -943,12 +1093,12 @@ function ModalDialog({
943
1093
  size: "icon",
944
1094
  className: "-mr-2 -mt-1",
945
1095
  onPress: close,
946
- children: /* @__PURE__ */ jsx14(X, { "aria-hidden": "true", className: "size-4" })
1096
+ children: /* @__PURE__ */ jsx16(X, { "aria-hidden": "true", className: "size-4" })
947
1097
  }
948
1098
  ) : null
949
1099
  ] }),
950
- children ? /* @__PURE__ */ jsx14("div", { "data-slot": "modal-dialog-body", className: "min-h-0 overflow-y-auto px-5 py-4", children }) : null,
951
- footer ? /* @__PURE__ */ jsx14(
1100
+ children ? /* @__PURE__ */ jsx16("div", { "data-slot": "modal-dialog-body", className: "min-h-0 overflow-y-auto px-5 py-4", children }) : null,
1101
+ footer ? /* @__PURE__ */ jsx16(
952
1102
  "footer",
953
1103
  {
954
1104
  "data-slot": "modal-dialog-footer",
@@ -969,7 +1119,7 @@ function ModalDialog({
969
1119
  }
970
1120
 
971
1121
  // src/ui/confirm-dialog/confirm-dialog.tsx
972
- import { Fragment as Fragment5, jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
1122
+ import { Fragment as Fragment6, jsx as jsx17, jsxs as jsxs6 } from "react/jsx-runtime";
973
1123
  function ConfirmDialog({
974
1124
  open,
975
1125
  onOpenChange,
@@ -981,7 +1131,7 @@ function ConfirmDialog({
981
1131
  pending = false,
982
1132
  onConfirm
983
1133
  }) {
984
- return /* @__PURE__ */ jsx15(
1134
+ return /* @__PURE__ */ jsx17(
985
1135
  ModalDialog,
986
1136
  {
987
1137
  open,
@@ -989,9 +1139,9 @@ function ConfirmDialog({
989
1139
  title,
990
1140
  description,
991
1141
  showCloseButton: false,
992
- footer: /* @__PURE__ */ jsxs6(Fragment5, { children: [
993
- /* @__PURE__ */ jsx15(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
994
- /* @__PURE__ */ jsx15(Button, { variant: destructive ? "destructive" : "default", isDisabled: pending, onPress: onConfirm, children: confirmLabel })
1142
+ footer: /* @__PURE__ */ jsxs6(Fragment6, { children: [
1143
+ /* @__PURE__ */ jsx17(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
1144
+ /* @__PURE__ */ jsx17(Button, { variant: destructive ? "destructive" : "default", isDisabled: pending, onPress: onConfirm, children: confirmLabel })
995
1145
  ] })
996
1146
  }
997
1147
  );
@@ -1003,9 +1153,9 @@ import {
1003
1153
  Button as DisclosureButton,
1004
1154
  Disclosure,
1005
1155
  DisclosurePanel,
1006
- Heading as Heading2
1156
+ Heading as Heading3
1007
1157
  } from "react-aria-components";
1008
- import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
1158
+ import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
1009
1159
  function DangerZone({
1010
1160
  title = "Zona de peligro",
1011
1161
  description = "Acciones irreversibles. \xC1brela solo si est\xE1s seguro.",
@@ -1013,55 +1163,55 @@ function DangerZone({
1013
1163
  className,
1014
1164
  children
1015
1165
  }) {
1016
- return /* @__PURE__ */ jsx16(Disclosure, { defaultExpanded: defaultOpen, children: /* @__PURE__ */ jsxs7(Card, { className: cn("border-destructive/30", className), children: [
1017
- /* @__PURE__ */ jsx16(Heading2, { className: "flex", children: /* @__PURE__ */ jsxs7(
1166
+ return /* @__PURE__ */ jsx18(Disclosure, { defaultExpanded: defaultOpen, children: /* @__PURE__ */ jsxs7(Card, { className: cn("border-destructive/30", className), children: [
1167
+ /* @__PURE__ */ jsx18(Heading3, { className: "flex", children: /* @__PURE__ */ jsxs7(
1018
1168
  DisclosureButton,
1019
1169
  {
1020
1170
  slot: "trigger",
1021
1171
  "data-slot": "danger-zone-trigger",
1022
1172
  className: "group/danger flex w-full items-center gap-3 px-4 text-left outline-none focus-visible:ring-3 focus-visible:ring-ring/50",
1023
1173
  children: [
1024
- /* @__PURE__ */ jsx16(ShieldAlert, { className: "size-4 shrink-0 text-destructive" }),
1174
+ /* @__PURE__ */ jsx18(ShieldAlert, { className: "size-4 shrink-0 text-destructive" }),
1025
1175
  /* @__PURE__ */ jsxs7("span", { className: "flex flex-1 flex-col gap-0.5", children: [
1026
- /* @__PURE__ */ jsx16("span", { className: "font-heading text-base leading-snug font-medium text-destructive", children: title }),
1027
- /* @__PURE__ */ jsx16("span", { className: "text-xs text-muted-foreground", children: description })
1176
+ /* @__PURE__ */ jsx18("span", { className: "font-heading text-base leading-snug font-medium text-destructive", children: title }),
1177
+ /* @__PURE__ */ jsx18("span", { className: "text-xs text-muted-foreground", children: description })
1028
1178
  ] }),
1029
- /* @__PURE__ */ jsx16(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground transition-transform group-aria-expanded/danger:rotate-180" })
1179
+ /* @__PURE__ */ jsx18(ChevronDown, { className: "size-4 shrink-0 text-muted-foreground transition-transform group-aria-expanded/danger:rotate-180" })
1030
1180
  ]
1031
1181
  }
1032
1182
  ) }),
1033
- /* @__PURE__ */ jsx16(DisclosurePanel, { "data-slot": "danger-zone-content", children: /* @__PURE__ */ jsx16(CardContent, { children }) })
1183
+ /* @__PURE__ */ jsx18(DisclosurePanel, { "data-slot": "danger-zone-content", children: /* @__PURE__ */ jsx18(CardContent, { children }) })
1034
1184
  ] }) });
1035
1185
  }
1036
1186
 
1037
1187
  // src/ui/dialog/dialog.tsx
1038
1188
  import { XIcon } from "lucide-react";
1039
- import * as React2 from "react";
1189
+ import * as React4 from "react";
1040
1190
  import {
1041
- Dialog as AriaDialog2,
1042
- Heading as Heading3,
1043
- Modal as Modal2,
1044
- ModalOverlay as ModalOverlay2,
1045
- Text as Text3
1191
+ Dialog as AriaDialog3,
1192
+ Heading as Heading4,
1193
+ Modal as Modal3,
1194
+ ModalOverlay as ModalOverlay3,
1195
+ Text as Text4
1046
1196
  } from "react-aria-components";
1047
- import { Fragment as Fragment6, jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
1048
- var DialogContext = React2.createContext(null);
1197
+ import { Fragment as Fragment7, jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
1198
+ var DialogContext = React4.createContext(null);
1049
1199
  function useDialogContext() {
1050
- const context = React2.useContext(DialogContext);
1200
+ const context = React4.useContext(DialogContext);
1051
1201
  if (!context) throw new Error("Dialog components must be rendered within Dialog.");
1052
1202
  return context;
1053
1203
  }
1054
1204
  function Dialog({ children, defaultOpen = false, onOpenChange, open: controlledOpen }) {
1055
- const [uncontrolledOpen, setUncontrolledOpen] = React2.useState(defaultOpen);
1205
+ const [uncontrolledOpen, setUncontrolledOpen] = React4.useState(defaultOpen);
1056
1206
  const open = controlledOpen ?? uncontrolledOpen;
1057
- const setOpen = React2.useCallback(
1207
+ const setOpen = React4.useCallback(
1058
1208
  (nextOpen) => {
1059
1209
  if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
1060
1210
  onOpenChange?.(nextOpen);
1061
1211
  },
1062
1212
  [controlledOpen, onOpenChange]
1063
1213
  );
1064
- return /* @__PURE__ */ jsx17(DialogContext.Provider, { value: { open, setOpen }, children });
1214
+ return /* @__PURE__ */ jsx19(DialogContext.Provider, { value: { open, setOpen }, children });
1065
1215
  }
1066
1216
  function DialogTrigger({ asChild = false, children, onClick, ...props }) {
1067
1217
  const { setOpen } = useDialogContext();
@@ -1069,9 +1219,9 @@ function DialogTrigger({ asChild = false, children, onClick, ...props }) {
1069
1219
  onClick?.(event);
1070
1220
  if (!event.defaultPrevented) setOpen(true);
1071
1221
  };
1072
- if (asChild && React2.isValidElement(children)) {
1222
+ if (asChild && React4.isValidElement(children)) {
1073
1223
  const child = children;
1074
- return React2.cloneElement(child, {
1224
+ return React4.cloneElement(child, {
1075
1225
  ...props,
1076
1226
  "data-slot": "dialog-trigger",
1077
1227
  onClick: (event) => {
@@ -1080,16 +1230,16 @@ function DialogTrigger({ asChild = false, children, onClick, ...props }) {
1080
1230
  }
1081
1231
  });
1082
1232
  }
1083
- return /* @__PURE__ */ jsx17(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
1233
+ return /* @__PURE__ */ jsx19(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
1084
1234
  }
1085
1235
  function DialogPortal({ children }) {
1086
- return /* @__PURE__ */ jsx17(Fragment6, { children });
1236
+ return /* @__PURE__ */ jsx19(Fragment7, { children });
1087
1237
  }
1088
1238
  function DialogOverlay({ children, className, ...props }) {
1089
1239
  const { open, setOpen } = useDialogContext();
1090
1240
  if (!open) return null;
1091
- return /* @__PURE__ */ jsx17(
1092
- ModalOverlay2,
1241
+ return /* @__PURE__ */ jsx19(
1242
+ ModalOverlay3,
1093
1243
  {
1094
1244
  "data-slot": "dialog-overlay",
1095
1245
  isDismissable: true,
@@ -1112,21 +1262,21 @@ function DialogContent({
1112
1262
  ...props
1113
1263
  }) {
1114
1264
  const { setOpen } = useDialogContext();
1115
- return /* @__PURE__ */ jsx17(DialogPortal, { children: /* @__PURE__ */ jsx17(
1265
+ return /* @__PURE__ */ jsx19(DialogPortal, { children: /* @__PURE__ */ jsx19(
1116
1266
  DialogOverlay,
1117
1267
  {
1118
1268
  onClick: (event) => {
1119
1269
  if (event.target === event.currentTarget) onOverlayClick?.(event);
1120
1270
  },
1121
- children: /* @__PURE__ */ jsx17(
1122
- Modal2,
1271
+ children: /* @__PURE__ */ jsx19(
1272
+ Modal3,
1123
1273
  {
1124
1274
  className: cn(
1125
1275
  "w-full max-w-[calc(100%-2rem)] max-h-[calc(100dvh-2rem)] outline-none sm:max-w-sm",
1126
1276
  className
1127
1277
  ),
1128
1278
  children: /* @__PURE__ */ jsxs8(
1129
- AriaDialog2,
1279
+ AriaDialog3,
1130
1280
  {
1131
1281
  "data-slot": "dialog-content",
1132
1282
  className: cn(
@@ -1136,7 +1286,7 @@ function DialogContent({
1136
1286
  ...props,
1137
1287
  children: [
1138
1288
  children,
1139
- showCloseButton ? /* @__PURE__ */ jsx17(
1289
+ showCloseButton ? /* @__PURE__ */ jsx19(
1140
1290
  Button,
1141
1291
  {
1142
1292
  "aria-label": "Cerrar di\xE1logo",
@@ -1145,7 +1295,7 @@ function DialogContent({
1145
1295
  className: "absolute top-2 right-2",
1146
1296
  size: "icon-sm",
1147
1297
  onPress: () => setOpen(false),
1148
- children: /* @__PURE__ */ jsx17(XIcon, {})
1298
+ children: /* @__PURE__ */ jsx19(XIcon, {})
1149
1299
  }
1150
1300
  ) : null
1151
1301
  ]
@@ -1158,9 +1308,9 @@ function DialogContent({
1158
1308
  }
1159
1309
  function DialogClose({ asChild = false, children, onClick, ...props }) {
1160
1310
  const { setOpen } = useDialogContext();
1161
- if (asChild && React2.isValidElement(children)) {
1311
+ if (asChild && React4.isValidElement(children)) {
1162
1312
  const child = children;
1163
- return React2.cloneElement(child, {
1313
+ return React4.cloneElement(child, {
1164
1314
  ...props,
1165
1315
  "data-slot": "dialog-close",
1166
1316
  onClick: (event) => {
@@ -1169,31 +1319,31 @@ function DialogClose({ asChild = false, children, onClick, ...props }) {
1169
1319
  }
1170
1320
  });
1171
1321
  }
1172
- return /* @__PURE__ */ jsx17(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
1322
+ return /* @__PURE__ */ jsx19(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
1173
1323
  }
1174
1324
  function DialogHeader({ className, ...props }) {
1175
- return /* @__PURE__ */ jsx17("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
1325
+ return /* @__PURE__ */ jsx19("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
1176
1326
  }
1177
1327
  function DialogFooter({ className, showCloseButton = false, children, ...props }) {
1178
1328
  return /* @__PURE__ */ jsxs8("div", { "data-slot": "dialog-footer", className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:flex-wrap sm:justify-end", className), ...props, children: [
1179
1329
  children,
1180
- showCloseButton ? /* @__PURE__ */ jsx17(DialogClose, { variant: "outline", children: "Cerrar" }) : null
1330
+ showCloseButton ? /* @__PURE__ */ jsx19(DialogClose, { variant: "outline", children: "Cerrar" }) : null
1181
1331
  ] });
1182
1332
  }
1183
1333
  function DialogTitle({ className, ...props }) {
1184
- return /* @__PURE__ */ jsx17(Heading3, { slot: "title", "data-slot": "dialog-title", className: cn("font-heading text-base leading-none font-medium", className), ...props });
1334
+ return /* @__PURE__ */ jsx19(Heading4, { slot: "title", "data-slot": "dialog-title", className: cn("font-heading text-base leading-none font-medium", className), ...props });
1185
1335
  }
1186
1336
  function DialogDescription({ className, ...props }) {
1187
- return /* @__PURE__ */ jsx17(Text3, { slot: "description", "data-slot": "dialog-description", className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props });
1337
+ return /* @__PURE__ */ jsx19(Text4, { slot: "description", "data-slot": "dialog-description", className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props });
1188
1338
  }
1189
1339
 
1190
1340
  // src/ui/doc-preview/doc-preview.tsx
1191
1341
  import { FileText, Image } from "lucide-react";
1192
- import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1342
+ import { jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
1193
1343
  function DocPreview({ url, mimeType, name }) {
1194
- if (!url) return /* @__PURE__ */ jsx18(Fallback, { mimeType, reason: "no-url" });
1344
+ if (!url) return /* @__PURE__ */ jsx20(Fallback, { mimeType, reason: "no-url" });
1195
1345
  if (mimeType === "application/pdf" || mimeType === "text/plain" || mimeType === "text/csv") {
1196
- return /* @__PURE__ */ jsx18(
1346
+ return /* @__PURE__ */ jsx20(
1197
1347
  "iframe",
1198
1348
  {
1199
1349
  src: url,
@@ -1204,39 +1354,39 @@ function DocPreview({ url, mimeType, name }) {
1204
1354
  );
1205
1355
  }
1206
1356
  if (mimeType?.startsWith("image/")) {
1207
- return /* @__PURE__ */ jsx18("div", { className: "flex justify-center rounded-sm bg-muted/30 p-6", children: /* @__PURE__ */ jsx18("img", { src: url, alt: name, className: "max-h-[75vh] max-w-full rounded object-contain" }) });
1357
+ return /* @__PURE__ */ jsx20("div", { className: "flex justify-center rounded-sm bg-muted/30 p-6", children: /* @__PURE__ */ jsx20("img", { src: url, alt: name, className: "max-h-[75vh] max-w-full rounded object-contain" }) });
1208
1358
  }
1209
- return /* @__PURE__ */ jsx18(Fallback, { mimeType, reason: "unsupported" });
1359
+ return /* @__PURE__ */ jsx20(Fallback, { mimeType, reason: "unsupported" });
1210
1360
  }
1211
1361
  function Fallback({ mimeType, reason }) {
1212
1362
  const Icon = mimeType?.startsWith("image/") ? Image : FileText;
1213
1363
  const message = reason === "no-url" ? "No se pudo generar la URL de preview." : "Preview no disponible para este tipo de archivo.";
1214
1364
  return /* @__PURE__ */ jsxs9("div", { className: "flex flex-col items-center justify-center gap-2 py-14 text-muted-foreground", children: [
1215
- /* @__PURE__ */ jsx18(Icon, { className: "size-9 opacity-30" }),
1216
- /* @__PURE__ */ jsx18("p", { className: "text-sm", children: message }),
1217
- mimeType ? /* @__PURE__ */ jsx18("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
1218
- /* @__PURE__ */ jsx18("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
1365
+ /* @__PURE__ */ jsx20(Icon, { className: "size-9 opacity-30" }),
1366
+ /* @__PURE__ */ jsx20("p", { className: "text-sm", children: message }),
1367
+ mimeType ? /* @__PURE__ */ jsx20("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
1368
+ /* @__PURE__ */ jsx20("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
1219
1369
  ] });
1220
1370
  }
1221
1371
 
1222
1372
  // src/ui/drawer/drawer.tsx
1223
- import { Dialog as AriaDialog3, Modal as Modal3, ModalOverlay as ModalOverlay3 } from "react-aria-components";
1224
- import { jsx as jsx19 } from "react/jsx-runtime";
1373
+ import { Dialog as AriaDialog4, Heading as Heading5, Modal as Modal4, ModalOverlay as ModalOverlay4 } from "react-aria-components";
1374
+ import { jsx as jsx21 } from "react/jsx-runtime";
1225
1375
  var sideStyles = { left: "inset-y-0 left-0 h-full w-[min(22rem,calc(100%-2rem))] data-entering:animate-ui-surface-in", right: "inset-y-0 right-0 h-full w-[min(22rem,calc(100%-2rem))] data-entering:animate-ui-surface-in", bottom: "inset-x-0 bottom-0 max-h-[85vh] w-full data-entering:animate-ui-surface-in" };
1226
1376
  function Drawer({ children, side = "right", className, ...props }) {
1227
- return /* @__PURE__ */ jsx19(ModalOverlay3, { isDismissable: true, className: "fixed inset-0 z-50 bg-black/20 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out", ...props, children: /* @__PURE__ */ jsx19(Modal3, { className: cn("absolute grid gap-4 overflow-y-auto rounded-xl border border-border bg-background p-5 text-foreground shadow-xl outline-none", sideStyles[side], className), children: /* @__PURE__ */ jsx19(AriaDialog3, { "data-slot": "drawer", className: "outline-none", children }) }) });
1377
+ return /* @__PURE__ */ jsx21(ModalOverlay4, { isDismissable: true, className: "fixed inset-0 z-50 bg-black/20 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out", ...props, children: /* @__PURE__ */ jsx21(Modal4, { className: cn("absolute grid gap-4 overflow-y-auto rounded-xl border border-border bg-background p-5 text-foreground shadow-xl outline-none", sideStyles[side], className), children: /* @__PURE__ */ jsx21(AriaDialog4, { "data-slot": "drawer", className: "outline-none", children }) }) });
1228
1378
  }
1229
1379
  function DrawerHeader({ className, ...props }) {
1230
- return /* @__PURE__ */ jsx19("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
1380
+ return /* @__PURE__ */ jsx21("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
1231
1381
  }
1232
1382
  function DrawerFooter({ className, ...props }) {
1233
- return /* @__PURE__ */ jsx19("div", { "data-slot": "drawer-footer", className: cn("mt-auto flex flex-col-reverse gap-2 pt-4 sm:flex-row sm:justify-end", className), ...props });
1383
+ return /* @__PURE__ */ jsx21("div", { "data-slot": "drawer-footer", className: cn("mt-auto flex flex-col-reverse gap-2 pt-4 sm:flex-row sm:justify-end", className), ...props });
1234
1384
  }
1235
1385
  function DrawerTitle({ className, ...props }) {
1236
- return /* @__PURE__ */ jsx19("h2", { "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
1386
+ return /* @__PURE__ */ jsx21(Heading5, { slot: "title", "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
1237
1387
  }
1238
1388
  function DrawerDescription({ className, ...props }) {
1239
- return /* @__PURE__ */ jsx19("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
1389
+ return /* @__PURE__ */ jsx21("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
1240
1390
  }
1241
1391
 
1242
1392
  // src/ui/dropdown-menu/dropdown-menu.tsx
@@ -1254,11 +1404,11 @@ import {
1254
1404
  Separator as SeparatorPrimitive2,
1255
1405
  SubmenuTrigger as SubmenuTriggerPrimitive
1256
1406
  } from "react-aria-components";
1257
- import { Fragment as Fragment7, jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
1407
+ import { Fragment as Fragment8, jsx as jsx22, jsxs as jsxs10 } from "react/jsx-runtime";
1258
1408
  function DropdownMenuTrigger({
1259
1409
  ...props
1260
1410
  }) {
1261
- return /* @__PURE__ */ jsx20(MenuTriggerPrimitive, { "data-slot": "dropdown-menu-trigger", ...props });
1411
+ return /* @__PURE__ */ jsx22(MenuTriggerPrimitive, { "data-slot": "dropdown-menu-trigger", ...props });
1262
1412
  }
1263
1413
  function DropdownMenu({
1264
1414
  "data-slot": dataSlot = "dropdown-menu-content",
@@ -1269,7 +1419,7 @@ function DropdownMenu({
1269
1419
  children,
1270
1420
  ...props
1271
1421
  }) {
1272
- return /* @__PURE__ */ jsx20(
1422
+ return /* @__PURE__ */ jsx22(
1273
1423
  PopoverPrimitive,
1274
1424
  {
1275
1425
  "data-slot": dataSlot,
@@ -1277,7 +1427,7 @@ function DropdownMenu({
1277
1427
  offset,
1278
1428
  crossOffset,
1279
1429
  className: cn("z-50 w-(--trigger-width) min-w-32 origin-(--trigger-anchor-point) overflow-x-hidden overflow-y-auto rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className),
1280
- children: /* @__PURE__ */ jsx20(
1430
+ children: /* @__PURE__ */ jsx22(
1281
1431
  MenuPrimitive,
1282
1432
  {
1283
1433
  className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
@@ -1291,14 +1441,14 @@ function DropdownMenu({
1291
1441
  function DropdownMenuGroup({
1292
1442
  ...props
1293
1443
  }) {
1294
- return /* @__PURE__ */ jsx20(MenuSectionPrimitive, { "data-slot": "dropdown-menu-group", ...props });
1444
+ return /* @__PURE__ */ jsx22(MenuSectionPrimitive, { "data-slot": "dropdown-menu-group", ...props });
1295
1445
  }
1296
1446
  function DropdownMenuLabel({
1297
1447
  className,
1298
1448
  inset,
1299
1449
  ...props
1300
1450
  }) {
1301
- return /* @__PURE__ */ jsx20(
1451
+ return /* @__PURE__ */ jsx22(
1302
1452
  HeaderPrimitive,
1303
1453
  {
1304
1454
  "data-slot": "dropdown-menu-label",
@@ -1330,7 +1480,7 @@ function DropdownMenuItem({
1330
1480
  children,
1331
1481
  ...props
1332
1482
  }) {
1333
- return /* @__PURE__ */ jsx20(
1483
+ return /* @__PURE__ */ jsx22(
1334
1484
  MenuItemPrimitive,
1335
1485
  {
1336
1486
  "data-slot": "dropdown-menu-item",
@@ -1344,13 +1494,13 @@ function DropdownMenuItem({
1344
1494
  ...props,
1345
1495
  children: composeRenderProps(
1346
1496
  children,
1347
- (children2, { isSelected, selectionMode }) => /* @__PURE__ */ jsxs10(Fragment7, { children: [
1348
- selectionMode !== "none" ? /* @__PURE__ */ jsx20(
1497
+ (children2, { isSelected, selectionMode }) => /* @__PURE__ */ jsxs10(Fragment8, { children: [
1498
+ selectionMode !== "none" ? /* @__PURE__ */ jsx22(
1349
1499
  "span",
1350
1500
  {
1351
1501
  className: "pointer-events-none absolute right-2 flex items-center justify-center",
1352
1502
  "data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
1353
- children: isSelected ? /* @__PURE__ */ jsx20(CheckIcon, {}) : null
1503
+ children: isSelected ? /* @__PURE__ */ jsx22(CheckIcon, {}) : null
1354
1504
  }
1355
1505
  ) : null,
1356
1506
  children2
@@ -1362,7 +1512,7 @@ function DropdownMenuItem({
1362
1512
  function DropdownMenuSub({
1363
1513
  ...props
1364
1514
  }) {
1365
- return /* @__PURE__ */ jsx20(SubmenuTriggerPrimitive, { "data-slot": "dropdown-menu-sub", ...props });
1515
+ return /* @__PURE__ */ jsx22(SubmenuTriggerPrimitive, { "data-slot": "dropdown-menu-sub", ...props });
1366
1516
  }
1367
1517
  function DropdownMenuSubTrigger({
1368
1518
  className,
@@ -1370,7 +1520,7 @@ function DropdownMenuSubTrigger({
1370
1520
  children,
1371
1521
  ...props
1372
1522
  }) {
1373
- return /* @__PURE__ */ jsx20(
1523
+ return /* @__PURE__ */ jsx22(
1374
1524
  MenuItemPrimitive,
1375
1525
  {
1376
1526
  "data-slot": "dropdown-menu-sub-trigger",
@@ -1381,9 +1531,9 @@ function DropdownMenuSubTrigger({
1381
1531
  className
1382
1532
  ),
1383
1533
  ...props,
1384
- children: composeRenderProps(children, (children2) => /* @__PURE__ */ jsxs10(Fragment7, { children: [
1534
+ children: composeRenderProps(children, (children2) => /* @__PURE__ */ jsxs10(Fragment8, { children: [
1385
1535
  children2,
1386
- /* @__PURE__ */ jsx20(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1536
+ /* @__PURE__ */ jsx22(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1387
1537
  ] }))
1388
1538
  }
1389
1539
  );
@@ -1395,7 +1545,7 @@ function DropdownMenuSubContent({
1395
1545
  className,
1396
1546
  ...props
1397
1547
  }) {
1398
- return /* @__PURE__ */ jsx20(
1548
+ return /* @__PURE__ */ jsx22(
1399
1549
  DropdownMenu,
1400
1550
  {
1401
1551
  "data-slot": "dropdown-menu-sub-content",
@@ -1411,7 +1561,7 @@ function DropdownMenuSeparator({
1411
1561
  className,
1412
1562
  ...props
1413
1563
  }) {
1414
- return /* @__PURE__ */ jsx20(
1564
+ return /* @__PURE__ */ jsx22(
1415
1565
  SeparatorPrimitive2,
1416
1566
  {
1417
1567
  "data-slot": "dropdown-menu-separator",
@@ -1424,7 +1574,7 @@ function DropdownMenuShortcut({
1424
1574
  className,
1425
1575
  ...props
1426
1576
  }) {
1427
- return /* @__PURE__ */ jsx20(
1577
+ return /* @__PURE__ */ jsx22(
1428
1578
  "span",
1429
1579
  {
1430
1580
  "data-slot": "dropdown-menu-shortcut",
@@ -1439,9 +1589,9 @@ function DropdownMenuShortcut({
1439
1589
 
1440
1590
  // src/ui/empty-state/empty-state.tsx
1441
1591
  import { cva as cva7 } from "class-variance-authority";
1442
- import { jsx as jsx21 } from "react/jsx-runtime";
1592
+ import { jsx as jsx23 } from "react/jsx-runtime";
1443
1593
  function EmptyState({ className, ...props }) {
1444
- return /* @__PURE__ */ jsx21(
1594
+ return /* @__PURE__ */ jsx23(
1445
1595
  "div",
1446
1596
  {
1447
1597
  "data-slot": "empty-state",
@@ -1454,7 +1604,7 @@ function EmptyState({ className, ...props }) {
1454
1604
  );
1455
1605
  }
1456
1606
  function EmptyStateHeader({ className, ...props }) {
1457
- return /* @__PURE__ */ jsx21(
1607
+ return /* @__PURE__ */ jsx23(
1458
1608
  "div",
1459
1609
  {
1460
1610
  "data-slot": "empty-state-header",
@@ -1480,7 +1630,7 @@ function EmptyStateMedia({
1480
1630
  variant = "default",
1481
1631
  ...props
1482
1632
  }) {
1483
- return /* @__PURE__ */ jsx21(
1633
+ return /* @__PURE__ */ jsx23(
1484
1634
  "div",
1485
1635
  {
1486
1636
  "data-slot": "empty-state-media",
@@ -1491,7 +1641,7 @@ function EmptyStateMedia({
1491
1641
  );
1492
1642
  }
1493
1643
  function EmptyStateTitle({ className, ...props }) {
1494
- return /* @__PURE__ */ jsx21(
1644
+ return /* @__PURE__ */ jsx23(
1495
1645
  "h3",
1496
1646
  {
1497
1647
  "data-slot": "empty-state-title",
@@ -1501,7 +1651,7 @@ function EmptyStateTitle({ className, ...props }) {
1501
1651
  );
1502
1652
  }
1503
1653
  function EmptyStateDescription({ className, ...props }) {
1504
- return /* @__PURE__ */ jsx21(
1654
+ return /* @__PURE__ */ jsx23(
1505
1655
  "p",
1506
1656
  {
1507
1657
  "data-slot": "empty-state-description",
@@ -1514,7 +1664,7 @@ function EmptyStateDescription({ className, ...props }) {
1514
1664
  );
1515
1665
  }
1516
1666
  function EmptyStateContent({ className, ...props }) {
1517
- return /* @__PURE__ */ jsx21(
1667
+ return /* @__PURE__ */ jsx23(
1518
1668
  "div",
1519
1669
  {
1520
1670
  "data-slot": "empty-state-content",
@@ -1533,22 +1683,22 @@ import { cva as cva8 } from "class-variance-authority";
1533
1683
  // src/ui/label/label.tsx
1534
1684
  import { forwardRef } from "react";
1535
1685
  import { Label as LabelPrimitive } from "react-aria-components";
1536
- import { jsx as jsx22 } from "react/jsx-runtime";
1686
+ import { jsx as jsx24 } from "react/jsx-runtime";
1537
1687
  var Label2 = forwardRef(function Label3({ className, ...props }, ref) {
1538
- return /* @__PURE__ */ jsx22(LabelPrimitive, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
1688
+ return /* @__PURE__ */ jsx24(LabelPrimitive, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
1539
1689
  });
1540
1690
 
1541
1691
  // src/ui/field/field.tsx
1542
- import { jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
1692
+ import { jsx as jsx25, jsxs as jsxs11 } from "react/jsx-runtime";
1543
1693
  function FieldSet({ className, ...props }) {
1544
- return /* @__PURE__ */ jsx23("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1694
+ return /* @__PURE__ */ jsx25("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1545
1695
  }
1546
1696
  function FieldLegend({
1547
1697
  className,
1548
1698
  variant = "legend",
1549
1699
  ...props
1550
1700
  }) {
1551
- return /* @__PURE__ */ jsx23(
1701
+ return /* @__PURE__ */ jsx25(
1552
1702
  "legend",
1553
1703
  {
1554
1704
  "data-slot": "field-legend",
@@ -1562,7 +1712,7 @@ function FieldLegend({
1562
1712
  );
1563
1713
  }
1564
1714
  function FieldGroup({ className, ...props }) {
1565
- return /* @__PURE__ */ jsx23(
1715
+ return /* @__PURE__ */ jsx25(
1566
1716
  "div",
1567
1717
  {
1568
1718
  "data-slot": "field-group",
@@ -1590,7 +1740,7 @@ var fieldVariants = cva8(
1590
1740
  function Field({ className, orientation = "vertical", ...props }) {
1591
1741
  return (
1592
1742
  // biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
1593
- /* @__PURE__ */ jsx23(
1743
+ /* @__PURE__ */ jsx25(
1594
1744
  "div",
1595
1745
  {
1596
1746
  role: "group",
@@ -1603,7 +1753,7 @@ function Field({ className, orientation = "vertical", ...props }) {
1603
1753
  );
1604
1754
  }
1605
1755
  function FieldContent({ className, ...props }) {
1606
- return /* @__PURE__ */ jsx23(
1756
+ return /* @__PURE__ */ jsx25(
1607
1757
  "div",
1608
1758
  {
1609
1759
  "data-slot": "field-content",
@@ -1613,7 +1763,7 @@ function FieldContent({ className, ...props }) {
1613
1763
  );
1614
1764
  }
1615
1765
  function FieldLabel({ className, ...props }) {
1616
- return /* @__PURE__ */ jsx23(
1766
+ return /* @__PURE__ */ jsx25(
1617
1767
  Label2,
1618
1768
  {
1619
1769
  "data-slot": "field-label",
@@ -1626,7 +1776,7 @@ function FieldLabel({ className, ...props }) {
1626
1776
  );
1627
1777
  }
1628
1778
  function FieldTitle({ className, ...props }) {
1629
- return /* @__PURE__ */ jsx23(
1779
+ return /* @__PURE__ */ jsx25(
1630
1780
  "div",
1631
1781
  {
1632
1782
  "data-slot": "field-title",
@@ -1636,7 +1786,7 @@ function FieldTitle({ className, ...props }) {
1636
1786
  );
1637
1787
  }
1638
1788
  function FieldDescription({ className, ...props }) {
1639
- return /* @__PURE__ */ jsx23(
1789
+ return /* @__PURE__ */ jsx25(
1640
1790
  "p",
1641
1791
  {
1642
1792
  "data-slot": "field-description",
@@ -1657,8 +1807,8 @@ function FieldSeparator({ className, children, ...props }) {
1657
1807
  className: cn("relative -my-2 h-5 text-sm", className),
1658
1808
  ...props,
1659
1809
  children: [
1660
- /* @__PURE__ */ jsx23(Separator, { className: "absolute inset-0 top-1/2" }),
1661
- children ? /* @__PURE__ */ jsx23(
1810
+ /* @__PURE__ */ jsx25(Separator, { className: "absolute inset-0 top-1/2" }),
1811
+ children ? /* @__PURE__ */ jsx25(
1662
1812
  "span",
1663
1813
  {
1664
1814
  "data-slot": "field-separator-content",
@@ -1672,9 +1822,9 @@ function FieldSeparator({ className, children, ...props }) {
1672
1822
  }
1673
1823
  function FieldError2({ className, children, errors, ...props }) {
1674
1824
  const messages = [...new Set(errors?.flatMap((error) => error?.message ?? []) ?? [])];
1675
- const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ jsx23("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ jsx23("li", { children: message }, message)) }) : null);
1825
+ const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ jsx25("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ jsx25("li", { children: message }, message)) }) : null);
1676
1826
  if (!content) return null;
1677
- return /* @__PURE__ */ jsx23(
1827
+ return /* @__PURE__ */ jsx25(
1678
1828
  "div",
1679
1829
  {
1680
1830
  role: "alert",
@@ -1687,65 +1837,65 @@ function FieldError2({ className, children, errors, ...props }) {
1687
1837
  }
1688
1838
 
1689
1839
  // src/ui/form-feedback/form-feedback.tsx
1690
- import { useCallback as useCallback4, useEffect as useEffect4, useRef as useRef3, useState as useState8 } from "react";
1840
+ import { useCallback as useCallback5, useEffect as useEffect4, useRef as useRef3, useState as useState9 } from "react";
1691
1841
  import { CheckCircle, LoaderCircle, CircleAlert } from "lucide-react";
1692
- import { jsx as jsx24, jsxs as jsxs12 } from "react/jsx-runtime";
1842
+ import { jsx as jsx26, jsxs as jsxs12 } from "react/jsx-runtime";
1693
1843
  function useFormFeedback(options) {
1694
1844
  const resetMs = options?.successResetMs ?? 2500;
1695
- const [state, setState] = useState8({ status: "idle" });
1845
+ const [state, setState] = useState9({ status: "idle" });
1696
1846
  const timer = useRef3(null);
1697
- const clearTimer = useCallback4(() => {
1847
+ const clearTimer = useCallback5(() => {
1698
1848
  if (timer.current) clearTimeout(timer.current);
1699
1849
  timer.current = null;
1700
1850
  }, []);
1701
1851
  useEffect4(() => () => clearTimer(), [clearTimer]);
1702
- const setPending = useCallback4(() => {
1852
+ const setPending = useCallback5(() => {
1703
1853
  clearTimer();
1704
1854
  setState({ status: "pending" });
1705
1855
  }, [clearTimer]);
1706
- const setSuccess = useCallback4((message) => {
1856
+ const setSuccess = useCallback5((message) => {
1707
1857
  clearTimer();
1708
1858
  setState({ status: "success", message });
1709
1859
  if (resetMs > 0) timer.current = setTimeout(() => setState({ status: "idle" }), resetMs);
1710
1860
  }, [clearTimer, resetMs]);
1711
- const setError = useCallback4((message) => {
1861
+ const setError = useCallback5((message) => {
1712
1862
  clearTimer();
1713
1863
  setState({ status: "error", message });
1714
1864
  }, [clearTimer]);
1715
- const reset = useCallback4(() => {
1865
+ const reset = useCallback5(() => {
1716
1866
  clearTimer();
1717
1867
  setState({ status: "idle" });
1718
1868
  }, [clearTimer]);
1719
1869
  return { state, pending: state.status === "pending", setPending, setSuccess, setError, reset };
1720
1870
  }
1721
1871
  function FormFeedback({ state, className, pendingLabel = "Guardando\u2026", successLabel = "Guardado" }) {
1722
- if (state.status === "idle") return /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
1872
+ if (state.status === "idle") return /* @__PURE__ */ jsx26("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
1723
1873
  const error = state.status === "error";
1724
1874
  const success = state.status === "success";
1725
1875
  return /* @__PURE__ */ jsxs12("span", { role: error ? "alert" : "status", "aria-live": "polite", className: cn("inline-flex h-5 items-center gap-1.5 text-xs", error && "text-destructive", success && "text-success", state.status === "pending" && "text-muted-foreground", className), children: [
1726
- state.status === "pending" && /* @__PURE__ */ jsx24(LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
1727
- success && /* @__PURE__ */ jsx24(CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
1728
- error && /* @__PURE__ */ jsx24(CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
1729
- /* @__PURE__ */ jsx24("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
1876
+ state.status === "pending" && /* @__PURE__ */ jsx26(LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
1877
+ success && /* @__PURE__ */ jsx26(CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
1878
+ error && /* @__PURE__ */ jsx26(CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
1879
+ /* @__PURE__ */ jsx26("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
1730
1880
  ] });
1731
1881
  }
1732
1882
 
1733
1883
  // src/ui/form-row/form-row.tsx
1734
- import { Fragment as Fragment8, jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
1884
+ import { Fragment as Fragment9, jsx as jsx27, jsxs as jsxs13 } from "react/jsx-runtime";
1735
1885
  function FormRow({ label, htmlFor, required, hint, error, className, children }) {
1736
1886
  const hintId = hint ? `${htmlFor}-hint` : void 0;
1737
1887
  const errorId = error ? `${htmlFor}-error` : void 0;
1738
1888
  return /* @__PURE__ */ jsxs13("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
1739
1889
  /* @__PURE__ */ jsxs13("label", { htmlFor, className: "text-sm font-medium text-foreground", children: [
1740
1890
  label,
1741
- required && /* @__PURE__ */ jsxs13(Fragment8, { children: [
1742
- /* @__PURE__ */ jsx25("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" }),
1743
- /* @__PURE__ */ jsx25("span", { className: "sr-only", children: " (obligatorio)" })
1891
+ required && /* @__PURE__ */ jsxs13(Fragment9, { children: [
1892
+ /* @__PURE__ */ jsx27("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" }),
1893
+ /* @__PURE__ */ jsx27("span", { className: "sr-only", children: " (obligatorio)" })
1744
1894
  ] })
1745
1895
  ] }),
1746
1896
  children,
1747
- hint && /* @__PURE__ */ jsx25("p", { id: hintId, className: "text-xs text-muted-foreground", children: hint }),
1748
- error && /* @__PURE__ */ jsx25("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive", children: error })
1897
+ hint && /* @__PURE__ */ jsx27("p", { id: hintId, className: "text-xs text-muted-foreground", children: hint }),
1898
+ error && /* @__PURE__ */ jsx27("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive", children: error })
1749
1899
  ] });
1750
1900
  }
1751
1901
 
@@ -1753,20 +1903,20 @@ function FormRow({ label, htmlFor, required, hint, error, className, children })
1753
1903
  import { Link as Link2 } from "react-aria-components";
1754
1904
 
1755
1905
  // src/ui/tooltip/tooltip.tsx
1756
- import * as React4 from "react";
1906
+ import * as React6 from "react";
1757
1907
  import {
1758
1908
  Focusable,
1759
1909
  OverlayArrow,
1760
1910
  Tooltip as TooltipPrimitive,
1761
1911
  TooltipTrigger as TooltipTriggerPrimitive
1762
1912
  } from "react-aria-components";
1763
- import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
1913
+ import { jsx as jsx28, jsxs as jsxs14 } from "react/jsx-runtime";
1764
1914
  function TooltipTrigger({
1765
1915
  delay = 0,
1766
1916
  children,
1767
1917
  ...props
1768
1918
  }) {
1769
- const [trigger, tooltip] = React4.Children.toArray(children);
1919
+ const [trigger, tooltip] = React6.Children.toArray(children);
1770
1920
  return /* @__PURE__ */ jsxs14(
1771
1921
  TooltipTriggerPrimitive,
1772
1922
  {
@@ -1774,7 +1924,7 @@ function TooltipTrigger({
1774
1924
  delay,
1775
1925
  ...props,
1776
1926
  children: [
1777
- /* @__PURE__ */ jsx26(Focusable, { children: trigger }),
1927
+ /* @__PURE__ */ jsx28(Focusable, { children: trigger }),
1778
1928
  tooltip
1779
1929
  ]
1780
1930
  }
@@ -1802,7 +1952,7 @@ function Tooltip({
1802
1952
  ...props,
1803
1953
  children: [
1804
1954
  children,
1805
- /* @__PURE__ */ jsx26(
1955
+ /* @__PURE__ */ jsx28(
1806
1956
  OverlayArrow,
1807
1957
  {
1808
1958
  className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground",
@@ -1820,7 +1970,7 @@ function Tooltip({
1820
1970
  }
1821
1971
 
1822
1972
  // src/ui/icon-button/icon-button.tsx
1823
- import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
1973
+ import { jsx as jsx29, jsxs as jsxs15 } from "react/jsx-runtime";
1824
1974
  function IconButton({
1825
1975
  label,
1826
1976
  children,
@@ -1834,7 +1984,7 @@ function IconButton({
1834
1984
  className
1835
1985
  );
1836
1986
  return /* @__PURE__ */ jsxs15(TooltipTrigger, { children: [
1837
- href ? /* @__PURE__ */ jsx27(
1987
+ href ? /* @__PURE__ */ jsx29(
1838
1988
  Link2,
1839
1989
  {
1840
1990
  "data-slot": "icon-button",
@@ -1843,7 +1993,7 @@ function IconButton({
1843
1993
  className: linkClassName,
1844
1994
  children
1845
1995
  }
1846
- ) : /* @__PURE__ */ jsx27(
1996
+ ) : /* @__PURE__ */ jsx29(
1847
1997
  Button,
1848
1998
  {
1849
1999
  "data-slot": "icon-button",
@@ -1855,7 +2005,7 @@ function IconButton({
1855
2005
  children
1856
2006
  }
1857
2007
  ),
1858
- /* @__PURE__ */ jsx27(Tooltip, { children: label })
2008
+ /* @__PURE__ */ jsx29(Tooltip, { children: label })
1859
2009
  ] });
1860
2010
  }
1861
2011
 
@@ -1865,27 +2015,27 @@ import { cva as cva9 } from "class-variance-authority";
1865
2015
  // src/ui/input/input.tsx
1866
2016
  import { forwardRef as forwardRef2 } from "react";
1867
2017
  import { Input as AriaInput2 } from "react-aria-components";
1868
- import { jsx as jsx28 } from "react/jsx-runtime";
2018
+ import { jsx as jsx30 } from "react/jsx-runtime";
1869
2019
  var InputImpl = forwardRef2(function Input2({ className, type, ...props }, ref) {
1870
- return /* @__PURE__ */ jsx28(AriaInput2, { ref, type, "data-slot": "input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
2020
+ return /* @__PURE__ */ jsx30(AriaInput2, { ref, type, "data-slot": "input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
1871
2021
  });
1872
2022
  var Input3 = InputImpl;
1873
2023
 
1874
2024
  // src/ui/textarea/textarea.tsx
1875
2025
  import { forwardRef as forwardRef3 } from "react";
1876
2026
  import { TextArea as AriaTextArea } from "react-aria-components";
1877
- import { jsx as jsx29 } from "react/jsx-runtime";
2027
+ import { jsx as jsx31 } from "react/jsx-runtime";
1878
2028
  var TextareaImpl = forwardRef3(function Textarea({ className, ...props }, ref) {
1879
- return /* @__PURE__ */ jsx29(AriaTextArea, { ref, "data-slot": "textarea", className: cn("min-h-20 w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
2029
+ return /* @__PURE__ */ jsx31(AriaTextArea, { ref, "data-slot": "textarea", className: cn("min-h-20 w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
1880
2030
  });
1881
2031
  var Textarea2 = TextareaImpl;
1882
2032
 
1883
2033
  // src/ui/input-group/input-group.tsx
1884
- import { jsx as jsx30 } from "react/jsx-runtime";
2034
+ import { jsx as jsx32 } from "react/jsx-runtime";
1885
2035
  function InputGroup({ className, ...props }) {
1886
2036
  return (
1887
2037
  // biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
1888
- /* @__PURE__ */ jsx30(
2038
+ /* @__PURE__ */ jsx32(
1889
2039
  "div",
1890
2040
  {
1891
2041
  role: "group",
@@ -1921,7 +2071,7 @@ function InputGroupAddon({
1921
2071
  }) {
1922
2072
  return (
1923
2073
  // biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
1924
- /* @__PURE__ */ jsx30(
2074
+ /* @__PURE__ */ jsx32(
1925
2075
  "div",
1926
2076
  {
1927
2077
  role: "group",
@@ -1952,7 +2102,7 @@ function InputGroupButton({
1952
2102
  ...props
1953
2103
  }) {
1954
2104
  const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
1955
- return /* @__PURE__ */ jsx30(
2105
+ return /* @__PURE__ */ jsx32(
1956
2106
  Button,
1957
2107
  {
1958
2108
  "data-slot": "input-group-button",
@@ -1965,7 +2115,7 @@ function InputGroupButton({
1965
2115
  );
1966
2116
  }
1967
2117
  function InputGroupText({ className, ...props }) {
1968
- return /* @__PURE__ */ jsx30(
2118
+ return /* @__PURE__ */ jsx32(
1969
2119
  "span",
1970
2120
  {
1971
2121
  "data-slot": "input-group-text",
@@ -1978,7 +2128,7 @@ function InputGroupText({ className, ...props }) {
1978
2128
  );
1979
2129
  }
1980
2130
  function InputGroupInput({ className, ...props }) {
1981
- return /* @__PURE__ */ jsx30(
2131
+ return /* @__PURE__ */ jsx32(
1982
2132
  Input3,
1983
2133
  {
1984
2134
  "data-slot": "input-group-control",
@@ -1991,7 +2141,7 @@ function InputGroupInput({ className, ...props }) {
1991
2141
  );
1992
2142
  }
1993
2143
  function InputGroupTextarea({ className, ...props }) {
1994
- return /* @__PURE__ */ jsx30(
2144
+ return /* @__PURE__ */ jsx32(
1995
2145
  Textarea2,
1996
2146
  {
1997
2147
  "data-slot": "input-group-control",
@@ -2005,21 +2155,21 @@ function InputGroupTextarea({ className, ...props }) {
2005
2155
  }
2006
2156
 
2007
2157
  // src/ui/kbd/kbd.tsx
2008
- import { jsx as jsx31 } from "react/jsx-runtime";
2158
+ import { jsx as jsx33 } from "react/jsx-runtime";
2009
2159
  function Kbd({ className, ...props }) {
2010
- return /* @__PURE__ */ jsx31("kbd", { "data-slot": "kbd", className: cn("pointer-events-none inline-flex h-5 min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none", className), ...props });
2160
+ return /* @__PURE__ */ jsx33("kbd", { "data-slot": "kbd", className: cn("pointer-events-none inline-flex h-5 min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none", className), ...props });
2011
2161
  }
2012
2162
  function KbdGroup({ className, ...props }) {
2013
- return /* @__PURE__ */ jsx31("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
2163
+ return /* @__PURE__ */ jsx33("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
2014
2164
  }
2015
2165
 
2016
2166
  // src/ui/loading-overlay/loading-overlay.tsx
2017
2167
  import { LoaderCircle as LoaderCircle2 } from "lucide-react";
2018
- import { jsx as jsx32, jsxs as jsxs16 } from "react/jsx-runtime";
2168
+ import { jsx as jsx34, jsxs as jsxs16 } from "react/jsx-runtime";
2019
2169
  function LoadingOverlay({ label = "Cargando", className, ...props }) {
2020
- return /* @__PURE__ */ jsx32("div", { role: "status", "aria-live": "polite", className: cn("absolute inset-0 z-10 flex items-center justify-center bg-background/70 backdrop-blur-[2px]", className), ...props, children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
2021
- /* @__PURE__ */ jsx32(LoaderCircle2, { className: "animate-spin", "aria-hidden": "true" }),
2022
- /* @__PURE__ */ jsx32("span", { children: label })
2170
+ return /* @__PURE__ */ jsx34("div", { role: "status", "aria-live": "polite", className: cn("absolute inset-0 z-10 flex items-center justify-center bg-background/70 backdrop-blur-[2px]", className), ...props, children: /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
2171
+ /* @__PURE__ */ jsx34(LoaderCircle2, { className: "animate-spin", "aria-hidden": "true" }),
2172
+ /* @__PURE__ */ jsx34("span", { children: label })
2023
2173
  ] }) });
2024
2174
  }
2025
2175
 
@@ -2030,16 +2180,37 @@ import {
2030
2180
  MenuTrigger as AriaMenuTrigger,
2031
2181
  Popover as Popover3
2032
2182
  } from "react-aria-components";
2033
- import { jsx as jsx33 } from "react/jsx-runtime";
2183
+ import { jsx as jsx35 } from "react/jsx-runtime";
2034
2184
  var MenuTrigger = AriaMenuTrigger;
2035
2185
  function MenuContent({ className, ...props }) {
2036
- return /* @__PURE__ */ jsx33(Popover3, { "data-slot": "menu-content", className: cn("min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2186
+ return /* @__PURE__ */ jsx35(Popover3, { "data-slot": "menu-content", className: cn("min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2037
2187
  }
2038
2188
  function Menu({ className, ...props }) {
2039
- return /* @__PURE__ */ jsx33(AriaMenu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
2189
+ return /* @__PURE__ */ jsx35(AriaMenu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
2040
2190
  }
2041
2191
  function MenuItem({ className, children, ...props }) {
2042
- return /* @__PURE__ */ jsx33(AriaMenuItem, { "data-slot": "menu-item", className: cn("flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
2192
+ return /* @__PURE__ */ jsx35(AriaMenuItem, { "data-slot": "menu-item", className: cn("flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
2193
+ }
2194
+
2195
+ // src/ui/metric-card/metric-card.tsx
2196
+ import { jsx as jsx36, jsxs as jsxs17 } from "react/jsx-runtime";
2197
+ function MetricCard({
2198
+ className,
2199
+ label,
2200
+ value,
2201
+ description,
2202
+ icon,
2203
+ tone = "default",
2204
+ ...props
2205
+ }) {
2206
+ return /* @__PURE__ */ jsx36(Card, { "data-slot": "metric-card", "data-tone": tone, className: cn("min-w-0", className), ...props, children: /* @__PURE__ */ jsxs17(CardContent, { className: "flex items-start gap-3", children: [
2207
+ icon ? /* @__PURE__ */ jsx36("div", { "data-slot": "metric-card-icon", className: "shrink-0 text-muted-foreground", children: icon }) : null,
2208
+ /* @__PURE__ */ jsxs17("div", { className: "min-w-0", children: [
2209
+ /* @__PURE__ */ jsx36("p", { "data-slot": "metric-card-label", className: "text-sm text-muted-foreground", children: label }),
2210
+ /* @__PURE__ */ jsx36("strong", { "data-slot": "metric-card-value", className: "mt-1 block text-2xl font-semibold tracking-tight", children: value }),
2211
+ description ? /* @__PURE__ */ jsx36("p", { "data-slot": "metric-card-description", className: "mt-1 text-xs text-muted-foreground", children: description }) : null
2212
+ ] })
2213
+ ] }) });
2043
2214
  }
2044
2215
 
2045
2216
  // src/ui/otp-input/otp-input.tsx
@@ -2047,10 +2218,10 @@ import {
2047
2218
  forwardRef as forwardRef4,
2048
2219
  useImperativeHandle,
2049
2220
  useRef as useRef4,
2050
- useState as useState9
2221
+ useState as useState10
2051
2222
  } from "react";
2052
2223
  import { Input as AriaInput3 } from "react-aria-components";
2053
- import { jsx as jsx34, jsxs as jsxs17 } from "react/jsx-runtime";
2224
+ import { jsx as jsx37, jsxs as jsxs18 } from "react/jsx-runtime";
2054
2225
  function normalizeOtp(value, length) {
2055
2226
  return value.replace(/[^0-9]/g, "").slice(0, length);
2056
2227
  }
@@ -2071,12 +2242,12 @@ var OtpInputImpl = forwardRef4(function OtpInput({
2071
2242
  }, forwardedRef) {
2072
2243
  const slotCount = Math.max(1, Math.floor(length));
2073
2244
  const controlled = value !== void 0;
2074
- const [internalValue, setInternalValue] = useState9(() => normalizeOtp(defaultValue, slotCount));
2245
+ const [internalValue, setInternalValue] = useState10(() => normalizeOtp(defaultValue, slotCount));
2075
2246
  const code = normalizeOtp(controlled ? value : internalValue, slotCount);
2076
2247
  const slots = Array.from({ length: slotCount }, (_, index) => `otp-slot-${index + 1}`);
2077
2248
  const inputRef = useRef4(null);
2078
- const [focused, setFocused] = useState9(false);
2079
- const [selectionStart, setSelectionStart] = useState9(0);
2249
+ const [focused, setFocused] = useState10(false);
2250
+ const [selectionStart, setSelectionStart] = useState10(0);
2080
2251
  const invalid = props["aria-invalid"] === true || props["aria-invalid"] === "true";
2081
2252
  const activeIndex = code.length === slotCount ? slotCount - 1 : Math.min(selectionStart, code.length, slotCount - 1);
2082
2253
  useImperativeHandle(forwardedRef, () => inputRef.current);
@@ -2102,7 +2273,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
2102
2273
  input.setSelectionRange(position, position);
2103
2274
  setSelectionStart(position);
2104
2275
  }
2105
- return /* @__PURE__ */ jsxs17(
2276
+ return /* @__PURE__ */ jsxs18(
2106
2277
  "div",
2107
2278
  {
2108
2279
  "data-slot": "otp-input",
@@ -2112,7 +2283,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
2112
2283
  style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
2113
2284
  onPointerDown: handlePointerDown,
2114
2285
  children: [
2115
- /* @__PURE__ */ jsx34(
2286
+ /* @__PURE__ */ jsx37(
2116
2287
  AriaInput3,
2117
2288
  {
2118
2289
  ...props,
@@ -2152,7 +2323,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
2152
2323
  }
2153
2324
  }
2154
2325
  ),
2155
- slots.map((slot, index) => /* @__PURE__ */ jsx34(
2326
+ slots.map((slot, index) => /* @__PURE__ */ jsx37(
2156
2327
  "span",
2157
2328
  {
2158
2329
  "aria-hidden": "true",
@@ -2175,41 +2346,98 @@ var OtpInputImpl = forwardRef4(function OtpInput({
2175
2346
  var OtpInput2 = OtpInputImpl;
2176
2347
 
2177
2348
  // src/ui/page-header/page-header.tsx
2178
- import { jsx as jsx35 } from "react/jsx-runtime";
2349
+ import { jsx as jsx38 } from "react/jsx-runtime";
2179
2350
  function PageHeader({ className, ...props }) {
2180
- return /* @__PURE__ */ jsx35("header", { "data-slot": "page-header", className: cn("flex flex-col gap-4 py-2 sm:flex-row sm:items-center sm:justify-between", className), ...props });
2351
+ return /* @__PURE__ */ jsx38("header", { "data-slot": "page-header", className: cn("flex flex-col gap-4 py-2 sm:flex-row sm:items-center sm:justify-between", className), ...props });
2181
2352
  }
2182
2353
  function PageHeaderHeading({ className, ...props }) {
2183
- return /* @__PURE__ */ jsx35("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2354
+ return /* @__PURE__ */ jsx38("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2184
2355
  }
2185
2356
  function PageHeaderTitle({ className, ...props }) {
2186
- return /* @__PURE__ */ jsx35("h1", { "data-slot": "page-header-title", className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className), ...props });
2357
+ return /* @__PURE__ */ jsx38("h1", { "data-slot": "page-header-title", className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className), ...props });
2187
2358
  }
2188
2359
  function PageHeaderDescription({ className, ...props }) {
2189
- return /* @__PURE__ */ jsx35("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
2360
+ return /* @__PURE__ */ jsx38("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
2190
2361
  }
2191
2362
  function PageHeaderActions({ className, ...props }) {
2192
- return /* @__PURE__ */ jsx35("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
2363
+ return /* @__PURE__ */ jsx38("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
2193
2364
  }
2194
2365
 
2195
2366
  // src/ui/pagination/pagination.tsx
2196
2367
  import { ChevronLeft, ChevronRight } from "lucide-react";
2197
- import { jsx as jsx36, jsxs as jsxs18 } from "react/jsx-runtime";
2198
- function Pagination({ page, pageCount, onPageChange, className }) {
2199
- const pages = Array.from({ length: pageCount }, (_, index) => index + 1);
2200
- return /* @__PURE__ */ jsxs18("nav", { "aria-label": "Paginaci\xF3n", className: cn("flex items-center justify-between gap-4", className), children: [
2201
- /* @__PURE__ */ jsxs18("p", { className: "text-sm text-muted-foreground", children: [
2202
- "P\xE1gina ",
2203
- page,
2204
- " de ",
2368
+ import * as React7 from "react";
2369
+ import { jsx as jsx39, jsxs as jsxs19 } from "react/jsx-runtime";
2370
+ function visiblePages(page, pageCount, siblingCount) {
2371
+ return [
2372
+ .../* @__PURE__ */ new Set([
2373
+ 1,
2374
+ ...Array.from({ length: siblingCount * 2 + 1 }, (_, index) => page - siblingCount + index),
2205
2375
  pageCount
2206
- ] }),
2207
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-1", children: [
2208
- /* @__PURE__ */ jsx36(Button, { "aria-label": "P\xE1gina anterior", isDisabled: page <= 1, onPress: () => onPageChange(page - 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ jsx36(ChevronLeft, {}) }),
2209
- pages.map((item) => /* @__PURE__ */ jsx36(Button, { "aria-current": item === page ? "page" : void 0, "aria-label": `P\xE1gina ${item}`, onPress: () => onPageChange(item), size: "icon", variant: item === page ? "secondary" : "ghost", children: item }, item)),
2210
- /* @__PURE__ */ jsx36(Button, { "aria-label": "P\xE1gina siguiente", isDisabled: page >= pageCount, onPress: () => onPageChange(page + 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ jsx36(ChevronRight, {}) })
2211
- ] })
2212
- ] });
2376
+ ])
2377
+ ].filter((item) => item >= 1 && item <= pageCount).sort((left, right) => left - right);
2378
+ }
2379
+ function Pagination({
2380
+ page,
2381
+ pageCount,
2382
+ onPageChange,
2383
+ ariaLabel = "Paginaci\xF3n",
2384
+ summary,
2385
+ siblingCount = 1,
2386
+ className
2387
+ }) {
2388
+ if (pageCount <= 1) return null;
2389
+ const pages = visiblePages(page, pageCount, siblingCount);
2390
+ return /* @__PURE__ */ jsxs19(
2391
+ "nav",
2392
+ {
2393
+ "aria-label": ariaLabel,
2394
+ className: cn("flex flex-wrap items-center justify-between gap-4", className),
2395
+ children: [
2396
+ /* @__PURE__ */ jsx39("p", { className: "text-sm text-muted-foreground", children: summary ?? `P\xE1gina ${page} de ${pageCount}` }),
2397
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-1", children: [
2398
+ /* @__PURE__ */ jsx39(
2399
+ Button,
2400
+ {
2401
+ "aria-label": "P\xE1gina anterior",
2402
+ isDisabled: page <= 1,
2403
+ onPress: () => onPageChange(page - 1),
2404
+ size: "icon",
2405
+ variant: "ghost",
2406
+ children: /* @__PURE__ */ jsx39(ChevronLeft, {})
2407
+ }
2408
+ ),
2409
+ pages.map((item, index) => {
2410
+ const previousPage = pages[index - 1];
2411
+ return /* @__PURE__ */ jsxs19(React7.Fragment, { children: [
2412
+ previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */ jsx39("span", { "aria-hidden": "true", className: "px-1 text-muted-foreground", children: "\u2026" }) : null,
2413
+ /* @__PURE__ */ jsx39(
2414
+ Button,
2415
+ {
2416
+ "aria-current": item === page ? "page" : void 0,
2417
+ "aria-label": `P\xE1gina ${item}`,
2418
+ onPress: () => onPageChange(item),
2419
+ size: "icon",
2420
+ variant: item === page ? "secondary" : "ghost",
2421
+ children: item
2422
+ }
2423
+ )
2424
+ ] }, item);
2425
+ }),
2426
+ /* @__PURE__ */ jsx39(
2427
+ Button,
2428
+ {
2429
+ "aria-label": "P\xE1gina siguiente",
2430
+ isDisabled: page >= pageCount,
2431
+ onPress: () => onPageChange(page + 1),
2432
+ size: "icon",
2433
+ variant: "ghost",
2434
+ children: /* @__PURE__ */ jsx39(ChevronRight, {})
2435
+ }
2436
+ )
2437
+ ] })
2438
+ ]
2439
+ }
2440
+ );
2213
2441
  }
2214
2442
 
2215
2443
  // src/ui/popover/popover.tsx
@@ -2217,10 +2445,10 @@ import {
2217
2445
  DialogTrigger as AriaDialogTrigger,
2218
2446
  Popover as AriaPopover
2219
2447
  } from "react-aria-components";
2220
- import { jsx as jsx37 } from "react/jsx-runtime";
2448
+ import { jsx as jsx40 } from "react/jsx-runtime";
2221
2449
  var PopoverTrigger = AriaDialogTrigger;
2222
2450
  function Popover4({ className, ...props }) {
2223
- return /* @__PURE__ */ jsx37(AriaPopover, { "data-slot": "popover", offset: 6, className: cn("min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2451
+ return /* @__PURE__ */ jsx40(AriaPopover, { "data-slot": "popover", offset: 6, className: cn("min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2224
2452
  }
2225
2453
  var PopoverContent = Popover4;
2226
2454
 
@@ -2232,7 +2460,7 @@ import {
2232
2460
  Input as AriaInput4,
2233
2461
  NumberField as AriaNumberField
2234
2462
  } from "react-aria-components";
2235
- import { jsx as jsx38, jsxs as jsxs19 } from "react/jsx-runtime";
2463
+ import { jsx as jsx41, jsxs as jsxs20 } from "react/jsx-runtime";
2236
2464
  function QuantityInput({
2237
2465
  className,
2238
2466
  inputClassName,
@@ -2242,7 +2470,7 @@ function QuantityInput({
2242
2470
  step = 1,
2243
2471
  ...props
2244
2472
  }) {
2245
- return /* @__PURE__ */ jsx38(
2473
+ return /* @__PURE__ */ jsx41(
2246
2474
  AriaNumberField,
2247
2475
  {
2248
2476
  ...props,
@@ -2250,15 +2478,15 @@ function QuantityInput({
2250
2478
  step,
2251
2479
  "data-slot": "quantity-input",
2252
2480
  className: cn("group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
2253
- children: /* @__PURE__ */ jsxs19(
2481
+ children: /* @__PURE__ */ jsxs20(
2254
2482
  AriaGroup,
2255
2483
  {
2256
2484
  "data-slot": "quantity-input-group",
2257
2485
  className: "flex h-8 min-w-0 items-stretch overflow-hidden rounded-lg border border-border bg-background text-foreground transition-[border-color,box-shadow] focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 group-data-invalid/quantity-input:border-destructive",
2258
2486
  children: [
2259
- /* @__PURE__ */ jsx38(AriaButton, { slot: "decrement", "aria-label": decrementAriaLabel, "data-slot": "quantity-input-decrement", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-r border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ jsx38(Minus, { "aria-hidden": "true", className: "size-4" }) }),
2260
- /* @__PURE__ */ jsx38(AriaInput4, { "data-slot": "quantity-input-value", className: cn("w-14 min-w-0 bg-transparent px-1 text-center text-sm tabular-nums outline-none", inputClassName) }),
2261
- /* @__PURE__ */ jsx38(AriaButton, { slot: "increment", "aria-label": incrementAriaLabel, "data-slot": "quantity-input-increment", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-l border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ jsx38(Plus, { "aria-hidden": "true", className: "size-4" }) })
2487
+ /* @__PURE__ */ jsx41(AriaButton, { slot: "decrement", "aria-label": decrementAriaLabel, "data-slot": "quantity-input-decrement", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-r border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ jsx41(Minus, { "aria-hidden": "true", className: "size-4" }) }),
2488
+ /* @__PURE__ */ jsx41(AriaInput4, { "data-slot": "quantity-input-value", className: cn("w-14 min-w-0 bg-transparent px-1 text-center text-sm tabular-nums outline-none", inputClassName) }),
2489
+ /* @__PURE__ */ jsx41(AriaButton, { slot: "increment", "aria-label": incrementAriaLabel, "data-slot": "quantity-input-increment", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-l border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ jsx41(Plus, { "aria-hidden": "true", className: "size-4" }) })
2262
2490
  ]
2263
2491
  }
2264
2492
  )
@@ -2266,22 +2494,6 @@ function QuantityInput({
2266
2494
  );
2267
2495
  }
2268
2496
 
2269
- // src/ui/search-field/search-field.tsx
2270
- import {
2271
- SearchField as AriaSearchField,
2272
- Button as Button2,
2273
- Input as Input4
2274
- } from "react-aria-components";
2275
- import { X as X2 } from "lucide-react";
2276
- import { jsx as jsx39 } from "react/jsx-runtime";
2277
- var SearchField = AriaSearchField;
2278
- function SearchInput({ className, ...props }) {
2279
- return /* @__PURE__ */ jsx39(Input4, { "data-slot": "search-input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
2280
- }
2281
- function SearchClearButton({ className, children = /* @__PURE__ */ jsx39(X2, { "aria-hidden": "true", className: "size-4" }), ...props }) {
2282
- return /* @__PURE__ */ jsx39(Button2, { slot: "clear", "data-slot": "search-clear", className: cn("absolute top-1/2 right-1 rounded p-1 text-muted-foreground outline-none hover:bg-muted data-focus-visible:ring-2 data-focus-visible:ring-ring", className), ...props, children });
2283
- }
2284
-
2285
2497
  // src/ui/select/select.tsx
2286
2498
  import {
2287
2499
  Button as AriaButton2,
@@ -2292,43 +2504,43 @@ import {
2292
2504
  Popover as Popover5
2293
2505
  } from "react-aria-components";
2294
2506
  import { ChevronDown as ChevronDown2 } from "lucide-react";
2295
- import { Fragment as Fragment9, jsx as jsx40, jsxs as jsxs20 } from "react/jsx-runtime";
2507
+ import { Fragment as Fragment11, jsx as jsx42, jsxs as jsxs21 } from "react/jsx-runtime";
2296
2508
  var Select = AriaSelect;
2297
2509
  function SelectTrigger({ className, children, ...props }) {
2298
- return /* @__PURE__ */ jsx40(AriaButton2, { "data-slot": "select-trigger", className: cn("group/select-trigger flex h-8 w-full min-w-36 items-center gap-2 rounded-lg border border-border bg-background px-2.5 text-left text-sm text-foreground outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: (state) => /* @__PURE__ */ jsxs20(Fragment9, { children: [
2510
+ return /* @__PURE__ */ jsx42(AriaButton2, { "data-slot": "select-trigger", className: cn("group/select-trigger flex h-8 w-full min-w-36 items-center gap-2 rounded-lg border border-border bg-background px-2.5 text-left text-sm text-foreground outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: (state) => /* @__PURE__ */ jsxs21(Fragment11, { children: [
2299
2511
  typeof children === "function" ? children(state) : children,
2300
- /* @__PURE__ */ jsx40(ChevronDown2, { "aria-hidden": "true", className: "ml-auto size-4 text-muted-foreground transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none" })
2512
+ /* @__PURE__ */ jsx42(ChevronDown2, { "aria-hidden": "true", className: "ml-auto size-4 text-muted-foreground transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none" })
2301
2513
  ] }) });
2302
2514
  }
2303
2515
  function SelectValue({ className, ...props }) {
2304
- return /* @__PURE__ */ jsx40(AriaSelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
2516
+ return /* @__PURE__ */ jsx42(AriaSelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
2305
2517
  }
2306
2518
  function SelectContent({ className, ...props }) {
2307
- return /* @__PURE__ */ jsx40(Popover5, { "data-slot": "select-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2519
+ return /* @__PURE__ */ jsx42(Popover5, { "data-slot": "select-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
2308
2520
  }
2309
2521
  function SelectList({ className, ...props }) {
2310
- return /* @__PURE__ */ jsx40(ListBox3, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
2522
+ return /* @__PURE__ */ jsx42(ListBox3, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
2311
2523
  }
2312
2524
  function SelectItem({ className, children, ...props }) {
2313
- return /* @__PURE__ */ jsx40(ListBoxItem3, { "data-slot": "select-item", className: cn("flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-selected:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
2525
+ return /* @__PURE__ */ jsx42(ListBoxItem3, { "data-slot": "select-item", className: cn("flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-selected:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
2314
2526
  }
2315
2527
 
2316
2528
  // src/ui/sheet/sheet.tsx
2317
2529
  import { XIcon as XIcon2 } from "lucide-react";
2318
2530
  import {
2319
- Heading as Heading4,
2531
+ Heading as Heading6,
2320
2532
  ModalOverlay as ModalOverlayPrimitive,
2321
2533
  Modal as ModalPrimitive,
2322
2534
  Dialog as SheetPrimitive,
2323
2535
  DialogTrigger as SheetTriggerPrimitive,
2324
- Text as Text4
2536
+ Text as Text5
2325
2537
  } from "react-aria-components";
2326
- import { jsx as jsx41, jsxs as jsxs21 } from "react/jsx-runtime";
2538
+ import { jsx as jsx43, jsxs as jsxs22 } from "react/jsx-runtime";
2327
2539
  function SheetTrigger({ ...props }) {
2328
- return /* @__PURE__ */ jsx41(SheetTriggerPrimitive, { "data-slot": "sheet-trigger", ...props });
2540
+ return /* @__PURE__ */ jsx43(SheetTriggerPrimitive, { "data-slot": "sheet-trigger", ...props });
2329
2541
  }
2330
2542
  function SheetClose({ className, variant = "outline", size = "default", ...props }) {
2331
- return /* @__PURE__ */ jsx41(
2543
+ return /* @__PURE__ */ jsx43(
2332
2544
  Button,
2333
2545
  {
2334
2546
  slot: "close",
@@ -2345,7 +2557,7 @@ function SheetOverlay({
2345
2557
  children,
2346
2558
  ...props
2347
2559
  }) {
2348
- return /* @__PURE__ */ jsx41(
2560
+ return /* @__PURE__ */ jsx43(
2349
2561
  ModalOverlayPrimitive,
2350
2562
  {
2351
2563
  "data-slot": "sheet-overlay",
@@ -2366,7 +2578,7 @@ function Sheet({
2366
2578
  showCloseButton = true,
2367
2579
  ...props
2368
2580
  }) {
2369
- return /* @__PURE__ */ jsx41(SheetOverlay, { ...props, children: /* @__PURE__ */ jsx41(
2581
+ return /* @__PURE__ */ jsx43(SheetOverlay, { ...props, children: /* @__PURE__ */ jsx43(
2370
2582
  ModalPrimitive,
2371
2583
  {
2372
2584
  "data-slot": "sheet-content",
@@ -2375,16 +2587,16 @@ function Sheet({
2375
2587
  "fixed z-50 flex flex-col gap-4 border-border bg-popover bg-clip-padding text-sm text-popover-foreground shadow-lg transition duration-200 ease-in-out data-entering:opacity-0 data-exiting:opacity-0 data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=bottom]:data-entering:translate-y-10 data-[side=bottom]:data-exiting:translate-y-10 data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=left]:data-entering:-translate-x-10 data-[side=left]:data-exiting:-translate-x-10 data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=right]:data-entering:translate-x-10 data-[side=right]:data-exiting:translate-x-10 data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=top]:data-entering:-translate-y-10 data-[side=top]:data-exiting:-translate-y-10 data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm",
2376
2588
  className
2377
2589
  ),
2378
- children: /* @__PURE__ */ jsxs21(
2590
+ children: /* @__PURE__ */ jsxs22(
2379
2591
  SheetPrimitive,
2380
2592
  {
2381
2593
  "data-slot": "sheet",
2382
2594
  className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
2383
2595
  children: [
2384
2596
  children,
2385
- showCloseButton && /* @__PURE__ */ jsxs21(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2386
- /* @__PURE__ */ jsx41(XIcon2, {}),
2387
- /* @__PURE__ */ jsx41("span", { className: "sr-only", children: "Cerrar" })
2597
+ showCloseButton && /* @__PURE__ */ jsxs22(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2598
+ /* @__PURE__ */ jsx43(XIcon2, {}),
2599
+ /* @__PURE__ */ jsx43("span", { className: "sr-only", children: "Cerrar" })
2388
2600
  ] })
2389
2601
  ]
2390
2602
  }
@@ -2399,10 +2611,10 @@ function SheetContent({
2399
2611
  showCloseButton = true,
2400
2612
  ...props
2401
2613
  }) {
2402
- return /* @__PURE__ */ jsx41(Sheet, { className, side, showCloseButton, ...props, children });
2614
+ return /* @__PURE__ */ jsx43(Sheet, { className, side, showCloseButton, ...props, children });
2403
2615
  }
2404
2616
  function SheetHeader({ className, ...props }) {
2405
- return /* @__PURE__ */ jsx41(
2617
+ return /* @__PURE__ */ jsx43(
2406
2618
  "div",
2407
2619
  {
2408
2620
  "data-slot": "sheet-header",
@@ -2412,7 +2624,7 @@ function SheetHeader({ className, ...props }) {
2412
2624
  );
2413
2625
  }
2414
2626
  function SheetFooter({ className, ...props }) {
2415
- return /* @__PURE__ */ jsx41(
2627
+ return /* @__PURE__ */ jsx43(
2416
2628
  "div",
2417
2629
  {
2418
2630
  "data-slot": "sheet-footer",
@@ -2422,8 +2634,8 @@ function SheetFooter({ className, ...props }) {
2422
2634
  );
2423
2635
  }
2424
2636
  function SheetTitle({ className, ...props }) {
2425
- return /* @__PURE__ */ jsx41(
2426
- Heading4,
2637
+ return /* @__PURE__ */ jsx43(
2638
+ Heading6,
2427
2639
  {
2428
2640
  slot: "title",
2429
2641
  "data-slot": "sheet-title",
@@ -2436,8 +2648,8 @@ function SheetDescription({
2436
2648
  className,
2437
2649
  ...props
2438
2650
  }) {
2439
- return /* @__PURE__ */ jsx41(
2440
- Text4,
2651
+ return /* @__PURE__ */ jsx43(
2652
+ Text5,
2441
2653
  {
2442
2654
  slot: "description",
2443
2655
  "data-slot": "sheet-description",
@@ -2455,16 +2667,16 @@ import {
2455
2667
  Search
2456
2668
  } from "lucide-react";
2457
2669
  import {
2458
- createContext as createContext3,
2459
- useContext as useContext3,
2670
+ createContext as createContext5,
2671
+ useContext as useContext5,
2460
2672
  useMemo as useMemo2,
2461
- useState as useState10
2673
+ useState as useState11
2462
2674
  } from "react";
2463
2675
  import { Link as Link3 } from "react-aria-components";
2464
- import { Fragment as Fragment10, jsx as jsx42, jsxs as jsxs22 } from "react/jsx-runtime";
2465
- var SidebarContext = createContext3(null);
2676
+ import { Fragment as Fragment12, jsx as jsx44, jsxs as jsxs23 } from "react/jsx-runtime";
2677
+ var SidebarContext = createContext5(null);
2466
2678
  function useSidebar() {
2467
- const context = useContext3(SidebarContext);
2679
+ const context = useContext5(SidebarContext);
2468
2680
  if (!context)
2469
2681
  throw new Error("useSidebar must be used inside SidebarProvider");
2470
2682
  return context;
@@ -2473,7 +2685,7 @@ function SidebarProvider({
2473
2685
  defaultCollapsed = false,
2474
2686
  children
2475
2687
  }) {
2476
- const [collapsed, setCollapsed] = useState10(defaultCollapsed);
2688
+ const [collapsed, setCollapsed] = useState11(defaultCollapsed);
2477
2689
  const value = useMemo2(
2478
2690
  () => ({
2479
2691
  collapsed,
@@ -2482,14 +2694,14 @@ function SidebarProvider({
2482
2694
  }),
2483
2695
  [collapsed]
2484
2696
  );
2485
- return /* @__PURE__ */ jsx42(SidebarContext.Provider, { value, children });
2697
+ return /* @__PURE__ */ jsx44(SidebarContext.Provider, { value, children });
2486
2698
  }
2487
2699
  function Sidebar({
2488
2700
  className,
2489
2701
  ...props
2490
2702
  }) {
2491
2703
  const { collapsed } = useSidebar();
2492
- return /* @__PURE__ */ jsx42(
2704
+ return /* @__PURE__ */ jsx44(
2493
2705
  "aside",
2494
2706
  {
2495
2707
  "data-slot": "sidebar",
@@ -2506,7 +2718,7 @@ function SidebarHeader({
2506
2718
  className,
2507
2719
  ...props
2508
2720
  }) {
2509
- return /* @__PURE__ */ jsx42(
2721
+ return /* @__PURE__ */ jsx44(
2510
2722
  "div",
2511
2723
  {
2512
2724
  "data-slot": "sidebar-header",
@@ -2521,7 +2733,7 @@ function SidebarSearch({
2521
2733
  className,
2522
2734
  ...props
2523
2735
  }) {
2524
- return /* @__PURE__ */ jsxs22(
2736
+ return /* @__PURE__ */ jsxs23(
2525
2737
  "button",
2526
2738
  {
2527
2739
  type: "button",
@@ -2532,9 +2744,9 @@ function SidebarSearch({
2532
2744
  ),
2533
2745
  ...props,
2534
2746
  children: [
2535
- /* @__PURE__ */ jsx42(Search, { className: "size-4 shrink-0" }),
2536
- /* @__PURE__ */ jsx42("span", { className: "flex-1 text-left", children: label }),
2537
- /* @__PURE__ */ jsx42("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
2747
+ /* @__PURE__ */ jsx44(Search, { className: "size-4 shrink-0" }),
2748
+ /* @__PURE__ */ jsx44("span", { className: "flex-1 text-left", children: label }),
2749
+ /* @__PURE__ */ jsx44("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
2538
2750
  ]
2539
2751
  }
2540
2752
  );
@@ -2543,7 +2755,7 @@ function SidebarContent({
2543
2755
  className,
2544
2756
  ...props
2545
2757
  }) {
2546
- return /* @__PURE__ */ jsx42(
2758
+ return /* @__PURE__ */ jsx44(
2547
2759
  "nav",
2548
2760
  {
2549
2761
  "data-slot": "sidebar-content",
@@ -2557,7 +2769,7 @@ function SidebarFooter({
2557
2769
  className,
2558
2770
  ...props
2559
2771
  }) {
2560
- return /* @__PURE__ */ jsx42(
2772
+ return /* @__PURE__ */ jsx44(
2561
2773
  "div",
2562
2774
  {
2563
2775
  "data-slot": "sidebar-footer",
@@ -2576,14 +2788,14 @@ function SidebarGroup({
2576
2788
  ...props
2577
2789
  }) {
2578
2790
  const { collapsed } = useSidebar();
2579
- return /* @__PURE__ */ jsxs22(
2791
+ return /* @__PURE__ */ jsxs23(
2580
2792
  "section",
2581
2793
  {
2582
2794
  "data-slot": "sidebar-group",
2583
2795
  className: cn("mb-4 last:mb-0", className),
2584
2796
  ...props,
2585
2797
  children: [
2586
- label && /* @__PURE__ */ jsx42(
2798
+ label && /* @__PURE__ */ jsx44(
2587
2799
  "h2",
2588
2800
  {
2589
2801
  className: cn(
@@ -2609,7 +2821,7 @@ function SidebarItem({
2609
2821
  }) {
2610
2822
  const { collapsed } = useSidebar();
2611
2823
  const content = typeof children === "function" ? label : children ?? label;
2612
- return /* @__PURE__ */ jsx42(
2824
+ return /* @__PURE__ */ jsx44(
2613
2825
  Link3,
2614
2826
  {
2615
2827
  "data-slot": "sidebar-item",
@@ -2621,16 +2833,16 @@ function SidebarItem({
2621
2833
  typeof className === "function" ? className : className
2622
2834
  ),
2623
2835
  ...props,
2624
- children: (values) => /* @__PURE__ */ jsxs22(Fragment10, { children: [
2625
- /* @__PURE__ */ jsx42("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
2626
- /* @__PURE__ */ jsx42(
2836
+ children: (values) => /* @__PURE__ */ jsxs23(Fragment12, { children: [
2837
+ /* @__PURE__ */ jsx44("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
2838
+ /* @__PURE__ */ jsx44(
2627
2839
  "span",
2628
2840
  {
2629
2841
  className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"),
2630
2842
  children: typeof children === "function" ? children(values) : content
2631
2843
  }
2632
2844
  ),
2633
- badge && !collapsed && /* @__PURE__ */ jsx42("span", { className: "text-xs text-muted-foreground", children: badge })
2845
+ badge && !collapsed && /* @__PURE__ */ jsx44("span", { className: "text-xs text-muted-foreground", children: badge })
2634
2846
  ] })
2635
2847
  }
2636
2848
  );
@@ -2639,7 +2851,7 @@ function SidebarSeparator({
2639
2851
  className,
2640
2852
  ...props
2641
2853
  }) {
2642
- return /* @__PURE__ */ jsx42(
2854
+ return /* @__PURE__ */ jsx44(
2643
2855
  "hr",
2644
2856
  {
2645
2857
  "data-slot": "sidebar-separator",
@@ -2650,7 +2862,7 @@ function SidebarSeparator({
2650
2862
  }
2651
2863
  function SidebarTrigger({ className, ...props }) {
2652
2864
  const { collapsed, toggle } = useSidebar();
2653
- return /* @__PURE__ */ jsx42(
2865
+ return /* @__PURE__ */ jsx44(
2654
2866
  Button,
2655
2867
  {
2656
2868
  "aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
@@ -2659,7 +2871,7 @@ function SidebarTrigger({ className, ...props }) {
2659
2871
  variant: "ghost",
2660
2872
  className: cn("ml-auto", className),
2661
2873
  ...props,
2662
- children: collapsed ? /* @__PURE__ */ jsx42(ChevronRight2, {}) : /* @__PURE__ */ jsx42(ChevronLeft2, {})
2874
+ children: collapsed ? /* @__PURE__ */ jsx44(ChevronRight2, {}) : /* @__PURE__ */ jsx44(ChevronLeft2, {})
2663
2875
  }
2664
2876
  );
2665
2877
  }
@@ -2668,7 +2880,7 @@ function SidebarRail({
2668
2880
  ...props
2669
2881
  }) {
2670
2882
  const { toggle } = useSidebar();
2671
- return /* @__PURE__ */ jsx42(
2883
+ return /* @__PURE__ */ jsx44(
2672
2884
  "button",
2673
2885
  {
2674
2886
  type: "button",
@@ -2683,7 +2895,7 @@ function SidebarRail({
2683
2895
  );
2684
2896
  }
2685
2897
  function SidebarMore({ className, ...props }) {
2686
- return /* @__PURE__ */ jsx42(
2898
+ return /* @__PURE__ */ jsx44(
2687
2899
  Button,
2688
2900
  {
2689
2901
  "aria-label": "M\xE1s opciones",
@@ -2691,26 +2903,26 @@ function SidebarMore({ className, ...props }) {
2691
2903
  variant: "ghost",
2692
2904
  className: cn("size-7", className),
2693
2905
  ...props,
2694
- children: /* @__PURE__ */ jsx42(Ellipsis, {})
2906
+ children: /* @__PURE__ */ jsx44(Ellipsis, {})
2695
2907
  }
2696
2908
  );
2697
2909
  }
2698
2910
 
2699
2911
  // src/ui/skeleton/skeleton.tsx
2700
- import { jsx as jsx43 } from "react/jsx-runtime";
2912
+ import { jsx as jsx45 } from "react/jsx-runtime";
2701
2913
  function Skeleton({ className, ...props }) {
2702
- return /* @__PURE__ */ jsx43("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
2914
+ return /* @__PURE__ */ jsx45("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
2703
2915
  }
2704
2916
 
2705
2917
  // src/ui/submit-button/submit-button.tsx
2706
2918
  import { useFormStatus } from "react-dom";
2707
2919
  import { LoaderCircle as LoaderCircle3 } from "lucide-react";
2708
- import { Fragment as Fragment11, jsx as jsx44, jsxs as jsxs23 } from "react/jsx-runtime";
2920
+ import { Fragment as Fragment13, jsx as jsx46, jsxs as jsxs24 } from "react/jsx-runtime";
2709
2921
  function SubmitButton({ pendingLabel = "Guardando\u2026", loading = false, children, isDisabled, size = "sm", ...props }) {
2710
2922
  const { pending } = useFormStatus();
2711
2923
  const busy = pending || loading;
2712
- return /* @__PURE__ */ jsx44(Button, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ jsxs23(Fragment11, { children: [
2713
- /* @__PURE__ */ jsx44(LoaderCircle3, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
2924
+ return /* @__PURE__ */ jsx46(Button, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ jsxs24(Fragment13, { children: [
2925
+ /* @__PURE__ */ jsx46(LoaderCircle3, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
2714
2926
  pendingLabel
2715
2927
  ] }) : children });
2716
2928
  }
@@ -2720,7 +2932,7 @@ import { useEffect as useEffect5, useRef as useRef5 } from "react";
2720
2932
  import {
2721
2933
  Switch as AriaSwitch
2722
2934
  } from "react-aria-components";
2723
- import { Fragment as Fragment12, jsx as jsx45, jsxs as jsxs24 } from "react/jsx-runtime";
2935
+ import { Fragment as Fragment14, jsx as jsx47, jsxs as jsxs25 } from "react/jsx-runtime";
2724
2936
  var switchSizes = {
2725
2937
  sm: {
2726
2938
  control: "h-4 w-[1.875rem] p-0.5",
@@ -2776,7 +2988,7 @@ function Switch({
2776
2988
  ownerDocument.addEventListener("keydown", handleDirectionalKey);
2777
2989
  return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
2778
2990
  }, [isDisabled, isReadOnly, resolvedInputRef]);
2779
- return /* @__PURE__ */ jsx45(
2991
+ return /* @__PURE__ */ jsx47(
2780
2992
  AriaSwitch,
2781
2993
  {
2782
2994
  "data-slot": "switch",
@@ -2793,8 +3005,8 @@ function Switch({
2793
3005
  children: (state) => {
2794
3006
  const isThumbActive = state.isHovered || state.isPressed;
2795
3007
  const thumbOffset = state.isSelected ? isThumbActive ? styles.activeSelectedOffset : styles.selectedOffset : "0";
2796
- return /* @__PURE__ */ jsxs24(Fragment12, { children: [
2797
- /* @__PURE__ */ jsx45(
3008
+ return /* @__PURE__ */ jsxs25(Fragment14, { children: [
3009
+ /* @__PURE__ */ jsx47(
2798
3010
  "span",
2799
3011
  {
2800
3012
  "aria-hidden": "true",
@@ -2808,7 +3020,7 @@ function Switch({
2808
3020
  "group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
2809
3021
  styles.control
2810
3022
  ),
2811
- children: /* @__PURE__ */ jsx45(
3023
+ children: /* @__PURE__ */ jsx47(
2812
3024
  "span",
2813
3025
  {
2814
3026
  "data-slot": "switch-thumb",
@@ -2828,9 +3040,9 @@ function Switch({
2828
3040
  )
2829
3041
  }
2830
3042
  ),
2831
- children || description ? /* @__PURE__ */ jsxs24("span", { className: "grid gap-0.5 leading-tight", children: [
2832
- children ? /* @__PURE__ */ jsx45("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
2833
- description ? /* @__PURE__ */ jsx45("span", { "data-slot": "switch-description", className: "text-xs font-normal text-muted-foreground", children: description }) : null
3043
+ children || description ? /* @__PURE__ */ jsxs25("span", { className: "grid gap-0.5 leading-tight", children: [
3044
+ children ? /* @__PURE__ */ jsx47("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
3045
+ description ? /* @__PURE__ */ jsx47("span", { "data-slot": "switch-description", className: "text-xs font-normal text-muted-foreground", children: description }) : null
2834
3046
  ] }) : null
2835
3047
  ] });
2836
3048
  }
@@ -2839,9 +3051,9 @@ function Switch({
2839
3051
  }
2840
3052
 
2841
3053
  // src/ui/table/table.tsx
2842
- import { jsx as jsx46 } from "react/jsx-runtime";
3054
+ import { jsx as jsx48 } from "react/jsx-runtime";
2843
3055
  function Table({ className, ...props }) {
2844
- return /* @__PURE__ */ jsx46("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ jsx46(
3056
+ return /* @__PURE__ */ jsx48("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ jsx48(
2845
3057
  "table",
2846
3058
  {
2847
3059
  "data-slot": "table",
@@ -2851,10 +3063,10 @@ function Table({ className, ...props }) {
2851
3063
  ) });
2852
3064
  }
2853
3065
  function TableHeader({ className, ...props }) {
2854
- return /* @__PURE__ */ jsx46("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
3066
+ return /* @__PURE__ */ jsx48("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
2855
3067
  }
2856
3068
  function TableBody({ className, ...props }) {
2857
- return /* @__PURE__ */ jsx46(
3069
+ return /* @__PURE__ */ jsx48(
2858
3070
  "tbody",
2859
3071
  {
2860
3072
  "data-slot": "table-body",
@@ -2864,7 +3076,7 @@ function TableBody({ className, ...props }) {
2864
3076
  );
2865
3077
  }
2866
3078
  function TableRow({ className, ...props }) {
2867
- return /* @__PURE__ */ jsx46(
3079
+ return /* @__PURE__ */ jsx48(
2868
3080
  "tr",
2869
3081
  {
2870
3082
  "data-slot": "table-row",
@@ -2877,7 +3089,7 @@ function TableRow({ className, ...props }) {
2877
3089
  );
2878
3090
  }
2879
3091
  function TableHead({ className, ...props }) {
2880
- return /* @__PURE__ */ jsx46(
3092
+ return /* @__PURE__ */ jsx48(
2881
3093
  "th",
2882
3094
  {
2883
3095
  "data-slot": "table-head",
@@ -2890,7 +3102,7 @@ function TableHead({ className, ...props }) {
2890
3102
  );
2891
3103
  }
2892
3104
  function TableCell({ className, ...props }) {
2893
- return /* @__PURE__ */ jsx46(
3105
+ return /* @__PURE__ */ jsx48(
2894
3106
  "td",
2895
3107
  {
2896
3108
  "data-slot": "table-cell",
@@ -2900,7 +3112,7 @@ function TableCell({ className, ...props }) {
2900
3112
  );
2901
3113
  }
2902
3114
  function TableCaption({ className, ...props }) {
2903
- return /* @__PURE__ */ jsx46(
3115
+ return /* @__PURE__ */ jsx48(
2904
3116
  "caption",
2905
3117
  {
2906
3118
  "data-slot": "table-caption",
@@ -2910,7 +3122,7 @@ function TableCaption({ className, ...props }) {
2910
3122
  );
2911
3123
  }
2912
3124
  function TableFooter({ className, ...props }) {
2913
- return /* @__PURE__ */ jsx46(
3125
+ return /* @__PURE__ */ jsx48(
2914
3126
  "tfoot",
2915
3127
  {
2916
3128
  "data-slot": "table-footer",
@@ -2929,27 +3141,27 @@ import {
2929
3141
  Tabs as AriaTabs,
2930
3142
  composeRenderProps as composeRenderProps2
2931
3143
  } from "react-aria-components";
2932
- import { jsx as jsx47 } from "react/jsx-runtime";
3144
+ import { jsx as jsx49 } from "react/jsx-runtime";
2933
3145
  function Tabs({ className, ...props }) {
2934
- return /* @__PURE__ */ jsx47(AriaTabs, { "data-slot": "tabs", className: composeRenderProps2(className, (value) => cn("flex flex-col gap-2", value)), ...props });
3146
+ return /* @__PURE__ */ jsx49(AriaTabs, { "data-slot": "tabs", className: composeRenderProps2(className, (value) => cn("flex flex-col gap-2", value)), ...props });
2935
3147
  }
2936
3148
  function TabsList({ className, ...props }) {
2937
- return /* @__PURE__ */ jsx47(AriaTabList, { "data-slot": "tabs-list", className: composeRenderProps2(className, (value) => cn("inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground", value)), ...props });
3149
+ return /* @__PURE__ */ jsx49(AriaTabList, { "data-slot": "tabs-list", className: composeRenderProps2(className, (value) => cn("inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground", value)), ...props });
2938
3150
  }
2939
3151
  function TabsTrigger({ className, ...props }) {
2940
- return /* @__PURE__ */ jsx47(AriaTab, { "data-slot": "tabs-trigger", className: composeRenderProps2(className, (value) => cn("inline-flex h-7 items-center justify-center gap-1.5 rounded-md px-2.5 text-sm font-medium outline-none transition-colors data-hovered:text-foreground data-selected:bg-background data-selected:text-foreground data-selected:shadow-sm data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50", value)), ...props });
3152
+ return /* @__PURE__ */ jsx49(AriaTab, { "data-slot": "tabs-trigger", className: composeRenderProps2(className, (value) => cn("inline-flex h-7 items-center justify-center gap-1.5 rounded-md px-2.5 text-sm font-medium outline-none transition-colors data-hovered:text-foreground data-selected:bg-background data-selected:text-foreground data-selected:shadow-sm data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50", value)), ...props });
2941
3153
  }
2942
3154
  function TabsPanels({ className, ...props }) {
2943
- return /* @__PURE__ */ jsx47(AriaTabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
3155
+ return /* @__PURE__ */ jsx49(AriaTabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
2944
3156
  }
2945
3157
  function TabsContent({ className, ...props }) {
2946
- return /* @__PURE__ */ jsx47(AriaTabPanel, { "data-slot": "tabs-content", className: composeRenderProps2(className, (value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)), ...props });
3158
+ return /* @__PURE__ */ jsx49(AriaTabPanel, { "data-slot": "tabs-content", className: composeRenderProps2(className, (value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)), ...props });
2947
3159
  }
2948
3160
 
2949
3161
  // src/ui/toast/toast.tsx
2950
3162
  import { useEffect as useEffect6 } from "react";
2951
3163
  import { sileo, Toaster as SileoToaster } from "sileo";
2952
- import { Fragment as Fragment13, jsx as jsx48, jsxs as jsxs25 } from "react/jsx-runtime";
3164
+ import { Fragment as Fragment15, jsx as jsx50, jsxs as jsxs26 } from "react/jsx-runtime";
2953
3165
  function toSileoOptions({ title, description, duration, position, action }) {
2954
3166
  return {
2955
3167
  title,
@@ -2988,18 +3200,18 @@ function useToast() {
2988
3200
  return toast;
2989
3201
  }
2990
3202
  function ToastProvider({ children }) {
2991
- return /* @__PURE__ */ jsxs25(Fragment13, { children: [
3203
+ return /* @__PURE__ */ jsxs26(Fragment15, { children: [
2992
3204
  children,
2993
- /* @__PURE__ */ jsx48(Toaster, {})
3205
+ /* @__PURE__ */ jsx50(Toaster, {})
2994
3206
  ] });
2995
3207
  }
2996
3208
  function Toaster({ position }) {
2997
- return /* @__PURE__ */ jsx48(SileoToaster, { position, options: { fill: "var(--ui-secondary)" } });
3209
+ return /* @__PURE__ */ jsx50(SileoToaster, { position, options: { fill: "var(--ui-secondary)" } });
2998
3210
  }
2999
3211
  function ToastViewport({ position, visiblePosition, className }) {
3000
3212
  void className;
3001
3213
  if (visiblePosition && visiblePosition !== position) return null;
3002
- return /* @__PURE__ */ jsx48(Toaster, { position });
3214
+ return /* @__PURE__ */ jsx50(Toaster, { position });
3003
3215
  }
3004
3216
  function Toast({ id, title, description, variant = "default", action, state = "open", duration = 0, position, onDismiss }) {
3005
3217
  useEffect6(() => {
@@ -3014,15 +3226,15 @@ function Toast({ id, title, description, variant = "default", action, state = "o
3014
3226
  }
3015
3227
 
3016
3228
  // src/ui/toolbar/toolbar.tsx
3017
- import { jsx as jsx49 } from "react/jsx-runtime";
3229
+ import { jsx as jsx51 } from "react/jsx-runtime";
3018
3230
  function Toolbar({ className, ...props }) {
3019
- return /* @__PURE__ */ jsx49("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
3231
+ return /* @__PURE__ */ jsx51("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
3020
3232
  }
3021
3233
  function ToolbarGroup({ className, ...props }) {
3022
- return /* @__PURE__ */ jsx49("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
3234
+ return /* @__PURE__ */ jsx51("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
3023
3235
  }
3024
3236
  function ToolbarSpacer({ className, ...props }) {
3025
- return /* @__PURE__ */ jsx49("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
3237
+ return /* @__PURE__ */ jsx51("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
3026
3238
  }
3027
3239
  export {
3028
3240
  Accordion,
@@ -3032,6 +3244,17 @@ export {
3032
3244
  Alert,
3033
3245
  AlertAction,
3034
3246
  AlertDescription,
3247
+ AlertDialog,
3248
+ AlertDialogAction,
3249
+ AlertDialogCancel,
3250
+ AlertDialogContent,
3251
+ AlertDialogDescription,
3252
+ AlertDialogFooter,
3253
+ AlertDialogHeader,
3254
+ AlertDialogOverlay,
3255
+ AlertDialogPortal,
3256
+ AlertDialogTitle,
3257
+ AlertDialogTrigger,
3035
3258
  AlertTitle,
3036
3259
  AppShell,
3037
3260
  AppShellContent,
@@ -3065,6 +3288,9 @@ export {
3065
3288
  CardHeader,
3066
3289
  CardTitle,
3067
3290
  Checkbox,
3291
+ Collapsible,
3292
+ CollapsibleContent,
3293
+ CollapsibleTrigger,
3068
3294
  Combobox,
3069
3295
  ComboboxContent,
3070
3296
  ComboboxInput,
@@ -3140,6 +3366,7 @@ export {
3140
3366
  MenuContent,
3141
3367
  MenuItem,
3142
3368
  MenuTrigger,
3369
+ MetricCard,
3143
3370
  ModalDialog,
3144
3371
  OtpInput2 as OtpInput,
3145
3372
  PageHeader,
@@ -3152,9 +3379,6 @@ export {
3152
3379
  PopoverContent,
3153
3380
  PopoverTrigger,
3154
3381
  QuantityInput,
3155
- SearchClearButton,
3156
- SearchField,
3157
- SearchInput,
3158
3382
  Select,
3159
3383
  SelectContent,
3160
3384
  SelectItem,