@doscientos/ui 0.1.28 → 0.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -8
- package/dist/index.cjs +1669 -980
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +338 -278
- package/dist/index.d.ts +338 -278
- package/dist/index.js +1747 -1067
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +23 -14
package/dist/index.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,164 +387,406 @@ 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
|
}
|
|
390
|
-
function
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
const
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
const { open, setOpen } = useAlertDialogContext();
|
|
407
|
-
if (!open) return null;
|
|
408
|
-
return /* @__PURE__ */ jsx3(AlertDialogPortal, { children: /* @__PURE__ */ jsx3(ModalOverlay, { isDismissable: true, isOpen: open, onOpenChange: setOpen, className: "fixed inset-0 isolate z-50 grid place-items-center bg-black/10 p-4 backdrop-blur-[1px]", children: /* @__PURE__ */ jsx3(Modal, { className: cn("w-full max-w-[calc(100%-2rem)] outline-none", size === "sm" ? "sm:max-w-xs" : "sm:max-w-sm", className), children: /* @__PURE__ */ jsx3(AriaDialog, { role: "alertdialog", "data-slot": "alert-dialog-content", className: "grid gap-4 rounded-xl bg-background p-4 text-sm text-foreground ring-1 ring-foreground/10 outline-none", children }) }) }) });
|
|
409
|
-
}
|
|
410
|
-
function AlertDialogHeader({ className, ...props }) {
|
|
411
|
-
return /* @__PURE__ */ jsx3("div", { "data-slot": "alert-dialog-header", className: cn("flex flex-col gap-2 text-center sm:text-left", className), ...props });
|
|
412
|
-
}
|
|
413
|
-
function AlertDialogFooter({ className, ...props }) {
|
|
414
|
-
return /* @__PURE__ */ jsx3("div", { "data-slot": "alert-dialog-footer", className: cn("-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end", className), ...props });
|
|
415
|
-
}
|
|
416
|
-
function AlertDialogTitle({ className, ...props }) {
|
|
417
|
-
return /* @__PURE__ */ jsx3(Heading, { slot: "title", "data-slot": "alert-dialog-title", className: cn("font-heading text-base font-medium", className), ...props });
|
|
418
|
-
}
|
|
419
|
-
function AlertDialogDescription({ className, ...props }) {
|
|
420
|
-
return /* @__PURE__ */ jsx3(Text, { slot: "description", "data-slot": "alert-dialog-description", className: cn("text-sm text-muted-foreground", className), ...props });
|
|
421
|
-
}
|
|
422
|
-
function AlertDialogAction({ className, ...props }) {
|
|
423
|
-
return /* @__PURE__ */ jsx3(Button, { "data-slot": "alert-dialog-action", className: cn(className), ...props });
|
|
424
|
-
}
|
|
425
|
-
function AlertDialogCancel({ children = "Cancelar", onClick, ...props }) {
|
|
426
|
-
const { setOpen } = useAlertDialogContext();
|
|
427
|
-
return /* @__PURE__ */ jsx3(Button, { "data-slot": "alert-dialog-cancel", variant: "outline", onClick, onPress: () => setOpen(false), ...props, children });
|
|
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 });
|
|
428
423
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
{
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
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
443
|
}
|
|
444
|
-
}
|
|
445
|
-
defaultVariants: {
|
|
446
|
-
variant: "default"
|
|
447
|
-
}
|
|
444
|
+
});
|
|
448
445
|
}
|
|
449
|
-
);
|
|
450
|
-
function Alert({ className, variant, ...props }) {
|
|
451
|
-
return /* @__PURE__ */ jsx4(
|
|
452
|
-
"div",
|
|
453
|
-
{
|
|
454
|
-
"data-slot": "alert",
|
|
455
|
-
role: "alert",
|
|
456
|
-
className: cn(alertVariants({ variant }), className),
|
|
457
|
-
...props
|
|
458
|
-
}
|
|
459
|
-
);
|
|
446
|
+
return /* @__PURE__ */ jsx3(Button, { "data-slot": "dialog-trigger", onPress: () => setOpen(true), ...props, children });
|
|
460
447
|
}
|
|
461
|
-
function
|
|
462
|
-
return /* @__PURE__ */
|
|
463
|
-
"div",
|
|
464
|
-
{
|
|
465
|
-
"data-slot": "alert-title",
|
|
466
|
-
className: cn(
|
|
467
|
-
"font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",
|
|
468
|
-
className
|
|
469
|
-
),
|
|
470
|
-
...props
|
|
471
|
-
}
|
|
472
|
-
);
|
|
448
|
+
function DialogPortal({ children }) {
|
|
449
|
+
return /* @__PURE__ */ jsx3(Fragment2, { children });
|
|
473
450
|
}
|
|
474
|
-
function
|
|
475
|
-
|
|
476
|
-
|
|
451
|
+
function DialogOverlay({ children, className, ...props }) {
|
|
452
|
+
const { open, setOpen } = useDialogContext();
|
|
453
|
+
if (!open) return null;
|
|
454
|
+
return /* @__PURE__ */ jsx3(
|
|
455
|
+
ModalOverlay,
|
|
477
456
|
{
|
|
478
|
-
"data-slot": "
|
|
457
|
+
"data-slot": "dialog-overlay",
|
|
458
|
+
isDismissable: true,
|
|
459
|
+
isOpen: open,
|
|
460
|
+
onOpenChange: setOpen,
|
|
479
461
|
className: cn(
|
|
480
|
-
"
|
|
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",
|
|
481
463
|
className
|
|
482
464
|
),
|
|
483
|
-
...props
|
|
465
|
+
...props,
|
|
466
|
+
children
|
|
484
467
|
}
|
|
485
468
|
);
|
|
486
469
|
}
|
|
487
|
-
function
|
|
488
|
-
return /* @__PURE__ */
|
|
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
|
+
] });
|
|
489
477
|
}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
493
|
-
function AppShell({
|
|
478
|
+
function DialogContent({
|
|
479
|
+
children,
|
|
494
480
|
className,
|
|
495
|
-
|
|
481
|
+
contentSlot = "dialog-content",
|
|
482
|
+
onOverlayClick,
|
|
483
|
+
overlaySlot = "dialog-overlay",
|
|
484
|
+
showCloseButton = true,
|
|
496
485
|
...props
|
|
497
486
|
}) {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
"data-slot": "app-shell",
|
|
502
|
-
"data-sidebar-breakpoint": sidebarBreakpoint,
|
|
503
|
-
className: cn("bg-background text-foreground", className),
|
|
504
|
-
...props
|
|
505
|
-
}
|
|
506
|
-
);
|
|
507
|
-
}
|
|
508
|
-
function AppShellSidebar({ className, ...props }) {
|
|
509
|
-
return /* @__PURE__ */ jsx5(
|
|
510
|
-
"aside",
|
|
511
|
-
{
|
|
512
|
-
"data-slot": "app-shell-sidebar",
|
|
513
|
-
className: cn("w-56 shrink-0 border-r border-border bg-card text-foreground", className),
|
|
514
|
-
...props
|
|
515
|
-
}
|
|
516
|
-
);
|
|
517
|
-
}
|
|
518
|
-
function AppShellMain({ className, ...props }) {
|
|
519
|
-
return /* @__PURE__ */ jsx5("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
|
|
520
|
-
}
|
|
521
|
-
function AppShellHeader({ className, ...props }) {
|
|
522
|
-
return /* @__PURE__ */ jsx5(
|
|
523
|
-
"header",
|
|
487
|
+
const { setOpen } = useDialogContext();
|
|
488
|
+
return /* @__PURE__ */ jsx3(DialogPortal, { children: /* @__PURE__ */ jsx3(
|
|
489
|
+
DialogOverlay,
|
|
524
490
|
{
|
|
525
|
-
"data-slot":
|
|
526
|
-
|
|
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
|
+
),
|
|
527
604
|
...props
|
|
528
605
|
}
|
|
529
606
|
);
|
|
530
607
|
}
|
|
531
|
-
|
|
608
|
+
|
|
609
|
+
// src/ui/alert-dialog/alert-dialog.tsx
|
|
610
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
611
|
+
function AlertDialog({ children, open, onOpenChange }) {
|
|
612
|
+
return /* @__PURE__ */ jsx4(Dialog, { open, onOpenChange, children });
|
|
613
|
+
}
|
|
614
|
+
function AlertDialogPortal({ children }) {
|
|
615
|
+
return /* @__PURE__ */ jsx4(DialogPortal, { children });
|
|
616
|
+
}
|
|
617
|
+
function AlertDialogTrigger({
|
|
618
|
+
children,
|
|
619
|
+
...props
|
|
620
|
+
}) {
|
|
621
|
+
return /* @__PURE__ */ jsx4(DialogTrigger, { "data-slot": "alert-dialog-trigger", ...props, children });
|
|
622
|
+
}
|
|
623
|
+
function AlertDialogOverlay({
|
|
532
624
|
className,
|
|
533
625
|
...props
|
|
534
626
|
}) {
|
|
627
|
+
return /* @__PURE__ */ jsx4(DialogOverlay, { "data-slot": "alert-dialog-overlay", className, ...props });
|
|
628
|
+
}
|
|
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
|
+
);
|
|
645
|
+
}
|
|
646
|
+
function AlertDialogHeader({ className, ...props }) {
|
|
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
|
+
);
|
|
655
|
+
}
|
|
656
|
+
function AlertDialogFooter({ className, ...props }) {
|
|
657
|
+
return /* @__PURE__ */ jsx4(DialogFooter, { "data-slot": "alert-dialog-footer", className: cn(className), ...props });
|
|
658
|
+
}
|
|
659
|
+
function AlertDialogTitle({
|
|
660
|
+
className,
|
|
661
|
+
...props
|
|
662
|
+
}) {
|
|
663
|
+
return /* @__PURE__ */ jsx4(DialogTitle, { "data-slot": "alert-dialog-title", className: cn(className), ...props });
|
|
664
|
+
}
|
|
665
|
+
function AlertDialogDescription({
|
|
666
|
+
className,
|
|
667
|
+
...props
|
|
668
|
+
}) {
|
|
669
|
+
return /* @__PURE__ */ jsx4(DialogDescription, { "data-slot": "alert-dialog-description", className: cn(className), ...props });
|
|
670
|
+
}
|
|
671
|
+
function AlertDialogAction({ className, ...props }) {
|
|
672
|
+
return /* @__PURE__ */ jsx4(Button, { "data-slot": "alert-dialog-action", className: cn(className), ...props });
|
|
673
|
+
}
|
|
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 }) });
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
// src/ui/alert/alert-variants.ts
|
|
683
|
+
import { cva as cva3 } from "class-variance-authority";
|
|
684
|
+
var alertVariants = cva3(
|
|
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",
|
|
686
|
+
{
|
|
687
|
+
variants: {
|
|
688
|
+
variant: {
|
|
689
|
+
default: "bg-card text-card-foreground",
|
|
690
|
+
info: "border-info/30 bg-info/5 text-info",
|
|
691
|
+
success: "border-success/30 bg-success/5 text-success",
|
|
692
|
+
warning: "border-warning/30 bg-warning/5 text-warning",
|
|
693
|
+
destructive: "border-destructive/30 bg-destructive/5 text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
|
|
694
|
+
}
|
|
695
|
+
},
|
|
696
|
+
defaultVariants: {
|
|
697
|
+
variant: "default"
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
);
|
|
701
|
+
|
|
702
|
+
// src/ui/alert/alert.tsx
|
|
703
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
|
704
|
+
function Alert({ className, variant, ...props }) {
|
|
535
705
|
return /* @__PURE__ */ jsx5(
|
|
706
|
+
"div",
|
|
707
|
+
{
|
|
708
|
+
"data-slot": "alert",
|
|
709
|
+
role: "alert",
|
|
710
|
+
className: cn(alertVariants({ variant }), className),
|
|
711
|
+
...props
|
|
712
|
+
}
|
|
713
|
+
);
|
|
714
|
+
}
|
|
715
|
+
function AlertTitle({ className, ...props }) {
|
|
716
|
+
return /* @__PURE__ */ jsx5(
|
|
717
|
+
"div",
|
|
718
|
+
{
|
|
719
|
+
"data-slot": "alert-title",
|
|
720
|
+
className: cn(
|
|
721
|
+
"font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground",
|
|
722
|
+
className
|
|
723
|
+
),
|
|
724
|
+
...props
|
|
725
|
+
}
|
|
726
|
+
);
|
|
727
|
+
}
|
|
728
|
+
function AlertDescription({ className, ...props }) {
|
|
729
|
+
return /* @__PURE__ */ jsx5(
|
|
730
|
+
"div",
|
|
731
|
+
{
|
|
732
|
+
"data-slot": "alert-description",
|
|
733
|
+
className: cn(
|
|
734
|
+
"text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",
|
|
735
|
+
className
|
|
736
|
+
),
|
|
737
|
+
...props
|
|
738
|
+
}
|
|
739
|
+
);
|
|
740
|
+
}
|
|
741
|
+
function AlertAction({ className, ...props }) {
|
|
742
|
+
return /* @__PURE__ */ jsx5("div", { "data-slot": "alert-action", className: cn("absolute top-2 right-2", className), ...props });
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
// src/ui/app-shell/app-shell.tsx
|
|
746
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
747
|
+
function AppShell({ className, sidebarBreakpoint = "md", ...props }) {
|
|
748
|
+
return /* @__PURE__ */ jsx6(
|
|
749
|
+
"div",
|
|
750
|
+
{
|
|
751
|
+
"data-slot": "app-shell",
|
|
752
|
+
"data-sidebar-breakpoint": sidebarBreakpoint,
|
|
753
|
+
className: cn("bg-background text-foreground", className),
|
|
754
|
+
...props
|
|
755
|
+
}
|
|
756
|
+
);
|
|
757
|
+
}
|
|
758
|
+
function AppShellSidebar({ className, ...props }) {
|
|
759
|
+
return /* @__PURE__ */ jsx6(
|
|
760
|
+
"aside",
|
|
761
|
+
{
|
|
762
|
+
"data-slot": "app-shell-sidebar",
|
|
763
|
+
className: cn("w-56 shrink-0 border-r border-border bg-card text-foreground", className),
|
|
764
|
+
...props
|
|
765
|
+
}
|
|
766
|
+
);
|
|
767
|
+
}
|
|
768
|
+
function AppShellMain({ className, ...props }) {
|
|
769
|
+
return /* @__PURE__ */ jsx6("main", { "data-slot": "app-shell-main", className: cn("bg-background", className), ...props });
|
|
770
|
+
}
|
|
771
|
+
function AppShellHeader({ className, ...props }) {
|
|
772
|
+
return /* @__PURE__ */ jsx6(
|
|
773
|
+
"header",
|
|
774
|
+
{
|
|
775
|
+
"data-slot": "app-shell-header",
|
|
776
|
+
className: cn("border-b border-border bg-background px-4", className),
|
|
777
|
+
...props
|
|
778
|
+
}
|
|
779
|
+
);
|
|
780
|
+
}
|
|
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,56 +1307,152 @@ 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
|
-
type: "button",
|
|
937
|
-
"data-slot": "collapsible-trigger",
|
|
938
|
-
"data-state": open ? "open" : "closed",
|
|
939
|
-
"aria-controls": contentId,
|
|
940
|
-
"aria-expanded": open,
|
|
941
|
-
onClick: handleClick,
|
|
1313
|
+
type: "button",
|
|
1314
|
+
"data-slot": "collapsible-trigger",
|
|
1315
|
+
"data-state": open ? "open" : "closed",
|
|
1316
|
+
"aria-controls": contentId,
|
|
1317
|
+
"aria-expanded": open,
|
|
1318
|
+
onClick: handleClick,
|
|
1319
|
+
...props,
|
|
1320
|
+
children
|
|
1321
|
+
}
|
|
1322
|
+
);
|
|
1323
|
+
}
|
|
1324
|
+
function CollapsibleContent({ children, ...props }) {
|
|
1325
|
+
const { contentId, open } = useCollapsibleContext();
|
|
1326
|
+
if (!open) return null;
|
|
1327
|
+
return /* @__PURE__ */ jsx14("div", { id: contentId, "data-slot": "collapsible-content", "data-state": "open", ...props, children });
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
// src/ui/combobox/combobox.tsx
|
|
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";
|
|
1344
|
+
var Combobox = AriaComboBox;
|
|
1345
|
+
function ComboboxInput({ className, ...props }) {
|
|
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
|
+
);
|
|
1357
|
+
}
|
|
1358
|
+
function ComboboxContent({ className, ...props }) {
|
|
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
|
+
);
|
|
1370
|
+
}
|
|
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
|
+
);
|
|
1385
|
+
}
|
|
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
|
+
),
|
|
942
1399
|
...props,
|
|
943
1400
|
children
|
|
944
1401
|
}
|
|
945
1402
|
);
|
|
946
1403
|
}
|
|
947
|
-
function
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
}
|
|
961
|
-
|
|
962
|
-
return /* @__PURE__ */ jsx14(Popover, { "data-slot": "combobox-content", className: cn("max-h-72 w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
|
|
963
|
-
}
|
|
964
|
-
function ComboboxList({ className, emptyState, ...props }) {
|
|
965
|
-
return /* @__PURE__ */ jsx14(ListBox, { "data-slot": "combobox-list", className: cn("max-h-64 overflow-y-auto", className), renderEmptyState: emptyState ? () => emptyState : void 0, ...props });
|
|
966
|
-
}
|
|
967
|
-
function ComboboxItem({ className, children, ...props }) {
|
|
968
|
-
return /* @__PURE__ */ jsx14(ListBoxItem, { "data-slot": "combobox-item", className: cn("flex w-full cursor-default items-center justify-between rounded-md px-2 py-2 text-sm outline-none transition-colors data-focused:bg-muted data-focused:text-foreground data-hovered:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
|
|
969
|
-
}
|
|
970
|
-
function HighlightMatch({ text, query, className }) {
|
|
971
|
-
return /* @__PURE__ */ jsx14("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ jsx14("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ jsx14(Fragment4, { children: part.text }, `${part.text}-${index}`)) });
|
|
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__ */
|
|
1360
|
-
}
|
|
1361
|
-
function Fallback({ mimeType, reason }) {
|
|
1362
|
-
const Icon = mimeType?.startsWith("image/") ? Image : FileText;
|
|
1363
|
-
const message = reason === "no-url" ? "No se pudo generar la URL de preview." : "Preview no disponible para este tipo de archivo.";
|
|
1364
|
-
return /* @__PURE__ */ jsxs9("div", { className: "flex flex-col items-center justify-center gap-2 py-14 text-muted-foreground", children: [
|
|
1365
|
-
/* @__PURE__ */ jsx20(Icon, { className: "size-9 opacity-30" }),
|
|
1366
|
-
/* @__PURE__ */ jsx20("p", { className: "text-sm", children: message }),
|
|
1367
|
-
mimeType ? /* @__PURE__ */ jsx20("p", { className: "font-mono text-xs opacity-50", children: mimeType }) : null,
|
|
1368
|
-
/* @__PURE__ */ jsx20("p", { className: "text-xs opacity-50", children: "Usa el bot\xF3n Descargar para abrir el archivo." })
|
|
1369
|
-
] });
|
|
1370
|
-
}
|
|
1371
|
-
|
|
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 }) }) });
|
|
1668
|
+
return /* @__PURE__ */ jsx19(Fallback, { mimeType, reason: "unsupported" });
|
|
1378
1669
|
}
|
|
1379
|
-
function
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
}
|
|
1388
|
-
|
|
1389
|
-
|
|
1670
|
+
function Fallback({
|
|
1671
|
+
mimeType,
|
|
1672
|
+
reason
|
|
1673
|
+
}) {
|
|
1674
|
+
const Icon = mimeType?.startsWith("image/") ? Image : FileText;
|
|
1675
|
+
const message = reason === "no-url" ? "No se pudo generar la URL de preview." : "Preview no disponible para este tipo de archivo.";
|
|
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." })
|
|
1681
|
+
] });
|
|
1390
1682
|
}
|
|
1391
1683
|
|
|
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/field/field.tsx
|
|
1681
|
-
import { cva as cva8 } from "class-variance-authority";
|
|
1682
|
-
|
|
1683
1980
|
// src/ui/label/label.tsx
|
|
1684
1981
|
import { forwardRef } from "react";
|
|
1685
1982
|
import { Label as LabelPrimitive } from "react-aria-components";
|
|
1686
|
-
import { jsx as
|
|
1687
|
-
var Label2 = forwardRef(
|
|
1688
|
-
|
|
1689
|
-
|
|
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
|
|
2002
|
+
import { cva as cva8 } from "class-variance-authority";
|
|
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
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
children: [
|
|
1927
|
-
/* @__PURE__ */ jsx28(Focusable, { children: trigger }),
|
|
1928
|
-
tooltip
|
|
1929
|
-
]
|
|
1930
|
-
}
|
|
1931
|
-
);
|
|
2265
|
+
return /* @__PURE__ */ jsx26(TooltipTriggerPrimitive, { "data-slot": "tooltip-trigger", delay, ...props });
|
|
2266
|
+
}
|
|
2267
|
+
function Tooltip({ label, children, delay, ...props }) {
|
|
2268
|
+
return /* @__PURE__ */ jsxs13(TooltipTrigger, { delay, children: [
|
|
2269
|
+
children,
|
|
2270
|
+
/* @__PURE__ */ jsx26(TooltipContent, { ...props, children: label })
|
|
2271
|
+
] });
|
|
1932
2272
|
}
|
|
1933
|
-
function
|
|
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",
|
|
@@ -2155,22 +2508,54 @@ function InputGroupTextarea({ className, ...props }) {
|
|
|
2155
2508
|
}
|
|
2156
2509
|
|
|
2157
2510
|
// src/ui/kbd/kbd.tsx
|
|
2158
|
-
import { jsx as
|
|
2511
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
2159
2512
|
function Kbd({ className, ...props }) {
|
|
2160
|
-
return /* @__PURE__ */
|
|
2513
|
+
return /* @__PURE__ */ jsx31(
|
|
2514
|
+
"kbd",
|
|
2515
|
+
{
|
|
2516
|
+
"data-slot": "kbd",
|
|
2517
|
+
className: cn(
|
|
2518
|
+
"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",
|
|
2519
|
+
className
|
|
2520
|
+
),
|
|
2521
|
+
...props
|
|
2522
|
+
}
|
|
2523
|
+
);
|
|
2161
2524
|
}
|
|
2162
2525
|
function KbdGroup({ className, ...props }) {
|
|
2163
|
-
return /* @__PURE__ */
|
|
2526
|
+
return /* @__PURE__ */ jsx31(
|
|
2527
|
+
"span",
|
|
2528
|
+
{
|
|
2529
|
+
"data-slot": "kbd-group",
|
|
2530
|
+
className: cn("inline-flex items-center gap-1", className),
|
|
2531
|
+
...props
|
|
2532
|
+
}
|
|
2533
|
+
);
|
|
2164
2534
|
}
|
|
2165
2535
|
|
|
2166
2536
|
// src/ui/loading-overlay/loading-overlay.tsx
|
|
2167
2537
|
import { LoaderCircle as LoaderCircle2 } from "lucide-react";
|
|
2168
|
-
import { jsx as
|
|
2169
|
-
function LoadingOverlay({
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2538
|
+
import { jsx as jsx32, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2539
|
+
function LoadingOverlay({
|
|
2540
|
+
label = "Cargando",
|
|
2541
|
+
className,
|
|
2542
|
+
...props
|
|
2543
|
+
}) {
|
|
2544
|
+
return /* @__PURE__ */ jsx32(
|
|
2545
|
+
"output",
|
|
2546
|
+
{
|
|
2547
|
+
"aria-live": "polite",
|
|
2548
|
+
className: cn(
|
|
2549
|
+
"absolute inset-0 z-10 flex items-center justify-center bg-background/70 backdrop-blur-[2px]",
|
|
2550
|
+
className
|
|
2551
|
+
),
|
|
2552
|
+
...props,
|
|
2553
|
+
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: [
|
|
2554
|
+
/* @__PURE__ */ jsx32(LoaderCircle2, { className: "animate-spin", "aria-hidden": "true" }),
|
|
2555
|
+
/* @__PURE__ */ jsx32("span", { children: label })
|
|
2556
|
+
] })
|
|
2557
|
+
}
|
|
2558
|
+
);
|
|
2174
2559
|
}
|
|
2175
2560
|
|
|
2176
2561
|
// src/ui/menu/menu.tsx
|
|
@@ -2180,20 +2565,41 @@ import {
|
|
|
2180
2565
|
MenuTrigger as AriaMenuTrigger,
|
|
2181
2566
|
Popover as Popover3
|
|
2182
2567
|
} from "react-aria-components";
|
|
2183
|
-
import { jsx as
|
|
2568
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
2184
2569
|
var MenuTrigger = AriaMenuTrigger;
|
|
2185
2570
|
function MenuContent({ className, ...props }) {
|
|
2186
|
-
return /* @__PURE__ */
|
|
2571
|
+
return /* @__PURE__ */ jsx33(
|
|
2572
|
+
Popover3,
|
|
2573
|
+
{
|
|
2574
|
+
"data-slot": "menu-content",
|
|
2575
|
+
className: cn(
|
|
2576
|
+
"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",
|
|
2577
|
+
className
|
|
2578
|
+
),
|
|
2579
|
+
...props
|
|
2580
|
+
}
|
|
2581
|
+
);
|
|
2187
2582
|
}
|
|
2188
2583
|
function Menu({ className, ...props }) {
|
|
2189
|
-
return /* @__PURE__ */
|
|
2584
|
+
return /* @__PURE__ */ jsx33(AriaMenu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
|
|
2190
2585
|
}
|
|
2191
2586
|
function MenuItem({ className, children, ...props }) {
|
|
2192
|
-
return /* @__PURE__ */
|
|
2587
|
+
return /* @__PURE__ */ jsx33(
|
|
2588
|
+
AriaMenuItem,
|
|
2589
|
+
{
|
|
2590
|
+
"data-slot": "menu-item",
|
|
2591
|
+
className: cn(
|
|
2592
|
+
"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",
|
|
2593
|
+
className
|
|
2594
|
+
),
|
|
2595
|
+
...props,
|
|
2596
|
+
children
|
|
2597
|
+
}
|
|
2598
|
+
);
|
|
2193
2599
|
}
|
|
2194
2600
|
|
|
2195
2601
|
// src/ui/metric-card/metric-card.tsx
|
|
2196
|
-
import { jsx as
|
|
2602
|
+
import { jsx as jsx34, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2197
2603
|
function MetricCard({
|
|
2198
2604
|
className,
|
|
2199
2605
|
label,
|
|
@@ -2203,12 +2609,19 @@ function MetricCard({
|
|
|
2203
2609
|
tone = "default",
|
|
2204
2610
|
...props
|
|
2205
2611
|
}) {
|
|
2206
|
-
return /* @__PURE__ */
|
|
2207
|
-
icon ? /* @__PURE__ */
|
|
2208
|
-
/* @__PURE__ */
|
|
2209
|
-
/* @__PURE__ */
|
|
2210
|
-
/* @__PURE__ */
|
|
2211
|
-
|
|
2612
|
+
return /* @__PURE__ */ jsx34(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: [
|
|
2613
|
+
icon ? /* @__PURE__ */ jsx34("div", { "data-slot": "metric-card-icon", className: "text-muted-foreground shrink-0", children: icon }) : null,
|
|
2614
|
+
/* @__PURE__ */ jsxs15("div", { className: "min-w-0", children: [
|
|
2615
|
+
/* @__PURE__ */ jsx34("p", { "data-slot": "metric-card-label", className: "text-muted-foreground text-sm", children: label }),
|
|
2616
|
+
/* @__PURE__ */ jsx34(
|
|
2617
|
+
"strong",
|
|
2618
|
+
{
|
|
2619
|
+
"data-slot": "metric-card-value",
|
|
2620
|
+
className: "mt-1 block text-2xl font-semibold tracking-tight",
|
|
2621
|
+
children: value
|
|
2622
|
+
}
|
|
2623
|
+
),
|
|
2624
|
+
description ? /* @__PURE__ */ jsx34("p", { "data-slot": "metric-card-description", className: "text-muted-foreground mt-1 text-xs", children: description }) : null
|
|
2212
2625
|
] })
|
|
2213
2626
|
] }) });
|
|
2214
2627
|
}
|
|
@@ -2221,7 +2634,7 @@ import {
|
|
|
2221
2634
|
useState as useState10
|
|
2222
2635
|
} from "react";
|
|
2223
2636
|
import { Input as AriaInput3 } from "react-aria-components";
|
|
2224
|
-
import { jsx as
|
|
2637
|
+
import { jsx as jsx35, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
2225
2638
|
function normalizeOtp(value, length) {
|
|
2226
2639
|
return value.replace(/[^0-9]/g, "").slice(0, length);
|
|
2227
2640
|
}
|
|
@@ -2273,7 +2686,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
|
|
|
2273
2686
|
input.setSelectionRange(position, position);
|
|
2274
2687
|
setSelectionStart(position);
|
|
2275
2688
|
}
|
|
2276
|
-
return /* @__PURE__ */
|
|
2689
|
+
return /* @__PURE__ */ jsxs16(
|
|
2277
2690
|
"div",
|
|
2278
2691
|
{
|
|
2279
2692
|
"data-slot": "otp-input",
|
|
@@ -2283,7 +2696,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
|
|
|
2283
2696
|
style: { gridTemplateColumns: `repeat(${slotCount}, minmax(0, 2.5rem))` },
|
|
2284
2697
|
onPointerDown: handlePointerDown,
|
|
2285
2698
|
children: [
|
|
2286
|
-
/* @__PURE__ */
|
|
2699
|
+
/* @__PURE__ */ jsx35(
|
|
2287
2700
|
AriaInput3,
|
|
2288
2701
|
{
|
|
2289
2702
|
...props,
|
|
@@ -2323,7 +2736,7 @@ var OtpInputImpl = forwardRef4(function OtpInput({
|
|
|
2323
2736
|
}
|
|
2324
2737
|
}
|
|
2325
2738
|
),
|
|
2326
|
-
slots.map((slot, index) => /* @__PURE__ */
|
|
2739
|
+
slots.map((slot, index) => /* @__PURE__ */ jsx35(
|
|
2327
2740
|
"span",
|
|
2328
2741
|
{
|
|
2329
2742
|
"aria-hidden": "true",
|
|
@@ -2346,27 +2759,59 @@ var OtpInputImpl = forwardRef4(function OtpInput({
|
|
|
2346
2759
|
var OtpInput2 = OtpInputImpl;
|
|
2347
2760
|
|
|
2348
2761
|
// src/ui/page-header/page-header.tsx
|
|
2349
|
-
import { jsx as
|
|
2762
|
+
import { jsx as jsx36 } from "react/jsx-runtime";
|
|
2350
2763
|
function PageHeader({ className, ...props }) {
|
|
2351
|
-
return /* @__PURE__ */
|
|
2764
|
+
return /* @__PURE__ */ jsx36(
|
|
2765
|
+
"header",
|
|
2766
|
+
{
|
|
2767
|
+
"data-slot": "page-header",
|
|
2768
|
+
className: cn(
|
|
2769
|
+
"flex flex-col gap-4 py-2 sm:flex-row sm:items-center sm:justify-between",
|
|
2770
|
+
className
|
|
2771
|
+
),
|
|
2772
|
+
...props
|
|
2773
|
+
}
|
|
2774
|
+
);
|
|
2352
2775
|
}
|
|
2353
2776
|
function PageHeaderHeading({ className, ...props }) {
|
|
2354
|
-
return /* @__PURE__ */
|
|
2777
|
+
return /* @__PURE__ */ jsx36("div", { "data-slot": "page-header-heading", className: cn("min-w-0", className), ...props });
|
|
2355
2778
|
}
|
|
2356
|
-
function PageHeaderTitle({ className, ...props }) {
|
|
2357
|
-
return /* @__PURE__ */
|
|
2779
|
+
function PageHeaderTitle({ className, children, ...props }) {
|
|
2780
|
+
return /* @__PURE__ */ jsx36(
|
|
2781
|
+
"h1",
|
|
2782
|
+
{
|
|
2783
|
+
"data-slot": "page-header-title",
|
|
2784
|
+
className: cn("truncate text-xl font-semibold tracking-tight md:text-2xl", className),
|
|
2785
|
+
...props,
|
|
2786
|
+
children
|
|
2787
|
+
}
|
|
2788
|
+
);
|
|
2358
2789
|
}
|
|
2359
2790
|
function PageHeaderDescription({ className, ...props }) {
|
|
2360
|
-
return /* @__PURE__ */
|
|
2791
|
+
return /* @__PURE__ */ jsx36(
|
|
2792
|
+
"p",
|
|
2793
|
+
{
|
|
2794
|
+
"data-slot": "page-header-description",
|
|
2795
|
+
className: cn("mt-1 text-sm text-muted-foreground", className),
|
|
2796
|
+
...props
|
|
2797
|
+
}
|
|
2798
|
+
);
|
|
2361
2799
|
}
|
|
2362
2800
|
function PageHeaderActions({ className, ...props }) {
|
|
2363
|
-
return /* @__PURE__ */
|
|
2801
|
+
return /* @__PURE__ */ jsx36(
|
|
2802
|
+
"div",
|
|
2803
|
+
{
|
|
2804
|
+
"data-slot": "page-header-actions",
|
|
2805
|
+
className: cn("flex shrink-0 items-center gap-2", className),
|
|
2806
|
+
...props
|
|
2807
|
+
}
|
|
2808
|
+
);
|
|
2364
2809
|
}
|
|
2365
2810
|
|
|
2366
2811
|
// src/ui/pagination/pagination.tsx
|
|
2367
2812
|
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
2368
|
-
import * as
|
|
2369
|
-
import { jsx as
|
|
2813
|
+
import * as React6 from "react";
|
|
2814
|
+
import { jsx as jsx37, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
2370
2815
|
function visiblePages(page, pageCount, siblingCount) {
|
|
2371
2816
|
return [
|
|
2372
2817
|
.../* @__PURE__ */ new Set([
|
|
@@ -2387,15 +2832,15 @@ function Pagination({
|
|
|
2387
2832
|
}) {
|
|
2388
2833
|
if (pageCount <= 1) return null;
|
|
2389
2834
|
const pages = visiblePages(page, pageCount, siblingCount);
|
|
2390
|
-
return /* @__PURE__ */
|
|
2835
|
+
return /* @__PURE__ */ jsxs17(
|
|
2391
2836
|
"nav",
|
|
2392
2837
|
{
|
|
2393
2838
|
"aria-label": ariaLabel,
|
|
2394
2839
|
className: cn("flex flex-wrap items-center justify-between gap-4", className),
|
|
2395
2840
|
children: [
|
|
2396
|
-
/* @__PURE__ */
|
|
2397
|
-
/* @__PURE__ */
|
|
2398
|
-
/* @__PURE__ */
|
|
2841
|
+
/* @__PURE__ */ jsx37("p", { className: "text-muted-foreground text-sm", children: summary ?? `P\xE1gina ${page} de ${pageCount}` }),
|
|
2842
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-1", children: [
|
|
2843
|
+
/* @__PURE__ */ jsx37(
|
|
2399
2844
|
Button,
|
|
2400
2845
|
{
|
|
2401
2846
|
"aria-label": "P\xE1gina anterior",
|
|
@@ -2403,14 +2848,14 @@ function Pagination({
|
|
|
2403
2848
|
onPress: () => onPageChange(page - 1),
|
|
2404
2849
|
size: "icon",
|
|
2405
2850
|
variant: "ghost",
|
|
2406
|
-
children: /* @__PURE__ */
|
|
2851
|
+
children: /* @__PURE__ */ jsx37(ChevronLeft, {})
|
|
2407
2852
|
}
|
|
2408
2853
|
),
|
|
2409
2854
|
pages.map((item, index) => {
|
|
2410
2855
|
const previousPage = pages[index - 1];
|
|
2411
|
-
return /* @__PURE__ */
|
|
2412
|
-
previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */
|
|
2413
|
-
/* @__PURE__ */
|
|
2856
|
+
return /* @__PURE__ */ jsxs17(React6.Fragment, { children: [
|
|
2857
|
+
previousPage !== void 0 && item > previousPage + 1 ? /* @__PURE__ */ jsx37("span", { "aria-hidden": "true", className: "text-muted-foreground px-1", children: "\u2026" }) : null,
|
|
2858
|
+
/* @__PURE__ */ jsx37(
|
|
2414
2859
|
Button,
|
|
2415
2860
|
{
|
|
2416
2861
|
"aria-current": item === page ? "page" : void 0,
|
|
@@ -2423,7 +2868,7 @@ function Pagination({
|
|
|
2423
2868
|
)
|
|
2424
2869
|
] }, item);
|
|
2425
2870
|
}),
|
|
2426
|
-
/* @__PURE__ */
|
|
2871
|
+
/* @__PURE__ */ jsx37(
|
|
2427
2872
|
Button,
|
|
2428
2873
|
{
|
|
2429
2874
|
"aria-label": "P\xE1gina siguiente",
|
|
@@ -2431,7 +2876,7 @@ function Pagination({
|
|
|
2431
2876
|
onPress: () => onPageChange(page + 1),
|
|
2432
2877
|
size: "icon",
|
|
2433
2878
|
variant: "ghost",
|
|
2434
|
-
children: /* @__PURE__ */
|
|
2879
|
+
children: /* @__PURE__ */ jsx37(ChevronRight, {})
|
|
2435
2880
|
}
|
|
2436
2881
|
)
|
|
2437
2882
|
] })
|
|
@@ -2445,12 +2890,31 @@ import {
|
|
|
2445
2890
|
DialogTrigger as AriaDialogTrigger,
|
|
2446
2891
|
Popover as AriaPopover
|
|
2447
2892
|
} from "react-aria-components";
|
|
2448
|
-
import { jsx as
|
|
2893
|
+
import { jsx as jsx38, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
2449
2894
|
var PopoverTrigger = AriaDialogTrigger;
|
|
2450
|
-
function
|
|
2451
|
-
return /* @__PURE__ */
|
|
2895
|
+
function PopoverContent({ className, ...props }) {
|
|
2896
|
+
return /* @__PURE__ */ jsx38(
|
|
2897
|
+
AriaPopover,
|
|
2898
|
+
{
|
|
2899
|
+
"data-slot": "popover",
|
|
2900
|
+
offset: 6,
|
|
2901
|
+
className: cn(
|
|
2902
|
+
"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",
|
|
2903
|
+
className
|
|
2904
|
+
),
|
|
2905
|
+
...props
|
|
2906
|
+
}
|
|
2907
|
+
);
|
|
2908
|
+
}
|
|
2909
|
+
function Popover4(props) {
|
|
2910
|
+
if (!("trigger" in props)) return /* @__PURE__ */ jsx38(PopoverContent, { ...props });
|
|
2911
|
+
const { children, trigger, triggerProps, defaultOpen, isOpen, onOpenChange, ...contentProps } = props;
|
|
2912
|
+
const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ jsx38(Button, { ...triggerProps, children: trigger }) : trigger;
|
|
2913
|
+
return /* @__PURE__ */ jsxs18(PopoverTrigger, { defaultOpen, isOpen, onOpenChange, children: [
|
|
2914
|
+
triggerElement,
|
|
2915
|
+
/* @__PURE__ */ jsx38(PopoverContent, { ...contentProps, children })
|
|
2916
|
+
] });
|
|
2452
2917
|
}
|
|
2453
|
-
var PopoverContent = Popover4;
|
|
2454
2918
|
|
|
2455
2919
|
// src/ui/quantity-input/quantity-input.tsx
|
|
2456
2920
|
import { Minus, Plus } from "lucide-react";
|
|
@@ -2460,7 +2924,7 @@ import {
|
|
|
2460
2924
|
Input as AriaInput4,
|
|
2461
2925
|
NumberField as AriaNumberField
|
|
2462
2926
|
} from "react-aria-components";
|
|
2463
|
-
import { jsx as
|
|
2927
|
+
import { jsx as jsx39, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2464
2928
|
function QuantityInput({
|
|
2465
2929
|
className,
|
|
2466
2930
|
inputClassName,
|
|
@@ -2470,23 +2934,53 @@ function QuantityInput({
|
|
|
2470
2934
|
step = 1,
|
|
2471
2935
|
...props
|
|
2472
2936
|
}) {
|
|
2473
|
-
return /* @__PURE__ */
|
|
2937
|
+
return /* @__PURE__ */ jsx39(
|
|
2474
2938
|
AriaNumberField,
|
|
2475
2939
|
{
|
|
2476
2940
|
...props,
|
|
2477
2941
|
minValue,
|
|
2478
2942
|
step,
|
|
2479
2943
|
"data-slot": "quantity-input",
|
|
2480
|
-
className: cn(
|
|
2481
|
-
|
|
2944
|
+
className: cn(
|
|
2945
|
+
"group/quantity-input inline-flex min-w-0 data-disabled:cursor-not-allowed data-disabled:opacity-50",
|
|
2946
|
+
className
|
|
2947
|
+
),
|
|
2948
|
+
children: /* @__PURE__ */ jsxs19(
|
|
2482
2949
|
AriaGroup,
|
|
2483
2950
|
{
|
|
2484
2951
|
"data-slot": "quantity-input-group",
|
|
2485
|
-
className: "flex h-8 min-w-0 items-stretch overflow-hidden rounded-lg border
|
|
2952
|
+
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
2953
|
children: [
|
|
2487
|
-
/* @__PURE__ */
|
|
2488
|
-
|
|
2489
|
-
|
|
2954
|
+
/* @__PURE__ */ jsx39(
|
|
2955
|
+
AriaButton,
|
|
2956
|
+
{
|
|
2957
|
+
slot: "decrement",
|
|
2958
|
+
"aria-label": decrementAriaLabel,
|
|
2959
|
+
"data-slot": "quantity-input-decrement",
|
|
2960
|
+
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",
|
|
2961
|
+
children: /* @__PURE__ */ jsx39(Minus, { "aria-hidden": "true", className: "size-4" })
|
|
2962
|
+
}
|
|
2963
|
+
),
|
|
2964
|
+
/* @__PURE__ */ jsx39(
|
|
2965
|
+
AriaInput4,
|
|
2966
|
+
{
|
|
2967
|
+
"data-slot": "quantity-input-value",
|
|
2968
|
+
className: cn(
|
|
2969
|
+
"w-14 min-w-0 bg-transparent px-1 text-center text-sm tabular-nums outline-none",
|
|
2970
|
+
inputClassName
|
|
2971
|
+
)
|
|
2972
|
+
}
|
|
2973
|
+
),
|
|
2974
|
+
/* @__PURE__ */ jsx39(
|
|
2975
|
+
AriaButton,
|
|
2976
|
+
{
|
|
2977
|
+
slot: "increment",
|
|
2978
|
+
"aria-label": incrementAriaLabel,
|
|
2979
|
+
"data-slot": "quantity-input-increment",
|
|
2980
|
+
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",
|
|
2981
|
+
children: /* @__PURE__ */ jsx39(Plus, { "aria-hidden": "true", className: "size-4" })
|
|
2982
|
+
}
|
|
2983
|
+
)
|
|
2490
2984
|
]
|
|
2491
2985
|
}
|
|
2492
2986
|
)
|
|
@@ -2495,6 +2989,7 @@ function QuantityInput({
|
|
|
2495
2989
|
}
|
|
2496
2990
|
|
|
2497
2991
|
// src/ui/select/select.tsx
|
|
2992
|
+
import { ChevronDown as ChevronDown2 } from "lucide-react";
|
|
2498
2993
|
import {
|
|
2499
2994
|
Button as AriaButton2,
|
|
2500
2995
|
Select as AriaSelect,
|
|
@@ -2503,44 +2998,99 @@ import {
|
|
|
2503
2998
|
ListBoxItem as ListBoxItem3,
|
|
2504
2999
|
Popover as Popover5
|
|
2505
3000
|
} from "react-aria-components";
|
|
2506
|
-
import {
|
|
2507
|
-
import { Fragment as Fragment11, jsx as jsx42, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
3001
|
+
import { Fragment as Fragment8, jsx as jsx40, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2508
3002
|
var Select = AriaSelect;
|
|
2509
3003
|
function SelectTrigger({ className, children, ...props }) {
|
|
2510
|
-
return /* @__PURE__ */
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
3004
|
+
return /* @__PURE__ */ jsx40(
|
|
3005
|
+
AriaButton2,
|
|
3006
|
+
{
|
|
3007
|
+
"data-slot": "select-trigger",
|
|
3008
|
+
className: cn(
|
|
3009
|
+
"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",
|
|
3010
|
+
className
|
|
3011
|
+
),
|
|
3012
|
+
...props,
|
|
3013
|
+
children: (state) => /* @__PURE__ */ jsxs20(Fragment8, { children: [
|
|
3014
|
+
typeof children === "function" ? children(state) : children,
|
|
3015
|
+
/* @__PURE__ */ jsx40(
|
|
3016
|
+
ChevronDown2,
|
|
3017
|
+
{
|
|
3018
|
+
"aria-hidden": "true",
|
|
3019
|
+
className: "text-muted-foreground ml-auto size-4 transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none"
|
|
3020
|
+
}
|
|
3021
|
+
)
|
|
3022
|
+
] })
|
|
3023
|
+
}
|
|
3024
|
+
);
|
|
2514
3025
|
}
|
|
2515
3026
|
function SelectValue({ className, ...props }) {
|
|
2516
|
-
return /* @__PURE__ */
|
|
3027
|
+
return /* @__PURE__ */ jsx40(
|
|
3028
|
+
AriaSelectValue,
|
|
3029
|
+
{
|
|
3030
|
+
"data-slot": "select-value",
|
|
3031
|
+
className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className),
|
|
3032
|
+
...props
|
|
3033
|
+
}
|
|
3034
|
+
);
|
|
2517
3035
|
}
|
|
2518
3036
|
function SelectContent({ className, ...props }) {
|
|
2519
|
-
return /* @__PURE__ */
|
|
3037
|
+
return /* @__PURE__ */ jsx40(
|
|
3038
|
+
Popover5,
|
|
3039
|
+
{
|
|
3040
|
+
"data-slot": "select-content",
|
|
3041
|
+
className: cn(
|
|
3042
|
+
"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",
|
|
3043
|
+
className
|
|
3044
|
+
),
|
|
3045
|
+
...props
|
|
3046
|
+
}
|
|
3047
|
+
);
|
|
2520
3048
|
}
|
|
2521
3049
|
function SelectList({ className, ...props }) {
|
|
2522
|
-
return /* @__PURE__ */
|
|
3050
|
+
return /* @__PURE__ */ jsx40(
|
|
3051
|
+
ListBox3,
|
|
3052
|
+
{
|
|
3053
|
+
"data-slot": "select-list",
|
|
3054
|
+
className: cn("max-h-64 overflow-y-auto", className),
|
|
3055
|
+
...props
|
|
3056
|
+
}
|
|
3057
|
+
);
|
|
2523
3058
|
}
|
|
2524
|
-
function SelectItem({
|
|
2525
|
-
|
|
3059
|
+
function SelectItem({
|
|
3060
|
+
className,
|
|
3061
|
+
children,
|
|
3062
|
+
...props
|
|
3063
|
+
}) {
|
|
3064
|
+
return /* @__PURE__ */ jsx40(
|
|
3065
|
+
ListBoxItem3,
|
|
3066
|
+
{
|
|
3067
|
+
"data-slot": "select-item",
|
|
3068
|
+
className: cn(
|
|
3069
|
+
"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",
|
|
3070
|
+
className
|
|
3071
|
+
),
|
|
3072
|
+
...props,
|
|
3073
|
+
children
|
|
3074
|
+
}
|
|
3075
|
+
);
|
|
2526
3076
|
}
|
|
2527
3077
|
|
|
2528
3078
|
// src/ui/sheet/sheet.tsx
|
|
2529
3079
|
import { XIcon as XIcon2 } from "lucide-react";
|
|
2530
3080
|
import {
|
|
2531
|
-
Heading as
|
|
3081
|
+
Heading as Heading3,
|
|
2532
3082
|
ModalOverlay as ModalOverlayPrimitive,
|
|
2533
3083
|
Modal as ModalPrimitive,
|
|
2534
3084
|
Dialog as SheetPrimitive,
|
|
2535
3085
|
DialogTrigger as SheetTriggerPrimitive,
|
|
2536
|
-
Text as
|
|
3086
|
+
Text as Text3
|
|
2537
3087
|
} from "react-aria-components";
|
|
2538
|
-
import { jsx as
|
|
3088
|
+
import { jsx as jsx41, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2539
3089
|
function SheetTrigger({ ...props }) {
|
|
2540
|
-
return /* @__PURE__ */
|
|
3090
|
+
return /* @__PURE__ */ jsx41(SheetTriggerPrimitive, { "data-slot": "sheet-trigger", ...props });
|
|
2541
3091
|
}
|
|
2542
3092
|
function SheetClose({ className, variant = "outline", size = "default", ...props }) {
|
|
2543
|
-
return /* @__PURE__ */
|
|
3093
|
+
return /* @__PURE__ */ jsx41(
|
|
2544
3094
|
Button,
|
|
2545
3095
|
{
|
|
2546
3096
|
slot: "close",
|
|
@@ -2557,7 +3107,7 @@ function SheetOverlay({
|
|
|
2557
3107
|
children,
|
|
2558
3108
|
...props
|
|
2559
3109
|
}) {
|
|
2560
|
-
return /* @__PURE__ */
|
|
3110
|
+
return /* @__PURE__ */ jsx41(
|
|
2561
3111
|
ModalOverlayPrimitive,
|
|
2562
3112
|
{
|
|
2563
3113
|
"data-slot": "sheet-overlay",
|
|
@@ -2578,7 +3128,7 @@ function Sheet({
|
|
|
2578
3128
|
showCloseButton = true,
|
|
2579
3129
|
...props
|
|
2580
3130
|
}) {
|
|
2581
|
-
return /* @__PURE__ */
|
|
3131
|
+
return /* @__PURE__ */ jsx41(SheetOverlay, { ...props, children: /* @__PURE__ */ jsx41(
|
|
2582
3132
|
ModalPrimitive,
|
|
2583
3133
|
{
|
|
2584
3134
|
"data-slot": "sheet-content",
|
|
@@ -2587,16 +3137,16 @@ function Sheet({
|
|
|
2587
3137
|
"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
3138
|
className
|
|
2589
3139
|
),
|
|
2590
|
-
children: /* @__PURE__ */
|
|
3140
|
+
children: /* @__PURE__ */ jsxs21(
|
|
2591
3141
|
SheetPrimitive,
|
|
2592
3142
|
{
|
|
2593
3143
|
"data-slot": "sheet",
|
|
2594
3144
|
className: "[display:inherit] h-full max-h-[inherit] [flex-direction:inherit] gap-[inherit] outline-none",
|
|
2595
3145
|
children: [
|
|
2596
3146
|
children,
|
|
2597
|
-
showCloseButton && /* @__PURE__ */
|
|
2598
|
-
/* @__PURE__ */
|
|
2599
|
-
/* @__PURE__ */
|
|
3147
|
+
showCloseButton && /* @__PURE__ */ jsxs21(SheetClose, { variant: "ghost", className: "absolute top-3 right-3", size: "icon-sm", children: [
|
|
3148
|
+
/* @__PURE__ */ jsx41(XIcon2, {}),
|
|
3149
|
+
/* @__PURE__ */ jsx41("span", { className: "sr-only", children: "Cerrar" })
|
|
2600
3150
|
] })
|
|
2601
3151
|
]
|
|
2602
3152
|
}
|
|
@@ -2611,10 +3161,25 @@ function SheetContent({
|
|
|
2611
3161
|
showCloseButton = true,
|
|
2612
3162
|
...props
|
|
2613
3163
|
}) {
|
|
2614
|
-
return /* @__PURE__ */
|
|
3164
|
+
return /* @__PURE__ */ jsx41(Sheet, { className, side, showCloseButton, ...props, children });
|
|
3165
|
+
}
|
|
3166
|
+
function Drawer({
|
|
3167
|
+
children,
|
|
3168
|
+
trigger,
|
|
3169
|
+
triggerProps,
|
|
3170
|
+
defaultOpen,
|
|
3171
|
+
isOpen,
|
|
3172
|
+
onOpenChange,
|
|
3173
|
+
...contentProps
|
|
3174
|
+
}) {
|
|
3175
|
+
const triggerElement = typeof trigger === "string" ? /* @__PURE__ */ jsx41(Button, { ...triggerProps, children: trigger }) : trigger;
|
|
3176
|
+
return /* @__PURE__ */ jsxs21(SheetTrigger, { defaultOpen, isOpen, onOpenChange, children: [
|
|
3177
|
+
triggerElement,
|
|
3178
|
+
/* @__PURE__ */ jsx41(SheetContent, { ...contentProps, children })
|
|
3179
|
+
] });
|
|
2615
3180
|
}
|
|
2616
3181
|
function SheetHeader({ className, ...props }) {
|
|
2617
|
-
return /* @__PURE__ */
|
|
3182
|
+
return /* @__PURE__ */ jsx41(
|
|
2618
3183
|
"div",
|
|
2619
3184
|
{
|
|
2620
3185
|
"data-slot": "sheet-header",
|
|
@@ -2624,7 +3189,7 @@ function SheetHeader({ className, ...props }) {
|
|
|
2624
3189
|
);
|
|
2625
3190
|
}
|
|
2626
3191
|
function SheetFooter({ className, ...props }) {
|
|
2627
|
-
return /* @__PURE__ */
|
|
3192
|
+
return /* @__PURE__ */ jsx41(
|
|
2628
3193
|
"div",
|
|
2629
3194
|
{
|
|
2630
3195
|
"data-slot": "sheet-footer",
|
|
@@ -2634,8 +3199,8 @@ function SheetFooter({ className, ...props }) {
|
|
|
2634
3199
|
);
|
|
2635
3200
|
}
|
|
2636
3201
|
function SheetTitle({ className, ...props }) {
|
|
2637
|
-
return /* @__PURE__ */
|
|
2638
|
-
|
|
3202
|
+
return /* @__PURE__ */ jsx41(
|
|
3203
|
+
Heading3,
|
|
2639
3204
|
{
|
|
2640
3205
|
slot: "title",
|
|
2641
3206
|
"data-slot": "sheet-title",
|
|
@@ -2648,8 +3213,8 @@ function SheetDescription({
|
|
|
2648
3213
|
className,
|
|
2649
3214
|
...props
|
|
2650
3215
|
}) {
|
|
2651
|
-
return /* @__PURE__ */
|
|
2652
|
-
|
|
3216
|
+
return /* @__PURE__ */ jsx41(
|
|
3217
|
+
Text3,
|
|
2653
3218
|
{
|
|
2654
3219
|
slot: "description",
|
|
2655
3220
|
"data-slot": "sheet-description",
|
|
@@ -2658,29 +3223,30 @@ function SheetDescription({
|
|
|
2658
3223
|
}
|
|
2659
3224
|
);
|
|
2660
3225
|
}
|
|
3226
|
+
var DrawerTrigger = SheetTrigger;
|
|
3227
|
+
var DrawerContent = SheetContent;
|
|
3228
|
+
var DrawerClose = SheetClose;
|
|
3229
|
+
var DrawerHeader = SheetHeader;
|
|
3230
|
+
var DrawerFooter = SheetFooter;
|
|
3231
|
+
var DrawerTitle = SheetTitle;
|
|
3232
|
+
var DrawerDescription = SheetDescription;
|
|
2661
3233
|
|
|
2662
3234
|
// 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";
|
|
3235
|
+
import { ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight2, Ellipsis, Search } from "lucide-react";
|
|
3236
|
+
import { useMemo as useMemo2, useState as useState11 } from "react";
|
|
2675
3237
|
import { Link as Link3 } from "react-aria-components";
|
|
2676
|
-
|
|
2677
|
-
|
|
3238
|
+
|
|
3239
|
+
// src/ui/sidebar/sidebar-context.ts
|
|
3240
|
+
import { createContext as createContext4, useContext as useContext4 } from "react";
|
|
3241
|
+
var SidebarContext = createContext4(null);
|
|
2678
3242
|
function useSidebar() {
|
|
2679
|
-
const context =
|
|
2680
|
-
if (!context)
|
|
2681
|
-
throw new Error("useSidebar must be used inside SidebarProvider");
|
|
3243
|
+
const context = useContext4(SidebarContext);
|
|
3244
|
+
if (!context) throw new Error("useSidebar must be used inside SidebarProvider");
|
|
2682
3245
|
return context;
|
|
2683
3246
|
}
|
|
3247
|
+
|
|
3248
|
+
// src/ui/sidebar/sidebar.tsx
|
|
3249
|
+
import { Fragment as Fragment9, jsx as jsx42, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2684
3250
|
function SidebarProvider({
|
|
2685
3251
|
defaultCollapsed = false,
|
|
2686
3252
|
children
|
|
@@ -2694,14 +3260,11 @@ function SidebarProvider({
|
|
|
2694
3260
|
}),
|
|
2695
3261
|
[collapsed]
|
|
2696
3262
|
);
|
|
2697
|
-
return /* @__PURE__ */
|
|
3263
|
+
return /* @__PURE__ */ jsx42(SidebarContext.Provider, { value, children });
|
|
2698
3264
|
}
|
|
2699
|
-
function Sidebar({
|
|
2700
|
-
className,
|
|
2701
|
-
...props
|
|
2702
|
-
}) {
|
|
3265
|
+
function Sidebar({ className, ...props }) {
|
|
2703
3266
|
const { collapsed } = useSidebar();
|
|
2704
|
-
return /* @__PURE__ */
|
|
3267
|
+
return /* @__PURE__ */ jsx42(
|
|
2705
3268
|
"aside",
|
|
2706
3269
|
{
|
|
2707
3270
|
"data-slot": "sidebar",
|
|
@@ -2714,11 +3277,8 @@ function Sidebar({
|
|
|
2714
3277
|
}
|
|
2715
3278
|
);
|
|
2716
3279
|
}
|
|
2717
|
-
function SidebarHeader({
|
|
2718
|
-
|
|
2719
|
-
...props
|
|
2720
|
-
}) {
|
|
2721
|
-
return /* @__PURE__ */ jsx44(
|
|
3280
|
+
function SidebarHeader({ className, ...props }) {
|
|
3281
|
+
return /* @__PURE__ */ jsx42(
|
|
2722
3282
|
"div",
|
|
2723
3283
|
{
|
|
2724
3284
|
"data-slot": "sidebar-header",
|
|
@@ -2733,7 +3293,7 @@ function SidebarSearch({
|
|
|
2733
3293
|
className,
|
|
2734
3294
|
...props
|
|
2735
3295
|
}) {
|
|
2736
|
-
return /* @__PURE__ */
|
|
3296
|
+
return /* @__PURE__ */ jsxs22(
|
|
2737
3297
|
"button",
|
|
2738
3298
|
{
|
|
2739
3299
|
type: "button",
|
|
@@ -2744,18 +3304,15 @@ function SidebarSearch({
|
|
|
2744
3304
|
),
|
|
2745
3305
|
...props,
|
|
2746
3306
|
children: [
|
|
2747
|
-
/* @__PURE__ */
|
|
2748
|
-
/* @__PURE__ */
|
|
2749
|
-
/* @__PURE__ */
|
|
3307
|
+
/* @__PURE__ */ jsx42(Search, { className: "size-4 shrink-0" }),
|
|
3308
|
+
/* @__PURE__ */ jsx42("span", { className: "flex-1 text-left", children: label }),
|
|
3309
|
+
/* @__PURE__ */ jsx42("kbd", { className: "bg-secondary text-muted-foreground rounded px-1.5 py-0.5 font-mono text-[10px]", children: shortcut })
|
|
2750
3310
|
]
|
|
2751
3311
|
}
|
|
2752
3312
|
);
|
|
2753
3313
|
}
|
|
2754
|
-
function SidebarContent({
|
|
2755
|
-
|
|
2756
|
-
...props
|
|
2757
|
-
}) {
|
|
2758
|
-
return /* @__PURE__ */ jsx44(
|
|
3314
|
+
function SidebarContent({ className, ...props }) {
|
|
3315
|
+
return /* @__PURE__ */ jsx42(
|
|
2759
3316
|
"nav",
|
|
2760
3317
|
{
|
|
2761
3318
|
"data-slot": "sidebar-content",
|
|
@@ -2765,18 +3322,12 @@ function SidebarContent({
|
|
|
2765
3322
|
}
|
|
2766
3323
|
);
|
|
2767
3324
|
}
|
|
2768
|
-
function SidebarFooter({
|
|
2769
|
-
|
|
2770
|
-
...props
|
|
2771
|
-
}) {
|
|
2772
|
-
return /* @__PURE__ */ jsx44(
|
|
3325
|
+
function SidebarFooter({ className, ...props }) {
|
|
3326
|
+
return /* @__PURE__ */ jsx42(
|
|
2773
3327
|
"div",
|
|
2774
3328
|
{
|
|
2775
3329
|
"data-slot": "sidebar-footer",
|
|
2776
|
-
className: cn(
|
|
2777
|
-
"mt-auto flex flex-col gap-2 border-t border-border p-2",
|
|
2778
|
-
className
|
|
2779
|
-
),
|
|
3330
|
+
className: cn("mt-auto flex flex-col gap-2 border-t border-border p-2", className),
|
|
2780
3331
|
...props
|
|
2781
3332
|
}
|
|
2782
3333
|
);
|
|
@@ -2788,27 +3339,19 @@ function SidebarGroup({
|
|
|
2788
3339
|
...props
|
|
2789
3340
|
}) {
|
|
2790
3341
|
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
|
-
}
|
|
3342
|
+
return /* @__PURE__ */ jsxs22("section", { "data-slot": "sidebar-group", className: cn("mb-4 last:mb-0", className), ...props, children: [
|
|
3343
|
+
label && /* @__PURE__ */ jsx42(
|
|
3344
|
+
"h2",
|
|
3345
|
+
{
|
|
3346
|
+
className: cn(
|
|
3347
|
+
"mb-1 px-3 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",
|
|
3348
|
+
collapsed && "sr-only"
|
|
2807
3349
|
),
|
|
2808
|
-
children
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
3350
|
+
children: label
|
|
3351
|
+
}
|
|
3352
|
+
),
|
|
3353
|
+
children
|
|
3354
|
+
] });
|
|
2812
3355
|
}
|
|
2813
3356
|
function SidebarItem({
|
|
2814
3357
|
icon,
|
|
@@ -2821,7 +3364,7 @@ function SidebarItem({
|
|
|
2821
3364
|
}) {
|
|
2822
3365
|
const { collapsed } = useSidebar();
|
|
2823
3366
|
const content = typeof children === "function" ? label : children ?? label;
|
|
2824
|
-
return /* @__PURE__ */
|
|
3367
|
+
return /* @__PURE__ */ jsx42(
|
|
2825
3368
|
Link3,
|
|
2826
3369
|
{
|
|
2827
3370
|
"data-slot": "sidebar-item",
|
|
@@ -2833,25 +3376,16 @@ function SidebarItem({
|
|
|
2833
3376
|
typeof className === "function" ? className : className
|
|
2834
3377
|
),
|
|
2835
3378
|
...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 })
|
|
3379
|
+
children: (values) => /* @__PURE__ */ jsxs22(Fragment9, { children: [
|
|
3380
|
+
/* @__PURE__ */ jsx42("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
|
|
3381
|
+
/* @__PURE__ */ jsx42("span", { className: cn("min-w-0 flex-1 truncate", collapsed && "sr-only"), children: typeof children === "function" ? children(values) : content }),
|
|
3382
|
+
badge && !collapsed && /* @__PURE__ */ jsx42("span", { className: "text-muted-foreground text-xs", children: badge })
|
|
2846
3383
|
] })
|
|
2847
3384
|
}
|
|
2848
3385
|
);
|
|
2849
3386
|
}
|
|
2850
|
-
function SidebarSeparator({
|
|
2851
|
-
|
|
2852
|
-
...props
|
|
2853
|
-
}) {
|
|
2854
|
-
return /* @__PURE__ */ jsx44(
|
|
3387
|
+
function SidebarSeparator({ className, ...props }) {
|
|
3388
|
+
return /* @__PURE__ */ jsx42(
|
|
2855
3389
|
"hr",
|
|
2856
3390
|
{
|
|
2857
3391
|
"data-slot": "sidebar-separator",
|
|
@@ -2862,7 +3396,7 @@ function SidebarSeparator({
|
|
|
2862
3396
|
}
|
|
2863
3397
|
function SidebarTrigger({ className, ...props }) {
|
|
2864
3398
|
const { collapsed, toggle } = useSidebar();
|
|
2865
|
-
return /* @__PURE__ */
|
|
3399
|
+
return /* @__PURE__ */ jsx42(
|
|
2866
3400
|
Button,
|
|
2867
3401
|
{
|
|
2868
3402
|
"aria-label": collapsed ? "Expandir navegaci\xF3n" : "Colapsar navegaci\xF3n",
|
|
@@ -2871,16 +3405,13 @@ function SidebarTrigger({ className, ...props }) {
|
|
|
2871
3405
|
variant: "ghost",
|
|
2872
3406
|
className: cn("ml-auto", className),
|
|
2873
3407
|
...props,
|
|
2874
|
-
children: collapsed ? /* @__PURE__ */
|
|
3408
|
+
children: collapsed ? /* @__PURE__ */ jsx42(ChevronRight2, {}) : /* @__PURE__ */ jsx42(ChevronLeft2, {})
|
|
2875
3409
|
}
|
|
2876
3410
|
);
|
|
2877
3411
|
}
|
|
2878
|
-
function SidebarRail({
|
|
2879
|
-
className,
|
|
2880
|
-
...props
|
|
2881
|
-
}) {
|
|
3412
|
+
function SidebarRail({ className, ...props }) {
|
|
2882
3413
|
const { toggle } = useSidebar();
|
|
2883
|
-
return /* @__PURE__ */
|
|
3414
|
+
return /* @__PURE__ */ jsx42(
|
|
2884
3415
|
"button",
|
|
2885
3416
|
{
|
|
2886
3417
|
type: "button",
|
|
@@ -2895,7 +3426,7 @@ function SidebarRail({
|
|
|
2895
3426
|
);
|
|
2896
3427
|
}
|
|
2897
3428
|
function SidebarMore({ className, ...props }) {
|
|
2898
|
-
return /* @__PURE__ */
|
|
3429
|
+
return /* @__PURE__ */ jsx42(
|
|
2899
3430
|
Button,
|
|
2900
3431
|
{
|
|
2901
3432
|
"aria-label": "M\xE1s opciones",
|
|
@@ -2903,36 +3434,85 @@ function SidebarMore({ className, ...props }) {
|
|
|
2903
3434
|
variant: "ghost",
|
|
2904
3435
|
className: cn("size-7", className),
|
|
2905
3436
|
...props,
|
|
2906
|
-
children: /* @__PURE__ */
|
|
3437
|
+
children: /* @__PURE__ */ jsx42(Ellipsis, {})
|
|
2907
3438
|
}
|
|
2908
3439
|
);
|
|
2909
3440
|
}
|
|
2910
3441
|
|
|
2911
3442
|
// src/ui/skeleton/skeleton.tsx
|
|
2912
|
-
import { jsx as
|
|
3443
|
+
import { jsx as jsx43 } from "react/jsx-runtime";
|
|
2913
3444
|
function Skeleton({ className, ...props }) {
|
|
2914
|
-
return /* @__PURE__ */
|
|
3445
|
+
return /* @__PURE__ */ jsx43(
|
|
3446
|
+
"div",
|
|
3447
|
+
{
|
|
3448
|
+
"aria-hidden": "true",
|
|
3449
|
+
"data-slot": "skeleton",
|
|
3450
|
+
className: cn("animate-pulse rounded-md bg-muted", className),
|
|
3451
|
+
...props
|
|
3452
|
+
}
|
|
3453
|
+
);
|
|
2915
3454
|
}
|
|
2916
3455
|
|
|
2917
3456
|
// src/ui/submit-button/submit-button.tsx
|
|
2918
|
-
import { useFormStatus } from "react-dom";
|
|
2919
3457
|
import { LoaderCircle as LoaderCircle3 } from "lucide-react";
|
|
2920
|
-
import {
|
|
2921
|
-
|
|
3458
|
+
import { useCallback as useCallback6, useLayoutEffect, useRef as useRef5 } from "react";
|
|
3459
|
+
import { useFormStatus } from "react-dom";
|
|
3460
|
+
import { Fragment as Fragment10, jsx as jsx44, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
3461
|
+
function assignRef(ref, node) {
|
|
3462
|
+
if (typeof ref === "function") {
|
|
3463
|
+
ref(node);
|
|
3464
|
+
} else if (ref) {
|
|
3465
|
+
ref.current = node;
|
|
3466
|
+
}
|
|
3467
|
+
}
|
|
3468
|
+
function SubmitButton({
|
|
3469
|
+
loadingLabel,
|
|
3470
|
+
pendingLabel,
|
|
3471
|
+
loading = false,
|
|
3472
|
+
children,
|
|
3473
|
+
isDisabled,
|
|
3474
|
+
ref: forwardedRef,
|
|
3475
|
+
size = "sm",
|
|
3476
|
+
...props
|
|
3477
|
+
}) {
|
|
2922
3478
|
const { pending } = useFormStatus();
|
|
2923
3479
|
const busy = pending || loading;
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
3480
|
+
const label = loadingLabel ?? pendingLabel ?? "Guardando\u2026";
|
|
3481
|
+
const buttonRef = useRef5(null);
|
|
3482
|
+
const setButtonRef = useCallback6(
|
|
3483
|
+
(node) => {
|
|
3484
|
+
buttonRef.current = node;
|
|
3485
|
+
assignRef(forwardedRef, node);
|
|
3486
|
+
},
|
|
3487
|
+
[forwardedRef]
|
|
3488
|
+
);
|
|
3489
|
+
useLayoutEffect(() => {
|
|
3490
|
+
const button = buttonRef.current;
|
|
3491
|
+
if (!button) return;
|
|
3492
|
+
if (busy) button.setAttribute("aria-busy", "true");
|
|
3493
|
+
else button.removeAttribute("aria-busy");
|
|
3494
|
+
}, [busy]);
|
|
3495
|
+
return /* @__PURE__ */ jsx44(
|
|
3496
|
+
Button,
|
|
3497
|
+
{
|
|
3498
|
+
ref: setButtonRef,
|
|
3499
|
+
type: "submit",
|
|
3500
|
+
size,
|
|
3501
|
+
isDisabled: busy || isDisabled,
|
|
3502
|
+
"aria-busy": busy || void 0,
|
|
3503
|
+
...props,
|
|
3504
|
+
children: busy ? /* @__PURE__ */ jsxs23(Fragment10, { children: [
|
|
3505
|
+
/* @__PURE__ */ jsx44(LoaderCircle3, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
|
|
3506
|
+
label
|
|
3507
|
+
] }) : children
|
|
3508
|
+
}
|
|
3509
|
+
);
|
|
2928
3510
|
}
|
|
2929
3511
|
|
|
2930
3512
|
// 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";
|
|
3513
|
+
import { useEffect as useEffect5, useRef as useRef6 } from "react";
|
|
3514
|
+
import { Switch as AriaSwitch } from "react-aria-components";
|
|
3515
|
+
import { Fragment as Fragment11, jsx as jsx45, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2936
3516
|
var switchSizes = {
|
|
2937
3517
|
sm: {
|
|
2938
3518
|
control: "h-4 w-[1.875rem] p-0.5",
|
|
@@ -2972,13 +3552,14 @@ function Switch({
|
|
|
2972
3552
|
...props
|
|
2973
3553
|
}) {
|
|
2974
3554
|
const styles = switchSizes[size];
|
|
2975
|
-
const fallbackInputRef =
|
|
3555
|
+
const fallbackInputRef = useRef6(null);
|
|
2976
3556
|
const resolvedInputRef = inputRef ?? fallbackInputRef;
|
|
2977
3557
|
useEffect5(() => {
|
|
2978
3558
|
const input = resolvedInputRef.current;
|
|
2979
3559
|
if (!input) return;
|
|
2980
3560
|
const handleDirectionalKey = (event) => {
|
|
2981
|
-
if (event.target !== input || event.defaultPrevented || isDisabled || isReadOnly || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
|
|
3561
|
+
if (event.target !== input || event.defaultPrevented || isDisabled || isReadOnly || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey)
|
|
3562
|
+
return;
|
|
2982
3563
|
const nextSelected = event.key === "ArrowRight" ? true : event.key === "ArrowLeft" ? false : null;
|
|
2983
3564
|
if (nextSelected === null) return;
|
|
2984
3565
|
event.preventDefault();
|
|
@@ -2988,7 +3569,7 @@ function Switch({
|
|
|
2988
3569
|
ownerDocument.addEventListener("keydown", handleDirectionalKey);
|
|
2989
3570
|
return () => ownerDocument.removeEventListener("keydown", handleDirectionalKey);
|
|
2990
3571
|
}, [isDisabled, isReadOnly, resolvedInputRef]);
|
|
2991
|
-
return /* @__PURE__ */
|
|
3572
|
+
return /* @__PURE__ */ jsx45(
|
|
2992
3573
|
AriaSwitch,
|
|
2993
3574
|
{
|
|
2994
3575
|
"data-slot": "switch",
|
|
@@ -3003,10 +3584,10 @@ function Switch({
|
|
|
3003
3584
|
),
|
|
3004
3585
|
...props,
|
|
3005
3586
|
children: (state) => {
|
|
3006
|
-
const
|
|
3007
|
-
const thumbOffset = state.isSelected ?
|
|
3008
|
-
return /* @__PURE__ */
|
|
3009
|
-
/* @__PURE__ */
|
|
3587
|
+
const isThumbPressed = state.isPressed;
|
|
3588
|
+
const thumbOffset = state.isSelected ? isThumbPressed ? styles.activeSelectedOffset : styles.selectedOffset : "0";
|
|
3589
|
+
return /* @__PURE__ */ jsxs24(Fragment11, { children: [
|
|
3590
|
+
/* @__PURE__ */ jsx45(
|
|
3010
3591
|
"span",
|
|
3011
3592
|
{
|
|
3012
3593
|
"aria-hidden": "true",
|
|
@@ -3020,13 +3601,13 @@ function Switch({
|
|
|
3020
3601
|
"group-data-focus-visible/switch:ring-3 group-data-focus-visible/switch:ring-ring/50",
|
|
3021
3602
|
styles.control
|
|
3022
3603
|
),
|
|
3023
|
-
children: /* @__PURE__ */
|
|
3604
|
+
children: /* @__PURE__ */ jsx45(
|
|
3024
3605
|
"span",
|
|
3025
3606
|
{
|
|
3026
3607
|
"data-slot": "switch-thumb",
|
|
3027
3608
|
style: {
|
|
3028
3609
|
transform: `translate3d(${thumbOffset}, 0, 0)`,
|
|
3029
|
-
width:
|
|
3610
|
+
width: isThumbPressed ? styles.activeWidth : styles.idleWidth
|
|
3030
3611
|
},
|
|
3031
3612
|
className: cn(
|
|
3032
3613
|
"grid shrink-0 place-items-center rounded-full border border-border/60 bg-background text-[0.625rem] text-muted-foreground shadow-sm",
|
|
@@ -3040,9 +3621,16 @@ function Switch({
|
|
|
3040
3621
|
)
|
|
3041
3622
|
}
|
|
3042
3623
|
),
|
|
3043
|
-
children || description ? /* @__PURE__ */
|
|
3044
|
-
children ? /* @__PURE__ */
|
|
3045
|
-
description ? /* @__PURE__ */
|
|
3624
|
+
children || description ? /* @__PURE__ */ jsxs24("span", { className: "grid gap-0.5 leading-tight", children: [
|
|
3625
|
+
children ? /* @__PURE__ */ jsx45("span", { "data-slot": "switch-label", className: "font-medium", children: typeof children === "function" ? children(state) : children }) : null,
|
|
3626
|
+
description ? /* @__PURE__ */ jsx45(
|
|
3627
|
+
"span",
|
|
3628
|
+
{
|
|
3629
|
+
"data-slot": "switch-description",
|
|
3630
|
+
className: "text-muted-foreground text-xs font-normal",
|
|
3631
|
+
children: description
|
|
3632
|
+
}
|
|
3633
|
+
) : null
|
|
3046
3634
|
] }) : null
|
|
3047
3635
|
] });
|
|
3048
3636
|
}
|
|
@@ -3051,9 +3639,9 @@ function Switch({
|
|
|
3051
3639
|
}
|
|
3052
3640
|
|
|
3053
3641
|
// src/ui/table/table.tsx
|
|
3054
|
-
import { jsx as
|
|
3642
|
+
import { jsx as jsx46 } from "react/jsx-runtime";
|
|
3055
3643
|
function Table({ className, ...props }) {
|
|
3056
|
-
return /* @__PURE__ */
|
|
3644
|
+
return /* @__PURE__ */ jsx46("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ jsx46(
|
|
3057
3645
|
"table",
|
|
3058
3646
|
{
|
|
3059
3647
|
"data-slot": "table",
|
|
@@ -3063,10 +3651,10 @@ function Table({ className, ...props }) {
|
|
|
3063
3651
|
) });
|
|
3064
3652
|
}
|
|
3065
3653
|
function TableHeader({ className, ...props }) {
|
|
3066
|
-
return /* @__PURE__ */
|
|
3654
|
+
return /* @__PURE__ */ jsx46("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
|
|
3067
3655
|
}
|
|
3068
3656
|
function TableBody({ className, ...props }) {
|
|
3069
|
-
return /* @__PURE__ */
|
|
3657
|
+
return /* @__PURE__ */ jsx46(
|
|
3070
3658
|
"tbody",
|
|
3071
3659
|
{
|
|
3072
3660
|
"data-slot": "table-body",
|
|
@@ -3076,7 +3664,7 @@ function TableBody({ className, ...props }) {
|
|
|
3076
3664
|
);
|
|
3077
3665
|
}
|
|
3078
3666
|
function TableRow({ className, ...props }) {
|
|
3079
|
-
return /* @__PURE__ */
|
|
3667
|
+
return /* @__PURE__ */ jsx46(
|
|
3080
3668
|
"tr",
|
|
3081
3669
|
{
|
|
3082
3670
|
"data-slot": "table-row",
|
|
@@ -3089,7 +3677,7 @@ function TableRow({ className, ...props }) {
|
|
|
3089
3677
|
);
|
|
3090
3678
|
}
|
|
3091
3679
|
function TableHead({ className, ...props }) {
|
|
3092
|
-
return /* @__PURE__ */
|
|
3680
|
+
return /* @__PURE__ */ jsx46(
|
|
3093
3681
|
"th",
|
|
3094
3682
|
{
|
|
3095
3683
|
"data-slot": "table-head",
|
|
@@ -3102,7 +3690,7 @@ function TableHead({ className, ...props }) {
|
|
|
3102
3690
|
);
|
|
3103
3691
|
}
|
|
3104
3692
|
function TableCell({ className, ...props }) {
|
|
3105
|
-
return /* @__PURE__ */
|
|
3693
|
+
return /* @__PURE__ */ jsx46(
|
|
3106
3694
|
"td",
|
|
3107
3695
|
{
|
|
3108
3696
|
"data-slot": "table-cell",
|
|
@@ -3112,7 +3700,7 @@ function TableCell({ className, ...props }) {
|
|
|
3112
3700
|
);
|
|
3113
3701
|
}
|
|
3114
3702
|
function TableCaption({ className, ...props }) {
|
|
3115
|
-
return /* @__PURE__ */
|
|
3703
|
+
return /* @__PURE__ */ jsx46(
|
|
3116
3704
|
"caption",
|
|
3117
3705
|
{
|
|
3118
3706
|
"data-slot": "table-caption",
|
|
@@ -3122,11 +3710,14 @@ function TableCaption({ className, ...props }) {
|
|
|
3122
3710
|
);
|
|
3123
3711
|
}
|
|
3124
3712
|
function TableFooter({ className, ...props }) {
|
|
3125
|
-
return /* @__PURE__ */
|
|
3713
|
+
return /* @__PURE__ */ jsx46(
|
|
3126
3714
|
"tfoot",
|
|
3127
3715
|
{
|
|
3128
3716
|
"data-slot": "table-footer",
|
|
3129
|
-
className: cn(
|
|
3717
|
+
className: cn(
|
|
3718
|
+
"border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0",
|
|
3719
|
+
className
|
|
3720
|
+
),
|
|
3130
3721
|
...props
|
|
3131
3722
|
}
|
|
3132
3723
|
);
|
|
@@ -3141,27 +3732,72 @@ import {
|
|
|
3141
3732
|
Tabs as AriaTabs,
|
|
3142
3733
|
composeRenderProps as composeRenderProps2
|
|
3143
3734
|
} from "react-aria-components";
|
|
3144
|
-
import { jsx as
|
|
3735
|
+
import { jsx as jsx47 } from "react/jsx-runtime";
|
|
3145
3736
|
function Tabs({ className, ...props }) {
|
|
3146
|
-
return /* @__PURE__ */
|
|
3737
|
+
return /* @__PURE__ */ jsx47(
|
|
3738
|
+
AriaTabs,
|
|
3739
|
+
{
|
|
3740
|
+
"data-slot": "tabs",
|
|
3741
|
+
className: composeRenderProps2(className, (value) => cn("flex flex-col gap-2", value)),
|
|
3742
|
+
...props
|
|
3743
|
+
}
|
|
3744
|
+
);
|
|
3147
3745
|
}
|
|
3148
3746
|
function TabsList({ className, ...props }) {
|
|
3149
|
-
return /* @__PURE__ */
|
|
3747
|
+
return /* @__PURE__ */ jsx47(
|
|
3748
|
+
AriaTabList,
|
|
3749
|
+
{
|
|
3750
|
+
"data-slot": "tabs-list",
|
|
3751
|
+
className: composeRenderProps2(
|
|
3752
|
+
className,
|
|
3753
|
+
(value) => cn(
|
|
3754
|
+
"inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground",
|
|
3755
|
+
value
|
|
3756
|
+
)
|
|
3757
|
+
),
|
|
3758
|
+
...props
|
|
3759
|
+
}
|
|
3760
|
+
);
|
|
3150
3761
|
}
|
|
3151
3762
|
function TabsTrigger({ className, ...props }) {
|
|
3152
|
-
return /* @__PURE__ */
|
|
3763
|
+
return /* @__PURE__ */ jsx47(
|
|
3764
|
+
AriaTab,
|
|
3765
|
+
{
|
|
3766
|
+
"data-slot": "tabs-trigger",
|
|
3767
|
+
className: composeRenderProps2(
|
|
3768
|
+
className,
|
|
3769
|
+
(value) => cn(
|
|
3770
|
+
"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",
|
|
3771
|
+
value
|
|
3772
|
+
)
|
|
3773
|
+
),
|
|
3774
|
+
...props
|
|
3775
|
+
}
|
|
3776
|
+
);
|
|
3153
3777
|
}
|
|
3154
3778
|
function TabsPanels({ className, ...props }) {
|
|
3155
|
-
return /* @__PURE__ */
|
|
3779
|
+
return /* @__PURE__ */ jsx47(AriaTabPanels, { "data-slot": "tabs-panels", className: cn("min-w-0", className), ...props });
|
|
3156
3780
|
}
|
|
3157
3781
|
function TabsContent({ className, ...props }) {
|
|
3158
|
-
return /* @__PURE__ */
|
|
3782
|
+
return /* @__PURE__ */ jsx47(
|
|
3783
|
+
AriaTabPanel,
|
|
3784
|
+
{
|
|
3785
|
+
"data-slot": "tabs-content",
|
|
3786
|
+
className: composeRenderProps2(
|
|
3787
|
+
className,
|
|
3788
|
+
(value) => cn("text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50", value)
|
|
3789
|
+
),
|
|
3790
|
+
...props
|
|
3791
|
+
}
|
|
3792
|
+
);
|
|
3159
3793
|
}
|
|
3160
3794
|
|
|
3161
3795
|
// src/ui/toast/toast.tsx
|
|
3162
3796
|
import { useEffect as useEffect6 } from "react";
|
|
3163
|
-
import { sileo, Toaster as SileoToaster } from "sileo";
|
|
3164
|
-
|
|
3797
|
+
import { sileo as sileo2, Toaster as SileoToaster } from "sileo";
|
|
3798
|
+
|
|
3799
|
+
// src/ui/toast/toast-store.ts
|
|
3800
|
+
import { sileo } from "sileo";
|
|
3165
3801
|
function toSileoOptions({ title, description, duration, position, action }) {
|
|
3166
3802
|
return {
|
|
3167
3803
|
title,
|
|
@@ -3190,8 +3826,14 @@ var toast = Object.assign((options) => create(options), {
|
|
|
3190
3826
|
const shared = { description: options.description, position: options.position };
|
|
3191
3827
|
return sileo.promise(promise, {
|
|
3192
3828
|
loading: { ...shared, title: options.loading },
|
|
3193
|
-
success: (value) => ({
|
|
3194
|
-
|
|
3829
|
+
success: (value) => ({
|
|
3830
|
+
...shared,
|
|
3831
|
+
title: typeof options.success === "function" ? options.success(value) : options.success
|
|
3832
|
+
}),
|
|
3833
|
+
error: (error) => ({
|
|
3834
|
+
...shared,
|
|
3835
|
+
title: typeof options.error === "function" ? options.error(error) : options.error
|
|
3836
|
+
}),
|
|
3195
3837
|
position: options.position
|
|
3196
3838
|
});
|
|
3197
3839
|
}
|
|
@@ -3199,26 +3841,43 @@ var toast = Object.assign((options) => create(options), {
|
|
|
3199
3841
|
function useToast() {
|
|
3200
3842
|
return toast;
|
|
3201
3843
|
}
|
|
3844
|
+
|
|
3845
|
+
// src/ui/toast/toast.tsx
|
|
3846
|
+
import { Fragment as Fragment12, jsx as jsx48, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
3202
3847
|
function ToastProvider({ children }) {
|
|
3203
|
-
return /* @__PURE__ */
|
|
3848
|
+
return /* @__PURE__ */ jsxs25(Fragment12, { children: [
|
|
3204
3849
|
children,
|
|
3205
|
-
/* @__PURE__ */
|
|
3850
|
+
/* @__PURE__ */ jsx48(Toaster, {})
|
|
3206
3851
|
] });
|
|
3207
3852
|
}
|
|
3208
3853
|
function Toaster({ position }) {
|
|
3209
|
-
return /* @__PURE__ */
|
|
3854
|
+
return /* @__PURE__ */ jsx48(SileoToaster, { position, options: { fill: "var(--ui-secondary)" } });
|
|
3210
3855
|
}
|
|
3211
|
-
function ToastViewport({
|
|
3856
|
+
function ToastViewport({
|
|
3857
|
+
position,
|
|
3858
|
+
visiblePosition,
|
|
3859
|
+
className
|
|
3860
|
+
}) {
|
|
3212
3861
|
void className;
|
|
3213
3862
|
if (visiblePosition && visiblePosition !== position) return null;
|
|
3214
|
-
return /* @__PURE__ */
|
|
3863
|
+
return /* @__PURE__ */ jsx48(Toaster, { position });
|
|
3215
3864
|
}
|
|
3216
|
-
function Toast({
|
|
3865
|
+
function Toast({
|
|
3866
|
+
id,
|
|
3867
|
+
title,
|
|
3868
|
+
description,
|
|
3869
|
+
variant = "default",
|
|
3870
|
+
action,
|
|
3871
|
+
state,
|
|
3872
|
+
duration = 0,
|
|
3873
|
+
position,
|
|
3874
|
+
onDismiss
|
|
3875
|
+
}) {
|
|
3217
3876
|
useEffect6(() => {
|
|
3218
3877
|
if (state !== "open") return;
|
|
3219
|
-
const toastId =
|
|
3878
|
+
const toastId = toast({ title, description, variant, action, duration, position });
|
|
3220
3879
|
return () => {
|
|
3221
|
-
|
|
3880
|
+
sileo2.dismiss(toastId);
|
|
3222
3881
|
onDismiss?.();
|
|
3223
3882
|
};
|
|
3224
3883
|
}, [action, description, duration, id, onDismiss, position, state, title, variant]);
|
|
@@ -3226,15 +3885,30 @@ function Toast({ id, title, description, variant = "default", action, state = "o
|
|
|
3226
3885
|
}
|
|
3227
3886
|
|
|
3228
3887
|
// src/ui/toolbar/toolbar.tsx
|
|
3229
|
-
import { jsx as
|
|
3888
|
+
import { jsx as jsx49 } from "react/jsx-runtime";
|
|
3230
3889
|
function Toolbar({ className, ...props }) {
|
|
3231
|
-
return /* @__PURE__ */
|
|
3890
|
+
return /* @__PURE__ */ jsx49(
|
|
3891
|
+
"div",
|
|
3892
|
+
{
|
|
3893
|
+
role: "toolbar",
|
|
3894
|
+
"data-slot": "toolbar",
|
|
3895
|
+
className: cn("flex flex-wrap items-center gap-2", className),
|
|
3896
|
+
...props
|
|
3897
|
+
}
|
|
3898
|
+
);
|
|
3232
3899
|
}
|
|
3233
3900
|
function ToolbarGroup({ className, ...props }) {
|
|
3234
|
-
return /* @__PURE__ */
|
|
3901
|
+
return /* @__PURE__ */ jsx49(
|
|
3902
|
+
"div",
|
|
3903
|
+
{
|
|
3904
|
+
"data-slot": "toolbar-group",
|
|
3905
|
+
className: cn("flex items-center gap-2", className),
|
|
3906
|
+
...props
|
|
3907
|
+
}
|
|
3908
|
+
);
|
|
3235
3909
|
}
|
|
3236
3910
|
function ToolbarSpacer({ className, ...props }) {
|
|
3237
|
-
return /* @__PURE__ */
|
|
3911
|
+
return /* @__PURE__ */ jsx49("div", { "aria-hidden": "true", className: cn("hidden flex-1 sm:block", className), ...props });
|
|
3238
3912
|
}
|
|
3239
3913
|
export {
|
|
3240
3914
|
Accordion,
|
|
@@ -3312,15 +3986,20 @@ export {
|
|
|
3312
3986
|
DialogHeader,
|
|
3313
3987
|
DialogOverlay,
|
|
3314
3988
|
DialogPortal,
|
|
3989
|
+
DialogRoot,
|
|
3315
3990
|
DialogTitle,
|
|
3316
3991
|
DialogTrigger,
|
|
3317
3992
|
DocPreview,
|
|
3318
3993
|
Drawer,
|
|
3994
|
+
DrawerClose,
|
|
3995
|
+
DrawerContent,
|
|
3319
3996
|
DrawerDescription,
|
|
3320
3997
|
DrawerFooter,
|
|
3321
3998
|
DrawerHeader,
|
|
3322
3999
|
DrawerTitle,
|
|
4000
|
+
DrawerTrigger,
|
|
3323
4001
|
DropdownMenu,
|
|
4002
|
+
DropdownMenuContent,
|
|
3324
4003
|
DropdownMenuGroup,
|
|
3325
4004
|
DropdownMenuItem,
|
|
3326
4005
|
DropdownMenuLabel,
|
|
@@ -3367,7 +4046,6 @@ export {
|
|
|
3367
4046
|
MenuItem,
|
|
3368
4047
|
MenuTrigger,
|
|
3369
4048
|
MetricCard,
|
|
3370
|
-
ModalDialog,
|
|
3371
4049
|
OtpInput2 as OtpInput,
|
|
3372
4050
|
PageHeader,
|
|
3373
4051
|
PageHeaderActions,
|
|
@@ -3396,6 +4074,7 @@ export {
|
|
|
3396
4074
|
SheetTrigger,
|
|
3397
4075
|
Sidebar,
|
|
3398
4076
|
SidebarContent,
|
|
4077
|
+
SidebarContext,
|
|
3399
4078
|
SidebarFooter,
|
|
3400
4079
|
SidebarGroup,
|
|
3401
4080
|
SidebarHeader,
|
|
@@ -3431,6 +4110,7 @@ export {
|
|
|
3431
4110
|
ToolbarGroup,
|
|
3432
4111
|
ToolbarSpacer,
|
|
3433
4112
|
Tooltip,
|
|
4113
|
+
TooltipContent,
|
|
3434
4114
|
TooltipTrigger,
|
|
3435
4115
|
actionRipple,
|
|
3436
4116
|
alertVariants,
|