@doscientos/ui 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,8 +1,10 @@
1
1
  "use client";
2
2
  "use strict";
3
+ var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
6
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
9
  var __export = (target, all) => {
8
10
  for (var name in all)
@@ -16,6 +18,14 @@ var __copyProps = (to, from, except, desc) => {
16
18
  }
17
19
  return to;
18
20
  };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
19
29
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
30
 
21
31
  // src/index.ts
@@ -43,15 +53,18 @@ __export(index_exports, {
43
53
  AvatarGroupCount: () => AvatarGroupCount,
44
54
  AvatarImage: () => AvatarImage,
45
55
  Badge: () => Badge,
56
+ BadgeLink: () => BadgeLink,
46
57
  Breadcrumb: () => Breadcrumb,
47
58
  BreadcrumbLink: () => BreadcrumbLink,
48
59
  BreadcrumbPage: () => BreadcrumbPage,
49
60
  BreadcrumbSeparator: () => BreadcrumbSeparator,
50
61
  Breadcrumbs: () => Breadcrumbs,
51
- Button: () => Button2,
62
+ Button: () => Button,
52
63
  ButtonGroup: () => ButtonGroup,
64
+ ButtonGroupSeparator: () => ButtonGroupSeparator,
53
65
  ButtonGroupText: () => ButtonGroupText,
54
66
  Card: () => Card,
67
+ CardAction: () => CardAction,
55
68
  CardContent: () => CardContent,
56
69
  CardDescription: () => CardDescription,
57
70
  CardFooter: () => CardFooter,
@@ -63,7 +76,7 @@ __export(index_exports, {
63
76
  ComboboxInput: () => ComboboxInput,
64
77
  ComboboxItem: () => ComboboxItem,
65
78
  ComboboxList: () => ComboboxList,
66
- ComboboxValue: () => import_react_aria_components5.ComboBoxValue,
79
+ ComboboxValue: () => import_react_aria_components7.ComboBoxValue,
67
80
  Command: () => Command,
68
81
  CommandContent: () => CommandContent,
69
82
  CommandInput: () => CommandInput,
@@ -76,17 +89,31 @@ __export(index_exports, {
76
89
  DrawerHeader: () => DrawerHeader,
77
90
  DrawerTitle: () => DrawerTitle,
78
91
  DropdownMenu: () => DropdownMenu,
79
- DropdownMenuContent: () => DropdownMenuContent,
92
+ DropdownMenuGroup: () => DropdownMenuGroup,
80
93
  DropdownMenuItem: () => DropdownMenuItem,
94
+ DropdownMenuLabel: () => DropdownMenuLabel,
81
95
  DropdownMenuSeparator: () => DropdownMenuSeparator,
96
+ DropdownMenuShortcut: () => DropdownMenuShortcut,
97
+ DropdownMenuSub: () => DropdownMenuSub,
98
+ DropdownMenuSubContent: () => DropdownMenuSubContent,
99
+ DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
82
100
  DropdownMenuTrigger: () => DropdownMenuTrigger,
83
101
  EmptyState: () => EmptyState,
102
+ EmptyStateContent: () => EmptyStateContent,
84
103
  EmptyStateDescription: () => EmptyStateDescription,
104
+ EmptyStateHeader: () => EmptyStateHeader,
105
+ EmptyStateMedia: () => EmptyStateMedia,
85
106
  EmptyStateTitle: () => EmptyStateTitle,
86
107
  Field: () => Field,
108
+ FieldContent: () => FieldContent,
87
109
  FieldDescription: () => FieldDescription,
88
110
  FieldError: () => FieldError2,
111
+ FieldGroup: () => FieldGroup,
89
112
  FieldLabel: () => FieldLabel,
113
+ FieldLegend: () => FieldLegend,
114
+ FieldSeparator: () => FieldSeparator,
115
+ FieldSet: () => FieldSet,
116
+ FieldTitle: () => FieldTitle,
90
117
  FormFeedback: () => FormFeedback,
91
118
  FormRow: () => FormRow,
92
119
  HighlightMatch: () => HighlightMatch,
@@ -101,12 +128,14 @@ __export(index_exports, {
101
128
  Kbd: () => Kbd,
102
129
  KbdGroup: () => KbdGroup,
103
130
  Label: () => Label2,
131
+ LinkButton: () => LinkButton,
104
132
  LoadingOverlay: () => LoadingOverlay,
105
133
  Menu: () => Menu,
106
134
  MenuContent: () => MenuContent,
107
135
  MenuItem: () => MenuItem,
108
136
  MenuTrigger: () => MenuTrigger,
109
137
  ModalDialog: () => ModalDialog,
138
+ OtpInput: () => OtpInput2,
110
139
  PageHeader: () => PageHeader,
111
140
  PageHeaderActions: () => PageHeaderActions,
112
141
  PageHeaderDescription: () => PageHeaderDescription,
@@ -127,6 +156,14 @@ __export(index_exports, {
127
156
  SelectTrigger: () => SelectTrigger,
128
157
  SelectValue: () => SelectValue,
129
158
  Separator: () => Separator,
159
+ Sheet: () => Sheet,
160
+ SheetClose: () => SheetClose,
161
+ SheetContent: () => SheetContent,
162
+ SheetDescription: () => SheetDescription,
163
+ SheetFooter: () => SheetFooter,
164
+ SheetHeader: () => SheetHeader,
165
+ SheetTitle: () => SheetTitle,
166
+ SheetTrigger: () => SheetTrigger,
130
167
  Sidebar: () => Sidebar,
131
168
  SidebarContent: () => SidebarContent,
132
169
  SidebarFooter: () => SidebarFooter,
@@ -146,6 +183,7 @@ __export(index_exports, {
146
183
  TableBody: () => TableBody,
147
184
  TableCaption: () => TableCaption,
148
185
  TableCell: () => TableCell,
186
+ TableFooter: () => TableFooter,
149
187
  TableHead: () => TableHead,
150
188
  TableHeader: () => TableHeader,
151
189
  TableRow: () => TableRow,
@@ -163,13 +201,17 @@ __export(index_exports, {
163
201
  ToolbarGroup: () => ToolbarGroup,
164
202
  ToolbarSpacer: () => ToolbarSpacer,
165
203
  Tooltip: () => Tooltip,
166
- TooltipContent: () => TooltipContent,
167
204
  TooltipTrigger: () => TooltipTrigger,
205
+ alertVariants: () => alertVariants,
168
206
  badgeVariants: () => badgeVariants,
207
+ buttonGroupVariants: () => buttonGroupVariants,
169
208
  buttonVariants: () => buttonVariants,
170
209
  cn: () => cn,
210
+ emptyStateMediaVariants: () => emptyStateMediaVariants,
211
+ fieldVariants: () => fieldVariants,
171
212
  formSnapshot: () => formSnapshot,
172
213
  getTextMatchParts: () => getTextMatchParts,
214
+ inputGroupAddonVariants: () => inputGroupAddonVariants,
173
215
  toast: () => toast,
174
216
  useAutosave: () => useAutosave,
175
217
  useDebouncedValue: () => useDebouncedValue,
@@ -322,44 +364,144 @@ function getTextMatchParts(text, query) {
322
364
  }
323
365
 
324
366
  // src/ui/accordion/accordion.tsx
325
- var import_react_aria_components = require("react-aria-components");
326
367
  var import_lucide_react = require("lucide-react");
368
+ var import_react_aria_components = require("react-aria-components");
327
369
  var import_jsx_runtime = require("react/jsx-runtime");
328
370
  function Accordion({ className, ...props }) {
329
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_aria_components.DisclosureGroup, { "data-slot": "accordion", className: cn("flex w-full flex-col", className), ...props });
371
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
372
+ import_react_aria_components.DisclosureGroup,
373
+ {
374
+ "data-slot": "accordion",
375
+ className: cn("flex w-full flex-col", className),
376
+ ...props
377
+ }
378
+ );
330
379
  }
331
380
  function AccordionItem({ className, ...props }) {
332
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_aria_components.Disclosure, { "data-slot": "accordion-item", className: cn("border-b border-border last:border-0", className), ...props });
381
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
382
+ import_react_aria_components.Disclosure,
383
+ {
384
+ "data-slot": "accordion-item",
385
+ className: cn("border-border not-last:border-b", className),
386
+ ...props
387
+ }
388
+ );
333
389
  }
334
- function AccordionTrigger({ className, children, ...props }) {
335
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_aria_components.Button, { "data-slot": "accordion-trigger", className: cn("group/accordion-trigger flex w-full items-center justify-between py-3 text-left text-sm font-medium outline-none transition-colors hover:text-primary focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props, children: (values) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
336
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: typeof children === "function" ? children(values) : children }),
337
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronDown, { "aria-hidden": "true", className: "size-4 transition-transform group-data-expanded/accordion-trigger:rotate-180 motion-reduce:transition-none" })
338
- ] }) });
390
+ function AccordionTrigger({
391
+ className,
392
+ children,
393
+ ...props
394
+ }) {
395
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_aria_components.Heading, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
396
+ import_react_aria_components.Button,
397
+ {
398
+ slot: "trigger",
399
+ "data-slot": "accordion-trigger",
400
+ className: cn(
401
+ "group/accordion-trigger relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:after:border-ring disabled:pointer-events-none disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4 **:data-[slot=accordion-trigger-icon]:text-muted-foreground",
402
+ className
403
+ ),
404
+ ...props,
405
+ children: [
406
+ children,
407
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
408
+ import_lucide_react.ChevronDownIcon,
409
+ {
410
+ "data-slot": "accordion-trigger-icon",
411
+ className: "pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
412
+ }
413
+ ),
414
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
415
+ import_lucide_react.ChevronUpIcon,
416
+ {
417
+ "data-slot": "accordion-trigger-icon",
418
+ className: "pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
419
+ }
420
+ )
421
+ ]
422
+ }
423
+ ) });
339
424
  }
340
- function AccordionContent({ className, ...props }) {
341
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_aria_components.DisclosurePanel, { "data-slot": "accordion-content", className: cn("overflow-hidden pb-3 text-sm text-muted-foreground", className), ...props });
425
+ function AccordionContent({ className, children, ...props }) {
426
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
427
+ import_react_aria_components.DisclosurePanel,
428
+ {
429
+ "data-slot": "accordion-content",
430
+ className: "h-(--disclosure-panel-height) overflow-clip text-sm transition-[height] data-open:animate-accordion-down data-closed:animate-accordion-up",
431
+ ...props,
432
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
433
+ "div",
434
+ {
435
+ className: cn(
436
+ "pt-0 pb-2.5 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
437
+ className
438
+ ),
439
+ children
440
+ }
441
+ )
442
+ }
443
+ );
342
444
  }
343
445
 
344
446
  // src/ui/alert/alert.tsx
447
+ var import_class_variance_authority = require("class-variance-authority");
345
448
  var import_jsx_runtime2 = require("react/jsx-runtime");
346
- var variants = {
347
- default: "border-border bg-card text-foreground",
348
- destructive: "border-destructive/30 bg-destructive/5 text-destructive",
349
- success: "border-success/30 bg-success/5 text-success",
350
- warning: "border-warning/30 bg-warning/5 text-warning"
351
- };
352
- function Alert({ className, variant = "default", ...props }) {
353
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { role: "alert", "data-slot": "alert", "data-variant": variant, className: cn("grid w-full gap-1 rounded-lg border px-3 py-2.5 text-sm [&>svg]:size-4", variants[variant], className), ...props });
449
+ var alertVariants = (0, import_class_variance_authority.cva)(
450
+ "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",
451
+ {
452
+ variants: {
453
+ variant: {
454
+ default: "bg-card text-card-foreground",
455
+ info: "border-info/30 bg-info/5 text-info",
456
+ success: "border-success/30 bg-success/5 text-success",
457
+ warning: "border-warning/30 bg-warning/5 text-warning",
458
+ destructive: "border-destructive/30 bg-destructive/5 text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
459
+ }
460
+ },
461
+ defaultVariants: {
462
+ variant: "default"
463
+ }
464
+ }
465
+ );
466
+ function Alert({ className, variant, ...props }) {
467
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
468
+ "div",
469
+ {
470
+ "data-slot": "alert",
471
+ role: "alert",
472
+ className: cn(alertVariants({ variant }), className),
473
+ ...props
474
+ }
475
+ );
354
476
  }
355
477
  function AlertTitle({ className, ...props }) {
356
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { "data-slot": "alert-title", className: cn("font-medium", className), ...props });
478
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
479
+ "div",
480
+ {
481
+ "data-slot": "alert-title",
482
+ className: cn(
483
+ "font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",
484
+ className
485
+ ),
486
+ ...props
487
+ }
488
+ );
357
489
  }
358
490
  function AlertDescription({ className, ...props }) {
359
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { "data-slot": "alert-description", className: cn("text-sm opacity-90", className), ...props });
491
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
492
+ "div",
493
+ {
494
+ "data-slot": "alert-description",
495
+ className: cn(
496
+ "text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
497
+ className
498
+ ),
499
+ ...props
500
+ }
501
+ );
360
502
  }
361
- function AlertAction({ className, children, ...props }) {
362
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props, children });
503
+ function AlertAction({ className, ...props }) {
504
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
363
505
  }
364
506
 
365
507
  // src/ui/app-shell/app-shell.tsx
@@ -477,37 +619,64 @@ function AvatarGroupCount({ className, ...props }) {
477
619
  }
478
620
 
479
621
  // src/ui/badge/badge.tsx
480
- var import_class_variance_authority = require("class-variance-authority");
622
+ var import_class_variance_authority2 = require("class-variance-authority");
623
+ var import_react_aria_components2 = require("react-aria-components");
481
624
  var import_jsx_runtime5 = require("react/jsx-runtime");
482
- var badgeVariants = (0, import_class_variance_authority.cva)("inline-flex w-fit items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium", {
483
- variants: {
484
- variant: {
485
- default: "bg-primary text-primary-foreground",
486
- secondary: "bg-secondary text-secondary-foreground",
487
- neutral: "bg-muted text-muted-foreground",
488
- success: "bg-success/10 text-success",
489
- warning: "bg-warning/10 text-warning",
490
- destructive: "bg-destructive/10 text-destructive",
491
- outline: "border border-border text-foreground"
492
- }
493
- },
494
- defaultVariants: { variant: "default" }
495
- });
625
+ var badgeVariants = (0, import_class_variance_authority2.cva)(
626
+ "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",
627
+ {
628
+ variants: {
629
+ variant: {
630
+ default: "bg-primary text-primary-foreground",
631
+ secondary: "bg-secondary text-secondary-foreground",
632
+ neutral: "bg-muted text-muted-foreground",
633
+ success: "bg-success/10 text-success",
634
+ warning: "bg-warning/10 text-warning",
635
+ info: "bg-info/10 text-info",
636
+ danger: "bg-destructive/10 text-destructive",
637
+ destructive: "bg-destructive text-destructive-foreground",
638
+ outline: "border border-border text-foreground",
639
+ ghost: "text-foreground hover:bg-muted",
640
+ link: "text-primary underline-offset-4 hover:underline"
641
+ }
642
+ },
643
+ defaultVariants: { variant: "default" }
644
+ }
645
+ );
496
646
  function Badge({ className, variant, ...props }) {
497
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { "data-slot": "badge", className: cn(badgeVariants({ variant }), className), ...props });
647
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
648
+ "span",
649
+ {
650
+ "data-slot": "badge",
651
+ "data-variant": variant ?? "default",
652
+ className: cn(badgeVariants({ variant }), className),
653
+ ...props
654
+ }
655
+ );
656
+ }
657
+ function BadgeLink({ className, variant, ...props }) {
658
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
659
+ import_react_aria_components2.Link,
660
+ {
661
+ "data-slot": "badge",
662
+ "data-variant": variant ?? "default",
663
+ className: cn(badgeVariants({ variant }), className),
664
+ ...props
665
+ }
666
+ );
498
667
  }
499
668
 
500
669
  // src/ui/breadcrumb/breadcrumb.tsx
501
- var import_react_aria_components2 = require("react-aria-components");
670
+ var import_react_aria_components3 = require("react-aria-components");
502
671
  var import_jsx_runtime6 = require("react/jsx-runtime");
503
672
  function Breadcrumbs({ className, ...props }) {
504
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components2.Breadcrumbs, { "data-slot": "breadcrumbs", className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className), ...props });
673
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components3.Breadcrumbs, { "data-slot": "breadcrumbs", className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className), ...props });
505
674
  }
506
675
  function Breadcrumb({ className, ...props }) {
507
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components2.Breadcrumb, { "data-slot": "breadcrumb", className: cn("inline-flex items-center gap-1.5", className), ...props });
676
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components3.Breadcrumb, { "data-slot": "breadcrumb", className: cn("inline-flex items-center gap-1.5", className), ...props });
508
677
  }
509
678
  function BreadcrumbLink({ className, ...props }) {
510
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components2.Link, { "data-slot": "breadcrumb-link", className: cn("transition-colors hover:text-foreground", className), ...props });
679
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components3.Link, { "data-slot": "breadcrumb-link", className: cn("transition-colors hover:text-foreground", className), ...props });
511
680
  }
512
681
  function BreadcrumbPage({ className, ...props }) {
513
682
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "data-slot": "breadcrumb-page", "aria-current": "page", className: cn("font-medium text-foreground", className), ...props });
@@ -516,99 +685,301 @@ function BreadcrumbSeparator({ children = "/", className, ...props }) {
516
685
  return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { "data-slot": "breadcrumb-separator", "aria-hidden": "true", className: cn("text-muted-foreground/60", className), ...props, children });
517
686
  }
518
687
 
519
- // src/ui/button-group/button-group.tsx
520
- var import_jsx_runtime7 = require("react/jsx-runtime");
521
- function ButtonGroup({ className, ...props }) {
522
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { role: "group", "data-slot": "button-group", className: cn("inline-flex items-center gap-2", className), ...props });
523
- }
524
- function ButtonGroupText({ className, ...props }) {
525
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { "data-slot": "button-group-text", className: cn("text-sm text-muted-foreground", className), ...props });
526
- }
527
-
528
688
  // src/ui/button/button.tsx
529
- var import_class_variance_authority2 = require("class-variance-authority");
530
- var import_react_aria_components3 = require("react-aria-components");
531
- var import_jsx_runtime8 = require("react/jsx-runtime");
532
- var buttonVariants = (0, import_class_variance_authority2.cva)(
533
- "inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg border border-transparent text-sm font-medium whitespace-nowrap transition-[background-color,border-color,color,box-shadow,transform] duration-150 outline-none focus-visible:ring-3 focus-visible:ring-ring/50 data-pressed:scale-[0.98] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 motion-reduce:transition-none motion-reduce:data-pressed:transform-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
689
+ var import_class_variance_authority3 = require("class-variance-authority");
690
+ var import_react_aria_components4 = require("react-aria-components");
691
+ var import_jsx_runtime7 = require("react/jsx-runtime");
692
+ var buttonVariants = (0, import_class_variance_authority3.cva)(
693
+ "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
534
694
  {
535
695
  variants: {
536
696
  variant: {
537
- default: "bg-primary text-primary-foreground hover:bg-primary/85",
538
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
539
- outline: "border-border bg-background text-foreground hover:bg-muted",
540
- ghost: "text-foreground hover:bg-muted",
541
- destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20",
697
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
698
+ 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",
699
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
700
+ ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
701
+ 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",
542
702
  link: "text-primary underline-offset-4 hover:underline"
543
703
  },
544
704
  size: {
545
- xs: "h-6 px-2 text-xs",
546
- sm: "h-7 px-2.5 text-xs",
547
- default: "h-8 px-3",
548
- lg: "h-10 px-4",
549
- icon: "size-8 p-0"
705
+ default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
706
+ 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",
707
+ 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",
708
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
709
+ icon: "size-8",
710
+ "icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
711
+ "icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
712
+ "icon-lg": "size-9"
713
+ }
714
+ },
715
+ defaultVariants: {
716
+ variant: "default",
717
+ size: "default"
718
+ }
719
+ }
720
+ );
721
+ function Button({ className, variant = "default", size = "default", ...props }) {
722
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
723
+ import_react_aria_components4.Button,
724
+ {
725
+ "data-slot": "button",
726
+ "data-variant": variant,
727
+ "data-size": size,
728
+ className: cn(buttonVariants({ variant, size, className })),
729
+ ...props
730
+ }
731
+ );
732
+ }
733
+ function LinkButton({
734
+ className,
735
+ variant = "default",
736
+ size = "default",
737
+ ...props
738
+ }) {
739
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
740
+ import_react_aria_components4.Link,
741
+ {
742
+ "data-slot": "button",
743
+ "data-variant": variant,
744
+ "data-size": size,
745
+ className: cn(buttonVariants({ variant, size, className })),
746
+ ...props
747
+ }
748
+ );
749
+ }
750
+
751
+ // src/ui/button-group/button-group.tsx
752
+ var import_class_variance_authority4 = require("class-variance-authority");
753
+
754
+ // src/ui/separator/separator.tsx
755
+ var import_react_aria_components5 = require("react-aria-components");
756
+ var import_jsx_runtime8 = require("react/jsx-runtime");
757
+ function Separator({ className, orientation = "horizontal", ...props }) {
758
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
759
+ import_react_aria_components5.Separator,
760
+ {
761
+ "data-slot": "separator",
762
+ orientation,
763
+ className: cn(
764
+ "block shrink-0 border-0 bg-border aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=vertical]:w-px aria-[orientation=vertical]:self-stretch [:is(hr)]:h-px [:is(hr)]:w-full",
765
+ className
766
+ ),
767
+ ...props
768
+ }
769
+ );
770
+ }
771
+
772
+ // src/ui/button-group/button-group.tsx
773
+ var import_jsx_runtime9 = (
774
+ // biome-ignore lint/a11y/useSemanticElements: fieldset would impose form semantics on a generic action group.
775
+ require("react/jsx-runtime")
776
+ );
777
+ var buttonGroupVariants = (0, import_class_variance_authority4.cva)(
778
+ "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",
779
+ {
780
+ variants: {
781
+ orientation: {
782
+ horizontal: "**:data-slot:rounded-r-none [&_[data-slot]~[data-slot]]:rounded-l-none [&_[data-slot]~[data-slot]]:border-l-0 [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!",
783
+ vertical: "flex-col **:data-slot:rounded-b-none [&_[data-slot]~[data-slot]]:rounded-t-none [&_[data-slot]~[data-slot]]:border-t-0 [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!"
550
784
  }
551
785
  },
552
- defaultVariants: { variant: "default", size: "default" }
786
+ defaultVariants: {
787
+ orientation: "horizontal"
788
+ }
553
789
  }
554
790
  );
555
- function Button2({ className, variant, size, ...props }) {
556
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_aria_components3.Button, { "data-slot": "button", className: cn(buttonVariants({ variant, size }), className), ...props });
791
+ function ButtonGroup({
792
+ className,
793
+ orientation,
794
+ ...props
795
+ }) {
796
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
797
+ "div",
798
+ {
799
+ role: "group",
800
+ "data-slot": "button-group",
801
+ "data-orientation": orientation,
802
+ className: cn(buttonGroupVariants({ orientation }), className),
803
+ ...props
804
+ }
805
+ );
806
+ }
807
+ function ButtonGroupText({
808
+ className,
809
+ render,
810
+ ...props
811
+ }) {
812
+ if (render) {
813
+ const renderProps = {
814
+ "data-slot": "button-group-text",
815
+ className: cn(
816
+ "flex items-center gap-2 rounded-lg border border-border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
817
+ className
818
+ ),
819
+ ...props
820
+ };
821
+ return render(renderProps);
822
+ }
823
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
824
+ "div",
825
+ {
826
+ "data-slot": "button-group-text",
827
+ className: cn(
828
+ "flex items-center gap-2 rounded-lg border border-border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
829
+ className
830
+ ),
831
+ ...props
832
+ }
833
+ );
834
+ }
835
+ function ButtonGroupSeparator({
836
+ className,
837
+ orientation = "vertical",
838
+ ...props
839
+ }) {
840
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
841
+ Separator,
842
+ {
843
+ "data-slot": "button-group-separator",
844
+ orientation,
845
+ className: cn(
846
+ "relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto",
847
+ className
848
+ ),
849
+ ...props
850
+ }
851
+ );
557
852
  }
558
853
 
559
854
  // src/ui/card/card.tsx
560
- var import_jsx_runtime9 = require("react/jsx-runtime");
561
- function Card({ className, ...props }) {
562
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("section", { "data-slot": "card", className: cn("rounded-xl border border-border bg-card text-foreground shadow-sm", className), ...props });
855
+ var import_jsx_runtime10 = require("react/jsx-runtime");
856
+ function Card({ className, size = "default", ...props }) {
857
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
858
+ "div",
859
+ {
860
+ "data-slot": "card",
861
+ "data-size": size,
862
+ className: cn(
863
+ "group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl border border-border bg-card py-(--card-spacing) text-sm text-card-foreground shadow-sm [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
864
+ className
865
+ ),
866
+ ...props
867
+ }
868
+ );
563
869
  }
564
870
  function CardHeader({ className, ...props }) {
565
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("header", { "data-slot": "card-header", className: cn("flex flex-col gap-1.5 p-5", className), ...props });
871
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
872
+ "div",
873
+ {
874
+ "data-slot": "card-header",
875
+ className: cn(
876
+ "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",
877
+ className
878
+ ),
879
+ ...props
880
+ }
881
+ );
566
882
  }
567
883
  function CardTitle({ className, ...props }) {
568
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", { "data-slot": "card-title", className: cn("text-base font-semibold", className), ...props });
884
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
885
+ "div",
886
+ {
887
+ "data-slot": "card-title",
888
+ className: cn(
889
+ "text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",
890
+ className
891
+ ),
892
+ ...props
893
+ }
894
+ );
569
895
  }
570
896
  function CardDescription({ className, ...props }) {
571
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { "data-slot": "card-description", className: cn("text-sm text-muted-foreground", className), ...props });
897
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
898
+ "div",
899
+ {
900
+ "data-slot": "card-description",
901
+ className: cn("text-sm text-muted-foreground", className),
902
+ ...props
903
+ }
904
+ );
905
+ }
906
+ function CardAction({ className, ...props }) {
907
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
908
+ "div",
909
+ {
910
+ "data-slot": "card-action",
911
+ className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className),
912
+ ...props
913
+ }
914
+ );
572
915
  }
573
916
  function CardContent({ className, ...props }) {
574
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { "data-slot": "card-content", className: cn("p-5 pt-0", className), ...props });
917
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props });
575
918
  }
576
919
  function CardFooter({ className, ...props }) {
577
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("footer", { "data-slot": "card-footer", className: cn("flex items-center gap-2 border-t border-border p-5", className), ...props });
920
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
921
+ "div",
922
+ {
923
+ "data-slot": "card-footer",
924
+ className: cn(
925
+ "flex items-center rounded-b-xl border-t border-border bg-muted/50 p-(--card-spacing)",
926
+ className
927
+ ),
928
+ ...props
929
+ }
930
+ );
578
931
  }
579
932
 
580
933
  // src/ui/checkbox/checkbox.tsx
581
- var import_react_aria_components4 = require("react-aria-components");
582
934
  var import_lucide_react2 = require("lucide-react");
583
- var import_jsx_runtime10 = require("react/jsx-runtime");
935
+ var import_react_aria_components6 = require("react-aria-components");
936
+ var import_jsx_runtime11 = require("react/jsx-runtime");
584
937
  function Checkbox({ className, children, ...props }) {
585
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react_aria_components4.Checkbox, { "data-slot": "checkbox", className: cn("group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: (state) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
586
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { "aria-hidden": "true", 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", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react2.Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" }) }),
587
- typeof children === "function" ? children(state) : children
588
- ] }) });
938
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
939
+ import_react_aria_components6.Checkbox,
940
+ {
941
+ "data-slot": "checkbox",
942
+ className: cn(
943
+ "group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50",
944
+ className
945
+ ),
946
+ ...props,
947
+ children: (state) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
948
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
949
+ "span",
950
+ {
951
+ "aria-hidden": "true",
952
+ 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",
953
+ children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react2.Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" })
954
+ }
955
+ ),
956
+ typeof children === "function" ? children(state) : children
957
+ ] })
958
+ }
959
+ );
589
960
  }
590
961
 
591
962
  // src/ui/combobox/combobox.tsx
592
963
  var import_react5 = require("react");
593
- var import_react_aria_components5 = require("react-aria-components");
594
- var import_jsx_runtime11 = require("react/jsx-runtime");
595
- var Combobox = import_react_aria_components5.ComboBox;
964
+ var import_react_aria_components7 = require("react-aria-components");
965
+ var import_jsx_runtime12 = require("react/jsx-runtime");
966
+ var Combobox = import_react_aria_components7.ComboBox;
596
967
  function ComboboxInput({ className, ...props }) {
597
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_aria_components5.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 });
968
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.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 });
598
969
  }
599
970
  function ComboboxContent({ className, ...props }) {
600
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_aria_components5.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 });
971
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.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 });
601
972
  }
602
973
  function ComboboxList({ className, emptyState, ...props }) {
603
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_aria_components5.ListBox, { "data-slot": "combobox-list", className: cn("max-h-64 overflow-y-auto", className), renderEmptyState: emptyState ? () => emptyState : void 0, ...props });
974
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.ListBox, { "data-slot": "combobox-list", className: cn("max-h-64 overflow-y-auto", className), renderEmptyState: emptyState ? () => emptyState : void 0, ...props });
604
975
  }
605
976
  function ComboboxItem({ className, children, ...props }) {
606
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_aria_components5.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 });
977
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.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 });
607
978
  }
608
979
  function HighlightMatch({ text, query, className }) {
609
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react5.Fragment, { children: part.text }, `${part.text}-${index}`)) });
980
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react5.Fragment, { children: part.text }, `${part.text}-${index}`)) });
610
981
  }
611
- function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inputValue: controlledInputValue, onInputChange, selectedKey, onSelectionChange, label, description, errorMessage, emptyState = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "px-3 py-7 text-center text-sm text-muted-foreground", children: "No hay resultados." }), suggestion = true, placeholder, className, onKeyDown: _onKeyDown, ...props }) {
982
+ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inputValue: controlledInputValue, onInputChange, selectedKey, onSelectionChange, label, description, errorMessage, emptyState = /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "px-3 py-7 text-center text-sm text-muted-foreground", children: "No hay resultados." }), suggestion = true, placeholder, className, onKeyDown: _onKeyDown, ...props }) {
612
983
  const [internalInputValue, setInternalInputValue] = (0, import_react5.useState)("");
613
984
  const inputValue = controlledInputValue ?? internalInputValue;
614
985
  const setInputValue = (value) => {
@@ -628,48 +999,48 @@ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inp
628
999
  const handleKeyDown = (event) => {
629
1000
  if ((event.key === "Tab" || event.key === "Enter") && acceptSuggestion()) event.preventDefault();
630
1001
  };
631
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_react_aria_components5.ComboBox, { ...props, className: cn("group/combobox flex w-full flex-col gap-1.5", className), items: filteredItems, selectedKey, inputValue, onInputChange: setInputValue, onSelectionChange: (key) => {
1002
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_aria_components7.ComboBox, { ...props, className: cn("group/combobox flex w-full flex-col gap-1.5", className), items: filteredItems, selectedKey, inputValue, onInputChange: setInputValue, onSelectionChange: (key) => {
632
1003
  const item = filteredItems.find((candidate) => String(getItemKey(candidate)) === String(key));
633
1004
  if (item) setInputValue(getItemLabel(item));
634
1005
  onSelectionChange?.(key, item);
635
1006
  }, children: [
636
- label && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_aria_components5.Label, { className: "text-sm font-medium text-foreground", children: label }),
637
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "relative", children: [
638
- suggestionLabel && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("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: [
639
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-transparent", children: inputValue }),
1007
+ label && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.Label, { className: "text-sm font-medium text-foreground", children: label }),
1008
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "relative", children: [
1009
+ suggestionLabel && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("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: [
1010
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-transparent", children: inputValue }),
640
1011
  suggestionLabel.slice(inputValue.length)
641
1012
  ] }),
642
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ComboboxInput, { "aria-autocomplete": suggestionLabel ? "both" : "list", placeholder, onKeyDown: handleKeyDown, className: "relative z-10 bg-transparent" })
1013
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxInput, { "aria-autocomplete": suggestionLabel ? "both" : "list", placeholder, onKeyDown: handleKeyDown, className: "relative z-10 bg-transparent" })
643
1014
  ] }),
644
- description && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_aria_components5.Text, { slot: "description", className: "text-xs text-muted-foreground", children: description }),
645
- errorMessage && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_aria_components5.FieldError, { className: "text-xs text-destructive", children: errorMessage }),
646
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ComboboxContent, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ComboboxList, { emptyState, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ComboboxItem, { id: getItemKey(item), textValue: getItemLabel(item), children: renderItem ? renderItem(item, inputValue) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(HighlightMatch, { text: getItemLabel(item), query: inputValue }) }) }) })
1015
+ description && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.Text, { slot: "description", className: "text-xs text-muted-foreground", children: description }),
1016
+ errorMessage && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.FieldError, { className: "text-xs text-destructive", children: errorMessage }),
1017
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxContent, { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxList, { emptyState, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ComboboxItem, { id: getItemKey(item), textValue: getItemLabel(item), children: renderItem ? renderItem(item, inputValue) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(HighlightMatch, { text: getItemLabel(item), query: inputValue }) }) }) })
647
1018
  ] });
648
1019
  }
649
1020
 
650
1021
  // src/ui/command/command.tsx
651
- var import_react_aria_components6 = require("react-aria-components");
652
- var import_jsx_runtime12 = require("react/jsx-runtime");
653
- function Command({ className, ...props }) {
654
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components6.ComboBox, { "data-slot": "command", className: cn("w-full", className), ...props });
1022
+ var import_react_aria_components8 = require("react-aria-components");
1023
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1024
+ function Command({ className, ...props }) {
1025
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.ComboBox, { "data-slot": "command", className: cn("w-full", className), ...props });
655
1026
  }
656
1027
  function CommandInput({ className, ...props }) {
657
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components6.Input, { "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 });
1028
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.Input, { "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 });
658
1029
  }
659
1030
  function CommandContent({ className, ...props }) {
660
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components6.Popover, { "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 });
1031
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.Popover, { "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 });
661
1032
  }
662
1033
  function CommandList({ className, ...props }) {
663
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components6.ListBox, { "data-slot": "command-list", className: cn("max-h-72 overflow-y-auto", className), ...props });
1034
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.ListBox, { "data-slot": "command-list", className: cn("max-h-72 overflow-y-auto", className), ...props });
664
1035
  }
665
1036
  function CommandItem({ className, ...props }) {
666
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components6.ListBoxItem, { "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 });
1037
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.ListBoxItem, { "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 });
667
1038
  }
668
1039
 
669
1040
  // src/ui/modal-dialog/modal-dialog.tsx
670
1041
  var import_lucide_react3 = require("lucide-react");
671
- var import_react_aria_components7 = require("react-aria-components");
672
- var import_jsx_runtime13 = require("react/jsx-runtime");
1042
+ var import_react_aria_components9 = require("react-aria-components");
1043
+ var import_jsx_runtime14 = require("react/jsx-runtime");
673
1044
  var sizeClasses = {
674
1045
  sm: "w-[min(calc(100dvw-2rem),24rem)]",
675
1046
  md: "w-[min(calc(100dvw-2rem),28rem)]",
@@ -689,48 +1060,48 @@ function ModalDialog({
689
1060
  ...props
690
1061
  }) {
691
1062
  const layoutClass = children ? footer ? "grid-rows-[auto_minmax(0,1fr)_auto]" : "grid-rows-[auto_minmax(0,1fr)]" : "grid-rows-[auto_auto]";
692
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
693
- import_react_aria_components7.ModalOverlay,
1063
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1064
+ import_react_aria_components9.ModalOverlay,
694
1065
  {
695
1066
  isOpen: open,
696
1067
  onOpenChange,
697
1068
  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",
698
1069
  ...props,
699
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
700
- import_react_aria_components7.Modal,
1070
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1071
+ import_react_aria_components9.Modal,
701
1072
  {
702
1073
  className: cn(
703
1074
  "max-h-[calc(100dvh-2rem)] outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out",
704
1075
  sizeClasses[size],
705
1076
  className
706
1077
  ),
707
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
708
- import_react_aria_components7.Dialog,
1078
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1079
+ import_react_aria_components9.Dialog,
709
1080
  {
710
1081
  className: cn(
711
1082
  "grid max-h-[calc(100dvh-2rem)] overflow-hidden rounded-xl bg-background text-foreground shadow-xl outline-none",
712
1083
  layoutClass
713
1084
  ),
714
- children: ({ close }) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
715
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("header", { "data-slot": "modal-dialog-header", className: "flex items-start gap-3 border-b border-border px-5 py-4", children: [
716
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "min-w-0 flex-1", children: [
717
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components7.Heading, { slot: "title", className: "font-heading text-base leading-none font-medium", children: title }),
718
- description ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components7.Text, { slot: "description", className: "mt-2 text-sm text-muted-foreground", children: description }) : null
1085
+ children: ({ close }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1086
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("header", { "data-slot": "modal-dialog-header", className: "flex items-start gap-3 border-b border-border px-5 py-4", children: [
1087
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "min-w-0 flex-1", children: [
1088
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components9.Heading, { slot: "title", className: "font-heading text-base leading-none font-medium", children: title }),
1089
+ description ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components9.Text, { slot: "description", className: "mt-2 text-sm text-muted-foreground", children: description }) : null
719
1090
  ] }),
720
- showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
721
- Button2,
1091
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1092
+ Button,
722
1093
  {
723
1094
  "aria-label": "Cerrar di\xE1logo",
724
1095
  variant: "ghost",
725
1096
  size: "icon",
726
1097
  className: "-mr-2 -mt-1",
727
1098
  onPress: close,
728
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.X, { "aria-hidden": "true", className: "size-4" })
1099
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react3.X, { "aria-hidden": "true", className: "size-4" })
729
1100
  }
730
1101
  ) : null
731
1102
  ] }),
732
- children ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { "data-slot": "modal-dialog-body", className: "min-h-0 overflow-y-auto px-5 py-4", children }) : null,
733
- footer ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1103
+ children ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { "data-slot": "modal-dialog-body", className: "min-h-0 overflow-y-auto px-5 py-4", children }) : null,
1104
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
734
1105
  "footer",
735
1106
  {
736
1107
  "data-slot": "modal-dialog-footer",
@@ -751,7 +1122,7 @@ function ModalDialog({
751
1122
  }
752
1123
 
753
1124
  // src/ui/confirm-dialog/confirm-dialog.tsx
754
- var import_jsx_runtime14 = require("react/jsx-runtime");
1125
+ var import_jsx_runtime15 = require("react/jsx-runtime");
755
1126
  function ConfirmDialog({
756
1127
  open,
757
1128
  onOpenChange,
@@ -763,7 +1134,7 @@ function ConfirmDialog({
763
1134
  pending = false,
764
1135
  onConfirm
765
1136
  }) {
766
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1137
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
767
1138
  ModalDialog,
768
1139
  {
769
1140
  open,
@@ -771,89 +1142,475 @@ function ConfirmDialog({
771
1142
  title,
772
1143
  description,
773
1144
  showCloseButton: false,
774
- footer: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
775
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Button2, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
776
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Button2, { variant: destructive ? "destructive" : "default", isDisabled: pending, onPress: onConfirm, children: confirmLabel })
1145
+ footer: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
1146
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
1147
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Button, { variant: destructive ? "destructive" : "default", isDisabled: pending, onPress: onConfirm, children: confirmLabel })
777
1148
  ] })
778
1149
  }
779
1150
  );
780
1151
  }
781
1152
 
782
1153
  // src/ui/drawer/drawer.tsx
783
- var import_react_aria_components8 = require("react-aria-components");
784
- var import_jsx_runtime15 = require("react/jsx-runtime");
1154
+ var import_react_aria_components10 = require("react-aria-components");
1155
+ var import_jsx_runtime16 = require("react/jsx-runtime");
785
1156
  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" };
786
1157
  function Drawer({ children, side = "right", className, ...props }) {
787
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components8.ModalOverlay, { 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__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components8.Modal, { 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__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components8.Dialog, { "data-slot": "drawer", className: "outline-none", children }) }) });
1158
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.ModalOverlay, { 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__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Modal, { 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__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Dialog, { "data-slot": "drawer", className: "outline-none", children }) }) });
788
1159
  }
789
1160
  function DrawerHeader({ className, ...props }) {
790
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
1161
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
791
1162
  }
792
1163
  function DrawerFooter({ className, ...props }) {
793
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("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 });
1164
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("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 });
794
1165
  }
795
1166
  function DrawerTitle({ className, ...props }) {
796
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h2", { "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
1167
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h2", { "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
797
1168
  }
798
1169
  function DrawerDescription({ className, ...props }) {
799
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
1170
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
800
1171
  }
801
1172
 
802
1173
  // src/ui/dropdown-menu/dropdown-menu.tsx
803
- var import_react_aria_components9 = require("react-aria-components");
804
- var import_jsx_runtime16 = require("react/jsx-runtime");
805
- var DropdownMenu = import_react_aria_components9.Menu;
806
- var DropdownMenuTrigger = import_react_aria_components9.MenuTrigger;
807
- function DropdownMenuContent({ className, ...props }) {
808
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components9.Popover, { "data-slot": "dropdown-menu-content", offset: 6, className: cn("min-w-40 overflow-hidden 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 });
1174
+ var React = require("react");
1175
+ var import_class_variance_authority5 = require("class-variance-authority");
1176
+ var import_lucide_react4 = require("lucide-react");
1177
+ var import_react_aria_components11 = require("react-aria-components");
1178
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1179
+ function DropdownMenuTrigger({
1180
+ ...props
1181
+ }) {
1182
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
1183
+ }
1184
+ function DropdownMenu({
1185
+ "data-slot": dataSlot = "dropdown-menu-content",
1186
+ placement = "bottom start",
1187
+ offset = 4,
1188
+ crossOffset = 0,
1189
+ className,
1190
+ children,
1191
+ ...props
1192
+ }) {
1193
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1194
+ import_react_aria_components11.Popover,
1195
+ {
1196
+ "data-slot": dataSlot,
1197
+ placement,
1198
+ offset,
1199
+ crossOffset,
1200
+ 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),
1201
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1202
+ import_react_aria_components11.Menu,
1203
+ {
1204
+ className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
1205
+ ...props,
1206
+ children
1207
+ }
1208
+ )
1209
+ }
1210
+ );
1211
+ }
1212
+ function DropdownMenuGroup({
1213
+ ...props
1214
+ }) {
1215
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
1216
+ }
1217
+ function DropdownMenuLabel({
1218
+ className,
1219
+ inset,
1220
+ ...props
1221
+ }) {
1222
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1223
+ import_react_aria_components11.Header,
1224
+ {
1225
+ "data-slot": "dropdown-menu-label",
1226
+ "data-inset": inset,
1227
+ className: cn(
1228
+ "px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7",
1229
+ className
1230
+ ),
1231
+ ...props
1232
+ }
1233
+ );
1234
+ }
1235
+ var dropdownMenuItemVariants = (0, import_class_variance_authority5.cva)(
1236
+ "group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
1237
+ {
1238
+ variants: {
1239
+ selectionMode: {
1240
+ none: "gap-1.5 rounded-md px-1.5 py-1 text-sm focus:bg-muted focus:text-foreground not-data-[variant=destructive]:focus:**:text-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
1241
+ single: "gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm focus:bg-muted focus:text-foreground focus:**:text-foreground data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4",
1242
+ multiple: "gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm focus:bg-muted focus:text-foreground focus:**:text-foreground data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4"
1243
+ }
1244
+ }
1245
+ }
1246
+ );
1247
+ function DropdownMenuItem({
1248
+ className,
1249
+ inset,
1250
+ variant = "default",
1251
+ children,
1252
+ ...props
1253
+ }) {
1254
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1255
+ import_react_aria_components11.MenuItem,
1256
+ {
1257
+ "data-slot": "dropdown-menu-item",
1258
+ "data-inset": inset,
1259
+ "data-variant": variant,
1260
+ textValue: typeof children === "string" ? children : props.textValue,
1261
+ className: (0, import_react_aria_components11.composeRenderProps)(
1262
+ className,
1263
+ (className2, { selectionMode }) => cn(dropdownMenuItemVariants({ selectionMode }), className2)
1264
+ ),
1265
+ ...props,
1266
+ children: (0, import_react_aria_components11.composeRenderProps)(
1267
+ children,
1268
+ (children2, { isSelected, selectionMode }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
1269
+ selectionMode !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1270
+ "span",
1271
+ {
1272
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
1273
+ "data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
1274
+ children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.CheckIcon, {}) : null
1275
+ }
1276
+ ) : null,
1277
+ children2
1278
+ ] })
1279
+ )
1280
+ }
1281
+ );
1282
+ }
1283
+ function DropdownMenuSub({
1284
+ ...props
1285
+ }) {
1286
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
1287
+ }
1288
+ function DropdownMenuSubTrigger({
1289
+ className,
1290
+ inset,
1291
+ children,
1292
+ ...props
1293
+ }) {
1294
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1295
+ import_react_aria_components11.MenuItem,
1296
+ {
1297
+ "data-slot": "dropdown-menu-sub-trigger",
1298
+ "data-inset": inset,
1299
+ textValue: typeof children === "string" ? children : props.textValue,
1300
+ className: cn(
1301
+ "flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-muted focus:text-foreground focus:**:text-foreground data-inset:pl-7 data-open:bg-muted data-open:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
1302
+ className
1303
+ ),
1304
+ ...props,
1305
+ children: (0, import_react_aria_components11.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
1306
+ children2,
1307
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react4.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
1308
+ ] }))
1309
+ }
1310
+ );
1311
+ }
1312
+ function DropdownMenuSubContent({
1313
+ placement = "end top",
1314
+ crossOffset = -3,
1315
+ offset = 0,
1316
+ className,
1317
+ ...props
1318
+ }) {
1319
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1320
+ DropdownMenu,
1321
+ {
1322
+ "data-slot": "dropdown-menu-sub-content",
1323
+ className: cn("w-auto min-w-24 rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg", className),
1324
+ placement,
1325
+ crossOffset,
1326
+ offset,
1327
+ ...props
1328
+ }
1329
+ );
809
1330
  }
810
- function DropdownMenuItem({ className, ...props }) {
811
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components9.MenuItem, { "data-slot": "dropdown-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 });
1331
+ function DropdownMenuSeparator({
1332
+ className,
1333
+ ...props
1334
+ }) {
1335
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1336
+ import_react_aria_components11.Separator,
1337
+ {
1338
+ "data-slot": "dropdown-menu-separator",
1339
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1340
+ ...props
1341
+ }
1342
+ );
812
1343
  }
813
- function DropdownMenuSeparator({ className, ...props }) {
814
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components9.Separator, { "data-slot": "dropdown-menu-separator", className: cn("my-1 h-px bg-border", className), ...props });
1344
+ function DropdownMenuShortcut({
1345
+ className,
1346
+ ...props
1347
+ }) {
1348
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1349
+ "span",
1350
+ {
1351
+ "data-slot": "dropdown-menu-shortcut",
1352
+ className: cn(
1353
+ "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-foreground",
1354
+ className
1355
+ ),
1356
+ ...props
1357
+ }
1358
+ );
815
1359
  }
816
1360
 
817
1361
  // src/ui/empty-state/empty-state.tsx
818
- var import_jsx_runtime17 = require("react/jsx-runtime");
1362
+ var import_class_variance_authority6 = require("class-variance-authority");
1363
+ var import_jsx_runtime18 = require("react/jsx-runtime");
819
1364
  function EmptyState({ className, ...props }) {
820
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { "data-slot": "empty-state", className: cn("flex min-h-44 w-full flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border p-6 text-center", className), ...props });
1365
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1366
+ "div",
1367
+ {
1368
+ "data-slot": "empty-state",
1369
+ className: cn(
1370
+ "flex min-h-44 w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border border-dashed border-border p-6 text-center text-balance",
1371
+ className
1372
+ ),
1373
+ ...props
1374
+ }
1375
+ );
1376
+ }
1377
+ function EmptyStateHeader({ className, ...props }) {
1378
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1379
+ "div",
1380
+ {
1381
+ "data-slot": "empty-state-header",
1382
+ className: cn("flex max-w-sm flex-col items-center gap-2", className),
1383
+ ...props
1384
+ }
1385
+ );
1386
+ }
1387
+ var emptyStateMediaVariants = (0, import_class_variance_authority6.cva)(
1388
+ "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
1389
+ {
1390
+ variants: {
1391
+ variant: {
1392
+ default: "bg-transparent",
1393
+ icon: "size-8 rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
1394
+ }
1395
+ },
1396
+ defaultVariants: { variant: "default" }
1397
+ }
1398
+ );
1399
+ function EmptyStateMedia({
1400
+ className,
1401
+ variant = "default",
1402
+ ...props
1403
+ }) {
1404
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1405
+ "div",
1406
+ {
1407
+ "data-slot": "empty-state-media",
1408
+ "data-variant": variant,
1409
+ className: cn(emptyStateMediaVariants({ variant }), className),
1410
+ ...props
1411
+ }
1412
+ );
821
1413
  }
822
1414
  function EmptyStateTitle({ className, ...props }) {
823
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h3", { "data-slot": "empty-state-title", className: cn("text-sm font-medium text-foreground", className), ...props });
1415
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1416
+ "h3",
1417
+ {
1418
+ "data-slot": "empty-state-title",
1419
+ className: cn("text-sm font-medium tracking-tight text-foreground", className),
1420
+ ...props
1421
+ }
1422
+ );
824
1423
  }
825
1424
  function EmptyStateDescription({ className, ...props }) {
826
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { "data-slot": "empty-state-description", className: cn("max-w-sm text-sm text-muted-foreground", className), ...props });
1425
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1426
+ "p",
1427
+ {
1428
+ "data-slot": "empty-state-description",
1429
+ className: cn(
1430
+ "max-w-sm text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
1431
+ className
1432
+ ),
1433
+ ...props
1434
+ }
1435
+ );
1436
+ }
1437
+ function EmptyStateContent({ className, ...props }) {
1438
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1439
+ "div",
1440
+ {
1441
+ "data-slot": "empty-state-content",
1442
+ className: cn(
1443
+ "flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm",
1444
+ className
1445
+ ),
1446
+ ...props
1447
+ }
1448
+ );
827
1449
  }
828
1450
 
1451
+ // src/ui/field/field.tsx
1452
+ var import_class_variance_authority7 = require("class-variance-authority");
1453
+
829
1454
  // src/ui/label/label.tsx
830
1455
  var import_react6 = require("react");
831
- var import_react_aria_components10 = require("react-aria-components");
832
- var import_jsx_runtime18 = require("react/jsx-runtime");
1456
+ var import_react_aria_components12 = require("react-aria-components");
1457
+ var import_jsx_runtime19 = require("react/jsx-runtime");
833
1458
  var Label2 = (0, import_react6.forwardRef)(function Label3({ className, ...props }, ref) {
834
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components10.Label, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
1459
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components12.Label, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
835
1460
  });
836
1461
 
837
1462
  // src/ui/field/field.tsx
838
- var import_jsx_runtime19 = require("react/jsx-runtime");
839
- function Field({ className, ...props }) {
840
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { "data-slot": "field", className: cn("flex w-full flex-col gap-2", className), ...props });
1463
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1464
+ function FieldSet({ className, ...props }) {
1465
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
1466
+ }
1467
+ function FieldLegend({
1468
+ className,
1469
+ variant = "legend",
1470
+ ...props
1471
+ }) {
1472
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1473
+ "legend",
1474
+ {
1475
+ "data-slot": "field-legend",
1476
+ "data-variant": variant,
1477
+ className: cn(
1478
+ "mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base",
1479
+ className
1480
+ ),
1481
+ ...props
1482
+ }
1483
+ );
1484
+ }
1485
+ function FieldGroup({ className, ...props }) {
1486
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1487
+ "div",
1488
+ {
1489
+ "data-slot": "field-group",
1490
+ className: cn(
1491
+ "group/field-group @container/field-group flex w-full flex-col gap-5",
1492
+ className
1493
+ ),
1494
+ ...props
1495
+ }
1496
+ );
1497
+ }
1498
+ var fieldVariants = (0, import_class_variance_authority7.cva)(
1499
+ "group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
1500
+ {
1501
+ variants: {
1502
+ orientation: {
1503
+ vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
1504
+ horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto",
1505
+ responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:*:data-[slot=field-label]:flex-auto"
1506
+ }
1507
+ },
1508
+ defaultVariants: { orientation: "vertical" }
1509
+ }
1510
+ );
1511
+ function Field({ className, orientation = "vertical", ...props }) {
1512
+ return (
1513
+ // biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
1514
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1515
+ "div",
1516
+ {
1517
+ role: "group",
1518
+ "data-slot": "field",
1519
+ "data-orientation": orientation,
1520
+ className: cn(fieldVariants({ orientation }), className),
1521
+ ...props
1522
+ }
1523
+ )
1524
+ );
1525
+ }
1526
+ function FieldContent({ className, ...props }) {
1527
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1528
+ "div",
1529
+ {
1530
+ "data-slot": "field-content",
1531
+ className: cn("flex flex-1 flex-col gap-0.5 leading-snug", className),
1532
+ ...props
1533
+ }
1534
+ );
841
1535
  }
842
1536
  function FieldLabel({ className, ...props }) {
843
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Label2, { "data-slot": "field-label", className: cn("text-foreground", className), ...props });
1537
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1538
+ Label2,
1539
+ {
1540
+ "data-slot": "field-label",
1541
+ className: cn(
1542
+ "flex w-fit gap-2 leading-snug text-foreground group-data-[disabled=true]/field:opacity-50",
1543
+ className
1544
+ ),
1545
+ ...props
1546
+ }
1547
+ );
1548
+ }
1549
+ function FieldTitle({ className, ...props }) {
1550
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1551
+ "div",
1552
+ {
1553
+ "data-slot": "field-title",
1554
+ className: cn("flex w-fit items-center gap-2 text-sm font-medium", className),
1555
+ ...props
1556
+ }
1557
+ );
844
1558
  }
845
1559
  function FieldDescription({ className, ...props }) {
846
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { "data-slot": "field-description", className: cn("text-sm text-muted-foreground", className), ...props });
1560
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1561
+ "p",
1562
+ {
1563
+ "data-slot": "field-description",
1564
+ className: cn(
1565
+ "text-left text-sm leading-normal text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
1566
+ className
1567
+ ),
1568
+ ...props
1569
+ }
1570
+ );
1571
+ }
1572
+ function FieldSeparator({ className, children, ...props }) {
1573
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1574
+ "div",
1575
+ {
1576
+ "data-slot": "field-separator",
1577
+ "data-content": Boolean(children) || void 0,
1578
+ className: cn("relative -my-2 h-5 text-sm", className),
1579
+ ...props,
1580
+ children: [
1581
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
1582
+ children ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1583
+ "span",
1584
+ {
1585
+ "data-slot": "field-separator-content",
1586
+ className: "relative mx-auto block w-fit bg-background px-2 text-muted-foreground",
1587
+ children
1588
+ }
1589
+ ) : null
1590
+ ]
1591
+ }
1592
+ );
847
1593
  }
848
- function FieldError2({ className, children, ...props }) {
849
- if (!children) return null;
850
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { role: "alert", "data-slot": "field-error", className: cn("text-sm text-destructive", className), ...props, children });
1594
+ function FieldError2({ className, children, errors, ...props }) {
1595
+ const messages = [...new Set(errors?.flatMap((error) => error?.message ?? []) ?? [])];
1596
+ const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("li", { children: message }, message)) }) : null);
1597
+ if (!content) return null;
1598
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1599
+ "div",
1600
+ {
1601
+ role: "alert",
1602
+ "data-slot": "field-error",
1603
+ className: cn("text-sm text-destructive", className),
1604
+ ...props,
1605
+ children: content
1606
+ }
1607
+ );
851
1608
  }
852
1609
 
853
1610
  // src/ui/form-feedback/form-feedback.tsx
854
1611
  var import_react7 = require("react");
855
- var import_lucide_react4 = require("lucide-react");
856
- var import_jsx_runtime20 = require("react/jsx-runtime");
1612
+ var import_lucide_react5 = require("lucide-react");
1613
+ var import_jsx_runtime21 = require("react/jsx-runtime");
857
1614
  function useFormFeedback(options) {
858
1615
  const resetMs = options?.successResetMs ?? 2500;
859
1616
  const [state, setState] = (0, import_react7.useState)({ status: "idle" });
@@ -883,50 +1640,103 @@ function useFormFeedback(options) {
883
1640
  return { state, pending: state.status === "pending", setPending, setSuccess, setError, reset };
884
1641
  }
885
1642
  function FormFeedback({ state, className, pendingLabel = "Guardando\u2026", successLabel = "Guardado" }) {
886
- if (state.status === "idle") return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
1643
+ if (state.status === "idle") return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
887
1644
  const error = state.status === "error";
888
1645
  const success = state.status === "success";
889
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("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: [
890
- state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react4.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
891
- success && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react4.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
892
- error && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react4.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
893
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
1646
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("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: [
1647
+ state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react5.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
1648
+ success && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react5.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
1649
+ error && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react5.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
1650
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
894
1651
  ] });
895
1652
  }
896
1653
 
897
1654
  // src/ui/form-row/form-row.tsx
898
- var import_jsx_runtime21 = require("react/jsx-runtime");
1655
+ var import_jsx_runtime22 = require("react/jsx-runtime");
899
1656
  function FormRow({ label, htmlFor, required, hint, error, className, children }) {
900
1657
  const hintId = hint ? `${htmlFor}-hint` : void 0;
901
1658
  const errorId = error ? `${htmlFor}-error` : void 0;
902
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
903
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("label", { htmlFor, className: "text-sm font-medium text-foreground", children: [
1659
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
1660
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("label", { htmlFor, className: "text-sm font-medium text-foreground", children: [
904
1661
  label,
905
- required && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
906
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" }),
907
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "sr-only", children: " (obligatorio)" })
1662
+ required && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
1663
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" }),
1664
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "sr-only", children: " (obligatorio)" })
908
1665
  ] })
909
1666
  ] }),
910
1667
  children,
911
- hint && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { id: hintId, className: "text-xs text-muted-foreground", children: hint }),
912
- error && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive", children: error })
1668
+ hint && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { id: hintId, className: "text-xs text-muted-foreground", children: hint }),
1669
+ error && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { id: errorId, role: "alert", className: "text-xs font-medium text-destructive", children: error })
913
1670
  ] });
914
1671
  }
915
1672
 
916
1673
  // src/ui/icon-button/icon-button.tsx
917
- var import_react_aria_components12 = require("react-aria-components");
1674
+ var import_react_aria_components14 = require("react-aria-components");
918
1675
 
919
1676
  // src/ui/tooltip/tooltip.tsx
920
- var import_react_aria_components11 = require("react-aria-components");
921
- var import_jsx_runtime22 = require("react/jsx-runtime");
922
- var TooltipTrigger = import_react_aria_components11.TooltipTrigger;
923
- function Tooltip({ className, ...props }) {
924
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components11.Tooltip, { "data-slot": "tooltip", offset: 6, className: cn("max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
1677
+ var React2 = __toESM(require("react"), 1);
1678
+ var import_react_aria_components13 = require("react-aria-components");
1679
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1680
+ function TooltipTrigger({
1681
+ delay = 0,
1682
+ children,
1683
+ ...props
1684
+ }) {
1685
+ const [trigger, tooltip] = React2.Children.toArray(children);
1686
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1687
+ import_react_aria_components13.TooltipTrigger,
1688
+ {
1689
+ "data-slot": "tooltip-trigger",
1690
+ delay,
1691
+ ...props,
1692
+ children: [
1693
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components13.Focusable, { children: trigger }),
1694
+ tooltip
1695
+ ]
1696
+ }
1697
+ );
1698
+ }
1699
+ function Tooltip({
1700
+ className,
1701
+ placement = "top",
1702
+ offset = 4,
1703
+ crossOffset = 0,
1704
+ children,
1705
+ ...props
1706
+ }) {
1707
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1708
+ import_react_aria_components13.Tooltip,
1709
+ {
1710
+ "data-slot": "tooltip-content",
1711
+ placement,
1712
+ offset,
1713
+ crossOffset,
1714
+ className: cn(
1715
+ "z-50 inline-flex w-fit max-w-xs origin-(--trigger-anchor-point) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background shadow-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm",
1716
+ className
1717
+ ),
1718
+ ...props,
1719
+ children: [
1720
+ children,
1721
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1722
+ import_react_aria_components13.OverlayArrow,
1723
+ {
1724
+ className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs bg-foreground fill-foreground",
1725
+ style: ({ placement: placement2, defaultStyle }) => ({
1726
+ ...defaultStyle,
1727
+ rotate: "0deg",
1728
+ translate: "0 0",
1729
+ transform: placement2 === "bottom" ? "translate(-50%, calc(50% + 2px)) rotate(45deg)" : placement2 === "top" ? "translate(-50%, calc(-50% - 2px)) rotate(45deg)" : placement2 === "left" ? "translate(calc(-50% - 2px), -50%) rotate(45deg)" : "translate(calc(50% + 2px), -50%) rotate(45deg)"
1730
+ })
1731
+ }
1732
+ )
1733
+ ]
1734
+ }
1735
+ );
925
1736
  }
926
- var TooltipContent = Tooltip;
927
1737
 
928
1738
  // src/ui/icon-button/icon-button.tsx
929
- var import_jsx_runtime23 = require("react/jsx-runtime");
1739
+ var import_jsx_runtime24 = require("react/jsx-runtime");
930
1740
  function IconButton({
931
1741
  label,
932
1742
  children,
@@ -939,9 +1749,9 @@ function IconButton({
939
1749
  buttonVariants({ variant, size: "icon" }),
940
1750
  className
941
1751
  );
942
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(TooltipTrigger, { children: [
943
- href ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
944
- import_react_aria_components12.Link,
1752
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(TooltipTrigger, { children: [
1753
+ href ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1754
+ import_react_aria_components14.Link,
945
1755
  {
946
1756
  "data-slot": "icon-button",
947
1757
  "aria-label": label,
@@ -949,8 +1759,8 @@ function IconButton({
949
1759
  className: linkClassName,
950
1760
  children
951
1761
  }
952
- ) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
953
- Button2,
1762
+ ) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1763
+ Button,
954
1764
  {
955
1765
  "data-slot": "icon-button",
956
1766
  "aria-label": label,
@@ -961,137 +1771,366 @@ function IconButton({
961
1771
  children
962
1772
  }
963
1773
  ),
964
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Tooltip, { children: label })
1774
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Tooltip, { children: label })
965
1775
  ] });
966
1776
  }
967
1777
 
968
- // src/ui/input-group/input-group.tsx
969
- var import_class_variance_authority3 = require("class-variance-authority");
970
-
971
1778
  // src/ui/input/input.tsx
972
1779
  var import_react8 = require("react");
973
- var import_react_aria_components13 = require("react-aria-components");
974
- var import_jsx_runtime24 = require("react/jsx-runtime");
1780
+ var import_react_aria_components15 = require("react-aria-components");
1781
+ var import_jsx_runtime25 = require("react/jsx-runtime");
975
1782
  var InputImpl = (0, import_react8.forwardRef)(function Input2({ className, type, ...props }, ref) {
976
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components13.Input, { 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 });
1783
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components15.Input, { 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 });
977
1784
  });
978
1785
  var Input3 = InputImpl;
979
1786
 
1787
+ // src/ui/input-group/input-group.tsx
1788
+ var import_class_variance_authority8 = require("class-variance-authority");
1789
+
980
1790
  // src/ui/textarea/textarea.tsx
981
1791
  var import_react9 = require("react");
982
- var import_react_aria_components14 = require("react-aria-components");
983
- var import_jsx_runtime25 = require("react/jsx-runtime");
1792
+ var import_react_aria_components16 = require("react-aria-components");
1793
+ var import_jsx_runtime26 = require("react/jsx-runtime");
984
1794
  var TextareaImpl = (0, import_react9.forwardRef)(function Textarea({ className, ...props }, ref) {
985
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components14.TextArea, { 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 });
1795
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components16.TextArea, { 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 });
986
1796
  });
987
1797
  var Textarea2 = TextareaImpl;
988
1798
 
989
1799
  // src/ui/input-group/input-group.tsx
990
- var import_jsx_runtime26 = require("react/jsx-runtime");
1800
+ var import_jsx_runtime27 = (
1801
+ // biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
1802
+ require("react/jsx-runtime")
1803
+ );
991
1804
  function InputGroup({ className, ...props }) {
992
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { role: "group", "data-slot": "input-group", className: cn("group/input-group flex min-h-8 w-full min-w-0 items-center rounded-lg border border-border transition-colors has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive", className), ...props });
1805
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1806
+ "div",
1807
+ {
1808
+ role: "group",
1809
+ "data-slot": "input-group",
1810
+ className: cn(
1811
+ "group/input-group relative flex min-h-8 w-full min-w-0 items-center rounded-lg border border-border transition-colors outline-none has-disabled:bg-muted/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align^=block]]:h-auto has-[>[data-align^=block]]:flex-col",
1812
+ className
1813
+ ),
1814
+ ...props
1815
+ }
1816
+ );
993
1817
  }
994
- var addonVariants = (0, import_class_variance_authority3.cva)("flex items-center justify-center gap-2 px-2 text-sm text-muted-foreground", { variants: { align: { "inline-start": "order-first", "inline-end": "order-last", "block-start": "w-full justify-start border-b py-2", "block-end": "w-full justify-start border-t py-2" } }, defaultVariants: { align: "inline-start" } });
995
- function InputGroupAddon({ className, align, ...props }) {
996
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { "data-slot": "input-group-addon", "data-align": align, className: cn(addonVariants({ align }), className), ...props });
1818
+ var inputGroupAddonVariants = (0, import_class_variance_authority8.cva)(
1819
+ "flex cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none [&_svg:not([class*='size-'])]:size-4",
1820
+ {
1821
+ variants: {
1822
+ align: {
1823
+ "inline-start": "order-first pl-2",
1824
+ "inline-end": "order-last pr-2",
1825
+ "block-start": "order-first w-full justify-start px-2.5 pt-2",
1826
+ "block-end": "order-last w-full justify-start px-2.5 pb-2"
1827
+ }
1828
+ },
1829
+ defaultVariants: { align: "inline-start" }
1830
+ }
1831
+ );
1832
+ function InputGroupAddon({
1833
+ className,
1834
+ align = "inline-start",
1835
+ onClick,
1836
+ ...props
1837
+ }) {
1838
+ return (
1839
+ // biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
1840
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1841
+ "div",
1842
+ {
1843
+ role: "group",
1844
+ "data-slot": "input-group-addon",
1845
+ "data-align": align,
1846
+ className: cn(inputGroupAddonVariants({ align }), className),
1847
+ onClick: (event) => {
1848
+ onClick?.(event);
1849
+ if (!event.defaultPrevented && !event.target.closest("button"))
1850
+ event.currentTarget.parentElement?.querySelector("input, textarea")?.focus();
1851
+ },
1852
+ ...props
1853
+ }
1854
+ )
1855
+ );
997
1856
  }
998
- function InputGroupButton({ className, ...props }) {
999
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Button2, { "data-slot": "input-group-button", size: "icon", variant: "ghost", className: cn("size-7 shrink-0", className), ...props });
1857
+ var inputGroupButtonVariants = (0, import_class_variance_authority8.cva)("shrink-0 shadow-none", {
1858
+ variants: {
1859
+ size: { xs: "h-6 px-1.5 text-xs", sm: "h-7 px-2", "icon-xs": "size-6", "icon-sm": "size-7" }
1860
+ },
1861
+ defaultVariants: { size: "xs" }
1862
+ });
1863
+ function InputGroupButton({
1864
+ className,
1865
+ type = "button",
1866
+ variant = "ghost",
1867
+ size = "xs",
1868
+ ...props
1869
+ }) {
1870
+ const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
1871
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1872
+ Button,
1873
+ {
1874
+ "data-slot": "input-group-button",
1875
+ type,
1876
+ size: buttonSize,
1877
+ variant,
1878
+ className: cn(inputGroupButtonVariants({ size }), className),
1879
+ ...props
1880
+ }
1881
+ );
1000
1882
  }
1001
1883
  function InputGroupText({ className, ...props }) {
1002
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { "data-slot": "input-group-text", className: cn("px-2 text-sm text-muted-foreground", className), ...props });
1884
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1885
+ "span",
1886
+ {
1887
+ "data-slot": "input-group-text",
1888
+ className: cn(
1889
+ "flex items-center gap-2 text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4",
1890
+ className
1891
+ ),
1892
+ ...props
1893
+ }
1894
+ );
1003
1895
  }
1004
1896
  function InputGroupInput({ className, ...props }) {
1005
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Input3, { "data-slot": "input-group-control", className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0", className), ...props });
1897
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1898
+ Input3,
1899
+ {
1900
+ "data-slot": "input-group-control",
1901
+ className: cn(
1902
+ "flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0",
1903
+ className
1904
+ ),
1905
+ ...props
1906
+ }
1907
+ );
1006
1908
  }
1007
1909
  function InputGroupTextarea({ className, ...props }) {
1008
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Textarea2, { "data-slot": "input-group-control", className: cn("flex-1 resize-none rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0", className), ...props });
1910
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1911
+ Textarea2,
1912
+ {
1913
+ "data-slot": "input-group-control",
1914
+ className: cn(
1915
+ "flex-1 resize-none rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0",
1916
+ className
1917
+ ),
1918
+ ...props
1919
+ }
1920
+ );
1009
1921
  }
1010
1922
 
1011
1923
  // src/ui/kbd/kbd.tsx
1012
- var import_jsx_runtime27 = require("react/jsx-runtime");
1924
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1013
1925
  function Kbd({ className, ...props }) {
1014
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("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 });
1926
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("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 });
1015
1927
  }
1016
1928
  function KbdGroup({ className, ...props }) {
1017
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
1929
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { "data-slot": "kbd-group", className: cn("inline-flex items-center gap-1", className), ...props });
1018
1930
  }
1019
1931
 
1020
1932
  // src/ui/loading-overlay/loading-overlay.tsx
1021
- var import_lucide_react5 = require("lucide-react");
1022
- var import_jsx_runtime28 = require("react/jsx-runtime");
1933
+ var import_lucide_react6 = require("lucide-react");
1934
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1023
1935
  function LoadingOverlay({ label = "Cargando", className, ...props }) {
1024
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("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__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
1025
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react5.LoaderCircle, { className: "animate-spin", "aria-hidden": "true" }),
1026
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { children: label })
1936
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("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__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
1937
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react6.LoaderCircle, { className: "animate-spin", "aria-hidden": "true" }),
1938
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: label })
1027
1939
  ] }) });
1028
1940
  }
1029
1941
 
1030
1942
  // src/ui/menu/menu.tsx
1031
- var import_react_aria_components15 = require("react-aria-components");
1032
- var import_jsx_runtime29 = require("react/jsx-runtime");
1033
- var MenuTrigger = import_react_aria_components15.MenuTrigger;
1943
+ var import_react_aria_components17 = require("react-aria-components");
1944
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1945
+ var MenuTrigger = import_react_aria_components17.MenuTrigger;
1034
1946
  function MenuContent({ className, ...props }) {
1035
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components15.Popover, { "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 });
1947
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_aria_components17.Popover, { "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 });
1036
1948
  }
1037
1949
  function Menu({ className, ...props }) {
1038
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components15.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
1950
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_aria_components17.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
1039
1951
  }
1040
1952
  function MenuItem({ className, children, ...props }) {
1041
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components15.MenuItem, { "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 });
1953
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_aria_components17.MenuItem, { "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 });
1042
1954
  }
1043
1955
 
1956
+ // src/ui/otp-input/otp-input.tsx
1957
+ var import_react10 = require("react");
1958
+ var import_react_aria_components18 = require("react-aria-components");
1959
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1960
+ function normalizeOtp(value, length) {
1961
+ return value.replace(/[^0-9]/g, "").slice(0, length);
1962
+ }
1963
+ var OtpInputImpl = (0, import_react10.forwardRef)(function OtpInput({
1964
+ length = 6,
1965
+ value,
1966
+ defaultValue = "",
1967
+ onChange,
1968
+ onComplete,
1969
+ className,
1970
+ inputClassName,
1971
+ disabled,
1972
+ onBlur,
1973
+ onFocus,
1974
+ onKeyUp,
1975
+ onSelect,
1976
+ ...props
1977
+ }, forwardedRef) {
1978
+ const slotCount = Math.max(1, Math.floor(length));
1979
+ const controlled = value !== void 0;
1980
+ const [internalValue, setInternalValue] = (0, import_react10.useState)(() => normalizeOtp(defaultValue, slotCount));
1981
+ const code = normalizeOtp(controlled ? value : internalValue, slotCount);
1982
+ const slots = Array.from({ length: slotCount }, (_, index) => `otp-slot-${index + 1}`);
1983
+ const inputRef = (0, import_react10.useRef)(null);
1984
+ const [focused, setFocused] = (0, import_react10.useState)(false);
1985
+ const [selectionStart, setSelectionStart] = (0, import_react10.useState)(0);
1986
+ const invalid = props["aria-invalid"] === true || props["aria-invalid"] === "true";
1987
+ const activeIndex = code.length === slotCount ? slotCount - 1 : Math.min(selectionStart, code.length, slotCount - 1);
1988
+ (0, import_react10.useImperativeHandle)(forwardedRef, () => inputRef.current);
1989
+ function updateSelection(input) {
1990
+ setSelectionStart(input.selectionStart ?? code.length);
1991
+ }
1992
+ function commitValue(rawValue) {
1993
+ const nextValue = normalizeOtp(rawValue, slotCount);
1994
+ if (!controlled) setInternalValue(nextValue);
1995
+ if (nextValue === code) return;
1996
+ onChange?.(nextValue);
1997
+ if (nextValue.length === slotCount) onComplete?.(nextValue);
1998
+ }
1999
+ function handlePointerDown(event) {
2000
+ if (disabled) return;
2001
+ event.preventDefault();
2002
+ const input = inputRef.current;
2003
+ if (!input) return;
2004
+ const bounds = event.currentTarget.getBoundingClientRect();
2005
+ const offset = bounds.width > 0 ? (event.clientX - bounds.left) / bounds.width : 1;
2006
+ const position = Math.min(Math.max(Math.floor(offset * slotCount), 0), code.length);
2007
+ input.focus();
2008
+ input.setSelectionRange(position, position);
2009
+ setSelectionStart(position);
2010
+ }
2011
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
2012
+ "div",
2013
+ {
2014
+ "data-slot": "otp-input",
2015
+ "data-disabled": disabled || void 0,
2016
+ "data-invalid": invalid || void 0,
2017
+ className: cn("relative inline-grid max-w-full gap-2", className),
2018
+ style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
2019
+ onPointerDown: handlePointerDown,
2020
+ children: [
2021
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2022
+ import_react_aria_components18.Input,
2023
+ {
2024
+ ...props,
2025
+ ref: inputRef,
2026
+ type: "text",
2027
+ inputMode: props.inputMode ?? "numeric",
2028
+ autoComplete: props.autoComplete ?? "one-time-code",
2029
+ pattern: props.pattern ?? "[0-9]*",
2030
+ maxLength: slotCount,
2031
+ value: code,
2032
+ disabled,
2033
+ "data-slot": "otp-input-control",
2034
+ className: cn(
2035
+ "absolute inset-0 z-10 size-full cursor-text appearance-none rounded-lg border-0 bg-transparent text-base text-transparent caret-transparent outline-none selection:bg-transparent disabled:cursor-not-allowed",
2036
+ inputClassName
2037
+ ),
2038
+ onChange: (event) => {
2039
+ commitValue(event.currentTarget.value);
2040
+ updateSelection(event.currentTarget);
2041
+ },
2042
+ onFocus: (event) => {
2043
+ setFocused(true);
2044
+ updateSelection(event.currentTarget);
2045
+ onFocus?.(event);
2046
+ },
2047
+ onBlur: (event) => {
2048
+ setFocused(false);
2049
+ onBlur?.(event);
2050
+ },
2051
+ onSelect: (event) => {
2052
+ updateSelection(event.currentTarget);
2053
+ onSelect?.(event);
2054
+ },
2055
+ onKeyUp: (event) => {
2056
+ updateSelection(event.currentTarget);
2057
+ onKeyUp?.(event);
2058
+ }
2059
+ }
2060
+ ),
2061
+ slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2062
+ "span",
2063
+ {
2064
+ "aria-hidden": "true",
2065
+ "data-slot": "otp-input-slot",
2066
+ "data-active": focused && index === activeIndex || void 0,
2067
+ className: cn(
2068
+ "pointer-events-none grid size-10 place-items-center rounded-lg border border-border bg-background text-base font-medium tabular-nums text-foreground transition-[border-color,box-shadow]",
2069
+ focused && index === activeIndex && "border-ring ring-3 ring-ring/50",
2070
+ invalid && "border-destructive",
2071
+ disabled && "opacity-50"
2072
+ ),
2073
+ children: code[index] ?? ""
2074
+ },
2075
+ slot
2076
+ ))
2077
+ ]
2078
+ }
2079
+ );
2080
+ });
2081
+ var OtpInput2 = OtpInputImpl;
2082
+
1044
2083
  // src/ui/page-header/page-header.tsx
1045
- var import_jsx_runtime30 = require("react/jsx-runtime");
2084
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1046
2085
  function PageHeader({ className, ...props }) {
1047
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("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 });
2086
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("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 });
1048
2087
  }
1049
2088
  function PageHeaderHeading({ className, ...props }) {
1050
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
2089
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
1051
2090
  }
1052
2091
  function PageHeaderTitle({ className, ...props }) {
1053
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("h1", { "data-slot": "page-header-title", className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className), ...props });
2092
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("h1", { "data-slot": "page-header-title", className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className), ...props });
1054
2093
  }
1055
2094
  function PageHeaderDescription({ className, ...props }) {
1056
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
2095
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { "data-slot": "page-header-description", className: cn("mt-1 text-sm text-muted-foreground", className), ...props });
1057
2096
  }
1058
2097
  function PageHeaderActions({ className, ...props }) {
1059
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
2098
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { "data-slot": "page-header-actions", className: cn("flex shrink-0 items-center gap-2", className), ...props });
1060
2099
  }
1061
2100
 
1062
2101
  // src/ui/pagination/pagination.tsx
1063
- var import_lucide_react6 = require("lucide-react");
1064
- var import_jsx_runtime31 = require("react/jsx-runtime");
2102
+ var import_lucide_react7 = require("lucide-react");
2103
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1065
2104
  function Pagination({ page, pageCount, onPageChange, className }) {
1066
2105
  const pages = Array.from({ length: pageCount }, (_, index) => index + 1);
1067
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("nav", { "aria-label": "Paginaci\xF3n", className: cn("flex items-center justify-between gap-4", className), children: [
1068
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
2106
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("nav", { "aria-label": "Paginaci\xF3n", className: cn("flex items-center justify-between gap-4", className), children: [
2107
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
1069
2108
  "P\xE1gina ",
1070
2109
  page,
1071
2110
  " de ",
1072
2111
  pageCount
1073
2112
  ] }),
1074
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center gap-1", children: [
1075
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button2, { "aria-label": "P\xE1gina anterior", isDisabled: page <= 1, onPress: () => onPageChange(page - 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react6.ChevronLeft, {}) }),
1076
- pages.map((item) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button2, { "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)),
1077
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button2, { "aria-label": "P\xE1gina siguiente", isDisabled: page >= pageCount, onPress: () => onPageChange(page + 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react6.ChevronRight, {}) })
2113
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-1", children: [
2114
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Button, { "aria-label": "P\xE1gina anterior", isDisabled: page <= 1, onPress: () => onPageChange(page - 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react7.ChevronLeft, {}) }),
2115
+ pages.map((item) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(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)),
2116
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Button, { "aria-label": "P\xE1gina siguiente", isDisabled: page >= pageCount, onPress: () => onPageChange(page + 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react7.ChevronRight, {}) })
1078
2117
  ] })
1079
2118
  ] });
1080
2119
  }
1081
2120
 
1082
2121
  // src/ui/popover/popover.tsx
1083
- var import_react_aria_components16 = require("react-aria-components");
1084
- var import_jsx_runtime32 = require("react/jsx-runtime");
1085
- var PopoverTrigger = import_react_aria_components16.DialogTrigger;
2122
+ var import_react_aria_components19 = require("react-aria-components");
2123
+ var import_jsx_runtime34 = require("react/jsx-runtime");
2124
+ var PopoverTrigger = import_react_aria_components19.DialogTrigger;
1086
2125
  function Popover4({ className, ...props }) {
1087
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_aria_components16.Popover, { "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 });
2126
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_aria_components19.Popover, { "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 });
1088
2127
  }
1089
2128
  var PopoverContent = Popover4;
1090
2129
 
1091
2130
  // src/ui/quantity-input/quantity-input.tsx
1092
- var import_lucide_react7 = require("lucide-react");
1093
- var import_react_aria_components17 = require("react-aria-components");
1094
- var import_jsx_runtime33 = require("react/jsx-runtime");
2131
+ var import_lucide_react8 = require("lucide-react");
2132
+ var import_react_aria_components20 = require("react-aria-components");
2133
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1095
2134
  function QuantityInput({
1096
2135
  className,
1097
2136
  inputClassName,
@@ -1101,23 +2140,23 @@ function QuantityInput({
1101
2140
  step = 1,
1102
2141
  ...props
1103
2142
  }) {
1104
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1105
- import_react_aria_components17.NumberField,
2143
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2144
+ import_react_aria_components20.NumberField,
1106
2145
  {
1107
2146
  ...props,
1108
2147
  minValue,
1109
2148
  step,
1110
2149
  "data-slot": "quantity-input",
1111
2150
  className: cn("group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50", className),
1112
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1113
- import_react_aria_components17.Group,
2151
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
2152
+ import_react_aria_components20.Group,
1114
2153
  {
1115
2154
  "data-slot": "quantity-input-group",
1116
2155
  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",
1117
2156
  children: [
1118
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components17.Button, { 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__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react7.Minus, { "aria-hidden": "true", className: "size-4" }) }),
1119
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components17.Input, { "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) }),
1120
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components17.Button, { 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__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react7.Plus, { "aria-hidden": "true", className: "size-4" }) })
2157
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components20.Button, { 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__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react8.Minus, { "aria-hidden": "true", className: "size-4" }) }),
2158
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components20.Input, { "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) }),
2159
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components20.Button, { 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__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react8.Plus, { "aria-hidden": "true", className: "size-4" }) })
1121
2160
  ]
1122
2161
  }
1123
2162
  )
@@ -1126,56 +2165,176 @@ function QuantityInput({
1126
2165
  }
1127
2166
 
1128
2167
  // src/ui/search-field/search-field.tsx
1129
- var import_react_aria_components18 = require("react-aria-components");
1130
- var import_lucide_react8 = require("lucide-react");
1131
- var import_jsx_runtime34 = require("react/jsx-runtime");
1132
- var SearchField = import_react_aria_components18.SearchField;
2168
+ var import_react_aria_components21 = require("react-aria-components");
2169
+ var import_lucide_react9 = require("lucide-react");
2170
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2171
+ var SearchField = import_react_aria_components21.SearchField;
1133
2172
  function SearchInput({ className, ...props }) {
1134
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_aria_components18.Input, { "data-slot": "search-input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
2173
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components21.Input, { "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 });
1135
2174
  }
1136
- function SearchClearButton({ className, children = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react8.X, { "aria-hidden": "true", className: "size-4" }), ...props }) {
1137
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_aria_components18.Button, { 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 });
2175
+ function SearchClearButton({ className, children = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react9.X, { "aria-hidden": "true", className: "size-4" }), ...props }) {
2176
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components21.Button, { 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 });
1138
2177
  }
1139
2178
 
1140
2179
  // src/ui/select/select.tsx
1141
- var import_react_aria_components19 = require("react-aria-components");
1142
- var import_lucide_react9 = require("lucide-react");
1143
- var import_jsx_runtime35 = require("react/jsx-runtime");
1144
- var Select = import_react_aria_components19.Select;
2180
+ var import_react_aria_components22 = require("react-aria-components");
2181
+ var import_lucide_react10 = require("lucide-react");
2182
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2183
+ var Select = import_react_aria_components22.Select;
1145
2184
  function SelectTrigger({ className, children, ...props }) {
1146
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components19.Button, { "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__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
2185
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components22.Button, { "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__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
1147
2186
  typeof children === "function" ? children(state) : children,
1148
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react9.ChevronDown, { "aria-hidden": "true", className: "ml-auto size-4 text-muted-foreground transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none" })
2187
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.ChevronDown, { "aria-hidden": "true", className: "ml-auto size-4 text-muted-foreground transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none" })
1149
2188
  ] }) });
1150
2189
  }
1151
2190
  function SelectValue({ className, ...props }) {
1152
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components19.SelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
2191
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components22.SelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
1153
2192
  }
1154
2193
  function SelectContent({ className, ...props }) {
1155
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components19.Popover, { "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 });
2194
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components22.Popover, { "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 });
1156
2195
  }
1157
2196
  function SelectList({ className, ...props }) {
1158
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components19.ListBox, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
2197
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components22.ListBox, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
1159
2198
  }
1160
2199
  function SelectItem({ className, children, ...props }) {
1161
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components19.ListBoxItem, { "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 });
2200
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components22.ListBoxItem, { "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 });
1162
2201
  }
1163
2202
 
1164
- // src/ui/separator/separator.tsx
1165
- var import_react_aria_components20 = require("react-aria-components");
1166
- var import_jsx_runtime36 = require("react/jsx-runtime");
1167
- function Separator({ className, orientation = "horizontal", ...props }) {
1168
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components20.Separator, { "data-slot": "separator", orientation, className: cn("shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch", className), ...props });
2203
+ // src/ui/sheet/sheet.tsx
2204
+ var import_lucide_react11 = require("lucide-react");
2205
+ var import_react_aria_components23 = require("react-aria-components");
2206
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2207
+ function SheetTrigger({ ...props }) {
2208
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components23.DialogTrigger, { "data-slot": "sheet-trigger", ...props });
2209
+ }
2210
+ function SheetClose({ className, variant = "outline", size = "default", ...props }) {
2211
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2212
+ Button,
2213
+ {
2214
+ slot: "close",
2215
+ "data-slot": "sheet-close",
2216
+ variant,
2217
+ size,
2218
+ className: cn(className),
2219
+ ...props
2220
+ }
2221
+ );
2222
+ }
2223
+ function SheetOverlay({
2224
+ className,
2225
+ children,
2226
+ ...props
2227
+ }) {
2228
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2229
+ import_react_aria_components23.ModalOverlay,
2230
+ {
2231
+ "data-slot": "sheet-overlay",
2232
+ isDismissable: true,
2233
+ className: cn(
2234
+ "fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-entering:opacity-0 data-exiting:opacity-0 supports-backdrop-filter:backdrop-blur-xs",
2235
+ className
2236
+ ),
2237
+ ...props,
2238
+ children
2239
+ }
2240
+ );
2241
+ }
2242
+ function Sheet({
2243
+ className,
2244
+ children,
2245
+ side = "right",
2246
+ showCloseButton = true,
2247
+ ...props
2248
+ }) {
2249
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SheetOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2250
+ import_react_aria_components23.Modal,
2251
+ {
2252
+ "data-slot": "sheet-content",
2253
+ "data-side": side,
2254
+ className: cn(
2255
+ "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",
2256
+ className
2257
+ ),
2258
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2259
+ import_react_aria_components23.Dialog,
2260
+ {
2261
+ "data-slot": "sheet",
2262
+ className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
2263
+ children: [
2264
+ children,
2265
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
2266
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react11.XIcon, {}),
2267
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "sr-only", children: "Cerrar" })
2268
+ ] })
2269
+ ]
2270
+ }
2271
+ )
2272
+ }
2273
+ ) });
2274
+ }
2275
+ function SheetContent({
2276
+ className,
2277
+ children,
2278
+ side = "right",
2279
+ showCloseButton = true,
2280
+ ...props
2281
+ }) {
2282
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Sheet, { className, side, showCloseButton, ...props, children });
2283
+ }
2284
+ function SheetHeader({ className, ...props }) {
2285
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2286
+ "div",
2287
+ {
2288
+ "data-slot": "sheet-header",
2289
+ className: cn("flex flex-col gap-0.5 p-4", className),
2290
+ ...props
2291
+ }
2292
+ );
2293
+ }
2294
+ function SheetFooter({ className, ...props }) {
2295
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2296
+ "div",
2297
+ {
2298
+ "data-slot": "sheet-footer",
2299
+ className: cn("mt-auto flex flex-col gap-2 p-4", className),
2300
+ ...props
2301
+ }
2302
+ );
2303
+ }
2304
+ function SheetTitle({ className, ...props }) {
2305
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2306
+ import_react_aria_components23.Heading,
2307
+ {
2308
+ slot: "title",
2309
+ "data-slot": "sheet-title",
2310
+ className: cn("text-base font-medium text-foreground", className),
2311
+ ...props
2312
+ }
2313
+ );
2314
+ }
2315
+ function SheetDescription({
2316
+ className,
2317
+ ...props
2318
+ }) {
2319
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2320
+ import_react_aria_components23.Text,
2321
+ {
2322
+ slot: "description",
2323
+ "data-slot": "sheet-description",
2324
+ className: cn("text-sm text-muted-foreground", className),
2325
+ ...props
2326
+ }
2327
+ );
1169
2328
  }
1170
2329
 
1171
2330
  // src/ui/sidebar/sidebar.tsx
1172
- var import_lucide_react10 = require("lucide-react");
1173
- var import_react10 = require("react");
1174
- var import_react_aria_components21 = require("react-aria-components");
1175
- var import_jsx_runtime37 = require("react/jsx-runtime");
1176
- var SidebarContext = (0, import_react10.createContext)(null);
2331
+ var import_lucide_react12 = require("lucide-react");
2332
+ var import_react11 = require("react");
2333
+ var import_react_aria_components24 = require("react-aria-components");
2334
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2335
+ var SidebarContext = (0, import_react11.createContext)(null);
1177
2336
  function useSidebar() {
1178
- const context = (0, import_react10.useContext)(SidebarContext);
2337
+ const context = (0, import_react11.useContext)(SidebarContext);
1179
2338
  if (!context)
1180
2339
  throw new Error("useSidebar must be used inside SidebarProvider");
1181
2340
  return context;
@@ -1184,8 +2343,8 @@ function SidebarProvider({
1184
2343
  defaultCollapsed = false,
1185
2344
  children
1186
2345
  }) {
1187
- const [collapsed, setCollapsed] = (0, import_react10.useState)(defaultCollapsed);
1188
- const value = (0, import_react10.useMemo)(
2346
+ const [collapsed, setCollapsed] = (0, import_react11.useState)(defaultCollapsed);
2347
+ const value = (0, import_react11.useMemo)(
1189
2348
  () => ({
1190
2349
  collapsed,
1191
2350
  setCollapsed,
@@ -1193,14 +2352,14 @@ function SidebarProvider({
1193
2352
  }),
1194
2353
  [collapsed]
1195
2354
  );
1196
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(SidebarContext.Provider, { value, children });
2355
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(SidebarContext.Provider, { value, children });
1197
2356
  }
1198
2357
  function Sidebar({
1199
2358
  className,
1200
2359
  ...props
1201
2360
  }) {
1202
2361
  const { collapsed } = useSidebar();
1203
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2362
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1204
2363
  "aside",
1205
2364
  {
1206
2365
  "data-slot": "sidebar",
@@ -1217,7 +2376,7 @@ function SidebarHeader({
1217
2376
  className,
1218
2377
  ...props
1219
2378
  }) {
1220
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2379
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1221
2380
  "div",
1222
2381
  {
1223
2382
  "data-slot": "sidebar-header",
@@ -1232,7 +2391,7 @@ function SidebarSearch({
1232
2391
  className,
1233
2392
  ...props
1234
2393
  }) {
1235
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2394
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
1236
2395
  "button",
1237
2396
  {
1238
2397
  type: "button",
@@ -1243,9 +2402,9 @@ function SidebarSearch({
1243
2402
  ),
1244
2403
  ...props,
1245
2404
  children: [
1246
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.Search, { className: "size-4 shrink-0" }),
1247
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "flex-1 text-left", children: label }),
1248
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
2405
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react12.Search, { className: "size-4 shrink-0" }),
2406
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "flex-1 text-left", children: label }),
2407
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
1249
2408
  ]
1250
2409
  }
1251
2410
  );
@@ -1254,7 +2413,7 @@ function SidebarContent({
1254
2413
  className,
1255
2414
  ...props
1256
2415
  }) {
1257
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2416
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1258
2417
  "nav",
1259
2418
  {
1260
2419
  "data-slot": "sidebar-content",
@@ -1268,7 +2427,7 @@ function SidebarFooter({
1268
2427
  className,
1269
2428
  ...props
1270
2429
  }) {
1271
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2430
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1272
2431
  "div",
1273
2432
  {
1274
2433
  "data-slot": "sidebar-footer",
@@ -1287,14 +2446,14 @@ function SidebarGroup({
1287
2446
  ...props
1288
2447
  }) {
1289
2448
  const { collapsed } = useSidebar();
1290
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2449
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
1291
2450
  "section",
1292
2451
  {
1293
2452
  "data-slot": "sidebar-group",
1294
2453
  className: cn("mb-4 last:mb-0", className),
1295
2454
  ...props,
1296
2455
  children: [
1297
- label && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2456
+ label && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1298
2457
  "h2",
1299
2458
  {
1300
2459
  className: cn(
@@ -1320,8 +2479,8 @@ function SidebarItem({
1320
2479
  }) {
1321
2480
  const { collapsed } = useSidebar();
1322
2481
  const content = typeof children === "function" ? label : children ?? label;
1323
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1324
- import_react_aria_components21.Link,
2482
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2483
+ import_react_aria_components24.Link,
1325
2484
  {
1326
2485
  "data-slot": "sidebar-item",
1327
2486
  "aria-current": active ? "page" : void 0,
@@ -1332,16 +2491,16 @@ function SidebarItem({
1332
2491
  typeof className === "function" ? className : className
1333
2492
  ),
1334
2493
  ...props,
1335
- children: (values) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
1336
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
1337
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2494
+ children: (values) => /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
2495
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
2496
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1338
2497
  "span",
1339
2498
  {
1340
2499
  className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"),
1341
2500
  children: typeof children === "function" ? children(values) : content
1342
2501
  }
1343
2502
  ),
1344
- badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "text-xs text-muted-foreground", children: badge })
2503
+ badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "text-xs text-muted-foreground", children: badge })
1345
2504
  ] })
1346
2505
  }
1347
2506
  );
@@ -1350,7 +2509,7 @@ function SidebarSeparator({
1350
2509
  className,
1351
2510
  ...props
1352
2511
  }) {
1353
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2512
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1354
2513
  "hr",
1355
2514
  {
1356
2515
  "data-slot": "sidebar-separator",
@@ -1361,8 +2520,8 @@ function SidebarSeparator({
1361
2520
  }
1362
2521
  function SidebarTrigger({ className, ...props }) {
1363
2522
  const { collapsed, toggle } = useSidebar();
1364
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1365
- Button2,
2523
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2524
+ Button,
1366
2525
  {
1367
2526
  "aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
1368
2527
  onPress: toggle,
@@ -1370,7 +2529,7 @@ function SidebarTrigger({ className, ...props }) {
1370
2529
  variant: "ghost",
1371
2530
  className: cn("ml-auto", className),
1372
2531
  ...props,
1373
- children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.ChevronLeft, {})
2532
+ children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react12.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react12.ChevronLeft, {})
1374
2533
  }
1375
2534
  );
1376
2535
  }
@@ -1379,7 +2538,7 @@ function SidebarRail({
1379
2538
  ...props
1380
2539
  }) {
1381
2540
  const { toggle } = useSidebar();
1382
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2541
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1383
2542
  "button",
1384
2543
  {
1385
2544
  type: "button",
@@ -1394,49 +2553,49 @@ function SidebarRail({
1394
2553
  );
1395
2554
  }
1396
2555
  function SidebarMore({ className, ...props }) {
1397
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1398
- Button2,
2556
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2557
+ Button,
1399
2558
  {
1400
2559
  "aria-label": "M\xE1s opciones",
1401
2560
  size: "icon",
1402
2561
  variant: "ghost",
1403
2562
  className: cn("size-7", className),
1404
2563
  ...props,
1405
- children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.Ellipsis, {})
2564
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react12.Ellipsis, {})
1406
2565
  }
1407
2566
  );
1408
2567
  }
1409
2568
 
1410
2569
  // src/ui/skeleton/skeleton.tsx
1411
- var import_jsx_runtime38 = require("react/jsx-runtime");
2570
+ var import_jsx_runtime40 = require("react/jsx-runtime");
1412
2571
  function Skeleton({ className, ...props }) {
1413
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
2572
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { "aria-hidden": "true", "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props });
1414
2573
  }
1415
2574
 
1416
2575
  // src/ui/submit-button/submit-button.tsx
1417
2576
  var import_react_dom = require("react-dom");
1418
- var import_lucide_react11 = require("lucide-react");
1419
- var import_jsx_runtime39 = require("react/jsx-runtime");
2577
+ var import_lucide_react13 = require("lucide-react");
2578
+ var import_jsx_runtime41 = require("react/jsx-runtime");
1420
2579
  function SubmitButton({ pendingLabel = "Guardando\u2026", loading = false, children, isDisabled, size = "sm", ...props }) {
1421
2580
  const { pending } = (0, import_react_dom.useFormStatus)();
1422
2581
  const busy = pending || loading;
1423
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Button2, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
1424
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react11.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
2582
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Button, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
2583
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react13.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
1425
2584
  pendingLabel
1426
2585
  ] }) : children });
1427
2586
  }
1428
2587
 
1429
2588
  // src/ui/switch/switch.tsx
1430
- var import_react_aria_components22 = require("react-aria-components");
1431
- var import_jsx_runtime40 = require("react/jsx-runtime");
2589
+ var import_react_aria_components25 = require("react-aria-components");
2590
+ var import_jsx_runtime42 = require("react/jsx-runtime");
1432
2591
  var sizeStyles = {
1433
2592
  sm: { track: "h-5 w-9 p-0.5", thumb: "size-4", travel: "group-data-selected/switch:translate-x-4" },
1434
2593
  md: { track: "h-6 w-11 p-0.5", thumb: "size-5", travel: "group-data-selected/switch:translate-x-5" }
1435
2594
  };
1436
2595
  function Switch({ className, children, size = "sm", ...props }) {
1437
2596
  const styles = sizeStyles[size];
1438
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_aria_components22.SwitchField, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
1439
- import_react_aria_components22.SwitchButton,
2597
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components25.SwitchField, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2598
+ import_react_aria_components25.SwitchButton,
1440
2599
  {
1441
2600
  "data-slot": "switch",
1442
2601
  "data-size": size,
@@ -1445,8 +2604,8 @@ function Switch({ className, children, size = "sm", ...props }) {
1445
2604
  "data-disabled:cursor-not-allowed data-disabled:opacity-50",
1446
2605
  typeof className === "function" ? className(state) : className
1447
2606
  ),
1448
- children: (state) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
1449
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2607
+ children: (state) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
2608
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1450
2609
  "span",
1451
2610
  {
1452
2611
  "aria-hidden": "true",
@@ -1461,7 +2620,7 @@ function Switch({ className, children, size = "sm", ...props }) {
1461
2620
  "motion-reduce:transition-none",
1462
2621
  styles.track
1463
2622
  ),
1464
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2623
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
1465
2624
  "span",
1466
2625
  {
1467
2626
  className: cn(
@@ -1476,59 +2635,117 @@ function Switch({ className, children, size = "sm", ...props }) {
1476
2635
  )
1477
2636
  }
1478
2637
  ),
1479
- children != null && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "select-none font-medium leading-5 text-foreground", children: typeof children === "function" ? children(state) : children })
2638
+ children != null && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "select-none font-medium leading-5 text-foreground", children: typeof children === "function" ? children(state) : children })
1480
2639
  ] })
1481
2640
  }
1482
2641
  ) });
1483
2642
  }
1484
2643
 
1485
2644
  // src/ui/table/table.tsx
1486
- var import_jsx_runtime41 = require("react/jsx-runtime");
2645
+ var import_jsx_runtime43 = require("react/jsx-runtime");
1487
2646
  function Table({ className, ...props }) {
1488
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("table", { "data-slot": "table", className: cn("w-full caption-bottom text-sm", className), ...props }) });
2647
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2648
+ "table",
2649
+ {
2650
+ "data-slot": "table",
2651
+ className: cn("w-full caption-bottom text-sm", className),
2652
+ ...props
2653
+ }
2654
+ ) });
1489
2655
  }
1490
2656
  function TableHeader({ className, ...props }) {
1491
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("thead", { "data-slot": "table-header", className: cn("border-b border-border", className), ...props });
2657
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
1492
2658
  }
1493
2659
  function TableBody({ className, ...props }) {
1494
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("tbody", { "data-slot": "table-body", className: cn("[&_tr:last-child]:border-0", className), ...props });
2660
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2661
+ "tbody",
2662
+ {
2663
+ "data-slot": "table-body",
2664
+ className: cn("[&_tr:last-child]:border-0", className),
2665
+ ...props
2666
+ }
2667
+ );
1495
2668
  }
1496
2669
  function TableRow({ className, ...props }) {
1497
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("tr", { "data-slot": "table-row", className: cn("border-b border-border transition-colors hover:bg-muted/50", className), ...props });
2670
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2671
+ "tr",
2672
+ {
2673
+ "data-slot": "table-row",
2674
+ className: cn(
2675
+ "border-b border-border transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted",
2676
+ className
2677
+ ),
2678
+ ...props
2679
+ }
2680
+ );
1498
2681
  }
1499
2682
  function TableHead({ className, ...props }) {
1500
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("th", { "data-slot": "table-head", className: cn("h-10 px-3 text-left align-middle text-xs font-medium text-muted-foreground", className), ...props });
2683
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2684
+ "th",
2685
+ {
2686
+ "data-slot": "table-head",
2687
+ className: cn(
2688
+ "h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0",
2689
+ className
2690
+ ),
2691
+ ...props
2692
+ }
2693
+ );
1501
2694
  }
1502
2695
  function TableCell({ className, ...props }) {
1503
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("td", { "data-slot": "table-cell", className: cn("p-3 align-middle", className), ...props });
2696
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2697
+ "td",
2698
+ {
2699
+ "data-slot": "table-cell",
2700
+ className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
2701
+ ...props
2702
+ }
2703
+ );
1504
2704
  }
1505
2705
  function TableCaption({ className, ...props }) {
1506
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("caption", { "data-slot": "table-caption", className: cn("mt-4 text-sm text-muted-foreground", className), ...props });
2706
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2707
+ "caption",
2708
+ {
2709
+ "data-slot": "table-caption",
2710
+ className: cn("mt-4 text-sm text-muted-foreground", className),
2711
+ ...props
2712
+ }
2713
+ );
2714
+ }
2715
+ function TableFooter({ className, ...props }) {
2716
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2717
+ "tfoot",
2718
+ {
2719
+ "data-slot": "table-footer",
2720
+ className: cn("border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0", className),
2721
+ ...props
2722
+ }
2723
+ );
1507
2724
  }
1508
2725
 
1509
2726
  // src/ui/tabs/tabs.tsx
1510
- var import_react_aria_components23 = require("react-aria-components");
1511
- var import_jsx_runtime42 = require("react/jsx-runtime");
2727
+ var import_react_aria_components26 = require("react-aria-components");
2728
+ var import_jsx_runtime44 = require("react/jsx-runtime");
1512
2729
  function Tabs({ className, ...props }) {
1513
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components23.Tabs, { "data-slot": "tabs", className: (0, import_react_aria_components23.composeRenderProps)(className, (value) => cn("flex flex-col gap-2", value)), ...props });
2730
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_react_aria_components26.Tabs, { "data-slot": "tabs", className: (0, import_react_aria_components26.composeRenderProps)(className, (value) => cn("flex flex-col gap-2", value)), ...props });
1514
2731
  }
1515
2732
  function TabsList({ className, ...props }) {
1516
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components23.TabList, { "data-slot": "tabs-list", className: (0, import_react_aria_components23.composeRenderProps)(className, (value) => cn("inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground", value)), ...props });
2733
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_react_aria_components26.TabList, { "data-slot": "tabs-list", className: (0, import_react_aria_components26.composeRenderProps)(className, (value) => cn("inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground", value)), ...props });
1517
2734
  }
1518
2735
  function TabsTrigger({ className, ...props }) {
1519
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components23.Tab, { "data-slot": "tabs-trigger", className: (0, import_react_aria_components23.composeRenderProps)(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 });
2736
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_react_aria_components26.Tab, { "data-slot": "tabs-trigger", className: (0, import_react_aria_components26.composeRenderProps)(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 });
1520
2737
  }
1521
2738
  function TabsPanels({ className, ...props }) {
1522
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components23.TabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
2739
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_react_aria_components26.TabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
1523
2740
  }
1524
2741
  function TabsContent({ className, ...props }) {
1525
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components23.TabPanel, { "data-slot": "tabs-content", className: (0, import_react_aria_components23.composeRenderProps)(className, (value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)), ...props });
2742
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_react_aria_components26.TabPanel, { "data-slot": "tabs-content", className: (0, import_react_aria_components26.composeRenderProps)(className, (value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)), ...props });
1526
2743
  }
1527
2744
 
1528
2745
  // src/ui/toast/toast.tsx
1529
- var import_react11 = require("react");
1530
- var import_lucide_react12 = require("lucide-react");
1531
- var import_jsx_runtime43 = require("react/jsx-runtime");
2746
+ var import_react12 = require("react");
2747
+ var import_lucide_react14 = require("lucide-react");
2748
+ var import_jsx_runtime45 = require("react/jsx-runtime");
1532
2749
  var records = [];
1533
2750
  var listeners = /* @__PURE__ */ new Set();
1534
2751
  var snapshot = () => records;
@@ -1573,9 +2790,9 @@ function useToast() {
1573
2790
  return toast;
1574
2791
  }
1575
2792
  function ToastProvider({ children }) {
1576
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
2793
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
1577
2794
  children,
1578
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Toaster, {})
2795
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Toaster, {})
1579
2796
  ] });
1580
2797
  }
1581
2798
  var positionClasses = {
@@ -1587,41 +2804,41 @@ var positionClasses = {
1587
2804
  "bottom-right": "bottom-4 right-4 items-end"
1588
2805
  };
1589
2806
  function Toaster({ position = "bottom-right" }) {
1590
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment, { children: Object.keys(positionClasses).map((item) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ToastViewport, { position: item, visiblePosition: position }, item)) });
2807
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: Object.keys(positionClasses).map((item) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(ToastViewport, { position: item, visiblePosition: position }, item)) });
1591
2808
  }
1592
2809
  function ToastViewport({ position, visiblePosition, className }) {
1593
- const toasts = (0, import_react11.useSyncExternalStore)(subscribe, snapshot, snapshot).filter((item) => item.position === position);
2810
+ const toasts = (0, import_react12.useSyncExternalStore)(subscribe, snapshot, snapshot).filter((item) => item.position === position);
1594
2811
  if (visiblePosition && position !== visiblePosition && toasts.length === 0) return null;
1595
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { "aria-label": `Notificaciones ${position}`, className: cn("pointer-events-none fixed z-50 flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2", positionClasses[position], className), children: toasts.map((item) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Toast, { ...item, onDismiss: () => dismiss(item.id) }, item.id)) });
2812
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { "aria-label": `Notificaciones ${position}`, className: cn("pointer-events-none fixed z-50 flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2", positionClasses[position], className), children: toasts.map((item) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Toast, { ...item, onDismiss: () => dismiss(item.id) }, item.id)) });
1596
2813
  }
1597
2814
  function Toast({ id, title, description, variant = "default", action, state = "open", duration = 0, onDismiss }) {
1598
- (0, import_react11.useEffect)(() => {
2815
+ (0, import_react12.useEffect)(() => {
1599
2816
  if (state !== "open" || duration <= 0) return;
1600
2817
  const timeout = window.setTimeout(() => dismiss(id), duration);
1601
2818
  return () => window.clearTimeout(timeout);
1602
2819
  }, [duration, id, state]);
1603
- const Icon = variant === "success" ? import_lucide_react12.CheckCircle : variant === "error" ? import_lucide_react12.XCircle : variant === "warning" ? import_lucide_react12.CircleAlert : variant === "info" ? import_lucide_react12.Info : import_lucide_react12.Info;
1604
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { role: variant === "error" ? "alert" : "status", "data-state": state, className: cn("pointer-events-auto w-full overflow-hidden rounded-xl border border-border/80 bg-background/95 p-3.5 text-foreground shadow-xl shadow-black/10 backdrop-blur-md animate-ui-toast-in", "data-[state=closing]:animate-ui-toast-out motion-reduce:animate-none", variant === "success" && "border-success/30", variant === "error" && "border-destructive/30", variant === "warning" && "border-warning/40"), children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex items-start gap-3", children: [
1605
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { "aria-hidden": "true", className: cn("mt-0.5 size-5 shrink-0", variant === "success" && "text-success", variant === "error" && "text-destructive", variant === "warning" && "text-warning", variant === "info" && "text-primary") }),
1606
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "min-w-0 flex-1", children: [
1607
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "animate-ui-toast-title text-sm font-semibold", children: title }),
1608
- description && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "mt-1 max-h-20 animate-ui-toast-description overflow-hidden text-sm leading-5 text-muted-foreground data-[state=closing]:max-h-0", "data-state": state, children: description }),
1609
- action && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Button2, { size: "sm", variant: "link", onPress: action.onPress, className: "mt-1 h-auto px-0", children: action.label })
2820
+ const Icon = variant === "success" ? import_lucide_react14.CheckCircle : variant === "error" ? import_lucide_react14.XCircle : variant === "warning" ? import_lucide_react14.CircleAlert : variant === "info" ? import_lucide_react14.Info : import_lucide_react14.Info;
2821
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { role: variant === "error" ? "alert" : "status", "data-state": state, className: cn("pointer-events-auto w-full overflow-hidden rounded-xl border border-border/80 bg-background/95 p-3.5 text-foreground shadow-xl shadow-black/10 backdrop-blur-md animate-ui-toast-in", "data-[state=closing]:animate-ui-toast-out motion-reduce:animate-none", variant === "success" && "border-success/30", variant === "error" && "border-destructive/30", variant === "warning" && "border-warning/40"), children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "flex items-start gap-3", children: [
2822
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Icon, { "aria-hidden": "true", className: cn("mt-0.5 size-5 shrink-0", variant === "success" && "text-success", variant === "error" && "text-destructive", variant === "warning" && "text-warning", variant === "info" && "text-primary") }),
2823
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "min-w-0 flex-1", children: [
2824
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "animate-ui-toast-title text-sm font-semibold", children: title }),
2825
+ description && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "mt-1 max-h-20 animate-ui-toast-description overflow-hidden text-sm leading-5 text-muted-foreground data-[state=closing]:max-h-0", "data-state": state, children: description }),
2826
+ action && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Button, { size: "sm", variant: "link", onPress: action.onPress, className: "mt-1 h-auto px-0", children: action.label })
1610
2827
  ] }),
1611
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Button2, { "aria-label": "Cerrar notificaci\xF3n", onPress: onDismiss, size: "icon", variant: "ghost", className: "-mr-2 -mt-2 size-7", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react12.X, {}) })
2828
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Button, { "aria-label": "Cerrar notificaci\xF3n", onPress: onDismiss, size: "icon", variant: "ghost", className: "-mr-2 -mt-2 size-7", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react14.X, {}) })
1612
2829
  ] }) });
1613
2830
  }
1614
2831
 
1615
2832
  // src/ui/toolbar/toolbar.tsx
1616
- var import_jsx_runtime44 = require("react/jsx-runtime");
2833
+ var import_jsx_runtime46 = require("react/jsx-runtime");
1617
2834
  function Toolbar({ className, ...props }) {
1618
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
2835
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { role: "toolbar", "data-slot": "toolbar", className: cn("flex flex-wrap items-center gap-2", className), ...props });
1619
2836
  }
1620
2837
  function ToolbarGroup({ className, ...props }) {
1621
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
2838
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { "data-slot": "toolbar-group", className: cn("flex items-center gap-2", className), ...props });
1622
2839
  }
1623
2840
  function ToolbarSpacer({ className, ...props }) {
1624
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
2841
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
1625
2842
  }
1626
2843
  // Annotate the CommonJS export names for ESM import in node:
1627
2844
  0 && (module.exports = {
@@ -1647,6 +2864,7 @@ function ToolbarSpacer({ className, ...props }) {
1647
2864
  AvatarGroupCount,
1648
2865
  AvatarImage,
1649
2866
  Badge,
2867
+ BadgeLink,
1650
2868
  Breadcrumb,
1651
2869
  BreadcrumbLink,
1652
2870
  BreadcrumbPage,
@@ -1654,8 +2872,10 @@ function ToolbarSpacer({ className, ...props }) {
1654
2872
  Breadcrumbs,
1655
2873
  Button,
1656
2874
  ButtonGroup,
2875
+ ButtonGroupSeparator,
1657
2876
  ButtonGroupText,
1658
2877
  Card,
2878
+ CardAction,
1659
2879
  CardContent,
1660
2880
  CardDescription,
1661
2881
  CardFooter,
@@ -1680,17 +2900,31 @@ function ToolbarSpacer({ className, ...props }) {
1680
2900
  DrawerHeader,
1681
2901
  DrawerTitle,
1682
2902
  DropdownMenu,
1683
- DropdownMenuContent,
2903
+ DropdownMenuGroup,
1684
2904
  DropdownMenuItem,
2905
+ DropdownMenuLabel,
1685
2906
  DropdownMenuSeparator,
2907
+ DropdownMenuShortcut,
2908
+ DropdownMenuSub,
2909
+ DropdownMenuSubContent,
2910
+ DropdownMenuSubTrigger,
1686
2911
  DropdownMenuTrigger,
1687
2912
  EmptyState,
2913
+ EmptyStateContent,
1688
2914
  EmptyStateDescription,
2915
+ EmptyStateHeader,
2916
+ EmptyStateMedia,
1689
2917
  EmptyStateTitle,
1690
2918
  Field,
2919
+ FieldContent,
1691
2920
  FieldDescription,
1692
2921
  FieldError,
2922
+ FieldGroup,
1693
2923
  FieldLabel,
2924
+ FieldLegend,
2925
+ FieldSeparator,
2926
+ FieldSet,
2927
+ FieldTitle,
1694
2928
  FormFeedback,
1695
2929
  FormRow,
1696
2930
  HighlightMatch,
@@ -1705,12 +2939,14 @@ function ToolbarSpacer({ className, ...props }) {
1705
2939
  Kbd,
1706
2940
  KbdGroup,
1707
2941
  Label,
2942
+ LinkButton,
1708
2943
  LoadingOverlay,
1709
2944
  Menu,
1710
2945
  MenuContent,
1711
2946
  MenuItem,
1712
2947
  MenuTrigger,
1713
2948
  ModalDialog,
2949
+ OtpInput,
1714
2950
  PageHeader,
1715
2951
  PageHeaderActions,
1716
2952
  PageHeaderDescription,
@@ -1731,6 +2967,14 @@ function ToolbarSpacer({ className, ...props }) {
1731
2967
  SelectTrigger,
1732
2968
  SelectValue,
1733
2969
  Separator,
2970
+ Sheet,
2971
+ SheetClose,
2972
+ SheetContent,
2973
+ SheetDescription,
2974
+ SheetFooter,
2975
+ SheetHeader,
2976
+ SheetTitle,
2977
+ SheetTrigger,
1734
2978
  Sidebar,
1735
2979
  SidebarContent,
1736
2980
  SidebarFooter,
@@ -1750,6 +2994,7 @@ function ToolbarSpacer({ className, ...props }) {
1750
2994
  TableBody,
1751
2995
  TableCaption,
1752
2996
  TableCell,
2997
+ TableFooter,
1753
2998
  TableHead,
1754
2999
  TableHeader,
1755
3000
  TableRow,
@@ -1767,13 +3012,17 @@ function ToolbarSpacer({ className, ...props }) {
1767
3012
  ToolbarGroup,
1768
3013
  ToolbarSpacer,
1769
3014
  Tooltip,
1770
- TooltipContent,
1771
3015
  TooltipTrigger,
3016
+ alertVariants,
1772
3017
  badgeVariants,
3018
+ buttonGroupVariants,
1773
3019
  buttonVariants,
1774
3020
  cn,
3021
+ emptyStateMediaVariants,
3022
+ fieldVariants,
1775
3023
  formSnapshot,
1776
3024
  getTextMatchParts,
3025
+ inputGroupAddonVariants,
1777
3026
  toast,
1778
3027
  useAutosave,
1779
3028
  useDebouncedValue,