@doscientos/ui 0.1.11 → 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 +1615 -366
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +272 -174
- package/dist/index.d.ts +272 -174
- package/dist/index.js +1568 -328
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
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: () =>
|
|
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: () =>
|
|
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
|
-
|
|
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)(
|
|
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)(
|
|
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({
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
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)(
|
|
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
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
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)(
|
|
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)(
|
|
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,
|
|
362
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props
|
|
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
|
|
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,
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
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)(
|
|
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
|
|
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)(
|
|
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)(
|
|
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)(
|
|
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
|
|
530
|
-
var
|
|
531
|
-
var
|
|
532
|
-
var buttonVariants = (0,
|
|
533
|
-
"inline-flex shrink-0
|
|
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/
|
|
538
|
-
|
|
539
|
-
|
|
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
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
lg: "h-
|
|
549
|
-
icon: "size-8
|
|
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: {
|
|
786
|
+
defaultVariants: {
|
|
787
|
+
orientation: "horizontal"
|
|
788
|
+
}
|
|
553
789
|
}
|
|
554
790
|
);
|
|
555
|
-
function
|
|
556
|
-
|
|
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
|
|
561
|
-
function Card({ className, ...props }) {
|
|
562
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
586
|
-
|
|
587
|
-
|
|
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
|
|
594
|
-
var
|
|
595
|
-
var 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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
637
|
-
/* @__PURE__ */ (0,
|
|
638
|
-
suggestionLabel && /* @__PURE__ */ (0,
|
|
639
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
645
|
-
errorMessage && /* @__PURE__ */ (0,
|
|
646
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
652
|
-
var
|
|
653
|
-
function Command({ className, ...props }) {
|
|
654
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
672
|
-
var
|
|
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,
|
|
693
|
-
|
|
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,
|
|
700
|
-
|
|
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,
|
|
708
|
-
|
|
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,
|
|
715
|
-
/* @__PURE__ */ (0,
|
|
716
|
-
/* @__PURE__ */ (0,
|
|
717
|
-
/* @__PURE__ */ (0,
|
|
718
|
-
description ? /* @__PURE__ */ (0,
|
|
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,
|
|
721
|
-
|
|
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,
|
|
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,
|
|
733
|
-
footer ? /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
775
|
-
/* @__PURE__ */ (0,
|
|
776
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
784
|
-
var
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
804
|
-
var
|
|
805
|
-
var
|
|
806
|
-
var
|
|
807
|
-
|
|
808
|
-
|
|
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
|
|
811
|
-
|
|
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
|
|
814
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
832
|
-
var
|
|
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,
|
|
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
|
|
839
|
-
function
|
|
840
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
850
|
-
|
|
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
|
|
856
|
-
var
|
|
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,
|
|
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,
|
|
890
|
-
state.status === "pending" && /* @__PURE__ */ (0,
|
|
891
|
-
success && /* @__PURE__ */ (0,
|
|
892
|
-
error && /* @__PURE__ */ (0,
|
|
893
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
903
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
906
|
-
/* @__PURE__ */ (0,
|
|
907
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
912
|
-
error && /* @__PURE__ */ (0,
|
|
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
|
|
1674
|
+
var import_react_aria_components14 = require("react-aria-components");
|
|
918
1675
|
|
|
919
1676
|
// src/ui/tooltip/tooltip.tsx
|
|
920
|
-
var
|
|
921
|
-
var
|
|
922
|
-
var
|
|
923
|
-
function
|
|
924
|
-
|
|
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
|
|
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,
|
|
943
|
-
href ? /* @__PURE__ */ (0,
|
|
944
|
-
|
|
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,
|
|
953
|
-
|
|
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,
|
|
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
|
|
974
|
-
var
|
|
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,
|
|
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
|
|
983
|
-
var
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
995
|
-
|
|
996
|
-
|
|
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
|
-
|
|
999
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
1924
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1013
1925
|
function Kbd({ className, ...props }) {
|
|
1014
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
1022
|
-
var
|
|
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,
|
|
1025
|
-
/* @__PURE__ */ (0,
|
|
1026
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
1032
|
-
var
|
|
1033
|
-
var 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,
|
|
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,
|
|
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,
|
|
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
|
|
2084
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1046
2085
|
function PageHeader({ className, ...props }) {
|
|
1047
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
1064
|
-
var
|
|
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,
|
|
1068
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1075
|
-
/* @__PURE__ */ (0,
|
|
1076
|
-
pages.map((item) => /* @__PURE__ */ (0,
|
|
1077
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
1084
|
-
var
|
|
1085
|
-
var PopoverTrigger =
|
|
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,
|
|
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
|
|
1093
|
-
var
|
|
1094
|
-
var
|
|
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,
|
|
1105
|
-
|
|
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,
|
|
1113
|
-
|
|
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,
|
|
1119
|
-
/* @__PURE__ */ (0,
|
|
1120
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
1130
|
-
var
|
|
1131
|
-
var
|
|
1132
|
-
var 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,
|
|
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,
|
|
1137
|
-
return /* @__PURE__ */ (0,
|
|
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
|
|
1142
|
-
var
|
|
1143
|
-
var
|
|
1144
|
-
var 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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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/
|
|
1165
|
-
var
|
|
1166
|
-
var
|
|
1167
|
-
|
|
1168
|
-
|
|
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
|
|
1173
|
-
var
|
|
1174
|
-
var
|
|
1175
|
-
var
|
|
1176
|
-
var SidebarContext = (0,
|
|
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,
|
|
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,
|
|
1188
|
-
const value = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1247
|
-
/* @__PURE__ */ (0,
|
|
1248
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1324
|
-
|
|
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,
|
|
1336
|
-
/* @__PURE__ */ (0,
|
|
1337
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
1365
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
1398
|
-
|
|
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,
|
|
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
|
|
2570
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
1412
2571
|
function Skeleton({ className, ...props }) {
|
|
1413
|
-
return /* @__PURE__ */ (0,
|
|
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
|
|
1419
|
-
var
|
|
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,
|
|
1424
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
1431
|
-
var
|
|
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,
|
|
1439
|
-
|
|
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,
|
|
1449
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
2645
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
1487
2646
|
function Table({ className, ...props }) {
|
|
1488
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
1511
|
-
var
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
1530
|
-
var
|
|
1531
|
-
var
|
|
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,
|
|
2793
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
|
|
1577
2794
|
children,
|
|
1578
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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" ?
|
|
1604
|
-
return /* @__PURE__ */ (0,
|
|
1605
|
-
/* @__PURE__ */ (0,
|
|
1606
|
-
/* @__PURE__ */ (0,
|
|
1607
|
-
/* @__PURE__ */ (0,
|
|
1608
|
-
description && /* @__PURE__ */ (0,
|
|
1609
|
-
action && /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
2833
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
1617
2834
|
function Toolbar({ className, ...props }) {
|
|
1618
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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,
|