@doscientos/ui 0.1.28 → 0.1.30
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 +1863 -1071
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +359 -278
- package/dist/index.d.ts +359 -278
- package/dist/index.js +1747 -970
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +23 -14
package/dist/index.js
CHANGED
|
@@ -58,7 +58,10 @@ function useDebouncedValue(value, delay = 250) {
|
|
|
58
58
|
// src/hooks/use-form-dirty.ts
|
|
59
59
|
import { useCallback as useCallback2, useRef as useRef2, useState as useState3 } from "react";
|
|
60
60
|
function formSnapshot(form) {
|
|
61
|
-
const entries = Array.from(new FormData(form), ([key, value]) => [
|
|
61
|
+
const entries = Array.from(new FormData(form), ([key, value]) => [
|
|
62
|
+
key,
|
|
63
|
+
typeof value === "string" ? value : value.name
|
|
64
|
+
]);
|
|
62
65
|
entries.sort(([left], [right]) => left.localeCompare(right));
|
|
63
66
|
return JSON.stringify(entries);
|
|
64
67
|
}
|
|
@@ -77,29 +80,30 @@ function useFormDirty() {
|
|
|
77
80
|
setIsDirty(false);
|
|
78
81
|
}
|
|
79
82
|
}, []);
|
|
80
|
-
const formRef = useCallback2(
|
|
81
|
-
|
|
82
|
-
formElement.current
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
83
|
+
const formRef = useCallback2(
|
|
84
|
+
(form) => {
|
|
85
|
+
if (formElement.current) {
|
|
86
|
+
formElement.current.removeEventListener("input", recompute);
|
|
87
|
+
formElement.current.removeEventListener("change", recompute);
|
|
88
|
+
formElement.current.removeEventListener("reset", recompute);
|
|
89
|
+
}
|
|
90
|
+
formElement.current = form;
|
|
91
|
+
if (form) {
|
|
92
|
+
baseline.current = formSnapshot(form);
|
|
93
|
+
setIsDirty(false);
|
|
94
|
+
form.addEventListener("input", recompute);
|
|
95
|
+
form.addEventListener("change", recompute);
|
|
96
|
+
form.addEventListener("reset", recompute);
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
[recompute]
|
|
100
|
+
);
|
|
95
101
|
return { formRef, isDirty, markDirty: () => setIsDirty(true), reset };
|
|
96
102
|
}
|
|
97
103
|
|
|
98
104
|
// src/lib/action-ripple.ts
|
|
99
105
|
import { cva } from "class-variance-authority";
|
|
100
|
-
var actionRipple = cva(
|
|
101
|
-
"relative isolate overflow-hidden"
|
|
102
|
-
);
|
|
106
|
+
var actionRipple = cva("relative isolate overflow-hidden");
|
|
103
107
|
|
|
104
108
|
// src/lib/cn.ts
|
|
105
109
|
import { clsx } from "clsx";
|
|
@@ -138,7 +142,8 @@ function getTextMatchParts(text, query) {
|
|
|
138
142
|
const rangeStart = ranges[index]?.start;
|
|
139
143
|
const rangeEnd = ranges[index + term.length - 1]?.end;
|
|
140
144
|
if (rangeStart === void 0 || rangeEnd === void 0) break;
|
|
141
|
-
if (rangeStart > sourceCursor)
|
|
145
|
+
if (rangeStart > sourceCursor)
|
|
146
|
+
parts.push({ text: text.slice(sourceCursor, rangeStart), match: false });
|
|
142
147
|
parts.push({ text: text.slice(rangeStart, rangeEnd), match: true });
|
|
143
148
|
sourceCursor = rangeEnd;
|
|
144
149
|
index = normalized.indexOf(term, index + term.length);
|
|
@@ -148,8 +153,8 @@ function getTextMatchParts(text, query) {
|
|
|
148
153
|
}
|
|
149
154
|
|
|
150
155
|
// src/ui/accordion/accordion.tsx
|
|
151
|
-
import "react";
|
|
152
156
|
import { ChevronDownIcon, ChevronUpIcon } from "lucide-react";
|
|
157
|
+
import "react";
|
|
153
158
|
import {
|
|
154
159
|
DisclosurePanel as AccordionContentPrimitive,
|
|
155
160
|
Heading as AccordionHeaderPrimitive,
|
|
@@ -213,16 +218,12 @@ function AccordionTrigger({
|
|
|
213
218
|
}
|
|
214
219
|
) });
|
|
215
220
|
}
|
|
216
|
-
function AccordionContent({
|
|
217
|
-
className,
|
|
218
|
-
children,
|
|
219
|
-
...props
|
|
220
|
-
}) {
|
|
221
|
+
function AccordionContent({ className, children, ...props }) {
|
|
221
222
|
return /* @__PURE__ */ jsx(
|
|
222
223
|
AccordionContentPrimitive,
|
|
223
224
|
{
|
|
224
225
|
"data-slot": "accordion-content",
|
|
225
|
-
className: "
|
|
226
|
+
className: "text-muted-foreground data-open:animate-accordion-down data-closed:animate-accordion-up h-(--disclosure-panel-height) overflow-clip text-sm transition-[height]",
|
|
226
227
|
...props,
|
|
227
228
|
children: /* @__PURE__ */ jsx(
|
|
228
229
|
"div",
|
|
@@ -239,35 +240,64 @@ function AccordionContent({
|
|
|
239
240
|
}
|
|
240
241
|
|
|
241
242
|
// src/ui/alert-dialog/alert-dialog.tsx
|
|
242
|
-
import
|
|
243
|
-
import
|
|
244
|
-
Dialog as AriaDialog,
|
|
245
|
-
Heading,
|
|
246
|
-
Modal,
|
|
247
|
-
ModalOverlay,
|
|
248
|
-
Text
|
|
249
|
-
} from "react-aria-components";
|
|
243
|
+
import "react";
|
|
244
|
+
import "react-aria-components";
|
|
250
245
|
|
|
251
246
|
// src/ui/button/button.tsx
|
|
252
|
-
import { cva as cva2 } from "class-variance-authority";
|
|
253
247
|
import { useState as useState4 } from "react";
|
|
254
248
|
import {
|
|
255
249
|
Button as ButtonPrimitive,
|
|
256
250
|
Link as LinkPrimitive
|
|
257
251
|
} from "react-aria-components";
|
|
252
|
+
|
|
253
|
+
// src/ui/button/button-variants.ts
|
|
254
|
+
import { cva as cva2 } from "class-variance-authority";
|
|
255
|
+
var buttonVariants = cva2(
|
|
256
|
+
cn(
|
|
257
|
+
"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",
|
|
258
|
+
actionRipple()
|
|
259
|
+
),
|
|
260
|
+
{
|
|
261
|
+
variants: {
|
|
262
|
+
variant: {
|
|
263
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/80",
|
|
264
|
+
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",
|
|
265
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
266
|
+
ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
|
|
267
|
+
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",
|
|
268
|
+
link: "text-primary underline-offset-4 hover:underline after:hidden"
|
|
269
|
+
},
|
|
270
|
+
size: {
|
|
271
|
+
default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
272
|
+
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",
|
|
273
|
+
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",
|
|
274
|
+
lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
275
|
+
icon: "size-8",
|
|
276
|
+
"icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
|
|
277
|
+
"icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
|
|
278
|
+
"icon-lg": "size-9"
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
defaultVariants: {
|
|
282
|
+
variant: "default",
|
|
283
|
+
size: "default"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
// src/ui/button/button.tsx
|
|
258
289
|
import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
259
290
|
var centeredRipplePosition = { x: "50%", y: "50%" };
|
|
260
291
|
function getRipplePosition(event) {
|
|
261
292
|
if (event.pointerType === "keyboard" || event.pointerType === "virtual") {
|
|
262
293
|
return centeredRipplePosition;
|
|
263
294
|
}
|
|
264
|
-
if (
|
|
295
|
+
if (event.x === void 0 || event.y === void 0) {
|
|
265
296
|
return centeredRipplePosition;
|
|
266
297
|
}
|
|
267
|
-
const bounds = event.target.getBoundingClientRect();
|
|
268
298
|
return {
|
|
269
|
-
x: `${event.x
|
|
270
|
-
y: `${event.y
|
|
299
|
+
x: `${event.x}px`,
|
|
300
|
+
y: `${event.y}px`
|
|
271
301
|
};
|
|
272
302
|
}
|
|
273
303
|
function useActionRipple(enabled) {
|
|
@@ -285,7 +315,7 @@ function useActionRipple(enabled) {
|
|
|
285
315
|
{
|
|
286
316
|
"aria-hidden": "true",
|
|
287
317
|
"data-slot": "button-ripple",
|
|
288
|
-
className: "pointer-events-none absolute aspect-square w-full rounded-full
|
|
318
|
+
className: "animate-ui-ripple pointer-events-none absolute aspect-square w-full rounded-full motion-reduce:hidden",
|
|
289
319
|
style: { left: ripple.position.x, top: ripple.position.y },
|
|
290
320
|
onAnimationEnd: () => setRipple((currentRipple) => currentRipple?.id === ripple.id ? null : currentRipple)
|
|
291
321
|
},
|
|
@@ -293,39 +323,17 @@ function useActionRipple(enabled) {
|
|
|
293
323
|
) : null;
|
|
294
324
|
return { ripple: rippleElement, triggerRipple };
|
|
295
325
|
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
|
|
308
|
-
destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
|
|
309
|
-
link: "text-primary underline-offset-4 hover:underline after:hidden"
|
|
310
|
-
},
|
|
311
|
-
size: {
|
|
312
|
-
default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
313
|
-
xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
|
|
314
|
-
sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
|
|
315
|
-
lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
316
|
-
icon: "size-8",
|
|
317
|
-
"icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
|
|
318
|
-
"icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
|
|
319
|
-
"icon-lg": "size-9"
|
|
320
|
-
}
|
|
321
|
-
},
|
|
322
|
-
defaultVariants: {
|
|
323
|
-
variant: "default",
|
|
324
|
-
size: "default"
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
);
|
|
328
|
-
function Button({ className, variant = "default", size = "default", children, disabled, isDisabled, onClick, onPress, ...props }) {
|
|
326
|
+
function Button({
|
|
327
|
+
className,
|
|
328
|
+
variant = "default",
|
|
329
|
+
size = "default",
|
|
330
|
+
children,
|
|
331
|
+
disabled,
|
|
332
|
+
isDisabled,
|
|
333
|
+
onClick,
|
|
334
|
+
onPress,
|
|
335
|
+
...props
|
|
336
|
+
}) {
|
|
329
337
|
const { ripple, triggerRipple } = useActionRipple(variant !== "link");
|
|
330
338
|
return /* @__PURE__ */ jsx2(
|
|
331
339
|
ButtonPrimitive,
|
|
@@ -379,57 +387,300 @@ function LinkButton({
|
|
|
379
387
|
);
|
|
380
388
|
}
|
|
381
389
|
|
|
382
|
-
// src/ui/
|
|
383
|
-
import {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
390
|
+
// src/ui/dialog/dialog.tsx
|
|
391
|
+
import { XIcon } from "lucide-react";
|
|
392
|
+
import * as React2 from "react";
|
|
393
|
+
import {
|
|
394
|
+
Dialog as AriaDialog,
|
|
395
|
+
Heading,
|
|
396
|
+
Modal,
|
|
397
|
+
ModalOverlay,
|
|
398
|
+
Text
|
|
399
|
+
} from "react-aria-components";
|
|
400
|
+
import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
401
|
+
var DialogContext = React2.createContext(null);
|
|
402
|
+
function useDialogContext() {
|
|
403
|
+
const context = React2.useContext(DialogContext);
|
|
404
|
+
if (!context) throw new Error("Dialog components must be rendered within Dialog.");
|
|
388
405
|
return context;
|
|
389
406
|
}
|
|
407
|
+
function DialogRoot({
|
|
408
|
+
children,
|
|
409
|
+
defaultOpen = false,
|
|
410
|
+
onOpenChange,
|
|
411
|
+
open: controlledOpen
|
|
412
|
+
}) {
|
|
413
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React2.useState(defaultOpen);
|
|
414
|
+
const open = controlledOpen ?? uncontrolledOpen;
|
|
415
|
+
const setOpen = React2.useCallback(
|
|
416
|
+
(nextOpen) => {
|
|
417
|
+
if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
|
|
418
|
+
onOpenChange?.(nextOpen);
|
|
419
|
+
},
|
|
420
|
+
[controlledOpen, onOpenChange]
|
|
421
|
+
);
|
|
422
|
+
return /* @__PURE__ */ jsx3(DialogContext.Provider, { value: { open, setOpen }, children });
|
|
423
|
+
}
|
|
424
|
+
function DialogTrigger({
|
|
425
|
+
asChild = false,
|
|
426
|
+
children,
|
|
427
|
+
onClick,
|
|
428
|
+
...props
|
|
429
|
+
}) {
|
|
430
|
+
const { setOpen } = useDialogContext();
|
|
431
|
+
const handleClick = (event) => {
|
|
432
|
+
onClick?.(event);
|
|
433
|
+
if (!event.defaultPrevented) setOpen(true);
|
|
434
|
+
};
|
|
435
|
+
if (asChild && React2.isValidElement(children)) {
|
|
436
|
+
const child = children;
|
|
437
|
+
return React2.cloneElement(child, {
|
|
438
|
+
...props,
|
|
439
|
+
"data-slot": "dialog-trigger",
|
|
440
|
+
onClick: (event) => {
|
|
441
|
+
child.props.onClick?.(event);
|
|
442
|
+
handleClick(event);
|
|
443
|
+
}
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
return /* @__PURE__ */ jsx3(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
|
|
447
|
+
}
|
|
448
|
+
function DialogPortal({ children }) {
|
|
449
|
+
return /* @__PURE__ */ jsx3(Fragment2, { children });
|
|
450
|
+
}
|
|
451
|
+
function DialogOverlay({ children, className, ...props }) {
|
|
452
|
+
const { open, setOpen } = useDialogContext();
|
|
453
|
+
if (!open) return null;
|
|
454
|
+
return /* @__PURE__ */ jsx3(
|
|
455
|
+
ModalOverlay,
|
|
456
|
+
{
|
|
457
|
+
"data-slot": "dialog-overlay",
|
|
458
|
+
isDismissable: true,
|
|
459
|
+
isOpen: open,
|
|
460
|
+
onOpenChange: setOpen,
|
|
461
|
+
className: cn(
|
|
462
|
+
"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",
|
|
463
|
+
className
|
|
464
|
+
),
|
|
465
|
+
...props,
|
|
466
|
+
children
|
|
467
|
+
}
|
|
468
|
+
);
|
|
469
|
+
}
|
|
470
|
+
function Dialog(props) {
|
|
471
|
+
if (!("trigger" in props)) return /* @__PURE__ */ jsx3(DialogRoot, { ...props });
|
|
472
|
+
const { children, trigger, triggerProps, defaultOpen, onOpenChange, open, ...contentProps } = props;
|
|
473
|
+
return /* @__PURE__ */ jsxs3(DialogRoot, { defaultOpen, onOpenChange, open, children: [
|
|
474
|
+
typeof trigger === "string" ? /* @__PURE__ */ jsx3(DialogTrigger, { ...triggerProps, children: trigger }) : /* @__PURE__ */ jsx3(DialogTrigger, { asChild: true, ...triggerProps, children: trigger }),
|
|
475
|
+
/* @__PURE__ */ jsx3(DialogContent, { ...contentProps, children })
|
|
476
|
+
] });
|
|
477
|
+
}
|
|
478
|
+
function DialogContent({
|
|
479
|
+
children,
|
|
480
|
+
className,
|
|
481
|
+
contentSlot = "dialog-content",
|
|
482
|
+
onOverlayClick,
|
|
483
|
+
overlaySlot = "dialog-overlay",
|
|
484
|
+
showCloseButton = true,
|
|
485
|
+
...props
|
|
486
|
+
}) {
|
|
487
|
+
const { setOpen } = useDialogContext();
|
|
488
|
+
return /* @__PURE__ */ jsx3(DialogPortal, { children: /* @__PURE__ */ jsx3(
|
|
489
|
+
DialogOverlay,
|
|
490
|
+
{
|
|
491
|
+
"data-slot": overlaySlot,
|
|
492
|
+
onClick: (event) => {
|
|
493
|
+
if (event.target === event.currentTarget) onOverlayClick?.(event);
|
|
494
|
+
},
|
|
495
|
+
children: /* @__PURE__ */ jsx3(
|
|
496
|
+
Modal,
|
|
497
|
+
{
|
|
498
|
+
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",
|
|
499
|
+
onClick: (event) => {
|
|
500
|
+
if (event.target === event.currentTarget) {
|
|
501
|
+
setOpen(false);
|
|
502
|
+
onOverlayClick?.(event);
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
children: /* @__PURE__ */ jsxs3(
|
|
506
|
+
AriaDialog,
|
|
507
|
+
{
|
|
508
|
+
"data-slot": contentSlot,
|
|
509
|
+
className: cn(
|
|
510
|
+
"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",
|
|
511
|
+
className
|
|
512
|
+
),
|
|
513
|
+
...props,
|
|
514
|
+
children: [
|
|
515
|
+
children,
|
|
516
|
+
showCloseButton ? /* @__PURE__ */ jsx3(
|
|
517
|
+
Button,
|
|
518
|
+
{
|
|
519
|
+
"aria-label": "Cerrar di\xE1logo",
|
|
520
|
+
"data-slot": "dialog-close",
|
|
521
|
+
variant: "ghost",
|
|
522
|
+
className: "absolute top-2 right-2",
|
|
523
|
+
size: "icon-sm",
|
|
524
|
+
onPress: () => setOpen(false),
|
|
525
|
+
children: /* @__PURE__ */ jsx3(XIcon, {})
|
|
526
|
+
}
|
|
527
|
+
) : null
|
|
528
|
+
]
|
|
529
|
+
}
|
|
530
|
+
)
|
|
531
|
+
}
|
|
532
|
+
)
|
|
533
|
+
}
|
|
534
|
+
) });
|
|
535
|
+
}
|
|
536
|
+
function DialogClose({ asChild = false, children, onClick, ...props }) {
|
|
537
|
+
const { setOpen } = useDialogContext();
|
|
538
|
+
if (asChild && React2.isValidElement(children)) {
|
|
539
|
+
const child = children;
|
|
540
|
+
return React2.cloneElement(child, {
|
|
541
|
+
...props,
|
|
542
|
+
"data-slot": "dialog-close",
|
|
543
|
+
onClick: (event) => {
|
|
544
|
+
child.props.onClick?.(event);
|
|
545
|
+
onClick?.(event);
|
|
546
|
+
if (!event.defaultPrevented) setOpen(false);
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
return /* @__PURE__ */ jsx3(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
|
|
551
|
+
}
|
|
552
|
+
function DialogHeader({ className, ...props }) {
|
|
553
|
+
return /* @__PURE__ */ jsx3("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
|
|
554
|
+
}
|
|
555
|
+
function DialogFooter({
|
|
556
|
+
className,
|
|
557
|
+
showCloseButton = false,
|
|
558
|
+
children,
|
|
559
|
+
...props
|
|
560
|
+
}) {
|
|
561
|
+
return /* @__PURE__ */ jsxs3(
|
|
562
|
+
"div",
|
|
563
|
+
{
|
|
564
|
+
"data-slot": "dialog-footer",
|
|
565
|
+
className: cn(
|
|
566
|
+
"-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",
|
|
567
|
+
className
|
|
568
|
+
),
|
|
569
|
+
...props,
|
|
570
|
+
children: [
|
|
571
|
+
children,
|
|
572
|
+
showCloseButton ? /* @__PURE__ */ jsx3(DialogClose, { variant: "outline", children: "Cerrar" }) : null
|
|
573
|
+
]
|
|
574
|
+
}
|
|
575
|
+
);
|
|
576
|
+
}
|
|
577
|
+
function DialogTitle({
|
|
578
|
+
className,
|
|
579
|
+
...props
|
|
580
|
+
}) {
|
|
581
|
+
return /* @__PURE__ */ jsx3(
|
|
582
|
+
Heading,
|
|
583
|
+
{
|
|
584
|
+
slot: "title",
|
|
585
|
+
"data-slot": "dialog-title",
|
|
586
|
+
className: cn("font-heading text-base leading-none font-medium", className),
|
|
587
|
+
...props
|
|
588
|
+
}
|
|
589
|
+
);
|
|
590
|
+
}
|
|
591
|
+
function DialogDescription({
|
|
592
|
+
className,
|
|
593
|
+
...props
|
|
594
|
+
}) {
|
|
595
|
+
return /* @__PURE__ */ jsx3(
|
|
596
|
+
Text,
|
|
597
|
+
{
|
|
598
|
+
slot: "description",
|
|
599
|
+
"data-slot": "dialog-description",
|
|
600
|
+
className: cn(
|
|
601
|
+
"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
|
|
602
|
+
className
|
|
603
|
+
),
|
|
604
|
+
...props
|
|
605
|
+
}
|
|
606
|
+
);
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
// src/ui/alert-dialog/alert-dialog.tsx
|
|
610
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
390
611
|
function AlertDialog({ children, open, onOpenChange }) {
|
|
391
|
-
return /* @__PURE__ */
|
|
612
|
+
return /* @__PURE__ */ jsx4(Dialog, { open, onOpenChange, children });
|
|
392
613
|
}
|
|
393
614
|
function AlertDialogPortal({ children }) {
|
|
394
|
-
return /* @__PURE__ */
|
|
615
|
+
return /* @__PURE__ */ jsx4(DialogPortal, { children });
|
|
395
616
|
}
|
|
396
|
-
function AlertDialogTrigger({
|
|
397
|
-
|
|
398
|
-
|
|
617
|
+
function AlertDialogTrigger({
|
|
618
|
+
children,
|
|
619
|
+
...props
|
|
620
|
+
}) {
|
|
621
|
+
return /* @__PURE__ */ jsx4(DialogTrigger, { "data-slot": "alert-dialog-trigger", ...props, children });
|
|
399
622
|
}
|
|
400
|
-
function AlertDialogOverlay({
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
623
|
+
function AlertDialogOverlay({
|
|
624
|
+
className,
|
|
625
|
+
...props
|
|
626
|
+
}) {
|
|
627
|
+
return /* @__PURE__ */ jsx4(DialogOverlay, { "data-slot": "alert-dialog-overlay", className, ...props });
|
|
404
628
|
}
|
|
405
|
-
function AlertDialogContent({
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
629
|
+
function AlertDialogContent({
|
|
630
|
+
className,
|
|
631
|
+
size = "default",
|
|
632
|
+
children
|
|
633
|
+
}) {
|
|
634
|
+
return /* @__PURE__ */ jsx4(
|
|
635
|
+
DialogContent,
|
|
636
|
+
{
|
|
637
|
+
contentSlot: "alert-dialog-content",
|
|
638
|
+
overlaySlot: "alert-dialog-overlay",
|
|
639
|
+
role: "alertdialog",
|
|
640
|
+
showCloseButton: false,
|
|
641
|
+
className: cn(size === "sm" ? "sm:max-w-xs" : "sm:max-w-sm", className),
|
|
642
|
+
children
|
|
643
|
+
}
|
|
644
|
+
);
|
|
409
645
|
}
|
|
410
646
|
function AlertDialogHeader({ className, ...props }) {
|
|
411
|
-
return /* @__PURE__ */
|
|
647
|
+
return /* @__PURE__ */ jsx4(
|
|
648
|
+
DialogHeader,
|
|
649
|
+
{
|
|
650
|
+
"data-slot": "alert-dialog-header",
|
|
651
|
+
className: cn("flex flex-col gap-2 text-center sm:text-left", className),
|
|
652
|
+
...props
|
|
653
|
+
}
|
|
654
|
+
);
|
|
412
655
|
}
|
|
413
656
|
function AlertDialogFooter({ className, ...props }) {
|
|
414
|
-
return /* @__PURE__ */
|
|
657
|
+
return /* @__PURE__ */ jsx4(DialogFooter, { "data-slot": "alert-dialog-footer", className: cn(className), ...props });
|
|
415
658
|
}
|
|
416
|
-
function AlertDialogTitle({
|
|
417
|
-
|
|
659
|
+
function AlertDialogTitle({
|
|
660
|
+
className,
|
|
661
|
+
...props
|
|
662
|
+
}) {
|
|
663
|
+
return /* @__PURE__ */ jsx4(DialogTitle, { "data-slot": "alert-dialog-title", className: cn(className), ...props });
|
|
418
664
|
}
|
|
419
|
-
function AlertDialogDescription({
|
|
420
|
-
|
|
665
|
+
function AlertDialogDescription({
|
|
666
|
+
className,
|
|
667
|
+
...props
|
|
668
|
+
}) {
|
|
669
|
+
return /* @__PURE__ */ jsx4(DialogDescription, { "data-slot": "alert-dialog-description", className: cn(className), ...props });
|
|
421
670
|
}
|
|
422
671
|
function AlertDialogAction({ className, ...props }) {
|
|
423
|
-
return /* @__PURE__ */
|
|
672
|
+
return /* @__PURE__ */ jsx4(Button, { "data-slot": "alert-dialog-action", className: cn(className), ...props });
|
|
424
673
|
}
|
|
425
|
-
function AlertDialogCancel({
|
|
426
|
-
|
|
427
|
-
|
|
674
|
+
function AlertDialogCancel({
|
|
675
|
+
children = "Cancelar",
|
|
676
|
+
onClick,
|
|
677
|
+
...props
|
|
678
|
+
}) {
|
|
679
|
+
return /* @__PURE__ */ jsx4(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx4(Button, { "data-slot": "alert-dialog-cancel", variant: "outline", onClick, ...props, children }) });
|
|
428
680
|
}
|
|
429
681
|
|
|
430
|
-
// src/ui/alert/alert.
|
|
682
|
+
// src/ui/alert/alert-variants.ts
|
|
431
683
|
import { cva as cva3 } from "class-variance-authority";
|
|
432
|
-
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
433
684
|
var alertVariants = cva3(
|
|
434
685
|
"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",
|
|
435
686
|
{
|
|
@@ -447,8 +698,11 @@ var alertVariants = cva3(
|
|
|
447
698
|
}
|
|
448
699
|
}
|
|
449
700
|
);
|
|
701
|
+
|
|
702
|
+
// src/ui/alert/alert.tsx
|
|
703
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
450
704
|
function Alert({ className, variant, ...props }) {
|
|
451
|
-
return /* @__PURE__ */
|
|
705
|
+
return /* @__PURE__ */ jsx5(
|
|
452
706
|
"div",
|
|
453
707
|
{
|
|
454
708
|
"data-slot": "alert",
|
|
@@ -459,7 +713,7 @@ function Alert({ className, variant, ...props }) {
|
|
|
459
713
|
);
|
|
460
714
|
}
|
|
461
715
|
function AlertTitle({ className, ...props }) {
|
|
462
|
-
return /* @__PURE__ */
|
|
716
|
+
return /* @__PURE__ */ jsx5(
|
|
463
717
|
"div",
|
|
464
718
|
{
|
|
465
719
|
"data-slot": "alert-title",
|
|
@@ -472,7 +726,7 @@ function AlertTitle({ className, ...props }) {
|
|
|
472
726
|
);
|
|
473
727
|
}
|
|
474
728
|
function AlertDescription({ className, ...props }) {
|
|
475
|
-
return /* @__PURE__ */
|
|
729
|
+
return /* @__PURE__ */ jsx5(
|
|
476
730
|
"div",
|
|
477
731
|
{
|
|
478
732
|
"data-slot": "alert-description",
|
|
@@ -485,17 +739,13 @@ function AlertDescription({ className, ...props }) {
|
|
|
485
739
|
);
|
|
486
740
|
}
|
|
487
741
|
function AlertAction({ className, ...props }) {
|
|
488
|
-
return /* @__PURE__ */
|
|
742
|
+
return /* @__PURE__ */ jsx5("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
|
|
489
743
|
}
|
|
490
744
|
|
|
491
745
|
// src/ui/app-shell/app-shell.tsx
|
|
492
|
-
import { jsx as
|
|
493
|
-
function AppShell({
|
|
494
|
-
|
|
495
|
-
sidebarBreakpoint = "md",
|
|
496
|
-
...props
|
|
497
|
-
}) {
|
|
498
|
-
return /* @__PURE__ */ jsx5(
|
|
746
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
747
|
+
function AppShell({ className, sidebarBreakpoint = "md", ...props }) {
|
|
748
|
+
return /* @__PURE__ */ jsx6(
|
|
499
749
|
"div",
|
|
500
750
|
{
|
|
501
751
|
"data-slot": "app-shell",
|
|
@@ -506,7 +756,7 @@ function AppShell({
|
|
|
506
756
|
);
|
|
507
757
|
}
|
|
508
758
|
function AppShellSidebar({ className, ...props }) {
|
|
509
|
-
return /* @__PURE__ */
|
|
759
|
+
return /* @__PURE__ */ jsx6(
|
|
510
760
|
"aside",
|
|
511
761
|
{
|
|
512
762
|
"data-slot": "app-shell-sidebar",
|
|
@@ -516,10 +766,10 @@ function AppShellSidebar({ className, ...props }) {
|
|
|
516
766
|
);
|
|
517
767
|
}
|
|
518
768
|
function AppShellMain({ className, ...props }) {
|
|
519
|
-
return /* @__PURE__ */
|
|
769
|
+
return /* @__PURE__ */ jsx6("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
|
|
520
770
|
}
|
|
521
771
|
function AppShellHeader({ className, ...props }) {
|
|
522
|
-
return /* @__PURE__ */
|
|
772
|
+
return /* @__PURE__ */ jsx6(
|
|
523
773
|
"header",
|
|
524
774
|
{
|
|
525
775
|
"data-slot": "app-shell-header",
|
|
@@ -528,15 +778,15 @@ function AppShellHeader({ className, ...props }) {
|
|
|
528
778
|
}
|
|
529
779
|
);
|
|
530
780
|
}
|
|
531
|
-
function AppShellMobileHeader({
|
|
532
|
-
|
|
533
|
-
...props
|
|
534
|
-
}) {
|
|
535
|
-
return /* @__PURE__ */ jsx5(
|
|
781
|
+
function AppShellMobileHeader({ className, ...props }) {
|
|
782
|
+
return /* @__PURE__ */ jsx6(
|
|
536
783
|
"header",
|
|
537
784
|
{
|
|
538
785
|
"data-slot": "app-shell-mobile-header",
|
|
539
|
-
className: cn(
|
|
786
|
+
className: cn(
|
|
787
|
+
"h-14 shrink-0 items-center gap-2 border-b border-border bg-background px-3",
|
|
788
|
+
className
|
|
789
|
+
),
|
|
540
790
|
...props
|
|
541
791
|
}
|
|
542
792
|
);
|
|
@@ -548,7 +798,7 @@ function AppShellContent({
|
|
|
548
798
|
scrollable = true,
|
|
549
799
|
...props
|
|
550
800
|
}) {
|
|
551
|
-
return /* @__PURE__ */
|
|
801
|
+
return /* @__PURE__ */ jsx6(
|
|
552
802
|
"div",
|
|
553
803
|
{
|
|
554
804
|
"data-slot": "app-shell-content",
|
|
@@ -562,50 +812,123 @@ function AppShellContent({
|
|
|
562
812
|
}
|
|
563
813
|
|
|
564
814
|
// src/ui/avatar/avatar.tsx
|
|
565
|
-
import { createContext as createContext2, useContext as useContext2, useEffect as useEffect3, useState as
|
|
566
|
-
import { jsx as
|
|
567
|
-
var sizes = {
|
|
815
|
+
import { createContext as createContext2, useContext as useContext2, useEffect as useEffect3, useState as useState6 } from "react";
|
|
816
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
817
|
+
var sizes = {
|
|
818
|
+
xs: "size-5 text-[10px]",
|
|
819
|
+
sm: "size-6 text-xs",
|
|
820
|
+
default: "size-8 text-sm",
|
|
821
|
+
lg: "size-10 text-base"
|
|
822
|
+
};
|
|
568
823
|
var AvatarContext = createContext2(null);
|
|
569
824
|
function Avatar({ className, size = "default", children, ...props }) {
|
|
570
|
-
const [status, setStatus] =
|
|
571
|
-
return /* @__PURE__ */
|
|
825
|
+
const [status, setStatus] = useState6("idle");
|
|
826
|
+
return /* @__PURE__ */ jsx7(AvatarContext.Provider, { value: { status, setStatus }, children: /* @__PURE__ */ jsx7(
|
|
827
|
+
"div",
|
|
828
|
+
{
|
|
829
|
+
"data-slot": "avatar",
|
|
830
|
+
"data-size": size,
|
|
831
|
+
className: cn(
|
|
832
|
+
"group/avatar relative flex shrink-0 overflow-hidden rounded-full bg-muted text-muted-foreground",
|
|
833
|
+
sizes[size],
|
|
834
|
+
className
|
|
835
|
+
),
|
|
836
|
+
...props,
|
|
837
|
+
children
|
|
838
|
+
}
|
|
839
|
+
) });
|
|
572
840
|
}
|
|
573
|
-
function AvatarImage({
|
|
841
|
+
function AvatarImage({
|
|
842
|
+
className,
|
|
843
|
+
src,
|
|
844
|
+
onError,
|
|
845
|
+
onLoad,
|
|
846
|
+
...props
|
|
847
|
+
}) {
|
|
574
848
|
const avatar = useContext2(AvatarContext);
|
|
575
|
-
const [failed, setFailed] =
|
|
849
|
+
const [failed, setFailed] = useState6(false);
|
|
576
850
|
useEffect3(() => {
|
|
577
851
|
setFailed(false);
|
|
578
852
|
avatar?.setStatus(src ? "loading" : "idle");
|
|
579
853
|
}, [avatar?.setStatus, src]);
|
|
580
854
|
if (failed || avatar?.status === "error") return null;
|
|
581
|
-
return /* @__PURE__ */
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
855
|
+
return /* @__PURE__ */ jsx7(
|
|
856
|
+
"img",
|
|
857
|
+
{
|
|
858
|
+
"data-slot": "avatar-image",
|
|
859
|
+
src,
|
|
860
|
+
alt: "",
|
|
861
|
+
className: cn("aspect-square size-full object-cover", className),
|
|
862
|
+
onLoad: (event) => {
|
|
863
|
+
avatar?.setStatus("loaded");
|
|
864
|
+
onLoad?.(event);
|
|
865
|
+
},
|
|
866
|
+
onError: (event) => {
|
|
867
|
+
setFailed(true);
|
|
868
|
+
avatar?.setStatus("error");
|
|
869
|
+
onError?.(event);
|
|
870
|
+
},
|
|
871
|
+
...props
|
|
872
|
+
}
|
|
873
|
+
);
|
|
589
874
|
}
|
|
590
875
|
function AvatarFallback({ className, ...props }) {
|
|
591
876
|
const avatar = useContext2(AvatarContext);
|
|
592
877
|
if (avatar?.status === "loaded") return null;
|
|
593
|
-
return /* @__PURE__ */
|
|
878
|
+
return /* @__PURE__ */ jsx7(
|
|
879
|
+
"span",
|
|
880
|
+
{
|
|
881
|
+
"data-slot": "avatar-fallback",
|
|
882
|
+
className: cn("flex size-full items-center justify-center font-medium", className),
|
|
883
|
+
...props
|
|
884
|
+
}
|
|
885
|
+
);
|
|
594
886
|
}
|
|
595
887
|
function AvatarBadge({ className, ...props }) {
|
|
596
|
-
return /* @__PURE__ */
|
|
888
|
+
return /* @__PURE__ */ jsx7(
|
|
889
|
+
"span",
|
|
890
|
+
{
|
|
891
|
+
"data-slot": "avatar-badge",
|
|
892
|
+
className: cn(
|
|
893
|
+
"absolute right-0 bottom-0 size-2.5 rounded-full bg-success ring-2 ring-background",
|
|
894
|
+
className
|
|
895
|
+
),
|
|
896
|
+
...props
|
|
897
|
+
}
|
|
898
|
+
);
|
|
597
899
|
}
|
|
598
900
|
function AvatarGroup({ className, ...props }) {
|
|
599
|
-
return /* @__PURE__ */
|
|
901
|
+
return /* @__PURE__ */ jsx7(
|
|
902
|
+
"div",
|
|
903
|
+
{
|
|
904
|
+
"data-slot": "avatar-group",
|
|
905
|
+
className: cn(
|
|
906
|
+
"flex -space-x-2 [&>[data-slot=avatar]]:ring-2 [&>[data-slot=avatar]]:ring-background",
|
|
907
|
+
className
|
|
908
|
+
),
|
|
909
|
+
...props
|
|
910
|
+
}
|
|
911
|
+
);
|
|
600
912
|
}
|
|
601
913
|
function AvatarGroupCount({ className, ...props }) {
|
|
602
|
-
return /* @__PURE__ */
|
|
914
|
+
return /* @__PURE__ */ jsx7(
|
|
915
|
+
"span",
|
|
916
|
+
{
|
|
917
|
+
"data-slot": "avatar-group-count",
|
|
918
|
+
className: cn(
|
|
919
|
+
"flex size-8 items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground ring-2 ring-background",
|
|
920
|
+
className
|
|
921
|
+
),
|
|
922
|
+
...props
|
|
923
|
+
}
|
|
924
|
+
);
|
|
603
925
|
}
|
|
604
926
|
|
|
605
927
|
// src/ui/badge/badge.tsx
|
|
606
|
-
import { cva as cva4 } from "class-variance-authority";
|
|
607
928
|
import { Link } from "react-aria-components";
|
|
608
|
-
|
|
929
|
+
|
|
930
|
+
// src/ui/badge/badge-variants.ts
|
|
931
|
+
import { cva as cva4 } from "class-variance-authority";
|
|
609
932
|
var badgeVariants = cva4(
|
|
610
933
|
"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",
|
|
611
934
|
{
|
|
@@ -627,8 +950,11 @@ var badgeVariants = cva4(
|
|
|
627
950
|
defaultVariants: { variant: "default" }
|
|
628
951
|
}
|
|
629
952
|
);
|
|
953
|
+
|
|
954
|
+
// src/ui/badge/badge.tsx
|
|
955
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
630
956
|
function Badge({ className, variant, ...props }) {
|
|
631
|
-
return /* @__PURE__ */
|
|
957
|
+
return /* @__PURE__ */ jsx8(
|
|
632
958
|
"span",
|
|
633
959
|
{
|
|
634
960
|
"data-slot": "badge",
|
|
@@ -639,7 +965,7 @@ function Badge({ className, variant, ...props }) {
|
|
|
639
965
|
);
|
|
640
966
|
}
|
|
641
967
|
function BadgeLink({ className, variant, ...props }) {
|
|
642
|
-
return /* @__PURE__ */
|
|
968
|
+
return /* @__PURE__ */ jsx8(
|
|
643
969
|
Link,
|
|
644
970
|
{
|
|
645
971
|
"data-slot": "badge",
|
|
@@ -651,32 +977,75 @@ function BadgeLink({ className, variant, ...props }) {
|
|
|
651
977
|
}
|
|
652
978
|
|
|
653
979
|
// src/ui/breadcrumb/breadcrumb.tsx
|
|
654
|
-
import {
|
|
655
|
-
|
|
980
|
+
import {
|
|
981
|
+
Breadcrumb as AriaBreadcrumb,
|
|
982
|
+
Breadcrumbs as AriaBreadcrumbs,
|
|
983
|
+
Link as AriaLink
|
|
984
|
+
} from "react-aria-components";
|
|
985
|
+
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
656
986
|
function Breadcrumbs({ className, ...props }) {
|
|
657
|
-
return /* @__PURE__ */
|
|
987
|
+
return /* @__PURE__ */ jsx9(
|
|
988
|
+
AriaBreadcrumbs,
|
|
989
|
+
{
|
|
990
|
+
"data-slot": "breadcrumbs",
|
|
991
|
+
className: cn("flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground", className),
|
|
992
|
+
...props
|
|
993
|
+
}
|
|
994
|
+
);
|
|
658
995
|
}
|
|
659
996
|
function Breadcrumb({ className, ...props }) {
|
|
660
|
-
return /* @__PURE__ */
|
|
997
|
+
return /* @__PURE__ */ jsx9(
|
|
998
|
+
AriaBreadcrumb,
|
|
999
|
+
{
|
|
1000
|
+
"data-slot": "breadcrumb",
|
|
1001
|
+
className: cn("inline-flex items-center gap-1.5", className),
|
|
1002
|
+
...props
|
|
1003
|
+
}
|
|
1004
|
+
);
|
|
661
1005
|
}
|
|
662
1006
|
function BreadcrumbLink({ className, ...props }) {
|
|
663
|
-
return /* @__PURE__ */
|
|
1007
|
+
return /* @__PURE__ */ jsx9(
|
|
1008
|
+
AriaLink,
|
|
1009
|
+
{
|
|
1010
|
+
"data-slot": "breadcrumb-link",
|
|
1011
|
+
className: cn("transition-colors hover:text-foreground", className),
|
|
1012
|
+
...props
|
|
1013
|
+
}
|
|
1014
|
+
);
|
|
664
1015
|
}
|
|
665
1016
|
function BreadcrumbPage({ className, ...props }) {
|
|
666
|
-
return /* @__PURE__ */
|
|
1017
|
+
return /* @__PURE__ */ jsx9(
|
|
1018
|
+
"span",
|
|
1019
|
+
{
|
|
1020
|
+
"data-slot": "breadcrumb-page",
|
|
1021
|
+
"aria-current": "page",
|
|
1022
|
+
className: cn("font-medium text-foreground", className),
|
|
1023
|
+
...props
|
|
1024
|
+
}
|
|
1025
|
+
);
|
|
667
1026
|
}
|
|
668
|
-
function BreadcrumbSeparator({
|
|
669
|
-
|
|
1027
|
+
function BreadcrumbSeparator({
|
|
1028
|
+
children = "/",
|
|
1029
|
+
className,
|
|
1030
|
+
...props
|
|
1031
|
+
}) {
|
|
1032
|
+
return /* @__PURE__ */ jsx9(
|
|
1033
|
+
"span",
|
|
1034
|
+
{
|
|
1035
|
+
"data-slot": "breadcrumb-separator",
|
|
1036
|
+
"aria-hidden": "true",
|
|
1037
|
+
className: cn("text-muted-foreground/60", className),
|
|
1038
|
+
...props,
|
|
1039
|
+
children
|
|
1040
|
+
}
|
|
1041
|
+
);
|
|
670
1042
|
}
|
|
671
1043
|
|
|
672
|
-
// src/ui/button-group/button-group.tsx
|
|
673
|
-
import { cva as cva5 } from "class-variance-authority";
|
|
674
|
-
|
|
675
1044
|
// src/ui/separator/separator.tsx
|
|
676
1045
|
import { Separator as SeparatorPrimitive } from "react-aria-components";
|
|
677
|
-
import { jsx as
|
|
1046
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
678
1047
|
function Separator({ className, orientation = "horizontal", ...props }) {
|
|
679
|
-
return /* @__PURE__ */
|
|
1048
|
+
return /* @__PURE__ */ jsx10(
|
|
680
1049
|
SeparatorPrimitive,
|
|
681
1050
|
{
|
|
682
1051
|
"data-slot": "separator",
|
|
@@ -690,8 +1059,8 @@ function Separator({ className, orientation = "horizontal", ...props }) {
|
|
|
690
1059
|
);
|
|
691
1060
|
}
|
|
692
1061
|
|
|
693
|
-
// src/ui/button-group/button-group.
|
|
694
|
-
import {
|
|
1062
|
+
// src/ui/button-group/button-group-variants.ts
|
|
1063
|
+
import { cva as cva5 } from "class-variance-authority";
|
|
695
1064
|
var buttonGroupVariants = cva5(
|
|
696
1065
|
"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",
|
|
697
1066
|
{
|
|
@@ -706,6 +1075,9 @@ var buttonGroupVariants = cva5(
|
|
|
706
1075
|
}
|
|
707
1076
|
}
|
|
708
1077
|
);
|
|
1078
|
+
|
|
1079
|
+
// src/ui/button-group/button-group.tsx
|
|
1080
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
709
1081
|
function ButtonGroup({
|
|
710
1082
|
className,
|
|
711
1083
|
orientation,
|
|
@@ -713,7 +1085,7 @@ function ButtonGroup({
|
|
|
713
1085
|
}) {
|
|
714
1086
|
return (
|
|
715
1087
|
// biome-ignore lint/a11y/useSemanticElements: fieldset would impose form semantics on a generic action group.
|
|
716
|
-
/* @__PURE__ */
|
|
1088
|
+
/* @__PURE__ */ jsx11(
|
|
717
1089
|
"div",
|
|
718
1090
|
{
|
|
719
1091
|
role: "group",
|
|
@@ -741,7 +1113,7 @@ function ButtonGroupText({
|
|
|
741
1113
|
};
|
|
742
1114
|
return render(renderProps);
|
|
743
1115
|
}
|
|
744
|
-
return /* @__PURE__ */
|
|
1116
|
+
return /* @__PURE__ */ jsx11(
|
|
745
1117
|
"div",
|
|
746
1118
|
{
|
|
747
1119
|
"data-slot": "button-group-text",
|
|
@@ -758,7 +1130,7 @@ function ButtonGroupSeparator({
|
|
|
758
1130
|
orientation = "vertical",
|
|
759
1131
|
...props
|
|
760
1132
|
}) {
|
|
761
|
-
return /* @__PURE__ */
|
|
1133
|
+
return /* @__PURE__ */ jsx11(
|
|
762
1134
|
Separator,
|
|
763
1135
|
{
|
|
764
1136
|
"data-slot": "button-group-separator",
|
|
@@ -773,9 +1145,9 @@ function ButtonGroupSeparator({
|
|
|
773
1145
|
}
|
|
774
1146
|
|
|
775
1147
|
// src/ui/card/card.tsx
|
|
776
|
-
import { jsx as
|
|
1148
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
777
1149
|
function Card({ className, size = "default", ...props }) {
|
|
778
|
-
return /* @__PURE__ */
|
|
1150
|
+
return /* @__PURE__ */ jsx12(
|
|
779
1151
|
"div",
|
|
780
1152
|
{
|
|
781
1153
|
"data-slot": "card",
|
|
@@ -789,7 +1161,7 @@ function Card({ className, size = "default", ...props }) {
|
|
|
789
1161
|
);
|
|
790
1162
|
}
|
|
791
1163
|
function CardHeader({ className, ...props }) {
|
|
792
|
-
return /* @__PURE__ */
|
|
1164
|
+
return /* @__PURE__ */ jsx12(
|
|
793
1165
|
"div",
|
|
794
1166
|
{
|
|
795
1167
|
"data-slot": "card-header",
|
|
@@ -802,7 +1174,7 @@ function CardHeader({ className, ...props }) {
|
|
|
802
1174
|
);
|
|
803
1175
|
}
|
|
804
1176
|
function CardTitle({ className, ...props }) {
|
|
805
|
-
return /* @__PURE__ */
|
|
1177
|
+
return /* @__PURE__ */ jsx12(
|
|
806
1178
|
"div",
|
|
807
1179
|
{
|
|
808
1180
|
"data-slot": "card-title",
|
|
@@ -815,7 +1187,7 @@ function CardTitle({ className, ...props }) {
|
|
|
815
1187
|
);
|
|
816
1188
|
}
|
|
817
1189
|
function CardDescription({ className, ...props }) {
|
|
818
|
-
return /* @__PURE__ */
|
|
1190
|
+
return /* @__PURE__ */ jsx12(
|
|
819
1191
|
"div",
|
|
820
1192
|
{
|
|
821
1193
|
"data-slot": "card-description",
|
|
@@ -825,7 +1197,7 @@ function CardDescription({ className, ...props }) {
|
|
|
825
1197
|
);
|
|
826
1198
|
}
|
|
827
1199
|
function CardAction({ className, ...props }) {
|
|
828
|
-
return /* @__PURE__ */
|
|
1200
|
+
return /* @__PURE__ */ jsx12(
|
|
829
1201
|
"div",
|
|
830
1202
|
{
|
|
831
1203
|
"data-slot": "card-action",
|
|
@@ -835,10 +1207,10 @@ function CardAction({ className, ...props }) {
|
|
|
835
1207
|
);
|
|
836
1208
|
}
|
|
837
1209
|
function CardContent({ className, ...props }) {
|
|
838
|
-
return /* @__PURE__ */
|
|
1210
|
+
return /* @__PURE__ */ jsx12("div", { "data-slot": "card-content", className: cn("px-(--card-spacing)", className), ...props });
|
|
839
1211
|
}
|
|
840
1212
|
function CardFooter({ className, ...props }) {
|
|
841
|
-
return /* @__PURE__ */
|
|
1213
|
+
return /* @__PURE__ */ jsx12(
|
|
842
1214
|
"div",
|
|
843
1215
|
{
|
|
844
1216
|
"data-slot": "card-footer",
|
|
@@ -856,9 +1228,9 @@ import { Check } from "lucide-react";
|
|
|
856
1228
|
import {
|
|
857
1229
|
Checkbox as AriaCheckbox
|
|
858
1230
|
} from "react-aria-components";
|
|
859
|
-
import { Fragment as Fragment3, jsx as
|
|
1231
|
+
import { Fragment as Fragment3, jsx as jsx13, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
860
1232
|
function Checkbox({ className, children, ...props }) {
|
|
861
|
-
return /* @__PURE__ */
|
|
1233
|
+
return /* @__PURE__ */ jsx13(
|
|
862
1234
|
AriaCheckbox,
|
|
863
1235
|
{
|
|
864
1236
|
"data-slot": "checkbox",
|
|
@@ -867,13 +1239,13 @@ function Checkbox({ className, children, ...props }) {
|
|
|
867
1239
|
className
|
|
868
1240
|
),
|
|
869
1241
|
...props,
|
|
870
|
-
children: (state) => /* @__PURE__ */
|
|
871
|
-
/* @__PURE__ */
|
|
1242
|
+
children: (state) => /* @__PURE__ */ jsxs4(Fragment3, { children: [
|
|
1243
|
+
/* @__PURE__ */ jsx13(
|
|
872
1244
|
"span",
|
|
873
1245
|
{
|
|
874
1246
|
"aria-hidden": "true",
|
|
875
|
-
className: "
|
|
876
|
-
children: /* @__PURE__ */
|
|
1247
|
+
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",
|
|
1248
|
+
children: /* @__PURE__ */ jsx13(Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" })
|
|
877
1249
|
}
|
|
878
1250
|
),
|
|
879
1251
|
typeof children === "function" ? children(state) : children
|
|
@@ -883,11 +1255,11 @@ function Checkbox({ className, children, ...props }) {
|
|
|
883
1255
|
}
|
|
884
1256
|
|
|
885
1257
|
// src/ui/collapsible/collapsible.tsx
|
|
886
|
-
import * as
|
|
887
|
-
import { jsx as
|
|
888
|
-
var CollapsibleContext =
|
|
1258
|
+
import * as React4 from "react";
|
|
1259
|
+
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
1260
|
+
var CollapsibleContext = React4.createContext(null);
|
|
889
1261
|
function useCollapsibleContext() {
|
|
890
|
-
const context =
|
|
1262
|
+
const context = React4.useContext(CollapsibleContext);
|
|
891
1263
|
if (!context) throw new Error("Collapsible components must be rendered within Collapsible.");
|
|
892
1264
|
return context;
|
|
893
1265
|
}
|
|
@@ -898,27 +1270,32 @@ function Collapsible({
|
|
|
898
1270
|
open: controlledOpen,
|
|
899
1271
|
...props
|
|
900
1272
|
}) {
|
|
901
|
-
const [uncontrolledOpen, setUncontrolledOpen] =
|
|
902
|
-
const contentId =
|
|
1273
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React4.useState(defaultOpen);
|
|
1274
|
+
const contentId = React4.useId();
|
|
903
1275
|
const open = controlledOpen ?? uncontrolledOpen;
|
|
904
|
-
const setOpen =
|
|
1276
|
+
const setOpen = React4.useCallback(
|
|
905
1277
|
(nextOpen) => {
|
|
906
1278
|
if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
|
|
907
1279
|
onOpenChange?.(nextOpen);
|
|
908
1280
|
},
|
|
909
1281
|
[controlledOpen, onOpenChange]
|
|
910
1282
|
);
|
|
911
|
-
return /* @__PURE__ */
|
|
1283
|
+
return /* @__PURE__ */ jsx14(CollapsibleContext.Provider, { value: { contentId, open, setOpen }, children: /* @__PURE__ */ jsx14("div", { "data-slot": "collapsible", "data-state": open ? "open" : "closed", ...props, children }) });
|
|
912
1284
|
}
|
|
913
|
-
function CollapsibleTrigger({
|
|
1285
|
+
function CollapsibleTrigger({
|
|
1286
|
+
asChild = false,
|
|
1287
|
+
children,
|
|
1288
|
+
onClick,
|
|
1289
|
+
...props
|
|
1290
|
+
}) {
|
|
914
1291
|
const { contentId, open, setOpen } = useCollapsibleContext();
|
|
915
1292
|
const handleClick = (event) => {
|
|
916
1293
|
onClick?.(event);
|
|
917
1294
|
if (!event.defaultPrevented) setOpen(!open);
|
|
918
1295
|
};
|
|
919
|
-
if (asChild &&
|
|
1296
|
+
if (asChild && React4.isValidElement(children)) {
|
|
920
1297
|
const child = children;
|
|
921
|
-
return
|
|
1298
|
+
return React4.cloneElement(child, {
|
|
922
1299
|
...props,
|
|
923
1300
|
"aria-controls": contentId,
|
|
924
1301
|
"aria-expanded": open,
|
|
@@ -930,7 +1307,7 @@ function CollapsibleTrigger({ asChild = false, children, onClick, ...props }) {
|
|
|
930
1307
|
}
|
|
931
1308
|
});
|
|
932
1309
|
}
|
|
933
|
-
return /* @__PURE__ */
|
|
1310
|
+
return /* @__PURE__ */ jsx14(
|
|
934
1311
|
"button",
|
|
935
1312
|
{
|
|
936
1313
|
type: "button",
|
|
@@ -947,39 +1324,135 @@ function CollapsibleTrigger({ asChild = false, children, onClick, ...props }) {
|
|
|
947
1324
|
function CollapsibleContent({ children, ...props }) {
|
|
948
1325
|
const { contentId, open } = useCollapsibleContext();
|
|
949
1326
|
if (!open) return null;
|
|
950
|
-
return /* @__PURE__ */
|
|
1327
|
+
return /* @__PURE__ */ jsx14("div", { id: contentId, "data-slot": "collapsible-content", "data-state": "open", ...props, children });
|
|
951
1328
|
}
|
|
952
1329
|
|
|
953
1330
|
// src/ui/combobox/combobox.tsx
|
|
954
|
-
import { Fragment as Fragment4, useMemo, useState as
|
|
955
|
-
import {
|
|
956
|
-
|
|
1331
|
+
import { Fragment as Fragment4, useMemo, useState as useState8 } from "react";
|
|
1332
|
+
import {
|
|
1333
|
+
ComboBox as AriaComboBox,
|
|
1334
|
+
ComboBoxValue,
|
|
1335
|
+
FieldError,
|
|
1336
|
+
Input,
|
|
1337
|
+
Label,
|
|
1338
|
+
ListBox,
|
|
1339
|
+
ListBoxItem,
|
|
1340
|
+
Popover,
|
|
1341
|
+
Text as Text2
|
|
1342
|
+
} from "react-aria-components";
|
|
1343
|
+
import { jsx as jsx15, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
957
1344
|
var Combobox = AriaComboBox;
|
|
958
1345
|
function ComboboxInput({ className, ...props }) {
|
|
959
|
-
return /* @__PURE__ */
|
|
1346
|
+
return /* @__PURE__ */ jsx15(
|
|
1347
|
+
Input,
|
|
1348
|
+
{
|
|
1349
|
+
"data-slot": "combobox-input",
|
|
1350
|
+
className: cn(
|
|
1351
|
+
"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",
|
|
1352
|
+
className
|
|
1353
|
+
),
|
|
1354
|
+
...props
|
|
1355
|
+
}
|
|
1356
|
+
);
|
|
960
1357
|
}
|
|
961
1358
|
function ComboboxContent({ className, ...props }) {
|
|
962
|
-
return /* @__PURE__ */
|
|
1359
|
+
return /* @__PURE__ */ jsx15(
|
|
1360
|
+
Popover,
|
|
1361
|
+
{
|
|
1362
|
+
"data-slot": "combobox-content",
|
|
1363
|
+
className: cn(
|
|
1364
|
+
"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",
|
|
1365
|
+
className
|
|
1366
|
+
),
|
|
1367
|
+
...props
|
|
1368
|
+
}
|
|
1369
|
+
);
|
|
963
1370
|
}
|
|
964
|
-
function ComboboxList({
|
|
965
|
-
|
|
1371
|
+
function ComboboxList({
|
|
1372
|
+
className,
|
|
1373
|
+
emptyState,
|
|
1374
|
+
...props
|
|
1375
|
+
}) {
|
|
1376
|
+
return /* @__PURE__ */ jsx15(
|
|
1377
|
+
ListBox,
|
|
1378
|
+
{
|
|
1379
|
+
"data-slot": "combobox-list",
|
|
1380
|
+
className: cn("max-h-64 overflow-y-auto", className),
|
|
1381
|
+
renderEmptyState: emptyState ? () => emptyState : void 0,
|
|
1382
|
+
...props
|
|
1383
|
+
}
|
|
1384
|
+
);
|
|
966
1385
|
}
|
|
967
|
-
function ComboboxItem({
|
|
968
|
-
|
|
1386
|
+
function ComboboxItem({
|
|
1387
|
+
className,
|
|
1388
|
+
children,
|
|
1389
|
+
...props
|
|
1390
|
+
}) {
|
|
1391
|
+
return /* @__PURE__ */ jsx15(
|
|
1392
|
+
ListBoxItem,
|
|
1393
|
+
{
|
|
1394
|
+
"data-slot": "combobox-item",
|
|
1395
|
+
className: cn(
|
|
1396
|
+
"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",
|
|
1397
|
+
className
|
|
1398
|
+
),
|
|
1399
|
+
...props,
|
|
1400
|
+
children
|
|
1401
|
+
}
|
|
1402
|
+
);
|
|
969
1403
|
}
|
|
970
|
-
function HighlightMatch({
|
|
971
|
-
|
|
1404
|
+
function HighlightMatch({
|
|
1405
|
+
text,
|
|
1406
|
+
query,
|
|
1407
|
+
className
|
|
1408
|
+
}) {
|
|
1409
|
+
return /* @__PURE__ */ jsx15("span", { className, children: getTextMatchParts(text, query).map(
|
|
1410
|
+
(part, index) => part.match ? /* @__PURE__ */ jsx15(
|
|
1411
|
+
"mark",
|
|
1412
|
+
{
|
|
1413
|
+
className: "bg-accent text-accent-foreground rounded px-0.5",
|
|
1414
|
+
children: part.text
|
|
1415
|
+
},
|
|
1416
|
+
`${part.text}-${index}`
|
|
1417
|
+
) : /* @__PURE__ */ jsx15(Fragment4, { children: part.text }, `${part.text}-${index}`)
|
|
1418
|
+
) });
|
|
972
1419
|
}
|
|
973
|
-
function AutocompleteCombobox({
|
|
974
|
-
|
|
1420
|
+
function AutocompleteCombobox({
|
|
1421
|
+
items,
|
|
1422
|
+
getItemKey,
|
|
1423
|
+
getItemLabel,
|
|
1424
|
+
renderItem,
|
|
1425
|
+
inputValue: controlledInputValue,
|
|
1426
|
+
onInputChange,
|
|
1427
|
+
selectedKey,
|
|
1428
|
+
onSelectionChange,
|
|
1429
|
+
label,
|
|
1430
|
+
description,
|
|
1431
|
+
errorMessage,
|
|
1432
|
+
emptyState = /* @__PURE__ */ jsx15("p", { className: "text-muted-foreground px-3 py-7 text-center text-sm", children: "No hay resultados." }),
|
|
1433
|
+
suggestion = true,
|
|
1434
|
+
placeholder,
|
|
1435
|
+
className,
|
|
1436
|
+
onKeyDown: _onKeyDown,
|
|
1437
|
+
...props
|
|
1438
|
+
}) {
|
|
1439
|
+
const [internalInputValue, setInternalInputValue] = useState8("");
|
|
975
1440
|
const inputValue = controlledInputValue ?? internalInputValue;
|
|
976
1441
|
const setInputValue = (value) => {
|
|
977
1442
|
setInternalInputValue(value);
|
|
978
1443
|
onInputChange?.(value);
|
|
979
1444
|
};
|
|
980
1445
|
const normalizedQuery = inputValue.trim().toLocaleLowerCase();
|
|
981
|
-
const filteredItems = useMemo(
|
|
982
|
-
|
|
1446
|
+
const filteredItems = useMemo(
|
|
1447
|
+
() => normalizedQuery ? items.filter((item) => getItemLabel(item).toLocaleLowerCase().includes(normalizedQuery)) : [...items],
|
|
1448
|
+
[getItemLabel, items, normalizedQuery]
|
|
1449
|
+
);
|
|
1450
|
+
const suggestedItem = useMemo(
|
|
1451
|
+
() => !suggestion || !normalizedQuery ? void 0 : items.find(
|
|
1452
|
+
(item) => getItemLabel(item).toLocaleLowerCase().startsWith(normalizedQuery) && getItemLabel(item).length > inputValue.length
|
|
1453
|
+
),
|
|
1454
|
+
[getItemLabel, inputValue.length, items, normalizedQuery, suggestion]
|
|
1455
|
+
);
|
|
983
1456
|
const suggestionLabel = suggestedItem ? getItemLabel(suggestedItem) : void 0;
|
|
984
1457
|
const acceptSuggestion = () => {
|
|
985
1458
|
if (!suggestedItem || !suggestionLabel) return false;
|
|
@@ -990,136 +1463,121 @@ function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inp
|
|
|
990
1463
|
const handleKeyDown = (event) => {
|
|
991
1464
|
if ((event.key === "Tab" || event.key === "Enter") && acceptSuggestion()) event.preventDefault();
|
|
992
1465
|
};
|
|
993
|
-
return /* @__PURE__ */
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1466
|
+
return /* @__PURE__ */ jsxs5(
|
|
1467
|
+
AriaComboBox,
|
|
1468
|
+
{
|
|
1469
|
+
...props,
|
|
1470
|
+
className: cn("group/combobox flex w-full flex-col gap-1.5", className),
|
|
1471
|
+
items: filteredItems,
|
|
1472
|
+
selectedKey,
|
|
1473
|
+
inputValue,
|
|
1474
|
+
onInputChange: setInputValue,
|
|
1475
|
+
onSelectionChange: (key) => {
|
|
1476
|
+
const item = filteredItems.find(
|
|
1477
|
+
(candidate) => String(getItemKey(candidate)) === String(key)
|
|
1478
|
+
);
|
|
1479
|
+
if (item) setInputValue(getItemLabel(item));
|
|
1480
|
+
onSelectionChange?.(key, item);
|
|
1481
|
+
},
|
|
1482
|
+
children: [
|
|
1483
|
+
label && /* @__PURE__ */ jsx15(Label, { className: "text-foreground text-sm font-medium", children: label }),
|
|
1484
|
+
/* @__PURE__ */ jsxs5("div", { className: "relative", children: [
|
|
1485
|
+
suggestionLabel && /* @__PURE__ */ jsxs5(
|
|
1486
|
+
"span",
|
|
1487
|
+
{
|
|
1488
|
+
"aria-hidden": "true",
|
|
1489
|
+
className: "text-muted-foreground/60 pointer-events-none absolute inset-y-0 left-2.5 z-0 flex items-center text-sm whitespace-pre",
|
|
1490
|
+
children: [
|
|
1491
|
+
/* @__PURE__ */ jsx15("span", { className: "text-transparent", children: inputValue }),
|
|
1492
|
+
suggestionLabel.slice(inputValue.length)
|
|
1493
|
+
]
|
|
1494
|
+
}
|
|
1495
|
+
),
|
|
1496
|
+
/* @__PURE__ */ jsx15(
|
|
1497
|
+
ComboboxInput,
|
|
1498
|
+
{
|
|
1499
|
+
"aria-autocomplete": suggestionLabel ? "both" : "list",
|
|
1500
|
+
placeholder,
|
|
1501
|
+
onKeyDown: handleKeyDown,
|
|
1502
|
+
className: "relative z-10 bg-transparent"
|
|
1503
|
+
}
|
|
1504
|
+
)
|
|
1505
|
+
] }),
|
|
1506
|
+
description && /* @__PURE__ */ jsx15(Text2, { slot: "description", className: "text-muted-foreground text-xs", children: description }),
|
|
1507
|
+
errorMessage && /* @__PURE__ */ jsx15(FieldError, { className: "text-destructive text-xs", children: errorMessage }),
|
|
1508
|
+
/* @__PURE__ */ jsx15(ComboboxContent, { children: /* @__PURE__ */ jsx15(ComboboxList, { emptyState, children: (item) => /* @__PURE__ */ jsx15(ComboboxItem, { id: getItemKey(item), textValue: getItemLabel(item), children: renderItem ? renderItem(item, inputValue) : /* @__PURE__ */ jsx15(HighlightMatch, { text: getItemLabel(item), query: inputValue }) }) }) })
|
|
1509
|
+
]
|
|
1510
|
+
}
|
|
1511
|
+
);
|
|
1010
1512
|
}
|
|
1011
1513
|
|
|
1012
1514
|
// src/ui/command/command.tsx
|
|
1013
|
-
import {
|
|
1014
|
-
|
|
1515
|
+
import {
|
|
1516
|
+
ComboBox as AriaComboBox2,
|
|
1517
|
+
Input as AriaInput,
|
|
1518
|
+
ListBox as ListBox2,
|
|
1519
|
+
ListBoxItem as ListBoxItem2,
|
|
1520
|
+
Popover as Popover2
|
|
1521
|
+
} from "react-aria-components";
|
|
1522
|
+
import { jsx as jsx16 } from "react/jsx-runtime";
|
|
1015
1523
|
function Command({ className, ...props }) {
|
|
1016
|
-
return /* @__PURE__ */
|
|
1524
|
+
return /* @__PURE__ */ jsx16(AriaComboBox2, { "data-slot": "command", className: cn("w-full", className), ...props });
|
|
1017
1525
|
}
|
|
1018
1526
|
function CommandInput({ className, ...props }) {
|
|
1019
|
-
return /* @__PURE__ */
|
|
1527
|
+
return /* @__PURE__ */ jsx16(
|
|
1528
|
+
AriaInput,
|
|
1529
|
+
{
|
|
1530
|
+
"data-slot": "command-input",
|
|
1531
|
+
className: cn(
|
|
1532
|
+
"h-9 w-full border-0 bg-transparent px-3 text-sm text-foreground outline-none placeholder:text-muted-foreground",
|
|
1533
|
+
className
|
|
1534
|
+
),
|
|
1535
|
+
...props
|
|
1536
|
+
}
|
|
1537
|
+
);
|
|
1020
1538
|
}
|
|
1021
1539
|
function CommandContent({ className, ...props }) {
|
|
1022
|
-
return /* @__PURE__ */
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1540
|
+
return /* @__PURE__ */ jsx16(
|
|
1541
|
+
Popover2,
|
|
1542
|
+
{
|
|
1543
|
+
"data-slot": "command-content",
|
|
1544
|
+
className: cn(
|
|
1545
|
+
"w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 shadow-lg outline-none",
|
|
1546
|
+
className
|
|
1547
|
+
),
|
|
1548
|
+
...props
|
|
1549
|
+
}
|
|
1550
|
+
);
|
|
1029
1551
|
}
|
|
1030
|
-
|
|
1031
|
-
// src/ui/modal-dialog/modal-dialog.tsx
|
|
1032
|
-
import { X } from "lucide-react";
|
|
1033
|
-
import {
|
|
1034
|
-
Dialog as AriaDialog2,
|
|
1035
|
-
Heading as Heading2,
|
|
1036
|
-
Modal as Modal2,
|
|
1037
|
-
ModalOverlay as ModalOverlay2,
|
|
1038
|
-
Text as Text3
|
|
1039
|
-
} from "react-aria-components";
|
|
1040
|
-
import { Fragment as Fragment5, jsx as jsx16, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1041
|
-
var sizeClasses = {
|
|
1042
|
-
sm: "w-[min(calc(100dvw-2rem),24rem)]",
|
|
1043
|
-
md: "w-[min(calc(100dvw-2rem),28rem)]",
|
|
1044
|
-
lg: "w-[min(calc(100dvw-2rem),36rem)]"
|
|
1045
|
-
};
|
|
1046
|
-
function ModalDialog({
|
|
1047
|
-
open,
|
|
1048
|
-
onOpenChange,
|
|
1049
|
-
title,
|
|
1050
|
-
description,
|
|
1051
|
-
children,
|
|
1052
|
-
footer,
|
|
1053
|
-
size = "sm",
|
|
1054
|
-
showCloseButton = true,
|
|
1552
|
+
function CommandList({
|
|
1055
1553
|
className,
|
|
1056
|
-
footerClassName,
|
|
1057
1554
|
...props
|
|
1058
1555
|
}) {
|
|
1059
|
-
const layoutClass = children ? footer ? "grid-rows-[auto_minmax(0,1fr)_auto]" : "grid-rows-[auto_minmax(0,1fr)]" : "grid-rows-[auto_auto]";
|
|
1060
1556
|
return /* @__PURE__ */ jsx16(
|
|
1061
|
-
|
|
1557
|
+
ListBox2,
|
|
1062
1558
|
{
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
"grid max-h-[calc(100dvh-2rem)] overflow-hidden rounded-xl bg-background text-foreground shadow-xl outline-none",
|
|
1080
|
-
layoutClass
|
|
1081
|
-
),
|
|
1082
|
-
children: ({ close }) => /* @__PURE__ */ jsxs5(Fragment5, { children: [
|
|
1083
|
-
/* @__PURE__ */ jsxs5("header", { "data-slot": "modal-dialog-header", className: "flex items-start gap-3 border-b border-border px-5 py-4", children: [
|
|
1084
|
-
/* @__PURE__ */ jsxs5("div", { className: "min-w-0 flex-1", children: [
|
|
1085
|
-
/* @__PURE__ */ jsx16(Heading2, { slot: "title", className: "font-heading text-base leading-none font-medium", children: title }),
|
|
1086
|
-
description ? /* @__PURE__ */ jsx16(Text3, { slot: "description", className: "mt-2 text-sm text-muted-foreground", children: description }) : null
|
|
1087
|
-
] }),
|
|
1088
|
-
showCloseButton ? /* @__PURE__ */ jsx16(
|
|
1089
|
-
Button,
|
|
1090
|
-
{
|
|
1091
|
-
"aria-label": "Cerrar di\xE1logo",
|
|
1092
|
-
variant: "ghost",
|
|
1093
|
-
size: "icon",
|
|
1094
|
-
className: "-mr-2 -mt-1",
|
|
1095
|
-
onPress: close,
|
|
1096
|
-
children: /* @__PURE__ */ jsx16(X, { "aria-hidden": "true", className: "size-4" })
|
|
1097
|
-
}
|
|
1098
|
-
) : null
|
|
1099
|
-
] }),
|
|
1100
|
-
children ? /* @__PURE__ */ jsx16("div", { "data-slot": "modal-dialog-body", className: "min-h-0 overflow-y-auto px-5 py-4", children }) : null,
|
|
1101
|
-
footer ? /* @__PURE__ */ jsx16(
|
|
1102
|
-
"footer",
|
|
1103
|
-
{
|
|
1104
|
-
"data-slot": "modal-dialog-footer",
|
|
1105
|
-
className: cn(
|
|
1106
|
-
"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",
|
|
1107
|
-
footerClassName
|
|
1108
|
-
),
|
|
1109
|
-
children: footer
|
|
1110
|
-
}
|
|
1111
|
-
) : null
|
|
1112
|
-
] })
|
|
1113
|
-
}
|
|
1114
|
-
)
|
|
1115
|
-
}
|
|
1116
|
-
)
|
|
1559
|
+
"data-slot": "command-list",
|
|
1560
|
+
className: cn("max-h-72 overflow-y-auto", className),
|
|
1561
|
+
...props
|
|
1562
|
+
}
|
|
1563
|
+
);
|
|
1564
|
+
}
|
|
1565
|
+
function CommandItem({ className, ...props }) {
|
|
1566
|
+
return /* @__PURE__ */ jsx16(
|
|
1567
|
+
ListBoxItem2,
|
|
1568
|
+
{
|
|
1569
|
+
"data-slot": "command-item",
|
|
1570
|
+
className: cn(
|
|
1571
|
+
"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",
|
|
1572
|
+
className
|
|
1573
|
+
),
|
|
1574
|
+
...props
|
|
1117
1575
|
}
|
|
1118
1576
|
);
|
|
1119
1577
|
}
|
|
1120
1578
|
|
|
1121
1579
|
// src/ui/confirm-dialog/confirm-dialog.tsx
|
|
1122
|
-
import {
|
|
1580
|
+
import { jsx as jsx17, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1123
1581
|
function ConfirmDialog({
|
|
1124
1582
|
open,
|
|
1125
1583
|
onOpenChange,
|
|
@@ -1131,20 +1589,24 @@ function ConfirmDialog({
|
|
|
1131
1589
|
pending = false,
|
|
1132
1590
|
onConfirm
|
|
1133
1591
|
}) {
|
|
1134
|
-
return /* @__PURE__ */ jsx17(
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1592
|
+
return /* @__PURE__ */ jsx17(AlertDialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs6(AlertDialogContent, { children: [
|
|
1593
|
+
/* @__PURE__ */ jsxs6(AlertDialogHeader, { children: [
|
|
1594
|
+
/* @__PURE__ */ jsx17(AlertDialogTitle, { children: title }),
|
|
1595
|
+
description ? /* @__PURE__ */ jsx17(AlertDialogDescription, { children: description }) : null
|
|
1596
|
+
] }),
|
|
1597
|
+
/* @__PURE__ */ jsxs6(AlertDialogFooter, { children: [
|
|
1598
|
+
/* @__PURE__ */ jsx17(Button, { variant: "outline", isDisabled: pending, onPress: () => onOpenChange(false), children: cancelLabel }),
|
|
1599
|
+
/* @__PURE__ */ jsx17(
|
|
1600
|
+
Button,
|
|
1601
|
+
{
|
|
1602
|
+
variant: destructive ? "destructive" : "default",
|
|
1603
|
+
isDisabled: pending,
|
|
1604
|
+
onPress: onConfirm,
|
|
1605
|
+
children: confirmLabel
|
|
1606
|
+
}
|
|
1607
|
+
)
|
|
1608
|
+
] })
|
|
1609
|
+
] }) });
|
|
1148
1610
|
}
|
|
1149
1611
|
|
|
1150
1612
|
// src/ui/danger-zone/danger-zone.tsx
|
|
@@ -1153,7 +1615,7 @@ import {
|
|
|
1153
1615
|
Button as DisclosureButton,
|
|
1154
1616
|
Disclosure,
|
|
1155
1617
|
DisclosurePanel,
|
|
1156
|
-
Heading as
|
|
1618
|
+
Heading as Heading2
|
|
1157
1619
|
} from "react-aria-components";
|
|
1158
1620
|
import { jsx as jsx18, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1159
1621
|
function DangerZone({
|
|
@@ -1164,19 +1626,19 @@ function DangerZone({
|
|
|
1164
1626
|
children
|
|
1165
1627
|
}) {
|
|
1166
1628
|
return /* @__PURE__ */ jsx18(Disclosure, { defaultExpanded: defaultOpen, children: /* @__PURE__ */ jsxs7(Card, { className: cn("border-destructive/30", className), children: [
|
|
1167
|
-
/* @__PURE__ */ jsx18(
|
|
1629
|
+
/* @__PURE__ */ jsx18(Heading2, { className: "flex", children: /* @__PURE__ */ jsxs7(
|
|
1168
1630
|
DisclosureButton,
|
|
1169
1631
|
{
|
|
1170
1632
|
slot: "trigger",
|
|
1171
1633
|
"data-slot": "danger-zone-trigger",
|
|
1172
|
-
className: "group/danger flex w-full items-center gap-3 px-4 text-left outline-none focus-visible:ring-3
|
|
1634
|
+
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",
|
|
1173
1635
|
children: [
|
|
1174
|
-
/* @__PURE__ */ jsx18(ShieldAlert, { className: "size-4 shrink-0
|
|
1636
|
+
/* @__PURE__ */ jsx18(ShieldAlert, { className: "text-destructive size-4 shrink-0" }),
|
|
1175
1637
|
/* @__PURE__ */ jsxs7("span", { className: "flex flex-1 flex-col gap-0.5", children: [
|
|
1176
|
-
/* @__PURE__ */ jsx18("span", { className: "font-heading text-base leading-snug font-medium
|
|
1177
|
-
/* @__PURE__ */ jsx18("span", { className: "text-
|
|
1638
|
+
/* @__PURE__ */ jsx18("span", { className: "font-heading text-destructive text-base leading-snug font-medium", children: title }),
|
|
1639
|
+
/* @__PURE__ */ jsx18("span", { className: "text-muted-foreground text-xs", children: description })
|
|
1178
1640
|
] }),
|
|
1179
|
-
/* @__PURE__ */ jsx18(ChevronDown, { className: "size-4 shrink-0
|
|
1641
|
+
/* @__PURE__ */ jsx18(ChevronDown, { className: "text-muted-foreground size-4 shrink-0 transition-transform group-aria-expanded/danger:rotate-180" })
|
|
1180
1642
|
]
|
|
1181
1643
|
}
|
|
1182
1644
|
) }),
|
|
@@ -1184,166 +1646,13 @@ function DangerZone({
|
|
|
1184
1646
|
] }) });
|
|
1185
1647
|
}
|
|
1186
1648
|
|
|
1187
|
-
// src/ui/dialog/dialog.tsx
|
|
1188
|
-
import { XIcon } from "lucide-react";
|
|
1189
|
-
import * as React4 from "react";
|
|
1190
|
-
import {
|
|
1191
|
-
Dialog as AriaDialog3,
|
|
1192
|
-
Heading as Heading4,
|
|
1193
|
-
Modal as Modal3,
|
|
1194
|
-
ModalOverlay as ModalOverlay3,
|
|
1195
|
-
Text as Text4
|
|
1196
|
-
} from "react-aria-components";
|
|
1197
|
-
import { Fragment as Fragment7, jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1198
|
-
var DialogContext = React4.createContext(null);
|
|
1199
|
-
function useDialogContext() {
|
|
1200
|
-
const context = React4.useContext(DialogContext);
|
|
1201
|
-
if (!context) throw new Error("Dialog components must be rendered within Dialog.");
|
|
1202
|
-
return context;
|
|
1203
|
-
}
|
|
1204
|
-
function Dialog({ children, defaultOpen = false, onOpenChange, open: controlledOpen }) {
|
|
1205
|
-
const [uncontrolledOpen, setUncontrolledOpen] = React4.useState(defaultOpen);
|
|
1206
|
-
const open = controlledOpen ?? uncontrolledOpen;
|
|
1207
|
-
const setOpen = React4.useCallback(
|
|
1208
|
-
(nextOpen) => {
|
|
1209
|
-
if (controlledOpen === void 0) setUncontrolledOpen(nextOpen);
|
|
1210
|
-
onOpenChange?.(nextOpen);
|
|
1211
|
-
},
|
|
1212
|
-
[controlledOpen, onOpenChange]
|
|
1213
|
-
);
|
|
1214
|
-
return /* @__PURE__ */ jsx19(DialogContext.Provider, { value: { open, setOpen }, children });
|
|
1215
|
-
}
|
|
1216
|
-
function DialogTrigger({ asChild = false, children, onClick, ...props }) {
|
|
1217
|
-
const { setOpen } = useDialogContext();
|
|
1218
|
-
const handleClick = (event) => {
|
|
1219
|
-
onClick?.(event);
|
|
1220
|
-
if (!event.defaultPrevented) setOpen(true);
|
|
1221
|
-
};
|
|
1222
|
-
if (asChild && React4.isValidElement(children)) {
|
|
1223
|
-
const child = children;
|
|
1224
|
-
return React4.cloneElement(child, {
|
|
1225
|
-
...props,
|
|
1226
|
-
"data-slot": "dialog-trigger",
|
|
1227
|
-
onClick: (event) => {
|
|
1228
|
-
child.props.onClick?.(event);
|
|
1229
|
-
handleClick(event);
|
|
1230
|
-
}
|
|
1231
|
-
});
|
|
1232
|
-
}
|
|
1233
|
-
return /* @__PURE__ */ jsx19(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
|
|
1234
|
-
}
|
|
1235
|
-
function DialogPortal({ children }) {
|
|
1236
|
-
return /* @__PURE__ */ jsx19(Fragment7, { children });
|
|
1237
|
-
}
|
|
1238
|
-
function DialogOverlay({ children, className, ...props }) {
|
|
1239
|
-
const { open, setOpen } = useDialogContext();
|
|
1240
|
-
if (!open) return null;
|
|
1241
|
-
return /* @__PURE__ */ jsx19(
|
|
1242
|
-
ModalOverlay3,
|
|
1243
|
-
{
|
|
1244
|
-
"data-slot": "dialog-overlay",
|
|
1245
|
-
isDismissable: true,
|
|
1246
|
-
isOpen: open,
|
|
1247
|
-
onOpenChange: setOpen,
|
|
1248
|
-
className: cn(
|
|
1249
|
-
"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",
|
|
1250
|
-
className
|
|
1251
|
-
),
|
|
1252
|
-
...props,
|
|
1253
|
-
children
|
|
1254
|
-
}
|
|
1255
|
-
);
|
|
1256
|
-
}
|
|
1257
|
-
function DialogContent({
|
|
1258
|
-
children,
|
|
1259
|
-
className,
|
|
1260
|
-
onOverlayClick,
|
|
1261
|
-
showCloseButton = true,
|
|
1262
|
-
...props
|
|
1263
|
-
}) {
|
|
1264
|
-
const { setOpen } = useDialogContext();
|
|
1265
|
-
return /* @__PURE__ */ jsx19(DialogPortal, { children: /* @__PURE__ */ jsx19(
|
|
1266
|
-
DialogOverlay,
|
|
1267
|
-
{
|
|
1268
|
-
onClick: (event) => {
|
|
1269
|
-
if (event.target === event.currentTarget) onOverlayClick?.(event);
|
|
1270
|
-
},
|
|
1271
|
-
children: /* @__PURE__ */ jsx19(
|
|
1272
|
-
Modal3,
|
|
1273
|
-
{
|
|
1274
|
-
className: cn(
|
|
1275
|
-
"w-full max-w-[calc(100%-2rem)] max-h-[calc(100dvh-2rem)] outline-none sm:max-w-sm",
|
|
1276
|
-
className
|
|
1277
|
-
),
|
|
1278
|
-
children: /* @__PURE__ */ jsxs8(
|
|
1279
|
-
AriaDialog3,
|
|
1280
|
-
{
|
|
1281
|
-
"data-slot": "dialog-content",
|
|
1282
|
-
className: cn(
|
|
1283
|
-
"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",
|
|
1284
|
-
className
|
|
1285
|
-
),
|
|
1286
|
-
...props,
|
|
1287
|
-
children: [
|
|
1288
|
-
children,
|
|
1289
|
-
showCloseButton ? /* @__PURE__ */ jsx19(
|
|
1290
|
-
Button,
|
|
1291
|
-
{
|
|
1292
|
-
"aria-label": "Cerrar di\xE1logo",
|
|
1293
|
-
"data-slot": "dialog-close",
|
|
1294
|
-
variant: "ghost",
|
|
1295
|
-
className: "absolute top-2 right-2",
|
|
1296
|
-
size: "icon-sm",
|
|
1297
|
-
onPress: () => setOpen(false),
|
|
1298
|
-
children: /* @__PURE__ */ jsx19(XIcon, {})
|
|
1299
|
-
}
|
|
1300
|
-
) : null
|
|
1301
|
-
]
|
|
1302
|
-
}
|
|
1303
|
-
)
|
|
1304
|
-
}
|
|
1305
|
-
)
|
|
1306
|
-
}
|
|
1307
|
-
) });
|
|
1308
|
-
}
|
|
1309
|
-
function DialogClose({ asChild = false, children, onClick, ...props }) {
|
|
1310
|
-
const { setOpen } = useDialogContext();
|
|
1311
|
-
if (asChild && React4.isValidElement(children)) {
|
|
1312
|
-
const child = children;
|
|
1313
|
-
return React4.cloneElement(child, {
|
|
1314
|
-
...props,
|
|
1315
|
-
"data-slot": "dialog-close",
|
|
1316
|
-
onClick: (event) => {
|
|
1317
|
-
child.props.onClick?.(event);
|
|
1318
|
-
if (!event.defaultPrevented) setOpen(false);
|
|
1319
|
-
}
|
|
1320
|
-
});
|
|
1321
|
-
}
|
|
1322
|
-
return /* @__PURE__ */ jsx19(Button, { "data-slot": "dialog-close", onPress: () => setOpen(false), ...props, children });
|
|
1323
|
-
}
|
|
1324
|
-
function DialogHeader({ className, ...props }) {
|
|
1325
|
-
return /* @__PURE__ */ jsx19("div", { "data-slot": "dialog-header", className: cn("flex flex-col gap-2", className), ...props });
|
|
1326
|
-
}
|
|
1327
|
-
function DialogFooter({ className, showCloseButton = false, children, ...props }) {
|
|
1328
|
-
return /* @__PURE__ */ jsxs8("div", { "data-slot": "dialog-footer", className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:flex-wrap sm:justify-end", className), ...props, children: [
|
|
1329
|
-
children,
|
|
1330
|
-
showCloseButton ? /* @__PURE__ */ jsx19(DialogClose, { variant: "outline", children: "Cerrar" }) : null
|
|
1331
|
-
] });
|
|
1332
|
-
}
|
|
1333
|
-
function DialogTitle({ className, ...props }) {
|
|
1334
|
-
return /* @__PURE__ */ jsx19(Heading4, { slot: "title", "data-slot": "dialog-title", className: cn("font-heading text-base leading-none font-medium", className), ...props });
|
|
1335
|
-
}
|
|
1336
|
-
function DialogDescription({ className, ...props }) {
|
|
1337
|
-
return /* @__PURE__ */ jsx19(Text4, { slot: "description", "data-slot": "dialog-description", className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className), ...props });
|
|
1338
|
-
}
|
|
1339
|
-
|
|
1340
1649
|
// src/ui/doc-preview/doc-preview.tsx
|
|
1341
1650
|
import { FileText, Image } from "lucide-react";
|
|
1342
|
-
import { jsx as
|
|
1651
|
+
import { jsx as jsx19, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1343
1652
|
function DocPreview({ url, mimeType, name }) {
|
|
1344
|
-
if (!url) return /* @__PURE__ */
|
|
1653
|
+
if (!url) return /* @__PURE__ */ jsx19(Fallback, { mimeType, reason: "no-url" });
|
|
1345
1654
|
if (mimeType === "application/pdf" || mimeType === "text/plain" || mimeType === "text/csv") {
|
|
1346
|
-
return /* @__PURE__ */
|
|
1655
|
+
return /* @__PURE__ */ jsx19(
|
|
1347
1656
|
"iframe",
|
|
1348
1657
|
{
|
|
1349
1658
|
src: url,
|
|
@@ -1354,45 +1663,28 @@ function DocPreview({ url, mimeType, name }) {
|
|
|
1354
1663
|
);
|
|
1355
1664
|
}
|
|
1356
1665
|
if (mimeType?.startsWith("image/")) {
|
|
1357
|
-
return /* @__PURE__ */
|
|
1666
|
+
return /* @__PURE__ */ jsx19("div", { className: "bg-muted/30 flex justify-center rounded-sm p-6", children: /* @__PURE__ */ jsx19("img", { src: url, alt: name, className: "max-h-[75vh] max-w-full rounded object-contain" }) });
|
|
1358
1667
|
}
|
|
1359
|
-
return /* @__PURE__ */
|
|
1668
|
+
return /* @__PURE__ */ jsx19(Fallback, { mimeType, reason: "unsupported" });
|
|
1360
1669
|
}
|
|
1361
|
-
function Fallback({
|
|
1670
|
+
function Fallback({
|
|
1671
|
+
mimeType,
|
|
1672
|
+
reason
|
|
1673
|
+
}) {
|
|
1362
1674
|
const Icon = mimeType?.startsWith("image/") ? Image : FileText;
|
|
1363
1675
|
const message = reason === "no-url" ? "No se pudo generar la URL de preview." : "Preview no disponible para este tipo de archivo.";
|
|
1364
|
-
return /* @__PURE__ */
|
|
1365
|
-
/* @__PURE__ */
|
|
1366
|
-
/* @__PURE__ */
|
|
1367
|
-
mimeType ? /* @__PURE__ */
|
|
1368
|
-
/* @__PURE__ */
|
|
1676
|
+
return /* @__PURE__ */ jsxs8("div", { className: "text-muted-foreground flex flex-col items-center justify-center gap-2 py-14", children: [
|
|
1677
|
+
/* @__PURE__ */ jsx19(Icon, { className: "size-9 opacity-30" }),
|
|
1678
|
+
/* @__PURE__ */ jsx19("p", { className: "text-sm", children: message }),
|
|
1679
|
+
mimeType ? /* @__PURE__ */ jsx19("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
|
|
1680
|
+
/* @__PURE__ */ jsx19("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
|
|
1369
1681
|
] });
|
|
1370
1682
|
}
|
|
1371
1683
|
|
|
1372
|
-
// src/ui/drawer/drawer.tsx
|
|
1373
|
-
import { Dialog as AriaDialog4, Heading as Heading5, Modal as Modal4, ModalOverlay as ModalOverlay4 } from "react-aria-components";
|
|
1374
|
-
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1375
|
-
var sideStyles = { left: "inset-y-0 left-0 h-full w-[min(22rem,calc(100%-2rem))] data-entering:animate-ui-surface-in", right: "inset-y-0 right-0 h-full w-[min(22rem,calc(100%-2rem))] data-entering:animate-ui-surface-in", bottom: "inset-x-0 bottom-0 max-h-[85vh] w-full data-entering:animate-ui-surface-in" };
|
|
1376
|
-
function Drawer({ children, side = "right", className, ...props }) {
|
|
1377
|
-
return /* @__PURE__ */ jsx21(ModalOverlay4, { isDismissable: true, className: "fixed inset-0 z-50 bg-black/20 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out", ...props, children: /* @__PURE__ */ jsx21(Modal4, { className: cn("absolute grid gap-4 overflow-y-auto rounded-xl border border-border bg-background p-5 text-foreground shadow-xl outline-none", sideStyles[side], className), children: /* @__PURE__ */ jsx21(AriaDialog4, { "data-slot": "drawer", className: "outline-none", children }) }) });
|
|
1378
|
-
}
|
|
1379
|
-
function DrawerHeader({ className, ...props }) {
|
|
1380
|
-
return /* @__PURE__ */ jsx21("div", { "data-slot": "drawer-header", className: cn("flex flex-col gap-1.5", className), ...props });
|
|
1381
|
-
}
|
|
1382
|
-
function DrawerFooter({ className, ...props }) {
|
|
1383
|
-
return /* @__PURE__ */ jsx21("div", { "data-slot": "drawer-footer", className: cn("mt-auto flex flex-col-reverse gap-2 pt-4 sm:flex-row sm:justify-end", className), ...props });
|
|
1384
|
-
}
|
|
1385
|
-
function DrawerTitle({ className, ...props }) {
|
|
1386
|
-
return /* @__PURE__ */ jsx21(Heading5, { slot: "title", "data-slot": "drawer-title", className: cn("text-base font-semibold", className), ...props });
|
|
1387
|
-
}
|
|
1388
|
-
function DrawerDescription({ className, ...props }) {
|
|
1389
|
-
return /* @__PURE__ */ jsx21("p", { "data-slot": "drawer-description", className: cn("text-sm text-muted-foreground", className), ...props });
|
|
1390
|
-
}
|
|
1391
|
-
|
|
1392
1684
|
// src/ui/dropdown-menu/dropdown-menu.tsx
|
|
1393
|
-
import "react";
|
|
1394
1685
|
import { cva as cva6 } from "class-variance-authority";
|
|
1395
1686
|
import { CheckIcon, ChevronRightIcon } from "lucide-react";
|
|
1687
|
+
import "react";
|
|
1396
1688
|
import {
|
|
1397
1689
|
composeRenderProps,
|
|
1398
1690
|
Header as HeaderPrimitive,
|
|
@@ -1404,13 +1696,11 @@ import {
|
|
|
1404
1696
|
Separator as SeparatorPrimitive2,
|
|
1405
1697
|
SubmenuTrigger as SubmenuTriggerPrimitive
|
|
1406
1698
|
} from "react-aria-components";
|
|
1407
|
-
import { Fragment as
|
|
1408
|
-
function DropdownMenuTrigger({
|
|
1409
|
-
...props
|
|
1410
|
-
}) {
|
|
1411
|
-
return /* @__PURE__ */ jsx22(MenuTriggerPrimitive, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
1699
|
+
import { Fragment as Fragment5, jsx as jsx20, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1700
|
+
function DropdownMenuTrigger({ ...props }) {
|
|
1701
|
+
return /* @__PURE__ */ jsx20(MenuTriggerPrimitive, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
1412
1702
|
}
|
|
1413
|
-
function
|
|
1703
|
+
function DropdownMenuContent({
|
|
1414
1704
|
"data-slot": dataSlot = "dropdown-menu-content",
|
|
1415
1705
|
placement = "bottom start",
|
|
1416
1706
|
offset = 4,
|
|
@@ -1419,15 +1709,18 @@ function DropdownMenu({
|
|
|
1419
1709
|
children,
|
|
1420
1710
|
...props
|
|
1421
1711
|
}) {
|
|
1422
|
-
return /* @__PURE__ */
|
|
1712
|
+
return /* @__PURE__ */ jsx20(
|
|
1423
1713
|
PopoverPrimitive,
|
|
1424
1714
|
{
|
|
1425
1715
|
"data-slot": dataSlot,
|
|
1426
1716
|
placement,
|
|
1427
1717
|
offset,
|
|
1428
1718
|
crossOffset,
|
|
1429
|
-
className: cn(
|
|
1430
|
-
|
|
1719
|
+
className: cn(
|
|
1720
|
+
"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",
|
|
1721
|
+
className
|
|
1722
|
+
),
|
|
1723
|
+
children: /* @__PURE__ */ jsx20(
|
|
1431
1724
|
MenuPrimitive,
|
|
1432
1725
|
{
|
|
1433
1726
|
className: "max-h-[inherit] overflow-x-hidden overflow-y-auto outline-hidden",
|
|
@@ -1438,17 +1731,26 @@ function DropdownMenu({
|
|
|
1438
1731
|
}
|
|
1439
1732
|
);
|
|
1440
1733
|
}
|
|
1734
|
+
function DropdownMenu(props) {
|
|
1735
|
+
if (!("trigger" in props)) return /* @__PURE__ */ jsx20(DropdownMenuContent, { ...props });
|
|
1736
|
+
const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
|
|
1737
|
+
const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ jsx20(Button, { ...triggerProps, children: trigger }) : trigger;
|
|
1738
|
+
return /* @__PURE__ */ jsxs9(DropdownMenuTrigger, { defaultOpen, isOpen, onOpenChange, children: [
|
|
1739
|
+
triggerElement,
|
|
1740
|
+
/* @__PURE__ */ jsx20(DropdownMenuContent, { ...contentProps, children })
|
|
1741
|
+
] });
|
|
1742
|
+
}
|
|
1441
1743
|
function DropdownMenuGroup({
|
|
1442
1744
|
...props
|
|
1443
1745
|
}) {
|
|
1444
|
-
return /* @__PURE__ */
|
|
1746
|
+
return /* @__PURE__ */ jsx20(MenuSectionPrimitive, { "data-slot": "dropdown-menu-group", ...props });
|
|
1445
1747
|
}
|
|
1446
1748
|
function DropdownMenuLabel({
|
|
1447
1749
|
className,
|
|
1448
1750
|
inset,
|
|
1449
1751
|
...props
|
|
1450
1752
|
}) {
|
|
1451
|
-
return /* @__PURE__ */
|
|
1753
|
+
return /* @__PURE__ */ jsx20(
|
|
1452
1754
|
HeaderPrimitive,
|
|
1453
1755
|
{
|
|
1454
1756
|
"data-slot": "dropdown-menu-label",
|
|
@@ -1480,7 +1782,7 @@ function DropdownMenuItem({
|
|
|
1480
1782
|
children,
|
|
1481
1783
|
...props
|
|
1482
1784
|
}) {
|
|
1483
|
-
return /* @__PURE__ */
|
|
1785
|
+
return /* @__PURE__ */ jsx20(
|
|
1484
1786
|
MenuItemPrimitive,
|
|
1485
1787
|
{
|
|
1486
1788
|
"data-slot": "dropdown-menu-item",
|
|
@@ -1492,27 +1794,22 @@ function DropdownMenuItem({
|
|
|
1492
1794
|
(className2, { selectionMode }) => cn(dropdownMenuItemVariants({ selectionMode }), className2)
|
|
1493
1795
|
),
|
|
1494
1796
|
...props,
|
|
1495
|
-
children: composeRenderProps(
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
"
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
children2
|
|
1507
|
-
] })
|
|
1508
|
-
)
|
|
1797
|
+
children: composeRenderProps(children, (children2, { isSelected, selectionMode }) => /* @__PURE__ */ jsxs9(Fragment5, { children: [
|
|
1798
|
+
selectionMode !== "none" ? /* @__PURE__ */ jsx20(
|
|
1799
|
+
"span",
|
|
1800
|
+
{
|
|
1801
|
+
className: "pointer-events-none absolute right-2 flex items-center justify-center",
|
|
1802
|
+
"data-slot": selectionMode === "single" ? "dropdown-menu-radio-item-indicator" : "dropdown-menu-checkbox-item-indicator",
|
|
1803
|
+
children: isSelected ? /* @__PURE__ */ jsx20(CheckIcon, {}) : null
|
|
1804
|
+
}
|
|
1805
|
+
) : null,
|
|
1806
|
+
children2
|
|
1807
|
+
] }))
|
|
1509
1808
|
}
|
|
1510
1809
|
);
|
|
1511
1810
|
}
|
|
1512
|
-
function DropdownMenuSub({
|
|
1513
|
-
...props
|
|
1514
|
-
}) {
|
|
1515
|
-
return /* @__PURE__ */ jsx22(SubmenuTriggerPrimitive, { "data-slot": "dropdown-menu-sub", ...props });
|
|
1811
|
+
function DropdownMenuSub({ ...props }) {
|
|
1812
|
+
return /* @__PURE__ */ jsx20(SubmenuTriggerPrimitive, { "data-slot": "dropdown-menu-sub", ...props });
|
|
1516
1813
|
}
|
|
1517
1814
|
function DropdownMenuSubTrigger({
|
|
1518
1815
|
className,
|
|
@@ -1520,7 +1817,7 @@ function DropdownMenuSubTrigger({
|
|
|
1520
1817
|
children,
|
|
1521
1818
|
...props
|
|
1522
1819
|
}) {
|
|
1523
|
-
return /* @__PURE__ */
|
|
1820
|
+
return /* @__PURE__ */ jsx20(
|
|
1524
1821
|
MenuItemPrimitive,
|
|
1525
1822
|
{
|
|
1526
1823
|
"data-slot": "dropdown-menu-sub-trigger",
|
|
@@ -1531,9 +1828,9 @@ function DropdownMenuSubTrigger({
|
|
|
1531
1828
|
className
|
|
1532
1829
|
),
|
|
1533
1830
|
...props,
|
|
1534
|
-
children: composeRenderProps(children, (children2) => /* @__PURE__ */
|
|
1831
|
+
children: composeRenderProps(children, (children2) => /* @__PURE__ */ jsxs9(Fragment5, { children: [
|
|
1535
1832
|
children2,
|
|
1536
|
-
/* @__PURE__ */
|
|
1833
|
+
/* @__PURE__ */ jsx20(ChevronRightIcon, { className: "cn-rtl-flip ml-auto" })
|
|
1537
1834
|
] }))
|
|
1538
1835
|
}
|
|
1539
1836
|
);
|
|
@@ -1545,11 +1842,14 @@ function DropdownMenuSubContent({
|
|
|
1545
1842
|
className,
|
|
1546
1843
|
...props
|
|
1547
1844
|
}) {
|
|
1548
|
-
return /* @__PURE__ */
|
|
1549
|
-
|
|
1845
|
+
return /* @__PURE__ */ jsx20(
|
|
1846
|
+
DropdownMenuContent,
|
|
1550
1847
|
{
|
|
1551
1848
|
"data-slot": "dropdown-menu-sub-content",
|
|
1552
|
-
className: cn(
|
|
1849
|
+
className: cn(
|
|
1850
|
+
"w-auto min-w-24 rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-lg",
|
|
1851
|
+
className
|
|
1852
|
+
),
|
|
1553
1853
|
placement,
|
|
1554
1854
|
crossOffset,
|
|
1555
1855
|
offset,
|
|
@@ -1561,7 +1861,7 @@ function DropdownMenuSeparator({
|
|
|
1561
1861
|
className,
|
|
1562
1862
|
...props
|
|
1563
1863
|
}) {
|
|
1564
|
-
return /* @__PURE__ */
|
|
1864
|
+
return /* @__PURE__ */ jsx20(
|
|
1565
1865
|
SeparatorPrimitive2,
|
|
1566
1866
|
{
|
|
1567
1867
|
"data-slot": "dropdown-menu-separator",
|
|
@@ -1570,11 +1870,8 @@ function DropdownMenuSeparator({
|
|
|
1570
1870
|
}
|
|
1571
1871
|
);
|
|
1572
1872
|
}
|
|
1573
|
-
function DropdownMenuShortcut({
|
|
1574
|
-
|
|
1575
|
-
...props
|
|
1576
|
-
}) {
|
|
1577
|
-
return /* @__PURE__ */ jsx22(
|
|
1873
|
+
function DropdownMenuShortcut({ className, ...props }) {
|
|
1874
|
+
return /* @__PURE__ */ jsx20(
|
|
1578
1875
|
"span",
|
|
1579
1876
|
{
|
|
1580
1877
|
"data-slot": "dropdown-menu-shortcut",
|
|
@@ -1587,11 +1884,25 @@ function DropdownMenuShortcut({
|
|
|
1587
1884
|
);
|
|
1588
1885
|
}
|
|
1589
1886
|
|
|
1590
|
-
// src/ui/empty-state/empty-state.
|
|
1887
|
+
// src/ui/empty-state/empty-state-variants.ts
|
|
1591
1888
|
import { cva as cva7 } from "class-variance-authority";
|
|
1592
|
-
|
|
1889
|
+
var emptyStateMediaVariants = cva7(
|
|
1890
|
+
"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
1891
|
+
{
|
|
1892
|
+
variants: {
|
|
1893
|
+
variant: {
|
|
1894
|
+
default: "bg-transparent",
|
|
1895
|
+
icon: "size-8 rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
|
|
1896
|
+
}
|
|
1897
|
+
},
|
|
1898
|
+
defaultVariants: { variant: "default" }
|
|
1899
|
+
}
|
|
1900
|
+
);
|
|
1901
|
+
|
|
1902
|
+
// src/ui/empty-state/empty-state.tsx
|
|
1903
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
1593
1904
|
function EmptyState({ className, ...props }) {
|
|
1594
|
-
return /* @__PURE__ */
|
|
1905
|
+
return /* @__PURE__ */ jsx21(
|
|
1595
1906
|
"div",
|
|
1596
1907
|
{
|
|
1597
1908
|
"data-slot": "empty-state",
|
|
@@ -1604,7 +1915,7 @@ function EmptyState({ className, ...props }) {
|
|
|
1604
1915
|
);
|
|
1605
1916
|
}
|
|
1606
1917
|
function EmptyStateHeader({ className, ...props }) {
|
|
1607
|
-
return /* @__PURE__ */
|
|
1918
|
+
return /* @__PURE__ */ jsx21(
|
|
1608
1919
|
"div",
|
|
1609
1920
|
{
|
|
1610
1921
|
"data-slot": "empty-state-header",
|
|
@@ -1613,24 +1924,12 @@ function EmptyStateHeader({ className, ...props }) {
|
|
|
1613
1924
|
}
|
|
1614
1925
|
);
|
|
1615
1926
|
}
|
|
1616
|
-
var emptyStateMediaVariants = cva7(
|
|
1617
|
-
"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
1618
|
-
{
|
|
1619
|
-
variants: {
|
|
1620
|
-
variant: {
|
|
1621
|
-
default: "bg-transparent",
|
|
1622
|
-
icon: "size-8 rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
|
|
1623
|
-
}
|
|
1624
|
-
},
|
|
1625
|
-
defaultVariants: { variant: "default" }
|
|
1626
|
-
}
|
|
1627
|
-
);
|
|
1628
1927
|
function EmptyStateMedia({
|
|
1629
1928
|
className,
|
|
1630
1929
|
variant = "default",
|
|
1631
1930
|
...props
|
|
1632
1931
|
}) {
|
|
1633
|
-
return /* @__PURE__ */
|
|
1932
|
+
return /* @__PURE__ */ jsx21(
|
|
1634
1933
|
"div",
|
|
1635
1934
|
{
|
|
1636
1935
|
"data-slot": "empty-state-media",
|
|
@@ -1640,18 +1939,19 @@ function EmptyStateMedia({
|
|
|
1640
1939
|
}
|
|
1641
1940
|
);
|
|
1642
1941
|
}
|
|
1643
|
-
function EmptyStateTitle({ className, ...props }) {
|
|
1644
|
-
return /* @__PURE__ */
|
|
1942
|
+
function EmptyStateTitle({ className, children, ...props }) {
|
|
1943
|
+
return /* @__PURE__ */ jsx21(
|
|
1645
1944
|
"h3",
|
|
1646
1945
|
{
|
|
1647
1946
|
"data-slot": "empty-state-title",
|
|
1648
1947
|
className: cn("text-sm font-medium tracking-tight text-foreground", className),
|
|
1649
|
-
...props
|
|
1948
|
+
...props,
|
|
1949
|
+
children
|
|
1650
1950
|
}
|
|
1651
1951
|
);
|
|
1652
1952
|
}
|
|
1653
1953
|
function EmptyStateDescription({ className, ...props }) {
|
|
1654
|
-
return /* @__PURE__ */
|
|
1954
|
+
return /* @__PURE__ */ jsx21(
|
|
1655
1955
|
"p",
|
|
1656
1956
|
{
|
|
1657
1957
|
"data-slot": "empty-state-description",
|
|
@@ -1664,7 +1964,7 @@ function EmptyStateDescription({ className, ...props }) {
|
|
|
1664
1964
|
);
|
|
1665
1965
|
}
|
|
1666
1966
|
function EmptyStateContent({ className, ...props }) {
|
|
1667
|
-
return /* @__PURE__ */
|
|
1967
|
+
return /* @__PURE__ */ jsx21(
|
|
1668
1968
|
"div",
|
|
1669
1969
|
{
|
|
1670
1970
|
"data-slot": "empty-state-content",
|
|
@@ -1677,28 +1977,54 @@ function EmptyStateContent({ className, ...props }) {
|
|
|
1677
1977
|
);
|
|
1678
1978
|
}
|
|
1679
1979
|
|
|
1680
|
-
// src/ui/
|
|
1980
|
+
// src/ui/label/label.tsx
|
|
1981
|
+
import { forwardRef } from "react";
|
|
1982
|
+
import { Label as LabelPrimitive } from "react-aria-components";
|
|
1983
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
1984
|
+
var Label2 = forwardRef(
|
|
1985
|
+
function Label3({ className, ...props }, ref) {
|
|
1986
|
+
return /* @__PURE__ */ jsx22(
|
|
1987
|
+
LabelPrimitive,
|
|
1988
|
+
{
|
|
1989
|
+
ref,
|
|
1990
|
+
"data-slot": "label",
|
|
1991
|
+
className: cn(
|
|
1992
|
+
"flex items-center gap-2 text-sm font-medium leading-none select-none",
|
|
1993
|
+
className
|
|
1994
|
+
),
|
|
1995
|
+
...props
|
|
1996
|
+
}
|
|
1997
|
+
);
|
|
1998
|
+
}
|
|
1999
|
+
);
|
|
2000
|
+
|
|
2001
|
+
// src/ui/field/field-variants.ts
|
|
1681
2002
|
import { cva as cva8 } from "class-variance-authority";
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
2003
|
+
var fieldVariants = cva8(
|
|
2004
|
+
"group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
|
|
2005
|
+
{
|
|
2006
|
+
variants: {
|
|
2007
|
+
orientation: {
|
|
2008
|
+
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
2009
|
+
horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto",
|
|
2010
|
+
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"
|
|
2011
|
+
}
|
|
2012
|
+
},
|
|
2013
|
+
defaultVariants: { orientation: "vertical" }
|
|
2014
|
+
}
|
|
2015
|
+
);
|
|
1690
2016
|
|
|
1691
2017
|
// src/ui/field/field.tsx
|
|
1692
|
-
import { jsx as
|
|
2018
|
+
import { jsx as jsx23, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1693
2019
|
function FieldSet({ className, ...props }) {
|
|
1694
|
-
return /* @__PURE__ */
|
|
2020
|
+
return /* @__PURE__ */ jsx23("fieldset", { "data-slot": "field-set", className: cn("flex flex-col gap-4", className), ...props });
|
|
1695
2021
|
}
|
|
1696
2022
|
function FieldLegend({
|
|
1697
2023
|
className,
|
|
1698
2024
|
variant = "legend",
|
|
1699
2025
|
...props
|
|
1700
2026
|
}) {
|
|
1701
|
-
return /* @__PURE__ */
|
|
2027
|
+
return /* @__PURE__ */ jsx23(
|
|
1702
2028
|
"legend",
|
|
1703
2029
|
{
|
|
1704
2030
|
"data-slot": "field-legend",
|
|
@@ -1712,7 +2038,7 @@ function FieldLegend({
|
|
|
1712
2038
|
);
|
|
1713
2039
|
}
|
|
1714
2040
|
function FieldGroup({ className, ...props }) {
|
|
1715
|
-
return /* @__PURE__ */
|
|
2041
|
+
return /* @__PURE__ */ jsx23(
|
|
1716
2042
|
"div",
|
|
1717
2043
|
{
|
|
1718
2044
|
"data-slot": "field-group",
|
|
@@ -1724,23 +2050,10 @@ function FieldGroup({ className, ...props }) {
|
|
|
1724
2050
|
}
|
|
1725
2051
|
);
|
|
1726
2052
|
}
|
|
1727
|
-
var fieldVariants = cva8(
|
|
1728
|
-
"group/field flex w-full gap-2 data-[invalid=true]:text-destructive",
|
|
1729
|
-
{
|
|
1730
|
-
variants: {
|
|
1731
|
-
orientation: {
|
|
1732
|
-
vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
|
|
1733
|
-
horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto",
|
|
1734
|
-
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"
|
|
1735
|
-
}
|
|
1736
|
-
},
|
|
1737
|
-
defaultVariants: { orientation: "vertical" }
|
|
1738
|
-
}
|
|
1739
|
-
);
|
|
1740
2053
|
function Field({ className, orientation = "vertical", ...props }) {
|
|
1741
2054
|
return (
|
|
1742
2055
|
// biome-ignore lint/a11y/useSemanticElements: FieldSet provides native fieldset semantics when they are appropriate.
|
|
1743
|
-
/* @__PURE__ */
|
|
2056
|
+
/* @__PURE__ */ jsx23(
|
|
1744
2057
|
"div",
|
|
1745
2058
|
{
|
|
1746
2059
|
role: "group",
|
|
@@ -1753,7 +2066,7 @@ function Field({ className, orientation = "vertical", ...props }) {
|
|
|
1753
2066
|
);
|
|
1754
2067
|
}
|
|
1755
2068
|
function FieldContent({ className, ...props }) {
|
|
1756
|
-
return /* @__PURE__ */
|
|
2069
|
+
return /* @__PURE__ */ jsx23(
|
|
1757
2070
|
"div",
|
|
1758
2071
|
{
|
|
1759
2072
|
"data-slot": "field-content",
|
|
@@ -1763,7 +2076,7 @@ function FieldContent({ className, ...props }) {
|
|
|
1763
2076
|
);
|
|
1764
2077
|
}
|
|
1765
2078
|
function FieldLabel({ className, ...props }) {
|
|
1766
|
-
return /* @__PURE__ */
|
|
2079
|
+
return /* @__PURE__ */ jsx23(
|
|
1767
2080
|
Label2,
|
|
1768
2081
|
{
|
|
1769
2082
|
"data-slot": "field-label",
|
|
@@ -1776,7 +2089,7 @@ function FieldLabel({ className, ...props }) {
|
|
|
1776
2089
|
);
|
|
1777
2090
|
}
|
|
1778
2091
|
function FieldTitle({ className, ...props }) {
|
|
1779
|
-
return /* @__PURE__ */
|
|
2092
|
+
return /* @__PURE__ */ jsx23(
|
|
1780
2093
|
"div",
|
|
1781
2094
|
{
|
|
1782
2095
|
"data-slot": "field-title",
|
|
@@ -1786,7 +2099,7 @@ function FieldTitle({ className, ...props }) {
|
|
|
1786
2099
|
);
|
|
1787
2100
|
}
|
|
1788
2101
|
function FieldDescription({ className, ...props }) {
|
|
1789
|
-
return /* @__PURE__ */
|
|
2102
|
+
return /* @__PURE__ */ jsx23(
|
|
1790
2103
|
"p",
|
|
1791
2104
|
{
|
|
1792
2105
|
"data-slot": "field-description",
|
|
@@ -1799,7 +2112,7 @@ function FieldDescription({ className, ...props }) {
|
|
|
1799
2112
|
);
|
|
1800
2113
|
}
|
|
1801
2114
|
function FieldSeparator({ className, children, ...props }) {
|
|
1802
|
-
return /* @__PURE__ */
|
|
2115
|
+
return /* @__PURE__ */ jsxs10(
|
|
1803
2116
|
"div",
|
|
1804
2117
|
{
|
|
1805
2118
|
"data-slot": "field-separator",
|
|
@@ -1807,12 +2120,12 @@ function FieldSeparator({ className, children, ...props }) {
|
|
|
1807
2120
|
className: cn("relative -my-2 h-5 text-sm", className),
|
|
1808
2121
|
...props,
|
|
1809
2122
|
children: [
|
|
1810
|
-
/* @__PURE__ */
|
|
1811
|
-
children ? /* @__PURE__ */
|
|
2123
|
+
/* @__PURE__ */ jsx23(Separator, { className: "absolute inset-0 top-1/2" }),
|
|
2124
|
+
children ? /* @__PURE__ */ jsx23(
|
|
1812
2125
|
"span",
|
|
1813
2126
|
{
|
|
1814
2127
|
"data-slot": "field-separator-content",
|
|
1815
|
-
className: "relative mx-auto block w-fit
|
|
2128
|
+
className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
|
|
1816
2129
|
children
|
|
1817
2130
|
}
|
|
1818
2131
|
) : null
|
|
@@ -1822,9 +2135,9 @@ function FieldSeparator({ className, children, ...props }) {
|
|
|
1822
2135
|
}
|
|
1823
2136
|
function FieldError2({ className, children, errors, ...props }) {
|
|
1824
2137
|
const messages = [...new Set(errors?.flatMap((error) => error?.message ?? []) ?? [])];
|
|
1825
|
-
const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */
|
|
2138
|
+
const content = children ?? (messages.length === 1 ? messages[0] : messages.length > 1 ? /* @__PURE__ */ jsx23("ul", { className: "ml-4 list-disc", children: messages.map((message) => /* @__PURE__ */ jsx23("li", { children: message }, message)) }) : null);
|
|
1826
2139
|
if (!content) return null;
|
|
1827
|
-
return /* @__PURE__ */
|
|
2140
|
+
return /* @__PURE__ */ jsx23(
|
|
1828
2141
|
"div",
|
|
1829
2142
|
{
|
|
1830
2143
|
role: "alert",
|
|
@@ -1837,9 +2150,42 @@ function FieldError2({ className, children, errors, ...props }) {
|
|
|
1837
2150
|
}
|
|
1838
2151
|
|
|
1839
2152
|
// src/ui/form-feedback/form-feedback.tsx
|
|
2153
|
+
import { CheckCircle, CircleAlert, LoaderCircle } from "lucide-react";
|
|
2154
|
+
import { jsx as jsx24, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
2155
|
+
function FormFeedback({
|
|
2156
|
+
state,
|
|
2157
|
+
className,
|
|
2158
|
+
pendingLabel = "Guardando\u2026",
|
|
2159
|
+
successLabel = "Guardado"
|
|
2160
|
+
}) {
|
|
2161
|
+
if (state.status === "idle")
|
|
2162
|
+
return /* @__PURE__ */ jsx24("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
|
|
2163
|
+
const error = state.status === "error";
|
|
2164
|
+
const success = state.status === "success";
|
|
2165
|
+
return /* @__PURE__ */ jsxs11(
|
|
2166
|
+
"span",
|
|
2167
|
+
{
|
|
2168
|
+
role: error ? "alert" : "status",
|
|
2169
|
+
"aria-live": "polite",
|
|
2170
|
+
className: cn(
|
|
2171
|
+
"inline-flex h-5 items-center gap-1.5 text-xs",
|
|
2172
|
+
error && "text-destructive",
|
|
2173
|
+
success && "text-success",
|
|
2174
|
+
state.status === "pending" && "text-muted-foreground",
|
|
2175
|
+
className
|
|
2176
|
+
),
|
|
2177
|
+
children: [
|
|
2178
|
+
state.status === "pending" && /* @__PURE__ */ jsx24(LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
|
|
2179
|
+
success && /* @__PURE__ */ jsx24(CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
|
|
2180
|
+
error && /* @__PURE__ */ jsx24(CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
|
|
2181
|
+
/* @__PURE__ */ jsx24("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
|
|
2182
|
+
]
|
|
2183
|
+
}
|
|
2184
|
+
);
|
|
2185
|
+
}
|
|
2186
|
+
|
|
2187
|
+
// src/ui/form-feedback/use-form-feedback.ts
|
|
1840
2188
|
import { useCallback as useCallback5, useEffect as useEffect4, useRef as useRef3, useState as useState9 } from "react";
|
|
1841
|
-
import { CheckCircle, LoaderCircle, CircleAlert } from "lucide-react";
|
|
1842
|
-
import { jsx as jsx26, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1843
2189
|
function useFormFeedback(options) {
|
|
1844
2190
|
const resetMs = options?.successResetMs ?? 2500;
|
|
1845
2191
|
const [state, setState] = useState9({ status: "idle" });
|
|
@@ -1853,49 +2199,52 @@ function useFormFeedback(options) {
|
|
|
1853
2199
|
clearTimer();
|
|
1854
2200
|
setState({ status: "pending" });
|
|
1855
2201
|
}, [clearTimer]);
|
|
1856
|
-
const setSuccess = useCallback5(
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
clearTimer
|
|
1863
|
-
|
|
1864
|
-
|
|
2202
|
+
const setSuccess = useCallback5(
|
|
2203
|
+
(message) => {
|
|
2204
|
+
clearTimer();
|
|
2205
|
+
setState({ status: "success", message });
|
|
2206
|
+
if (resetMs > 0) timer.current = setTimeout(() => setState({ status: "idle" }), resetMs);
|
|
2207
|
+
},
|
|
2208
|
+
[clearTimer, resetMs]
|
|
2209
|
+
);
|
|
2210
|
+
const setError = useCallback5(
|
|
2211
|
+
(message) => {
|
|
2212
|
+
clearTimer();
|
|
2213
|
+
setState({ status: "error", message });
|
|
2214
|
+
},
|
|
2215
|
+
[clearTimer]
|
|
2216
|
+
);
|
|
1865
2217
|
const reset = useCallback5(() => {
|
|
1866
2218
|
clearTimer();
|
|
1867
2219
|
setState({ status: "idle" });
|
|
1868
2220
|
}, [clearTimer]);
|
|
1869
2221
|
return { state, pending: state.status === "pending", setPending, setSuccess, setError, reset };
|
|
1870
2222
|
}
|
|
1871
|
-
function FormFeedback({ state, className, pendingLabel = "Guardando\u2026", successLabel = "Guardado" }) {
|
|
1872
|
-
if (state.status === "idle") return /* @__PURE__ */ jsx26("span", { "aria-hidden": "true", className: cn("inline-flex h-5 items-center", className) });
|
|
1873
|
-
const error = state.status === "error";
|
|
1874
|
-
const success = state.status === "success";
|
|
1875
|
-
return /* @__PURE__ */ jsxs12("span", { role: error ? "alert" : "status", "aria-live": "polite", className: cn("inline-flex h-5 items-center gap-1.5 text-xs", error && "text-destructive", success && "text-success", state.status === "pending" && "text-muted-foreground", className), children: [
|
|
1876
|
-
state.status === "pending" && /* @__PURE__ */ jsx26(LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
|
|
1877
|
-
success && /* @__PURE__ */ jsx26(CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
|
|
1878
|
-
error && /* @__PURE__ */ jsx26(CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
|
|
1879
|
-
/* @__PURE__ */ jsx26("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
|
|
1880
|
-
] });
|
|
1881
|
-
}
|
|
1882
2223
|
|
|
1883
2224
|
// src/ui/form-row/form-row.tsx
|
|
1884
|
-
import { Fragment as
|
|
1885
|
-
function FormRow({
|
|
2225
|
+
import { Fragment as Fragment6, jsx as jsx25, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
2226
|
+
function FormRow({
|
|
2227
|
+
label,
|
|
2228
|
+
htmlFor,
|
|
2229
|
+
required,
|
|
2230
|
+
hint,
|
|
2231
|
+
error,
|
|
2232
|
+
className,
|
|
2233
|
+
children
|
|
2234
|
+
}) {
|
|
1886
2235
|
const hintId = hint ? `${htmlFor}-hint` : void 0;
|
|
1887
2236
|
const errorId = error ? `${htmlFor}-error` : void 0;
|
|
1888
|
-
return /* @__PURE__ */
|
|
1889
|
-
/* @__PURE__ */
|
|
2237
|
+
return /* @__PURE__ */ jsxs12("div", { "data-slot": "form-row", className: cn("flex flex-col gap-1.5", className), children: [
|
|
2238
|
+
/* @__PURE__ */ jsxs12("label", { htmlFor, className: "text-foreground text-sm font-medium", children: [
|
|
1890
2239
|
label,
|
|
1891
|
-
required && /* @__PURE__ */
|
|
1892
|
-
/* @__PURE__ */
|
|
1893
|
-
/* @__PURE__ */
|
|
2240
|
+
required && /* @__PURE__ */ jsxs12(Fragment6, { children: [
|
|
2241
|
+
/* @__PURE__ */ jsx25("span", { "aria-hidden": "true", className: "text-destructive ml-0.5", children: "*" }),
|
|
2242
|
+
/* @__PURE__ */ jsx25("span", { className: "sr-only", children: " (obligatorio)" })
|
|
1894
2243
|
] })
|
|
1895
2244
|
] }),
|
|
1896
2245
|
children,
|
|
1897
|
-
hint && /* @__PURE__ */
|
|
1898
|
-
error && /* @__PURE__ */
|
|
2246
|
+
hint && /* @__PURE__ */ jsx25("p", { id: hintId, className: "text-muted-foreground text-xs", children: hint }),
|
|
2247
|
+
error && /* @__PURE__ */ jsx25("p", { id: errorId, role: "alert", className: "text-destructive text-xs font-medium", children: error })
|
|
1899
2248
|
] });
|
|
1900
2249
|
}
|
|
1901
2250
|
|
|
@@ -1903,34 +2252,25 @@ function FormRow({ label, htmlFor, required, hint, error, className, children })
|
|
|
1903
2252
|
import { Link as Link2 } from "react-aria-components";
|
|
1904
2253
|
|
|
1905
2254
|
// src/ui/tooltip/tooltip.tsx
|
|
1906
|
-
import * as React6 from "react";
|
|
1907
2255
|
import {
|
|
1908
|
-
Focusable,
|
|
1909
2256
|
OverlayArrow,
|
|
1910
2257
|
Tooltip as TooltipPrimitive,
|
|
1911
2258
|
TooltipTrigger as TooltipTriggerPrimitive
|
|
1912
2259
|
} from "react-aria-components";
|
|
1913
|
-
import { jsx as
|
|
2260
|
+
import { jsx as jsx26, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1914
2261
|
function TooltipTrigger({
|
|
1915
2262
|
delay = 0,
|
|
1916
|
-
children,
|
|
1917
2263
|
...props
|
|
1918
2264
|
}) {
|
|
1919
|
-
|
|
1920
|
-
return /* @__PURE__ */ jsxs14(
|
|
1921
|
-
TooltipTriggerPrimitive,
|
|
1922
|
-
{
|
|
1923
|
-
"data-slot": "tooltip-trigger",
|
|
1924
|
-
delay,
|
|
1925
|
-
...props,
|
|
1926
|
-
children: [
|
|
1927
|
-
/* @__PURE__ */ jsx28(Focusable, { children: trigger }),
|
|
1928
|
-
tooltip
|
|
1929
|
-
]
|
|
1930
|
-
}
|
|
1931
|
-
);
|
|
2265
|
+
return /* @__PURE__ */ jsx26(TooltipTriggerPrimitive, { "data-slot": "tooltip-trigger", delay, ...props });
|
|
1932
2266
|
}
|
|
1933
|
-
function Tooltip({
|
|
2267
|
+
function Tooltip({ label, children, delay, ...props }) {
|
|
2268
|
+
return /* @__PURE__ */ jsxs13(TooltipTrigger, { delay, children: [
|
|
2269
|
+
children,
|
|
2270
|
+
/* @__PURE__ */ jsx26(TooltipContent, { ...props, children: label })
|
|
2271
|
+
] });
|
|
2272
|
+
}
|
|
2273
|
+
function TooltipContent({
|
|
1934
2274
|
className,
|
|
1935
2275
|
placement = "top",
|
|
1936
2276
|
offset = 4,
|
|
@@ -1938,7 +2278,7 @@ function Tooltip({
|
|
|
1938
2278
|
children,
|
|
1939
2279
|
...props
|
|
1940
2280
|
}) {
|
|
1941
|
-
return /* @__PURE__ */
|
|
2281
|
+
return /* @__PURE__ */ jsxs13(
|
|
1942
2282
|
TooltipPrimitive,
|
|
1943
2283
|
{
|
|
1944
2284
|
"data-slot": "tooltip-content",
|
|
@@ -1952,10 +2292,10 @@ function Tooltip({
|
|
|
1952
2292
|
...props,
|
|
1953
2293
|
children: [
|
|
1954
2294
|
children,
|
|
1955
|
-
/* @__PURE__ */
|
|
2295
|
+
/* @__PURE__ */ jsx26(
|
|
1956
2296
|
OverlayArrow,
|
|
1957
2297
|
{
|
|
1958
|
-
className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs
|
|
2298
|
+
className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-xs",
|
|
1959
2299
|
style: ({ placement: placement2, defaultStyle }) => ({
|
|
1960
2300
|
...defaultStyle,
|
|
1961
2301
|
rotate: "0deg",
|
|
@@ -1970,7 +2310,7 @@ function Tooltip({
|
|
|
1970
2310
|
}
|
|
1971
2311
|
|
|
1972
2312
|
// src/ui/icon-button/icon-button.tsx
|
|
1973
|
-
import { jsx as
|
|
2313
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
1974
2314
|
function IconButton({
|
|
1975
2315
|
label,
|
|
1976
2316
|
children,
|
|
@@ -1979,63 +2319,90 @@ function IconButton({
|
|
|
1979
2319
|
variant,
|
|
1980
2320
|
...props
|
|
1981
2321
|
}) {
|
|
1982
|
-
const linkClassName = cn(
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
}
|
|
1996
|
-
) : /* @__PURE__ */ jsx29(
|
|
1997
|
-
Button,
|
|
1998
|
-
{
|
|
1999
|
-
"data-slot": "icon-button",
|
|
2000
|
-
"aria-label": label,
|
|
2001
|
-
variant,
|
|
2002
|
-
size: "icon",
|
|
2003
|
-
className,
|
|
2004
|
-
...props,
|
|
2005
|
-
children
|
|
2006
|
-
}
|
|
2007
|
-
),
|
|
2008
|
-
/* @__PURE__ */ jsx29(Tooltip, { children: label })
|
|
2009
|
-
] });
|
|
2322
|
+
const linkClassName = cn(buttonVariants({ variant, size: "icon" }), className);
|
|
2323
|
+
return /* @__PURE__ */ jsx27(Tooltip, { label, children: href ? /* @__PURE__ */ jsx27(Link2, { "data-slot": "icon-button", "aria-label": label, href, className: linkClassName, children }) : /* @__PURE__ */ jsx27(
|
|
2324
|
+
Button,
|
|
2325
|
+
{
|
|
2326
|
+
"data-slot": "icon-button",
|
|
2327
|
+
"aria-label": label,
|
|
2328
|
+
variant,
|
|
2329
|
+
size: "icon",
|
|
2330
|
+
className,
|
|
2331
|
+
...props,
|
|
2332
|
+
children
|
|
2333
|
+
}
|
|
2334
|
+
) });
|
|
2010
2335
|
}
|
|
2011
2336
|
|
|
2012
2337
|
// src/ui/input-group/input-group.tsx
|
|
2013
|
-
import { cva as
|
|
2338
|
+
import { cva as cva10 } from "class-variance-authority";
|
|
2014
2339
|
|
|
2015
2340
|
// src/ui/input/input.tsx
|
|
2016
2341
|
import { forwardRef as forwardRef2 } from "react";
|
|
2017
2342
|
import { Input as AriaInput2 } from "react-aria-components";
|
|
2018
|
-
import { jsx as
|
|
2343
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
2019
2344
|
var InputImpl = forwardRef2(function Input2({ className, type, ...props }, ref) {
|
|
2020
|
-
return /* @__PURE__ */
|
|
2345
|
+
return /* @__PURE__ */ jsx28(
|
|
2346
|
+
AriaInput2,
|
|
2347
|
+
{
|
|
2348
|
+
ref,
|
|
2349
|
+
type,
|
|
2350
|
+
"data-slot": "input",
|
|
2351
|
+
className: cn(
|
|
2352
|
+
"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",
|
|
2353
|
+
className
|
|
2354
|
+
),
|
|
2355
|
+
...props
|
|
2356
|
+
}
|
|
2357
|
+
);
|
|
2021
2358
|
});
|
|
2022
2359
|
var Input3 = InputImpl;
|
|
2023
2360
|
|
|
2024
2361
|
// src/ui/textarea/textarea.tsx
|
|
2025
2362
|
import { forwardRef as forwardRef3 } from "react";
|
|
2026
|
-
import {
|
|
2027
|
-
|
|
2363
|
+
import {
|
|
2364
|
+
TextArea as AriaTextArea
|
|
2365
|
+
} from "react-aria-components";
|
|
2366
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
2028
2367
|
var TextareaImpl = forwardRef3(function Textarea({ className, ...props }, ref) {
|
|
2029
|
-
return /* @__PURE__ */
|
|
2368
|
+
return /* @__PURE__ */ jsx29(
|
|
2369
|
+
AriaTextArea,
|
|
2370
|
+
{
|
|
2371
|
+
ref,
|
|
2372
|
+
"data-slot": "textarea",
|
|
2373
|
+
className: cn(
|
|
2374
|
+
"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",
|
|
2375
|
+
className
|
|
2376
|
+
),
|
|
2377
|
+
...props
|
|
2378
|
+
}
|
|
2379
|
+
);
|
|
2030
2380
|
});
|
|
2031
2381
|
var Textarea2 = TextareaImpl;
|
|
2032
2382
|
|
|
2383
|
+
// src/ui/input-group/input-group-addon-variants.ts
|
|
2384
|
+
import { cva as cva9 } from "class-variance-authority";
|
|
2385
|
+
var inputGroupAddonVariants = cva9(
|
|
2386
|
+
"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",
|
|
2387
|
+
{
|
|
2388
|
+
variants: {
|
|
2389
|
+
align: {
|
|
2390
|
+
"inline-start": "order-first pl-2",
|
|
2391
|
+
"inline-end": "order-last pr-2",
|
|
2392
|
+
"block-start": "order-first w-full justify-start px-2.5 pt-2",
|
|
2393
|
+
"block-end": "order-last w-full justify-start px-2.5 pb-2"
|
|
2394
|
+
}
|
|
2395
|
+
},
|
|
2396
|
+
defaultVariants: { align: "inline-start" }
|
|
2397
|
+
}
|
|
2398
|
+
);
|
|
2399
|
+
|
|
2033
2400
|
// src/ui/input-group/input-group.tsx
|
|
2034
|
-
import { jsx as
|
|
2401
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
2035
2402
|
function InputGroup({ className, ...props }) {
|
|
2036
2403
|
return (
|
|
2037
2404
|
// biome-ignore lint/a11y/useSemanticElements: fieldset cannot preserve this inline control composition.
|
|
2038
|
-
/* @__PURE__ */
|
|
2405
|
+
/* @__PURE__ */ jsx30(
|
|
2039
2406
|
"div",
|
|
2040
2407
|
{
|
|
2041
2408
|
role: "group",
|
|
@@ -2049,20 +2416,6 @@ function InputGroup({ className, ...props }) {
|
|
|
2049
2416
|
)
|
|
2050
2417
|
);
|
|
2051
2418
|
}
|
|
2052
|
-
var inputGroupAddonVariants = cva9(
|
|
2053
|
-
"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",
|
|
2054
|
-
{
|
|
2055
|
-
variants: {
|
|
2056
|
-
align: {
|
|
2057
|
-
"inline-start": "order-first pl-2",
|
|
2058
|
-
"inline-end": "order-last pr-2",
|
|
2059
|
-
"block-start": "order-first w-full justify-start px-2.5 pt-2",
|
|
2060
|
-
"block-end": "order-last w-full justify-start px-2.5 pb-2"
|
|
2061
|
-
}
|
|
2062
|
-
},
|
|
2063
|
-
defaultVariants: { align: "inline-start" }
|
|
2064
|
-
}
|
|
2065
|
-
);
|
|
2066
2419
|
function InputGroupAddon({
|
|
2067
2420
|
className,
|
|
2068
2421
|
align = "inline-start",
|
|
@@ -2071,7 +2424,7 @@ function InputGroupAddon({
|
|
|
2071
2424
|
}) {
|
|
2072
2425
|
return (
|
|
2073
2426
|
// biome-ignore lint/a11y/useSemanticElements: this addon delegates focus to its associated input.
|
|
2074
|
-
/* @__PURE__ */
|
|
2427
|
+
/* @__PURE__ */ jsx30(
|
|
2075
2428
|
"div",
|
|
2076
2429
|
{
|
|
2077
2430
|
role: "group",
|
|
@@ -2088,7 +2441,7 @@ function InputGroupAddon({
|
|
|
2088
2441
|
)
|
|
2089
2442
|
);
|
|
2090
2443
|
}
|
|
2091
|
-
var inputGroupButtonVariants =
|
|
2444
|
+
var inputGroupButtonVariants = cva10("shrink-0 shadow-none", {
|
|
2092
2445
|
variants: {
|
|
2093
2446
|
size: { xs: "h-6 px-1.5 text-xs", sm: "h-7 px-2", "icon-xs": "size-6", "icon-sm": "size-7" }
|
|
2094
2447
|
},
|
|
@@ -2102,7 +2455,7 @@ function InputGroupButton({
|
|
|
2102
2455
|
...props
|
|
2103
2456
|
}) {
|
|
2104
2457
|
const buttonSize = size === "icon-xs" || size === "icon-sm" ? size : size;
|
|
2105
|
-
return /* @__PURE__ */
|
|
2458
|
+
return /* @__PURE__ */ jsx30(
|
|
2106
2459
|
Button,
|
|
2107
2460
|
{
|
|
2108
2461
|
"data-slot": "input-group-button",
|
|
@@ -2115,7 +2468,7 @@ function InputGroupButton({
|
|
|
2115
2468
|
);
|
|
2116
2469
|
}
|
|
2117
2470
|
function InputGroupText({ className, ...props }) {
|
|
2118
|
-
return /* @__PURE__ */
|
|
2471
|
+
return /* @__PURE__ */ jsx30(
|
|
2119
2472
|
"span",
|
|
2120
2473
|
{
|
|
2121
2474
|
"data-slot": "input-group-text",
|
|
@@ -2128,7 +2481,7 @@ function InputGroupText({ className, ...props }) {
|
|
|
2128
2481
|
);
|
|
2129
2482
|
}
|
|
2130
2483
|
function InputGroupInput({ className, ...props }) {
|
|
2131
|
-
return /* @__PURE__ */
|
|
2484
|
+
return /* @__PURE__ */ jsx30(
|
|
2132
2485
|
Input3,
|
|
2133
2486
|
{
|
|
2134
2487
|
"data-slot": "input-group-control",
|
|
@@ -2141,7 +2494,7 @@ function InputGroupInput({ className, ...props }) {
|
|
|
2141
2494
|
);
|
|
2142
2495
|
}
|
|
2143
2496
|
function InputGroupTextarea({ className, ...props }) {
|
|
2144
|
-
return /* @__PURE__ */
|
|
2497
|
+
return /* @__PURE__ */ jsx30(
|
|
2145
2498
|
Textarea2,
|
|
2146
2499
|
{
|
|
2147
2500
|
"data-slot": "input-group-control",
|
|
@@ -2154,23 +2507,146 @@ function InputGroupTextarea({ className, ...props }) {
|
|
|
2154
2507
|
);
|
|
2155
2508
|
}
|
|
2156
2509
|
|
|
2510
|
+
// src/ui/kanban/kanban.tsx
|
|
2511
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
2512
|
+
var columnSize = {
|
|
2513
|
+
compact: "w-56",
|
|
2514
|
+
default: "w-72",
|
|
2515
|
+
wide: "w-80"
|
|
2516
|
+
};
|
|
2517
|
+
function KanbanViewport({
|
|
2518
|
+
children,
|
|
2519
|
+
className,
|
|
2520
|
+
contentClassName,
|
|
2521
|
+
...props
|
|
2522
|
+
}) {
|
|
2523
|
+
return /* @__PURE__ */ jsx31(
|
|
2524
|
+
"div",
|
|
2525
|
+
{
|
|
2526
|
+
"data-slot": "kanban-viewport",
|
|
2527
|
+
className: cn("-mx-1 overflow-x-auto pb-3", className),
|
|
2528
|
+
...props,
|
|
2529
|
+
children: /* @__PURE__ */ jsx31(
|
|
2530
|
+
"div",
|
|
2531
|
+
{
|
|
2532
|
+
"data-slot": "kanban-viewport-content",
|
|
2533
|
+
className: cn("flex min-w-max items-start gap-3 px-1", contentClassName),
|
|
2534
|
+
children
|
|
2535
|
+
}
|
|
2536
|
+
)
|
|
2537
|
+
}
|
|
2538
|
+
);
|
|
2539
|
+
}
|
|
2540
|
+
function KanbanColumn({
|
|
2541
|
+
className,
|
|
2542
|
+
size = "default",
|
|
2543
|
+
...props
|
|
2544
|
+
}) {
|
|
2545
|
+
return /* @__PURE__ */ jsx31(
|
|
2546
|
+
"section",
|
|
2547
|
+
{
|
|
2548
|
+
"data-slot": "kanban-column",
|
|
2549
|
+
"data-size": size,
|
|
2550
|
+
className: cn("shrink-0 rounded-lg border border-border/70 p-2", columnSize[size], className),
|
|
2551
|
+
...props
|
|
2552
|
+
}
|
|
2553
|
+
);
|
|
2554
|
+
}
|
|
2555
|
+
function KanbanColumnHeader({ className, ...props }) {
|
|
2556
|
+
return /* @__PURE__ */ jsx31(
|
|
2557
|
+
"header",
|
|
2558
|
+
{
|
|
2559
|
+
"data-slot": "kanban-column-header",
|
|
2560
|
+
className: cn("mb-2 flex items-center justify-between gap-2 px-1 py-1", className),
|
|
2561
|
+
...props
|
|
2562
|
+
}
|
|
2563
|
+
);
|
|
2564
|
+
}
|
|
2565
|
+
function KanbanColumnTitle({ className, ...props }) {
|
|
2566
|
+
return /* @__PURE__ */ jsx31(
|
|
2567
|
+
"span",
|
|
2568
|
+
{
|
|
2569
|
+
"data-slot": "kanban-column-title",
|
|
2570
|
+
className: cn(
|
|
2571
|
+
"text-foreground truncate text-[11px] font-semibold tracking-wide uppercase",
|
|
2572
|
+
className
|
|
2573
|
+
),
|
|
2574
|
+
...props
|
|
2575
|
+
}
|
|
2576
|
+
);
|
|
2577
|
+
}
|
|
2578
|
+
function KanbanColumnBody({ className, ...props }) {
|
|
2579
|
+
return /* @__PURE__ */ jsx31("div", { "data-slot": "kanban-column-body", className: cn("space-y-2", className), ...props });
|
|
2580
|
+
}
|
|
2581
|
+
function KanbanEmpty({
|
|
2582
|
+
className,
|
|
2583
|
+
compact = false,
|
|
2584
|
+
...props
|
|
2585
|
+
}) {
|
|
2586
|
+
return /* @__PURE__ */ jsx31(
|
|
2587
|
+
"p",
|
|
2588
|
+
{
|
|
2589
|
+
"data-slot": "kanban-empty",
|
|
2590
|
+
"data-compact": compact || void 0,
|
|
2591
|
+
className: cn(
|
|
2592
|
+
"border-border text-muted-foreground rounded-md border border-dashed py-6 text-center",
|
|
2593
|
+
compact ? "px-2 text-[11px]" : "px-3 text-xs",
|
|
2594
|
+
className
|
|
2595
|
+
),
|
|
2596
|
+
...props
|
|
2597
|
+
}
|
|
2598
|
+
);
|
|
2599
|
+
}
|
|
2600
|
+
|
|
2157
2601
|
// src/ui/kbd/kbd.tsx
|
|
2158
|
-
import { jsx as
|
|
2602
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
2159
2603
|
function Kbd({ className, ...props }) {
|
|
2160
|
-
return /* @__PURE__ */
|
|
2604
|
+
return /* @__PURE__ */ jsx32(
|
|
2605
|
+
"kbd",
|
|
2606
|
+
{
|
|
2607
|
+
"data-slot": "kbd",
|
|
2608
|
+
className: cn(
|
|
2609
|
+
"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",
|
|
2610
|
+
className
|
|
2611
|
+
),
|
|
2612
|
+
...props
|
|
2613
|
+
}
|
|
2614
|
+
);
|
|
2161
2615
|
}
|
|
2162
2616
|
function KbdGroup({ className, ...props }) {
|
|
2163
|
-
return /* @__PURE__ */
|
|
2617
|
+
return /* @__PURE__ */ jsx32(
|
|
2618
|
+
"span",
|
|
2619
|
+
{
|
|
2620
|
+
"data-slot": "kbd-group",
|
|
2621
|
+
className: cn("inline-flex items-center gap-1", className),
|
|
2622
|
+
...props
|
|
2623
|
+
}
|
|
2624
|
+
);
|
|
2164
2625
|
}
|
|
2165
2626
|
|
|
2166
2627
|
// src/ui/loading-overlay/loading-overlay.tsx
|
|
2167
2628
|
import { LoaderCircle as LoaderCircle2 } from "lucide-react";
|
|
2168
|
-
import { jsx as
|
|
2169
|
-
function LoadingOverlay({
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2629
|
+
import { jsx as jsx33, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2630
|
+
function LoadingOverlay({
|
|
2631
|
+
label = "Cargando",
|
|
2632
|
+
className,
|
|
2633
|
+
...props
|
|
2634
|
+
}) {
|
|
2635
|
+
return /* @__PURE__ */ jsx33(
|
|
2636
|
+
"output",
|
|
2637
|
+
{
|
|
2638
|
+
"aria-live": "polite",
|
|
2639
|
+
className: cn(
|
|
2640
|
+
"absolute inset-0 z-10 flex items-center justify-center bg-background/70 backdrop-blur-[2px]",
|
|
2641
|
+
className
|
|
2642
|
+
),
|
|
2643
|
+
...props,
|
|
2644
|
+
children: /* @__PURE__ */ jsxs14("div", { className: "border-border bg-background flex items-center gap-2 rounded-lg border px-3 py-2 text-sm shadow-sm", children: [
|
|
2645
|
+
/* @__PURE__ */ jsx33(LoaderCircle2, { className: "animate-spin", "aria-hidden": "true" }),
|
|
2646
|
+
/* @__PURE__ */ jsx33("span", { children: label })
|
|
2647
|
+
] })
|
|
2648
|
+
}
|
|
2649
|
+
);
|
|
2174
2650
|
}
|
|
2175
2651
|
|
|
2176
2652
|
// src/ui/menu/menu.tsx
|
|
@@ -2180,20 +2656,41 @@ import {
|
|
|
2180
2656
|
MenuTrigger as AriaMenuTrigger,
|
|
2181
2657
|
Popover as Popover3
|
|
2182
2658
|
} from "react-aria-components";
|
|
2183
|
-
import { jsx as
|
|
2659
|
+
import { jsx as jsx34 } from "react/jsx-runtime";
|
|
2184
2660
|
var MenuTrigger = AriaMenuTrigger;
|
|
2185
2661
|
function MenuContent({ className, ...props }) {
|
|
2186
|
-
return /* @__PURE__ */
|
|
2662
|
+
return /* @__PURE__ */ jsx34(
|
|
2663
|
+
Popover3,
|
|
2664
|
+
{
|
|
2665
|
+
"data-slot": "menu-content",
|
|
2666
|
+
className: cn(
|
|
2667
|
+
"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",
|
|
2668
|
+
className
|
|
2669
|
+
),
|
|
2670
|
+
...props
|
|
2671
|
+
}
|
|
2672
|
+
);
|
|
2187
2673
|
}
|
|
2188
2674
|
function Menu({ className, ...props }) {
|
|
2189
|
-
return /* @__PURE__ */
|
|
2675
|
+
return /* @__PURE__ */ jsx34(AriaMenu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
|
|
2190
2676
|
}
|
|
2191
2677
|
function MenuItem({ className, children, ...props }) {
|
|
2192
|
-
return /* @__PURE__ */
|
|
2678
|
+
return /* @__PURE__ */ jsx34(
|
|
2679
|
+
AriaMenuItem,
|
|
2680
|
+
{
|
|
2681
|
+
"data-slot": "menu-item",
|
|
2682
|
+
className: cn(
|
|
2683
|
+
"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",
|
|
2684
|
+
className
|
|
2685
|
+
),
|
|
2686
|
+
...props,
|
|
2687
|
+
children
|
|
2688
|
+
}
|
|
2689
|
+
);
|
|
2193
2690
|
}
|
|
2194
2691
|
|
|
2195
2692
|
// src/ui/metric-card/metric-card.tsx
|
|
2196
|
-
import { jsx as
|
|
2693
|
+
import { jsx as jsx35, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2197
2694
|
function MetricCard({
|
|
2198
2695
|
className,
|
|
2199
2696
|
label,
|
|
@@ -2203,12 +2700,19 @@ function MetricCard({
|
|
|
2203
2700
|
tone = "default",
|
|
2204
2701
|
...props
|
|
2205
2702
|
}) {
|
|
2206
|
-
return /* @__PURE__ */
|
|
2207
|
-
icon ? /* @__PURE__ */
|
|
2208
|
-
/* @__PURE__ */
|
|
2209
|
-
/* @__PURE__ */
|
|
2210
|
-
/* @__PURE__ */
|
|
2211
|
-
|
|
2703
|
+
return /* @__PURE__ */ jsx35(Card, { "data-slot": "metric-card", "data-tone": tone, className: cn("min-w-0", className), ...props, children: /* @__PURE__ */ jsxs15(CardContent, { className: "flex items-start gap-3", children: [
|
|
2704
|
+
icon ? /* @__PURE__ */ jsx35("div", { "data-slot": "metric-card-icon", className: "text-muted-foreground shrink-0", children: icon }) : null,
|
|
2705
|
+
/* @__PURE__ */ jsxs15("div", { className: "min-w-0", children: [
|
|
2706
|
+
/* @__PURE__ */ jsx35("p", { "data-slot": "metric-card-label", className: "text-muted-foreground text-sm", children: label }),
|
|
2707
|
+
/* @__PURE__ */ jsx35(
|
|
2708
|
+
"strong",
|
|
2709
|
+
{
|
|
2710
|
+
"data-slot": "metric-card-value",
|
|
2711
|
+
className: "mt-1 block text-2xl font-semibold tracking-tight",
|
|
2712
|
+
children: value
|
|
2713
|
+
}
|
|
2714
|
+
),
|
|
2715
|
+
description ? /* @__PURE__ */ jsx35("p", { "data-slot": "metric-card-description", className: "text-muted-foreground mt-1 text-xs", children: description }) : null
|
|
2212
2716
|
] })
|
|
2213
2717
|
] }) });
|
|
2214
2718
|
}
|
|
@@ -2221,7 +2725,7 @@ import {
|
|
|
2221
2725
|
useState as useState10
|
|
2222
2726
|
} from "react";
|
|
2223
2727
|
import { Input as AriaInput3 } from "react-aria-components";
|
|
2224
|
-
import { jsx as
|
|
2728
|
+
import { jsx as jsx36, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
2225
2729
|
function normalizeOtp(value, length) {
|
|
2226
2730
|
return value.replace(/[^0-9]/g, "").slice(0, length);
|
|
2227
2731
|
}
|
|
@@ -2273,7 +2777,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
|
|
|
2273
2777
|
input.setSelectionRange(position, position);
|
|
2274
2778
|
setSelectionStart(position);
|
|
2275
2779
|
}
|
|
2276
|
-
return /* @__PURE__ */
|
|
2780
|
+
return /* @__PURE__ */ jsxs16(
|
|
2277
2781
|
"div",
|
|
2278
2782
|
{
|
|
2279
2783
|
"data-slot": "otp-input",
|
|
@@ -2283,7 +2787,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
|
|
|
2283
2787
|
style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
|
|
2284
2788
|
onPointerDown: handlePointerDown,
|
|
2285
2789
|
children: [
|
|
2286
|
-
/* @__PURE__ */
|
|
2790
|
+
/* @__PURE__ */ jsx36(
|
|
2287
2791
|
AriaInput3,
|
|
2288
2792
|
{
|
|
2289
2793
|
...props,
|
|
@@ -2323,7 +2827,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
|
|
|
2323
2827
|
}
|
|
2324
2828
|
}
|
|
2325
2829
|
),
|
|
2326
|
-
slots.map((slot, index) => /* @__PURE__ */
|
|
2830
|
+
slots.map((slot, index) => /* @__PURE__ */ jsx36(
|
|
2327
2831
|
"span",
|
|
2328
2832
|
{
|
|
2329
2833
|
"aria-hidden": "true",
|
|
@@ -2346,27 +2850,59 @@ var OtpInputImpl = forwardRef4(function OtpInput({
|
|
|
2346
2850
|
var OtpInput2 = OtpInputImpl;
|
|
2347
2851
|
|
|
2348
2852
|
// src/ui/page-header/page-header.tsx
|
|
2349
|
-
import { jsx as
|
|
2853
|
+
import { jsx as jsx37 } from "react/jsx-runtime";
|
|
2350
2854
|
function PageHeader({ className, ...props }) {
|
|
2351
|
-
return /* @__PURE__ */
|
|
2855
|
+
return /* @__PURE__ */ jsx37(
|
|
2856
|
+
"header",
|
|
2857
|
+
{
|
|
2858
|
+
"data-slot": "page-header",
|
|
2859
|
+
className: cn(
|
|
2860
|
+
"flex flex-col gap-4 py-2 sm:flex-row sm:items-center sm:justify-between",
|
|
2861
|
+
className
|
|
2862
|
+
),
|
|
2863
|
+
...props
|
|
2864
|
+
}
|
|
2865
|
+
);
|
|
2352
2866
|
}
|
|
2353
2867
|
function PageHeaderHeading({ className, ...props }) {
|
|
2354
|
-
return /* @__PURE__ */
|
|
2868
|
+
return /* @__PURE__ */ jsx37("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
|
|
2355
2869
|
}
|
|
2356
|
-
function PageHeaderTitle({ className, ...props }) {
|
|
2357
|
-
return /* @__PURE__ */
|
|
2870
|
+
function PageHeaderTitle({ className, children, ...props }) {
|
|
2871
|
+
return /* @__PURE__ */ jsx37(
|
|
2872
|
+
"h1",
|
|
2873
|
+
{
|
|
2874
|
+
"data-slot": "page-header-title",
|
|
2875
|
+
className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className),
|
|
2876
|
+
...props,
|
|
2877
|
+
children
|
|
2878
|
+
}
|
|
2879
|
+
);
|
|
2358
2880
|
}
|
|
2359
2881
|
function PageHeaderDescription({ className, ...props }) {
|
|
2360
|
-
return /* @__PURE__ */
|
|
2882
|
+
return /* @__PURE__ */ jsx37(
|
|
2883
|
+
"p",
|
|
2884
|
+
{
|
|
2885
|
+
"data-slot": "page-header-description",
|
|
2886
|
+
className: cn("mt-1 text-sm text-muted-foreground", className),
|
|
2887
|
+
...props
|
|
2888
|
+
}
|
|
2889
|
+
);
|
|
2361
2890
|
}
|
|
2362
2891
|
function PageHeaderActions({ className, ...props }) {
|
|
2363
|
-
return /* @__PURE__ */
|
|
2892
|
+
return /* @__PURE__ */ jsx37(
|
|
2893
|
+
"div",
|
|
2894
|
+
{
|
|
2895
|
+
"data-slot": "page-header-actions",
|
|
2896
|
+
className: cn("flex shrink-0 items-center gap-2", className),
|
|
2897
|
+
...props
|
|
2898
|
+
}
|
|
2899
|
+
);
|
|
2364
2900
|
}
|
|
2365
2901
|
|
|
2366
2902
|
// src/ui/pagination/pagination.tsx
|
|
2367
2903
|
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
2368
|
-
import * as
|
|
2369
|
-
import { jsx as
|
|
2904
|
+
import * as React6 from "react";
|
|
2905
|
+
import { jsx as jsx38, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
2370
2906
|
function visiblePages(page, pageCount, siblingCount) {
|
|
2371
2907
|
return [
|
|
2372
2908
|
.../* @__PURE__ */ new Set([
|
|
@@ -2387,15 +2923,15 @@ function Pagination({
|
|
|
2387
2923
|
}) {
|
|
2388
2924
|
if (pageCount <= 1) return null;
|
|
2389
2925
|
const pages = visiblePages(page, pageCount, siblingCount);
|
|
2390
|
-
return /* @__PURE__ */
|
|
2926
|
+
return /* @__PURE__ */ jsxs17(
|
|
2391
2927
|
"nav",
|
|
2392
2928
|
{
|
|
2393
2929
|
"aria-label": ariaLabel,
|
|
2394
2930
|
className: cn("flex flex-wrap items-center justify-between gap-4", className),
|
|
2395
2931
|
children: [
|
|
2396
|
-
/* @__PURE__ */
|
|
2397
|
-
/* @__PURE__ */
|
|
2398
|
-
/* @__PURE__ */
|
|
2932
|
+
/* @__PURE__ */ jsx38("p", { className: "text-muted-foreground text-sm", children: summary ?? `P\xE1gina ${page} de ${pageCount}` }),
|
|
2933
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-1", children: [
|
|
2934
|
+
/* @__PURE__ */ jsx38(
|
|
2399
2935
|
Button,
|
|
2400
2936
|
{
|
|
2401
2937
|
"aria-label": "P\xE1gina anterior",
|
|
@@ -2403,14 +2939,14 @@ function Pagination({
|
|
|
2403
2939
|
onPress: () => onPageChange(page - 1),
|
|
2404
2940
|
size: "icon",
|
|
2405
2941
|
variant: "ghost",
|
|
2406
|
-
children: /* @__PURE__ */
|
|
2942
|
+
children: /* @__PURE__ */ jsx38(ChevronLeft, {})
|
|
2407
2943
|
}
|
|
2408
2944
|
),
|
|
2409
2945
|
pages.map((item, index) => {
|
|
2410
2946
|
const previousPage = pages[index - 1];
|
|
2411
|
-
return /* @__PURE__ */
|
|
2412
|
-
previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */
|
|
2413
|
-
/* @__PURE__ */
|
|
2947
|
+
return /* @__PURE__ */ jsxs17(React6.Fragment, { children: [
|
|
2948
|
+
previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */ jsx38("span", { "aria-hidden": "true", className: "text-muted-foreground px-1", children: "\u2026" }) : null,
|
|
2949
|
+
/* @__PURE__ */ jsx38(
|
|
2414
2950
|
Button,
|
|
2415
2951
|
{
|
|
2416
2952
|
"aria-current": item === page ? "page" : void 0,
|
|
@@ -2423,7 +2959,7 @@ function Pagination({
|
|
|
2423
2959
|
)
|
|
2424
2960
|
] }, item);
|
|
2425
2961
|
}),
|
|
2426
|
-
/* @__PURE__ */
|
|
2962
|
+
/* @__PURE__ */ jsx38(
|
|
2427
2963
|
Button,
|
|
2428
2964
|
{
|
|
2429
2965
|
"aria-label": "P\xE1gina siguiente",
|
|
@@ -2431,7 +2967,7 @@ function Pagination({
|
|
|
2431
2967
|
onPress: () => onPageChange(page + 1),
|
|
2432
2968
|
size: "icon",
|
|
2433
2969
|
variant: "ghost",
|
|
2434
|
-
children: /* @__PURE__ */
|
|
2970
|
+
children: /* @__PURE__ */ jsx38(ChevronRight, {})
|
|
2435
2971
|
}
|
|
2436
2972
|
)
|
|
2437
2973
|
] })
|
|
@@ -2445,12 +2981,31 @@ import {
|
|
|
2445
2981
|
DialogTrigger as AriaDialogTrigger,
|
|
2446
2982
|
Popover as AriaPopover
|
|
2447
2983
|
} from "react-aria-components";
|
|
2448
|
-
import { jsx as
|
|
2984
|
+
import { jsx as jsx39, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
2449
2985
|
var PopoverTrigger = AriaDialogTrigger;
|
|
2450
|
-
function
|
|
2451
|
-
return /* @__PURE__ */
|
|
2986
|
+
function PopoverContent({ className, ...props }) {
|
|
2987
|
+
return /* @__PURE__ */ jsx39(
|
|
2988
|
+
AriaPopover,
|
|
2989
|
+
{
|
|
2990
|
+
"data-slot": "popover",
|
|
2991
|
+
offset: 6,
|
|
2992
|
+
className: cn(
|
|
2993
|
+
"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",
|
|
2994
|
+
className
|
|
2995
|
+
),
|
|
2996
|
+
...props
|
|
2997
|
+
}
|
|
2998
|
+
);
|
|
2999
|
+
}
|
|
3000
|
+
function Popover4(props) {
|
|
3001
|
+
if (!("trigger" in props)) return /* @__PURE__ */ jsx39(PopoverContent, { ...props });
|
|
3002
|
+
const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
|
|
3003
|
+
const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ jsx39(Button, { ...triggerProps, children: trigger }) : trigger;
|
|
3004
|
+
return /* @__PURE__ */ jsxs18(PopoverTrigger, { defaultOpen, isOpen, onOpenChange, children: [
|
|
3005
|
+
triggerElement,
|
|
3006
|
+
/* @__PURE__ */ jsx39(PopoverContent, { ...contentProps, children })
|
|
3007
|
+
] });
|
|
2452
3008
|
}
|
|
2453
|
-
var PopoverContent = Popover4;
|
|
2454
3009
|
|
|
2455
3010
|
// src/ui/quantity-input/quantity-input.tsx
|
|
2456
3011
|
import { Minus, Plus } from "lucide-react";
|
|
@@ -2460,7 +3015,7 @@ import {
|
|
|
2460
3015
|
Input as AriaInput4,
|
|
2461
3016
|
NumberField as AriaNumberField
|
|
2462
3017
|
} from "react-aria-components";
|
|
2463
|
-
import { jsx as
|
|
3018
|
+
import { jsx as jsx40, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2464
3019
|
function QuantityInput({
|
|
2465
3020
|
className,
|
|
2466
3021
|
inputClassName,
|
|
@@ -2470,23 +3025,53 @@ function QuantityInput({
|
|
|
2470
3025
|
step = 1,
|
|
2471
3026
|
...props
|
|
2472
3027
|
}) {
|
|
2473
|
-
return /* @__PURE__ */
|
|
3028
|
+
return /* @__PURE__ */ jsx40(
|
|
2474
3029
|
AriaNumberField,
|
|
2475
3030
|
{
|
|
2476
3031
|
...props,
|
|
2477
3032
|
minValue,
|
|
2478
3033
|
step,
|
|
2479
3034
|
"data-slot": "quantity-input",
|
|
2480
|
-
className: cn(
|
|
2481
|
-
|
|
3035
|
+
className: cn(
|
|
3036
|
+
"group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50",
|
|
3037
|
+
className
|
|
3038
|
+
),
|
|
3039
|
+
children: /* @__PURE__ */ jsxs19(
|
|
2482
3040
|
AriaGroup,
|
|
2483
3041
|
{
|
|
2484
3042
|
"data-slot": "quantity-input-group",
|
|
2485
|
-
className: "flex h-8 min-w-0 items-stretch overflow-hidden rounded-lg border
|
|
3043
|
+
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",
|
|
2486
3044
|
children: [
|
|
2487
|
-
/* @__PURE__ */
|
|
2488
|
-
|
|
2489
|
-
|
|
3045
|
+
/* @__PURE__ */ jsx40(
|
|
3046
|
+
AriaButton,
|
|
3047
|
+
{
|
|
3048
|
+
slot: "decrement",
|
|
3049
|
+
"aria-label": decrementAriaLabel,
|
|
3050
|
+
"data-slot": "quantity-input-decrement",
|
|
3051
|
+
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",
|
|
3052
|
+
children: /* @__PURE__ */ jsx40(Minus, { "aria-hidden": "true", className: "size-4" })
|
|
3053
|
+
}
|
|
3054
|
+
),
|
|
3055
|
+
/* @__PURE__ */ jsx40(
|
|
3056
|
+
AriaInput4,
|
|
3057
|
+
{
|
|
3058
|
+
"data-slot": "quantity-input-value",
|
|
3059
|
+
className: cn(
|
|
3060
|
+
"w-14 min-w-0 bg-transparent px-1 text-center text-sm tabular-nums outline-none",
|
|
3061
|
+
inputClassName
|
|
3062
|
+
)
|
|
3063
|
+
}
|
|
3064
|
+
),
|
|
3065
|
+
/* @__PURE__ */ jsx40(
|
|
3066
|
+
AriaButton,
|
|
3067
|
+
{
|
|
3068
|
+
slot: "increment",
|
|
3069
|
+
"aria-label": incrementAriaLabel,
|
|
3070
|
+
"data-slot": "quantity-input-increment",
|
|
3071
|
+
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",
|
|
3072
|
+
children: /* @__PURE__ */ jsx40(Plus, { "aria-hidden": "true", className: "size-4" })
|
|
3073
|
+
}
|
|
3074
|
+
)
|
|
2490
3075
|
]
|
|
2491
3076
|
}
|
|
2492
3077
|
)
|
|
@@ -2495,6 +3080,7 @@ function QuantityInput({
|
|
|
2495
3080
|
}
|
|
2496
3081
|
|
|
2497
3082
|
// src/ui/select/select.tsx
|
|
3083
|
+
import { ChevronDown as ChevronDown2 } from "lucide-react";
|
|
2498
3084
|
import {
|
|
2499
3085
|
Button as AriaButton2,
|
|
2500
3086
|
Select as AriaSelect,
|
|
@@ -2503,44 +3089,99 @@ import {
|
|
|
2503
3089
|
ListBoxItem as ListBoxItem3,
|
|
2504
3090
|
Popover as Popover5
|
|
2505
3091
|
} from "react-aria-components";
|
|
2506
|
-
import {
|
|
2507
|
-
import { Fragment as Fragment11, jsx as jsx42, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
3092
|
+
import { Fragment as Fragment8, jsx as jsx41, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2508
3093
|
var Select = AriaSelect;
|
|
2509
3094
|
function SelectTrigger({ className, children, ...props }) {
|
|
2510
|
-
return /* @__PURE__ */
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
3095
|
+
return /* @__PURE__ */ jsx41(
|
|
3096
|
+
AriaButton2,
|
|
3097
|
+
{
|
|
3098
|
+
"data-slot": "select-trigger",
|
|
3099
|
+
className: cn(
|
|
3100
|
+
"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",
|
|
3101
|
+
className
|
|
3102
|
+
),
|
|
3103
|
+
...props,
|
|
3104
|
+
children: (state) => /* @__PURE__ */ jsxs20(Fragment8, { children: [
|
|
3105
|
+
typeof children === "function" ? children(state) : children,
|
|
3106
|
+
/* @__PURE__ */ jsx41(
|
|
3107
|
+
ChevronDown2,
|
|
3108
|
+
{
|
|
3109
|
+
"aria-hidden": "true",
|
|
3110
|
+
className: "text-muted-foreground ml-auto size-4 transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none"
|
|
3111
|
+
}
|
|
3112
|
+
)
|
|
3113
|
+
] })
|
|
3114
|
+
}
|
|
3115
|
+
);
|
|
2514
3116
|
}
|
|
2515
3117
|
function SelectValue({ className, ...props }) {
|
|
2516
|
-
return /* @__PURE__ */
|
|
3118
|
+
return /* @__PURE__ */ jsx41(
|
|
3119
|
+
AriaSelectValue,
|
|
3120
|
+
{
|
|
3121
|
+
"data-slot": "select-value",
|
|
3122
|
+
className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className),
|
|
3123
|
+
...props
|
|
3124
|
+
}
|
|
3125
|
+
);
|
|
2517
3126
|
}
|
|
2518
3127
|
function SelectContent({ className, ...props }) {
|
|
2519
|
-
return /* @__PURE__ */
|
|
3128
|
+
return /* @__PURE__ */ jsx41(
|
|
3129
|
+
Popover5,
|
|
3130
|
+
{
|
|
3131
|
+
"data-slot": "select-content",
|
|
3132
|
+
className: cn(
|
|
3133
|
+
"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",
|
|
3134
|
+
className
|
|
3135
|
+
),
|
|
3136
|
+
...props
|
|
3137
|
+
}
|
|
3138
|
+
);
|
|
2520
3139
|
}
|
|
2521
3140
|
function SelectList({ className, ...props }) {
|
|
2522
|
-
return /* @__PURE__ */
|
|
3141
|
+
return /* @__PURE__ */ jsx41(
|
|
3142
|
+
ListBox3,
|
|
3143
|
+
{
|
|
3144
|
+
"data-slot": "select-list",
|
|
3145
|
+
className: cn("max-h-64 overflow-y-auto", className),
|
|
3146
|
+
...props
|
|
3147
|
+
}
|
|
3148
|
+
);
|
|
2523
3149
|
}
|
|
2524
|
-
function SelectItem({
|
|
2525
|
-
|
|
3150
|
+
function SelectItem({
|
|
3151
|
+
className,
|
|
3152
|
+
children,
|
|
3153
|
+
...props
|
|
3154
|
+
}) {
|
|
3155
|
+
return /* @__PURE__ */ jsx41(
|
|
3156
|
+
ListBoxItem3,
|
|
3157
|
+
{
|
|
3158
|
+
"data-slot": "select-item",
|
|
3159
|
+
className: cn(
|
|
3160
|
+
"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",
|
|
3161
|
+
className
|
|
3162
|
+
),
|
|
3163
|
+
...props,
|
|
3164
|
+
children
|
|
3165
|
+
}
|
|
3166
|
+
);
|
|
2526
3167
|
}
|
|
2527
3168
|
|
|
2528
3169
|
// src/ui/sheet/sheet.tsx
|
|
2529
3170
|
import { XIcon as XIcon2 } from "lucide-react";
|
|
2530
3171
|
import {
|
|
2531
|
-
Heading as
|
|
3172
|
+
Heading as Heading3,
|
|
2532
3173
|
ModalOverlay as ModalOverlayPrimitive,
|
|
2533
3174
|
Modal as ModalPrimitive,
|
|
2534
3175
|
Dialog as SheetPrimitive,
|
|
2535
3176
|
DialogTrigger as SheetTriggerPrimitive,
|
|
2536
|
-
Text as
|
|
3177
|
+
Text as Text3
|
|
2537
3178
|
} from "react-aria-components";
|
|
2538
|
-
import { jsx as
|
|
3179
|
+
import { jsx as jsx42, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2539
3180
|
function SheetTrigger({ ...props }) {
|
|
2540
|
-
return /* @__PURE__ */
|
|
3181
|
+
return /* @__PURE__ */ jsx42(SheetTriggerPrimitive, { "data-slot": "sheet-trigger", ...props });
|
|
2541
3182
|
}
|
|
2542
3183
|
function SheetClose({ className, variant = "outline", size = "default", ...props }) {
|
|
2543
|
-
return /* @__PURE__ */
|
|
3184
|
+
return /* @__PURE__ */ jsx42(
|
|
2544
3185
|
Button,
|
|
2545
3186
|
{
|
|
2546
3187
|
slot: "close",
|
|
@@ -2557,7 +3198,7 @@ function SheetOverlay({
|
|
|
2557
3198
|
children,
|
|
2558
3199
|
...props
|
|
2559
3200
|
}) {
|
|
2560
|
-
return /* @__PURE__ */
|
|
3201
|
+
return /* @__PURE__ */ jsx42(
|
|
2561
3202
|
ModalOverlayPrimitive,
|
|
2562
3203
|
{
|
|
2563
3204
|
"data-slot": "sheet-overlay",
|
|
@@ -2578,7 +3219,7 @@ function Sheet({
|
|
|
2578
3219
|
showCloseButton = true,
|
|
2579
3220
|
...props
|
|
2580
3221
|
}) {
|
|
2581
|
-
return /* @__PURE__ */
|
|
3222
|
+
return /* @__PURE__ */ jsx42(SheetOverlay, { ...props, children: /* @__PURE__ */ jsx42(
|
|
2582
3223
|
ModalPrimitive,
|
|
2583
3224
|
{
|
|
2584
3225
|
"data-slot": "sheet-content",
|
|
@@ -2587,16 +3228,16 @@ function Sheet({
|
|
|
2587
3228
|
"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",
|
|
2588
3229
|
className
|
|
2589
3230
|
),
|
|
2590
|
-
children: /* @__PURE__ */
|
|
3231
|
+
children: /* @__PURE__ */ jsxs21(
|
|
2591
3232
|
SheetPrimitive,
|
|
2592
3233
|
{
|
|
2593
3234
|
"data-slot": "sheet",
|
|
2594
3235
|
className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
|
|
2595
3236
|
children: [
|
|
2596
3237
|
children,
|
|
2597
|
-
showCloseButton && /* @__PURE__ */
|
|
2598
|
-
/* @__PURE__ */
|
|
2599
|
-
/* @__PURE__ */
|
|
3238
|
+
showCloseButton && /* @__PURE__ */ jsxs21(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
|
|
3239
|
+
/* @__PURE__ */ jsx42(XIcon2, {}),
|
|
3240
|
+
/* @__PURE__ */ jsx42("span", { className: "sr-only", children: "Cerrar" })
|
|
2600
3241
|
] })
|
|
2601
3242
|
]
|
|
2602
3243
|
}
|
|
@@ -2611,10 +3252,25 @@ function SheetContent({
|
|
|
2611
3252
|
showCloseButton = true,
|
|
2612
3253
|
...props
|
|
2613
3254
|
}) {
|
|
2614
|
-
return /* @__PURE__ */
|
|
3255
|
+
return /* @__PURE__ */ jsx42(Sheet, { className, side, showCloseButton, ...props, children });
|
|
3256
|
+
}
|
|
3257
|
+
function Drawer({
|
|
3258
|
+
children,
|
|
3259
|
+
trigger,
|
|
3260
|
+
triggerProps,
|
|
3261
|
+
defaultOpen,
|
|
3262
|
+
isOpen,
|
|
3263
|
+
onOpenChange,
|
|
3264
|
+
...contentProps
|
|
3265
|
+
}) {
|
|
3266
|
+
const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ jsx42(Button, { ...triggerProps, children: trigger }) : trigger;
|
|
3267
|
+
return /* @__PURE__ */ jsxs21(SheetTrigger, { defaultOpen, isOpen, onOpenChange, children: [
|
|
3268
|
+
triggerElement,
|
|
3269
|
+
/* @__PURE__ */ jsx42(SheetContent, { ...contentProps, children })
|
|
3270
|
+
] });
|
|
2615
3271
|
}
|
|
2616
3272
|
function SheetHeader({ className, ...props }) {
|
|
2617
|
-
return /* @__PURE__ */
|
|
3273
|
+
return /* @__PURE__ */ jsx42(
|
|
2618
3274
|
"div",
|
|
2619
3275
|
{
|
|
2620
3276
|
"data-slot": "sheet-header",
|
|
@@ -2624,7 +3280,7 @@ function SheetHeader({ className, ...props }) {
|
|
|
2624
3280
|
);
|
|
2625
3281
|
}
|
|
2626
3282
|
function SheetFooter({ className, ...props }) {
|
|
2627
|
-
return /* @__PURE__ */
|
|
3283
|
+
return /* @__PURE__ */ jsx42(
|
|
2628
3284
|
"div",
|
|
2629
3285
|
{
|
|
2630
3286
|
"data-slot": "sheet-footer",
|
|
@@ -2634,8 +3290,8 @@ function SheetFooter({ className, ...props }) {
|
|
|
2634
3290
|
);
|
|
2635
3291
|
}
|
|
2636
3292
|
function SheetTitle({ className, ...props }) {
|
|
2637
|
-
return /* @__PURE__ */
|
|
2638
|
-
|
|
3293
|
+
return /* @__PURE__ */ jsx42(
|
|
3294
|
+
Heading3,
|
|
2639
3295
|
{
|
|
2640
3296
|
slot: "title",
|
|
2641
3297
|
"data-slot": "sheet-title",
|
|
@@ -2648,8 +3304,8 @@ function SheetDescription({
|
|
|
2648
3304
|
className,
|
|
2649
3305
|
...props
|
|
2650
3306
|
}) {
|
|
2651
|
-
return /* @__PURE__ */
|
|
2652
|
-
|
|
3307
|
+
return /* @__PURE__ */ jsx42(
|
|
3308
|
+
Text3,
|
|
2653
3309
|
{
|
|
2654
3310
|
slot: "description",
|
|
2655
3311
|
"data-slot": "sheet-description",
|
|
@@ -2658,29 +3314,30 @@ function SheetDescription({
|
|
|
2658
3314
|
}
|
|
2659
3315
|
);
|
|
2660
3316
|
}
|
|
3317
|
+
var DrawerTrigger = SheetTrigger;
|
|
3318
|
+
var DrawerContent = SheetContent;
|
|
3319
|
+
var DrawerClose = SheetClose;
|
|
3320
|
+
var DrawerHeader = SheetHeader;
|
|
3321
|
+
var DrawerFooter = SheetFooter;
|
|
3322
|
+
var DrawerTitle = SheetTitle;
|
|
3323
|
+
var DrawerDescription = SheetDescription;
|
|
2661
3324
|
|
|
2662
3325
|
// src/ui/sidebar/sidebar.tsx
|
|
2663
|
-
import {
|
|
2664
|
-
|
|
2665
|
-
ChevronRight as ChevronRight2,
|
|
2666
|
-
Ellipsis,
|
|
2667
|
-
Search
|
|
2668
|
-
} from "lucide-react";
|
|
2669
|
-
import {
|
|
2670
|
-
createContext as createContext5,
|
|
2671
|
-
useContext as useContext5,
|
|
2672
|
-
useMemo as useMemo2,
|
|
2673
|
-
useState as useState11
|
|
2674
|
-
} from "react";
|
|
3326
|
+
import { ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight2, Ellipsis, Search } from "lucide-react";
|
|
3327
|
+
import { useMemo as useMemo2, useState as useState11 } from "react";
|
|
2675
3328
|
import { Link as Link3 } from "react-aria-components";
|
|
2676
|
-
|
|
2677
|
-
|
|
3329
|
+
|
|
3330
|
+
// src/ui/sidebar/sidebar-context.ts
|
|
3331
|
+
import { createContext as createContext4, useContext as useContext4 } from "react";
|
|
3332
|
+
var SidebarContext = createContext4(null);
|
|
2678
3333
|
function useSidebar() {
|
|
2679
|
-
const context =
|
|
2680
|
-
if (!context)
|
|
2681
|
-
throw new Error("useSidebar must be used inside SidebarProvider");
|
|
3334
|
+
const context = useContext4(SidebarContext);
|
|
3335
|
+
if (!context) throw new Error("useSidebar must be used inside SidebarProvider");
|
|
2682
3336
|
return context;
|
|
2683
3337
|
}
|
|
3338
|
+
|
|
3339
|
+
// src/ui/sidebar/sidebar.tsx
|
|
3340
|
+
import { Fragment as Fragment9, jsx as jsx43, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2684
3341
|
function SidebarProvider({
|
|
2685
3342
|
defaultCollapsed = false,
|
|
2686
3343
|
children
|
|
@@ -2694,14 +3351,11 @@ function SidebarProvider({
|
|
|
2694
3351
|
}),
|
|
2695
3352
|
[collapsed]
|
|
2696
3353
|
);
|
|
2697
|
-
return /* @__PURE__ */
|
|
3354
|
+
return /* @__PURE__ */ jsx43(SidebarContext.Provider, { value, children });
|
|
2698
3355
|
}
|
|
2699
|
-
function Sidebar({
|
|
2700
|
-
className,
|
|
2701
|
-
...props
|
|
2702
|
-
}) {
|
|
3356
|
+
function Sidebar({ className, ...props }) {
|
|
2703
3357
|
const { collapsed } = useSidebar();
|
|
2704
|
-
return /* @__PURE__ */
|
|
3358
|
+
return /* @__PURE__ */ jsx43(
|
|
2705
3359
|
"aside",
|
|
2706
3360
|
{
|
|
2707
3361
|
"data-slot": "sidebar",
|
|
@@ -2714,11 +3368,8 @@ function Sidebar({
|
|
|
2714
3368
|
}
|
|
2715
3369
|
);
|
|
2716
3370
|
}
|
|
2717
|
-
function SidebarHeader({
|
|
2718
|
-
|
|
2719
|
-
...props
|
|
2720
|
-
}) {
|
|
2721
|
-
return /* @__PURE__ */ jsx44(
|
|
3371
|
+
function SidebarHeader({ className, ...props }) {
|
|
3372
|
+
return /* @__PURE__ */ jsx43(
|
|
2722
3373
|
"div",
|
|
2723
3374
|
{
|
|
2724
3375
|
"data-slot": "sidebar-header",
|
|
@@ -2733,7 +3384,7 @@ function SidebarSearch({
|
|
|
2733
3384
|
className,
|
|
2734
3385
|
...props
|
|
2735
3386
|
}) {
|
|
2736
|
-
return /* @__PURE__ */
|
|
3387
|
+
return /* @__PURE__ */ jsxs22(
|
|
2737
3388
|
"button",
|
|
2738
3389
|
{
|
|
2739
3390
|
type: "button",
|
|
@@ -2744,18 +3395,15 @@ function SidebarSearch({
|
|
|
2744
3395
|
),
|
|
2745
3396
|
...props,
|
|
2746
3397
|
children: [
|
|
2747
|
-
/* @__PURE__ */
|
|
2748
|
-
/* @__PURE__ */
|
|
2749
|
-
/* @__PURE__ */
|
|
3398
|
+
/* @__PURE__ */ jsx43(Search, { className: "size-4 shrink-0" }),
|
|
3399
|
+
/* @__PURE__ */ jsx43("span", { className: "flex-1 text-left", children: label }),
|
|
3400
|
+
/* @__PURE__ */ jsx43("kbd", { className: "bg-secondary text-muted-foreground rounded px-1.5 py-0.5 font-mono text-[10px]", children: shortcut })
|
|
2750
3401
|
]
|
|
2751
3402
|
}
|
|
2752
3403
|
);
|
|
2753
3404
|
}
|
|
2754
|
-
function SidebarContent({
|
|
2755
|
-
|
|
2756
|
-
...props
|
|
2757
|
-
}) {
|
|
2758
|
-
return /* @__PURE__ */ jsx44(
|
|
3405
|
+
function SidebarContent({ className, ...props }) {
|
|
3406
|
+
return /* @__PURE__ */ jsx43(
|
|
2759
3407
|
"nav",
|
|
2760
3408
|
{
|
|
2761
3409
|
"data-slot": "sidebar-content",
|
|
@@ -2765,18 +3413,12 @@ function SidebarContent({
|
|
|
2765
3413
|
}
|
|
2766
3414
|
);
|
|
2767
3415
|
}
|
|
2768
|
-
function SidebarFooter({
|
|
2769
|
-
|
|
2770
|
-
...props
|
|
2771
|
-
}) {
|
|
2772
|
-
return /* @__PURE__ */ jsx44(
|
|
3416
|
+
function SidebarFooter({ className, ...props }) {
|
|
3417
|
+
return /* @__PURE__ */ jsx43(
|
|
2773
3418
|
"div",
|
|
2774
3419
|
{
|
|
2775
3420
|
"data-slot": "sidebar-footer",
|
|
2776
|
-
className: cn(
|
|
2777
|
-
"mt-auto flex flex-col gap-2 border-t border-border p-2",
|
|
2778
|
-
className
|
|
2779
|
-
),
|
|
3421
|
+
className: cn("mt-auto flex flex-col gap-2 border-t border-border p-2", className),
|
|
2780
3422
|
...props
|
|
2781
3423
|
}
|
|
2782
3424
|
);
|
|
@@ -2788,27 +3430,19 @@ function SidebarGroup({
|
|
|
2788
3430
|
...props
|
|
2789
3431
|
}) {
|
|
2790
3432
|
const { collapsed } = useSidebar();
|
|
2791
|
-
return /* @__PURE__ */
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
label && /* @__PURE__ */ jsx44(
|
|
2799
|
-
"h2",
|
|
2800
|
-
{
|
|
2801
|
-
className: cn(
|
|
2802
|
-
"mb-1 px-3 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",
|
|
2803
|
-
collapsed && "sr-only"
|
|
2804
|
-
),
|
|
2805
|
-
children: label
|
|
2806
|
-
}
|
|
3433
|
+
return /* @__PURE__ */ jsxs22("section", { "data-slot": "sidebar-group", className: cn("mb-4 last:mb-0", className), ...props, children: [
|
|
3434
|
+
label && /* @__PURE__ */ jsx43(
|
|
3435
|
+
"h2",
|
|
3436
|
+
{
|
|
3437
|
+
className: cn(
|
|
3438
|
+
"mb-1 px-3 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",
|
|
3439
|
+
collapsed && "sr-only"
|
|
2807
3440
|
),
|
|
2808
|
-
children
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
3441
|
+
children: label
|
|
3442
|
+
}
|
|
3443
|
+
),
|
|
3444
|
+
children
|
|
3445
|
+
] });
|
|
2812
3446
|
}
|
|
2813
3447
|
function SidebarItem({
|
|
2814
3448
|
icon,
|
|
@@ -2821,7 +3455,7 @@ function SidebarItem({
|
|
|
2821
3455
|
}) {
|
|
2822
3456
|
const { collapsed } = useSidebar();
|
|
2823
3457
|
const content = typeof children === "function" ? label : children ?? label;
|
|
2824
|
-
return /* @__PURE__ */
|
|
3458
|
+
return /* @__PURE__ */ jsx43(
|
|
2825
3459
|
Link3,
|
|
2826
3460
|
{
|
|
2827
3461
|
"data-slot": "sidebar-item",
|
|
@@ -2833,25 +3467,16 @@ function SidebarItem({
|
|
|
2833
3467
|
typeof className === "function" ? className : className
|
|
2834
3468
|
),
|
|
2835
3469
|
...props,
|
|
2836
|
-
children: (values) => /* @__PURE__ */
|
|
2837
|
-
/* @__PURE__ */
|
|
2838
|
-
/* @__PURE__ */
|
|
2839
|
-
|
|
2840
|
-
{
|
|
2841
|
-
className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"),
|
|
2842
|
-
children: typeof children === "function" ? children(values) : content
|
|
2843
|
-
}
|
|
2844
|
-
),
|
|
2845
|
-
badge && !collapsed && /* @__PURE__ */ jsx44("span", { className: "text-xs text-muted-foreground", children: badge })
|
|
3470
|
+
children: (values) => /* @__PURE__ */ jsxs22(Fragment9, { children: [
|
|
3471
|
+
/* @__PURE__ */ jsx43("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
|
|
3472
|
+
/* @__PURE__ */ jsx43("span", { className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"), children: typeof children === "function" ? children(values) : content }),
|
|
3473
|
+
badge && !collapsed && /* @__PURE__ */ jsx43("span", { className: "text-muted-foreground text-xs", children: badge })
|
|
2846
3474
|
] })
|
|
2847
3475
|
}
|
|
2848
3476
|
);
|
|
2849
3477
|
}
|
|
2850
|
-
function SidebarSeparator({
|
|
2851
|
-
|
|
2852
|
-
...props
|
|
2853
|
-
}) {
|
|
2854
|
-
return /* @__PURE__ */ jsx44(
|
|
3478
|
+
function SidebarSeparator({ className, ...props }) {
|
|
3479
|
+
return /* @__PURE__ */ jsx43(
|
|
2855
3480
|
"hr",
|
|
2856
3481
|
{
|
|
2857
3482
|
"data-slot": "sidebar-separator",
|
|
@@ -2862,7 +3487,7 @@ function SidebarSeparator({
|
|
|
2862
3487
|
}
|
|
2863
3488
|
function SidebarTrigger({ className, ...props }) {
|
|
2864
3489
|
const { collapsed, toggle } = useSidebar();
|
|
2865
|
-
return /* @__PURE__ */
|
|
3490
|
+
return /* @__PURE__ */ jsx43(
|
|
2866
3491
|
Button,
|
|
2867
3492
|
{
|
|
2868
3493
|
"aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
|
|
@@ -2871,16 +3496,13 @@ function SidebarTrigger({ className, ...props }) {
|
|
|
2871
3496
|
variant: "ghost",
|
|
2872
3497
|
className: cn("ml-auto", className),
|
|
2873
3498
|
...props,
|
|
2874
|
-
children: collapsed ? /* @__PURE__ */
|
|
3499
|
+
children: collapsed ? /* @__PURE__ */ jsx43(ChevronRight2, {}) : /* @__PURE__ */ jsx43(ChevronLeft2, {})
|
|
2875
3500
|
}
|
|
2876
3501
|
);
|
|
2877
3502
|
}
|
|
2878
|
-
function SidebarRail({
|
|
2879
|
-
className,
|
|
2880
|
-
...props
|
|
2881
|
-
}) {
|
|
3503
|
+
function SidebarRail({ className, ...props }) {
|
|
2882
3504
|
const { toggle } = useSidebar();
|
|
2883
|
-
return /* @__PURE__ */
|
|
3505
|
+
return /* @__PURE__ */ jsx43(
|
|
2884
3506
|
"button",
|
|
2885
3507
|
{
|
|
2886
3508
|
type: "button",
|
|
@@ -2895,7 +3517,7 @@ function SidebarRail({
|
|
|
2895
3517
|
);
|
|
2896
3518
|
}
|
|
2897
3519
|
function SidebarMore({ className, ...props }) {
|
|
2898
|
-
return /* @__PURE__ */
|
|
3520
|
+
return /* @__PURE__ */ jsx43(
|
|
2899
3521
|
Button,
|
|
2900
3522
|
{
|
|
2901
3523
|
"aria-label": "M\xE1s opciones",
|
|
@@ -2903,36 +3525,85 @@ function SidebarMore({ className, ...props }) {
|
|
|
2903
3525
|
variant: "ghost",
|
|
2904
3526
|
className: cn("size-7", className),
|
|
2905
3527
|
...props,
|
|
2906
|
-
children: /* @__PURE__ */
|
|
3528
|
+
children: /* @__PURE__ */ jsx43(Ellipsis, {})
|
|
2907
3529
|
}
|
|
2908
3530
|
);
|
|
2909
3531
|
}
|
|
2910
3532
|
|
|
2911
3533
|
// src/ui/skeleton/skeleton.tsx
|
|
2912
|
-
import { jsx as
|
|
3534
|
+
import { jsx as jsx44 } from "react/jsx-runtime";
|
|
2913
3535
|
function Skeleton({ className, ...props }) {
|
|
2914
|
-
return /* @__PURE__ */
|
|
3536
|
+
return /* @__PURE__ */ jsx44(
|
|
3537
|
+
"div",
|
|
3538
|
+
{
|
|
3539
|
+
"aria-hidden": "true",
|
|
3540
|
+
"data-slot": "skeleton",
|
|
3541
|
+
className: cn("animate-pulse rounded-md bg-muted", className),
|
|
3542
|
+
...props
|
|
3543
|
+
}
|
|
3544
|
+
);
|
|
2915
3545
|
}
|
|
2916
3546
|
|
|
2917
3547
|
// src/ui/submit-button/submit-button.tsx
|
|
2918
|
-
import { useFormStatus } from "react-dom";
|
|
2919
3548
|
import { LoaderCircle as LoaderCircle3 } from "lucide-react";
|
|
2920
|
-
import {
|
|
2921
|
-
|
|
3549
|
+
import { useCallback as useCallback6, useLayoutEffect, useRef as useRef5 } from "react";
|
|
3550
|
+
import { useFormStatus } from "react-dom";
|
|
3551
|
+
import { Fragment as Fragment10, jsx as jsx45, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
3552
|
+
function assignRef(ref, node) {
|
|
3553
|
+
if (typeof ref === "function") {
|
|
3554
|
+
ref(node);
|
|
3555
|
+
} else if (ref) {
|
|
3556
|
+
ref.current = node;
|
|
3557
|
+
}
|
|
3558
|
+
}
|
|
3559
|
+
function SubmitButton({
|
|
3560
|
+
loadingLabel,
|
|
3561
|
+
pendingLabel,
|
|
3562
|
+
loading = false,
|
|
3563
|
+
children,
|
|
3564
|
+
isDisabled,
|
|
3565
|
+
ref: forwardedRef,
|
|
3566
|
+
size = "sm",
|
|
3567
|
+
...props
|
|
3568
|
+
}) {
|
|
2922
3569
|
const { pending } = useFormStatus();
|
|
2923
3570
|
const busy = pending || loading;
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
3571
|
+
const label = loadingLabel ?? pendingLabel ?? "Guardando\u2026";
|
|
3572
|
+
const buttonRef = useRef5(null);
|
|
3573
|
+
const setButtonRef = useCallback6(
|
|
3574
|
+
(node) => {
|
|
3575
|
+
buttonRef.current = node;
|
|
3576
|
+
assignRef(forwardedRef, node);
|
|
3577
|
+
},
|
|
3578
|
+
[forwardedRef]
|
|
3579
|
+
);
|
|
3580
|
+
useLayoutEffect(() => {
|
|
3581
|
+
const button = buttonRef.current;
|
|
3582
|
+
if (!button) return;
|
|
3583
|
+
if (busy) button.setAttribute("aria-busy", "true");
|
|
3584
|
+
else button.removeAttribute("aria-busy");
|
|
3585
|
+
}, [busy]);
|
|
3586
|
+
return /* @__PURE__ */ jsx45(
|
|
3587
|
+
Button,
|
|
3588
|
+
{
|
|
3589
|
+
ref: setButtonRef,
|
|
3590
|
+
type: "submit",
|
|
3591
|
+
size,
|
|
3592
|
+
isDisabled: busy || isDisabled,
|
|
3593
|
+
"aria-busy": busy || void 0,
|
|
3594
|
+
...props,
|
|
3595
|
+
children: busy ? /* @__PURE__ */ jsxs23(Fragment10, { children: [
|
|
3596
|
+
/* @__PURE__ */ jsx45(LoaderCircle3, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
|
|
3597
|
+
label
|
|
3598
|
+
] }) : children
|
|
3599
|
+
}
|
|
3600
|
+
);
|
|
2928
3601
|
}
|
|
2929
3602
|
|
|
2930
3603
|
// src/ui/switch/switch.tsx
|
|
2931
|
-
import { useEffect as useEffect5, useRef as
|
|
2932
|
-
import {
|
|
2933
|
-
|
|
2934
|
-
} from "react-aria-components";
|
|
2935
|
-
import { Fragment as Fragment14, jsx as jsx47, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
3604
|
+
import { useEffect as useEffect5, useRef as useRef6 } from "react";
|
|
3605
|
+
import { Switch as AriaSwitch } from "react-aria-components";
|
|
3606
|
+
import { Fragment as Fragment11, jsx as jsx46, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2936
3607
|
var switchSizes = {
|
|
2937
3608
|
sm: {
|
|
2938
3609
|
control: "h-4 w-[1.875rem] p-0.5",
|
|
@@ -2972,13 +3643,14 @@ function Switch({
|
|
|
2972
3643
|
...props
|
|
2973
3644
|
}) {
|
|
2974
3645
|
const styles = switchSizes[size];
|
|
2975
|
-
const fallbackInputRef =
|
|
3646
|
+
const fallbackInputRef = useRef6(null);
|
|
2976
3647
|
const resolvedInputRef = inputRef ?? fallbackInputRef;
|
|
2977
3648
|
useEffect5(() => {
|
|
2978
3649
|
const input = resolvedInputRef.current;
|
|
2979
3650
|
if (!input) return;
|
|
2980
3651
|
const handleDirectionalKey = (event) => {
|
|
2981
|
-
if (event.target !== input || event.defaultPrevented || isDisabled || isReadOnly || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
|
|
3652
|
+
if (event.target !== input || event.defaultPrevented || isDisabled || isReadOnly || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
|
|
3653
|
+
return;
|
|
2982
3654
|
const nextSelected = event.key === "ArrowRight" ? true : event.key === "ArrowLeft" ? false : null;
|
|
2983
3655
|
if (nextSelected === null) return;
|
|
2984
3656
|
event.preventDefault();
|
|
@@ -2988,7 +3660,7 @@ function Switch({
|
|
|
2988
3660
|
ownerDocument.addEventListener("keydown", handleDirectionalKey);
|
|
2989
3661
|
return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
|
|
2990
3662
|
}, [isDisabled, isReadOnly, resolvedInputRef]);
|
|
2991
|
-
return /* @__PURE__ */
|
|
3663
|
+
return /* @__PURE__ */ jsx46(
|
|
2992
3664
|
AriaSwitch,
|
|
2993
3665
|
{
|
|
2994
3666
|
"data-slot": "switch",
|
|
@@ -3003,10 +3675,10 @@ function Switch({
|
|
|
3003
3675
|
),
|
|
3004
3676
|
...props,
|
|
3005
3677
|
children: (state) => {
|
|
3006
|
-
const
|
|
3007
|
-
const thumbOffset = state.isSelected ?
|
|
3008
|
-
return /* @__PURE__ */
|
|
3009
|
-
/* @__PURE__ */
|
|
3678
|
+
const isThumbPressed = state.isPressed;
|
|
3679
|
+
const thumbOffset = state.isSelected ? isThumbPressed ? styles.activeSelectedOffset : styles.selectedOffset : "0";
|
|
3680
|
+
return /* @__PURE__ */ jsxs24(Fragment11, { children: [
|
|
3681
|
+
/* @__PURE__ */ jsx46(
|
|
3010
3682
|
"span",
|
|
3011
3683
|
{
|
|
3012
3684
|
"aria-hidden": "true",
|
|
@@ -3020,13 +3692,13 @@ function Switch({
|
|
|
3020
3692
|
"group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
|
|
3021
3693
|
styles.control
|
|
3022
3694
|
),
|
|
3023
|
-
children: /* @__PURE__ */
|
|
3695
|
+
children: /* @__PURE__ */ jsx46(
|
|
3024
3696
|
"span",
|
|
3025
3697
|
{
|
|
3026
3698
|
"data-slot": "switch-thumb",
|
|
3027
3699
|
style: {
|
|
3028
3700
|
transform: `translate3d(${thumbOffset}, 0, 0)`,
|
|
3029
|
-
width:
|
|
3701
|
+
width: isThumbPressed ? styles.activeWidth : styles.idleWidth
|
|
3030
3702
|
},
|
|
3031
3703
|
className: cn(
|
|
3032
3704
|
"grid shrink-0 place-items-center rounded-full border border-border/60 bg-background text-[0.625rem] text-muted-foreground shadow-sm",
|
|
@@ -3040,9 +3712,16 @@ function Switch({
|
|
|
3040
3712
|
)
|
|
3041
3713
|
}
|
|
3042
3714
|
),
|
|
3043
|
-
children || description ? /* @__PURE__ */
|
|
3044
|
-
children ? /* @__PURE__ */
|
|
3045
|
-
description ? /* @__PURE__ */
|
|
3715
|
+
children || description ? /* @__PURE__ */ jsxs24("span", { className: "grid gap-0.5 leading-tight", children: [
|
|
3716
|
+
children ? /* @__PURE__ */ jsx46("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
|
|
3717
|
+
description ? /* @__PURE__ */ jsx46(
|
|
3718
|
+
"span",
|
|
3719
|
+
{
|
|
3720
|
+
"data-slot": "switch-description",
|
|
3721
|
+
className: "text-muted-foreground text-xs font-normal",
|
|
3722
|
+
children: description
|
|
3723
|
+
}
|
|
3724
|
+
) : null
|
|
3046
3725
|
] }) : null
|
|
3047
3726
|
] });
|
|
3048
3727
|
}
|
|
@@ -3051,9 +3730,9 @@ function Switch({
|
|
|
3051
3730
|
}
|
|
3052
3731
|
|
|
3053
3732
|
// src/ui/table/table.tsx
|
|
3054
|
-
import { jsx as
|
|
3733
|
+
import { jsx as jsx47 } from "react/jsx-runtime";
|
|
3055
3734
|
function Table({ className, ...props }) {
|
|
3056
|
-
return /* @__PURE__ */
|
|
3735
|
+
return /* @__PURE__ */ jsx47("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ jsx47(
|
|
3057
3736
|
"table",
|
|
3058
3737
|
{
|
|
3059
3738
|
"data-slot": "table",
|
|
@@ -3063,10 +3742,10 @@ function Table({ className, ...props }) {
|
|
|
3063
3742
|
) });
|
|
3064
3743
|
}
|
|
3065
3744
|
function TableHeader({ className, ...props }) {
|
|
3066
|
-
return /* @__PURE__ */
|
|
3745
|
+
return /* @__PURE__ */ jsx47("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
|
|
3067
3746
|
}
|
|
3068
3747
|
function TableBody({ className, ...props }) {
|
|
3069
|
-
return /* @__PURE__ */
|
|
3748
|
+
return /* @__PURE__ */ jsx47(
|
|
3070
3749
|
"tbody",
|
|
3071
3750
|
{
|
|
3072
3751
|
"data-slot": "table-body",
|
|
@@ -3076,7 +3755,7 @@ function TableBody({ className, ...props }) {
|
|
|
3076
3755
|
);
|
|
3077
3756
|
}
|
|
3078
3757
|
function TableRow({ className, ...props }) {
|
|
3079
|
-
return /* @__PURE__ */
|
|
3758
|
+
return /* @__PURE__ */ jsx47(
|
|
3080
3759
|
"tr",
|
|
3081
3760
|
{
|
|
3082
3761
|
"data-slot": "table-row",
|
|
@@ -3089,7 +3768,7 @@ function TableRow({ className, ...props }) {
|
|
|
3089
3768
|
);
|
|
3090
3769
|
}
|
|
3091
3770
|
function TableHead({ className, ...props }) {
|
|
3092
|
-
return /* @__PURE__ */
|
|
3771
|
+
return /* @__PURE__ */ jsx47(
|
|
3093
3772
|
"th",
|
|
3094
3773
|
{
|
|
3095
3774
|
"data-slot": "table-head",
|
|
@@ -3102,7 +3781,7 @@ function TableHead({ className, ...props }) {
|
|
|
3102
3781
|
);
|
|
3103
3782
|
}
|
|
3104
3783
|
function TableCell({ className, ...props }) {
|
|
3105
|
-
return /* @__PURE__ */
|
|
3784
|
+
return /* @__PURE__ */ jsx47(
|
|
3106
3785
|
"td",
|
|
3107
3786
|
{
|
|
3108
3787
|
"data-slot": "table-cell",
|
|
@@ -3112,7 +3791,7 @@ function TableCell({ className, ...props }) {
|
|
|
3112
3791
|
);
|
|
3113
3792
|
}
|
|
3114
3793
|
function TableCaption({ className, ...props }) {
|
|
3115
|
-
return /* @__PURE__ */
|
|
3794
|
+
return /* @__PURE__ */ jsx47(
|
|
3116
3795
|
"caption",
|
|
3117
3796
|
{
|
|
3118
3797
|
"data-slot": "table-caption",
|
|
@@ -3122,11 +3801,14 @@ function TableCaption({ className, ...props }) {
|
|
|
3122
3801
|
);
|
|
3123
3802
|
}
|
|
3124
3803
|
function TableFooter({ className, ...props }) {
|
|
3125
|
-
return /* @__PURE__ */
|
|
3804
|
+
return /* @__PURE__ */ jsx47(
|
|
3126
3805
|
"tfoot",
|
|
3127
3806
|
{
|
|
3128
3807
|
"data-slot": "table-footer",
|
|
3129
|
-
className: cn(
|
|
3808
|
+
className: cn(
|
|
3809
|
+
"border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0",
|
|
3810
|
+
className
|
|
3811
|
+
),
|
|
3130
3812
|
...props
|
|
3131
3813
|
}
|
|
3132
3814
|
);
|
|
@@ -3141,27 +3823,72 @@ import {
|
|
|
3141
3823
|
Tabs as AriaTabs,
|
|
3142
3824
|
composeRenderProps as composeRenderProps2
|
|
3143
3825
|
} from "react-aria-components";
|
|
3144
|
-
import { jsx as
|
|
3826
|
+
import { jsx as jsx48 } from "react/jsx-runtime";
|
|
3145
3827
|
function Tabs({ className, ...props }) {
|
|
3146
|
-
return /* @__PURE__ */
|
|
3828
|
+
return /* @__PURE__ */ jsx48(
|
|
3829
|
+
AriaTabs,
|
|
3830
|
+
{
|
|
3831
|
+
"data-slot": "tabs",
|
|
3832
|
+
className: composeRenderProps2(className, (value) => cn("flex flex-col gap-2", value)),
|
|
3833
|
+
...props
|
|
3834
|
+
}
|
|
3835
|
+
);
|
|
3147
3836
|
}
|
|
3148
3837
|
function TabsList({ className, ...props }) {
|
|
3149
|
-
return /* @__PURE__ */
|
|
3838
|
+
return /* @__PURE__ */ jsx48(
|
|
3839
|
+
AriaTabList,
|
|
3840
|
+
{
|
|
3841
|
+
"data-slot": "tabs-list",
|
|
3842
|
+
className: composeRenderProps2(
|
|
3843
|
+
className,
|
|
3844
|
+
(value) => cn(
|
|
3845
|
+
"inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground",
|
|
3846
|
+
value
|
|
3847
|
+
)
|
|
3848
|
+
),
|
|
3849
|
+
...props
|
|
3850
|
+
}
|
|
3851
|
+
);
|
|
3150
3852
|
}
|
|
3151
3853
|
function TabsTrigger({ className, ...props }) {
|
|
3152
|
-
return /* @__PURE__ */
|
|
3854
|
+
return /* @__PURE__ */ jsx48(
|
|
3855
|
+
AriaTab,
|
|
3856
|
+
{
|
|
3857
|
+
"data-slot": "tabs-trigger",
|
|
3858
|
+
className: composeRenderProps2(
|
|
3859
|
+
className,
|
|
3860
|
+
(value) => cn(
|
|
3861
|
+
"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",
|
|
3862
|
+
value
|
|
3863
|
+
)
|
|
3864
|
+
),
|
|
3865
|
+
...props
|
|
3866
|
+
}
|
|
3867
|
+
);
|
|
3153
3868
|
}
|
|
3154
3869
|
function TabsPanels({ className, ...props }) {
|
|
3155
|
-
return /* @__PURE__ */
|
|
3870
|
+
return /* @__PURE__ */ jsx48(AriaTabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
|
|
3156
3871
|
}
|
|
3157
3872
|
function TabsContent({ className, ...props }) {
|
|
3158
|
-
return /* @__PURE__ */
|
|
3873
|
+
return /* @__PURE__ */ jsx48(
|
|
3874
|
+
AriaTabPanel,
|
|
3875
|
+
{
|
|
3876
|
+
"data-slot": "tabs-content",
|
|
3877
|
+
className: composeRenderProps2(
|
|
3878
|
+
className,
|
|
3879
|
+
(value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)
|
|
3880
|
+
),
|
|
3881
|
+
...props
|
|
3882
|
+
}
|
|
3883
|
+
);
|
|
3159
3884
|
}
|
|
3160
3885
|
|
|
3161
3886
|
// src/ui/toast/toast.tsx
|
|
3162
3887
|
import { useEffect as useEffect6 } from "react";
|
|
3163
|
-
import { sileo, Toaster as SileoToaster } from "sileo";
|
|
3164
|
-
|
|
3888
|
+
import { sileo as sileo2, Toaster as SileoToaster } from "sileo";
|
|
3889
|
+
|
|
3890
|
+
// src/ui/toast/toast-store.ts
|
|
3891
|
+
import { sileo } from "sileo";
|
|
3165
3892
|
function toSileoOptions({ title, description, duration, position, action }) {
|
|
3166
3893
|
return {
|
|
3167
3894
|
title,
|
|
@@ -3190,8 +3917,14 @@ var toast = Object.assign((options) => create(options), {
|
|
|
3190
3917
|
const shared = { description: options.description, position: options.position };
|
|
3191
3918
|
return sileo.promise(promise, {
|
|
3192
3919
|
loading: { ...shared, title: options.loading },
|
|
3193
|
-
success: (value) => ({
|
|
3194
|
-
|
|
3920
|
+
success: (value) => ({
|
|
3921
|
+
...shared,
|
|
3922
|
+
title: typeof options.success === "function" ? options.success(value) : options.success
|
|
3923
|
+
}),
|
|
3924
|
+
error: (error) => ({
|
|
3925
|
+
...shared,
|
|
3926
|
+
title: typeof options.error === "function" ? options.error(error) : options.error
|
|
3927
|
+
}),
|
|
3195
3928
|
position: options.position
|
|
3196
3929
|
});
|
|
3197
3930
|
}
|
|
@@ -3199,26 +3932,43 @@ var toast = Object.assign((options) => create(options), {
|
|
|
3199
3932
|
function useToast() {
|
|
3200
3933
|
return toast;
|
|
3201
3934
|
}
|
|
3935
|
+
|
|
3936
|
+
// src/ui/toast/toast.tsx
|
|
3937
|
+
import { Fragment as Fragment12, jsx as jsx49, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
3202
3938
|
function ToastProvider({ children }) {
|
|
3203
|
-
return /* @__PURE__ */
|
|
3939
|
+
return /* @__PURE__ */ jsxs25(Fragment12, { children: [
|
|
3204
3940
|
children,
|
|
3205
|
-
/* @__PURE__ */
|
|
3941
|
+
/* @__PURE__ */ jsx49(Toaster, {})
|
|
3206
3942
|
] });
|
|
3207
3943
|
}
|
|
3208
3944
|
function Toaster({ position }) {
|
|
3209
|
-
return /* @__PURE__ */
|
|
3945
|
+
return /* @__PURE__ */ jsx49(SileoToaster, { position, options: { fill: "var(--ui-secondary)" } });
|
|
3210
3946
|
}
|
|
3211
|
-
function ToastViewport({
|
|
3947
|
+
function ToastViewport({
|
|
3948
|
+
position,
|
|
3949
|
+
visiblePosition,
|
|
3950
|
+
className
|
|
3951
|
+
}) {
|
|
3212
3952
|
void className;
|
|
3213
3953
|
if (visiblePosition && visiblePosition !== position) return null;
|
|
3214
|
-
return /* @__PURE__ */
|
|
3954
|
+
return /* @__PURE__ */ jsx49(Toaster, { position });
|
|
3215
3955
|
}
|
|
3216
|
-
function Toast({
|
|
3956
|
+
function Toast({
|
|
3957
|
+
id,
|
|
3958
|
+
title,
|
|
3959
|
+
description,
|
|
3960
|
+
variant = "default",
|
|
3961
|
+
action,
|
|
3962
|
+
state,
|
|
3963
|
+
duration = 0,
|
|
3964
|
+
position,
|
|
3965
|
+
onDismiss
|
|
3966
|
+
}) {
|
|
3217
3967
|
useEffect6(() => {
|
|
3218
3968
|
if (state !== "open") return;
|
|
3219
|
-
const toastId =
|
|
3969
|
+
const toastId = toast({ title, description, variant, action, duration, position });
|
|
3220
3970
|
return () => {
|
|
3221
|
-
|
|
3971
|
+
sileo2.dismiss(toastId);
|
|
3222
3972
|
onDismiss?.();
|
|
3223
3973
|
};
|
|
3224
3974
|
}, [action, description, duration, id, onDismiss, position, state, title, variant]);
|
|
@@ -3226,15 +3976,30 @@ function Toast({ id, title, description, variant = "default", action, state = "o
|
|
|
3226
3976
|
}
|
|
3227
3977
|
|
|
3228
3978
|
// src/ui/toolbar/toolbar.tsx
|
|
3229
|
-
import { jsx as
|
|
3979
|
+
import { jsx as jsx50 } from "react/jsx-runtime";
|
|
3230
3980
|
function Toolbar({ className, ...props }) {
|
|
3231
|
-
return /* @__PURE__ */
|
|
3981
|
+
return /* @__PURE__ */ jsx50(
|
|
3982
|
+
"div",
|
|
3983
|
+
{
|
|
3984
|
+
role: "toolbar",
|
|
3985
|
+
"data-slot": "toolbar",
|
|
3986
|
+
className: cn("flex flex-wrap items-center gap-2", className),
|
|
3987
|
+
...props
|
|
3988
|
+
}
|
|
3989
|
+
);
|
|
3232
3990
|
}
|
|
3233
3991
|
function ToolbarGroup({ className, ...props }) {
|
|
3234
|
-
return /* @__PURE__ */
|
|
3992
|
+
return /* @__PURE__ */ jsx50(
|
|
3993
|
+
"div",
|
|
3994
|
+
{
|
|
3995
|
+
"data-slot": "toolbar-group",
|
|
3996
|
+
className: cn("flex items-center gap-2", className),
|
|
3997
|
+
...props
|
|
3998
|
+
}
|
|
3999
|
+
);
|
|
3235
4000
|
}
|
|
3236
4001
|
function ToolbarSpacer({ className, ...props }) {
|
|
3237
|
-
return /* @__PURE__ */
|
|
4002
|
+
return /* @__PURE__ */ jsx50("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
|
|
3238
4003
|
}
|
|
3239
4004
|
export {
|
|
3240
4005
|
Accordion,
|
|
@@ -3312,15 +4077,20 @@ export {
|
|
|
3312
4077
|
DialogHeader,
|
|
3313
4078
|
DialogOverlay,
|
|
3314
4079
|
DialogPortal,
|
|
4080
|
+
DialogRoot,
|
|
3315
4081
|
DialogTitle,
|
|
3316
4082
|
DialogTrigger,
|
|
3317
4083
|
DocPreview,
|
|
3318
4084
|
Drawer,
|
|
4085
|
+
DrawerClose,
|
|
4086
|
+
DrawerContent,
|
|
3319
4087
|
DrawerDescription,
|
|
3320
4088
|
DrawerFooter,
|
|
3321
4089
|
DrawerHeader,
|
|
3322
4090
|
DrawerTitle,
|
|
4091
|
+
DrawerTrigger,
|
|
3323
4092
|
DropdownMenu,
|
|
4093
|
+
DropdownMenuContent,
|
|
3324
4094
|
DropdownMenuGroup,
|
|
3325
4095
|
DropdownMenuItem,
|
|
3326
4096
|
DropdownMenuLabel,
|
|
@@ -3357,6 +4127,12 @@ export {
|
|
|
3357
4127
|
InputGroupInput,
|
|
3358
4128
|
InputGroupText,
|
|
3359
4129
|
InputGroupTextarea,
|
|
4130
|
+
KanbanColumn,
|
|
4131
|
+
KanbanColumnBody,
|
|
4132
|
+
KanbanColumnHeader,
|
|
4133
|
+
KanbanColumnTitle,
|
|
4134
|
+
KanbanEmpty,
|
|
4135
|
+
KanbanViewport,
|
|
3360
4136
|
Kbd,
|
|
3361
4137
|
KbdGroup,
|
|
3362
4138
|
Label2 as Label,
|
|
@@ -3367,7 +4143,6 @@ export {
|
|
|
3367
4143
|
MenuItem,
|
|
3368
4144
|
MenuTrigger,
|
|
3369
4145
|
MetricCard,
|
|
3370
|
-
ModalDialog,
|
|
3371
4146
|
OtpInput2 as OtpInput,
|
|
3372
4147
|
PageHeader,
|
|
3373
4148
|
PageHeaderActions,
|
|
@@ -3396,6 +4171,7 @@ export {
|
|
|
3396
4171
|
SheetTrigger,
|
|
3397
4172
|
Sidebar,
|
|
3398
4173
|
SidebarContent,
|
|
4174
|
+
SidebarContext,
|
|
3399
4175
|
SidebarFooter,
|
|
3400
4176
|
SidebarGroup,
|
|
3401
4177
|
SidebarHeader,
|
|
@@ -3431,6 +4207,7 @@ export {
|
|
|
3431
4207
|
ToolbarGroup,
|
|
3432
4208
|
ToolbarSpacer,
|
|
3433
4209
|
Tooltip,
|
|
4210
|
+
TooltipContent,
|
|
3434
4211
|
TooltipTrigger,
|
|
3435
4212
|
actionRipple,
|
|
3436
4213
|
alertVariants,
|