@doscientos/ui 0.1.28 → 0.1.29
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/README.md +17 -8
- package/dist/index.cjs +1669 -980
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +338 -278
- package/dist/index.d.ts +338 -278
- package/dist/index.js +1747 -1067
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +23 -14
package/dist/index.cjs
CHANGED
|
@@ -90,7 +90,7 @@ __export(index_exports, {
|
|
|
90
90
|
ComboboxInput: () => ComboboxInput,
|
|
91
91
|
ComboboxItem: () => ComboboxItem,
|
|
92
92
|
ComboboxList: () => ComboboxList,
|
|
93
|
-
ComboboxValue: () =>
|
|
93
|
+
ComboboxValue: () => import_react_aria_components9.ComboBoxValue,
|
|
94
94
|
Command: () => Command,
|
|
95
95
|
CommandContent: () => CommandContent,
|
|
96
96
|
CommandInput: () => CommandInput,
|
|
@@ -106,15 +106,20 @@ __export(index_exports, {
|
|
|
106
106
|
DialogHeader: () => DialogHeader,
|
|
107
107
|
DialogOverlay: () => DialogOverlay,
|
|
108
108
|
DialogPortal: () => DialogPortal,
|
|
109
|
+
DialogRoot: () => DialogRoot,
|
|
109
110
|
DialogTitle: () => DialogTitle,
|
|
110
111
|
DialogTrigger: () => DialogTrigger,
|
|
111
112
|
DocPreview: () => DocPreview,
|
|
112
113
|
Drawer: () => Drawer,
|
|
114
|
+
DrawerClose: () => DrawerClose,
|
|
115
|
+
DrawerContent: () => DrawerContent,
|
|
113
116
|
DrawerDescription: () => DrawerDescription,
|
|
114
117
|
DrawerFooter: () => DrawerFooter,
|
|
115
118
|
DrawerHeader: () => DrawerHeader,
|
|
116
119
|
DrawerTitle: () => DrawerTitle,
|
|
120
|
+
DrawerTrigger: () => DrawerTrigger,
|
|
117
121
|
DropdownMenu: () => DropdownMenu,
|
|
122
|
+
DropdownMenuContent: () => DropdownMenuContent,
|
|
118
123
|
DropdownMenuGroup: () => DropdownMenuGroup,
|
|
119
124
|
DropdownMenuItem: () => DropdownMenuItem,
|
|
120
125
|
DropdownMenuLabel: () => DropdownMenuLabel,
|
|
@@ -161,7 +166,6 @@ __export(index_exports, {
|
|
|
161
166
|
MenuItem: () => MenuItem,
|
|
162
167
|
MenuTrigger: () => MenuTrigger,
|
|
163
168
|
MetricCard: () => MetricCard,
|
|
164
|
-
ModalDialog: () => ModalDialog,
|
|
165
169
|
OtpInput: () => OtpInput2,
|
|
166
170
|
PageHeader: () => PageHeader,
|
|
167
171
|
PageHeaderActions: () => PageHeaderActions,
|
|
@@ -190,6 +194,7 @@ __export(index_exports, {
|
|
|
190
194
|
SheetTrigger: () => SheetTrigger,
|
|
191
195
|
Sidebar: () => Sidebar,
|
|
192
196
|
SidebarContent: () => SidebarContent,
|
|
197
|
+
SidebarContext: () => SidebarContext,
|
|
193
198
|
SidebarFooter: () => SidebarFooter,
|
|
194
199
|
SidebarGroup: () => SidebarGroup,
|
|
195
200
|
SidebarHeader: () => SidebarHeader,
|
|
@@ -225,6 +230,7 @@ __export(index_exports, {
|
|
|
225
230
|
ToolbarGroup: () => ToolbarGroup,
|
|
226
231
|
ToolbarSpacer: () => ToolbarSpacer,
|
|
227
232
|
Tooltip: () => Tooltip,
|
|
233
|
+
TooltipContent: () => TooltipContent,
|
|
228
234
|
TooltipTrigger: () => TooltipTrigger,
|
|
229
235
|
actionRipple: () => actionRipple,
|
|
230
236
|
alertVariants: () => alertVariants,
|
|
@@ -305,7 +311,10 @@ function useDebouncedValue(value, delay = 250) {
|
|
|
305
311
|
// src/hooks/use-form-dirty.ts
|
|
306
312
|
var import_react3 = require("react");
|
|
307
313
|
function formSnapshot(form) {
|
|
308
|
-
const entries = Array.from(new FormData(form), ([key, value]) => [
|
|
314
|
+
const entries = Array.from(new FormData(form), ([key, value]) => [
|
|
315
|
+
key,
|
|
316
|
+
typeof value === "string" ? value : value.name
|
|
317
|
+
]);
|
|
309
318
|
entries.sort(([left], [right]) => left.localeCompare(right));
|
|
310
319
|
return JSON.stringify(entries);
|
|
311
320
|
}
|
|
@@ -324,29 +333,30 @@ function useFormDirty() {
|
|
|
324
333
|
setIsDirty(false);
|
|
325
334
|
}
|
|
326
335
|
}, []);
|
|
327
|
-
const formRef = (0, import_react3.useCallback)(
|
|
328
|
-
|
|
329
|
-
formElement.current
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
336
|
+
const formRef = (0, import_react3.useCallback)(
|
|
337
|
+
(form) => {
|
|
338
|
+
if (formElement.current) {
|
|
339
|
+
formElement.current.removeEventListener("input", recompute);
|
|
340
|
+
formElement.current.removeEventListener("change", recompute);
|
|
341
|
+
formElement.current.removeEventListener("reset", recompute);
|
|
342
|
+
}
|
|
343
|
+
formElement.current = form;
|
|
344
|
+
if (form) {
|
|
345
|
+
baseline.current = formSnapshot(form);
|
|
346
|
+
setIsDirty(false);
|
|
347
|
+
form.addEventListener("input", recompute);
|
|
348
|
+
form.addEventListener("change", recompute);
|
|
349
|
+
form.addEventListener("reset", recompute);
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
[recompute]
|
|
353
|
+
);
|
|
342
354
|
return { formRef, isDirty, markDirty: () => setIsDirty(true), reset };
|
|
343
355
|
}
|
|
344
356
|
|
|
345
357
|
// src/lib/action-ripple.ts
|
|
346
358
|
var import_class_variance_authority = require("class-variance-authority");
|
|
347
|
-
var actionRipple = (0, import_class_variance_authority.cva)(
|
|
348
|
-
"relative isolate overflow-hidden"
|
|
349
|
-
);
|
|
359
|
+
var actionRipple = (0, import_class_variance_authority.cva)("relative isolate overflow-hidden");
|
|
350
360
|
|
|
351
361
|
// src/lib/cn.ts
|
|
352
362
|
var import_clsx = require("clsx");
|
|
@@ -385,7 +395,8 @@ function getTextMatchParts(text, query) {
|
|
|
385
395
|
const rangeStart = ranges[index]?.start;
|
|
386
396
|
const rangeEnd = ranges[index + term.length - 1]?.end;
|
|
387
397
|
if (rangeStart === void 0 || rangeEnd === void 0) break;
|
|
388
|
-
if (rangeStart > sourceCursor)
|
|
398
|
+
if (rangeStart > sourceCursor)
|
|
399
|
+
parts.push({ text: text.slice(sourceCursor, rangeStart), match: false });
|
|
389
400
|
parts.push({ text: text.slice(rangeStart, rangeEnd), match: true });
|
|
390
401
|
sourceCursor = rangeEnd;
|
|
391
402
|
index = normalized.indexOf(term, index + term.length);
|
|
@@ -395,8 +406,8 @@ function getTextMatchParts(text, query) {
|
|
|
395
406
|
}
|
|
396
407
|
|
|
397
408
|
// src/ui/accordion/accordion.tsx
|
|
398
|
-
var React = require("react");
|
|
399
409
|
var import_lucide_react = require("lucide-react");
|
|
410
|
+
var React = require("react");
|
|
400
411
|
var import_react_aria_components = require("react-aria-components");
|
|
401
412
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
402
413
|
function Accordion({ className, ...props }) {
|
|
@@ -454,16 +465,12 @@ function AccordionTrigger({
|
|
|
454
465
|
}
|
|
455
466
|
) });
|
|
456
467
|
}
|
|
457
|
-
function AccordionContent({
|
|
458
|
-
className,
|
|
459
|
-
children,
|
|
460
|
-
...props
|
|
461
|
-
}) {
|
|
468
|
+
function AccordionContent({ className, children, ...props }) {
|
|
462
469
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
463
470
|
import_react_aria_components.DisclosurePanel,
|
|
464
471
|
{
|
|
465
472
|
"data-slot": "accordion-content",
|
|
466
|
-
className: "
|
|
473
|
+
className: "text-muted-foreground data-open:animate-accordion-down data-closed:animate-accordion-up h-(--disclosure-panel-height) overflow-clip text-sm transition-[height]",
|
|
467
474
|
...props,
|
|
468
475
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
469
476
|
"div",
|
|
@@ -480,26 +487,61 @@ function AccordionContent({
|
|
|
480
487
|
}
|
|
481
488
|
|
|
482
489
|
// src/ui/alert-dialog/alert-dialog.tsx
|
|
483
|
-
var
|
|
484
|
-
var
|
|
490
|
+
var React3 = require("react");
|
|
491
|
+
var import_react_aria_components4 = require("react-aria-components");
|
|
485
492
|
|
|
486
493
|
// src/ui/button/button.tsx
|
|
487
|
-
var import_class_variance_authority2 = require("class-variance-authority");
|
|
488
494
|
var import_react4 = require("react");
|
|
489
495
|
var import_react_aria_components2 = require("react-aria-components");
|
|
496
|
+
|
|
497
|
+
// src/ui/button/button-variants.ts
|
|
498
|
+
var import_class_variance_authority2 = require("class-variance-authority");
|
|
499
|
+
var buttonVariants = (0, import_class_variance_authority2.cva)(
|
|
500
|
+
cn(
|
|
501
|
+
"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
502
|
+
actionRipple()
|
|
503
|
+
),
|
|
504
|
+
{
|
|
505
|
+
variants: {
|
|
506
|
+
variant: {
|
|
507
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/80",
|
|
508
|
+
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",
|
|
509
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
510
|
+
ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
|
|
511
|
+
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",
|
|
512
|
+
link: "text-primary underline-offset-4 hover:underline after:hidden"
|
|
513
|
+
},
|
|
514
|
+
size: {
|
|
515
|
+
default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
516
|
+
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",
|
|
517
|
+
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",
|
|
518
|
+
lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
519
|
+
icon: "size-8",
|
|
520
|
+
"icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
|
|
521
|
+
"icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
|
|
522
|
+
"icon-lg": "size-9"
|
|
523
|
+
}
|
|
524
|
+
},
|
|
525
|
+
defaultVariants: {
|
|
526
|
+
variant: "default",
|
|
527
|
+
size: "default"
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
);
|
|
531
|
+
|
|
532
|
+
// src/ui/button/button.tsx
|
|
490
533
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
491
534
|
var centeredRipplePosition = { x: "50%", y: "50%" };
|
|
492
535
|
function getRipplePosition(event) {
|
|
493
536
|
if (event.pointerType === "keyboard" || event.pointerType === "virtual") {
|
|
494
537
|
return centeredRipplePosition;
|
|
495
538
|
}
|
|
496
|
-
if (
|
|
539
|
+
if (event.x === void 0 || event.y === void 0) {
|
|
497
540
|
return centeredRipplePosition;
|
|
498
541
|
}
|
|
499
|
-
const bounds = event.target.getBoundingClientRect();
|
|
500
542
|
return {
|
|
501
|
-
x: `${event.x
|
|
502
|
-
y: `${event.y
|
|
543
|
+
x: `${event.x}px`,
|
|
544
|
+
y: `${event.y}px`
|
|
503
545
|
};
|
|
504
546
|
}
|
|
505
547
|
function useActionRipple(enabled) {
|
|
@@ -517,7 +559,7 @@ function useActionRipple(enabled) {
|
|
|
517
559
|
{
|
|
518
560
|
"aria-hidden": "true",
|
|
519
561
|
"data-slot": "button-ripple",
|
|
520
|
-
className: "pointer-events-none absolute aspect-square w-full rounded-full
|
|
562
|
+
className: "animate-ui-ripple pointer-events-none absolute aspect-square w-full rounded-full motion-reduce:hidden",
|
|
521
563
|
style: { left: ripple.position.x, top: ripple.position.y },
|
|
522
564
|
onAnimationEnd: () => setRipple((currentRipple) => currentRipple?.id === ripple.id ? null : currentRipple)
|
|
523
565
|
},
|
|
@@ -525,39 +567,17 @@ function useActionRipple(enabled) {
|
|
|
525
567
|
) : null;
|
|
526
568
|
return { ripple: rippleElement, triggerRipple };
|
|
527
569
|
}
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
|
|
540
|
-
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",
|
|
541
|
-
link: "text-primary underline-offset-4 hover:underline after:hidden"
|
|
542
|
-
},
|
|
543
|
-
size: {
|
|
544
|
-
default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
545
|
-
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",
|
|
546
|
-
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",
|
|
547
|
-
lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
548
|
-
icon: "size-8",
|
|
549
|
-
"icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
|
|
550
|
-
"icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
|
|
551
|
-
"icon-lg": "size-9"
|
|
552
|
-
}
|
|
553
|
-
},
|
|
554
|
-
defaultVariants: {
|
|
555
|
-
variant: "default",
|
|
556
|
-
size: "default"
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
);
|
|
560
|
-
function Button({ className, variant = "default", size = "default", children, disabled, isDisabled, onClick, onPress, ...props }) {
|
|
570
|
+
function Button({
|
|
571
|
+
className,
|
|
572
|
+
variant = "default",
|
|
573
|
+
size = "default",
|
|
574
|
+
children,
|
|
575
|
+
disabled,
|
|
576
|
+
isDisabled,
|
|
577
|
+
onClick,
|
|
578
|
+
onPress,
|
|
579
|
+
...props
|
|
580
|
+
}) {
|
|
561
581
|
const { ripple, triggerRipple } = useActionRipple(variant !== "link");
|
|
562
582
|
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
563
583
|
import_react_aria_components2.Button,
|
|
@@ -611,57 +631,294 @@ function LinkButton({
|
|
|
611
631
|
);
|
|
612
632
|
}
|
|
613
633
|
|
|
614
|
-
// src/ui/
|
|
634
|
+
// src/ui/dialog/dialog.tsx
|
|
635
|
+
var import_lucide_react2 = require("lucide-react");
|
|
636
|
+
var React2 = __toESM(require("react"), 1);
|
|
637
|
+
var import_react_aria_components3 = require("react-aria-components");
|
|
615
638
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
616
|
-
var
|
|
617
|
-
function
|
|
618
|
-
const context = React2.useContext(
|
|
619
|
-
if (!context) throw new Error("
|
|
639
|
+
var DialogContext = React2.createContext(null);
|
|
640
|
+
function useDialogContext() {
|
|
641
|
+
const context = React2.useContext(DialogContext);
|
|
642
|
+
if (!context) throw new Error("Dialog components must be rendered within Dialog.");
|
|
620
643
|
return context;
|
|
621
644
|
}
|
|
645
|
+
function DialogRoot({
|
|
646
|
+
children,
|
|
647
|
+
defaultOpen = false,
|
|
648
|
+
onOpenChange,
|
|
649
|
+
open: controlledOpen
|
|
650
|
+
}) {
|
|
651
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React2.useState(defaultOpen);
|
|
652
|
+
const open = controlledOpen ?? uncontrolledOpen;
|
|
653
|
+
const setOpen = React2.useCallback(
|
|
654
|
+
(nextOpen) => {
|
|
655
|
+
if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
|
|
656
|
+
onOpenChange?.(nextOpen);
|
|
657
|
+
},
|
|
658
|
+
[controlledOpen, onOpenChange]
|
|
659
|
+
);
|
|
660
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogContext.Provider, { value: { open, setOpen }, children });
|
|
661
|
+
}
|
|
662
|
+
function DialogTrigger({
|
|
663
|
+
asChild = false,
|
|
664
|
+
children,
|
|
665
|
+
onClick,
|
|
666
|
+
...props
|
|
667
|
+
}) {
|
|
668
|
+
const { setOpen } = useDialogContext();
|
|
669
|
+
const handleClick = (event) => {
|
|
670
|
+
onClick?.(event);
|
|
671
|
+
if (!event.defaultPrevented) setOpen(true);
|
|
672
|
+
};
|
|
673
|
+
if (asChild && React2.isValidElement(children)) {
|
|
674
|
+
const child = children;
|
|
675
|
+
return React2.cloneElement(child, {
|
|
676
|
+
...props,
|
|
677
|
+
"data-slot": "dialog-trigger",
|
|
678
|
+
onClick: (event) => {
|
|
679
|
+
child.props.onClick?.(event);
|
|
680
|
+
handleClick(event);
|
|
681
|
+
}
|
|
682
|
+
});
|
|
683
|
+
}
|
|
684
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
|
|
685
|
+
}
|
|
686
|
+
function DialogPortal({ children }) {
|
|
687
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_jsx_runtime3.Fragment, { children });
|
|
688
|
+
}
|
|
689
|
+
function DialogOverlay({ children, className, ...props }) {
|
|
690
|
+
const { open, setOpen } = useDialogContext();
|
|
691
|
+
if (!open) return null;
|
|
692
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
693
|
+
import_react_aria_components3.ModalOverlay,
|
|
694
|
+
{
|
|
695
|
+
"data-slot": "dialog-overlay",
|
|
696
|
+
isDismissable: true,
|
|
697
|
+
isOpen: open,
|
|
698
|
+
onOpenChange: setOpen,
|
|
699
|
+
className: cn(
|
|
700
|
+
"fixed inset-0 isolate z-50 grid place-items-center bg-black/10 p-4 supports-backdrop-filter:backdrop-blur-xs motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out",
|
|
701
|
+
className
|
|
702
|
+
),
|
|
703
|
+
...props,
|
|
704
|
+
children
|
|
705
|
+
}
|
|
706
|
+
);
|
|
707
|
+
}
|
|
708
|
+
function Dialog(props) {
|
|
709
|
+
if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogRoot, { ...props });
|
|
710
|
+
const { children, trigger, triggerProps, defaultOpen, onOpenChange, open, ...contentProps } = props;
|
|
711
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(DialogRoot, { defaultOpen, onOpenChange, open, children: [
|
|
712
|
+
typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogTrigger, { ...triggerProps, children: trigger }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogTrigger, { asChild: true, ...triggerProps, children: trigger }),
|
|
713
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogContent, { ...contentProps, children })
|
|
714
|
+
] });
|
|
715
|
+
}
|
|
716
|
+
function DialogContent({
|
|
717
|
+
children,
|
|
718
|
+
className,
|
|
719
|
+
contentSlot = "dialog-content",
|
|
720
|
+
onOverlayClick,
|
|
721
|
+
overlaySlot = "dialog-overlay",
|
|
722
|
+
showCloseButton = true,
|
|
723
|
+
...props
|
|
724
|
+
}) {
|
|
725
|
+
const { setOpen } = useDialogContext();
|
|
726
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
727
|
+
DialogOverlay,
|
|
728
|
+
{
|
|
729
|
+
"data-slot": overlaySlot,
|
|
730
|
+
onClick: (event) => {
|
|
731
|
+
if (event.target === event.currentTarget) onOverlayClick?.(event);
|
|
732
|
+
},
|
|
733
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
734
|
+
import_react_aria_components3.Modal,
|
|
735
|
+
{
|
|
736
|
+
className: "motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out max-h-full min-h-0 w-full",
|
|
737
|
+
onClick: (event) => {
|
|
738
|
+
if (event.target === event.currentTarget) {
|
|
739
|
+
setOpen(false);
|
|
740
|
+
onOverlayClick?.(event);
|
|
741
|
+
}
|
|
742
|
+
},
|
|
743
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
744
|
+
import_react_aria_components3.Dialog,
|
|
745
|
+
{
|
|
746
|
+
"data-slot": contentSlot,
|
|
747
|
+
className: cn(
|
|
748
|
+
"relative mx-auto grid box-border max-h-full min-h-0 w-full max-w-[calc(100%-2rem)] gap-4 overflow-x-hidden overflow-y-auto rounded-xl bg-background p-4 text-sm text-foreground ring-1 ring-foreground/10 outline-none sm:max-w-sm",
|
|
749
|
+
className
|
|
750
|
+
),
|
|
751
|
+
...props,
|
|
752
|
+
children: [
|
|
753
|
+
children,
|
|
754
|
+
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
755
|
+
Button,
|
|
756
|
+
{
|
|
757
|
+
"aria-label": "Cerrar di\xE1logo",
|
|
758
|
+
"data-slot": "dialog-close",
|
|
759
|
+
variant: "ghost",
|
|
760
|
+
className: "absolute top-2 right-2",
|
|
761
|
+
size: "icon-sm",
|
|
762
|
+
onPress: () => setOpen(false),
|
|
763
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_lucide_react2.XIcon, {})
|
|
764
|
+
}
|
|
765
|
+
) : null
|
|
766
|
+
]
|
|
767
|
+
}
|
|
768
|
+
)
|
|
769
|
+
}
|
|
770
|
+
)
|
|
771
|
+
}
|
|
772
|
+
) });
|
|
773
|
+
}
|
|
774
|
+
function DialogClose({ asChild = false, children, onClick, ...props }) {
|
|
775
|
+
const { setOpen } = useDialogContext();
|
|
776
|
+
if (asChild && React2.isValidElement(children)) {
|
|
777
|
+
const child = children;
|
|
778
|
+
return React2.cloneElement(child, {
|
|
779
|
+
...props,
|
|
780
|
+
"data-slot": "dialog-close",
|
|
781
|
+
onClick: (event) => {
|
|
782
|
+
child.props.onClick?.(event);
|
|
783
|
+
onClick?.(event);
|
|
784
|
+
if (!event.defaultPrevented) setOpen(false);
|
|
785
|
+
}
|
|
786
|
+
});
|
|
787
|
+
}
|
|
788
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
|
|
789
|
+
}
|
|
790
|
+
function DialogHeader({ className, ...props }) {
|
|
791
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
|
|
792
|
+
}
|
|
793
|
+
function DialogFooter({
|
|
794
|
+
className,
|
|
795
|
+
showCloseButton = false,
|
|
796
|
+
children,
|
|
797
|
+
...props
|
|
798
|
+
}) {
|
|
799
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
800
|
+
"div",
|
|
801
|
+
{
|
|
802
|
+
"data-slot": "dialog-footer",
|
|
803
|
+
className: cn(
|
|
804
|
+
"-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t border-border bg-muted/50 p-4 sm:flex-row sm:flex-wrap sm:justify-end",
|
|
805
|
+
className
|
|
806
|
+
),
|
|
807
|
+
...props,
|
|
808
|
+
children: [
|
|
809
|
+
children,
|
|
810
|
+
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(DialogClose, { variant: "outline", children: "Cerrar" }) : null
|
|
811
|
+
]
|
|
812
|
+
}
|
|
813
|
+
);
|
|
814
|
+
}
|
|
815
|
+
function DialogTitle({
|
|
816
|
+
className,
|
|
817
|
+
...props
|
|
818
|
+
}) {
|
|
819
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
820
|
+
import_react_aria_components3.Heading,
|
|
821
|
+
{
|
|
822
|
+
slot: "title",
|
|
823
|
+
"data-slot": "dialog-title",
|
|
824
|
+
className: cn("font-heading text-base leading-none font-medium", className),
|
|
825
|
+
...props
|
|
826
|
+
}
|
|
827
|
+
);
|
|
828
|
+
}
|
|
829
|
+
function DialogDescription({
|
|
830
|
+
className,
|
|
831
|
+
...props
|
|
832
|
+
}) {
|
|
833
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
834
|
+
import_react_aria_components3.Text,
|
|
835
|
+
{
|
|
836
|
+
slot: "description",
|
|
837
|
+
"data-slot": "dialog-description",
|
|
838
|
+
className: cn(
|
|
839
|
+
"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
|
|
840
|
+
className
|
|
841
|
+
),
|
|
842
|
+
...props
|
|
843
|
+
}
|
|
844
|
+
);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
// src/ui/alert-dialog/alert-dialog.tsx
|
|
848
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
622
849
|
function AlertDialog({ children, open, onOpenChange }) {
|
|
623
|
-
return /* @__PURE__ */ (0,
|
|
850
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Dialog, { open, onOpenChange, children });
|
|
624
851
|
}
|
|
625
852
|
function AlertDialogPortal({ children }) {
|
|
626
|
-
return /* @__PURE__ */ (0,
|
|
853
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogPortal, { children });
|
|
627
854
|
}
|
|
628
|
-
function AlertDialogTrigger({
|
|
629
|
-
|
|
630
|
-
|
|
855
|
+
function AlertDialogTrigger({
|
|
856
|
+
children,
|
|
857
|
+
...props
|
|
858
|
+
}) {
|
|
859
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogTrigger, { "data-slot": "alert-dialog-trigger", ...props, children });
|
|
631
860
|
}
|
|
632
|
-
function AlertDialogOverlay({
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
861
|
+
function AlertDialogOverlay({
|
|
862
|
+
className,
|
|
863
|
+
...props
|
|
864
|
+
}) {
|
|
865
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogOverlay, { "data-slot": "alert-dialog-overlay", className, ...props });
|
|
636
866
|
}
|
|
637
|
-
function AlertDialogContent({
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
867
|
+
function AlertDialogContent({
|
|
868
|
+
className,
|
|
869
|
+
size = "default",
|
|
870
|
+
children
|
|
871
|
+
}) {
|
|
872
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
873
|
+
DialogContent,
|
|
874
|
+
{
|
|
875
|
+
contentSlot: "alert-dialog-content",
|
|
876
|
+
overlaySlot: "alert-dialog-overlay",
|
|
877
|
+
role: "alertdialog",
|
|
878
|
+
showCloseButton: false,
|
|
879
|
+
className: cn(size === "sm" ? "sm:max-w-xs" : "sm:max-w-sm", className),
|
|
880
|
+
children
|
|
881
|
+
}
|
|
882
|
+
);
|
|
641
883
|
}
|
|
642
884
|
function AlertDialogHeader({ className, ...props }) {
|
|
643
|
-
return /* @__PURE__ */ (0,
|
|
885
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
886
|
+
DialogHeader,
|
|
887
|
+
{
|
|
888
|
+
"data-slot": "alert-dialog-header",
|
|
889
|
+
className: cn("flex flex-col gap-2 text-center sm:text-left", className),
|
|
890
|
+
...props
|
|
891
|
+
}
|
|
892
|
+
);
|
|
644
893
|
}
|
|
645
894
|
function AlertDialogFooter({ className, ...props }) {
|
|
646
|
-
return /* @__PURE__ */ (0,
|
|
895
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogFooter, { "data-slot": "alert-dialog-footer", className: cn(className), ...props });
|
|
647
896
|
}
|
|
648
|
-
function AlertDialogTitle({
|
|
649
|
-
|
|
897
|
+
function AlertDialogTitle({
|
|
898
|
+
className,
|
|
899
|
+
...props
|
|
900
|
+
}) {
|
|
901
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogTitle, { "data-slot": "alert-dialog-title", className: cn(className), ...props });
|
|
650
902
|
}
|
|
651
|
-
function AlertDialogDescription({
|
|
652
|
-
|
|
903
|
+
function AlertDialogDescription({
|
|
904
|
+
className,
|
|
905
|
+
...props
|
|
906
|
+
}) {
|
|
907
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogDescription, { "data-slot": "alert-dialog-description", className: cn(className), ...props });
|
|
653
908
|
}
|
|
654
909
|
function AlertDialogAction({ className, ...props }) {
|
|
655
|
-
return /* @__PURE__ */ (0,
|
|
910
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Button, { "data-slot": "alert-dialog-action", className: cn(className), ...props });
|
|
656
911
|
}
|
|
657
|
-
function AlertDialogCancel({
|
|
658
|
-
|
|
659
|
-
|
|
912
|
+
function AlertDialogCancel({
|
|
913
|
+
children = "Cancelar",
|
|
914
|
+
onClick,
|
|
915
|
+
...props
|
|
916
|
+
}) {
|
|
917
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DialogClose, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Button, { "data-slot": "alert-dialog-cancel", variant: "outline", onClick, ...props, children }) });
|
|
660
918
|
}
|
|
661
919
|
|
|
662
|
-
// src/ui/alert/alert.
|
|
920
|
+
// src/ui/alert/alert-variants.ts
|
|
663
921
|
var import_class_variance_authority3 = require("class-variance-authority");
|
|
664
|
-
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
665
922
|
var alertVariants = (0, import_class_variance_authority3.cva)(
|
|
666
923
|
"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",
|
|
667
924
|
{
|
|
@@ -679,8 +936,11 @@ var alertVariants = (0, import_class_variance_authority3.cva)(
|
|
|
679
936
|
}
|
|
680
937
|
}
|
|
681
938
|
);
|
|
939
|
+
|
|
940
|
+
// src/ui/alert/alert.tsx
|
|
941
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
682
942
|
function Alert({ className, variant, ...props }) {
|
|
683
|
-
return /* @__PURE__ */ (0,
|
|
943
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
684
944
|
"div",
|
|
685
945
|
{
|
|
686
946
|
"data-slot": "alert",
|
|
@@ -691,7 +951,7 @@ function Alert({ className, variant, ...props }) {
|
|
|
691
951
|
);
|
|
692
952
|
}
|
|
693
953
|
function AlertTitle({ className, ...props }) {
|
|
694
|
-
return /* @__PURE__ */ (0,
|
|
954
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
695
955
|
"div",
|
|
696
956
|
{
|
|
697
957
|
"data-slot": "alert-title",
|
|
@@ -704,7 +964,7 @@ function AlertTitle({ className, ...props }) {
|
|
|
704
964
|
);
|
|
705
965
|
}
|
|
706
966
|
function AlertDescription({ className, ...props }) {
|
|
707
|
-
return /* @__PURE__ */ (0,
|
|
967
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
708
968
|
"div",
|
|
709
969
|
{
|
|
710
970
|
"data-slot": "alert-description",
|
|
@@ -717,17 +977,13 @@ function AlertDescription({ className, ...props }) {
|
|
|
717
977
|
);
|
|
718
978
|
}
|
|
719
979
|
function AlertAction({ className, ...props }) {
|
|
720
|
-
return /* @__PURE__ */ (0,
|
|
980
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
|
|
721
981
|
}
|
|
722
982
|
|
|
723
983
|
// src/ui/app-shell/app-shell.tsx
|
|
724
|
-
var
|
|
725
|
-
function AppShell({
|
|
726
|
-
|
|
727
|
-
sidebarBreakpoint = "md",
|
|
728
|
-
...props
|
|
729
|
-
}) {
|
|
730
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
984
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
985
|
+
function AppShell({ className, sidebarBreakpoint = "md", ...props }) {
|
|
986
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
731
987
|
"div",
|
|
732
988
|
{
|
|
733
989
|
"data-slot": "app-shell",
|
|
@@ -738,7 +994,7 @@ function AppShell({
|
|
|
738
994
|
);
|
|
739
995
|
}
|
|
740
996
|
function AppShellSidebar({ className, ...props }) {
|
|
741
|
-
return /* @__PURE__ */ (0,
|
|
997
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
742
998
|
"aside",
|
|
743
999
|
{
|
|
744
1000
|
"data-slot": "app-shell-sidebar",
|
|
@@ -748,27 +1004,27 @@ function AppShellSidebar({ className, ...props }) {
|
|
|
748
1004
|
);
|
|
749
1005
|
}
|
|
750
1006
|
function AppShellMain({ className, ...props }) {
|
|
751
|
-
return /* @__PURE__ */ (0,
|
|
1007
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
|
|
752
1008
|
}
|
|
753
1009
|
function AppShellHeader({ className, ...props }) {
|
|
754
|
-
return /* @__PURE__ */ (0,
|
|
1010
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
755
1011
|
"header",
|
|
756
1012
|
{
|
|
757
1013
|
"data-slot": "app-shell-header",
|
|
758
1014
|
className: cn("border-b border-border bg-background px-4", className),
|
|
759
1015
|
...props
|
|
760
1016
|
}
|
|
761
|
-
);
|
|
762
|
-
}
|
|
763
|
-
function AppShellMobileHeader({
|
|
764
|
-
|
|
765
|
-
...props
|
|
766
|
-
}) {
|
|
767
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1017
|
+
);
|
|
1018
|
+
}
|
|
1019
|
+
function AppShellMobileHeader({ className, ...props }) {
|
|
1020
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
768
1021
|
"header",
|
|
769
1022
|
{
|
|
770
1023
|
"data-slot": "app-shell-mobile-header",
|
|
771
|
-
className: cn(
|
|
1024
|
+
className: cn(
|
|
1025
|
+
"h-14 shrink-0 items-center gap-2 border-b border-border bg-background px-3",
|
|
1026
|
+
className
|
|
1027
|
+
),
|
|
772
1028
|
...props
|
|
773
1029
|
}
|
|
774
1030
|
);
|
|
@@ -780,7 +1036,7 @@ function AppShellContent({
|
|
|
780
1036
|
scrollable = true,
|
|
781
1037
|
...props
|
|
782
1038
|
}) {
|
|
783
|
-
return /* @__PURE__ */ (0,
|
|
1039
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
784
1040
|
"div",
|
|
785
1041
|
{
|
|
786
1042
|
"data-slot": "app-shell-content",
|
|
@@ -795,14 +1051,38 @@ function AppShellContent({
|
|
|
795
1051
|
|
|
796
1052
|
// src/ui/avatar/avatar.tsx
|
|
797
1053
|
var import_react5 = require("react");
|
|
798
|
-
var
|
|
799
|
-
var sizes = {
|
|
1054
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
1055
|
+
var sizes = {
|
|
1056
|
+
xs: "size-5 text-[10px]",
|
|
1057
|
+
sm: "size-6 text-xs",
|
|
1058
|
+
default: "size-8 text-sm",
|
|
1059
|
+
lg: "size-10 text-base"
|
|
1060
|
+
};
|
|
800
1061
|
var AvatarContext = (0, import_react5.createContext)(null);
|
|
801
1062
|
function Avatar({ className, size = "default", children, ...props }) {
|
|
802
1063
|
const [status, setStatus] = (0, import_react5.useState)("idle");
|
|
803
|
-
return /* @__PURE__ */ (0,
|
|
1064
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(AvatarContext.Provider, { value: { status, setStatus }, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1065
|
+
"div",
|
|
1066
|
+
{
|
|
1067
|
+
"data-slot": "avatar",
|
|
1068
|
+
"data-size": size,
|
|
1069
|
+
className: cn(
|
|
1070
|
+
"group/avatar relative flex shrink-0 overflow-hidden rounded-full bg-muted text-muted-foreground",
|
|
1071
|
+
sizes[size],
|
|
1072
|
+
className
|
|
1073
|
+
),
|
|
1074
|
+
...props,
|
|
1075
|
+
children
|
|
1076
|
+
}
|
|
1077
|
+
) });
|
|
804
1078
|
}
|
|
805
|
-
function AvatarImage({
|
|
1079
|
+
function AvatarImage({
|
|
1080
|
+
className,
|
|
1081
|
+
src,
|
|
1082
|
+
onError,
|
|
1083
|
+
onLoad,
|
|
1084
|
+
...props
|
|
1085
|
+
}) {
|
|
806
1086
|
const avatar = (0, import_react5.useContext)(AvatarContext);
|
|
807
1087
|
const [failed, setFailed] = (0, import_react5.useState)(false);
|
|
808
1088
|
(0, import_react5.useEffect)(() => {
|
|
@@ -810,34 +1090,83 @@ function AvatarImage({ className, src, onError, onLoad, ...props }) {
|
|
|
810
1090
|
avatar?.setStatus(src ? "loading" : "idle");
|
|
811
1091
|
}, [avatar?.setStatus, src]);
|
|
812
1092
|
if (failed || avatar?.status === "error") return null;
|
|
813
|
-
return /* @__PURE__ */ (0,
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
1093
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1094
|
+
"img",
|
|
1095
|
+
{
|
|
1096
|
+
"data-slot": "avatar-image",
|
|
1097
|
+
src,
|
|
1098
|
+
alt: "",
|
|
1099
|
+
className: cn("aspect-square size-full object-cover", className),
|
|
1100
|
+
onLoad: (event) => {
|
|
1101
|
+
avatar?.setStatus("loaded");
|
|
1102
|
+
onLoad?.(event);
|
|
1103
|
+
},
|
|
1104
|
+
onError: (event) => {
|
|
1105
|
+
setFailed(true);
|
|
1106
|
+
avatar?.setStatus("error");
|
|
1107
|
+
onError?.(event);
|
|
1108
|
+
},
|
|
1109
|
+
...props
|
|
1110
|
+
}
|
|
1111
|
+
);
|
|
821
1112
|
}
|
|
822
1113
|
function AvatarFallback({ className, ...props }) {
|
|
823
1114
|
const avatar = (0, import_react5.useContext)(AvatarContext);
|
|
824
1115
|
if (avatar?.status === "loaded") return null;
|
|
825
|
-
return /* @__PURE__ */ (0,
|
|
1116
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1117
|
+
"span",
|
|
1118
|
+
{
|
|
1119
|
+
"data-slot": "avatar-fallback",
|
|
1120
|
+
className: cn("flex size-full items-center justify-center font-medium", className),
|
|
1121
|
+
...props
|
|
1122
|
+
}
|
|
1123
|
+
);
|
|
826
1124
|
}
|
|
827
1125
|
function AvatarBadge({ className, ...props }) {
|
|
828
|
-
return /* @__PURE__ */ (0,
|
|
1126
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1127
|
+
"span",
|
|
1128
|
+
{
|
|
1129
|
+
"data-slot": "avatar-badge",
|
|
1130
|
+
className: cn(
|
|
1131
|
+
"absolute right-0 bottom-0 size-2.5 rounded-full bg-success ring-2 ring-background",
|
|
1132
|
+
className
|
|
1133
|
+
),
|
|
1134
|
+
...props
|
|
1135
|
+
}
|
|
1136
|
+
);
|
|
829
1137
|
}
|
|
830
1138
|
function AvatarGroup({ className, ...props }) {
|
|
831
|
-
return /* @__PURE__ */ (0,
|
|
1139
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1140
|
+
"div",
|
|
1141
|
+
{
|
|
1142
|
+
"data-slot": "avatar-group",
|
|
1143
|
+
className: cn(
|
|
1144
|
+
"flex -space-x-2 [&>[data-slot=avatar]]:ring-2 [&>[data-slot=avatar]]:ring-background",
|
|
1145
|
+
className
|
|
1146
|
+
),
|
|
1147
|
+
...props
|
|
1148
|
+
}
|
|
1149
|
+
);
|
|
832
1150
|
}
|
|
833
1151
|
function AvatarGroupCount({ className, ...props }) {
|
|
834
|
-
return /* @__PURE__ */ (0,
|
|
1152
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1153
|
+
"span",
|
|
1154
|
+
{
|
|
1155
|
+
"data-slot": "avatar-group-count",
|
|
1156
|
+
className: cn(
|
|
1157
|
+
"flex size-8 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground ring-2 ring-background",
|
|
1158
|
+
className
|
|
1159
|
+
),
|
|
1160
|
+
...props
|
|
1161
|
+
}
|
|
1162
|
+
);
|
|
835
1163
|
}
|
|
836
1164
|
|
|
837
1165
|
// src/ui/badge/badge.tsx
|
|
1166
|
+
var import_react_aria_components5 = require("react-aria-components");
|
|
1167
|
+
|
|
1168
|
+
// src/ui/badge/badge-variants.ts
|
|
838
1169
|
var import_class_variance_authority4 = require("class-variance-authority");
|
|
839
|
-
var import_react_aria_components4 = require("react-aria-components");
|
|
840
|
-
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
841
1170
|
var badgeVariants = (0, import_class_variance_authority4.cva)(
|
|
842
1171
|
"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",
|
|
843
1172
|
{
|
|
@@ -859,8 +1188,11 @@ var badgeVariants = (0, import_class_variance_authority4.cva)(
|
|
|
859
1188
|
defaultVariants: { variant: "default" }
|
|
860
1189
|
}
|
|
861
1190
|
);
|
|
1191
|
+
|
|
1192
|
+
// src/ui/badge/badge.tsx
|
|
1193
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
862
1194
|
function Badge({ className, variant, ...props }) {
|
|
863
|
-
return /* @__PURE__ */ (0,
|
|
1195
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
864
1196
|
"span",
|
|
865
1197
|
{
|
|
866
1198
|
"data-slot": "badge",
|
|
@@ -871,8 +1203,8 @@ function Badge({ className, variant, ...props }) {
|
|
|
871
1203
|
);
|
|
872
1204
|
}
|
|
873
1205
|
function BadgeLink({ className, variant, ...props }) {
|
|
874
|
-
return /* @__PURE__ */ (0,
|
|
875
|
-
|
|
1206
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1207
|
+
import_react_aria_components5.Link,
|
|
876
1208
|
{
|
|
877
1209
|
"data-slot": "badge",
|
|
878
1210
|
"data-variant": variant ?? "default",
|
|
@@ -883,33 +1215,72 @@ function BadgeLink({ className, variant, ...props }) {
|
|
|
883
1215
|
}
|
|
884
1216
|
|
|
885
1217
|
// src/ui/breadcrumb/breadcrumb.tsx
|
|
886
|
-
var
|
|
887
|
-
var
|
|
1218
|
+
var import_react_aria_components6 = require("react-aria-components");
|
|
1219
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
888
1220
|
function Breadcrumbs({ className, ...props }) {
|
|
889
|
-
return /* @__PURE__ */ (0,
|
|
1221
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1222
|
+
import_react_aria_components6.Breadcrumbs,
|
|
1223
|
+
{
|
|
1224
|
+
"data-slot": "breadcrumbs",
|
|
1225
|
+
className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className),
|
|
1226
|
+
...props
|
|
1227
|
+
}
|
|
1228
|
+
);
|
|
890
1229
|
}
|
|
891
1230
|
function Breadcrumb({ className, ...props }) {
|
|
892
|
-
return /* @__PURE__ */ (0,
|
|
1231
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1232
|
+
import_react_aria_components6.Breadcrumb,
|
|
1233
|
+
{
|
|
1234
|
+
"data-slot": "breadcrumb",
|
|
1235
|
+
className: cn("inline-flex items-center gap-1.5", className),
|
|
1236
|
+
...props
|
|
1237
|
+
}
|
|
1238
|
+
);
|
|
893
1239
|
}
|
|
894
1240
|
function BreadcrumbLink({ className, ...props }) {
|
|
895
|
-
return /* @__PURE__ */ (0,
|
|
1241
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1242
|
+
import_react_aria_components6.Link,
|
|
1243
|
+
{
|
|
1244
|
+
"data-slot": "breadcrumb-link",
|
|
1245
|
+
className: cn("transition-colors hover:text-foreground", className),
|
|
1246
|
+
...props
|
|
1247
|
+
}
|
|
1248
|
+
);
|
|
896
1249
|
}
|
|
897
1250
|
function BreadcrumbPage({ className, ...props }) {
|
|
898
|
-
return /* @__PURE__ */ (0,
|
|
1251
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1252
|
+
"span",
|
|
1253
|
+
{
|
|
1254
|
+
"data-slot": "breadcrumb-page",
|
|
1255
|
+
"aria-current": "page",
|
|
1256
|
+
className: cn("font-medium text-foreground", className),
|
|
1257
|
+
...props
|
|
1258
|
+
}
|
|
1259
|
+
);
|
|
899
1260
|
}
|
|
900
|
-
function BreadcrumbSeparator({
|
|
901
|
-
|
|
1261
|
+
function BreadcrumbSeparator({
|
|
1262
|
+
children = "/",
|
|
1263
|
+
className,
|
|
1264
|
+
...props
|
|
1265
|
+
}) {
|
|
1266
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1267
|
+
"span",
|
|
1268
|
+
{
|
|
1269
|
+
"data-slot": "breadcrumb-separator",
|
|
1270
|
+
"aria-hidden": "true",
|
|
1271
|
+
className: cn("text-muted-foreground/60", className),
|
|
1272
|
+
...props,
|
|
1273
|
+
children
|
|
1274
|
+
}
|
|
1275
|
+
);
|
|
902
1276
|
}
|
|
903
1277
|
|
|
904
|
-
// src/ui/button-group/button-group.tsx
|
|
905
|
-
var import_class_variance_authority5 = require("class-variance-authority");
|
|
906
|
-
|
|
907
1278
|
// src/ui/separator/separator.tsx
|
|
908
|
-
var
|
|
909
|
-
var
|
|
1279
|
+
var import_react_aria_components7 = require("react-aria-components");
|
|
1280
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
910
1281
|
function Separator({ className, orientation = "horizontal", ...props }) {
|
|
911
|
-
return /* @__PURE__ */ (0,
|
|
912
|
-
|
|
1282
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
1283
|
+
import_react_aria_components7.Separator,
|
|
913
1284
|
{
|
|
914
1285
|
"data-slot": "separator",
|
|
915
1286
|
orientation,
|
|
@@ -922,11 +1293,8 @@ function Separator({ className, orientation = "horizontal", ...props }) {
|
|
|
922
1293
|
);
|
|
923
1294
|
}
|
|
924
1295
|
|
|
925
|
-
// src/ui/button-group/button-group.
|
|
926
|
-
var
|
|
927
|
-
// biome-ignore lint/a11y/useSemanticElements: fieldset would impose form semantics on a generic action group.
|
|
928
|
-
require("react/jsx-runtime")
|
|
929
|
-
);
|
|
1296
|
+
// src/ui/button-group/button-group-variants.ts
|
|
1297
|
+
var import_class_variance_authority5 = require("class-variance-authority");
|
|
930
1298
|
var buttonGroupVariants = (0, import_class_variance_authority5.cva)(
|
|
931
1299
|
"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",
|
|
932
1300
|
{
|
|
@@ -941,12 +1309,18 @@ var buttonGroupVariants = (0, import_class_variance_authority5.cva)(
|
|
|
941
1309
|
}
|
|
942
1310
|
}
|
|
943
1311
|
);
|
|
1312
|
+
|
|
1313
|
+
// src/ui/button-group/button-group.tsx
|
|
1314
|
+
var import_jsx_runtime11 = (
|
|
1315
|
+
// biome-ignore lint/a11y/useSemanticElements: fieldset would impose form semantics on a generic action group.
|
|
1316
|
+
require("react/jsx-runtime")
|
|
1317
|
+
);
|
|
944
1318
|
function ButtonGroup({
|
|
945
1319
|
className,
|
|
946
1320
|
orientation,
|
|
947
1321
|
...props
|
|
948
1322
|
}) {
|
|
949
|
-
return /* @__PURE__ */ (0,
|
|
1323
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
950
1324
|
"div",
|
|
951
1325
|
{
|
|
952
1326
|
role: "group",
|
|
@@ -973,7 +1347,7 @@ function ButtonGroupText({
|
|
|
973
1347
|
};
|
|
974
1348
|
return render(renderProps);
|
|
975
1349
|
}
|
|
976
|
-
return /* @__PURE__ */ (0,
|
|
1350
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
977
1351
|
"div",
|
|
978
1352
|
{
|
|
979
1353
|
"data-slot": "button-group-text",
|
|
@@ -990,7 +1364,7 @@ function ButtonGroupSeparator({
|
|
|
990
1364
|
orientation = "vertical",
|
|
991
1365
|
...props
|
|
992
1366
|
}) {
|
|
993
|
-
return /* @__PURE__ */ (0,
|
|
1367
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
994
1368
|
Separator,
|
|
995
1369
|
{
|
|
996
1370
|
"data-slot": "button-group-separator",
|
|
@@ -1005,9 +1379,9 @@ function ButtonGroupSeparator({
|
|
|
1005
1379
|
}
|
|
1006
1380
|
|
|
1007
1381
|
// src/ui/card/card.tsx
|
|
1008
|
-
var
|
|
1382
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1009
1383
|
function Card({ className, size = "default", ...props }) {
|
|
1010
|
-
return /* @__PURE__ */ (0,
|
|
1384
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1011
1385
|
"div",
|
|
1012
1386
|
{
|
|
1013
1387
|
"data-slot": "card",
|
|
@@ -1021,7 +1395,7 @@ function Card({ className, size = "default", ...props }) {
|
|
|
1021
1395
|
);
|
|
1022
1396
|
}
|
|
1023
1397
|
function CardHeader({ className, ...props }) {
|
|
1024
|
-
return /* @__PURE__ */ (0,
|
|
1398
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1025
1399
|
"div",
|
|
1026
1400
|
{
|
|
1027
1401
|
"data-slot": "card-header",
|
|
@@ -1034,7 +1408,7 @@ function CardHeader({ className, ...props }) {
|
|
|
1034
1408
|
);
|
|
1035
1409
|
}
|
|
1036
1410
|
function CardTitle({ className, ...props }) {
|
|
1037
|
-
return /* @__PURE__ */ (0,
|
|
1411
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1038
1412
|
"div",
|
|
1039
1413
|
{
|
|
1040
1414
|
"data-slot": "card-title",
|
|
@@ -1047,7 +1421,7 @@ function CardTitle({ className, ...props }) {
|
|
|
1047
1421
|
);
|
|
1048
1422
|
}
|
|
1049
1423
|
function CardDescription({ className, ...props }) {
|
|
1050
|
-
return /* @__PURE__ */ (0,
|
|
1424
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1051
1425
|
"div",
|
|
1052
1426
|
{
|
|
1053
1427
|
"data-slot": "card-description",
|
|
@@ -1057,7 +1431,7 @@ function CardDescription({ className, ...props }) {
|
|
|
1057
1431
|
);
|
|
1058
1432
|
}
|
|
1059
1433
|
function CardAction({ className, ...props }) {
|
|
1060
|
-
return /* @__PURE__ */ (0,
|
|
1434
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1061
1435
|
"div",
|
|
1062
1436
|
{
|
|
1063
1437
|
"data-slot": "card-action",
|
|
@@ -1067,10 +1441,10 @@ function CardAction({ className, ...props }) {
|
|
|
1067
1441
|
);
|
|
1068
1442
|
}
|
|
1069
1443
|
function CardContent({ className, ...props }) {
|
|
1070
|
-
return /* @__PURE__ */ (0,
|
|
1444
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props });
|
|
1071
1445
|
}
|
|
1072
1446
|
function CardFooter({ className, ...props }) {
|
|
1073
|
-
return /* @__PURE__ */ (0,
|
|
1447
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1074
1448
|
"div",
|
|
1075
1449
|
{
|
|
1076
1450
|
"data-slot": "card-footer",
|
|
@@ -1084,12 +1458,12 @@ function CardFooter({ className, ...props }) {
|
|
|
1084
1458
|
}
|
|
1085
1459
|
|
|
1086
1460
|
// src/ui/checkbox/checkbox.tsx
|
|
1087
|
-
var
|
|
1088
|
-
var
|
|
1089
|
-
var
|
|
1461
|
+
var import_lucide_react3 = require("lucide-react");
|
|
1462
|
+
var import_react_aria_components8 = require("react-aria-components");
|
|
1463
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1090
1464
|
function Checkbox({ className, children, ...props }) {
|
|
1091
|
-
return /* @__PURE__ */ (0,
|
|
1092
|
-
|
|
1465
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1466
|
+
import_react_aria_components8.Checkbox,
|
|
1093
1467
|
{
|
|
1094
1468
|
"data-slot": "checkbox",
|
|
1095
1469
|
className: cn(
|
|
@@ -1097,13 +1471,13 @@ function Checkbox({ className, children, ...props }) {
|
|
|
1097
1471
|
className
|
|
1098
1472
|
),
|
|
1099
1473
|
...props,
|
|
1100
|
-
children: (state) => /* @__PURE__ */ (0,
|
|
1101
|
-
/* @__PURE__ */ (0,
|
|
1474
|
+
children: (state) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
|
|
1475
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1102
1476
|
"span",
|
|
1103
1477
|
{
|
|
1104
1478
|
"aria-hidden": "true",
|
|
1105
|
-
className: "
|
|
1106
|
-
children: /* @__PURE__ */ (0,
|
|
1479
|
+
className: "border-border bg-background text-primary-foreground group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-ring/50 grid size-4 place-items-center rounded border transition-colors group-data-focus-visible:ring-3",
|
|
1480
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" })
|
|
1107
1481
|
}
|
|
1108
1482
|
),
|
|
1109
1483
|
typeof children === "function" ? children(state) : children
|
|
@@ -1113,11 +1487,11 @@ function Checkbox({ className, children, ...props }) {
|
|
|
1113
1487
|
}
|
|
1114
1488
|
|
|
1115
1489
|
// src/ui/collapsible/collapsible.tsx
|
|
1116
|
-
var
|
|
1117
|
-
var
|
|
1118
|
-
var CollapsibleContext =
|
|
1490
|
+
var React4 = __toESM(require("react"), 1);
|
|
1491
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1492
|
+
var CollapsibleContext = React4.createContext(null);
|
|
1119
1493
|
function useCollapsibleContext() {
|
|
1120
|
-
const context =
|
|
1494
|
+
const context = React4.useContext(CollapsibleContext);
|
|
1121
1495
|
if (!context) throw new Error("Collapsible components must be rendered within Collapsible.");
|
|
1122
1496
|
return context;
|
|
1123
1497
|
}
|
|
@@ -1128,27 +1502,32 @@ function Collapsible({
|
|
|
1128
1502
|
open: controlledOpen,
|
|
1129
1503
|
...props
|
|
1130
1504
|
}) {
|
|
1131
|
-
const [uncontrolledOpen, setUncontrolledOpen] =
|
|
1132
|
-
const contentId =
|
|
1505
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React4.useState(defaultOpen);
|
|
1506
|
+
const contentId = React4.useId();
|
|
1133
1507
|
const open = controlledOpen ?? uncontrolledOpen;
|
|
1134
|
-
const setOpen =
|
|
1508
|
+
const setOpen = React4.useCallback(
|
|
1135
1509
|
(nextOpen) => {
|
|
1136
1510
|
if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
|
|
1137
1511
|
onOpenChange?.(nextOpen);
|
|
1138
1512
|
},
|
|
1139
1513
|
[controlledOpen, onOpenChange]
|
|
1140
1514
|
);
|
|
1141
|
-
return /* @__PURE__ */ (0,
|
|
1515
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(CollapsibleContext.Provider, { value: { contentId, open, setOpen }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { "data-slot": "collapsible", "data-state": open ? "open" : "closed", ...props, children }) });
|
|
1142
1516
|
}
|
|
1143
|
-
function CollapsibleTrigger({
|
|
1517
|
+
function CollapsibleTrigger({
|
|
1518
|
+
asChild = false,
|
|
1519
|
+
children,
|
|
1520
|
+
onClick,
|
|
1521
|
+
...props
|
|
1522
|
+
}) {
|
|
1144
1523
|
const { contentId, open, setOpen } = useCollapsibleContext();
|
|
1145
1524
|
const handleClick = (event) => {
|
|
1146
1525
|
onClick?.(event);
|
|
1147
1526
|
if (!event.defaultPrevented) setOpen(!open);
|
|
1148
1527
|
};
|
|
1149
|
-
if (asChild &&
|
|
1528
|
+
if (asChild && React4.isValidElement(children)) {
|
|
1150
1529
|
const child = children;
|
|
1151
|
-
return
|
|
1530
|
+
return React4.cloneElement(child, {
|
|
1152
1531
|
...props,
|
|
1153
1532
|
"aria-controls": contentId,
|
|
1154
1533
|
"aria-expanded": open,
|
|
@@ -1160,7 +1539,7 @@ function CollapsibleTrigger({ asChild = false, children, onClick, ...props }) {
|
|
|
1160
1539
|
}
|
|
1161
1540
|
});
|
|
1162
1541
|
}
|
|
1163
|
-
return /* @__PURE__ */ (0,
|
|
1542
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1164
1543
|
"button",
|
|
1165
1544
|
{
|
|
1166
1545
|
type: "button",
|
|
@@ -1177,30 +1556,108 @@ function CollapsibleTrigger({ asChild = false, children, onClick, ...props }) {
|
|
|
1177
1556
|
function CollapsibleContent({ children, ...props }) {
|
|
1178
1557
|
const { contentId, open } = useCollapsibleContext();
|
|
1179
1558
|
if (!open) return null;
|
|
1180
|
-
return /* @__PURE__ */ (0,
|
|
1559
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { id: contentId, "data-slot": "collapsible-content", "data-state": "open", ...props, children });
|
|
1181
1560
|
}
|
|
1182
1561
|
|
|
1183
1562
|
// src/ui/combobox/combobox.tsx
|
|
1184
1563
|
var import_react6 = require("react");
|
|
1185
|
-
var
|
|
1186
|
-
var
|
|
1187
|
-
var Combobox =
|
|
1564
|
+
var import_react_aria_components9 = require("react-aria-components");
|
|
1565
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1566
|
+
var Combobox = import_react_aria_components9.ComboBox;
|
|
1188
1567
|
function ComboboxInput({ className, ...props }) {
|
|
1189
|
-
return /* @__PURE__ */ (0,
|
|
1568
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1569
|
+
import_react_aria_components9.Input,
|
|
1570
|
+
{
|
|
1571
|
+
"data-slot": "combobox-input",
|
|
1572
|
+
className: cn(
|
|
1573
|
+
"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",
|
|
1574
|
+
className
|
|
1575
|
+
),
|
|
1576
|
+
...props
|
|
1577
|
+
}
|
|
1578
|
+
);
|
|
1190
1579
|
}
|
|
1191
1580
|
function ComboboxContent({ className, ...props }) {
|
|
1192
|
-
return /* @__PURE__ */ (0,
|
|
1581
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1582
|
+
import_react_aria_components9.Popover,
|
|
1583
|
+
{
|
|
1584
|
+
"data-slot": "combobox-content",
|
|
1585
|
+
className: cn(
|
|
1586
|
+
"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",
|
|
1587
|
+
className
|
|
1588
|
+
),
|
|
1589
|
+
...props
|
|
1590
|
+
}
|
|
1591
|
+
);
|
|
1193
1592
|
}
|
|
1194
|
-
function ComboboxList({
|
|
1195
|
-
|
|
1593
|
+
function ComboboxList({
|
|
1594
|
+
className,
|
|
1595
|
+
emptyState,
|
|
1596
|
+
...props
|
|
1597
|
+
}) {
|
|
1598
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1599
|
+
import_react_aria_components9.ListBox,
|
|
1600
|
+
{
|
|
1601
|
+
"data-slot": "combobox-list",
|
|
1602
|
+
className: cn("max-h-64 overflow-y-auto", className),
|
|
1603
|
+
renderEmptyState: emptyState ? () => emptyState : void 0,
|
|
1604
|
+
...props
|
|
1605
|
+
}
|
|
1606
|
+
);
|
|
1196
1607
|
}
|
|
1197
|
-
function ComboboxItem({
|
|
1198
|
-
|
|
1608
|
+
function ComboboxItem({
|
|
1609
|
+
className,
|
|
1610
|
+
children,
|
|
1611
|
+
...props
|
|
1612
|
+
}) {
|
|
1613
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1614
|
+
import_react_aria_components9.ListBoxItem,
|
|
1615
|
+
{
|
|
1616
|
+
"data-slot": "combobox-item",
|
|
1617
|
+
className: cn(
|
|
1618
|
+
"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",
|
|
1619
|
+
className
|
|
1620
|
+
),
|
|
1621
|
+
...props,
|
|
1622
|
+
children
|
|
1623
|
+
}
|
|
1624
|
+
);
|
|
1199
1625
|
}
|
|
1200
|
-
function HighlightMatch({
|
|
1201
|
-
|
|
1626
|
+
function HighlightMatch({
|
|
1627
|
+
text,
|
|
1628
|
+
query,
|
|
1629
|
+
className
|
|
1630
|
+
}) {
|
|
1631
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className, children: getTextMatchParts(text, query).map(
|
|
1632
|
+
(part, index) => part.match ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1633
|
+
"mark",
|
|
1634
|
+
{
|
|
1635
|
+
className: "bg-accent text-accent-foreground rounded px-0.5",
|
|
1636
|
+
children: part.text
|
|
1637
|
+
},
|
|
1638
|
+
`${part.text}-${index}`
|
|
1639
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react6.Fragment, { children: part.text }, `${part.text}-${index}`)
|
|
1640
|
+
) });
|
|
1202
1641
|
}
|
|
1203
|
-
function AutocompleteCombobox({
|
|
1642
|
+
function AutocompleteCombobox({
|
|
1643
|
+
items,
|
|
1644
|
+
getItemKey,
|
|
1645
|
+
getItemLabel,
|
|
1646
|
+
renderItem,
|
|
1647
|
+
inputValue: controlledInputValue,
|
|
1648
|
+
onInputChange,
|
|
1649
|
+
selectedKey,
|
|
1650
|
+
onSelectionChange,
|
|
1651
|
+
label,
|
|
1652
|
+
description,
|
|
1653
|
+
errorMessage,
|
|
1654
|
+
emptyState = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-muted-foreground px-3 py-7 text-center text-sm", children: "No hay resultados." }),
|
|
1655
|
+
suggestion = true,
|
|
1656
|
+
placeholder,
|
|
1657
|
+
className,
|
|
1658
|
+
onKeyDown: _onKeyDown,
|
|
1659
|
+
...props
|
|
1660
|
+
}) {
|
|
1204
1661
|
const [internalInputValue, setInternalInputValue] = (0, import_react6.useState)("");
|
|
1205
1662
|
const inputValue = controlledInputValue ?? internalInputValue;
|
|
1206
1663
|
const setInputValue = (value) => {
|
|
@@ -1208,8 +1665,16 @@ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inp
|
|
|
1208
1665
|
onInputChange?.(value);
|
|
1209
1666
|
};
|
|
1210
1667
|
const normalizedQuery = inputValue.trim().toLocaleLowerCase();
|
|
1211
|
-
const filteredItems = (0, import_react6.useMemo)(
|
|
1212
|
-
|
|
1668
|
+
const filteredItems = (0, import_react6.useMemo)(
|
|
1669
|
+
() => normalizedQuery ? items.filter((item) => getItemLabel(item).toLocaleLowerCase().includes(normalizedQuery)) : [...items],
|
|
1670
|
+
[getItemLabel, items, normalizedQuery]
|
|
1671
|
+
);
|
|
1672
|
+
const suggestedItem = (0, import_react6.useMemo)(
|
|
1673
|
+
() => !suggestion || !normalizedQuery ? void 0 : items.find(
|
|
1674
|
+
(item) => getItemLabel(item).toLocaleLowerCase().startsWith(normalizedQuery) && getItemLabel(item).length > inputValue.length
|
|
1675
|
+
),
|
|
1676
|
+
[getItemLabel, inputValue.length, items, normalizedQuery, suggestion]
|
|
1677
|
+
);
|
|
1213
1678
|
const suggestionLabel = suggestedItem ? getItemLabel(suggestedItem) : void 0;
|
|
1214
1679
|
const acceptSuggestion = () => {
|
|
1215
1680
|
if (!suggestedItem || !suggestionLabel) return false;
|
|
@@ -1220,124 +1685,109 @@ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inp
|
|
|
1220
1685
|
const handleKeyDown = (event) => {
|
|
1221
1686
|
if ((event.key === "Tab" || event.key === "Enter") && acceptSuggestion()) event.preventDefault();
|
|
1222
1687
|
};
|
|
1223
|
-
return /* @__PURE__ */ (0,
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1688
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
1689
|
+
import_react_aria_components9.ComboBox,
|
|
1690
|
+
{
|
|
1691
|
+
...props,
|
|
1692
|
+
className: cn("group/combobox flex w-full flex-col gap-1.5", className),
|
|
1693
|
+
items: filteredItems,
|
|
1694
|
+
selectedKey,
|
|
1695
|
+
inputValue,
|
|
1696
|
+
onInputChange: setInputValue,
|
|
1697
|
+
onSelectionChange: (key) => {
|
|
1698
|
+
const item = filteredItems.find(
|
|
1699
|
+
(candidate) => String(getItemKey(candidate)) === String(key)
|
|
1700
|
+
);
|
|
1701
|
+
if (item) setInputValue(getItemLabel(item));
|
|
1702
|
+
onSelectionChange?.(key, item);
|
|
1703
|
+
},
|
|
1704
|
+
children: [
|
|
1705
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.Label, { className: "text-foreground text-sm font-medium", children: label }),
|
|
1706
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "relative", children: [
|
|
1707
|
+
suggestionLabel && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
1708
|
+
"span",
|
|
1709
|
+
{
|
|
1710
|
+
"aria-hidden": "true",
|
|
1711
|
+
className: "text-muted-foreground/60 pointer-events-none absolute inset-y-0 left-2.5 z-0 flex items-center text-sm whitespace-pre",
|
|
1712
|
+
children: [
|
|
1713
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-transparent", children: inputValue }),
|
|
1714
|
+
suggestionLabel.slice(inputValue.length)
|
|
1715
|
+
]
|
|
1716
|
+
}
|
|
1717
|
+
),
|
|
1718
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1719
|
+
ComboboxInput,
|
|
1720
|
+
{
|
|
1721
|
+
"aria-autocomplete": suggestionLabel ? "both" : "list",
|
|
1722
|
+
placeholder,
|
|
1723
|
+
onKeyDown: handleKeyDown,
|
|
1724
|
+
className: "relative z-10 bg-transparent"
|
|
1725
|
+
}
|
|
1726
|
+
)
|
|
1727
|
+
] }),
|
|
1728
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.Text, { slot: "description", className: "text-muted-foreground text-xs", children: description }),
|
|
1729
|
+
errorMessage && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.FieldError, { className: "text-destructive text-xs", children: errorMessage }),
|
|
1730
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ComboboxContent, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ComboboxList, { emptyState, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ComboboxItem, { id: getItemKey(item), textValue: getItemLabel(item), children: renderItem ? renderItem(item, inputValue) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(HighlightMatch, { text: getItemLabel(item), query: inputValue }) }) }) })
|
|
1731
|
+
]
|
|
1732
|
+
}
|
|
1733
|
+
);
|
|
1240
1734
|
}
|
|
1241
1735
|
|
|
1242
1736
|
// src/ui/command/command.tsx
|
|
1243
|
-
var
|
|
1244
|
-
var
|
|
1737
|
+
var import_react_aria_components10 = require("react-aria-components");
|
|
1738
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1245
1739
|
function Command({ className, ...props }) {
|
|
1246
|
-
return /* @__PURE__ */ (0,
|
|
1740
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.ComboBox, { "data-slot": "command", className: cn("w-full", className), ...props });
|
|
1247
1741
|
}
|
|
1248
1742
|
function CommandInput({ className, ...props }) {
|
|
1249
|
-
return /* @__PURE__ */ (0,
|
|
1743
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1744
|
+
import_react_aria_components10.Input,
|
|
1745
|
+
{
|
|
1746
|
+
"data-slot": "command-input",
|
|
1747
|
+
className: cn(
|
|
1748
|
+
"h-9 w-full border-0 bg-transparent px-3 text-sm text-foreground outline-none placeholder:text-muted-foreground",
|
|
1749
|
+
className
|
|
1750
|
+
),
|
|
1751
|
+
...props
|
|
1752
|
+
}
|
|
1753
|
+
);
|
|
1250
1754
|
}
|
|
1251
1755
|
function CommandContent({ className, ...props }) {
|
|
1252
|
-
return /* @__PURE__ */ (0,
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1756
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1757
|
+
import_react_aria_components10.Popover,
|
|
1758
|
+
{
|
|
1759
|
+
"data-slot": "command-content",
|
|
1760
|
+
className: cn(
|
|
1761
|
+
"w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 shadow-lg outline-none",
|
|
1762
|
+
className
|
|
1763
|
+
),
|
|
1764
|
+
...props
|
|
1765
|
+
}
|
|
1766
|
+
);
|
|
1259
1767
|
}
|
|
1260
|
-
|
|
1261
|
-
// src/ui/modal-dialog/modal-dialog.tsx
|
|
1262
|
-
var import_lucide_react3 = require("lucide-react");
|
|
1263
|
-
var import_react_aria_components10 = require("react-aria-components");
|
|
1264
|
-
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1265
|
-
var sizeClasses = {
|
|
1266
|
-
sm: "w-[min(calc(100dvw-2rem),24rem)]",
|
|
1267
|
-
md: "w-[min(calc(100dvw-2rem),28rem)]",
|
|
1268
|
-
lg: "w-[min(calc(100dvw-2rem),36rem)]"
|
|
1269
|
-
};
|
|
1270
|
-
function ModalDialog({
|
|
1271
|
-
open,
|
|
1272
|
-
onOpenChange,
|
|
1273
|
-
title,
|
|
1274
|
-
description,
|
|
1275
|
-
children,
|
|
1276
|
-
footer,
|
|
1277
|
-
size = "sm",
|
|
1278
|
-
showCloseButton = true,
|
|
1768
|
+
function CommandList({
|
|
1279
1769
|
className,
|
|
1280
|
-
footerClassName,
|
|
1281
1770
|
...props
|
|
1282
1771
|
}) {
|
|
1283
|
-
const layoutClass = children ? footer ? "grid-rows-[auto_minmax(0,1fr)_auto]" : "grid-rows-[auto_minmax(0,1fr)]" : "grid-rows-[auto_auto]";
|
|
1284
1772
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1285
|
-
import_react_aria_components10.
|
|
1773
|
+
import_react_aria_components10.ListBox,
|
|
1286
1774
|
{
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
"grid max-h-[calc(100dvh-2rem)] overflow-hidden rounded-xl bg-background text-foreground shadow-xl outline-none",
|
|
1304
|
-
layoutClass
|
|
1305
|
-
),
|
|
1306
|
-
children: ({ close }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
|
|
1307
|
-
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("header", { "data-slot": "modal-dialog-header", className: "flex items-start gap-3 border-b border-border px-5 py-4", children: [
|
|
1308
|
-
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
1309
|
-
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Heading, { slot: "title", className: "font-heading text-base leading-none font-medium", children: title }),
|
|
1310
|
-
description ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Text, { slot: "description", className: "mt-2 text-sm text-muted-foreground", children: description }) : null
|
|
1311
|
-
] }),
|
|
1312
|
-
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1313
|
-
Button,
|
|
1314
|
-
{
|
|
1315
|
-
"aria-label": "Cerrar di\xE1logo",
|
|
1316
|
-
variant: "ghost",
|
|
1317
|
-
size: "icon",
|
|
1318
|
-
className: "-mr-2 -mt-1",
|
|
1319
|
-
onPress: close,
|
|
1320
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_lucide_react3.X, { "aria-hidden": "true", className: "size-4" })
|
|
1321
|
-
}
|
|
1322
|
-
) : null
|
|
1323
|
-
] }),
|
|
1324
|
-
children ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { "data-slot": "modal-dialog-body", className: "min-h-0 overflow-y-auto px-5 py-4", children }) : null,
|
|
1325
|
-
footer ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1326
|
-
"footer",
|
|
1327
|
-
{
|
|
1328
|
-
"data-slot": "modal-dialog-footer",
|
|
1329
|
-
className: cn(
|
|
1330
|
-
"flex flex-col-reverse gap-2 border-t border-border bg-muted/50 px-5 py-4 sm:flex-row sm:flex-wrap sm:justify-end",
|
|
1331
|
-
footerClassName
|
|
1332
|
-
),
|
|
1333
|
-
children: footer
|
|
1334
|
-
}
|
|
1335
|
-
) : null
|
|
1336
|
-
] })
|
|
1337
|
-
}
|
|
1338
|
-
)
|
|
1339
|
-
}
|
|
1340
|
-
)
|
|
1775
|
+
"data-slot": "command-list",
|
|
1776
|
+
className: cn("max-h-72 overflow-y-auto", className),
|
|
1777
|
+
...props
|
|
1778
|
+
}
|
|
1779
|
+
);
|
|
1780
|
+
}
|
|
1781
|
+
function CommandItem({ className, ...props }) {
|
|
1782
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1783
|
+
import_react_aria_components10.ListBoxItem,
|
|
1784
|
+
{
|
|
1785
|
+
"data-slot": "command-item",
|
|
1786
|
+
className: cn(
|
|
1787
|
+
"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",
|
|
1788
|
+
className
|
|
1789
|
+
),
|
|
1790
|
+
...props
|
|
1341
1791
|
}
|
|
1342
1792
|
);
|
|
1343
1793
|
}
|
|
@@ -1355,20 +1805,24 @@ function ConfirmDialog({
|
|
|
1355
1805
|
pending = false,
|
|
1356
1806
|
onConfirm
|
|
1357
1807
|
}) {
|
|
1358
|
-
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1808
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialog, { open, onOpenChange, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogContent, { children: [
|
|
1809
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogHeader, { children: [
|
|
1810
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialogTitle, { children: title }),
|
|
1811
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AlertDialogDescription, { children: description }) : null
|
|
1812
|
+
] }),
|
|
1813
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(AlertDialogFooter, { children: [
|
|
1814
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
|
|
1815
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1816
|
+
Button,
|
|
1817
|
+
{
|
|
1818
|
+
variant: destructive ? "destructive" : "default",
|
|
1819
|
+
isDisabled: pending,
|
|
1820
|
+
onPress: onConfirm,
|
|
1821
|
+
children: confirmLabel
|
|
1822
|
+
}
|
|
1823
|
+
)
|
|
1824
|
+
] })
|
|
1825
|
+
] }) });
|
|
1372
1826
|
}
|
|
1373
1827
|
|
|
1374
1828
|
// src/ui/danger-zone/danger-zone.tsx
|
|
@@ -1388,14 +1842,14 @@ function DangerZone({
|
|
|
1388
1842
|
{
|
|
1389
1843
|
slot: "trigger",
|
|
1390
1844
|
"data-slot": "danger-zone-trigger",
|
|
1391
|
-
className: "group/danger flex w-full items-center gap-3 px-4 text-left outline-none focus-visible:ring-3
|
|
1845
|
+
className: "group/danger focus-visible:ring-ring/50 flex w-full items-center gap-3 px-4 text-left outline-none focus-visible:ring-3",
|
|
1392
1846
|
children: [
|
|
1393
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.ShieldAlert, { className: "size-4 shrink-0
|
|
1847
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.ShieldAlert, { className: "text-destructive size-4 shrink-0" }),
|
|
1394
1848
|
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", { className: "flex flex-1 flex-col gap-0.5", children: [
|
|
1395
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "font-heading text-base leading-snug font-medium
|
|
1396
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-
|
|
1849
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "font-heading text-destructive text-base leading-snug font-medium", children: title }),
|
|
1850
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-muted-foreground text-xs", children: description })
|
|
1397
1851
|
] }),
|
|
1398
|
-
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.ChevronDown, { className: "size-4 shrink-0
|
|
1852
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react4.ChevronDown, { className: "text-muted-foreground size-4 shrink-0 transition-transform group-aria-expanded/danger:rotate-180" })
|
|
1399
1853
|
]
|
|
1400
1854
|
}
|
|
1401
1855
|
) }),
|
|
@@ -1403,160 +1857,13 @@ function DangerZone({
|
|
|
1403
1857
|
] }) });
|
|
1404
1858
|
}
|
|
1405
1859
|
|
|
1406
|
-
// src/ui/
|
|
1860
|
+
// src/ui/doc-preview/doc-preview.tsx
|
|
1407
1861
|
var import_lucide_react5 = require("lucide-react");
|
|
1408
|
-
var React4 = __toESM(require("react"), 1);
|
|
1409
|
-
var import_react_aria_components12 = require("react-aria-components");
|
|
1410
1862
|
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1411
|
-
var DialogContext = React4.createContext(null);
|
|
1412
|
-
function useDialogContext() {
|
|
1413
|
-
const context = React4.useContext(DialogContext);
|
|
1414
|
-
if (!context) throw new Error("Dialog components must be rendered within Dialog.");
|
|
1415
|
-
return context;
|
|
1416
|
-
}
|
|
1417
|
-
function Dialog({ children, defaultOpen = false, onOpenChange, open: controlledOpen }) {
|
|
1418
|
-
const [uncontrolledOpen, setUncontrolledOpen] = React4.useState(defaultOpen);
|
|
1419
|
-
const open = controlledOpen ?? uncontrolledOpen;
|
|
1420
|
-
const setOpen = React4.useCallback(
|
|
1421
|
-
(nextOpen) => {
|
|
1422
|
-
if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
|
|
1423
|
-
onOpenChange?.(nextOpen);
|
|
1424
|
-
},
|
|
1425
|
-
[controlledOpen, onOpenChange]
|
|
1426
|
-
);
|
|
1427
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogContext.Provider, { value: { open, setOpen }, children });
|
|
1428
|
-
}
|
|
1429
|
-
function DialogTrigger({ asChild = false, children, onClick, ...props }) {
|
|
1430
|
-
const { setOpen } = useDialogContext();
|
|
1431
|
-
const handleClick = (event) => {
|
|
1432
|
-
onClick?.(event);
|
|
1433
|
-
if (!event.defaultPrevented) setOpen(true);
|
|
1434
|
-
};
|
|
1435
|
-
if (asChild && React4.isValidElement(children)) {
|
|
1436
|
-
const child = children;
|
|
1437
|
-
return React4.cloneElement(child, {
|
|
1438
|
-
...props,
|
|
1439
|
-
"data-slot": "dialog-trigger",
|
|
1440
|
-
onClick: (event) => {
|
|
1441
|
-
child.props.onClick?.(event);
|
|
1442
|
-
handleClick(event);
|
|
1443
|
-
}
|
|
1444
|
-
});
|
|
1445
|
-
}
|
|
1446
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
|
|
1447
|
-
}
|
|
1448
|
-
function DialogPortal({ children }) {
|
|
1449
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_jsx_runtime19.Fragment, { children });
|
|
1450
|
-
}
|
|
1451
|
-
function DialogOverlay({ children, className, ...props }) {
|
|
1452
|
-
const { open, setOpen } = useDialogContext();
|
|
1453
|
-
if (!open) return null;
|
|
1454
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1455
|
-
import_react_aria_components12.ModalOverlay,
|
|
1456
|
-
{
|
|
1457
|
-
"data-slot": "dialog-overlay",
|
|
1458
|
-
isDismissable: true,
|
|
1459
|
-
isOpen: open,
|
|
1460
|
-
onOpenChange: setOpen,
|
|
1461
|
-
className: cn(
|
|
1462
|
-
"fixed inset-0 isolate z-50 grid place-items-center bg-black/10 p-4 duration-100 supports-backdrop-filter:backdrop-blur-xs data-entering:animate-ui-overlay-in data-exiting:animate-ui-overlay-out",
|
|
1463
|
-
className
|
|
1464
|
-
),
|
|
1465
|
-
...props,
|
|
1466
|
-
children
|
|
1467
|
-
}
|
|
1468
|
-
);
|
|
1469
|
-
}
|
|
1470
|
-
function DialogContent({
|
|
1471
|
-
children,
|
|
1472
|
-
className,
|
|
1473
|
-
onOverlayClick,
|
|
1474
|
-
showCloseButton = true,
|
|
1475
|
-
...props
|
|
1476
|
-
}) {
|
|
1477
|
-
const { setOpen } = useDialogContext();
|
|
1478
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1479
|
-
DialogOverlay,
|
|
1480
|
-
{
|
|
1481
|
-
onClick: (event) => {
|
|
1482
|
-
if (event.target === event.currentTarget) onOverlayClick?.(event);
|
|
1483
|
-
},
|
|
1484
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1485
|
-
import_react_aria_components12.Modal,
|
|
1486
|
-
{
|
|
1487
|
-
className: cn(
|
|
1488
|
-
"w-full max-w-[calc(100%-2rem)] max-h-[calc(100dvh-2rem)] outline-none sm:max-w-sm",
|
|
1489
|
-
className
|
|
1490
|
-
),
|
|
1491
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
1492
|
-
import_react_aria_components12.Dialog,
|
|
1493
|
-
{
|
|
1494
|
-
"data-slot": "dialog-content",
|
|
1495
|
-
className: cn(
|
|
1496
|
-
"grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-4 text-sm text-foreground ring-1 ring-foreground/10 outline-none",
|
|
1497
|
-
className
|
|
1498
|
-
),
|
|
1499
|
-
...props,
|
|
1500
|
-
children: [
|
|
1501
|
-
children,
|
|
1502
|
-
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1503
|
-
Button,
|
|
1504
|
-
{
|
|
1505
|
-
"aria-label": "Cerrar di\xE1logo",
|
|
1506
|
-
"data-slot": "dialog-close",
|
|
1507
|
-
variant: "ghost",
|
|
1508
|
-
className: "absolute top-2 right-2",
|
|
1509
|
-
size: "icon-sm",
|
|
1510
|
-
onPress: () => setOpen(false),
|
|
1511
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react5.XIcon, {})
|
|
1512
|
-
}
|
|
1513
|
-
) : null
|
|
1514
|
-
]
|
|
1515
|
-
}
|
|
1516
|
-
)
|
|
1517
|
-
}
|
|
1518
|
-
)
|
|
1519
|
-
}
|
|
1520
|
-
) });
|
|
1521
|
-
}
|
|
1522
|
-
function DialogClose({ asChild = false, children, onClick, ...props }) {
|
|
1523
|
-
const { setOpen } = useDialogContext();
|
|
1524
|
-
if (asChild && React4.isValidElement(children)) {
|
|
1525
|
-
const child = children;
|
|
1526
|
-
return React4.cloneElement(child, {
|
|
1527
|
-
...props,
|
|
1528
|
-
"data-slot": "dialog-close",
|
|
1529
|
-
onClick: (event) => {
|
|
1530
|
-
child.props.onClick?.(event);
|
|
1531
|
-
if (!event.defaultPrevented) setOpen(false);
|
|
1532
|
-
}
|
|
1533
|
-
});
|
|
1534
|
-
}
|
|
1535
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
|
|
1536
|
-
}
|
|
1537
|
-
function DialogHeader({ className, ...props }) {
|
|
1538
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
|
|
1539
|
-
}
|
|
1540
|
-
function DialogFooter({ className, showCloseButton = false, children, ...props }) {
|
|
1541
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { "data-slot": "dialog-footer", className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:flex-wrap sm:justify-end", className), ...props, children: [
|
|
1542
|
-
children,
|
|
1543
|
-
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DialogClose, { variant: "outline", children: "Cerrar" }) : null
|
|
1544
|
-
] });
|
|
1545
|
-
}
|
|
1546
|
-
function DialogTitle({ className, ...props }) {
|
|
1547
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components12.Heading, { slot: "title", "data-slot": "dialog-title", className: cn("font-heading text-base leading-none font-medium", className), ...props });
|
|
1548
|
-
}
|
|
1549
|
-
function DialogDescription({ className, ...props }) {
|
|
1550
|
-
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components12.Text, { slot: "description", "data-slot": "dialog-description", className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props });
|
|
1551
|
-
}
|
|
1552
|
-
|
|
1553
|
-
// src/ui/doc-preview/doc-preview.tsx
|
|
1554
|
-
var import_lucide_react6 = require("lucide-react");
|
|
1555
|
-
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1556
1863
|
function DocPreview({ url, mimeType, name }) {
|
|
1557
|
-
if (!url) return /* @__PURE__ */ (0,
|
|
1864
|
+
if (!url) return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Fallback, { mimeType, reason: "no-url" });
|
|
1558
1865
|
if (mimeType === "application/pdf" || mimeType === "text/plain" || mimeType === "text/csv") {
|
|
1559
|
-
return /* @__PURE__ */ (0,
|
|
1866
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1560
1867
|
"iframe",
|
|
1561
1868
|
{
|
|
1562
1869
|
src: url,
|
|
@@ -1567,53 +1874,34 @@ function DocPreview({ url, mimeType, name }) {
|
|
|
1567
1874
|
);
|
|
1568
1875
|
}
|
|
1569
1876
|
if (mimeType?.startsWith("image/")) {
|
|
1570
|
-
return /* @__PURE__ */ (0,
|
|
1877
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "bg-muted/30 flex justify-center rounded-sm p-6", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("img", { src: url, alt: name, className: "max-h-[75vh] max-w-full rounded object-contain" }) });
|
|
1571
1878
|
}
|
|
1572
|
-
return /* @__PURE__ */ (0,
|
|
1879
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Fallback, { mimeType, reason: "unsupported" });
|
|
1573
1880
|
}
|
|
1574
|
-
function Fallback({
|
|
1575
|
-
|
|
1881
|
+
function Fallback({
|
|
1882
|
+
mimeType,
|
|
1883
|
+
reason
|
|
1884
|
+
}) {
|
|
1885
|
+
const Icon = mimeType?.startsWith("image/") ? import_lucide_react5.Image : import_lucide_react5.FileText;
|
|
1576
1886
|
const message = reason === "no-url" ? "No se pudo generar la URL de preview." : "Preview no disponible para este tipo de archivo.";
|
|
1577
|
-
return /* @__PURE__ */ (0,
|
|
1578
|
-
/* @__PURE__ */ (0,
|
|
1579
|
-
/* @__PURE__ */ (0,
|
|
1580
|
-
mimeType ? /* @__PURE__ */ (0,
|
|
1581
|
-
/* @__PURE__ */ (0,
|
|
1887
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "text-muted-foreground flex flex-col items-center justify-center gap-2 py-14", children: [
|
|
1888
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { className: "size-9 opacity-30" }),
|
|
1889
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm", children: message }),
|
|
1890
|
+
mimeType ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
|
|
1891
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
|
|
1582
1892
|
] });
|
|
1583
1893
|
}
|
|
1584
1894
|
|
|
1585
|
-
// src/ui/drawer/drawer.tsx
|
|
1586
|
-
var import_react_aria_components13 = require("react-aria-components");
|
|
1587
|
-
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1588
|
-
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" };
|
|
1589
|
-
function Drawer({ children, side = "right", className, ...props }) {
|
|
1590
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components13.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_runtime21.jsx)(import_react_aria_components13.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_runtime21.jsx)(import_react_aria_components13.Dialog, { "data-slot": "drawer", className: "outline-none", children }) }) });
|
|
1591
|
-
}
|
|
1592
|
-
function DrawerHeader({ className, ...props }) {
|
|
1593
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
|
|
1594
|
-
}
|
|
1595
|
-
function DrawerFooter({ className, ...props }) {
|
|
1596
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.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 });
|
|
1597
|
-
}
|
|
1598
|
-
function DrawerTitle({ className, ...props }) {
|
|
1599
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components13.Heading, { slot: "title", "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
|
|
1600
|
-
}
|
|
1601
|
-
function DrawerDescription({ className, ...props }) {
|
|
1602
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
|
|
1603
|
-
}
|
|
1604
|
-
|
|
1605
1895
|
// src/ui/dropdown-menu/dropdown-menu.tsx
|
|
1606
|
-
var React5 = require("react");
|
|
1607
1896
|
var import_class_variance_authority6 = require("class-variance-authority");
|
|
1608
|
-
var
|
|
1609
|
-
var
|
|
1610
|
-
var
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components14.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
1897
|
+
var import_lucide_react6 = require("lucide-react");
|
|
1898
|
+
var React5 = require("react");
|
|
1899
|
+
var import_react_aria_components12 = require("react-aria-components");
|
|
1900
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1901
|
+
function DropdownMenuTrigger({ ...props }) {
|
|
1902
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components12.MenuTrigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
1615
1903
|
}
|
|
1616
|
-
function
|
|
1904
|
+
function DropdownMenuContent({
|
|
1617
1905
|
"data-slot": dataSlot = "dropdown-menu-content",
|
|
1618
1906
|
placement = "bottom start",
|
|
1619
1907
|
offset = 4,
|
|
@@ -1622,16 +1910,19 @@ function DropdownMenu({
|
|
|
1622
1910
|
children,
|
|
1623
1911
|
...props
|
|
1624
1912
|
}) {
|
|
1625
|
-
return /* @__PURE__ */ (0,
|
|
1626
|
-
|
|
1913
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1914
|
+
import_react_aria_components12.Popover,
|
|
1627
1915
|
{
|
|
1628
1916
|
"data-slot": dataSlot,
|
|
1629
1917
|
placement,
|
|
1630
1918
|
offset,
|
|
1631
1919
|
crossOffset,
|
|
1632
|
-
className: cn(
|
|
1633
|
-
|
|
1634
|
-
|
|
1920
|
+
className: cn(
|
|
1921
|
+
"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",
|
|
1922
|
+
className
|
|
1923
|
+
),
|
|
1924
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1925
|
+
import_react_aria_components12.Menu,
|
|
1635
1926
|
{
|
|
1636
1927
|
className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
|
|
1637
1928
|
...props,
|
|
@@ -1641,18 +1932,27 @@ function DropdownMenu({
|
|
|
1641
1932
|
}
|
|
1642
1933
|
);
|
|
1643
1934
|
}
|
|
1935
|
+
function DropdownMenu(props) {
|
|
1936
|
+
if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DropdownMenuContent, { ...props });
|
|
1937
|
+
const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
|
|
1938
|
+
const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
|
|
1939
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(DropdownMenuTrigger, { defaultOpen, isOpen, onOpenChange, children: [
|
|
1940
|
+
triggerElement,
|
|
1941
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(DropdownMenuContent, { ...contentProps, children })
|
|
1942
|
+
] });
|
|
1943
|
+
}
|
|
1644
1944
|
function DropdownMenuGroup({
|
|
1645
1945
|
...props
|
|
1646
1946
|
}) {
|
|
1647
|
-
return /* @__PURE__ */ (0,
|
|
1947
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components12.MenuSection, { "data-slot": "dropdown-menu-group", ...props });
|
|
1648
1948
|
}
|
|
1649
1949
|
function DropdownMenuLabel({
|
|
1650
1950
|
className,
|
|
1651
1951
|
inset,
|
|
1652
1952
|
...props
|
|
1653
1953
|
}) {
|
|
1654
|
-
return /* @__PURE__ */ (0,
|
|
1655
|
-
|
|
1954
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1955
|
+
import_react_aria_components12.Header,
|
|
1656
1956
|
{
|
|
1657
1957
|
"data-slot": "dropdown-menu-label",
|
|
1658
1958
|
"data-inset": inset,
|
|
@@ -1683,39 +1983,34 @@ function DropdownMenuItem({
|
|
|
1683
1983
|
children,
|
|
1684
1984
|
...props
|
|
1685
1985
|
}) {
|
|
1686
|
-
return /* @__PURE__ */ (0,
|
|
1687
|
-
|
|
1986
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1987
|
+
import_react_aria_components12.MenuItem,
|
|
1688
1988
|
{
|
|
1689
1989
|
"data-slot": "dropdown-menu-item",
|
|
1690
1990
|
"data-inset": inset,
|
|
1691
1991
|
"data-variant": variant,
|
|
1692
1992
|
textValue: typeof children === "string" ? children : props.textValue,
|
|
1693
|
-
className: (0,
|
|
1993
|
+
className: (0, import_react_aria_components12.composeRenderProps)(
|
|
1694
1994
|
className,
|
|
1695
1995
|
(className2, { selectionMode }) => cn(dropdownMenuItemVariants({ selectionMode }), className2)
|
|
1696
1996
|
),
|
|
1697
1997
|
...props,
|
|
1698
|
-
children: (0,
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
"
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
children2
|
|
1710
|
-
] })
|
|
1711
|
-
)
|
|
1998
|
+
children: (0, import_react_aria_components12.composeRenderProps)(children, (children2, { isSelected, selectionMode }) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
|
|
1999
|
+
selectionMode !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2000
|
+
"span",
|
|
2001
|
+
{
|
|
2002
|
+
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
2003
|
+
"data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
|
|
2004
|
+
children: isSelected ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react6.CheckIcon, {}) : null
|
|
2005
|
+
}
|
|
2006
|
+
) : null,
|
|
2007
|
+
children2
|
|
2008
|
+
] }))
|
|
1712
2009
|
}
|
|
1713
2010
|
);
|
|
1714
2011
|
}
|
|
1715
|
-
function DropdownMenuSub({
|
|
1716
|
-
...props
|
|
1717
|
-
}) {
|
|
1718
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components14.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
|
|
2012
|
+
function DropdownMenuSub({ ...props }) {
|
|
2013
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components12.SubmenuTrigger, { "data-slot": "dropdown-menu-sub", ...props });
|
|
1719
2014
|
}
|
|
1720
2015
|
function DropdownMenuSubTrigger({
|
|
1721
2016
|
className,
|
|
@@ -1723,8 +2018,8 @@ function DropdownMenuSubTrigger({
|
|
|
1723
2018
|
children,
|
|
1724
2019
|
...props
|
|
1725
2020
|
}) {
|
|
1726
|
-
return /* @__PURE__ */ (0,
|
|
1727
|
-
|
|
2021
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2022
|
+
import_react_aria_components12.MenuItem,
|
|
1728
2023
|
{
|
|
1729
2024
|
"data-slot": "dropdown-menu-sub-trigger",
|
|
1730
2025
|
"data-inset": inset,
|
|
@@ -1734,9 +2029,9 @@ function DropdownMenuSubTrigger({
|
|
|
1734
2029
|
className
|
|
1735
2030
|
),
|
|
1736
2031
|
...props,
|
|
1737
|
-
children: (0,
|
|
2032
|
+
children: (0, import_react_aria_components12.composeRenderProps)(children, (children2) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
|
|
1738
2033
|
children2,
|
|
1739
|
-
/* @__PURE__ */ (0,
|
|
2034
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react6.ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
|
|
1740
2035
|
] }))
|
|
1741
2036
|
}
|
|
1742
2037
|
);
|
|
@@ -1748,11 +2043,14 @@ function DropdownMenuSubContent({
|
|
|
1748
2043
|
className,
|
|
1749
2044
|
...props
|
|
1750
2045
|
}) {
|
|
1751
|
-
return /* @__PURE__ */ (0,
|
|
1752
|
-
|
|
2046
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2047
|
+
DropdownMenuContent,
|
|
1753
2048
|
{
|
|
1754
2049
|
"data-slot": "dropdown-menu-sub-content",
|
|
1755
|
-
className: cn(
|
|
2050
|
+
className: cn(
|
|
2051
|
+
"w-auto min-w-24 rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg",
|
|
2052
|
+
className
|
|
2053
|
+
),
|
|
1756
2054
|
placement,
|
|
1757
2055
|
crossOffset,
|
|
1758
2056
|
offset,
|
|
@@ -1764,8 +2062,8 @@ function DropdownMenuSeparator({
|
|
|
1764
2062
|
className,
|
|
1765
2063
|
...props
|
|
1766
2064
|
}) {
|
|
1767
|
-
return /* @__PURE__ */ (0,
|
|
1768
|
-
|
|
2065
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2066
|
+
import_react_aria_components12.Separator,
|
|
1769
2067
|
{
|
|
1770
2068
|
"data-slot": "dropdown-menu-separator",
|
|
1771
2069
|
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
@@ -1773,11 +2071,8 @@ function DropdownMenuSeparator({
|
|
|
1773
2071
|
}
|
|
1774
2072
|
);
|
|
1775
2073
|
}
|
|
1776
|
-
function DropdownMenuShortcut({
|
|
1777
|
-
|
|
1778
|
-
...props
|
|
1779
|
-
}) {
|
|
1780
|
-
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2074
|
+
function DropdownMenuShortcut({ className, ...props }) {
|
|
2075
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1781
2076
|
"span",
|
|
1782
2077
|
{
|
|
1783
2078
|
"data-slot": "dropdown-menu-shortcut",
|
|
@@ -1790,11 +2085,25 @@ function DropdownMenuShortcut({
|
|
|
1790
2085
|
);
|
|
1791
2086
|
}
|
|
1792
2087
|
|
|
1793
|
-
// src/ui/empty-state/empty-state.
|
|
2088
|
+
// src/ui/empty-state/empty-state-variants.ts
|
|
1794
2089
|
var import_class_variance_authority7 = require("class-variance-authority");
|
|
1795
|
-
var
|
|
2090
|
+
var emptyStateMediaVariants = (0, import_class_variance_authority7.cva)(
|
|
2091
|
+
"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
2092
|
+
{
|
|
2093
|
+
variants: {
|
|
2094
|
+
variant: {
|
|
2095
|
+
default: "bg-transparent",
|
|
2096
|
+
icon: "size-8 rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
|
|
2097
|
+
}
|
|
2098
|
+
},
|
|
2099
|
+
defaultVariants: { variant: "default" }
|
|
2100
|
+
}
|
|
2101
|
+
);
|
|
2102
|
+
|
|
2103
|
+
// src/ui/empty-state/empty-state.tsx
|
|
2104
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1796
2105
|
function EmptyState({ className, ...props }) {
|
|
1797
|
-
return /* @__PURE__ */ (0,
|
|
2106
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1798
2107
|
"div",
|
|
1799
2108
|
{
|
|
1800
2109
|
"data-slot": "empty-state",
|
|
@@ -1807,7 +2116,7 @@ function EmptyState({ className, ...props }) {
|
|
|
1807
2116
|
);
|
|
1808
2117
|
}
|
|
1809
2118
|
function EmptyStateHeader({ className, ...props }) {
|
|
1810
|
-
return /* @__PURE__ */ (0,
|
|
2119
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1811
2120
|
"div",
|
|
1812
2121
|
{
|
|
1813
2122
|
"data-slot": "empty-state-header",
|
|
@@ -1816,24 +2125,12 @@ function EmptyStateHeader({ className, ...props }) {
|
|
|
1816
2125
|
}
|
|
1817
2126
|
);
|
|
1818
2127
|
}
|
|
1819
|
-
var emptyStateMediaVariants = (0, import_class_variance_authority7.cva)(
|
|
1820
|
-
"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
1821
|
-
{
|
|
1822
|
-
variants: {
|
|
1823
|
-
variant: {
|
|
1824
|
-
default: "bg-transparent",
|
|
1825
|
-
icon: "size-8 rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
|
|
1826
|
-
}
|
|
1827
|
-
},
|
|
1828
|
-
defaultVariants: { variant: "default" }
|
|
1829
|
-
}
|
|
1830
|
-
);
|
|
1831
2128
|
function EmptyStateMedia({
|
|
1832
2129
|
className,
|
|
1833
2130
|
variant = "default",
|
|
1834
2131
|
...props
|
|
1835
2132
|
}) {
|
|
1836
|
-
return /* @__PURE__ */ (0,
|
|
2133
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1837
2134
|
"div",
|
|
1838
2135
|
{
|
|
1839
2136
|
"data-slot": "empty-state-media",
|
|
@@ -1843,18 +2140,19 @@ function EmptyStateMedia({
|
|
|
1843
2140
|
}
|
|
1844
2141
|
);
|
|
1845
2142
|
}
|
|
1846
|
-
function EmptyStateTitle({ className, ...props }) {
|
|
1847
|
-
return /* @__PURE__ */ (0,
|
|
2143
|
+
function EmptyStateTitle({ className, children, ...props }) {
|
|
2144
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1848
2145
|
"h3",
|
|
1849
2146
|
{
|
|
1850
2147
|
"data-slot": "empty-state-title",
|
|
1851
2148
|
className: cn("text-sm font-medium tracking-tight text-foreground", className),
|
|
1852
|
-
...props
|
|
2149
|
+
...props,
|
|
2150
|
+
children
|
|
1853
2151
|
}
|
|
1854
2152
|
);
|
|
1855
2153
|
}
|
|
1856
2154
|
function EmptyStateDescription({ className, ...props }) {
|
|
1857
|
-
return /* @__PURE__ */ (0,
|
|
2155
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1858
2156
|
"p",
|
|
1859
2157
|
{
|
|
1860
2158
|
"data-slot": "empty-state-description",
|
|
@@ -1867,7 +2165,7 @@ function EmptyStateDescription({ className, ...props }) {
|
|
|
1867
2165
|
);
|
|
1868
2166
|
}
|
|
1869
2167
|
function EmptyStateContent({ className, ...props }) {
|
|
1870
|
-
return /* @__PURE__ */ (0,
|
|
2168
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1871
2169
|
"div",
|
|
1872
2170
|
{
|
|
1873
2171
|
"data-slot": "empty-state-content",
|
|
@@ -1880,28 +2178,54 @@ function EmptyStateContent({ className, ...props }) {
|
|
|
1880
2178
|
);
|
|
1881
2179
|
}
|
|
1882
2180
|
|
|
1883
|
-
// src/ui/
|
|
2181
|
+
// src/ui/label/label.tsx
|
|
2182
|
+
var import_react7 = require("react");
|
|
2183
|
+
var import_react_aria_components13 = require("react-aria-components");
|
|
2184
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
2185
|
+
var Label2 = (0, import_react7.forwardRef)(
|
|
2186
|
+
function Label3({ className, ...props }, ref) {
|
|
2187
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
2188
|
+
import_react_aria_components13.Label,
|
|
2189
|
+
{
|
|
2190
|
+
ref,
|
|
2191
|
+
"data-slot": "label",
|
|
2192
|
+
className: cn(
|
|
2193
|
+
"flex items-center gap-2 text-sm font-medium leading-none select-none",
|
|
2194
|
+
className
|
|
2195
|
+
),
|
|
2196
|
+
...props
|
|
2197
|
+
}
|
|
2198
|
+
);
|
|
2199
|
+
}
|
|
2200
|
+
);
|
|
2201
|
+
|
|
2202
|
+
// src/ui/field/field-variants.ts
|
|
1884
2203
|
var import_class_variance_authority8 = require("class-variance-authority");
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
2204
|
+
var fieldVariants = (0, import_class_variance_authority8.cva)(
|
|
2205
|
+
"group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
|
|
2206
|
+
{
|
|
2207
|
+
variants: {
|
|
2208
|
+
orientation: {
|
|
2209
|
+
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
2210
|
+
horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto",
|
|
2211
|
+
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"
|
|
2212
|
+
}
|
|
2213
|
+
},
|
|
2214
|
+
defaultVariants: { orientation: "vertical" }
|
|
2215
|
+
}
|
|
2216
|
+
);
|
|
1893
2217
|
|
|
1894
2218
|
// src/ui/field/field.tsx
|
|
1895
|
-
var
|
|
2219
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1896
2220
|
function FieldSet({ className, ...props }) {
|
|
1897
|
-
return /* @__PURE__ */ (0,
|
|
2221
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
|
|
1898
2222
|
}
|
|
1899
2223
|
function FieldLegend({
|
|
1900
2224
|
className,
|
|
1901
2225
|
variant = "legend",
|
|
1902
2226
|
...props
|
|
1903
2227
|
}) {
|
|
1904
|
-
return /* @__PURE__ */ (0,
|
|
2228
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1905
2229
|
"legend",
|
|
1906
2230
|
{
|
|
1907
2231
|
"data-slot": "field-legend",
|
|
@@ -1915,7 +2239,7 @@ function FieldLegend({
|
|
|
1915
2239
|
);
|
|
1916
2240
|
}
|
|
1917
2241
|
function FieldGroup({ className, ...props }) {
|
|
1918
|
-
return /* @__PURE__ */ (0,
|
|
2242
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1919
2243
|
"div",
|
|
1920
2244
|
{
|
|
1921
2245
|
"data-slot": "field-group",
|
|
@@ -1927,23 +2251,10 @@ function FieldGroup({ className, ...props }) {
|
|
|
1927
2251
|
}
|
|
1928
2252
|
);
|
|
1929
2253
|
}
|
|
1930
|
-
var fieldVariants = (0, import_class_variance_authority8.cva)(
|
|
1931
|
-
"group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
|
|
1932
|
-
{
|
|
1933
|
-
variants: {
|
|
1934
|
-
orientation: {
|
|
1935
|
-
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
1936
|
-
horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto",
|
|
1937
|
-
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"
|
|
1938
|
-
}
|
|
1939
|
-
},
|
|
1940
|
-
defaultVariants: { orientation: "vertical" }
|
|
1941
|
-
}
|
|
1942
|
-
);
|
|
1943
2254
|
function Field({ className, orientation = "vertical", ...props }) {
|
|
1944
2255
|
return (
|
|
1945
2256
|
// biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
|
|
1946
|
-
/* @__PURE__ */ (0,
|
|
2257
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1947
2258
|
"div",
|
|
1948
2259
|
{
|
|
1949
2260
|
role: "group",
|
|
@@ -1956,7 +2267,7 @@ function Field({ className, orientation = "vertical", ...props }) {
|
|
|
1956
2267
|
);
|
|
1957
2268
|
}
|
|
1958
2269
|
function FieldContent({ className, ...props }) {
|
|
1959
|
-
return /* @__PURE__ */ (0,
|
|
2270
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1960
2271
|
"div",
|
|
1961
2272
|
{
|
|
1962
2273
|
"data-slot": "field-content",
|
|
@@ -1966,7 +2277,7 @@ function FieldContent({ className, ...props }) {
|
|
|
1966
2277
|
);
|
|
1967
2278
|
}
|
|
1968
2279
|
function FieldLabel({ className, ...props }) {
|
|
1969
|
-
return /* @__PURE__ */ (0,
|
|
2280
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1970
2281
|
Label2,
|
|
1971
2282
|
{
|
|
1972
2283
|
"data-slot": "field-label",
|
|
@@ -1979,7 +2290,7 @@ function FieldLabel({ className, ...props }) {
|
|
|
1979
2290
|
);
|
|
1980
2291
|
}
|
|
1981
2292
|
function FieldTitle({ className, ...props }) {
|
|
1982
|
-
return /* @__PURE__ */ (0,
|
|
2293
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1983
2294
|
"div",
|
|
1984
2295
|
{
|
|
1985
2296
|
"data-slot": "field-title",
|
|
@@ -1989,7 +2300,7 @@ function FieldTitle({ className, ...props }) {
|
|
|
1989
2300
|
);
|
|
1990
2301
|
}
|
|
1991
2302
|
function FieldDescription({ className, ...props }) {
|
|
1992
|
-
return /* @__PURE__ */ (0,
|
|
2303
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1993
2304
|
"p",
|
|
1994
2305
|
{
|
|
1995
2306
|
"data-slot": "field-description",
|
|
@@ -2002,7 +2313,7 @@ function FieldDescription({ className, ...props }) {
|
|
|
2002
2313
|
);
|
|
2003
2314
|
}
|
|
2004
2315
|
function FieldSeparator({ className, children, ...props }) {
|
|
2005
|
-
return /* @__PURE__ */ (0,
|
|
2316
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
2006
2317
|
"div",
|
|
2007
2318
|
{
|
|
2008
2319
|
"data-slot": "field-separator",
|
|
@@ -2010,12 +2321,12 @@ function FieldSeparator({ className, children, ...props }) {
|
|
|
2010
2321
|
className: cn("relative -my-2 h-5 text-sm", className),
|
|
2011
2322
|
...props,
|
|
2012
2323
|
children: [
|
|
2013
|
-
/* @__PURE__ */ (0,
|
|
2014
|
-
children ? /* @__PURE__ */ (0,
|
|
2324
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
|
|
2325
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2015
2326
|
"span",
|
|
2016
2327
|
{
|
|
2017
2328
|
"data-slot": "field-separator-content",
|
|
2018
|
-
className: "relative mx-auto block w-fit
|
|
2329
|
+
className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
|
|
2019
2330
|
children
|
|
2020
2331
|
}
|
|
2021
2332
|
) : null
|
|
@@ -2025,9 +2336,9 @@ function FieldSeparator({ className, children, ...props }) {
|
|
|
2025
2336
|
}
|
|
2026
2337
|
function FieldError2({ className, children, errors, ...props }) {
|
|
2027
2338
|
const messages = [...new Set(errors?.flatMap((error) => error?.message ?? []) ?? [])];
|
|
2028
|
-
const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ (0,
|
|
2339
|
+
const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("li", { children: message }, message)) }) : null);
|
|
2029
2340
|
if (!content) return null;
|
|
2030
|
-
return /* @__PURE__ */ (0,
|
|
2341
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
2031
2342
|
"div",
|
|
2032
2343
|
{
|
|
2033
2344
|
role: "alert",
|
|
@@ -2040,9 +2351,42 @@ function FieldError2({ className, children, errors, ...props }) {
|
|
|
2040
2351
|
}
|
|
2041
2352
|
|
|
2042
2353
|
// src/ui/form-feedback/form-feedback.tsx
|
|
2354
|
+
var import_lucide_react7 = require("lucide-react");
|
|
2355
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
2356
|
+
function FormFeedback({
|
|
2357
|
+
state,
|
|
2358
|
+
className,
|
|
2359
|
+
pendingLabel = "Guardando\u2026",
|
|
2360
|
+
successLabel = "Guardado"
|
|
2361
|
+
}) {
|
|
2362
|
+
if (state.status === "idle")
|
|
2363
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
|
|
2364
|
+
const error = state.status === "error";
|
|
2365
|
+
const success = state.status === "success";
|
|
2366
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
2367
|
+
"span",
|
|
2368
|
+
{
|
|
2369
|
+
role: error ? "alert" : "status",
|
|
2370
|
+
"aria-live": "polite",
|
|
2371
|
+
className: cn(
|
|
2372
|
+
"inline-flex h-5 items-center gap-1.5 text-xs",
|
|
2373
|
+
error && "text-destructive",
|
|
2374
|
+
success && "text-success",
|
|
2375
|
+
state.status === "pending" && "text-muted-foreground",
|
|
2376
|
+
className
|
|
2377
|
+
),
|
|
2378
|
+
children: [
|
|
2379
|
+
state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react7.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
|
|
2380
|
+
success && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react7.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
|
|
2381
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react7.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
|
|
2382
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
|
|
2383
|
+
]
|
|
2384
|
+
}
|
|
2385
|
+
);
|
|
2386
|
+
}
|
|
2387
|
+
|
|
2388
|
+
// src/ui/form-feedback/use-form-feedback.ts
|
|
2043
2389
|
var import_react8 = require("react");
|
|
2044
|
-
var import_lucide_react8 = require("lucide-react");
|
|
2045
|
-
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
2046
2390
|
function useFormFeedback(options) {
|
|
2047
2391
|
const resetMs = options?.successResetMs ?? 2500;
|
|
2048
2392
|
const [state, setState] = (0, import_react8.useState)({ status: "idle" });
|
|
@@ -2056,79 +2400,74 @@ function useFormFeedback(options) {
|
|
|
2056
2400
|
clearTimer();
|
|
2057
2401
|
setState({ status: "pending" });
|
|
2058
2402
|
}, [clearTimer]);
|
|
2059
|
-
const setSuccess = (0, import_react8.useCallback)(
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
clearTimer
|
|
2066
|
-
|
|
2067
|
-
|
|
2403
|
+
const setSuccess = (0, import_react8.useCallback)(
|
|
2404
|
+
(message) => {
|
|
2405
|
+
clearTimer();
|
|
2406
|
+
setState({ status: "success", message });
|
|
2407
|
+
if (resetMs > 0) timer.current = setTimeout(() => setState({ status: "idle" }), resetMs);
|
|
2408
|
+
},
|
|
2409
|
+
[clearTimer, resetMs]
|
|
2410
|
+
);
|
|
2411
|
+
const setError = (0, import_react8.useCallback)(
|
|
2412
|
+
(message) => {
|
|
2413
|
+
clearTimer();
|
|
2414
|
+
setState({ status: "error", message });
|
|
2415
|
+
},
|
|
2416
|
+
[clearTimer]
|
|
2417
|
+
);
|
|
2068
2418
|
const reset = (0, import_react8.useCallback)(() => {
|
|
2069
2419
|
clearTimer();
|
|
2070
2420
|
setState({ status: "idle" });
|
|
2071
2421
|
}, [clearTimer]);
|
|
2072
2422
|
return { state, pending: state.status === "pending", setPending, setSuccess, setError, reset };
|
|
2073
2423
|
}
|
|
2074
|
-
function FormFeedback({ state, className, pendingLabel = "Guardando\u2026", successLabel = "Guardado" }) {
|
|
2075
|
-
if (state.status === "idle") return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
|
|
2076
|
-
const error = state.status === "error";
|
|
2077
|
-
const success = state.status === "success";
|
|
2078
|
-
return /* @__PURE__ */ (0, import_jsx_runtime26.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: [
|
|
2079
|
-
state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react8.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
|
|
2080
|
-
success && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react8.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
|
|
2081
|
-
error && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react8.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
|
|
2082
|
-
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
|
|
2083
|
-
] });
|
|
2084
|
-
}
|
|
2085
2424
|
|
|
2086
2425
|
// src/ui/form-row/form-row.tsx
|
|
2087
|
-
var
|
|
2088
|
-
function FormRow({
|
|
2426
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
2427
|
+
function FormRow({
|
|
2428
|
+
label,
|
|
2429
|
+
htmlFor,
|
|
2430
|
+
required,
|
|
2431
|
+
hint,
|
|
2432
|
+
error,
|
|
2433
|
+
className,
|
|
2434
|
+
children
|
|
2435
|
+
}) {
|
|
2089
2436
|
const hintId = hint ? `${htmlFor}-hint` : void 0;
|
|
2090
2437
|
const errorId = error ? `${htmlFor}-error` : void 0;
|
|
2091
|
-
return /* @__PURE__ */ (0,
|
|
2092
|
-
/* @__PURE__ */ (0,
|
|
2438
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
|
|
2439
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("label", { htmlFor, className: "text-foreground text-sm font-medium", children: [
|
|
2093
2440
|
label,
|
|
2094
|
-
required && /* @__PURE__ */ (0,
|
|
2095
|
-
/* @__PURE__ */ (0,
|
|
2096
|
-
/* @__PURE__ */ (0,
|
|
2441
|
+
required && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
|
|
2442
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { "aria-hidden": "true", className: "text-destructive ml-0.5", children: "*" }),
|
|
2443
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "sr-only", children: " (obligatorio)" })
|
|
2097
2444
|
] })
|
|
2098
2445
|
] }),
|
|
2099
2446
|
children,
|
|
2100
|
-
hint && /* @__PURE__ */ (0,
|
|
2101
|
-
error && /* @__PURE__ */ (0,
|
|
2447
|
+
hint && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { id: hintId, className: "text-muted-foreground text-xs", children: hint }),
|
|
2448
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { id: errorId, role: "alert", className: "text-destructive text-xs font-medium", children: error })
|
|
2102
2449
|
] });
|
|
2103
2450
|
}
|
|
2104
2451
|
|
|
2105
2452
|
// src/ui/icon-button/icon-button.tsx
|
|
2106
|
-
var
|
|
2453
|
+
var import_react_aria_components15 = require("react-aria-components");
|
|
2107
2454
|
|
|
2108
2455
|
// src/ui/tooltip/tooltip.tsx
|
|
2109
|
-
var
|
|
2110
|
-
var
|
|
2111
|
-
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
2456
|
+
var import_react_aria_components14 = require("react-aria-components");
|
|
2457
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
2112
2458
|
function TooltipTrigger({
|
|
2113
2459
|
delay = 0,
|
|
2114
|
-
children,
|
|
2115
2460
|
...props
|
|
2116
2461
|
}) {
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
children: [
|
|
2125
|
-
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_aria_components16.Focusable, { children: trigger }),
|
|
2126
|
-
tooltip
|
|
2127
|
-
]
|
|
2128
|
-
}
|
|
2129
|
-
);
|
|
2462
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components14.TooltipTrigger, { "data-slot": "tooltip-trigger", delay, ...props });
|
|
2463
|
+
}
|
|
2464
|
+
function Tooltip({ label, children, delay, ...props }) {
|
|
2465
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(TooltipTrigger, { delay, children: [
|
|
2466
|
+
children,
|
|
2467
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TooltipContent, { ...props, children: label })
|
|
2468
|
+
] });
|
|
2130
2469
|
}
|
|
2131
|
-
function
|
|
2470
|
+
function TooltipContent({
|
|
2132
2471
|
className,
|
|
2133
2472
|
placement = "top",
|
|
2134
2473
|
offset = 4,
|
|
@@ -2136,8 +2475,8 @@ function Tooltip({
|
|
|
2136
2475
|
children,
|
|
2137
2476
|
...props
|
|
2138
2477
|
}) {
|
|
2139
|
-
return /* @__PURE__ */ (0,
|
|
2140
|
-
|
|
2478
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
2479
|
+
import_react_aria_components14.Tooltip,
|
|
2141
2480
|
{
|
|
2142
2481
|
"data-slot": "tooltip-content",
|
|
2143
2482
|
placement,
|
|
@@ -2150,10 +2489,10 @@ function Tooltip({
|
|
|
2150
2489
|
...props,
|
|
2151
2490
|
children: [
|
|
2152
2491
|
children,
|
|
2153
|
-
/* @__PURE__ */ (0,
|
|
2154
|
-
|
|
2492
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
2493
|
+
import_react_aria_components14.OverlayArrow,
|
|
2155
2494
|
{
|
|
2156
|
-
className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs
|
|
2495
|
+
className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs",
|
|
2157
2496
|
style: ({ placement: placement2, defaultStyle }) => ({
|
|
2158
2497
|
...defaultStyle,
|
|
2159
2498
|
rotate: "0deg",
|
|
@@ -2168,7 +2507,7 @@ function Tooltip({
|
|
|
2168
2507
|
}
|
|
2169
2508
|
|
|
2170
2509
|
// src/ui/icon-button/icon-button.tsx
|
|
2171
|
-
var
|
|
2510
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
2172
2511
|
function IconButton({
|
|
2173
2512
|
label,
|
|
2174
2513
|
children,
|
|
@@ -2177,76 +2516,67 @@ function IconButton({
|
|
|
2177
2516
|
variant,
|
|
2178
2517
|
...props
|
|
2179
2518
|
}) {
|
|
2180
|
-
const linkClassName = cn(
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
}
|
|
2194
|
-
) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
2195
|
-
Button,
|
|
2196
|
-
{
|
|
2197
|
-
"data-slot": "icon-button",
|
|
2198
|
-
"aria-label": label,
|
|
2199
|
-
variant,
|
|
2200
|
-
size: "icon",
|
|
2201
|
-
className,
|
|
2202
|
-
...props,
|
|
2203
|
-
children
|
|
2204
|
-
}
|
|
2205
|
-
),
|
|
2206
|
-
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Tooltip, { children: label })
|
|
2207
|
-
] });
|
|
2519
|
+
const linkClassName = cn(buttonVariants({ variant, size: "icon" }), className);
|
|
2520
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Tooltip, { label, children: href ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components15.Link, { "data-slot": "icon-button", "aria-label": label, href, className: linkClassName, children }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2521
|
+
Button,
|
|
2522
|
+
{
|
|
2523
|
+
"data-slot": "icon-button",
|
|
2524
|
+
"aria-label": label,
|
|
2525
|
+
variant,
|
|
2526
|
+
size: "icon",
|
|
2527
|
+
className,
|
|
2528
|
+
...props,
|
|
2529
|
+
children
|
|
2530
|
+
}
|
|
2531
|
+
) });
|
|
2208
2532
|
}
|
|
2209
2533
|
|
|
2210
2534
|
// src/ui/input-group/input-group.tsx
|
|
2211
|
-
var
|
|
2535
|
+
var import_class_variance_authority10 = require("class-variance-authority");
|
|
2212
2536
|
|
|
2213
2537
|
// src/ui/input/input.tsx
|
|
2214
2538
|
var import_react9 = require("react");
|
|
2215
|
-
var
|
|
2216
|
-
var
|
|
2539
|
+
var import_react_aria_components16 = require("react-aria-components");
|
|
2540
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
2217
2541
|
var InputImpl = (0, import_react9.forwardRef)(function Input2({ className, type, ...props }, ref) {
|
|
2218
|
-
return /* @__PURE__ */ (0,
|
|
2542
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
2543
|
+
import_react_aria_components16.Input,
|
|
2544
|
+
{
|
|
2545
|
+
ref,
|
|
2546
|
+
type,
|
|
2547
|
+
"data-slot": "input",
|
|
2548
|
+
className: cn(
|
|
2549
|
+
"box-border 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",
|
|
2550
|
+
className
|
|
2551
|
+
),
|
|
2552
|
+
...props
|
|
2553
|
+
}
|
|
2554
|
+
);
|
|
2219
2555
|
});
|
|
2220
2556
|
var Input3 = InputImpl;
|
|
2221
2557
|
|
|
2222
2558
|
// src/ui/textarea/textarea.tsx
|
|
2223
2559
|
var import_react10 = require("react");
|
|
2224
|
-
var
|
|
2225
|
-
var
|
|
2560
|
+
var import_react_aria_components17 = require("react-aria-components");
|
|
2561
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
2226
2562
|
var TextareaImpl = (0, import_react10.forwardRef)(function Textarea({ className, ...props }, ref) {
|
|
2227
|
-
return /* @__PURE__ */ (0,
|
|
2228
|
-
|
|
2229
|
-
var Textarea2 = TextareaImpl;
|
|
2230
|
-
|
|
2231
|
-
// src/ui/input-group/input-group.tsx
|
|
2232
|
-
var import_jsx_runtime32 = (
|
|
2233
|
-
// biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
|
|
2234
|
-
require("react/jsx-runtime")
|
|
2235
|
-
);
|
|
2236
|
-
function InputGroup({ className, ...props }) {
|
|
2237
|
-
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
2238
|
-
"div",
|
|
2563
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
2564
|
+
import_react_aria_components17.TextArea,
|
|
2239
2565
|
{
|
|
2240
|
-
|
|
2241
|
-
"data-slot": "
|
|
2566
|
+
ref,
|
|
2567
|
+
"data-slot": "textarea",
|
|
2242
2568
|
className: cn(
|
|
2243
|
-
"
|
|
2569
|
+
"box-border 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",
|
|
2244
2570
|
className
|
|
2245
2571
|
),
|
|
2246
2572
|
...props
|
|
2247
2573
|
}
|
|
2248
2574
|
);
|
|
2249
|
-
}
|
|
2575
|
+
});
|
|
2576
|
+
var Textarea2 = TextareaImpl;
|
|
2577
|
+
|
|
2578
|
+
// src/ui/input-group/input-group-addon-variants.ts
|
|
2579
|
+
var import_class_variance_authority9 = require("class-variance-authority");
|
|
2250
2580
|
var inputGroupAddonVariants = (0, import_class_variance_authority9.cva)(
|
|
2251
2581
|
"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",
|
|
2252
2582
|
{
|
|
@@ -2261,6 +2591,26 @@ var inputGroupAddonVariants = (0, import_class_variance_authority9.cva)(
|
|
|
2261
2591
|
defaultVariants: { align: "inline-start" }
|
|
2262
2592
|
}
|
|
2263
2593
|
);
|
|
2594
|
+
|
|
2595
|
+
// src/ui/input-group/input-group.tsx
|
|
2596
|
+
var import_jsx_runtime30 = (
|
|
2597
|
+
// biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
|
|
2598
|
+
require("react/jsx-runtime")
|
|
2599
|
+
);
|
|
2600
|
+
function InputGroup({ className, ...props }) {
|
|
2601
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2602
|
+
"div",
|
|
2603
|
+
{
|
|
2604
|
+
role: "group",
|
|
2605
|
+
"data-slot": "input-group",
|
|
2606
|
+
className: cn(
|
|
2607
|
+
"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",
|
|
2608
|
+
className
|
|
2609
|
+
),
|
|
2610
|
+
...props
|
|
2611
|
+
}
|
|
2612
|
+
);
|
|
2613
|
+
}
|
|
2264
2614
|
function InputGroupAddon({
|
|
2265
2615
|
className,
|
|
2266
2616
|
align = "inline-start",
|
|
@@ -2269,7 +2619,7 @@ function InputGroupAddon({
|
|
|
2269
2619
|
}) {
|
|
2270
2620
|
return (
|
|
2271
2621
|
// biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
|
|
2272
|
-
/* @__PURE__ */ (0,
|
|
2622
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2273
2623
|
"div",
|
|
2274
2624
|
{
|
|
2275
2625
|
role: "group",
|
|
@@ -2286,7 +2636,7 @@ function InputGroupAddon({
|
|
|
2286
2636
|
)
|
|
2287
2637
|
);
|
|
2288
2638
|
}
|
|
2289
|
-
var inputGroupButtonVariants = (0,
|
|
2639
|
+
var inputGroupButtonVariants = (0, import_class_variance_authority10.cva)("shrink-0 shadow-none", {
|
|
2290
2640
|
variants: {
|
|
2291
2641
|
size: { xs: "h-6 px-1.5 text-xs", sm: "h-7 px-2", "icon-xs": "size-6", "icon-sm": "size-7" }
|
|
2292
2642
|
},
|
|
@@ -2300,7 +2650,7 @@ function InputGroupButton({
|
|
|
2300
2650
|
...props
|
|
2301
2651
|
}) {
|
|
2302
2652
|
const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
|
|
2303
|
-
return /* @__PURE__ */ (0,
|
|
2653
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2304
2654
|
Button,
|
|
2305
2655
|
{
|
|
2306
2656
|
"data-slot": "input-group-button",
|
|
@@ -2313,7 +2663,7 @@ function InputGroupButton({
|
|
|
2313
2663
|
);
|
|
2314
2664
|
}
|
|
2315
2665
|
function InputGroupText({ className, ...props }) {
|
|
2316
|
-
return /* @__PURE__ */ (0,
|
|
2666
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2317
2667
|
"span",
|
|
2318
2668
|
{
|
|
2319
2669
|
"data-slot": "input-group-text",
|
|
@@ -2326,7 +2676,7 @@ function InputGroupText({ className, ...props }) {
|
|
|
2326
2676
|
);
|
|
2327
2677
|
}
|
|
2328
2678
|
function InputGroupInput({ className, ...props }) {
|
|
2329
|
-
return /* @__PURE__ */ (0,
|
|
2679
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2330
2680
|
Input3,
|
|
2331
2681
|
{
|
|
2332
2682
|
"data-slot": "input-group-control",
|
|
@@ -2339,7 +2689,7 @@ function InputGroupInput({ className, ...props }) {
|
|
|
2339
2689
|
);
|
|
2340
2690
|
}
|
|
2341
2691
|
function InputGroupTextarea({ className, ...props }) {
|
|
2342
|
-
return /* @__PURE__ */ (0,
|
|
2692
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2343
2693
|
Textarea2,
|
|
2344
2694
|
{
|
|
2345
2695
|
"data-slot": "input-group-control",
|
|
@@ -2353,40 +2703,93 @@ function InputGroupTextarea({ className, ...props }) {
|
|
|
2353
2703
|
}
|
|
2354
2704
|
|
|
2355
2705
|
// src/ui/kbd/kbd.tsx
|
|
2356
|
-
var
|
|
2706
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
2357
2707
|
function Kbd({ className, ...props }) {
|
|
2358
|
-
return /* @__PURE__ */ (0,
|
|
2708
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
2709
|
+
"kbd",
|
|
2710
|
+
{
|
|
2711
|
+
"data-slot": "kbd",
|
|
2712
|
+
className: cn(
|
|
2713
|
+
"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",
|
|
2714
|
+
className
|
|
2715
|
+
),
|
|
2716
|
+
...props
|
|
2717
|
+
}
|
|
2718
|
+
);
|
|
2359
2719
|
}
|
|
2360
2720
|
function KbdGroup({ className, ...props }) {
|
|
2361
|
-
return /* @__PURE__ */ (0,
|
|
2721
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
2722
|
+
"span",
|
|
2723
|
+
{
|
|
2724
|
+
"data-slot": "kbd-group",
|
|
2725
|
+
className: cn("inline-flex items-center gap-1", className),
|
|
2726
|
+
...props
|
|
2727
|
+
}
|
|
2728
|
+
);
|
|
2362
2729
|
}
|
|
2363
2730
|
|
|
2364
2731
|
// src/ui/loading-overlay/loading-overlay.tsx
|
|
2365
|
-
var
|
|
2366
|
-
var
|
|
2367
|
-
function LoadingOverlay({
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2732
|
+
var import_lucide_react8 = require("lucide-react");
|
|
2733
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
2734
|
+
function LoadingOverlay({
|
|
2735
|
+
label = "Cargando",
|
|
2736
|
+
className,
|
|
2737
|
+
...props
|
|
2738
|
+
}) {
|
|
2739
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
2740
|
+
"output",
|
|
2741
|
+
{
|
|
2742
|
+
"aria-live": "polite",
|
|
2743
|
+
className: cn(
|
|
2744
|
+
"absolute inset-0 z-10 flex items-center justify-center bg-background/70 backdrop-blur-[2px]",
|
|
2745
|
+
className
|
|
2746
|
+
),
|
|
2747
|
+
...props,
|
|
2748
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "border-border bg-background flex items-center gap-2 rounded-lg border px-3 py-2 text-sm shadow-sm", children: [
|
|
2749
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_lucide_react8.LoaderCircle, { className: "animate-spin", "aria-hidden": "true" }),
|
|
2750
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: label })
|
|
2751
|
+
] })
|
|
2752
|
+
}
|
|
2753
|
+
);
|
|
2372
2754
|
}
|
|
2373
2755
|
|
|
2374
2756
|
// src/ui/menu/menu.tsx
|
|
2375
|
-
var
|
|
2376
|
-
var
|
|
2377
|
-
var MenuTrigger =
|
|
2757
|
+
var import_react_aria_components18 = require("react-aria-components");
|
|
2758
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
2759
|
+
var MenuTrigger = import_react_aria_components18.MenuTrigger;
|
|
2378
2760
|
function MenuContent({ className, ...props }) {
|
|
2379
|
-
return /* @__PURE__ */ (0,
|
|
2761
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2762
|
+
import_react_aria_components18.Popover,
|
|
2763
|
+
{
|
|
2764
|
+
"data-slot": "menu-content",
|
|
2765
|
+
className: cn(
|
|
2766
|
+
"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",
|
|
2767
|
+
className
|
|
2768
|
+
),
|
|
2769
|
+
...props
|
|
2770
|
+
}
|
|
2771
|
+
);
|
|
2380
2772
|
}
|
|
2381
2773
|
function Menu({ className, ...props }) {
|
|
2382
|
-
return /* @__PURE__ */ (0,
|
|
2774
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components18.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
|
|
2383
2775
|
}
|
|
2384
2776
|
function MenuItem({ className, children, ...props }) {
|
|
2385
|
-
return /* @__PURE__ */ (0,
|
|
2777
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2778
|
+
import_react_aria_components18.MenuItem,
|
|
2779
|
+
{
|
|
2780
|
+
"data-slot": "menu-item",
|
|
2781
|
+
className: cn(
|
|
2782
|
+
"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",
|
|
2783
|
+
className
|
|
2784
|
+
),
|
|
2785
|
+
...props,
|
|
2786
|
+
children
|
|
2787
|
+
}
|
|
2788
|
+
);
|
|
2386
2789
|
}
|
|
2387
2790
|
|
|
2388
2791
|
// src/ui/metric-card/metric-card.tsx
|
|
2389
|
-
var
|
|
2792
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
2390
2793
|
function MetricCard({
|
|
2391
2794
|
className,
|
|
2392
2795
|
label,
|
|
@@ -2396,20 +2799,27 @@ function MetricCard({
|
|
|
2396
2799
|
tone = "default",
|
|
2397
2800
|
...props
|
|
2398
2801
|
}) {
|
|
2399
|
-
return /* @__PURE__ */ (0,
|
|
2400
|
-
icon ? /* @__PURE__ */ (0,
|
|
2401
|
-
/* @__PURE__ */ (0,
|
|
2402
|
-
/* @__PURE__ */ (0,
|
|
2403
|
-
/* @__PURE__ */ (0,
|
|
2404
|
-
|
|
2802
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Card, { "data-slot": "metric-card", "data-tone": tone, className: cn("min-w-0", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(CardContent, { className: "flex items-start gap-3", children: [
|
|
2803
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { "data-slot": "metric-card-icon", className: "text-muted-foreground shrink-0", children: icon }) : null,
|
|
2804
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "min-w-0", children: [
|
|
2805
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { "data-slot": "metric-card-label", className: "text-muted-foreground text-sm", children: label }),
|
|
2806
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
2807
|
+
"strong",
|
|
2808
|
+
{
|
|
2809
|
+
"data-slot": "metric-card-value",
|
|
2810
|
+
className: "mt-1 block text-2xl font-semibold tracking-tight",
|
|
2811
|
+
children: value
|
|
2812
|
+
}
|
|
2813
|
+
),
|
|
2814
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { "data-slot": "metric-card-description", className: "text-muted-foreground mt-1 text-xs", children: description }) : null
|
|
2405
2815
|
] })
|
|
2406
2816
|
] }) });
|
|
2407
2817
|
}
|
|
2408
2818
|
|
|
2409
2819
|
// src/ui/otp-input/otp-input.tsx
|
|
2410
2820
|
var import_react11 = require("react");
|
|
2411
|
-
var
|
|
2412
|
-
var
|
|
2821
|
+
var import_react_aria_components19 = require("react-aria-components");
|
|
2822
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
2413
2823
|
function normalizeOtp(value, length) {
|
|
2414
2824
|
return value.replace(/[^0-9]/g, "").slice(0, length);
|
|
2415
2825
|
}
|
|
@@ -2461,7 +2871,7 @@ var OtpInputImpl = (0, import_react11.forwardRef)(function OtpInput({
|
|
|
2461
2871
|
input.setSelectionRange(position, position);
|
|
2462
2872
|
setSelectionStart(position);
|
|
2463
2873
|
}
|
|
2464
|
-
return /* @__PURE__ */ (0,
|
|
2874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
|
|
2465
2875
|
"div",
|
|
2466
2876
|
{
|
|
2467
2877
|
"data-slot": "otp-input",
|
|
@@ -2471,8 +2881,8 @@ var OtpInputImpl = (0, import_react11.forwardRef)(function OtpInput({
|
|
|
2471
2881
|
style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
|
|
2472
2882
|
onPointerDown: handlePointerDown,
|
|
2473
2883
|
children: [
|
|
2474
|
-
/* @__PURE__ */ (0,
|
|
2475
|
-
|
|
2884
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
2885
|
+
import_react_aria_components19.Input,
|
|
2476
2886
|
{
|
|
2477
2887
|
...props,
|
|
2478
2888
|
ref: inputRef,
|
|
@@ -2511,7 +2921,7 @@ var OtpInputImpl = (0, import_react11.forwardRef)(function OtpInput({
|
|
|
2511
2921
|
}
|
|
2512
2922
|
}
|
|
2513
2923
|
),
|
|
2514
|
-
slots.map((slot, index) => /* @__PURE__ */ (0,
|
|
2924
|
+
slots.map((slot, index) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
2515
2925
|
"span",
|
|
2516
2926
|
{
|
|
2517
2927
|
"aria-hidden": "true",
|
|
@@ -2534,27 +2944,59 @@ var OtpInputImpl = (0, import_react11.forwardRef)(function OtpInput({
|
|
|
2534
2944
|
var OtpInput2 = OtpInputImpl;
|
|
2535
2945
|
|
|
2536
2946
|
// src/ui/page-header/page-header.tsx
|
|
2537
|
-
var
|
|
2947
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
2538
2948
|
function PageHeader({ className, ...props }) {
|
|
2539
|
-
return /* @__PURE__ */ (0,
|
|
2949
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2950
|
+
"header",
|
|
2951
|
+
{
|
|
2952
|
+
"data-slot": "page-header",
|
|
2953
|
+
className: cn(
|
|
2954
|
+
"flex flex-col gap-4 py-2 sm:flex-row sm:items-center sm:justify-between",
|
|
2955
|
+
className
|
|
2956
|
+
),
|
|
2957
|
+
...props
|
|
2958
|
+
}
|
|
2959
|
+
);
|
|
2540
2960
|
}
|
|
2541
2961
|
function PageHeaderHeading({ className, ...props }) {
|
|
2542
|
-
return /* @__PURE__ */ (0,
|
|
2962
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
|
|
2543
2963
|
}
|
|
2544
|
-
function PageHeaderTitle({ className, ...props }) {
|
|
2545
|
-
return /* @__PURE__ */ (0,
|
|
2964
|
+
function PageHeaderTitle({ className, children, ...props }) {
|
|
2965
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2966
|
+
"h1",
|
|
2967
|
+
{
|
|
2968
|
+
"data-slot": "page-header-title",
|
|
2969
|
+
className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className),
|
|
2970
|
+
...props,
|
|
2971
|
+
children
|
|
2972
|
+
}
|
|
2973
|
+
);
|
|
2546
2974
|
}
|
|
2547
2975
|
function PageHeaderDescription({ className, ...props }) {
|
|
2548
|
-
return /* @__PURE__ */ (0,
|
|
2976
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2977
|
+
"p",
|
|
2978
|
+
{
|
|
2979
|
+
"data-slot": "page-header-description",
|
|
2980
|
+
className: cn("mt-1 text-sm text-muted-foreground", className),
|
|
2981
|
+
...props
|
|
2982
|
+
}
|
|
2983
|
+
);
|
|
2549
2984
|
}
|
|
2550
2985
|
function PageHeaderActions({ className, ...props }) {
|
|
2551
|
-
return /* @__PURE__ */ (0,
|
|
2986
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2987
|
+
"div",
|
|
2988
|
+
{
|
|
2989
|
+
"data-slot": "page-header-actions",
|
|
2990
|
+
className: cn("flex shrink-0 items-center gap-2", className),
|
|
2991
|
+
...props
|
|
2992
|
+
}
|
|
2993
|
+
);
|
|
2552
2994
|
}
|
|
2553
2995
|
|
|
2554
2996
|
// src/ui/pagination/pagination.tsx
|
|
2555
|
-
var
|
|
2556
|
-
var
|
|
2557
|
-
var
|
|
2997
|
+
var import_lucide_react9 = require("lucide-react");
|
|
2998
|
+
var React6 = __toESM(require("react"), 1);
|
|
2999
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
2558
3000
|
function visiblePages(page, pageCount, siblingCount) {
|
|
2559
3001
|
return [
|
|
2560
3002
|
.../* @__PURE__ */ new Set([
|
|
@@ -2575,15 +3017,15 @@ function Pagination({
|
|
|
2575
3017
|
}) {
|
|
2576
3018
|
if (pageCount <= 1) return null;
|
|
2577
3019
|
const pages = visiblePages(page, pageCount, siblingCount);
|
|
2578
|
-
return /* @__PURE__ */ (0,
|
|
3020
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
2579
3021
|
"nav",
|
|
2580
3022
|
{
|
|
2581
3023
|
"aria-label": ariaLabel,
|
|
2582
3024
|
className: cn("flex flex-wrap items-center justify-between gap-4", className),
|
|
2583
3025
|
children: [
|
|
2584
|
-
/* @__PURE__ */ (0,
|
|
2585
|
-
/* @__PURE__ */ (0,
|
|
2586
|
-
/* @__PURE__ */ (0,
|
|
3026
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "text-muted-foreground text-sm", children: summary ?? `P\xE1gina ${page} de ${pageCount}` }),
|
|
3027
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
3028
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2587
3029
|
Button,
|
|
2588
3030
|
{
|
|
2589
3031
|
"aria-label": "P\xE1gina anterior",
|
|
@@ -2591,14 +3033,14 @@ function Pagination({
|
|
|
2591
3033
|
onPress: () => onPageChange(page - 1),
|
|
2592
3034
|
size: "icon",
|
|
2593
3035
|
variant: "ghost",
|
|
2594
|
-
children: /* @__PURE__ */ (0,
|
|
3036
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react9.ChevronLeft, {})
|
|
2595
3037
|
}
|
|
2596
3038
|
),
|
|
2597
3039
|
pages.map((item, index) => {
|
|
2598
3040
|
const previousPage = pages[index - 1];
|
|
2599
|
-
return /* @__PURE__ */ (0,
|
|
2600
|
-
previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */ (0,
|
|
2601
|
-
/* @__PURE__ */ (0,
|
|
3041
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(React6.Fragment, { children: [
|
|
3042
|
+
previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "aria-hidden": "true", className: "text-muted-foreground px-1", children: "\u2026" }) : null,
|
|
3043
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2602
3044
|
Button,
|
|
2603
3045
|
{
|
|
2604
3046
|
"aria-current": item === page ? "page" : void 0,
|
|
@@ -2611,7 +3053,7 @@ function Pagination({
|
|
|
2611
3053
|
)
|
|
2612
3054
|
] }, item);
|
|
2613
3055
|
}),
|
|
2614
|
-
/* @__PURE__ */ (0,
|
|
3056
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2615
3057
|
Button,
|
|
2616
3058
|
{
|
|
2617
3059
|
"aria-label": "P\xE1gina siguiente",
|
|
@@ -2619,7 +3061,7 @@ function Pagination({
|
|
|
2619
3061
|
onPress: () => onPageChange(page + 1),
|
|
2620
3062
|
size: "icon",
|
|
2621
3063
|
variant: "ghost",
|
|
2622
|
-
children: /* @__PURE__ */ (0,
|
|
3064
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react9.ChevronRight, {})
|
|
2623
3065
|
}
|
|
2624
3066
|
)
|
|
2625
3067
|
] })
|
|
@@ -2629,18 +3071,37 @@ function Pagination({
|
|
|
2629
3071
|
}
|
|
2630
3072
|
|
|
2631
3073
|
// src/ui/popover/popover.tsx
|
|
2632
|
-
var
|
|
2633
|
-
var
|
|
2634
|
-
var PopoverTrigger =
|
|
2635
|
-
function
|
|
2636
|
-
return /* @__PURE__ */ (0,
|
|
3074
|
+
var import_react_aria_components20 = require("react-aria-components");
|
|
3075
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
3076
|
+
var PopoverTrigger = import_react_aria_components20.DialogTrigger;
|
|
3077
|
+
function PopoverContent({ className, ...props }) {
|
|
3078
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
3079
|
+
import_react_aria_components20.Popover,
|
|
3080
|
+
{
|
|
3081
|
+
"data-slot": "popover",
|
|
3082
|
+
offset: 6,
|
|
3083
|
+
className: cn(
|
|
3084
|
+
"z-50 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",
|
|
3085
|
+
className
|
|
3086
|
+
),
|
|
3087
|
+
...props
|
|
3088
|
+
}
|
|
3089
|
+
);
|
|
3090
|
+
}
|
|
3091
|
+
function Popover4(props) {
|
|
3092
|
+
if (!("trigger" in props)) return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PopoverContent, { ...props });
|
|
3093
|
+
const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
|
|
3094
|
+
const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
|
|
3095
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(PopoverTrigger, { defaultOpen, isOpen, onOpenChange, children: [
|
|
3096
|
+
triggerElement,
|
|
3097
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(PopoverContent, { ...contentProps, children })
|
|
3098
|
+
] });
|
|
2637
3099
|
}
|
|
2638
|
-
var PopoverContent = Popover4;
|
|
2639
3100
|
|
|
2640
3101
|
// src/ui/quantity-input/quantity-input.tsx
|
|
2641
|
-
var
|
|
2642
|
-
var
|
|
2643
|
-
var
|
|
3102
|
+
var import_lucide_react10 = require("lucide-react");
|
|
3103
|
+
var import_react_aria_components21 = require("react-aria-components");
|
|
3104
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
2644
3105
|
function QuantityInput({
|
|
2645
3106
|
className,
|
|
2646
3107
|
inputClassName,
|
|
@@ -2650,23 +3111,53 @@ function QuantityInput({
|
|
|
2650
3111
|
step = 1,
|
|
2651
3112
|
...props
|
|
2652
3113
|
}) {
|
|
2653
|
-
return /* @__PURE__ */ (0,
|
|
2654
|
-
|
|
3114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3115
|
+
import_react_aria_components21.NumberField,
|
|
2655
3116
|
{
|
|
2656
3117
|
...props,
|
|
2657
3118
|
minValue,
|
|
2658
3119
|
step,
|
|
2659
3120
|
"data-slot": "quantity-input",
|
|
2660
|
-
className: cn(
|
|
2661
|
-
|
|
2662
|
-
|
|
3121
|
+
className: cn(
|
|
3122
|
+
"group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50",
|
|
3123
|
+
className
|
|
3124
|
+
),
|
|
3125
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
|
|
3126
|
+
import_react_aria_components21.Group,
|
|
2663
3127
|
{
|
|
2664
3128
|
"data-slot": "quantity-input-group",
|
|
2665
|
-
className: "flex h-8 min-w-0 items-stretch overflow-hidden rounded-lg border
|
|
3129
|
+
className: "border-border bg-background text-foreground focus-within:border-ring focus-within:ring-ring/50 group-data-invalid/quantity-input:border-destructive flex h-8 min-w-0 items-stretch overflow-hidden rounded-lg border transition-[border-color,box-shadow] focus-within:ring-3",
|
|
2666
3130
|
children: [
|
|
2667
|
-
/* @__PURE__ */ (0,
|
|
2668
|
-
|
|
2669
|
-
|
|
3131
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3132
|
+
import_react_aria_components21.Button,
|
|
3133
|
+
{
|
|
3134
|
+
slot: "decrement",
|
|
3135
|
+
"aria-label": decrementAriaLabel,
|
|
3136
|
+
"data-slot": "quantity-input-decrement",
|
|
3137
|
+
className: "border-border text-muted-foreground hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted flex size-8 shrink-0 cursor-pointer items-center justify-center border-r transition-colors outline-none data-disabled:pointer-events-none",
|
|
3138
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react10.Minus, { "aria-hidden": "true", className: "size-4" })
|
|
3139
|
+
}
|
|
3140
|
+
),
|
|
3141
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3142
|
+
import_react_aria_components21.Input,
|
|
3143
|
+
{
|
|
3144
|
+
"data-slot": "quantity-input-value",
|
|
3145
|
+
className: cn(
|
|
3146
|
+
"w-14 min-w-0 bg-transparent px-1 text-center text-sm tabular-nums outline-none",
|
|
3147
|
+
inputClassName
|
|
3148
|
+
)
|
|
3149
|
+
}
|
|
3150
|
+
),
|
|
3151
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3152
|
+
import_react_aria_components21.Button,
|
|
3153
|
+
{
|
|
3154
|
+
slot: "increment",
|
|
3155
|
+
"aria-label": incrementAriaLabel,
|
|
3156
|
+
"data-slot": "quantity-input-increment",
|
|
3157
|
+
className: "border-border text-muted-foreground hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted flex size-8 shrink-0 cursor-pointer items-center justify-center border-l transition-colors outline-none data-disabled:pointer-events-none",
|
|
3158
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react10.Plus, { "aria-hidden": "true", className: "size-4" })
|
|
3159
|
+
}
|
|
3160
|
+
)
|
|
2670
3161
|
]
|
|
2671
3162
|
}
|
|
2672
3163
|
)
|
|
@@ -2675,38 +3166,94 @@ function QuantityInput({
|
|
|
2675
3166
|
}
|
|
2676
3167
|
|
|
2677
3168
|
// src/ui/select/select.tsx
|
|
2678
|
-
var
|
|
2679
|
-
var
|
|
2680
|
-
var
|
|
2681
|
-
var Select =
|
|
3169
|
+
var import_lucide_react11 = require("lucide-react");
|
|
3170
|
+
var import_react_aria_components22 = require("react-aria-components");
|
|
3171
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
3172
|
+
var Select = import_react_aria_components22.Select;
|
|
2682
3173
|
function SelectTrigger({ className, children, ...props }) {
|
|
2683
|
-
return /* @__PURE__ */ (0,
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
3174
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3175
|
+
import_react_aria_components22.Button,
|
|
3176
|
+
{
|
|
3177
|
+
"data-slot": "select-trigger",
|
|
3178
|
+
className: cn(
|
|
3179
|
+
"group/select-trigger box-border 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",
|
|
3180
|
+
className
|
|
3181
|
+
),
|
|
3182
|
+
...props,
|
|
3183
|
+
children: (state) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
|
|
3184
|
+
typeof children === "function" ? children(state) : children,
|
|
3185
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3186
|
+
import_lucide_react11.ChevronDown,
|
|
3187
|
+
{
|
|
3188
|
+
"aria-hidden": "true",
|
|
3189
|
+
className: "text-muted-foreground ml-auto size-4 transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none"
|
|
3190
|
+
}
|
|
3191
|
+
)
|
|
3192
|
+
] })
|
|
3193
|
+
}
|
|
3194
|
+
);
|
|
2687
3195
|
}
|
|
2688
3196
|
function SelectValue({ className, ...props }) {
|
|
2689
|
-
return /* @__PURE__ */ (0,
|
|
3197
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3198
|
+
import_react_aria_components22.SelectValue,
|
|
3199
|
+
{
|
|
3200
|
+
"data-slot": "select-value",
|
|
3201
|
+
className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className),
|
|
3202
|
+
...props
|
|
3203
|
+
}
|
|
3204
|
+
);
|
|
2690
3205
|
}
|
|
2691
3206
|
function SelectContent({ className, ...props }) {
|
|
2692
|
-
return /* @__PURE__ */ (0,
|
|
3207
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3208
|
+
import_react_aria_components22.Popover,
|
|
3209
|
+
{
|
|
3210
|
+
"data-slot": "select-content",
|
|
3211
|
+
className: cn(
|
|
3212
|
+
"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",
|
|
3213
|
+
className
|
|
3214
|
+
),
|
|
3215
|
+
...props
|
|
3216
|
+
}
|
|
3217
|
+
);
|
|
2693
3218
|
}
|
|
2694
3219
|
function SelectList({ className, ...props }) {
|
|
2695
|
-
return /* @__PURE__ */ (0,
|
|
3220
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3221
|
+
import_react_aria_components22.ListBox,
|
|
3222
|
+
{
|
|
3223
|
+
"data-slot": "select-list",
|
|
3224
|
+
className: cn("max-h-64 overflow-y-auto", className),
|
|
3225
|
+
...props
|
|
3226
|
+
}
|
|
3227
|
+
);
|
|
2696
3228
|
}
|
|
2697
|
-
function SelectItem({
|
|
2698
|
-
|
|
3229
|
+
function SelectItem({
|
|
3230
|
+
className,
|
|
3231
|
+
children,
|
|
3232
|
+
...props
|
|
3233
|
+
}) {
|
|
3234
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3235
|
+
import_react_aria_components22.ListBoxItem,
|
|
3236
|
+
{
|
|
3237
|
+
"data-slot": "select-item",
|
|
3238
|
+
className: cn(
|
|
3239
|
+
"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",
|
|
3240
|
+
className
|
|
3241
|
+
),
|
|
3242
|
+
...props,
|
|
3243
|
+
children
|
|
3244
|
+
}
|
|
3245
|
+
);
|
|
2699
3246
|
}
|
|
2700
3247
|
|
|
2701
3248
|
// src/ui/sheet/sheet.tsx
|
|
2702
|
-
var
|
|
2703
|
-
var
|
|
2704
|
-
var
|
|
3249
|
+
var import_lucide_react12 = require("lucide-react");
|
|
3250
|
+
var import_react_aria_components23 = require("react-aria-components");
|
|
3251
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
2705
3252
|
function SheetTrigger({ ...props }) {
|
|
2706
|
-
return /* @__PURE__ */ (0,
|
|
3253
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_aria_components23.DialogTrigger, { "data-slot": "sheet-trigger", ...props });
|
|
2707
3254
|
}
|
|
2708
3255
|
function SheetClose({ className, variant = "outline", size = "default", ...props }) {
|
|
2709
|
-
return /* @__PURE__ */ (0,
|
|
3256
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
2710
3257
|
Button,
|
|
2711
3258
|
{
|
|
2712
3259
|
slot: "close",
|
|
@@ -2723,8 +3270,8 @@ function SheetOverlay({
|
|
|
2723
3270
|
children,
|
|
2724
3271
|
...props
|
|
2725
3272
|
}) {
|
|
2726
|
-
return /* @__PURE__ */ (0,
|
|
2727
|
-
|
|
3273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3274
|
+
import_react_aria_components23.ModalOverlay,
|
|
2728
3275
|
{
|
|
2729
3276
|
"data-slot": "sheet-overlay",
|
|
2730
3277
|
isDismissable: true,
|
|
@@ -2744,8 +3291,8 @@ function Sheet({
|
|
|
2744
3291
|
showCloseButton = true,
|
|
2745
3292
|
...props
|
|
2746
3293
|
}) {
|
|
2747
|
-
return /* @__PURE__ */ (0,
|
|
2748
|
-
|
|
3294
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(SheetOverlay, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3295
|
+
import_react_aria_components23.Modal,
|
|
2749
3296
|
{
|
|
2750
3297
|
"data-slot": "sheet-content",
|
|
2751
3298
|
"data-side": side,
|
|
@@ -2753,16 +3300,16 @@ function Sheet({
|
|
|
2753
3300
|
"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",
|
|
2754
3301
|
className
|
|
2755
3302
|
),
|
|
2756
|
-
children: /* @__PURE__ */ (0,
|
|
2757
|
-
|
|
3303
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
|
|
3304
|
+
import_react_aria_components23.Dialog,
|
|
2758
3305
|
{
|
|
2759
3306
|
"data-slot": "sheet",
|
|
2760
3307
|
className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
|
|
2761
3308
|
children: [
|
|
2762
3309
|
children,
|
|
2763
|
-
showCloseButton && /* @__PURE__ */ (0,
|
|
2764
|
-
/* @__PURE__ */ (0,
|
|
2765
|
-
/* @__PURE__ */ (0,
|
|
3310
|
+
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
|
|
3311
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react12.XIcon, {}),
|
|
3312
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "sr-only", children: "Cerrar" })
|
|
2766
3313
|
] })
|
|
2767
3314
|
]
|
|
2768
3315
|
}
|
|
@@ -2777,10 +3324,25 @@ function SheetContent({
|
|
|
2777
3324
|
showCloseButton = true,
|
|
2778
3325
|
...props
|
|
2779
3326
|
}) {
|
|
2780
|
-
return /* @__PURE__ */ (0,
|
|
3327
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Sheet, { className, side, showCloseButton, ...props, children });
|
|
3328
|
+
}
|
|
3329
|
+
function Drawer({
|
|
3330
|
+
children,
|
|
3331
|
+
trigger,
|
|
3332
|
+
triggerProps,
|
|
3333
|
+
defaultOpen,
|
|
3334
|
+
isOpen,
|
|
3335
|
+
onOpenChange,
|
|
3336
|
+
...contentProps
|
|
3337
|
+
}) {
|
|
3338
|
+
const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Button, { ...triggerProps, children: trigger }) : trigger;
|
|
3339
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(SheetTrigger, { defaultOpen, isOpen, onOpenChange, children: [
|
|
3340
|
+
triggerElement,
|
|
3341
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(SheetContent, { ...contentProps, children })
|
|
3342
|
+
] });
|
|
2781
3343
|
}
|
|
2782
3344
|
function SheetHeader({ className, ...props }) {
|
|
2783
|
-
return /* @__PURE__ */ (0,
|
|
3345
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
2784
3346
|
"div",
|
|
2785
3347
|
{
|
|
2786
3348
|
"data-slot": "sheet-header",
|
|
@@ -2790,7 +3352,7 @@ function SheetHeader({ className, ...props }) {
|
|
|
2790
3352
|
);
|
|
2791
3353
|
}
|
|
2792
3354
|
function SheetFooter({ className, ...props }) {
|
|
2793
|
-
return /* @__PURE__ */ (0,
|
|
3355
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
2794
3356
|
"div",
|
|
2795
3357
|
{
|
|
2796
3358
|
"data-slot": "sheet-footer",
|
|
@@ -2800,8 +3362,8 @@ function SheetFooter({ className, ...props }) {
|
|
|
2800
3362
|
);
|
|
2801
3363
|
}
|
|
2802
3364
|
function SheetTitle({ className, ...props }) {
|
|
2803
|
-
return /* @__PURE__ */ (0,
|
|
2804
|
-
|
|
3365
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3366
|
+
import_react_aria_components23.Heading,
|
|
2805
3367
|
{
|
|
2806
3368
|
slot: "title",
|
|
2807
3369
|
"data-slot": "sheet-title",
|
|
@@ -2814,8 +3376,8 @@ function SheetDescription({
|
|
|
2814
3376
|
className,
|
|
2815
3377
|
...props
|
|
2816
3378
|
}) {
|
|
2817
|
-
return /* @__PURE__ */ (0,
|
|
2818
|
-
|
|
3379
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3380
|
+
import_react_aria_components23.Text,
|
|
2819
3381
|
{
|
|
2820
3382
|
slot: "description",
|
|
2821
3383
|
"data-slot": "sheet-description",
|
|
@@ -2824,25 +3386,36 @@ function SheetDescription({
|
|
|
2824
3386
|
}
|
|
2825
3387
|
);
|
|
2826
3388
|
}
|
|
3389
|
+
var DrawerTrigger = SheetTrigger;
|
|
3390
|
+
var DrawerContent = SheetContent;
|
|
3391
|
+
var DrawerClose = SheetClose;
|
|
3392
|
+
var DrawerHeader = SheetHeader;
|
|
3393
|
+
var DrawerFooter = SheetFooter;
|
|
3394
|
+
var DrawerTitle = SheetTitle;
|
|
3395
|
+
var DrawerDescription = SheetDescription;
|
|
2827
3396
|
|
|
2828
3397
|
// src/ui/sidebar/sidebar.tsx
|
|
2829
|
-
var
|
|
3398
|
+
var import_lucide_react13 = require("lucide-react");
|
|
3399
|
+
var import_react13 = require("react");
|
|
3400
|
+
var import_react_aria_components24 = require("react-aria-components");
|
|
3401
|
+
|
|
3402
|
+
// src/ui/sidebar/sidebar-context.ts
|
|
2830
3403
|
var import_react12 = require("react");
|
|
2831
|
-
var import_react_aria_components26 = require("react-aria-components");
|
|
2832
|
-
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
2833
3404
|
var SidebarContext = (0, import_react12.createContext)(null);
|
|
2834
3405
|
function useSidebar() {
|
|
2835
3406
|
const context = (0, import_react12.useContext)(SidebarContext);
|
|
2836
|
-
if (!context)
|
|
2837
|
-
throw new Error("useSidebar must be used inside SidebarProvider");
|
|
3407
|
+
if (!context) throw new Error("useSidebar must be used inside SidebarProvider");
|
|
2838
3408
|
return context;
|
|
2839
3409
|
}
|
|
3410
|
+
|
|
3411
|
+
// src/ui/sidebar/sidebar.tsx
|
|
3412
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
2840
3413
|
function SidebarProvider({
|
|
2841
3414
|
defaultCollapsed = false,
|
|
2842
3415
|
children
|
|
2843
3416
|
}) {
|
|
2844
|
-
const [collapsed, setCollapsed] = (0,
|
|
2845
|
-
const value = (0,
|
|
3417
|
+
const [collapsed, setCollapsed] = (0, import_react13.useState)(defaultCollapsed);
|
|
3418
|
+
const value = (0, import_react13.useMemo)(
|
|
2846
3419
|
() => ({
|
|
2847
3420
|
collapsed,
|
|
2848
3421
|
setCollapsed,
|
|
@@ -2850,14 +3423,11 @@ function SidebarProvider({
|
|
|
2850
3423
|
}),
|
|
2851
3424
|
[collapsed]
|
|
2852
3425
|
);
|
|
2853
|
-
return /* @__PURE__ */ (0,
|
|
3426
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(SidebarContext.Provider, { value, children });
|
|
2854
3427
|
}
|
|
2855
|
-
function Sidebar({
|
|
2856
|
-
className,
|
|
2857
|
-
...props
|
|
2858
|
-
}) {
|
|
3428
|
+
function Sidebar({ className, ...props }) {
|
|
2859
3429
|
const { collapsed } = useSidebar();
|
|
2860
|
-
return /* @__PURE__ */ (0,
|
|
3430
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
2861
3431
|
"aside",
|
|
2862
3432
|
{
|
|
2863
3433
|
"data-slot": "sidebar",
|
|
@@ -2870,11 +3440,8 @@ function Sidebar({
|
|
|
2870
3440
|
}
|
|
2871
3441
|
);
|
|
2872
3442
|
}
|
|
2873
|
-
function SidebarHeader({
|
|
2874
|
-
|
|
2875
|
-
...props
|
|
2876
|
-
}) {
|
|
2877
|
-
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3443
|
+
function SidebarHeader({ className, ...props }) {
|
|
3444
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
2878
3445
|
"div",
|
|
2879
3446
|
{
|
|
2880
3447
|
"data-slot": "sidebar-header",
|
|
@@ -2889,7 +3456,7 @@ function SidebarSearch({
|
|
|
2889
3456
|
className,
|
|
2890
3457
|
...props
|
|
2891
3458
|
}) {
|
|
2892
|
-
return /* @__PURE__ */ (0,
|
|
3459
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
|
|
2893
3460
|
"button",
|
|
2894
3461
|
{
|
|
2895
3462
|
type: "button",
|
|
@@ -2900,18 +3467,15 @@ function SidebarSearch({
|
|
|
2900
3467
|
),
|
|
2901
3468
|
...props,
|
|
2902
3469
|
children: [
|
|
2903
|
-
/* @__PURE__ */ (0,
|
|
2904
|
-
/* @__PURE__ */ (0,
|
|
2905
|
-
/* @__PURE__ */ (0,
|
|
3470
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.Search, { className: "size-4 shrink-0" }),
|
|
3471
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "flex-1 text-left", children: label }),
|
|
3472
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("kbd", { className: "bg-secondary text-muted-foreground rounded px-1.5 py-0.5 font-mono text-[10px]", children: shortcut })
|
|
2906
3473
|
]
|
|
2907
3474
|
}
|
|
2908
3475
|
);
|
|
2909
3476
|
}
|
|
2910
|
-
function SidebarContent({
|
|
2911
|
-
|
|
2912
|
-
...props
|
|
2913
|
-
}) {
|
|
2914
|
-
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3477
|
+
function SidebarContent({ className, ...props }) {
|
|
3478
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
2915
3479
|
"nav",
|
|
2916
3480
|
{
|
|
2917
3481
|
"data-slot": "sidebar-content",
|
|
@@ -2921,18 +3485,12 @@ function SidebarContent({
|
|
|
2921
3485
|
}
|
|
2922
3486
|
);
|
|
2923
3487
|
}
|
|
2924
|
-
function SidebarFooter({
|
|
2925
|
-
|
|
2926
|
-
...props
|
|
2927
|
-
}) {
|
|
2928
|
-
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3488
|
+
function SidebarFooter({ className, ...props }) {
|
|
3489
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
2929
3490
|
"div",
|
|
2930
3491
|
{
|
|
2931
3492
|
"data-slot": "sidebar-footer",
|
|
2932
|
-
className: cn(
|
|
2933
|
-
"mt-auto flex flex-col gap-2 border-t border-border p-2",
|
|
2934
|
-
className
|
|
2935
|
-
),
|
|
3493
|
+
className: cn("mt-auto flex flex-col gap-2 border-t border-border p-2", className),
|
|
2936
3494
|
...props
|
|
2937
3495
|
}
|
|
2938
3496
|
);
|
|
@@ -2944,27 +3502,19 @@ function SidebarGroup({
|
|
|
2944
3502
|
...props
|
|
2945
3503
|
}) {
|
|
2946
3504
|
const { collapsed } = useSidebar();
|
|
2947
|
-
return /* @__PURE__ */ (0,
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
label && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
2955
|
-
"h2",
|
|
2956
|
-
{
|
|
2957
|
-
className: cn(
|
|
2958
|
-
"mb-1 px-3 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",
|
|
2959
|
-
collapsed && "sr-only"
|
|
2960
|
-
),
|
|
2961
|
-
children: label
|
|
2962
|
-
}
|
|
3505
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("section", { "data-slot": "sidebar-group", className: cn("mb-4 last:mb-0", className), ...props, children: [
|
|
3506
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3507
|
+
"h2",
|
|
3508
|
+
{
|
|
3509
|
+
className: cn(
|
|
3510
|
+
"mb-1 px-3 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",
|
|
3511
|
+
collapsed && "sr-only"
|
|
2963
3512
|
),
|
|
2964
|
-
children
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
3513
|
+
children: label
|
|
3514
|
+
}
|
|
3515
|
+
),
|
|
3516
|
+
children
|
|
3517
|
+
] });
|
|
2968
3518
|
}
|
|
2969
3519
|
function SidebarItem({
|
|
2970
3520
|
icon,
|
|
@@ -2977,8 +3527,8 @@ function SidebarItem({
|
|
|
2977
3527
|
}) {
|
|
2978
3528
|
const { collapsed } = useSidebar();
|
|
2979
3529
|
const content = typeof children === "function" ? label : children ?? label;
|
|
2980
|
-
return /* @__PURE__ */ (0,
|
|
2981
|
-
|
|
3530
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3531
|
+
import_react_aria_components24.Link,
|
|
2982
3532
|
{
|
|
2983
3533
|
"data-slot": "sidebar-item",
|
|
2984
3534
|
"aria-current": active ? "page" : void 0,
|
|
@@ -2989,25 +3539,16 @@ function SidebarItem({
|
|
|
2989
3539
|
typeof className === "function" ? className : className
|
|
2990
3540
|
),
|
|
2991
3541
|
...props,
|
|
2992
|
-
children: (values) => /* @__PURE__ */ (0,
|
|
2993
|
-
/* @__PURE__ */ (0,
|
|
2994
|
-
/* @__PURE__ */ (0,
|
|
2995
|
-
|
|
2996
|
-
{
|
|
2997
|
-
className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"),
|
|
2998
|
-
children: typeof children === "function" ? children(values) : content
|
|
2999
|
-
}
|
|
3000
|
-
),
|
|
3001
|
-
badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "text-xs text-muted-foreground", children: badge })
|
|
3542
|
+
children: (values) => /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
|
|
3543
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
|
|
3544
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"), children: typeof children === "function" ? children(values) : content }),
|
|
3545
|
+
badge && !collapsed && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "text-muted-foreground text-xs", children: badge })
|
|
3002
3546
|
] })
|
|
3003
3547
|
}
|
|
3004
3548
|
);
|
|
3005
3549
|
}
|
|
3006
|
-
function SidebarSeparator({
|
|
3007
|
-
|
|
3008
|
-
...props
|
|
3009
|
-
}) {
|
|
3010
|
-
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3550
|
+
function SidebarSeparator({ className, ...props }) {
|
|
3551
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3011
3552
|
"hr",
|
|
3012
3553
|
{
|
|
3013
3554
|
"data-slot": "sidebar-separator",
|
|
@@ -3018,7 +3559,7 @@ function SidebarSeparator({
|
|
|
3018
3559
|
}
|
|
3019
3560
|
function SidebarTrigger({ className, ...props }) {
|
|
3020
3561
|
const { collapsed, toggle } = useSidebar();
|
|
3021
|
-
return /* @__PURE__ */ (0,
|
|
3562
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3022
3563
|
Button,
|
|
3023
3564
|
{
|
|
3024
3565
|
"aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
|
|
@@ -3027,16 +3568,13 @@ function SidebarTrigger({ className, ...props }) {
|
|
|
3027
3568
|
variant: "ghost",
|
|
3028
3569
|
className: cn("ml-auto", className),
|
|
3029
3570
|
...props,
|
|
3030
|
-
children: collapsed ? /* @__PURE__ */ (0,
|
|
3571
|
+
children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.ChevronLeft, {})
|
|
3031
3572
|
}
|
|
3032
3573
|
);
|
|
3033
3574
|
}
|
|
3034
|
-
function SidebarRail({
|
|
3035
|
-
className,
|
|
3036
|
-
...props
|
|
3037
|
-
}) {
|
|
3575
|
+
function SidebarRail({ className, ...props }) {
|
|
3038
3576
|
const { toggle } = useSidebar();
|
|
3039
|
-
return /* @__PURE__ */ (0,
|
|
3577
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3040
3578
|
"button",
|
|
3041
3579
|
{
|
|
3042
3580
|
type: "button",
|
|
@@ -3051,7 +3589,7 @@ function SidebarRail({
|
|
|
3051
3589
|
);
|
|
3052
3590
|
}
|
|
3053
3591
|
function SidebarMore({ className, ...props }) {
|
|
3054
|
-
return /* @__PURE__ */ (0,
|
|
3592
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3055
3593
|
Button,
|
|
3056
3594
|
{
|
|
3057
3595
|
"aria-label": "M\xE1s opciones",
|
|
@@ -3059,34 +3597,85 @@ function SidebarMore({ className, ...props }) {
|
|
|
3059
3597
|
variant: "ghost",
|
|
3060
3598
|
className: cn("size-7", className),
|
|
3061
3599
|
...props,
|
|
3062
|
-
children: /* @__PURE__ */ (0,
|
|
3600
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react13.Ellipsis, {})
|
|
3063
3601
|
}
|
|
3064
3602
|
);
|
|
3065
3603
|
}
|
|
3066
3604
|
|
|
3067
3605
|
// src/ui/skeleton/skeleton.tsx
|
|
3068
|
-
var
|
|
3606
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
3069
3607
|
function Skeleton({ className, ...props }) {
|
|
3070
|
-
return /* @__PURE__ */ (0,
|
|
3608
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
3609
|
+
"div",
|
|
3610
|
+
{
|
|
3611
|
+
"aria-hidden": "true",
|
|
3612
|
+
"data-slot": "skeleton",
|
|
3613
|
+
className: cn("animate-pulse rounded-md bg-muted", className),
|
|
3614
|
+
...props
|
|
3615
|
+
}
|
|
3616
|
+
);
|
|
3071
3617
|
}
|
|
3072
3618
|
|
|
3073
3619
|
// src/ui/submit-button/submit-button.tsx
|
|
3620
|
+
var import_lucide_react14 = require("lucide-react");
|
|
3621
|
+
var import_react14 = require("react");
|
|
3074
3622
|
var import_react_dom = require("react-dom");
|
|
3075
|
-
var
|
|
3076
|
-
|
|
3077
|
-
|
|
3623
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
3624
|
+
function assignRef(ref, node) {
|
|
3625
|
+
if (typeof ref === "function") {
|
|
3626
|
+
ref(node);
|
|
3627
|
+
} else if (ref) {
|
|
3628
|
+
ref.current = node;
|
|
3629
|
+
}
|
|
3630
|
+
}
|
|
3631
|
+
function SubmitButton({
|
|
3632
|
+
loadingLabel,
|
|
3633
|
+
pendingLabel,
|
|
3634
|
+
loading = false,
|
|
3635
|
+
children,
|
|
3636
|
+
isDisabled,
|
|
3637
|
+
ref: forwardedRef,
|
|
3638
|
+
size = "sm",
|
|
3639
|
+
...props
|
|
3640
|
+
}) {
|
|
3078
3641
|
const { pending } = (0, import_react_dom.useFormStatus)();
|
|
3079
3642
|
const busy = pending || loading;
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3643
|
+
const label = loadingLabel ?? pendingLabel ?? "Guardando\u2026";
|
|
3644
|
+
const buttonRef = (0, import_react14.useRef)(null);
|
|
3645
|
+
const setButtonRef = (0, import_react14.useCallback)(
|
|
3646
|
+
(node) => {
|
|
3647
|
+
buttonRef.current = node;
|
|
3648
|
+
assignRef(forwardedRef, node);
|
|
3649
|
+
},
|
|
3650
|
+
[forwardedRef]
|
|
3651
|
+
);
|
|
3652
|
+
(0, import_react14.useLayoutEffect)(() => {
|
|
3653
|
+
const button = buttonRef.current;
|
|
3654
|
+
if (!button) return;
|
|
3655
|
+
if (busy) button.setAttribute("aria-busy", "true");
|
|
3656
|
+
else button.removeAttribute("aria-busy");
|
|
3657
|
+
}, [busy]);
|
|
3658
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3659
|
+
Button,
|
|
3660
|
+
{
|
|
3661
|
+
ref: setButtonRef,
|
|
3662
|
+
type: "submit",
|
|
3663
|
+
size,
|
|
3664
|
+
isDisabled: busy || isDisabled,
|
|
3665
|
+
"aria-busy": busy || void 0,
|
|
3666
|
+
...props,
|
|
3667
|
+
children: busy ? /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
|
|
3668
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
|
|
3669
|
+
label
|
|
3670
|
+
] }) : children
|
|
3671
|
+
}
|
|
3672
|
+
);
|
|
3084
3673
|
}
|
|
3085
3674
|
|
|
3086
3675
|
// src/ui/switch/switch.tsx
|
|
3087
|
-
var
|
|
3088
|
-
var
|
|
3089
|
-
var
|
|
3676
|
+
var import_react15 = require("react");
|
|
3677
|
+
var import_react_aria_components25 = require("react-aria-components");
|
|
3678
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
3090
3679
|
var switchSizes = {
|
|
3091
3680
|
sm: {
|
|
3092
3681
|
control: "h-4 w-[1.875rem] p-0.5",
|
|
@@ -3126,13 +3715,14 @@ function Switch({
|
|
|
3126
3715
|
...props
|
|
3127
3716
|
}) {
|
|
3128
3717
|
const styles = switchSizes[size];
|
|
3129
|
-
const fallbackInputRef = (0,
|
|
3718
|
+
const fallbackInputRef = (0, import_react15.useRef)(null);
|
|
3130
3719
|
const resolvedInputRef = inputRef ?? fallbackInputRef;
|
|
3131
|
-
(0,
|
|
3720
|
+
(0, import_react15.useEffect)(() => {
|
|
3132
3721
|
const input = resolvedInputRef.current;
|
|
3133
3722
|
if (!input) return;
|
|
3134
3723
|
const handleDirectionalKey = (event) => {
|
|
3135
|
-
if (event.target !== input || event.defaultPrevented || isDisabled || isReadOnly || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
|
|
3724
|
+
if (event.target !== input || event.defaultPrevented || isDisabled || isReadOnly || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
|
|
3725
|
+
return;
|
|
3136
3726
|
const nextSelected = event.key === "ArrowRight" ? true : event.key === "ArrowLeft" ? false : null;
|
|
3137
3727
|
if (nextSelected === null) return;
|
|
3138
3728
|
event.preventDefault();
|
|
@@ -3142,8 +3732,8 @@ function Switch({
|
|
|
3142
3732
|
ownerDocument.addEventListener("keydown", handleDirectionalKey);
|
|
3143
3733
|
return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
|
|
3144
3734
|
}, [isDisabled, isReadOnly, resolvedInputRef]);
|
|
3145
|
-
return /* @__PURE__ */ (0,
|
|
3146
|
-
|
|
3735
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
3736
|
+
import_react_aria_components25.Switch,
|
|
3147
3737
|
{
|
|
3148
3738
|
"data-slot": "switch",
|
|
3149
3739
|
"data-size": size,
|
|
@@ -3157,10 +3747,10 @@ function Switch({
|
|
|
3157
3747
|
),
|
|
3158
3748
|
...props,
|
|
3159
3749
|
children: (state) => {
|
|
3160
|
-
const
|
|
3161
|
-
const thumbOffset = state.isSelected ?
|
|
3162
|
-
return /* @__PURE__ */ (0,
|
|
3163
|
-
/* @__PURE__ */ (0,
|
|
3750
|
+
const isThumbPressed = state.isPressed;
|
|
3751
|
+
const thumbOffset = state.isSelected ? isThumbPressed ? styles.activeSelectedOffset : styles.selectedOffset : "0";
|
|
3752
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
|
|
3753
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
3164
3754
|
"span",
|
|
3165
3755
|
{
|
|
3166
3756
|
"aria-hidden": "true",
|
|
@@ -3174,13 +3764,13 @@ function Switch({
|
|
|
3174
3764
|
"group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
|
|
3175
3765
|
styles.control
|
|
3176
3766
|
),
|
|
3177
|
-
children: /* @__PURE__ */ (0,
|
|
3767
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
3178
3768
|
"span",
|
|
3179
3769
|
{
|
|
3180
3770
|
"data-slot": "switch-thumb",
|
|
3181
3771
|
style: {
|
|
3182
3772
|
transform: `translate3d(${thumbOffset}, 0, 0)`,
|
|
3183
|
-
width:
|
|
3773
|
+
width: isThumbPressed ? styles.activeWidth : styles.idleWidth
|
|
3184
3774
|
},
|
|
3185
3775
|
className: cn(
|
|
3186
3776
|
"grid shrink-0 place-items-center rounded-full border border-border/60 bg-background text-[0.625rem] text-muted-foreground shadow-sm",
|
|
@@ -3194,9 +3784,16 @@ function Switch({
|
|
|
3194
3784
|
)
|
|
3195
3785
|
}
|
|
3196
3786
|
),
|
|
3197
|
-
children || description ? /* @__PURE__ */ (0,
|
|
3198
|
-
children ? /* @__PURE__ */ (0,
|
|
3199
|
-
description ? /* @__PURE__ */ (0,
|
|
3787
|
+
children || description ? /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("span", { className: "grid gap-0.5 leading-tight", children: [
|
|
3788
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
|
|
3789
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
3790
|
+
"span",
|
|
3791
|
+
{
|
|
3792
|
+
"data-slot": "switch-description",
|
|
3793
|
+
className: "text-muted-foreground text-xs font-normal",
|
|
3794
|
+
children: description
|
|
3795
|
+
}
|
|
3796
|
+
) : null
|
|
3200
3797
|
] }) : null
|
|
3201
3798
|
] });
|
|
3202
3799
|
}
|
|
@@ -3205,9 +3802,9 @@ function Switch({
|
|
|
3205
3802
|
}
|
|
3206
3803
|
|
|
3207
3804
|
// src/ui/table/table.tsx
|
|
3208
|
-
var
|
|
3805
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
3209
3806
|
function Table({ className, ...props }) {
|
|
3210
|
-
return /* @__PURE__ */ (0,
|
|
3807
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
3211
3808
|
"table",
|
|
3212
3809
|
{
|
|
3213
3810
|
"data-slot": "table",
|
|
@@ -3217,10 +3814,10 @@ function Table({ className, ...props }) {
|
|
|
3217
3814
|
) });
|
|
3218
3815
|
}
|
|
3219
3816
|
function TableHeader({ className, ...props }) {
|
|
3220
|
-
return /* @__PURE__ */ (0,
|
|
3817
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
|
|
3221
3818
|
}
|
|
3222
3819
|
function TableBody({ className, ...props }) {
|
|
3223
|
-
return /* @__PURE__ */ (0,
|
|
3820
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
3224
3821
|
"tbody",
|
|
3225
3822
|
{
|
|
3226
3823
|
"data-slot": "table-body",
|
|
@@ -3230,7 +3827,7 @@ function TableBody({ className, ...props }) {
|
|
|
3230
3827
|
);
|
|
3231
3828
|
}
|
|
3232
3829
|
function TableRow({ className, ...props }) {
|
|
3233
|
-
return /* @__PURE__ */ (0,
|
|
3830
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
3234
3831
|
"tr",
|
|
3235
3832
|
{
|
|
3236
3833
|
"data-slot": "table-row",
|
|
@@ -3243,7 +3840,7 @@ function TableRow({ className, ...props }) {
|
|
|
3243
3840
|
);
|
|
3244
3841
|
}
|
|
3245
3842
|
function TableHead({ className, ...props }) {
|
|
3246
|
-
return /* @__PURE__ */ (0,
|
|
3843
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
3247
3844
|
"th",
|
|
3248
3845
|
{
|
|
3249
3846
|
"data-slot": "table-head",
|
|
@@ -3256,7 +3853,7 @@ function TableHead({ className, ...props }) {
|
|
|
3256
3853
|
);
|
|
3257
3854
|
}
|
|
3258
3855
|
function TableCell({ className, ...props }) {
|
|
3259
|
-
return /* @__PURE__ */ (0,
|
|
3856
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
3260
3857
|
"td",
|
|
3261
3858
|
{
|
|
3262
3859
|
"data-slot": "table-cell",
|
|
@@ -3266,7 +3863,7 @@ function TableCell({ className, ...props }) {
|
|
|
3266
3863
|
);
|
|
3267
3864
|
}
|
|
3268
3865
|
function TableCaption({ className, ...props }) {
|
|
3269
|
-
return /* @__PURE__ */ (0,
|
|
3866
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
3270
3867
|
"caption",
|
|
3271
3868
|
{
|
|
3272
3869
|
"data-slot": "table-caption",
|
|
@@ -3276,39 +3873,87 @@ function TableCaption({ className, ...props }) {
|
|
|
3276
3873
|
);
|
|
3277
3874
|
}
|
|
3278
3875
|
function TableFooter({ className, ...props }) {
|
|
3279
|
-
return /* @__PURE__ */ (0,
|
|
3876
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
3280
3877
|
"tfoot",
|
|
3281
3878
|
{
|
|
3282
3879
|
"data-slot": "table-footer",
|
|
3283
|
-
className: cn(
|
|
3880
|
+
className: cn(
|
|
3881
|
+
"border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0",
|
|
3882
|
+
className
|
|
3883
|
+
),
|
|
3284
3884
|
...props
|
|
3285
3885
|
}
|
|
3286
3886
|
);
|
|
3287
3887
|
}
|
|
3288
3888
|
|
|
3289
3889
|
// src/ui/tabs/tabs.tsx
|
|
3290
|
-
var
|
|
3291
|
-
var
|
|
3890
|
+
var import_react_aria_components26 = require("react-aria-components");
|
|
3891
|
+
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
3292
3892
|
function Tabs({ className, ...props }) {
|
|
3293
|
-
return /* @__PURE__ */ (0,
|
|
3893
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
3894
|
+
import_react_aria_components26.Tabs,
|
|
3895
|
+
{
|
|
3896
|
+
"data-slot": "tabs",
|
|
3897
|
+
className: (0, import_react_aria_components26.composeRenderProps)(className, (value) => cn("flex flex-col gap-2", value)),
|
|
3898
|
+
...props
|
|
3899
|
+
}
|
|
3900
|
+
);
|
|
3294
3901
|
}
|
|
3295
3902
|
function TabsList({ className, ...props }) {
|
|
3296
|
-
return /* @__PURE__ */ (0,
|
|
3903
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
3904
|
+
import_react_aria_components26.TabList,
|
|
3905
|
+
{
|
|
3906
|
+
"data-slot": "tabs-list",
|
|
3907
|
+
className: (0, import_react_aria_components26.composeRenderProps)(
|
|
3908
|
+
className,
|
|
3909
|
+
(value) => cn(
|
|
3910
|
+
"inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground",
|
|
3911
|
+
value
|
|
3912
|
+
)
|
|
3913
|
+
),
|
|
3914
|
+
...props
|
|
3915
|
+
}
|
|
3916
|
+
);
|
|
3297
3917
|
}
|
|
3298
3918
|
function TabsTrigger({ className, ...props }) {
|
|
3299
|
-
return /* @__PURE__ */ (0,
|
|
3919
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
3920
|
+
import_react_aria_components26.Tab,
|
|
3921
|
+
{
|
|
3922
|
+
"data-slot": "tabs-trigger",
|
|
3923
|
+
className: (0, import_react_aria_components26.composeRenderProps)(
|
|
3924
|
+
className,
|
|
3925
|
+
(value) => cn(
|
|
3926
|
+
"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",
|
|
3927
|
+
value
|
|
3928
|
+
)
|
|
3929
|
+
),
|
|
3930
|
+
...props
|
|
3931
|
+
}
|
|
3932
|
+
);
|
|
3300
3933
|
}
|
|
3301
3934
|
function TabsPanels({ className, ...props }) {
|
|
3302
|
-
return /* @__PURE__ */ (0,
|
|
3935
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_react_aria_components26.TabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
|
|
3303
3936
|
}
|
|
3304
3937
|
function TabsContent({ className, ...props }) {
|
|
3305
|
-
return /* @__PURE__ */ (0,
|
|
3938
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
3939
|
+
import_react_aria_components26.TabPanel,
|
|
3940
|
+
{
|
|
3941
|
+
"data-slot": "tabs-content",
|
|
3942
|
+
className: (0, import_react_aria_components26.composeRenderProps)(
|
|
3943
|
+
className,
|
|
3944
|
+
(value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)
|
|
3945
|
+
),
|
|
3946
|
+
...props
|
|
3947
|
+
}
|
|
3948
|
+
);
|
|
3306
3949
|
}
|
|
3307
3950
|
|
|
3308
3951
|
// src/ui/toast/toast.tsx
|
|
3309
|
-
var
|
|
3952
|
+
var import_react16 = require("react");
|
|
3953
|
+
var import_sileo2 = require("sileo");
|
|
3954
|
+
|
|
3955
|
+
// src/ui/toast/toast-store.ts
|
|
3310
3956
|
var import_sileo = require("sileo");
|
|
3311
|
-
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
3312
3957
|
function toSileoOptions({ title, description, duration, position, action }) {
|
|
3313
3958
|
return {
|
|
3314
3959
|
title,
|
|
@@ -3337,8 +3982,14 @@ var toast = Object.assign((options) => create(options), {
|
|
|
3337
3982
|
const shared = { description: options.description, position: options.position };
|
|
3338
3983
|
return import_sileo.sileo.promise(promise, {
|
|
3339
3984
|
loading: { ...shared, title: options.loading },
|
|
3340
|
-
success: (value) => ({
|
|
3341
|
-
|
|
3985
|
+
success: (value) => ({
|
|
3986
|
+
...shared,
|
|
3987
|
+
title: typeof options.success === "function" ? options.success(value) : options.success
|
|
3988
|
+
}),
|
|
3989
|
+
error: (error) => ({
|
|
3990
|
+
...shared,
|
|
3991
|
+
title: typeof options.error === "function" ? options.error(error) : options.error
|
|
3992
|
+
}),
|
|
3342
3993
|
position: options.position
|
|
3343
3994
|
});
|
|
3344
3995
|
}
|
|
@@ -3346,26 +3997,43 @@ var toast = Object.assign((options) => create(options), {
|
|
|
3346
3997
|
function useToast() {
|
|
3347
3998
|
return toast;
|
|
3348
3999
|
}
|
|
4000
|
+
|
|
4001
|
+
// src/ui/toast/toast.tsx
|
|
4002
|
+
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
3349
4003
|
function ToastProvider({ children }) {
|
|
3350
|
-
return /* @__PURE__ */ (0,
|
|
4004
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_jsx_runtime48.Fragment, { children: [
|
|
3351
4005
|
children,
|
|
3352
|
-
/* @__PURE__ */ (0,
|
|
4006
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Toaster, {})
|
|
3353
4007
|
] });
|
|
3354
4008
|
}
|
|
3355
4009
|
function Toaster({ position }) {
|
|
3356
|
-
return /* @__PURE__ */ (0,
|
|
4010
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_sileo2.Toaster, { position, options: { fill: "var(--ui-secondary)" } });
|
|
3357
4011
|
}
|
|
3358
|
-
function ToastViewport({
|
|
4012
|
+
function ToastViewport({
|
|
4013
|
+
position,
|
|
4014
|
+
visiblePosition,
|
|
4015
|
+
className
|
|
4016
|
+
}) {
|
|
3359
4017
|
void className;
|
|
3360
4018
|
if (visiblePosition && visiblePosition !== position) return null;
|
|
3361
|
-
return /* @__PURE__ */ (0,
|
|
4019
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Toaster, { position });
|
|
3362
4020
|
}
|
|
3363
|
-
function Toast({
|
|
3364
|
-
|
|
4021
|
+
function Toast({
|
|
4022
|
+
id,
|
|
4023
|
+
title,
|
|
4024
|
+
description,
|
|
4025
|
+
variant = "default",
|
|
4026
|
+
action,
|
|
4027
|
+
state,
|
|
4028
|
+
duration = 0,
|
|
4029
|
+
position,
|
|
4030
|
+
onDismiss
|
|
4031
|
+
}) {
|
|
4032
|
+
(0, import_react16.useEffect)(() => {
|
|
3365
4033
|
if (state !== "open") return;
|
|
3366
|
-
const toastId =
|
|
4034
|
+
const toastId = toast({ title, description, variant, action, duration, position });
|
|
3367
4035
|
return () => {
|
|
3368
|
-
|
|
4036
|
+
import_sileo2.sileo.dismiss(toastId);
|
|
3369
4037
|
onDismiss?.();
|
|
3370
4038
|
};
|
|
3371
4039
|
}, [action, description, duration, id, onDismiss, position, state, title, variant]);
|
|
@@ -3373,15 +4041,30 @@ function Toast({ id, title, description, variant = "default", action, state = "o
|
|
|
3373
4041
|
}
|
|
3374
4042
|
|
|
3375
4043
|
// src/ui/toolbar/toolbar.tsx
|
|
3376
|
-
var
|
|
4044
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
3377
4045
|
function Toolbar({ className, ...props }) {
|
|
3378
|
-
return /* @__PURE__ */ (0,
|
|
4046
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
|
|
4047
|
+
"div",
|
|
4048
|
+
{
|
|
4049
|
+
role: "toolbar",
|
|
4050
|
+
"data-slot": "toolbar",
|
|
4051
|
+
className: cn("flex flex-wrap items-center gap-2", className),
|
|
4052
|
+
...props
|
|
4053
|
+
}
|
|
4054
|
+
);
|
|
3379
4055
|
}
|
|
3380
4056
|
function ToolbarGroup({ className, ...props }) {
|
|
3381
|
-
return /* @__PURE__ */ (0,
|
|
4057
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
|
|
4058
|
+
"div",
|
|
4059
|
+
{
|
|
4060
|
+
"data-slot": "toolbar-group",
|
|
4061
|
+
className: cn("flex items-center gap-2", className),
|
|
4062
|
+
...props
|
|
4063
|
+
}
|
|
4064
|
+
);
|
|
3382
4065
|
}
|
|
3383
4066
|
function ToolbarSpacer({ className, ...props }) {
|
|
3384
|
-
return /* @__PURE__ */ (0,
|
|
4067
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
|
|
3385
4068
|
}
|
|
3386
4069
|
// Annotate the CommonJS export names for ESM import in node:
|
|
3387
4070
|
0 && (module.exports = {
|
|
@@ -3460,15 +4143,20 @@ function ToolbarSpacer({ className, ...props }) {
|
|
|
3460
4143
|
DialogHeader,
|
|
3461
4144
|
DialogOverlay,
|
|
3462
4145
|
DialogPortal,
|
|
4146
|
+
DialogRoot,
|
|
3463
4147
|
DialogTitle,
|
|
3464
4148
|
DialogTrigger,
|
|
3465
4149
|
DocPreview,
|
|
3466
4150
|
Drawer,
|
|
4151
|
+
DrawerClose,
|
|
4152
|
+
DrawerContent,
|
|
3467
4153
|
DrawerDescription,
|
|
3468
4154
|
DrawerFooter,
|
|
3469
4155
|
DrawerHeader,
|
|
3470
4156
|
DrawerTitle,
|
|
4157
|
+
DrawerTrigger,
|
|
3471
4158
|
DropdownMenu,
|
|
4159
|
+
DropdownMenuContent,
|
|
3472
4160
|
DropdownMenuGroup,
|
|
3473
4161
|
DropdownMenuItem,
|
|
3474
4162
|
DropdownMenuLabel,
|
|
@@ -3515,7 +4203,6 @@ function ToolbarSpacer({ className, ...props }) {
|
|
|
3515
4203
|
MenuItem,
|
|
3516
4204
|
MenuTrigger,
|
|
3517
4205
|
MetricCard,
|
|
3518
|
-
ModalDialog,
|
|
3519
4206
|
OtpInput,
|
|
3520
4207
|
PageHeader,
|
|
3521
4208
|
PageHeaderActions,
|
|
@@ -3544,6 +4231,7 @@ function ToolbarSpacer({ className, ...props }) {
|
|
|
3544
4231
|
SheetTrigger,
|
|
3545
4232
|
Sidebar,
|
|
3546
4233
|
SidebarContent,
|
|
4234
|
+
SidebarContext,
|
|
3547
4235
|
SidebarFooter,
|
|
3548
4236
|
SidebarGroup,
|
|
3549
4237
|
SidebarHeader,
|
|
@@ -3579,6 +4267,7 @@ function ToolbarSpacer({ className, ...props }) {
|
|
|
3579
4267
|
ToolbarGroup,
|
|
3580
4268
|
ToolbarSpacer,
|
|
3581
4269
|
Tooltip,
|
|
4270
|
+
TooltipContent,
|
|
3582
4271
|
TooltipTrigger,
|
|
3583
4272
|
actionRipple,
|
|
3584
4273
|
alertVariants,
|