@doscientos/ui 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +7 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +8 -3
package/dist/index.cjs
CHANGED
|
@@ -335,7 +335,7 @@ function ComboboxInput({ className, ...props }) {
|
|
|
335
335
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_aria_components3.Input, { "data-slot": "combobox-input", className: cn("h-8 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
|
|
336
336
|
}
|
|
337
337
|
function ComboboxContent({ className, ...props }) {
|
|
338
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_aria_components3.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", className), ...props });
|
|
338
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_aria_components3.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 });
|
|
339
339
|
}
|
|
340
340
|
function ComboboxList({ className, emptyState, ...props }) {
|
|
341
341
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_aria_components3.ListBox, { "data-slot": "combobox-list", className: cn("max-h-64 overflow-y-auto", className), renderEmptyState: emptyState ? () => emptyState : void 0, ...props });
|
|
@@ -353,7 +353,7 @@ var import_react_aria_components4 = require("react-aria-components");
|
|
|
353
353
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
354
354
|
var DialogCloseContext = (0, import_react5.createContext)(null);
|
|
355
355
|
function Dialog({ open, children, ...props }) {
|
|
356
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components4.ModalOverlay, { isOpen: open, className: "fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px]", ...props, children });
|
|
356
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components4.ModalOverlay, { isOpen: open, className: "fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out", ...props, children });
|
|
357
357
|
}
|
|
358
358
|
function DialogClose({ onPress, ...props }) {
|
|
359
359
|
const close = (0, import_react5.useContext)(DialogCloseContext);
|
|
@@ -363,7 +363,7 @@ function DialogClose({ onPress, ...props }) {
|
|
|
363
363
|
}, ...props });
|
|
364
364
|
}
|
|
365
365
|
function DialogContent({ className, children, showCloseButton = true, ...props }) {
|
|
366
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components4.Modal, { className: "w-full max-w-md outline-none", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components4.Dialog, { "data-slot": "dialog-content", className: cn("relative grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-5 text-foreground shadow-xl outline-none", className), ...props, children: ({ close }) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(DialogCloseContext.Provider, { value: close, children: [
|
|
366
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components4.Modal, { className: "w-full max-w-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_react_aria_components4.Dialog, { "data-slot": "dialog-content", className: cn("relative grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-5 text-foreground shadow-xl outline-none", className), ...props, children: ({ close }) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(DialogCloseContext.Provider, { value: close, children: [
|
|
367
367
|
typeof children === "function" ? children({ close }) : children,
|
|
368
368
|
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DialogClose, { "aria-label": "Cerrar di\xE1logo", variant: "ghost", size: "icon", className: "absolute top-2 right-2", children: "\xD7" })
|
|
369
369
|
] }) }) });
|
|
@@ -455,7 +455,7 @@ var import_react_aria_components7 = require("react-aria-components");
|
|
|
455
455
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
456
456
|
var MenuTrigger = import_react_aria_components7.MenuTrigger;
|
|
457
457
|
function MenuContent({ className, ...props }) {
|
|
458
|
-
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components7.Popover, { "data-slot": "menu-content", className: cn("min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg", className), ...props });
|
|
458
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components7.Popover, { "data-slot": "menu-content", className: cn("min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
|
|
459
459
|
}
|
|
460
460
|
function Menu({ className, ...props }) {
|
|
461
461
|
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components7.Menu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
|
|
@@ -469,7 +469,7 @@ var import_react_aria_components8 = require("react-aria-components");
|
|
|
469
469
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
470
470
|
var PopoverTrigger = import_react_aria_components8.DialogTrigger;
|
|
471
471
|
function Popover3({ className, ...props }) {
|
|
472
|
-
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components8.Popover, { "data-slot": "popover", offset: 6, className: cn("min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none data-entering:animate-
|
|
472
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components8.Popover, { "data-slot": "popover", offset: 6, className: cn("min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
|
|
473
473
|
}
|
|
474
474
|
var PopoverContent = Popover3;
|
|
475
475
|
|
|
@@ -498,7 +498,7 @@ function SelectValue({ className, ...props }) {
|
|
|
498
498
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.SelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
|
|
499
499
|
}
|
|
500
500
|
function SelectContent({ className, ...props }) {
|
|
501
|
-
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Popover, { "data-slot": "select-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg", className), ...props });
|
|
501
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Popover, { "data-slot": "select-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
|
|
502
502
|
}
|
|
503
503
|
function SelectList({ className, ...props }) {
|
|
504
504
|
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.ListBox, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
|
|
@@ -587,7 +587,7 @@ var import_react_aria_components15 = require("react-aria-components");
|
|
|
587
587
|
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
588
588
|
var TooltipTrigger = import_react_aria_components15.TooltipTrigger;
|
|
589
589
|
function Tooltip({ className, ...props }) {
|
|
590
|
-
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components15.Tooltip, { "data-slot": "tooltip", offset: 6, className: cn("max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md outline-none data-entering:animate-
|
|
590
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components15.Tooltip, { "data-slot": "tooltip", offset: 6, className: cn("max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
|
|
591
591
|
}
|
|
592
592
|
var TooltipContent = Tooltip;
|
|
593
593
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/hooks/use-autosave.ts","../src/hooks/use-debounced-value.ts","../src/hooks/use-form-dirty.ts","../src/lib/cn.ts","../src/lib/text-match.ts","../src/ui/badge.tsx","../src/ui/button.tsx","../src/ui/card.tsx","../src/ui/checkbox.tsx","../src/ui/combobox.tsx","../src/ui/dialog.tsx","../src/ui/confirm-dialog.tsx","../src/ui/empty-state.tsx","../src/ui/label.tsx","../src/ui/field.tsx","../src/ui/input.tsx","../src/ui/kbd.tsx","../src/ui/menu.tsx","../src/ui/popover.tsx","../src/ui/search-field.tsx","../src/ui/select.tsx","../src/ui/separator.tsx","../src/ui/skeleton.tsx","../src/ui/switch.tsx","../src/ui/table.tsx","../src/ui/tabs.tsx","../src/ui/textarea.tsx","../src/ui/tooltip.tsx"],"sourcesContent":["export * from \"./hooks/use-autosave\";\nexport * from \"./hooks/use-debounced-value\";\nexport * from \"./hooks/use-form-dirty\";\nexport * from \"./lib/cn\";\nexport * from \"./lib/text-match\";\nexport * from \"./ui/badge\";\nexport * from \"./ui/button\";\nexport * from \"./ui/card\";\nexport * from \"./ui/checkbox\";\nexport * from \"./ui/combobox\";\nexport * from \"./ui/confirm-dialog\";\nexport * from \"./ui/dialog\";\nexport * from \"./ui/empty-state\";\nexport * from \"./ui/field\";\nexport * from \"./ui/input\";\nexport * from \"./ui/kbd\";\nexport * from \"./ui/label\";\nexport * from \"./ui/menu\";\nexport * from \"./ui/popover\";\nexport * from \"./ui/search-field\";\nexport * from \"./ui/select\";\nexport * from \"./ui/separator\";\nexport * from \"./ui/skeleton\";\nexport * from \"./ui/switch\";\nexport * from \"./ui/table\";\nexport * from \"./ui/tabs\";\nexport * from \"./ui/textarea\";\nexport * from \"./ui/tooltip\";\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport type AutosaveStatus = \"idle\" | \"saving\" | \"saved\" | \"error\";\n\nexport type UseAutosaveOptions<T> = {\n data: T;\n onSave: (data: T) => Promise<void>;\n debounceMs?: number;\n enabled?: boolean;\n serialize?: (data: T) => string;\n};\n\n/** Debounced autosave with stale-value protection and an explicit `saveNow`. */\nexport function useAutosave<T>({\n data,\n onSave,\n debounceMs = 1_000,\n enabled = true,\n serialize = JSON.stringify,\n}: UseAutosaveOptions<T>) {\n const [status, setStatus] = useState<AutosaveStatus>(\"idle\");\n const [error, setError] = useState<Error | null>(null);\n const lastSaved = useRef<string | null>(null);\n const saveRef = useRef(onSave);\n const serializeRef = useRef(serialize);\n\n useEffect(() => {\n saveRef.current = onSave;\n serializeRef.current = serialize;\n }, [onSave, serialize]);\n\n const save = useCallback(async (value: T) => {\n setStatus(\"saving\");\n setError(null);\n try {\n await saveRef.current(value);\n lastSaved.current = serializeRef.current(value);\n setStatus(\"saved\");\n } catch (cause) {\n setError(cause instanceof Error ? cause : new Error(\"No se pudo guardar.\"));\n setStatus(\"error\");\n }\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n const snapshot = serializeRef.current(data);\n if (lastSaved.current === null) {\n lastSaved.current = snapshot;\n return;\n }\n if (snapshot === lastSaved.current) return;\n const timeout = window.setTimeout(() => void save(data), debounceMs);\n return () => window.clearTimeout(timeout);\n }, [data, debounceMs, enabled, save]);\n\n return { status, error, saveNow: () => save(data) };\n}","import { useEffect, useState } from \"react\";\n\n/** Returns a value only after it has been stable for the supplied delay. */\nexport function useDebouncedValue<T>(value: T, delay = 250) {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timeout = window.setTimeout(() => setDebouncedValue(value), delay);\n return () => window.clearTimeout(timeout);\n }, [delay, value]);\n\n return debouncedValue;\n}","import { type RefCallback, useCallback, useRef, useState } from \"react\";\n\nexport function formSnapshot(form: HTMLFormElement): string {\n const entries: Array<[string, string]> = Array.from(new FormData(form), ([key, value]) => [key, typeof value === \"string\" ? value : value.name]);\n entries.sort(([left], [right]) => left.localeCompare(right));\n return JSON.stringify(entries);\n}\n\nexport interface UseFormDirtyResult<T extends HTMLFormElement = HTMLFormElement> {\n formRef: RefCallback<T | null>;\n isDirty: boolean;\n markDirty: () => void;\n reset: () => void;\n}\n\n/** Tracks changes in native form controls and supports controlled fields. */\nexport function useFormDirty<T extends HTMLFormElement = HTMLFormElement>(): UseFormDirtyResult<T> {\n const formElement = useRef<T | null>(null);\n const baseline = useRef<string | null>(null);\n const [isDirty, setIsDirty] = useState(false);\n\n const recompute = useCallback(() => {\n if (formElement.current && baseline.current !== null) {\n setIsDirty(formSnapshot(formElement.current) !== baseline.current);\n }\n }, []);\n\n const reset = useCallback(() => {\n if (formElement.current) {\n baseline.current = formSnapshot(formElement.current);\n setIsDirty(false);\n }\n }, []);\n\n const formRef = useCallback<RefCallback<T | null>>((form) => {\n if (formElement.current) {\n formElement.current.removeEventListener(\"input\", recompute);\n formElement.current.removeEventListener(\"change\", recompute);\n formElement.current.removeEventListener(\"reset\", recompute);\n }\n formElement.current = form;\n if (form) {\n baseline.current = formSnapshot(form);\n setIsDirty(false);\n form.addEventListener(\"input\", recompute);\n form.addEventListener(\"change\", recompute);\n form.addEventListener(\"reset\", recompute);\n }\n }, [recompute]);\n\n return { formRef, isDirty, markDirty: () => setIsDirty(true), reset };\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merges conditional class names, resolving conflicting Tailwind utilities. */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}","export type TextMatchPart = {\n text: string;\n match: boolean;\n};\n\nfunction normalize(value: string) {\n return value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLocaleLowerCase();\n}\n\nfunction normalizedTextWithRanges(value: string) {\n const ranges: Array<{ start: number; end: number }> = [];\n let normalized = \"\";\n let sourceIndex = 0;\n\n for (const character of value) {\n const start = sourceIndex;\n sourceIndex += character.length;\n const normalizedCharacter = normalize(character);\n normalized += normalizedCharacter;\n for (let index = 0; index < normalizedCharacter.length; index += 1) {\n ranges.push({ start, end: sourceIndex });\n }\n }\n\n return { normalized, ranges };\n}\n\n/**\n * Splits text into matching and non-matching chunks. Matching is case- and\n * accent-insensitive while preserving the original text for rendering.\n */\nexport function getTextMatchParts(text: string, query: string): TextMatchPart[] {\n const term = normalize(query.trim());\n if (!term) return [{ text, match: false }];\n\n const { normalized, ranges } = normalizedTextWithRanges(text);\n const parts: TextMatchPart[] = [];\n let sourceCursor = 0;\n let index = normalized.indexOf(term);\n\n while (index !== -1) {\n const rangeStart = ranges[index]?.start;\n const rangeEnd = ranges[index + term.length - 1]?.end;\n if (rangeStart === undefined || rangeEnd === undefined) break;\n if (rangeStart > sourceCursor) parts.push({ text: text.slice(sourceCursor, rangeStart), match: false });\n parts.push({ text: text.slice(rangeStart, rangeEnd), match: true });\n sourceCursor = rangeEnd;\n index = normalized.indexOf(term, index + term.length);\n }\n\n if (sourceCursor < text.length) parts.push({ text: text.slice(sourceCursor), match: false });\n return parts.length ? parts : [{ text, match: false }];\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport const badgeVariants = cva(\"inline-flex w-fit items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground\",\n secondary: \"bg-secondary text-secondary-foreground\",\n neutral: \"bg-muted text-muted-foreground\",\n success: \"bg-success/10 text-success\",\n warning: \"bg-warning/10 text-warning\",\n destructive: \"bg-destructive/10 text-destructive\",\n outline: \"border border-border text-foreground\",\n },\n },\n defaultVariants: { variant: \"default\" },\n});\n\nexport type BadgeProps = React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>;\n\nexport function Badge({ className, variant, ...props }: BadgeProps) {\n return <span data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-1.5 rounded-lg border border-transparent text-sm font-medium whitespace-nowrap transition-colors outline-none focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/85\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline: \"border-border bg-background text-foreground hover:bg-muted\",\n ghost: \"text-foreground hover:bg-muted\",\n destructive: \"bg-destructive/10 text-destructive hover:bg-destructive/20\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-6 px-2 text-xs\",\n sm: \"h-7 px-2.5 text-xs\",\n default: \"h-8 px-3\",\n lg: \"h-10 px-4\",\n icon: \"size-8 p-0\",\n },\n },\n defaultVariants: { variant: \"default\", size: \"default\" },\n },\n);\n\nexport type ButtonProps = AriaButtonProps & VariantProps<typeof buttonVariants>;\n\nexport function Button({ className, variant, size, ...props }: ButtonProps) {\n return <AriaButton data-slot=\"button\" className={cn(buttonVariants({ variant, size }), className)} {...props} />;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Card({ className, ...props }: React.ComponentProps<\"section\">) {\n return <section data-slot=\"card\" className={cn(\"rounded-xl border border-border bg-card text-foreground shadow-sm\", className)} {...props} />;\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<\"header\">) {\n return <header data-slot=\"card-header\" className={cn(\"flex flex-col gap-1.5 p-5\", className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return <h2 data-slot=\"card-title\" className={cn(\"text-base font-semibold\", className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"card-description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"p-5 pt-0\", className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<\"footer\">) {\n return <footer data-slot=\"card-footer\" className={cn(\"flex items-center gap-2 border-t border-border p-5\", className)} {...props} />;\n}","import {\n Checkbox as AriaCheckbox,\n type CheckboxProps as AriaCheckboxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type CheckboxProps = Omit<AriaCheckboxProps, \"className\"> & { className?: string };\n\nexport function Checkbox({ className, children, ...props }: CheckboxProps) {\n return <AriaCheckbox data-slot=\"checkbox\" className={cn(\"group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>\n {(state) => <><span aria-hidden=\"true\" className=\"grid size-4 place-items-center rounded border border-border bg-background text-xs text-primary-foreground group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50\">✓</span>{typeof children === \"function\" ? children(state) : children}</>}\n </AriaCheckbox>;\n}\n","import { Fragment } from \"react\";\nimport {\n ComboBox as AriaComboBox,\n ComboBoxValue,\n Input,\n ListBox,\n ListBoxItem,\n Popover,\n type ComboBoxProps,\n type InputProps,\n type ListBoxItemProps,\n type ListBoxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\nimport { getTextMatchParts } from \"../lib/text-match\";\n\nexport const Combobox = AriaComboBox;\nexport { ComboBoxValue as ComboboxValue };\n\nexport type { ComboBoxProps };\n\nexport function ComboboxInput({ className, ...props }: InputProps) {\n return <Input data-slot=\"combobox-input\" className={cn(\"h-8 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50\", className)} {...props} />;\n}\n\nexport function ComboboxContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <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\", className)} {...props} />;\n}\n\nexport function ComboboxList<T extends object>({ className, emptyState, ...props }: ListBoxProps<T> & { emptyState?: React.ReactNode }) {\n return <ListBox data-slot=\"combobox-list\" className={cn(\"max-h-64 overflow-y-auto\", className)} renderEmptyState={emptyState ? () => emptyState : undefined} {...props} />;\n}\n\nexport function ComboboxItem<T extends object>({ className, children, ...props }: ListBoxItemProps<T>) {\n return <ListBoxItem data-slot=\"combobox-item\" className={cn(\"flex w-full cursor-default items-center justify-between rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>\n {children}\n </ListBoxItem>;\n}\n\n/** Accent-insensitive visual highlighting for suggestion labels. */\nexport function HighlightMatch({ text, query, className }: { text: string; query: string; className?: string }) {\n return <span className={className}>{getTextMatchParts(text, query).map((part, index) => part.match ? <mark key={`${part.text}-${index}`} className=\"rounded bg-accent px-0.5 text-accent-foreground\">{part.text}</mark> : <Fragment key={`${part.text}-${index}`}>{part.text}</Fragment>)}</span>;\n}\n","import { createContext, useContext } from \"react\";\nimport {\n Dialog as AriaDialog,\n Heading,\n Modal,\n ModalOverlay,\n Text,\n type DialogProps as AriaDialogProps,\n type ModalOverlayProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\n\nconst DialogCloseContext = createContext<(() => void) | null>(null);\n\nexport type DialogProps = Omit<ModalOverlayProps, \"children\" | \"className\" | \"isOpen\"> & {\n children: React.ReactNode;\n open: boolean;\n};\n\n/** Controlled overlay root. Use `DialogContent` for its accessible surface. */\nexport function Dialog({ open, children, ...props }: DialogProps) {\n return <ModalOverlay isOpen={open} className=\"fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px]\" {...props}>\n {children}\n </ModalOverlay>;\n}\n\nexport function DialogClose({ onPress, ...props }: React.ComponentProps<typeof Button>) {\n const close = useContext(DialogCloseContext);\n return <Button onPress={(event) => { onPress?.(event); close?.(); }} {...props} />;\n}\n\nexport function DialogContent({ className, children, showCloseButton = true, ...props }: AriaDialogProps & { showCloseButton?: boolean }) {\n return <Modal className=\"w-full max-w-md outline-none\">\n <AriaDialog data-slot=\"dialog-content\" className={cn(\"relative grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-5 text-foreground shadow-xl outline-none\", className)} {...props}>\n {({ close }) => <DialogCloseContext.Provider value={close}>\n {typeof children === \"function\" ? children({ close }) : children}\n {showCloseButton && <DialogClose aria-label=\"Cerrar diálogo\" variant=\"ghost\" size=\"icon\" className=\"absolute top-2 right-2\">×</DialogClose>}\n </DialogCloseContext.Provider>}\n </AriaDialog>\n </Modal>;\n}\n\nexport function DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-header\" className={cn(\"flex flex-col gap-2\", className)} {...props} />;\n}\nexport function DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-footer\" className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)} {...props} />;\n}\nexport function DialogTitle({ className, ...props }: React.ComponentProps<typeof Heading>) {\n return <Heading slot=\"title\" className={cn(\"text-base font-semibold\", className)} {...props} />;\n}\nexport function DialogDescription({ className, ...props }: React.ComponentProps<typeof Text>) {\n return <Text slot=\"description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n","import type * as React from \"react\";\nimport { Button } from \"./button\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"./dialog\";\n\nexport type ConfirmDialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: React.ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n pending?: boolean;\n onConfirm: () => void;\n};\n\n/** Controlled confirmation dialog for irreversible actions. */\nexport function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel = \"Confirmar\", cancelLabel = \"Cancelar\", destructive = false, pending = false, onConfirm }: ConfirmDialogProps) {\n return <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent showCloseButton={false}>\n <DialogHeader><DialogTitle>{title}</DialogTitle>{description && <DialogDescription>{description}</DialogDescription>}</DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" isDisabled={pending} onPress={() => onOpenChange(false)}>{cancelLabel}</Button>\n <Button variant={destructive ? \"destructive\" : \"default\"} isDisabled={pending} onPress={onConfirm}>{confirmLabel}</Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function EmptyState({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"empty-state\" className={cn(\"flex min-h-44 w-full flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border p-6 text-center\", className)} {...props} />;\n}\n\nexport function EmptyStateTitle({ className, ...props }: React.ComponentProps<\"h3\">) {\n return <h3 data-slot=\"empty-state-title\" className={cn(\"text-sm font-medium text-foreground\", className)} {...props} />;\n}\n\nexport function EmptyStateDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"empty-state-description\" className={cn(\"max-w-sm text-sm text-muted-foreground\", className)} {...props} />;\n}","import { forwardRef, type ComponentPropsWithRef } from \"react\";\nimport { Label as LabelPrimitive } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const Label = forwardRef<HTMLLabelElement, ComponentPropsWithRef<typeof LabelPrimitive>>(function Label({ className, ...props }, ref) {\n return <LabelPrimitive ref={ref} data-slot=\"label\" className={cn(\"flex items-center gap-2 text-sm font-medium leading-none select-none\", className)} {...props} />;\n});\n\nexport type LabelProps = ComponentPropsWithRef<typeof Label>;\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label } from \"./label\";\n\nexport function Field({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"field\" className={cn(\"flex w-full flex-col gap-2\", className)} {...props} />;\n}\n\nexport function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return <Label data-slot=\"field-label\" className={cn(\"text-foreground\", className)} {...props} />;\n}\n\nexport function FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"field-description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n\nexport function FieldError({ className, children, ...props }: React.ComponentProps<\"p\">) {\n if (!children) return null;\n return <p role=\"alert\" data-slot=\"field-error\" className={cn(\"text-sm text-destructive\", className)} {...props}>{children}</p>;\n}","import { forwardRef } from \"react\";\nimport { Input as AriaInput, type InputProps as AriaInputProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\ntype CompatibleRef<T> = ((instance: T | null) => unknown) | { readonly current: T | null } | null;\n\nexport type InputProps = Omit<AriaInputProps, \"ref\"> & { ref?: CompatibleRef<HTMLInputElement> };\n\nconst InputImpl = forwardRef<HTMLInputElement, AriaInputProps>(function Input({ className, type, ...props }, ref) {\n return <AriaInput ref={ref} type={type} data-slot=\"input\" className={cn(\"h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\", className)} {...props} />;\n});\n\n/** Forward-ref component with a ref type compatible across React 19 type releases. */\nexport const Input = InputImpl as unknown as (props: InputProps) => ReturnType<typeof InputImpl>;\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return <kbd data-slot=\"kbd\" className={cn(\"pointer-events-none inline-flex h-5 min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none\", className)} {...props} />;\n}\n\nexport function KbdGroup({ className, ...props }: React.ComponentProps<\"span\">) {\n return <span data-slot=\"kbd-group\" className={cn(\"inline-flex items-center gap-1\", className)} {...props} />;\n}","import {\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n MenuTrigger as AriaMenuTrigger,\n Popover,\n type MenuItemProps,\n type MenuProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const MenuTrigger = AriaMenuTrigger;\n\nexport function MenuContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <Popover data-slot=\"menu-content\" className={cn(\"min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg\", className)} {...props} />;\n}\n\nexport function Menu<T extends object>({ className, ...props }: MenuProps<T>) {\n return <AriaMenu data-slot=\"menu\" className={cn(\"outline-none\", className)} {...props} />;\n}\n\nexport function MenuItem<T extends object>({ className, children, ...props }: MenuItemProps<T>) {\n return <AriaMenuItem data-slot=\"menu-item\" className={cn(\"flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>{children}</AriaMenuItem>;\n}","import {\n DialogTrigger as AriaDialogTrigger,\n Popover as AriaPopover,\n type DialogTriggerProps,\n type PopoverProps as AriaPopoverProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type PopoverProps = Omit<AriaPopoverProps, \"className\"> & { className?: string };\nexport type { DialogTriggerProps as PopoverTriggerProps };\n\n/** Wrap a trigger and Popover surface; React Aria handles focus and positioning. */\nexport const PopoverTrigger = AriaDialogTrigger;\n\nexport function Popover({ className, ...props }: PopoverProps) {\n return <AriaPopover data-slot=\"popover\" offset={6} className={cn(\"min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none data-entering:animate-in data-entering:fade-in-0 data-entering:zoom-in-95 data-exiting:animate-out data-exiting:fade-out-0 data-exiting:zoom-out-95\", className)} {...props} />;\n}\n\nexport const PopoverContent = Popover;","import {\n SearchField as AriaSearchField,\n Button,\n Input,\n type SearchFieldProps as AriaSearchFieldProps,\n type ButtonProps,\n type InputProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const SearchField = AriaSearchField;\nexport type { AriaSearchFieldProps as SearchFieldProps };\n\nexport function SearchInput({ className, ...props }: InputProps) {\n return <Input data-slot=\"search-input\" className={cn(\"h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50\", className)} {...props} />;\n}\n\nexport function SearchClearButton({ className, children = \"×\", ...props }: Omit<ButtonProps, \"className\"> & { className?: string }) {\n return <Button slot=\"clear\" data-slot=\"search-clear\" className={cn(\"absolute top-1/2 right-1 -translate-y-1/2 rounded p-1 text-muted-foreground outline-none hover:bg-muted data-focus-visible:ring-2 data-focus-visible:ring-ring\", className)} {...props}>{children}</Button>;\n}\n","import {\n Button as AriaButton,\n Select as AriaSelect,\n SelectValue as AriaSelectValue,\n ListBox,\n ListBoxItem,\n Popover,\n type SelectProps as AriaSelectProps,\n type ButtonProps,\n type ListBoxItemProps,\n type ListBoxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const Select = AriaSelect;\nexport type { AriaSelectProps as SelectProps };\n\nexport function SelectTrigger({ className, children, ...props }: ButtonProps) {\n return <AriaButton data-slot=\"select-trigger\" className={cn(\"flex h-8 w-full min-w-36 items-center gap-2 rounded-lg border border-border bg-background px-2.5 text-left text-sm text-foreground outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>{(state) => <>{typeof children === \"function\" ? children(state) : children}<span aria-hidden=\"true\" className=\"ml-auto text-muted-foreground\">⌄</span></>}</AriaButton>;\n}\n\nexport function SelectValue({ className, ...props }: React.ComponentProps<typeof AriaSelectValue>) {\n return <AriaSelectValue data-slot=\"select-value\" className={cn(\"flex-1 truncate data-placeholder:text-muted-foreground\", className)} {...props} />;\n}\n\nexport function SelectContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <Popover data-slot=\"select-content\" className={cn(\"w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg\", className)} {...props} />;\n}\n\nexport function SelectList<T extends object>({ className, ...props }: ListBoxProps<T>) {\n return <ListBox data-slot=\"select-list\" className={cn(\"max-h-64 overflow-y-auto\", className)} {...props} />;\n}\n\nexport function SelectItem<T extends object>({ className, children, ...props }: ListBoxItemProps<T>) {\n return <ListBoxItem data-slot=\"select-item\" className={cn(\"flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-selected:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>{children}</ListBoxItem>;\n}\n","import { Separator as AriaSeparator, type SeparatorProps as AriaSeparatorProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type SeparatorProps = Omit<AriaSeparatorProps, \"className\"> & { className?: string };\n\nexport function Separator({ className, orientation = \"horizontal\", ...props }: SeparatorProps) {\n return <AriaSeparator data-slot=\"separator\" orientation={orientation} className={cn(\"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\", className)} {...props} />;\n}","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div aria-hidden=\"true\" data-slot=\"skeleton\" className={cn(\"animate-pulse rounded-md bg-muted\", className)} {...props} />;\n}","import {\n Switch as AriaSwitch,\n type SwitchProps as AriaSwitchProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type SwitchProps = Omit<AriaSwitchProps, \"className\"> & { className?: string };\n\nexport function Switch({ className, children, ...props }: SwitchProps) {\n return <AriaSwitch data-slot=\"switch\" className={cn(\"group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>\n {(state) => <><span aria-hidden=\"true\" className=\"flex h-5 w-9 items-center rounded-full bg-muted p-0.5 transition-colors group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50\"><span className=\"size-4 rounded-full bg-background shadow-sm transition-transform group-data-selected:translate-x-4\" /></span>{typeof children === \"function\" ? children(state) : children}</>}\n </AriaSwitch>;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/** Presentational table primitives. Sorting, pagination and data state stay in the application. */\nexport function Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\"><table data-slot=\"table\" className={cn(\"w-full caption-bottom text-sm\", className)} {...props} /></div>;\n}\n\nexport function TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return <thead data-slot=\"table-header\" className={cn(\"border-b border-border\", className)} {...props} />;\n}\nexport function TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return <tbody data-slot=\"table-body\" className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n}\nexport function TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return <tr data-slot=\"table-row\" className={cn(\"border-b border-border transition-colors hover:bg-muted/50\", className)} {...props} />;\n}\nexport function TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return <th data-slot=\"table-head\" className={cn(\"h-10 px-3 text-left align-middle text-xs font-medium text-muted-foreground\", className)} {...props} />;\n}\nexport function TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return <td data-slot=\"table-cell\" className={cn(\"p-3 align-middle\", className)} {...props} />;\n}\nexport function TableCaption({ className, ...props }: React.ComponentProps<\"caption\">) {\n return <caption data-slot=\"table-caption\" className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />;\n}","import {\n Tab as AriaTab,\n TabList as AriaTabList,\n TabPanel as AriaTabPanel,\n TabPanels as AriaTabPanels,\n Tabs as AriaTabs,\n composeRenderProps,\n type TabListProps as AriaTabListProps,\n type TabPanelProps as AriaTabPanelProps,\n type TabPanelsProps as AriaTabPanelsProps,\n type TabProps as AriaTabProps,\n type TabsProps as AriaTabsProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type TabsProps = AriaTabsProps;\nexport type TabProps = AriaTabProps;\nexport type TabPanelProps = AriaTabPanelProps;\n\nexport function Tabs({ className, ...props }: AriaTabsProps) {\n return <AriaTabs data-slot=\"tabs\" className={composeRenderProps(className, (value) => cn(\"flex flex-col gap-2\", value))} {...props} />;\n}\n\nexport function TabsList<T extends object>({ className, ...props }: AriaTabListProps<T>) {\n return <AriaTabList data-slot=\"tabs-list\" className={composeRenderProps(className, (value) => cn(\"inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground\", value))} {...props} />;\n}\n\nexport function TabsTrigger({ className, ...props }: AriaTabProps) {\n return <AriaTab data-slot=\"tabs-trigger\" className={composeRenderProps(className, (value) => cn(\"inline-flex h-7 items-center justify-center gap-1.5 rounded-md px-2.5 text-sm font-medium outline-none transition-colors data-hovered:text-foreground data-selected:bg-background data-selected:text-foreground data-selected:shadow-sm data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50\", value))} {...props} />;\n}\n\nexport function TabsPanels<T extends object>({ className, ...props }: AriaTabPanelsProps<T>) {\n return <AriaTabPanels data-slot=\"tabs-panels\" className={cn(\"min-w-0\", className)} {...props} />;\n}\n\nexport function TabsContent({ className, ...props }: AriaTabPanelProps) {\n return <AriaTabPanel data-slot=\"tabs-content\" className={composeRenderProps(className, (value) => cn(\"text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50\", value))} {...props} />;\n}","import { forwardRef } from \"react\";\nimport { TextArea as AriaTextArea, type TextAreaProps as AriaTextAreaProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\ntype CompatibleRef<T> = ((instance: T | null) => unknown) | { readonly current: T | null } | null;\n\nexport type TextareaProps = Omit<AriaTextAreaProps, \"ref\"> & { ref?: CompatibleRef<HTMLTextAreaElement> };\n\nconst TextareaImpl = forwardRef<HTMLTextAreaElement, AriaTextAreaProps>(function Textarea({ className, ...props }, ref) {\n return <AriaTextArea ref={ref} data-slot=\"textarea\" className={cn(\"min-h-20 w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\", className)} {...props} />;\n});\n\n/** Forward-ref component with a ref type compatible across React 19 type releases. */\nexport const Textarea = TextareaImpl as unknown as (props: TextareaProps) => ReturnType<typeof TextareaImpl>;\n","import {\n Tooltip as AriaTooltip,\n TooltipTrigger as AriaTooltipTrigger,\n type TooltipProps as AriaTooltipProps,\n type TooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type TooltipProps = Omit<AriaTooltipProps, \"className\"> & { className?: string };\nexport type { TooltipTriggerComponentProps };\n\nexport const TooltipTrigger = AriaTooltipTrigger;\n\nexport function Tooltip({ className, ...props }: TooltipProps) {\n return <AriaTooltip data-slot=\"tooltip\" offset={6} className={cn(\"max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md outline-none data-entering:animate-in data-entering:fade-in-0 data-entering:zoom-in-95 data-exiting:animate-out data-exiting:fade-out-0 data-exiting:zoom-out-95\", className)} {...props} />;\n}\n\nexport const TooltipContent = Tooltip;"],"mappings":"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","names":["Input","Popover","Textarea","import_react","import_react","import_class_variance_authority","import_jsx_runtime","AriaButton","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaCheckbox","import_react","import_react_aria_components","import_jsx_runtime","AriaComboBox","import_react","import_react_aria_components","import_jsx_runtime","AriaDialog","import_jsx_runtime","import_jsx_runtime","import_react","import_react_aria_components","import_jsx_runtime","Label","LabelPrimitive","import_jsx_runtime","import_react","import_react_aria_components","import_jsx_runtime","Input","AriaInput","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaMenuTrigger","AriaMenu","AriaMenuItem","import_react_aria_components","import_jsx_runtime","AriaDialogTrigger","Popover","AriaPopover","import_react_aria_components","import_jsx_runtime","AriaSearchField","import_react_aria_components","import_jsx_runtime","AriaSelect","AriaButton","AriaSelectValue","import_react_aria_components","import_jsx_runtime","AriaSeparator","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaSwitch","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaTabs","AriaTabList","AriaTab","AriaTabPanels","AriaTabPanel","import_react","import_react_aria_components","import_jsx_runtime","AriaTextArea","Textarea","import_react_aria_components","import_jsx_runtime","AriaTooltipTrigger","AriaTooltip"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/hooks/use-autosave.ts","../src/hooks/use-debounced-value.ts","../src/hooks/use-form-dirty.ts","../src/lib/cn.ts","../src/lib/text-match.ts","../src/ui/badge.tsx","../src/ui/button.tsx","../src/ui/card.tsx","../src/ui/checkbox.tsx","../src/ui/combobox.tsx","../src/ui/dialog.tsx","../src/ui/confirm-dialog.tsx","../src/ui/empty-state.tsx","../src/ui/label.tsx","../src/ui/field.tsx","../src/ui/input.tsx","../src/ui/kbd.tsx","../src/ui/menu.tsx","../src/ui/popover.tsx","../src/ui/search-field.tsx","../src/ui/select.tsx","../src/ui/separator.tsx","../src/ui/skeleton.tsx","../src/ui/switch.tsx","../src/ui/table.tsx","../src/ui/tabs.tsx","../src/ui/textarea.tsx","../src/ui/tooltip.tsx"],"sourcesContent":["export * from \"./hooks/use-autosave\";\nexport * from \"./hooks/use-debounced-value\";\nexport * from \"./hooks/use-form-dirty\";\nexport * from \"./lib/cn\";\nexport * from \"./lib/text-match\";\nexport * from \"./ui/badge\";\nexport * from \"./ui/button\";\nexport * from \"./ui/card\";\nexport * from \"./ui/checkbox\";\nexport * from \"./ui/combobox\";\nexport * from \"./ui/confirm-dialog\";\nexport * from \"./ui/dialog\";\nexport * from \"./ui/empty-state\";\nexport * from \"./ui/field\";\nexport * from \"./ui/input\";\nexport * from \"./ui/kbd\";\nexport * from \"./ui/label\";\nexport * from \"./ui/menu\";\nexport * from \"./ui/popover\";\nexport * from \"./ui/search-field\";\nexport * from \"./ui/select\";\nexport * from \"./ui/separator\";\nexport * from \"./ui/skeleton\";\nexport * from \"./ui/switch\";\nexport * from \"./ui/table\";\nexport * from \"./ui/tabs\";\nexport * from \"./ui/textarea\";\nexport * from \"./ui/tooltip\";\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport type AutosaveStatus = \"idle\" | \"saving\" | \"saved\" | \"error\";\n\nexport type UseAutosaveOptions<T> = {\n data: T;\n onSave: (data: T) => Promise<void>;\n debounceMs?: number;\n enabled?: boolean;\n serialize?: (data: T) => string;\n};\n\n/** Debounced autosave with stale-value protection and an explicit `saveNow`. */\nexport function useAutosave<T>({\n data,\n onSave,\n debounceMs = 1_000,\n enabled = true,\n serialize = JSON.stringify,\n}: UseAutosaveOptions<T>) {\n const [status, setStatus] = useState<AutosaveStatus>(\"idle\");\n const [error, setError] = useState<Error | null>(null);\n const lastSaved = useRef<string | null>(null);\n const saveRef = useRef(onSave);\n const serializeRef = useRef(serialize);\n\n useEffect(() => {\n saveRef.current = onSave;\n serializeRef.current = serialize;\n }, [onSave, serialize]);\n\n const save = useCallback(async (value: T) => {\n setStatus(\"saving\");\n setError(null);\n try {\n await saveRef.current(value);\n lastSaved.current = serializeRef.current(value);\n setStatus(\"saved\");\n } catch (cause) {\n setError(cause instanceof Error ? cause : new Error(\"No se pudo guardar.\"));\n setStatus(\"error\");\n }\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n const snapshot = serializeRef.current(data);\n if (lastSaved.current === null) {\n lastSaved.current = snapshot;\n return;\n }\n if (snapshot === lastSaved.current) return;\n const timeout = window.setTimeout(() => void save(data), debounceMs);\n return () => window.clearTimeout(timeout);\n }, [data, debounceMs, enabled, save]);\n\n return { status, error, saveNow: () => save(data) };\n}","import { useEffect, useState } from \"react\";\n\n/** Returns a value only after it has been stable for the supplied delay. */\nexport function useDebouncedValue<T>(value: T, delay = 250) {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timeout = window.setTimeout(() => setDebouncedValue(value), delay);\n return () => window.clearTimeout(timeout);\n }, [delay, value]);\n\n return debouncedValue;\n}","import { type RefCallback, useCallback, useRef, useState } from \"react\";\n\nexport function formSnapshot(form: HTMLFormElement): string {\n const entries: Array<[string, string]> = Array.from(new FormData(form), ([key, value]) => [key, typeof value === \"string\" ? value : value.name]);\n entries.sort(([left], [right]) => left.localeCompare(right));\n return JSON.stringify(entries);\n}\n\nexport interface UseFormDirtyResult<T extends HTMLFormElement = HTMLFormElement> {\n formRef: RefCallback<T | null>;\n isDirty: boolean;\n markDirty: () => void;\n reset: () => void;\n}\n\n/** Tracks changes in native form controls and supports controlled fields. */\nexport function useFormDirty<T extends HTMLFormElement = HTMLFormElement>(): UseFormDirtyResult<T> {\n const formElement = useRef<T | null>(null);\n const baseline = useRef<string | null>(null);\n const [isDirty, setIsDirty] = useState(false);\n\n const recompute = useCallback(() => {\n if (formElement.current && baseline.current !== null) {\n setIsDirty(formSnapshot(formElement.current) !== baseline.current);\n }\n }, []);\n\n const reset = useCallback(() => {\n if (formElement.current) {\n baseline.current = formSnapshot(formElement.current);\n setIsDirty(false);\n }\n }, []);\n\n const formRef = useCallback<RefCallback<T | null>>((form) => {\n if (formElement.current) {\n formElement.current.removeEventListener(\"input\", recompute);\n formElement.current.removeEventListener(\"change\", recompute);\n formElement.current.removeEventListener(\"reset\", recompute);\n }\n formElement.current = form;\n if (form) {\n baseline.current = formSnapshot(form);\n setIsDirty(false);\n form.addEventListener(\"input\", recompute);\n form.addEventListener(\"change\", recompute);\n form.addEventListener(\"reset\", recompute);\n }\n }, [recompute]);\n\n return { formRef, isDirty, markDirty: () => setIsDirty(true), reset };\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merges conditional class names, resolving conflicting Tailwind utilities. */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}","export type TextMatchPart = {\n text: string;\n match: boolean;\n};\n\nfunction normalize(value: string) {\n return value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLocaleLowerCase();\n}\n\nfunction normalizedTextWithRanges(value: string) {\n const ranges: Array<{ start: number; end: number }> = [];\n let normalized = \"\";\n let sourceIndex = 0;\n\n for (const character of value) {\n const start = sourceIndex;\n sourceIndex += character.length;\n const normalizedCharacter = normalize(character);\n normalized += normalizedCharacter;\n for (let index = 0; index < normalizedCharacter.length; index += 1) {\n ranges.push({ start, end: sourceIndex });\n }\n }\n\n return { normalized, ranges };\n}\n\n/**\n * Splits text into matching and non-matching chunks. Matching is case- and\n * accent-insensitive while preserving the original text for rendering.\n */\nexport function getTextMatchParts(text: string, query: string): TextMatchPart[] {\n const term = normalize(query.trim());\n if (!term) return [{ text, match: false }];\n\n const { normalized, ranges } = normalizedTextWithRanges(text);\n const parts: TextMatchPart[] = [];\n let sourceCursor = 0;\n let index = normalized.indexOf(term);\n\n while (index !== -1) {\n const rangeStart = ranges[index]?.start;\n const rangeEnd = ranges[index + term.length - 1]?.end;\n if (rangeStart === undefined || rangeEnd === undefined) break;\n if (rangeStart > sourceCursor) parts.push({ text: text.slice(sourceCursor, rangeStart), match: false });\n parts.push({ text: text.slice(rangeStart, rangeEnd), match: true });\n sourceCursor = rangeEnd;\n index = normalized.indexOf(term, index + term.length);\n }\n\n if (sourceCursor < text.length) parts.push({ text: text.slice(sourceCursor), match: false });\n return parts.length ? parts : [{ text, match: false }];\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport const badgeVariants = cva(\"inline-flex w-fit items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground\",\n secondary: \"bg-secondary text-secondary-foreground\",\n neutral: \"bg-muted text-muted-foreground\",\n success: \"bg-success/10 text-success\",\n warning: \"bg-warning/10 text-warning\",\n destructive: \"bg-destructive/10 text-destructive\",\n outline: \"border border-border text-foreground\",\n },\n },\n defaultVariants: { variant: \"default\" },\n});\n\nexport type BadgeProps = React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>;\n\nexport function Badge({ className, variant, ...props }: BadgeProps) {\n return <span data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-1.5 rounded-lg border border-transparent text-sm font-medium whitespace-nowrap transition-colors outline-none focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/85\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline: \"border-border bg-background text-foreground hover:bg-muted\",\n ghost: \"text-foreground hover:bg-muted\",\n destructive: \"bg-destructive/10 text-destructive hover:bg-destructive/20\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-6 px-2 text-xs\",\n sm: \"h-7 px-2.5 text-xs\",\n default: \"h-8 px-3\",\n lg: \"h-10 px-4\",\n icon: \"size-8 p-0\",\n },\n },\n defaultVariants: { variant: \"default\", size: \"default\" },\n },\n);\n\nexport type ButtonProps = AriaButtonProps & VariantProps<typeof buttonVariants>;\n\nexport function Button({ className, variant, size, ...props }: ButtonProps) {\n return <AriaButton data-slot=\"button\" className={cn(buttonVariants({ variant, size }), className)} {...props} />;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Card({ className, ...props }: React.ComponentProps<\"section\">) {\n return <section data-slot=\"card\" className={cn(\"rounded-xl border border-border bg-card text-foreground shadow-sm\", className)} {...props} />;\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<\"header\">) {\n return <header data-slot=\"card-header\" className={cn(\"flex flex-col gap-1.5 p-5\", className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return <h2 data-slot=\"card-title\" className={cn(\"text-base font-semibold\", className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"card-description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"p-5 pt-0\", className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<\"footer\">) {\n return <footer data-slot=\"card-footer\" className={cn(\"flex items-center gap-2 border-t border-border p-5\", className)} {...props} />;\n}","import {\n Checkbox as AriaCheckbox,\n type CheckboxProps as AriaCheckboxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type CheckboxProps = Omit<AriaCheckboxProps, \"className\"> & { className?: string };\n\nexport function Checkbox({ className, children, ...props }: CheckboxProps) {\n return <AriaCheckbox data-slot=\"checkbox\" className={cn(\"group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>\n {(state) => <><span aria-hidden=\"true\" className=\"grid size-4 place-items-center rounded border border-border bg-background text-xs text-primary-foreground group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50\">✓</span>{typeof children === \"function\" ? children(state) : children}</>}\n </AriaCheckbox>;\n}\n","import { Fragment } from \"react\";\nimport {\n ComboBox as AriaComboBox,\n ComboBoxValue,\n Input,\n ListBox,\n ListBoxItem,\n Popover,\n type ComboBoxProps,\n type InputProps,\n type ListBoxItemProps,\n type ListBoxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\nimport { getTextMatchParts } from \"../lib/text-match\";\n\nexport const Combobox = AriaComboBox;\nexport { ComboBoxValue as ComboboxValue };\n\nexport type { ComboBoxProps };\n\nexport function ComboboxInput({ className, ...props }: InputProps) {\n return <Input data-slot=\"combobox-input\" className={cn(\"h-8 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50\", className)} {...props} />;\n}\n\nexport function ComboboxContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <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} />;\n}\n\nexport function ComboboxList<T extends object>({ className, emptyState, ...props }: ListBoxProps<T> & { emptyState?: React.ReactNode }) {\n return <ListBox data-slot=\"combobox-list\" className={cn(\"max-h-64 overflow-y-auto\", className)} renderEmptyState={emptyState ? () => emptyState : undefined} {...props} />;\n}\n\nexport function ComboboxItem<T extends object>({ className, children, ...props }: ListBoxItemProps<T>) {\n return <ListBoxItem data-slot=\"combobox-item\" className={cn(\"flex w-full cursor-default items-center justify-between rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>\n {children}\n </ListBoxItem>;\n}\n\n/** Accent-insensitive visual highlighting for suggestion labels. */\nexport function HighlightMatch({ text, query, className }: { text: string; query: string; className?: string }) {\n return <span className={className}>{getTextMatchParts(text, query).map((part, index) => part.match ? <mark key={`${part.text}-${index}`} className=\"rounded bg-accent px-0.5 text-accent-foreground\">{part.text}</mark> : <Fragment key={`${part.text}-${index}`}>{part.text}</Fragment>)}</span>;\n}\n","import { createContext, useContext } from \"react\";\nimport {\n Dialog as AriaDialog,\n Heading,\n Modal,\n ModalOverlay,\n Text,\n type DialogProps as AriaDialogProps,\n type ModalOverlayProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\n\nconst DialogCloseContext = createContext<(() => void) | null>(null);\n\nexport type DialogProps = Omit<ModalOverlayProps, \"children\" | \"className\" | \"isOpen\"> & {\n children: React.ReactNode;\n open: boolean;\n};\n\n/** Controlled overlay root. Use `DialogContent` for its accessible surface. */\nexport function Dialog({ open, children, ...props }: DialogProps) {\n return <ModalOverlay isOpen={open} className=\"fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out\" {...props}>\n {children}\n </ModalOverlay>;\n}\n\nexport function DialogClose({ onPress, ...props }: React.ComponentProps<typeof Button>) {\n const close = useContext(DialogCloseContext);\n return <Button onPress={(event) => { onPress?.(event); close?.(); }} {...props} />;\n}\n\nexport function DialogContent({ className, children, showCloseButton = true, ...props }: AriaDialogProps & { showCloseButton?: boolean }) {\n return <Modal className=\"w-full max-w-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\">\n <AriaDialog data-slot=\"dialog-content\" className={cn(\"relative grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-5 text-foreground shadow-xl outline-none\", className)} {...props}>\n {({ close }) => <DialogCloseContext.Provider value={close}>\n {typeof children === \"function\" ? children({ close }) : children}\n {showCloseButton && <DialogClose aria-label=\"Cerrar diálogo\" variant=\"ghost\" size=\"icon\" className=\"absolute top-2 right-2\">×</DialogClose>}\n </DialogCloseContext.Provider>}\n </AriaDialog>\n </Modal>;\n}\n\nexport function DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-header\" className={cn(\"flex flex-col gap-2\", className)} {...props} />;\n}\nexport function DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-footer\" className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)} {...props} />;\n}\nexport function DialogTitle({ className, ...props }: React.ComponentProps<typeof Heading>) {\n return <Heading slot=\"title\" className={cn(\"text-base font-semibold\", className)} {...props} />;\n}\nexport function DialogDescription({ className, ...props }: React.ComponentProps<typeof Text>) {\n return <Text slot=\"description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n","import type * as React from \"react\";\nimport { Button } from \"./button\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"./dialog\";\n\nexport type ConfirmDialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: React.ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n pending?: boolean;\n onConfirm: () => void;\n};\n\n/** Controlled confirmation dialog for irreversible actions. */\nexport function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel = \"Confirmar\", cancelLabel = \"Cancelar\", destructive = false, pending = false, onConfirm }: ConfirmDialogProps) {\n return <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent showCloseButton={false}>\n <DialogHeader><DialogTitle>{title}</DialogTitle>{description && <DialogDescription>{description}</DialogDescription>}</DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" isDisabled={pending} onPress={() => onOpenChange(false)}>{cancelLabel}</Button>\n <Button variant={destructive ? \"destructive\" : \"default\"} isDisabled={pending} onPress={onConfirm}>{confirmLabel}</Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function EmptyState({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"empty-state\" className={cn(\"flex min-h-44 w-full flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border p-6 text-center\", className)} {...props} />;\n}\n\nexport function EmptyStateTitle({ className, ...props }: React.ComponentProps<\"h3\">) {\n return <h3 data-slot=\"empty-state-title\" className={cn(\"text-sm font-medium text-foreground\", className)} {...props} />;\n}\n\nexport function EmptyStateDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"empty-state-description\" className={cn(\"max-w-sm text-sm text-muted-foreground\", className)} {...props} />;\n}","import { forwardRef, type ComponentPropsWithRef } from \"react\";\nimport { Label as LabelPrimitive } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const Label = forwardRef<HTMLLabelElement, ComponentPropsWithRef<typeof LabelPrimitive>>(function Label({ className, ...props }, ref) {\n return <LabelPrimitive ref={ref} data-slot=\"label\" className={cn(\"flex items-center gap-2 text-sm font-medium leading-none select-none\", className)} {...props} />;\n});\n\nexport type LabelProps = ComponentPropsWithRef<typeof Label>;\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label } from \"./label\";\n\nexport function Field({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"field\" className={cn(\"flex w-full flex-col gap-2\", className)} {...props} />;\n}\n\nexport function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return <Label data-slot=\"field-label\" className={cn(\"text-foreground\", className)} {...props} />;\n}\n\nexport function FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"field-description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n\nexport function FieldError({ className, children, ...props }: React.ComponentProps<\"p\">) {\n if (!children) return null;\n return <p role=\"alert\" data-slot=\"field-error\" className={cn(\"text-sm text-destructive\", className)} {...props}>{children}</p>;\n}","import { forwardRef } from \"react\";\nimport { Input as AriaInput, type InputProps as AriaInputProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\ntype CompatibleRef<T> = ((instance: T | null) => unknown) | { readonly current: T | null } | null;\n\nexport type InputProps = Omit<AriaInputProps, \"ref\"> & { ref?: CompatibleRef<HTMLInputElement> };\n\nconst InputImpl = forwardRef<HTMLInputElement, AriaInputProps>(function Input({ className, type, ...props }, ref) {\n return <AriaInput ref={ref} type={type} data-slot=\"input\" className={cn(\"h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\", className)} {...props} />;\n});\n\n/** Forward-ref component with a ref type compatible across React 19 type releases. */\nexport const Input = InputImpl as unknown as (props: InputProps) => ReturnType<typeof InputImpl>;\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return <kbd data-slot=\"kbd\" className={cn(\"pointer-events-none inline-flex h-5 min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none\", className)} {...props} />;\n}\n\nexport function KbdGroup({ className, ...props }: React.ComponentProps<\"span\">) {\n return <span data-slot=\"kbd-group\" className={cn(\"inline-flex items-center gap-1\", className)} {...props} />;\n}","import {\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n MenuTrigger as AriaMenuTrigger,\n Popover,\n type MenuItemProps,\n type MenuProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const MenuTrigger = AriaMenuTrigger;\n\nexport function MenuContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <Popover data-slot=\"menu-content\" className={cn(\"min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\", className)} {...props} />;\n}\n\nexport function Menu<T extends object>({ className, ...props }: MenuProps<T>) {\n return <AriaMenu data-slot=\"menu\" className={cn(\"outline-none\", className)} {...props} />;\n}\n\nexport function MenuItem<T extends object>({ className, children, ...props }: MenuItemProps<T>) {\n return <AriaMenuItem data-slot=\"menu-item\" className={cn(\"flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>{children}</AriaMenuItem>;\n}\n","import {\n DialogTrigger as AriaDialogTrigger,\n Popover as AriaPopover,\n type DialogTriggerProps,\n type PopoverProps as AriaPopoverProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type PopoverProps = Omit<AriaPopoverProps, \"className\"> & { className?: string };\nexport type { DialogTriggerProps as PopoverTriggerProps };\n\n/** Wrap a trigger and Popover surface; React Aria handles focus and positioning. */\nexport const PopoverTrigger = AriaDialogTrigger;\n\nexport function Popover({ className, ...props }: PopoverProps) {\n return <AriaPopover data-slot=\"popover\" offset={6} className={cn(\"min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\", className)} {...props} />;\n}\n\nexport const PopoverContent = Popover;\n","import {\n SearchField as AriaSearchField,\n Button,\n Input,\n type SearchFieldProps as AriaSearchFieldProps,\n type ButtonProps,\n type InputProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const SearchField = AriaSearchField;\nexport type { AriaSearchFieldProps as SearchFieldProps };\n\nexport function SearchInput({ className, ...props }: InputProps) {\n return <Input data-slot=\"search-input\" className={cn(\"h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50\", className)} {...props} />;\n}\n\nexport function SearchClearButton({ className, children = \"×\", ...props }: Omit<ButtonProps, \"className\"> & { className?: string }) {\n return <Button slot=\"clear\" data-slot=\"search-clear\" className={cn(\"absolute top-1/2 right-1 -translate-y-1/2 rounded p-1 text-muted-foreground outline-none hover:bg-muted data-focus-visible:ring-2 data-focus-visible:ring-ring\", className)} {...props}>{children}</Button>;\n}\n","import {\n Button as AriaButton,\n Select as AriaSelect,\n SelectValue as AriaSelectValue,\n ListBox,\n ListBoxItem,\n Popover,\n type SelectProps as AriaSelectProps,\n type ButtonProps,\n type ListBoxItemProps,\n type ListBoxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const Select = AriaSelect;\nexport type { AriaSelectProps as SelectProps };\n\nexport function SelectTrigger({ className, children, ...props }: ButtonProps) {\n return <AriaButton data-slot=\"select-trigger\" className={cn(\"flex h-8 w-full min-w-36 items-center gap-2 rounded-lg border border-border bg-background px-2.5 text-left text-sm text-foreground outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>{(state) => <>{typeof children === \"function\" ? children(state) : children}<span aria-hidden=\"true\" className=\"ml-auto text-muted-foreground\">⌄</span></>}</AriaButton>;\n}\n\nexport function SelectValue({ className, ...props }: React.ComponentProps<typeof AriaSelectValue>) {\n return <AriaSelectValue data-slot=\"select-value\" className={cn(\"flex-1 truncate data-placeholder:text-muted-foreground\", className)} {...props} />;\n}\n\nexport function SelectContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <Popover data-slot=\"select-content\" className={cn(\"w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\", className)} {...props} />;\n}\n\nexport function SelectList<T extends object>({ className, ...props }: ListBoxProps<T>) {\n return <ListBox data-slot=\"select-list\" className={cn(\"max-h-64 overflow-y-auto\", className)} {...props} />;\n}\n\nexport function SelectItem<T extends object>({ className, children, ...props }: ListBoxItemProps<T>) {\n return <ListBoxItem data-slot=\"select-item\" className={cn(\"flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-selected:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>{children}</ListBoxItem>;\n}\n","import { Separator as AriaSeparator, type SeparatorProps as AriaSeparatorProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type SeparatorProps = Omit<AriaSeparatorProps, \"className\"> & { className?: string };\n\nexport function Separator({ className, orientation = \"horizontal\", ...props }: SeparatorProps) {\n return <AriaSeparator data-slot=\"separator\" orientation={orientation} className={cn(\"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\", className)} {...props} />;\n}","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div aria-hidden=\"true\" data-slot=\"skeleton\" className={cn(\"animate-pulse rounded-md bg-muted\", className)} {...props} />;\n}","import {\n Switch as AriaSwitch,\n type SwitchProps as AriaSwitchProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type SwitchProps = Omit<AriaSwitchProps, \"className\"> & { className?: string };\n\nexport function Switch({ className, children, ...props }: SwitchProps) {\n return <AriaSwitch data-slot=\"switch\" className={cn(\"group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>\n {(state) => <><span aria-hidden=\"true\" className=\"flex h-5 w-9 items-center rounded-full bg-muted p-0.5 transition-colors group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50\"><span className=\"size-4 rounded-full bg-background shadow-sm transition-transform group-data-selected:translate-x-4\" /></span>{typeof children === \"function\" ? children(state) : children}</>}\n </AriaSwitch>;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/** Presentational table primitives. Sorting, pagination and data state stay in the application. */\nexport function Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\"><table data-slot=\"table\" className={cn(\"w-full caption-bottom text-sm\", className)} {...props} /></div>;\n}\n\nexport function TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return <thead data-slot=\"table-header\" className={cn(\"border-b border-border\", className)} {...props} />;\n}\nexport function TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return <tbody data-slot=\"table-body\" className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n}\nexport function TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return <tr data-slot=\"table-row\" className={cn(\"border-b border-border transition-colors hover:bg-muted/50\", className)} {...props} />;\n}\nexport function TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return <th data-slot=\"table-head\" className={cn(\"h-10 px-3 text-left align-middle text-xs font-medium text-muted-foreground\", className)} {...props} />;\n}\nexport function TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return <td data-slot=\"table-cell\" className={cn(\"p-3 align-middle\", className)} {...props} />;\n}\nexport function TableCaption({ className, ...props }: React.ComponentProps<\"caption\">) {\n return <caption data-slot=\"table-caption\" className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />;\n}","import {\n Tab as AriaTab,\n TabList as AriaTabList,\n TabPanel as AriaTabPanel,\n TabPanels as AriaTabPanels,\n Tabs as AriaTabs,\n composeRenderProps,\n type TabListProps as AriaTabListProps,\n type TabPanelProps as AriaTabPanelProps,\n type TabPanelsProps as AriaTabPanelsProps,\n type TabProps as AriaTabProps,\n type TabsProps as AriaTabsProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type TabsProps = AriaTabsProps;\nexport type TabProps = AriaTabProps;\nexport type TabPanelProps = AriaTabPanelProps;\n\nexport function Tabs({ className, ...props }: AriaTabsProps) {\n return <AriaTabs data-slot=\"tabs\" className={composeRenderProps(className, (value) => cn(\"flex flex-col gap-2\", value))} {...props} />;\n}\n\nexport function TabsList<T extends object>({ className, ...props }: AriaTabListProps<T>) {\n return <AriaTabList data-slot=\"tabs-list\" className={composeRenderProps(className, (value) => cn(\"inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground\", value))} {...props} />;\n}\n\nexport function TabsTrigger({ className, ...props }: AriaTabProps) {\n return <AriaTab data-slot=\"tabs-trigger\" className={composeRenderProps(className, (value) => cn(\"inline-flex h-7 items-center justify-center gap-1.5 rounded-md px-2.5 text-sm font-medium outline-none transition-colors data-hovered:text-foreground data-selected:bg-background data-selected:text-foreground data-selected:shadow-sm data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50\", value))} {...props} />;\n}\n\nexport function TabsPanels<T extends object>({ className, ...props }: AriaTabPanelsProps<T>) {\n return <AriaTabPanels data-slot=\"tabs-panels\" className={cn(\"min-w-0\", className)} {...props} />;\n}\n\nexport function TabsContent({ className, ...props }: AriaTabPanelProps) {\n return <AriaTabPanel data-slot=\"tabs-content\" className={composeRenderProps(className, (value) => cn(\"text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50\", value))} {...props} />;\n}","import { forwardRef } from \"react\";\nimport { TextArea as AriaTextArea, type TextAreaProps as AriaTextAreaProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\ntype CompatibleRef<T> = ((instance: T | null) => unknown) | { readonly current: T | null } | null;\n\nexport type TextareaProps = Omit<AriaTextAreaProps, \"ref\"> & { ref?: CompatibleRef<HTMLTextAreaElement> };\n\nconst TextareaImpl = forwardRef<HTMLTextAreaElement, AriaTextAreaProps>(function Textarea({ className, ...props }, ref) {\n return <AriaTextArea ref={ref} data-slot=\"textarea\" className={cn(\"min-h-20 w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\", className)} {...props} />;\n});\n\n/** Forward-ref component with a ref type compatible across React 19 type releases. */\nexport const Textarea = TextareaImpl as unknown as (props: TextareaProps) => ReturnType<typeof TextareaImpl>;\n","import {\n Tooltip as AriaTooltip,\n TooltipTrigger as AriaTooltipTrigger,\n type TooltipProps as AriaTooltipProps,\n type TooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type TooltipProps = Omit<AriaTooltipProps, \"className\"> & { className?: string };\nexport type { TooltipTriggerComponentProps };\n\nexport const TooltipTrigger = AriaTooltipTrigger;\n\nexport function Tooltip({ className, ...props }: TooltipProps) {\n return <AriaTooltip data-slot=\"tooltip\" offset={6} className={cn(\"max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\", className)} {...props} />;\n}\n\nexport const TooltipContent = Tooltip;\n"],"mappings":"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","names":["Input","Popover","Textarea","import_react","import_react","import_class_variance_authority","import_jsx_runtime","AriaButton","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaCheckbox","import_react","import_react_aria_components","import_jsx_runtime","AriaComboBox","import_react","import_react_aria_components","import_jsx_runtime","AriaDialog","import_jsx_runtime","import_jsx_runtime","import_react","import_react_aria_components","import_jsx_runtime","Label","LabelPrimitive","import_jsx_runtime","import_react","import_react_aria_components","import_jsx_runtime","Input","AriaInput","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaMenuTrigger","AriaMenu","AriaMenuItem","import_react_aria_components","import_jsx_runtime","AriaDialogTrigger","Popover","AriaPopover","import_react_aria_components","import_jsx_runtime","AriaSearchField","import_react_aria_components","import_jsx_runtime","AriaSelect","AriaButton","AriaSelectValue","import_react_aria_components","import_jsx_runtime","AriaSeparator","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaSwitch","import_jsx_runtime","import_react_aria_components","import_jsx_runtime","AriaTabs","AriaTabList","AriaTab","AriaTabPanels","AriaTabPanel","import_react","import_react_aria_components","import_jsx_runtime","AriaTextArea","Textarea","import_react_aria_components","import_jsx_runtime","AriaTooltipTrigger","AriaTooltip"]}
|
package/dist/index.js
CHANGED
|
@@ -242,7 +242,7 @@ function ComboboxInput({ className, ...props }) {
|
|
|
242
242
|
return /* @__PURE__ */ jsx5(Input, { "data-slot": "combobox-input", className: cn("h-8 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props });
|
|
243
243
|
}
|
|
244
244
|
function ComboboxContent({ className, ...props }) {
|
|
245
|
-
return /* @__PURE__ */ jsx5(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", className), ...props });
|
|
245
|
+
return /* @__PURE__ */ jsx5(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 });
|
|
246
246
|
}
|
|
247
247
|
function ComboboxList({ className, emptyState, ...props }) {
|
|
248
248
|
return /* @__PURE__ */ jsx5(ListBox, { "data-slot": "combobox-list", className: cn("max-h-64 overflow-y-auto", className), renderEmptyState: emptyState ? () => emptyState : void 0, ...props });
|
|
@@ -266,7 +266,7 @@ import {
|
|
|
266
266
|
import { jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
267
267
|
var DialogCloseContext = createContext(null);
|
|
268
268
|
function Dialog({ open, children, ...props }) {
|
|
269
|
-
return /* @__PURE__ */ jsx6(ModalOverlay, { isOpen: open, className: "fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px]", ...props, children });
|
|
269
|
+
return /* @__PURE__ */ jsx6(ModalOverlay, { isOpen: open, className: "fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out", ...props, children });
|
|
270
270
|
}
|
|
271
271
|
function DialogClose({ onPress, ...props }) {
|
|
272
272
|
const close = useContext(DialogCloseContext);
|
|
@@ -276,7 +276,7 @@ function DialogClose({ onPress, ...props }) {
|
|
|
276
276
|
}, ...props });
|
|
277
277
|
}
|
|
278
278
|
function DialogContent({ className, children, showCloseButton = true, ...props }) {
|
|
279
|
-
return /* @__PURE__ */ jsx6(Modal, { className: "w-full max-w-md outline-none", children: /* @__PURE__ */ jsx6(AriaDialog, { "data-slot": "dialog-content", className: cn("relative grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-5 text-foreground shadow-xl outline-none", className), ...props, children: ({ close }) => /* @__PURE__ */ jsxs2(DialogCloseContext.Provider, { value: close, children: [
|
|
279
|
+
return /* @__PURE__ */ jsx6(Modal, { className: "w-full max-w-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", children: /* @__PURE__ */ jsx6(AriaDialog, { "data-slot": "dialog-content", className: cn("relative grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-5 text-foreground shadow-xl outline-none", className), ...props, children: ({ close }) => /* @__PURE__ */ jsxs2(DialogCloseContext.Provider, { value: close, children: [
|
|
280
280
|
typeof children === "function" ? children({ close }) : children,
|
|
281
281
|
showCloseButton && /* @__PURE__ */ jsx6(DialogClose, { "aria-label": "Cerrar di\xE1logo", variant: "ghost", size: "icon", className: "absolute top-2 right-2", children: "\xD7" })
|
|
282
282
|
] }) }) });
|
|
@@ -373,7 +373,7 @@ import {
|
|
|
373
373
|
import { jsx as jsx13 } from "react/jsx-runtime";
|
|
374
374
|
var MenuTrigger = AriaMenuTrigger;
|
|
375
375
|
function MenuContent({ className, ...props }) {
|
|
376
|
-
return /* @__PURE__ */ jsx13(Popover2, { "data-slot": "menu-content", className: cn("min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg", className), ...props });
|
|
376
|
+
return /* @__PURE__ */ jsx13(Popover2, { "data-slot": "menu-content", className: cn("min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
|
|
377
377
|
}
|
|
378
378
|
function Menu({ className, ...props }) {
|
|
379
379
|
return /* @__PURE__ */ jsx13(AriaMenu, { "data-slot": "menu", className: cn("outline-none", className), ...props });
|
|
@@ -390,7 +390,7 @@ import {
|
|
|
390
390
|
import { jsx as jsx14 } from "react/jsx-runtime";
|
|
391
391
|
var PopoverTrigger = AriaDialogTrigger;
|
|
392
392
|
function Popover3({ className, ...props }) {
|
|
393
|
-
return /* @__PURE__ */ jsx14(AriaPopover, { "data-slot": "popover", offset: 6, className: cn("min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none data-entering:animate-
|
|
393
|
+
return /* @__PURE__ */ jsx14(AriaPopover, { "data-slot": "popover", offset: 6, className: cn("min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
|
|
394
394
|
}
|
|
395
395
|
var PopoverContent = Popover3;
|
|
396
396
|
|
|
@@ -430,7 +430,7 @@ function SelectValue({ className, ...props }) {
|
|
|
430
430
|
return /* @__PURE__ */ jsx16(AriaSelectValue, { "data-slot": "select-value", className: cn("flex-1 truncate data-placeholder:text-muted-foreground", className), ...props });
|
|
431
431
|
}
|
|
432
432
|
function SelectContent({ className, ...props }) {
|
|
433
|
-
return /* @__PURE__ */ jsx16(Popover4, { "data-slot": "select-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg", className), ...props });
|
|
433
|
+
return /* @__PURE__ */ jsx16(Popover4, { "data-slot": "select-content", className: cn("w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
|
|
434
434
|
}
|
|
435
435
|
function SelectList({ className, ...props }) {
|
|
436
436
|
return /* @__PURE__ */ jsx16(ListBox2, { "data-slot": "select-list", className: cn("max-h-64 overflow-y-auto", className), ...props });
|
|
@@ -531,7 +531,7 @@ import {
|
|
|
531
531
|
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
532
532
|
var TooltipTrigger = AriaTooltipTrigger;
|
|
533
533
|
function Tooltip({ className, ...props }) {
|
|
534
|
-
return /* @__PURE__ */ jsx23(AriaTooltip, { "data-slot": "tooltip", offset: 6, className: cn("max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md outline-none data-entering:animate-
|
|
534
|
+
return /* @__PURE__ */ jsx23(AriaTooltip, { "data-slot": "tooltip", offset: 6, className: cn("max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out", className), ...props });
|
|
535
535
|
}
|
|
536
536
|
var TooltipContent = Tooltip;
|
|
537
537
|
export {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/use-autosave.ts","../src/hooks/use-debounced-value.ts","../src/hooks/use-form-dirty.ts","../src/lib/cn.ts","../src/lib/text-match.ts","../src/ui/badge.tsx","../src/ui/button.tsx","../src/ui/card.tsx","../src/ui/checkbox.tsx","../src/ui/combobox.tsx","../src/ui/dialog.tsx","../src/ui/confirm-dialog.tsx","../src/ui/empty-state.tsx","../src/ui/label.tsx","../src/ui/field.tsx","../src/ui/input.tsx","../src/ui/kbd.tsx","../src/ui/menu.tsx","../src/ui/popover.tsx","../src/ui/search-field.tsx","../src/ui/select.tsx","../src/ui/separator.tsx","../src/ui/skeleton.tsx","../src/ui/switch.tsx","../src/ui/table.tsx","../src/ui/tabs.tsx","../src/ui/textarea.tsx","../src/ui/tooltip.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport type AutosaveStatus = \"idle\" | \"saving\" | \"saved\" | \"error\";\n\nexport type UseAutosaveOptions<T> = {\n data: T;\n onSave: (data: T) => Promise<void>;\n debounceMs?: number;\n enabled?: boolean;\n serialize?: (data: T) => string;\n};\n\n/** Debounced autosave with stale-value protection and an explicit `saveNow`. */\nexport function useAutosave<T>({\n data,\n onSave,\n debounceMs = 1_000,\n enabled = true,\n serialize = JSON.stringify,\n}: UseAutosaveOptions<T>) {\n const [status, setStatus] = useState<AutosaveStatus>(\"idle\");\n const [error, setError] = useState<Error | null>(null);\n const lastSaved = useRef<string | null>(null);\n const saveRef = useRef(onSave);\n const serializeRef = useRef(serialize);\n\n useEffect(() => {\n saveRef.current = onSave;\n serializeRef.current = serialize;\n }, [onSave, serialize]);\n\n const save = useCallback(async (value: T) => {\n setStatus(\"saving\");\n setError(null);\n try {\n await saveRef.current(value);\n lastSaved.current = serializeRef.current(value);\n setStatus(\"saved\");\n } catch (cause) {\n setError(cause instanceof Error ? cause : new Error(\"No se pudo guardar.\"));\n setStatus(\"error\");\n }\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n const snapshot = serializeRef.current(data);\n if (lastSaved.current === null) {\n lastSaved.current = snapshot;\n return;\n }\n if (snapshot === lastSaved.current) return;\n const timeout = window.setTimeout(() => void save(data), debounceMs);\n return () => window.clearTimeout(timeout);\n }, [data, debounceMs, enabled, save]);\n\n return { status, error, saveNow: () => save(data) };\n}","import { useEffect, useState } from \"react\";\n\n/** Returns a value only after it has been stable for the supplied delay. */\nexport function useDebouncedValue<T>(value: T, delay = 250) {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timeout = window.setTimeout(() => setDebouncedValue(value), delay);\n return () => window.clearTimeout(timeout);\n }, [delay, value]);\n\n return debouncedValue;\n}","import { type RefCallback, useCallback, useRef, useState } from \"react\";\n\nexport function formSnapshot(form: HTMLFormElement): string {\n const entries: Array<[string, string]> = Array.from(new FormData(form), ([key, value]) => [key, typeof value === \"string\" ? value : value.name]);\n entries.sort(([left], [right]) => left.localeCompare(right));\n return JSON.stringify(entries);\n}\n\nexport interface UseFormDirtyResult<T extends HTMLFormElement = HTMLFormElement> {\n formRef: RefCallback<T | null>;\n isDirty: boolean;\n markDirty: () => void;\n reset: () => void;\n}\n\n/** Tracks changes in native form controls and supports controlled fields. */\nexport function useFormDirty<T extends HTMLFormElement = HTMLFormElement>(): UseFormDirtyResult<T> {\n const formElement = useRef<T | null>(null);\n const baseline = useRef<string | null>(null);\n const [isDirty, setIsDirty] = useState(false);\n\n const recompute = useCallback(() => {\n if (formElement.current && baseline.current !== null) {\n setIsDirty(formSnapshot(formElement.current) !== baseline.current);\n }\n }, []);\n\n const reset = useCallback(() => {\n if (formElement.current) {\n baseline.current = formSnapshot(formElement.current);\n setIsDirty(false);\n }\n }, []);\n\n const formRef = useCallback<RefCallback<T | null>>((form) => {\n if (formElement.current) {\n formElement.current.removeEventListener(\"input\", recompute);\n formElement.current.removeEventListener(\"change\", recompute);\n formElement.current.removeEventListener(\"reset\", recompute);\n }\n formElement.current = form;\n if (form) {\n baseline.current = formSnapshot(form);\n setIsDirty(false);\n form.addEventListener(\"input\", recompute);\n form.addEventListener(\"change\", recompute);\n form.addEventListener(\"reset\", recompute);\n }\n }, [recompute]);\n\n return { formRef, isDirty, markDirty: () => setIsDirty(true), reset };\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merges conditional class names, resolving conflicting Tailwind utilities. */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}","export type TextMatchPart = {\n text: string;\n match: boolean;\n};\n\nfunction normalize(value: string) {\n return value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLocaleLowerCase();\n}\n\nfunction normalizedTextWithRanges(value: string) {\n const ranges: Array<{ start: number; end: number }> = [];\n let normalized = \"\";\n let sourceIndex = 0;\n\n for (const character of value) {\n const start = sourceIndex;\n sourceIndex += character.length;\n const normalizedCharacter = normalize(character);\n normalized += normalizedCharacter;\n for (let index = 0; index < normalizedCharacter.length; index += 1) {\n ranges.push({ start, end: sourceIndex });\n }\n }\n\n return { normalized, ranges };\n}\n\n/**\n * Splits text into matching and non-matching chunks. Matching is case- and\n * accent-insensitive while preserving the original text for rendering.\n */\nexport function getTextMatchParts(text: string, query: string): TextMatchPart[] {\n const term = normalize(query.trim());\n if (!term) return [{ text, match: false }];\n\n const { normalized, ranges } = normalizedTextWithRanges(text);\n const parts: TextMatchPart[] = [];\n let sourceCursor = 0;\n let index = normalized.indexOf(term);\n\n while (index !== -1) {\n const rangeStart = ranges[index]?.start;\n const rangeEnd = ranges[index + term.length - 1]?.end;\n if (rangeStart === undefined || rangeEnd === undefined) break;\n if (rangeStart > sourceCursor) parts.push({ text: text.slice(sourceCursor, rangeStart), match: false });\n parts.push({ text: text.slice(rangeStart, rangeEnd), match: true });\n sourceCursor = rangeEnd;\n index = normalized.indexOf(term, index + term.length);\n }\n\n if (sourceCursor < text.length) parts.push({ text: text.slice(sourceCursor), match: false });\n return parts.length ? parts : [{ text, match: false }];\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport const badgeVariants = cva(\"inline-flex w-fit items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground\",\n secondary: \"bg-secondary text-secondary-foreground\",\n neutral: \"bg-muted text-muted-foreground\",\n success: \"bg-success/10 text-success\",\n warning: \"bg-warning/10 text-warning\",\n destructive: \"bg-destructive/10 text-destructive\",\n outline: \"border border-border text-foreground\",\n },\n },\n defaultVariants: { variant: \"default\" },\n});\n\nexport type BadgeProps = React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>;\n\nexport function Badge({ className, variant, ...props }: BadgeProps) {\n return <span data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-1.5 rounded-lg border border-transparent text-sm font-medium whitespace-nowrap transition-colors outline-none focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/85\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline: \"border-border bg-background text-foreground hover:bg-muted\",\n ghost: \"text-foreground hover:bg-muted\",\n destructive: \"bg-destructive/10 text-destructive hover:bg-destructive/20\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-6 px-2 text-xs\",\n sm: \"h-7 px-2.5 text-xs\",\n default: \"h-8 px-3\",\n lg: \"h-10 px-4\",\n icon: \"size-8 p-0\",\n },\n },\n defaultVariants: { variant: \"default\", size: \"default\" },\n },\n);\n\nexport type ButtonProps = AriaButtonProps & VariantProps<typeof buttonVariants>;\n\nexport function Button({ className, variant, size, ...props }: ButtonProps) {\n return <AriaButton data-slot=\"button\" className={cn(buttonVariants({ variant, size }), className)} {...props} />;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Card({ className, ...props }: React.ComponentProps<\"section\">) {\n return <section data-slot=\"card\" className={cn(\"rounded-xl border border-border bg-card text-foreground shadow-sm\", className)} {...props} />;\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<\"header\">) {\n return <header data-slot=\"card-header\" className={cn(\"flex flex-col gap-1.5 p-5\", className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return <h2 data-slot=\"card-title\" className={cn(\"text-base font-semibold\", className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"card-description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"p-5 pt-0\", className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<\"footer\">) {\n return <footer data-slot=\"card-footer\" className={cn(\"flex items-center gap-2 border-t border-border p-5\", className)} {...props} />;\n}","import {\n Checkbox as AriaCheckbox,\n type CheckboxProps as AriaCheckboxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type CheckboxProps = Omit<AriaCheckboxProps, \"className\"> & { className?: string };\n\nexport function Checkbox({ className, children, ...props }: CheckboxProps) {\n return <AriaCheckbox data-slot=\"checkbox\" className={cn(\"group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>\n {(state) => <><span aria-hidden=\"true\" className=\"grid size-4 place-items-center rounded border border-border bg-background text-xs text-primary-foreground group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50\">✓</span>{typeof children === \"function\" ? children(state) : children}</>}\n </AriaCheckbox>;\n}\n","import { Fragment } from \"react\";\nimport {\n ComboBox as AriaComboBox,\n ComboBoxValue,\n Input,\n ListBox,\n ListBoxItem,\n Popover,\n type ComboBoxProps,\n type InputProps,\n type ListBoxItemProps,\n type ListBoxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\nimport { getTextMatchParts } from \"../lib/text-match\";\n\nexport const Combobox = AriaComboBox;\nexport { ComboBoxValue as ComboboxValue };\n\nexport type { ComboBoxProps };\n\nexport function ComboboxInput({ className, ...props }: InputProps) {\n return <Input data-slot=\"combobox-input\" className={cn(\"h-8 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50\", className)} {...props} />;\n}\n\nexport function ComboboxContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <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\", className)} {...props} />;\n}\n\nexport function ComboboxList<T extends object>({ className, emptyState, ...props }: ListBoxProps<T> & { emptyState?: React.ReactNode }) {\n return <ListBox data-slot=\"combobox-list\" className={cn(\"max-h-64 overflow-y-auto\", className)} renderEmptyState={emptyState ? () => emptyState : undefined} {...props} />;\n}\n\nexport function ComboboxItem<T extends object>({ className, children, ...props }: ListBoxItemProps<T>) {\n return <ListBoxItem data-slot=\"combobox-item\" className={cn(\"flex w-full cursor-default items-center justify-between rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>\n {children}\n </ListBoxItem>;\n}\n\n/** Accent-insensitive visual highlighting for suggestion labels. */\nexport function HighlightMatch({ text, query, className }: { text: string; query: string; className?: string }) {\n return <span className={className}>{getTextMatchParts(text, query).map((part, index) => part.match ? <mark key={`${part.text}-${index}`} className=\"rounded bg-accent px-0.5 text-accent-foreground\">{part.text}</mark> : <Fragment key={`${part.text}-${index}`}>{part.text}</Fragment>)}</span>;\n}\n","import { createContext, useContext } from \"react\";\nimport {\n Dialog as AriaDialog,\n Heading,\n Modal,\n ModalOverlay,\n Text,\n type DialogProps as AriaDialogProps,\n type ModalOverlayProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\n\nconst DialogCloseContext = createContext<(() => void) | null>(null);\n\nexport type DialogProps = Omit<ModalOverlayProps, \"children\" | \"className\" | \"isOpen\"> & {\n children: React.ReactNode;\n open: boolean;\n};\n\n/** Controlled overlay root. Use `DialogContent` for its accessible surface. */\nexport function Dialog({ open, children, ...props }: DialogProps) {\n return <ModalOverlay isOpen={open} className=\"fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px]\" {...props}>\n {children}\n </ModalOverlay>;\n}\n\nexport function DialogClose({ onPress, ...props }: React.ComponentProps<typeof Button>) {\n const close = useContext(DialogCloseContext);\n return <Button onPress={(event) => { onPress?.(event); close?.(); }} {...props} />;\n}\n\nexport function DialogContent({ className, children, showCloseButton = true, ...props }: AriaDialogProps & { showCloseButton?: boolean }) {\n return <Modal className=\"w-full max-w-md outline-none\">\n <AriaDialog data-slot=\"dialog-content\" className={cn(\"relative grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-5 text-foreground shadow-xl outline-none\", className)} {...props}>\n {({ close }) => <DialogCloseContext.Provider value={close}>\n {typeof children === \"function\" ? children({ close }) : children}\n {showCloseButton && <DialogClose aria-label=\"Cerrar diálogo\" variant=\"ghost\" size=\"icon\" className=\"absolute top-2 right-2\">×</DialogClose>}\n </DialogCloseContext.Provider>}\n </AriaDialog>\n </Modal>;\n}\n\nexport function DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-header\" className={cn(\"flex flex-col gap-2\", className)} {...props} />;\n}\nexport function DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-footer\" className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)} {...props} />;\n}\nexport function DialogTitle({ className, ...props }: React.ComponentProps<typeof Heading>) {\n return <Heading slot=\"title\" className={cn(\"text-base font-semibold\", className)} {...props} />;\n}\nexport function DialogDescription({ className, ...props }: React.ComponentProps<typeof Text>) {\n return <Text slot=\"description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n","import type * as React from \"react\";\nimport { Button } from \"./button\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"./dialog\";\n\nexport type ConfirmDialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: React.ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n pending?: boolean;\n onConfirm: () => void;\n};\n\n/** Controlled confirmation dialog for irreversible actions. */\nexport function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel = \"Confirmar\", cancelLabel = \"Cancelar\", destructive = false, pending = false, onConfirm }: ConfirmDialogProps) {\n return <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent showCloseButton={false}>\n <DialogHeader><DialogTitle>{title}</DialogTitle>{description && <DialogDescription>{description}</DialogDescription>}</DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" isDisabled={pending} onPress={() => onOpenChange(false)}>{cancelLabel}</Button>\n <Button variant={destructive ? \"destructive\" : \"default\"} isDisabled={pending} onPress={onConfirm}>{confirmLabel}</Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function EmptyState({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"empty-state\" className={cn(\"flex min-h-44 w-full flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border p-6 text-center\", className)} {...props} />;\n}\n\nexport function EmptyStateTitle({ className, ...props }: React.ComponentProps<\"h3\">) {\n return <h3 data-slot=\"empty-state-title\" className={cn(\"text-sm font-medium text-foreground\", className)} {...props} />;\n}\n\nexport function EmptyStateDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"empty-state-description\" className={cn(\"max-w-sm text-sm text-muted-foreground\", className)} {...props} />;\n}","import { forwardRef, type ComponentPropsWithRef } from \"react\";\nimport { Label as LabelPrimitive } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const Label = forwardRef<HTMLLabelElement, ComponentPropsWithRef<typeof LabelPrimitive>>(function Label({ className, ...props }, ref) {\n return <LabelPrimitive ref={ref} data-slot=\"label\" className={cn(\"flex items-center gap-2 text-sm font-medium leading-none select-none\", className)} {...props} />;\n});\n\nexport type LabelProps = ComponentPropsWithRef<typeof Label>;\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label } from \"./label\";\n\nexport function Field({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"field\" className={cn(\"flex w-full flex-col gap-2\", className)} {...props} />;\n}\n\nexport function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return <Label data-slot=\"field-label\" className={cn(\"text-foreground\", className)} {...props} />;\n}\n\nexport function FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"field-description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n\nexport function FieldError({ className, children, ...props }: React.ComponentProps<\"p\">) {\n if (!children) return null;\n return <p role=\"alert\" data-slot=\"field-error\" className={cn(\"text-sm text-destructive\", className)} {...props}>{children}</p>;\n}","import { forwardRef } from \"react\";\nimport { Input as AriaInput, type InputProps as AriaInputProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\ntype CompatibleRef<T> = ((instance: T | null) => unknown) | { readonly current: T | null } | null;\n\nexport type InputProps = Omit<AriaInputProps, \"ref\"> & { ref?: CompatibleRef<HTMLInputElement> };\n\nconst InputImpl = forwardRef<HTMLInputElement, AriaInputProps>(function Input({ className, type, ...props }, ref) {\n return <AriaInput ref={ref} type={type} data-slot=\"input\" className={cn(\"h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\", className)} {...props} />;\n});\n\n/** Forward-ref component with a ref type compatible across React 19 type releases. */\nexport const Input = InputImpl as unknown as (props: InputProps) => ReturnType<typeof InputImpl>;\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return <kbd data-slot=\"kbd\" className={cn(\"pointer-events-none inline-flex h-5 min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none\", className)} {...props} />;\n}\n\nexport function KbdGroup({ className, ...props }: React.ComponentProps<\"span\">) {\n return <span data-slot=\"kbd-group\" className={cn(\"inline-flex items-center gap-1\", className)} {...props} />;\n}","import {\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n MenuTrigger as AriaMenuTrigger,\n Popover,\n type MenuItemProps,\n type MenuProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const MenuTrigger = AriaMenuTrigger;\n\nexport function MenuContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <Popover data-slot=\"menu-content\" className={cn(\"min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg\", className)} {...props} />;\n}\n\nexport function Menu<T extends object>({ className, ...props }: MenuProps<T>) {\n return <AriaMenu data-slot=\"menu\" className={cn(\"outline-none\", className)} {...props} />;\n}\n\nexport function MenuItem<T extends object>({ className, children, ...props }: MenuItemProps<T>) {\n return <AriaMenuItem data-slot=\"menu-item\" className={cn(\"flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>{children}</AriaMenuItem>;\n}","import {\n DialogTrigger as AriaDialogTrigger,\n Popover as AriaPopover,\n type DialogTriggerProps,\n type PopoverProps as AriaPopoverProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type PopoverProps = Omit<AriaPopoverProps, \"className\"> & { className?: string };\nexport type { DialogTriggerProps as PopoverTriggerProps };\n\n/** Wrap a trigger and Popover surface; React Aria handles focus and positioning. */\nexport const PopoverTrigger = AriaDialogTrigger;\n\nexport function Popover({ className, ...props }: PopoverProps) {\n return <AriaPopover data-slot=\"popover\" offset={6} className={cn(\"min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none data-entering:animate-in data-entering:fade-in-0 data-entering:zoom-in-95 data-exiting:animate-out data-exiting:fade-out-0 data-exiting:zoom-out-95\", className)} {...props} />;\n}\n\nexport const PopoverContent = Popover;","import {\n SearchField as AriaSearchField,\n Button,\n Input,\n type SearchFieldProps as AriaSearchFieldProps,\n type ButtonProps,\n type InputProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const SearchField = AriaSearchField;\nexport type { AriaSearchFieldProps as SearchFieldProps };\n\nexport function SearchInput({ className, ...props }: InputProps) {\n return <Input data-slot=\"search-input\" className={cn(\"h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50\", className)} {...props} />;\n}\n\nexport function SearchClearButton({ className, children = \"×\", ...props }: Omit<ButtonProps, \"className\"> & { className?: string }) {\n return <Button slot=\"clear\" data-slot=\"search-clear\" className={cn(\"absolute top-1/2 right-1 -translate-y-1/2 rounded p-1 text-muted-foreground outline-none hover:bg-muted data-focus-visible:ring-2 data-focus-visible:ring-ring\", className)} {...props}>{children}</Button>;\n}\n","import {\n Button as AriaButton,\n Select as AriaSelect,\n SelectValue as AriaSelectValue,\n ListBox,\n ListBoxItem,\n Popover,\n type SelectProps as AriaSelectProps,\n type ButtonProps,\n type ListBoxItemProps,\n type ListBoxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const Select = AriaSelect;\nexport type { AriaSelectProps as SelectProps };\n\nexport function SelectTrigger({ className, children, ...props }: ButtonProps) {\n return <AriaButton data-slot=\"select-trigger\" className={cn(\"flex h-8 w-full min-w-36 items-center gap-2 rounded-lg border border-border bg-background px-2.5 text-left text-sm text-foreground outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>{(state) => <>{typeof children === \"function\" ? children(state) : children}<span aria-hidden=\"true\" className=\"ml-auto text-muted-foreground\">⌄</span></>}</AriaButton>;\n}\n\nexport function SelectValue({ className, ...props }: React.ComponentProps<typeof AriaSelectValue>) {\n return <AriaSelectValue data-slot=\"select-value\" className={cn(\"flex-1 truncate data-placeholder:text-muted-foreground\", className)} {...props} />;\n}\n\nexport function SelectContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <Popover data-slot=\"select-content\" className={cn(\"w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg\", className)} {...props} />;\n}\n\nexport function SelectList<T extends object>({ className, ...props }: ListBoxProps<T>) {\n return <ListBox data-slot=\"select-list\" className={cn(\"max-h-64 overflow-y-auto\", className)} {...props} />;\n}\n\nexport function SelectItem<T extends object>({ className, children, ...props }: ListBoxItemProps<T>) {\n return <ListBoxItem data-slot=\"select-item\" className={cn(\"flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-selected:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>{children}</ListBoxItem>;\n}\n","import { Separator as AriaSeparator, type SeparatorProps as AriaSeparatorProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type SeparatorProps = Omit<AriaSeparatorProps, \"className\"> & { className?: string };\n\nexport function Separator({ className, orientation = \"horizontal\", ...props }: SeparatorProps) {\n return <AriaSeparator data-slot=\"separator\" orientation={orientation} className={cn(\"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\", className)} {...props} />;\n}","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div aria-hidden=\"true\" data-slot=\"skeleton\" className={cn(\"animate-pulse rounded-md bg-muted\", className)} {...props} />;\n}","import {\n Switch as AriaSwitch,\n type SwitchProps as AriaSwitchProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type SwitchProps = Omit<AriaSwitchProps, \"className\"> & { className?: string };\n\nexport function Switch({ className, children, ...props }: SwitchProps) {\n return <AriaSwitch data-slot=\"switch\" className={cn(\"group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>\n {(state) => <><span aria-hidden=\"true\" className=\"flex h-5 w-9 items-center rounded-full bg-muted p-0.5 transition-colors group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50\"><span className=\"size-4 rounded-full bg-background shadow-sm transition-transform group-data-selected:translate-x-4\" /></span>{typeof children === \"function\" ? children(state) : children}</>}\n </AriaSwitch>;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/** Presentational table primitives. Sorting, pagination and data state stay in the application. */\nexport function Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\"><table data-slot=\"table\" className={cn(\"w-full caption-bottom text-sm\", className)} {...props} /></div>;\n}\n\nexport function TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return <thead data-slot=\"table-header\" className={cn(\"border-b border-border\", className)} {...props} />;\n}\nexport function TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return <tbody data-slot=\"table-body\" className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n}\nexport function TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return <tr data-slot=\"table-row\" className={cn(\"border-b border-border transition-colors hover:bg-muted/50\", className)} {...props} />;\n}\nexport function TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return <th data-slot=\"table-head\" className={cn(\"h-10 px-3 text-left align-middle text-xs font-medium text-muted-foreground\", className)} {...props} />;\n}\nexport function TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return <td data-slot=\"table-cell\" className={cn(\"p-3 align-middle\", className)} {...props} />;\n}\nexport function TableCaption({ className, ...props }: React.ComponentProps<\"caption\">) {\n return <caption data-slot=\"table-caption\" className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />;\n}","import {\n Tab as AriaTab,\n TabList as AriaTabList,\n TabPanel as AriaTabPanel,\n TabPanels as AriaTabPanels,\n Tabs as AriaTabs,\n composeRenderProps,\n type TabListProps as AriaTabListProps,\n type TabPanelProps as AriaTabPanelProps,\n type TabPanelsProps as AriaTabPanelsProps,\n type TabProps as AriaTabProps,\n type TabsProps as AriaTabsProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type TabsProps = AriaTabsProps;\nexport type TabProps = AriaTabProps;\nexport type TabPanelProps = AriaTabPanelProps;\n\nexport function Tabs({ className, ...props }: AriaTabsProps) {\n return <AriaTabs data-slot=\"tabs\" className={composeRenderProps(className, (value) => cn(\"flex flex-col gap-2\", value))} {...props} />;\n}\n\nexport function TabsList<T extends object>({ className, ...props }: AriaTabListProps<T>) {\n return <AriaTabList data-slot=\"tabs-list\" className={composeRenderProps(className, (value) => cn(\"inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground\", value))} {...props} />;\n}\n\nexport function TabsTrigger({ className, ...props }: AriaTabProps) {\n return <AriaTab data-slot=\"tabs-trigger\" className={composeRenderProps(className, (value) => cn(\"inline-flex h-7 items-center justify-center gap-1.5 rounded-md px-2.5 text-sm font-medium outline-none transition-colors data-hovered:text-foreground data-selected:bg-background data-selected:text-foreground data-selected:shadow-sm data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50\", value))} {...props} />;\n}\n\nexport function TabsPanels<T extends object>({ className, ...props }: AriaTabPanelsProps<T>) {\n return <AriaTabPanels data-slot=\"tabs-panels\" className={cn(\"min-w-0\", className)} {...props} />;\n}\n\nexport function TabsContent({ className, ...props }: AriaTabPanelProps) {\n return <AriaTabPanel data-slot=\"tabs-content\" className={composeRenderProps(className, (value) => cn(\"text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50\", value))} {...props} />;\n}","import { forwardRef } from \"react\";\nimport { TextArea as AriaTextArea, type TextAreaProps as AriaTextAreaProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\ntype CompatibleRef<T> = ((instance: T | null) => unknown) | { readonly current: T | null } | null;\n\nexport type TextareaProps = Omit<AriaTextAreaProps, \"ref\"> & { ref?: CompatibleRef<HTMLTextAreaElement> };\n\nconst TextareaImpl = forwardRef<HTMLTextAreaElement, AriaTextAreaProps>(function Textarea({ className, ...props }, ref) {\n return <AriaTextArea ref={ref} data-slot=\"textarea\" className={cn(\"min-h-20 w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\", className)} {...props} />;\n});\n\n/** Forward-ref component with a ref type compatible across React 19 type releases. */\nexport const Textarea = TextareaImpl as unknown as (props: TextareaProps) => ReturnType<typeof TextareaImpl>;\n","import {\n Tooltip as AriaTooltip,\n TooltipTrigger as AriaTooltipTrigger,\n type TooltipProps as AriaTooltipProps,\n type TooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type TooltipProps = Omit<AriaTooltipProps, \"className\"> & { className?: string };\nexport type { TooltipTriggerComponentProps };\n\nexport const TooltipTrigger = AriaTooltipTrigger;\n\nexport function Tooltip({ className, ...props }: TooltipProps) {\n return <AriaTooltip data-slot=\"tooltip\" offset={6} className={cn(\"max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md outline-none data-entering:animate-in data-entering:fade-in-0 data-entering:zoom-in-95 data-exiting:animate-out data-exiting:fade-out-0 data-exiting:zoom-out-95\", className)} {...props} />;\n}\n\nexport const TooltipContent = Tooltip;"],"mappings":"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","names":["useEffect","useState","useCallback","useRef","useState","cva","jsx","cva","jsx","jsx","Fragment","jsx","jsx","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsx","Label","jsx","forwardRef","jsx","forwardRef","Input","jsx","Popover","jsx","Popover","jsx","Popover","Button","Input","jsx","Input","Button","AriaButton","ListBox","ListBoxItem","Popover","Fragment","jsx","jsxs","AriaButton","Popover","ListBox","ListBoxItem","jsx","jsx","Fragment","jsx","jsxs","jsx","jsx","forwardRef","jsx","forwardRef","Textarea","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-autosave.ts","../src/hooks/use-debounced-value.ts","../src/hooks/use-form-dirty.ts","../src/lib/cn.ts","../src/lib/text-match.ts","../src/ui/badge.tsx","../src/ui/button.tsx","../src/ui/card.tsx","../src/ui/checkbox.tsx","../src/ui/combobox.tsx","../src/ui/dialog.tsx","../src/ui/confirm-dialog.tsx","../src/ui/empty-state.tsx","../src/ui/label.tsx","../src/ui/field.tsx","../src/ui/input.tsx","../src/ui/kbd.tsx","../src/ui/menu.tsx","../src/ui/popover.tsx","../src/ui/search-field.tsx","../src/ui/select.tsx","../src/ui/separator.tsx","../src/ui/skeleton.tsx","../src/ui/switch.tsx","../src/ui/table.tsx","../src/ui/tabs.tsx","../src/ui/textarea.tsx","../src/ui/tooltip.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\n\nexport type AutosaveStatus = \"idle\" | \"saving\" | \"saved\" | \"error\";\n\nexport type UseAutosaveOptions<T> = {\n data: T;\n onSave: (data: T) => Promise<void>;\n debounceMs?: number;\n enabled?: boolean;\n serialize?: (data: T) => string;\n};\n\n/** Debounced autosave with stale-value protection and an explicit `saveNow`. */\nexport function useAutosave<T>({\n data,\n onSave,\n debounceMs = 1_000,\n enabled = true,\n serialize = JSON.stringify,\n}: UseAutosaveOptions<T>) {\n const [status, setStatus] = useState<AutosaveStatus>(\"idle\");\n const [error, setError] = useState<Error | null>(null);\n const lastSaved = useRef<string | null>(null);\n const saveRef = useRef(onSave);\n const serializeRef = useRef(serialize);\n\n useEffect(() => {\n saveRef.current = onSave;\n serializeRef.current = serialize;\n }, [onSave, serialize]);\n\n const save = useCallback(async (value: T) => {\n setStatus(\"saving\");\n setError(null);\n try {\n await saveRef.current(value);\n lastSaved.current = serializeRef.current(value);\n setStatus(\"saved\");\n } catch (cause) {\n setError(cause instanceof Error ? cause : new Error(\"No se pudo guardar.\"));\n setStatus(\"error\");\n }\n }, []);\n\n useEffect(() => {\n if (!enabled) return;\n const snapshot = serializeRef.current(data);\n if (lastSaved.current === null) {\n lastSaved.current = snapshot;\n return;\n }\n if (snapshot === lastSaved.current) return;\n const timeout = window.setTimeout(() => void save(data), debounceMs);\n return () => window.clearTimeout(timeout);\n }, [data, debounceMs, enabled, save]);\n\n return { status, error, saveNow: () => save(data) };\n}","import { useEffect, useState } from \"react\";\n\n/** Returns a value only after it has been stable for the supplied delay. */\nexport function useDebouncedValue<T>(value: T, delay = 250) {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timeout = window.setTimeout(() => setDebouncedValue(value), delay);\n return () => window.clearTimeout(timeout);\n }, [delay, value]);\n\n return debouncedValue;\n}","import { type RefCallback, useCallback, useRef, useState } from \"react\";\n\nexport function formSnapshot(form: HTMLFormElement): string {\n const entries: Array<[string, string]> = Array.from(new FormData(form), ([key, value]) => [key, typeof value === \"string\" ? value : value.name]);\n entries.sort(([left], [right]) => left.localeCompare(right));\n return JSON.stringify(entries);\n}\n\nexport interface UseFormDirtyResult<T extends HTMLFormElement = HTMLFormElement> {\n formRef: RefCallback<T | null>;\n isDirty: boolean;\n markDirty: () => void;\n reset: () => void;\n}\n\n/** Tracks changes in native form controls and supports controlled fields. */\nexport function useFormDirty<T extends HTMLFormElement = HTMLFormElement>(): UseFormDirtyResult<T> {\n const formElement = useRef<T | null>(null);\n const baseline = useRef<string | null>(null);\n const [isDirty, setIsDirty] = useState(false);\n\n const recompute = useCallback(() => {\n if (formElement.current && baseline.current !== null) {\n setIsDirty(formSnapshot(formElement.current) !== baseline.current);\n }\n }, []);\n\n const reset = useCallback(() => {\n if (formElement.current) {\n baseline.current = formSnapshot(formElement.current);\n setIsDirty(false);\n }\n }, []);\n\n const formRef = useCallback<RefCallback<T | null>>((form) => {\n if (formElement.current) {\n formElement.current.removeEventListener(\"input\", recompute);\n formElement.current.removeEventListener(\"change\", recompute);\n formElement.current.removeEventListener(\"reset\", recompute);\n }\n formElement.current = form;\n if (form) {\n baseline.current = formSnapshot(form);\n setIsDirty(false);\n form.addEventListener(\"input\", recompute);\n form.addEventListener(\"change\", recompute);\n form.addEventListener(\"reset\", recompute);\n }\n }, [recompute]);\n\n return { formRef, isDirty, markDirty: () => setIsDirty(true), reset };\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merges conditional class names, resolving conflicting Tailwind utilities. */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}","export type TextMatchPart = {\n text: string;\n match: boolean;\n};\n\nfunction normalize(value: string) {\n return value.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLocaleLowerCase();\n}\n\nfunction normalizedTextWithRanges(value: string) {\n const ranges: Array<{ start: number; end: number }> = [];\n let normalized = \"\";\n let sourceIndex = 0;\n\n for (const character of value) {\n const start = sourceIndex;\n sourceIndex += character.length;\n const normalizedCharacter = normalize(character);\n normalized += normalizedCharacter;\n for (let index = 0; index < normalizedCharacter.length; index += 1) {\n ranges.push({ start, end: sourceIndex });\n }\n }\n\n return { normalized, ranges };\n}\n\n/**\n * Splits text into matching and non-matching chunks. Matching is case- and\n * accent-insensitive while preserving the original text for rendering.\n */\nexport function getTextMatchParts(text: string, query: string): TextMatchPart[] {\n const term = normalize(query.trim());\n if (!term) return [{ text, match: false }];\n\n const { normalized, ranges } = normalizedTextWithRanges(text);\n const parts: TextMatchPart[] = [];\n let sourceCursor = 0;\n let index = normalized.indexOf(term);\n\n while (index !== -1) {\n const rangeStart = ranges[index]?.start;\n const rangeEnd = ranges[index + term.length - 1]?.end;\n if (rangeStart === undefined || rangeEnd === undefined) break;\n if (rangeStart > sourceCursor) parts.push({ text: text.slice(sourceCursor, rangeStart), match: false });\n parts.push({ text: text.slice(rangeStart, rangeEnd), match: true });\n sourceCursor = rangeEnd;\n index = normalized.indexOf(term, index + term.length);\n }\n\n if (sourceCursor < text.length) parts.push({ text: text.slice(sourceCursor), match: false });\n return parts.length ? parts : [{ text, match: false }];\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport const badgeVariants = cva(\"inline-flex w-fit items-center gap-1 rounded-full px-2 py-0.5 text-xs font-medium\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground\",\n secondary: \"bg-secondary text-secondary-foreground\",\n neutral: \"bg-muted text-muted-foreground\",\n success: \"bg-success/10 text-success\",\n warning: \"bg-warning/10 text-warning\",\n destructive: \"bg-destructive/10 text-destructive\",\n outline: \"border border-border text-foreground\",\n },\n },\n defaultVariants: { variant: \"default\" },\n});\n\nexport type BadgeProps = React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants>;\n\nexport function Badge({ className, variant, ...props }: BadgeProps) {\n return <span data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport { Button as AriaButton, type ButtonProps as AriaButtonProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-1.5 rounded-lg border border-transparent text-sm font-medium whitespace-nowrap transition-colors outline-none focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/85\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n outline: \"border-border bg-background text-foreground hover:bg-muted\",\n ghost: \"text-foreground hover:bg-muted\",\n destructive: \"bg-destructive/10 text-destructive hover:bg-destructive/20\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-6 px-2 text-xs\",\n sm: \"h-7 px-2.5 text-xs\",\n default: \"h-8 px-3\",\n lg: \"h-10 px-4\",\n icon: \"size-8 p-0\",\n },\n },\n defaultVariants: { variant: \"default\", size: \"default\" },\n },\n);\n\nexport type ButtonProps = AriaButtonProps & VariantProps<typeof buttonVariants>;\n\nexport function Button({ className, variant, size, ...props }: ButtonProps) {\n return <AriaButton data-slot=\"button\" className={cn(buttonVariants({ variant, size }), className)} {...props} />;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Card({ className, ...props }: React.ComponentProps<\"section\">) {\n return <section data-slot=\"card\" className={cn(\"rounded-xl border border-border bg-card text-foreground shadow-sm\", className)} {...props} />;\n}\n\nexport function CardHeader({ className, ...props }: React.ComponentProps<\"header\">) {\n return <header data-slot=\"card-header\" className={cn(\"flex flex-col gap-1.5 p-5\", className)} {...props} />;\n}\n\nexport function CardTitle({ className, ...props }: React.ComponentProps<\"h2\">) {\n return <h2 data-slot=\"card-title\" className={cn(\"text-base font-semibold\", className)} {...props} />;\n}\n\nexport function CardDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"card-description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n\nexport function CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"p-5 pt-0\", className)} {...props} />;\n}\n\nexport function CardFooter({ className, ...props }: React.ComponentProps<\"footer\">) {\n return <footer data-slot=\"card-footer\" className={cn(\"flex items-center gap-2 border-t border-border p-5\", className)} {...props} />;\n}","import {\n Checkbox as AriaCheckbox,\n type CheckboxProps as AriaCheckboxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type CheckboxProps = Omit<AriaCheckboxProps, \"className\"> & { className?: string };\n\nexport function Checkbox({ className, children, ...props }: CheckboxProps) {\n return <AriaCheckbox data-slot=\"checkbox\" className={cn(\"group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>\n {(state) => <><span aria-hidden=\"true\" className=\"grid size-4 place-items-center rounded border border-border bg-background text-xs text-primary-foreground group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50\">✓</span>{typeof children === \"function\" ? children(state) : children}</>}\n </AriaCheckbox>;\n}\n","import { Fragment } from \"react\";\nimport {\n ComboBox as AriaComboBox,\n ComboBoxValue,\n Input,\n ListBox,\n ListBoxItem,\n Popover,\n type ComboBoxProps,\n type InputProps,\n type ListBoxItemProps,\n type ListBoxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\nimport { getTextMatchParts } from \"../lib/text-match\";\n\nexport const Combobox = AriaComboBox;\nexport { ComboBoxValue as ComboboxValue };\n\nexport type { ComboBoxProps };\n\nexport function ComboboxInput({ className, ...props }: InputProps) {\n return <Input data-slot=\"combobox-input\" className={cn(\"h-8 w-full rounded-lg border border-border bg-background px-2.5 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50\", className)} {...props} />;\n}\n\nexport function ComboboxContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <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} />;\n}\n\nexport function ComboboxList<T extends object>({ className, emptyState, ...props }: ListBoxProps<T> & { emptyState?: React.ReactNode }) {\n return <ListBox data-slot=\"combobox-list\" className={cn(\"max-h-64 overflow-y-auto\", className)} renderEmptyState={emptyState ? () => emptyState : undefined} {...props} />;\n}\n\nexport function ComboboxItem<T extends object>({ className, children, ...props }: ListBoxItemProps<T>) {\n return <ListBoxItem data-slot=\"combobox-item\" className={cn(\"flex w-full cursor-default items-center justify-between rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>\n {children}\n </ListBoxItem>;\n}\n\n/** Accent-insensitive visual highlighting for suggestion labels. */\nexport function HighlightMatch({ text, query, className }: { text: string; query: string; className?: string }) {\n return <span className={className}>{getTextMatchParts(text, query).map((part, index) => part.match ? <mark key={`${part.text}-${index}`} className=\"rounded bg-accent px-0.5 text-accent-foreground\">{part.text}</mark> : <Fragment key={`${part.text}-${index}`}>{part.text}</Fragment>)}</span>;\n}\n","import { createContext, useContext } from \"react\";\nimport {\n Dialog as AriaDialog,\n Heading,\n Modal,\n ModalOverlay,\n Text,\n type DialogProps as AriaDialogProps,\n type ModalOverlayProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"./button\";\n\nconst DialogCloseContext = createContext<(() => void) | null>(null);\n\nexport type DialogProps = Omit<ModalOverlayProps, \"children\" | \"className\" | \"isOpen\"> & {\n children: React.ReactNode;\n open: boolean;\n};\n\n/** Controlled overlay root. Use `DialogContent` for its accessible surface. */\nexport function Dialog({ open, children, ...props }: DialogProps) {\n return <ModalOverlay isOpen={open} className=\"fixed inset-0 z-50 grid place-items-center bg-black/20 p-4 backdrop-blur-[1px] motion-safe:data-entering:animate-ui-overlay-in motion-safe:data-exiting:animate-ui-overlay-out\" {...props}>\n {children}\n </ModalOverlay>;\n}\n\nexport function DialogClose({ onPress, ...props }: React.ComponentProps<typeof Button>) {\n const close = useContext(DialogCloseContext);\n return <Button onPress={(event) => { onPress?.(event); close?.(); }} {...props} />;\n}\n\nexport function DialogContent({ className, children, showCloseButton = true, ...props }: AriaDialogProps & { showCloseButton?: boolean }) {\n return <Modal className=\"w-full max-w-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\">\n <AriaDialog data-slot=\"dialog-content\" className={cn(\"relative grid max-h-[calc(100dvh-2rem)] gap-4 overflow-y-auto rounded-xl bg-background p-5 text-foreground shadow-xl outline-none\", className)} {...props}>\n {({ close }) => <DialogCloseContext.Provider value={close}>\n {typeof children === \"function\" ? children({ close }) : children}\n {showCloseButton && <DialogClose aria-label=\"Cerrar diálogo\" variant=\"ghost\" size=\"icon\" className=\"absolute top-2 right-2\">×</DialogClose>}\n </DialogCloseContext.Provider>}\n </AriaDialog>\n </Modal>;\n}\n\nexport function DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-header\" className={cn(\"flex flex-col gap-2\", className)} {...props} />;\n}\nexport function DialogFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"dialog-footer\" className={cn(\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)} {...props} />;\n}\nexport function DialogTitle({ className, ...props }: React.ComponentProps<typeof Heading>) {\n return <Heading slot=\"title\" className={cn(\"text-base font-semibold\", className)} {...props} />;\n}\nexport function DialogDescription({ className, ...props }: React.ComponentProps<typeof Text>) {\n return <Text slot=\"description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n","import type * as React from \"react\";\nimport { Button } from \"./button\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from \"./dialog\";\n\nexport type ConfirmDialogProps = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n description?: React.ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n pending?: boolean;\n onConfirm: () => void;\n};\n\n/** Controlled confirmation dialog for irreversible actions. */\nexport function ConfirmDialog({ open, onOpenChange, title, description, confirmLabel = \"Confirmar\", cancelLabel = \"Cancelar\", destructive = false, pending = false, onConfirm }: ConfirmDialogProps) {\n return <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent showCloseButton={false}>\n <DialogHeader><DialogTitle>{title}</DialogTitle>{description && <DialogDescription>{description}</DialogDescription>}</DialogHeader>\n <DialogFooter>\n <Button variant=\"outline\" isDisabled={pending} onPress={() => onOpenChange(false)}>{cancelLabel}</Button>\n <Button variant={destructive ? \"destructive\" : \"default\"} isDisabled={pending} onPress={onConfirm}>{confirmLabel}</Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function EmptyState({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"empty-state\" className={cn(\"flex min-h-44 w-full flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border p-6 text-center\", className)} {...props} />;\n}\n\nexport function EmptyStateTitle({ className, ...props }: React.ComponentProps<\"h3\">) {\n return <h3 data-slot=\"empty-state-title\" className={cn(\"text-sm font-medium text-foreground\", className)} {...props} />;\n}\n\nexport function EmptyStateDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"empty-state-description\" className={cn(\"max-w-sm text-sm text-muted-foreground\", className)} {...props} />;\n}","import { forwardRef, type ComponentPropsWithRef } from \"react\";\nimport { Label as LabelPrimitive } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const Label = forwardRef<HTMLLabelElement, ComponentPropsWithRef<typeof LabelPrimitive>>(function Label({ className, ...props }, ref) {\n return <LabelPrimitive ref={ref} data-slot=\"label\" className={cn(\"flex items-center gap-2 text-sm font-medium leading-none select-none\", className)} {...props} />;\n});\n\nexport type LabelProps = ComponentPropsWithRef<typeof Label>;\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { Label } from \"./label\";\n\nexport function Field({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"field\" className={cn(\"flex w-full flex-col gap-2\", className)} {...props} />;\n}\n\nexport function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>) {\n return <Label data-slot=\"field-label\" className={cn(\"text-foreground\", className)} {...props} />;\n}\n\nexport function FieldDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return <p data-slot=\"field-description\" className={cn(\"text-sm text-muted-foreground\", className)} {...props} />;\n}\n\nexport function FieldError({ className, children, ...props }: React.ComponentProps<\"p\">) {\n if (!children) return null;\n return <p role=\"alert\" data-slot=\"field-error\" className={cn(\"text-sm text-destructive\", className)} {...props}>{children}</p>;\n}","import { forwardRef } from \"react\";\nimport { Input as AriaInput, type InputProps as AriaInputProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\ntype CompatibleRef<T> = ((instance: T | null) => unknown) | { readonly current: T | null } | null;\n\nexport type InputProps = Omit<AriaInputProps, \"ref\"> & { ref?: CompatibleRef<HTMLInputElement> };\n\nconst InputImpl = forwardRef<HTMLInputElement, AriaInputProps>(function Input({ className, type, ...props }, ref) {\n return <AriaInput ref={ref} type={type} data-slot=\"input\" className={cn(\"h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\", className)} {...props} />;\n});\n\n/** Forward-ref component with a ref type compatible across React 19 type releases. */\nexport const Input = InputImpl as unknown as (props: InputProps) => ReturnType<typeof InputImpl>;\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Kbd({ className, ...props }: React.ComponentProps<\"kbd\">) {\n return <kbd data-slot=\"kbd\" className={cn(\"pointer-events-none inline-flex h-5 min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none\", className)} {...props} />;\n}\n\nexport function KbdGroup({ className, ...props }: React.ComponentProps<\"span\">) {\n return <span data-slot=\"kbd-group\" className={cn(\"inline-flex items-center gap-1\", className)} {...props} />;\n}","import {\n Menu as AriaMenu,\n MenuItem as AriaMenuItem,\n MenuTrigger as AriaMenuTrigger,\n Popover,\n type MenuItemProps,\n type MenuProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const MenuTrigger = AriaMenuTrigger;\n\nexport function MenuContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <Popover data-slot=\"menu-content\" className={cn(\"min-w-40 overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\", className)} {...props} />;\n}\n\nexport function Menu<T extends object>({ className, ...props }: MenuProps<T>) {\n return <AriaMenu data-slot=\"menu\" className={cn(\"outline-none\", className)} {...props} />;\n}\n\nexport function MenuItem<T extends object>({ className, children, ...props }: MenuItemProps<T>) {\n return <AriaMenuItem data-slot=\"menu-item\" className={cn(\"flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>{children}</AriaMenuItem>;\n}\n","import {\n DialogTrigger as AriaDialogTrigger,\n Popover as AriaPopover,\n type DialogTriggerProps,\n type PopoverProps as AriaPopoverProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type PopoverProps = Omit<AriaPopoverProps, \"className\"> & { className?: string };\nexport type { DialogTriggerProps as PopoverTriggerProps };\n\n/** Wrap a trigger and Popover surface; React Aria handles focus and positioning. */\nexport const PopoverTrigger = AriaDialogTrigger;\n\nexport function Popover({ className, ...props }: PopoverProps) {\n return <AriaPopover data-slot=\"popover\" offset={6} className={cn(\"min-w-48 rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\", className)} {...props} />;\n}\n\nexport const PopoverContent = Popover;\n","import {\n SearchField as AriaSearchField,\n Button,\n Input,\n type SearchFieldProps as AriaSearchFieldProps,\n type ButtonProps,\n type InputProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const SearchField = AriaSearchField;\nexport type { AriaSearchFieldProps as SearchFieldProps };\n\nexport function SearchInput({ className, ...props }: InputProps) {\n return <Input data-slot=\"search-input\" className={cn(\"h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50\", className)} {...props} />;\n}\n\nexport function SearchClearButton({ className, children = \"×\", ...props }: Omit<ButtonProps, \"className\"> & { className?: string }) {\n return <Button slot=\"clear\" data-slot=\"search-clear\" className={cn(\"absolute top-1/2 right-1 -translate-y-1/2 rounded p-1 text-muted-foreground outline-none hover:bg-muted data-focus-visible:ring-2 data-focus-visible:ring-ring\", className)} {...props}>{children}</Button>;\n}\n","import {\n Button as AriaButton,\n Select as AriaSelect,\n SelectValue as AriaSelectValue,\n ListBox,\n ListBoxItem,\n Popover,\n type SelectProps as AriaSelectProps,\n type ButtonProps,\n type ListBoxItemProps,\n type ListBoxProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport const Select = AriaSelect;\nexport type { AriaSelectProps as SelectProps };\n\nexport function SelectTrigger({ className, children, ...props }: ButtonProps) {\n return <AriaButton data-slot=\"select-trigger\" className={cn(\"flex h-8 w-full min-w-36 items-center gap-2 rounded-lg border border-border bg-background px-2.5 text-left text-sm text-foreground outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>{(state) => <>{typeof children === \"function\" ? children(state) : children}<span aria-hidden=\"true\" className=\"ml-auto text-muted-foreground\">⌄</span></>}</AriaButton>;\n}\n\nexport function SelectValue({ className, ...props }: React.ComponentProps<typeof AriaSelectValue>) {\n return <AriaSelectValue data-slot=\"select-value\" className={cn(\"flex-1 truncate data-placeholder:text-muted-foreground\", className)} {...props} />;\n}\n\nexport function SelectContent({ className, ...props }: React.ComponentProps<typeof Popover>) {\n return <Popover data-slot=\"select-content\" className={cn(\"w-(--trigger-width) overflow-hidden rounded-xl border border-border bg-background p-1.5 text-foreground shadow-lg motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\", className)} {...props} />;\n}\n\nexport function SelectList<T extends object>({ className, ...props }: ListBoxProps<T>) {\n return <ListBox data-slot=\"select-list\" className={cn(\"max-h-64 overflow-y-auto\", className)} {...props} />;\n}\n\nexport function SelectItem<T extends object>({ className, children, ...props }: ListBoxItemProps<T>) {\n return <ListBoxItem data-slot=\"select-item\" className={cn(\"flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-none data-focused:bg-muted data-selected:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50\", className)} {...props}>{children}</ListBoxItem>;\n}\n","import { Separator as AriaSeparator, type SeparatorProps as AriaSeparatorProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type SeparatorProps = Omit<AriaSeparatorProps, \"className\"> & { className?: string };\n\nexport function Separator({ className, orientation = \"horizontal\", ...props }: SeparatorProps) {\n return <AriaSeparator data-slot=\"separator\" orientation={orientation} className={cn(\"shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch\", className)} {...props} />;\n}","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\nexport function Skeleton({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div aria-hidden=\"true\" data-slot=\"skeleton\" className={cn(\"animate-pulse rounded-md bg-muted\", className)} {...props} />;\n}","import {\n Switch as AriaSwitch,\n type SwitchProps as AriaSwitchProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type SwitchProps = Omit<AriaSwitchProps, \"className\"> & { className?: string };\n\nexport function Switch({ className, children, ...props }: SwitchProps) {\n return <AriaSwitch data-slot=\"switch\" className={cn(\"group inline-flex items-center gap-2 text-sm text-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50\", className)} {...props}>\n {(state) => <><span aria-hidden=\"true\" className=\"flex h-5 w-9 items-center rounded-full bg-muted p-0.5 transition-colors group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50\"><span className=\"size-4 rounded-full bg-background shadow-sm transition-transform group-data-selected:translate-x-4\" /></span>{typeof children === \"function\" ? children(state) : children}</>}\n </AriaSwitch>;\n}\n","import type * as React from \"react\";\nimport { cn } from \"../lib/cn\";\n\n/** Presentational table primitives. Sorting, pagination and data state stay in the application. */\nexport function Table({ className, ...props }: React.ComponentProps<\"table\">) {\n return <div data-slot=\"table-container\" className=\"relative w-full overflow-x-auto\"><table data-slot=\"table\" className={cn(\"w-full caption-bottom text-sm\", className)} {...props} /></div>;\n}\n\nexport function TableHeader({ className, ...props }: React.ComponentProps<\"thead\">) {\n return <thead data-slot=\"table-header\" className={cn(\"border-b border-border\", className)} {...props} />;\n}\nexport function TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n return <tbody data-slot=\"table-body\" className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n}\nexport function TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return <tr data-slot=\"table-row\" className={cn(\"border-b border-border transition-colors hover:bg-muted/50\", className)} {...props} />;\n}\nexport function TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n return <th data-slot=\"table-head\" className={cn(\"h-10 px-3 text-left align-middle text-xs font-medium text-muted-foreground\", className)} {...props} />;\n}\nexport function TableCell({ className, ...props }: React.ComponentProps<\"td\">) {\n return <td data-slot=\"table-cell\" className={cn(\"p-3 align-middle\", className)} {...props} />;\n}\nexport function TableCaption({ className, ...props }: React.ComponentProps<\"caption\">) {\n return <caption data-slot=\"table-caption\" className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />;\n}","import {\n Tab as AriaTab,\n TabList as AriaTabList,\n TabPanel as AriaTabPanel,\n TabPanels as AriaTabPanels,\n Tabs as AriaTabs,\n composeRenderProps,\n type TabListProps as AriaTabListProps,\n type TabPanelProps as AriaTabPanelProps,\n type TabPanelsProps as AriaTabPanelsProps,\n type TabProps as AriaTabProps,\n type TabsProps as AriaTabsProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type TabsProps = AriaTabsProps;\nexport type TabProps = AriaTabProps;\nexport type TabPanelProps = AriaTabPanelProps;\n\nexport function Tabs({ className, ...props }: AriaTabsProps) {\n return <AriaTabs data-slot=\"tabs\" className={composeRenderProps(className, (value) => cn(\"flex flex-col gap-2\", value))} {...props} />;\n}\n\nexport function TabsList<T extends object>({ className, ...props }: AriaTabListProps<T>) {\n return <AriaTabList data-slot=\"tabs-list\" className={composeRenderProps(className, (value) => cn(\"inline-flex w-fit items-center gap-1 rounded-lg bg-muted p-1 text-muted-foreground\", value))} {...props} />;\n}\n\nexport function TabsTrigger({ className, ...props }: AriaTabProps) {\n return <AriaTab data-slot=\"tabs-trigger\" className={composeRenderProps(className, (value) => cn(\"inline-flex h-7 items-center justify-center gap-1.5 rounded-md px-2.5 text-sm font-medium outline-none transition-colors data-hovered:text-foreground data-selected:bg-background data-selected:text-foreground data-selected:shadow-sm data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50\", value))} {...props} />;\n}\n\nexport function TabsPanels<T extends object>({ className, ...props }: AriaTabPanelsProps<T>) {\n return <AriaTabPanels data-slot=\"tabs-panels\" className={cn(\"min-w-0\", className)} {...props} />;\n}\n\nexport function TabsContent({ className, ...props }: AriaTabPanelProps) {\n return <AriaTabPanel data-slot=\"tabs-content\" className={composeRenderProps(className, (value) => cn(\"text-sm outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50\", value))} {...props} />;\n}","import { forwardRef } from \"react\";\nimport { TextArea as AriaTextArea, type TextAreaProps as AriaTextAreaProps } from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\ntype CompatibleRef<T> = ((instance: T | null) => unknown) | { readonly current: T | null } | null;\n\nexport type TextareaProps = Omit<AriaTextAreaProps, \"ref\"> & { ref?: CompatibleRef<HTMLTextAreaElement> };\n\nconst TextareaImpl = forwardRef<HTMLTextAreaElement, AriaTextAreaProps>(function Textarea({ className, ...props }, ref) {\n return <AriaTextArea ref={ref} data-slot=\"textarea\" className={cn(\"min-h-20 w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive\", className)} {...props} />;\n});\n\n/** Forward-ref component with a ref type compatible across React 19 type releases. */\nexport const Textarea = TextareaImpl as unknown as (props: TextareaProps) => ReturnType<typeof TextareaImpl>;\n","import {\n Tooltip as AriaTooltip,\n TooltipTrigger as AriaTooltipTrigger,\n type TooltipProps as AriaTooltipProps,\n type TooltipTriggerComponentProps,\n} from \"react-aria-components\";\nimport { cn } from \"../lib/cn\";\n\nexport type TooltipProps = Omit<AriaTooltipProps, \"className\"> & { className?: string };\nexport type { TooltipTriggerComponentProps };\n\nexport const TooltipTrigger = AriaTooltipTrigger;\n\nexport function Tooltip({ className, ...props }: TooltipProps) {\n return <AriaTooltip data-slot=\"tooltip\" offset={6} className={cn(\"max-w-xs rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md outline-none motion-safe:data-entering:animate-ui-surface-in motion-safe:data-exiting:animate-ui-surface-out\", className)} {...props} />;\n}\n\nexport const TooltipContent = Tooltip;\n"],"mappings":"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","names":["useEffect","useState","useCallback","useRef","useState","cva","jsx","cva","jsx","jsx","Fragment","jsx","jsx","Fragment","jsx","jsxs","jsx","jsxs","jsx","jsx","Label","jsx","forwardRef","jsx","forwardRef","Input","jsx","Popover","jsx","Popover","jsx","Popover","Button","Input","jsx","Input","Button","AriaButton","ListBox","ListBoxItem","Popover","Fragment","jsx","jsxs","AriaButton","Popover","ListBox","ListBoxItem","jsx","jsx","Fragment","jsx","jsxs","jsx","jsx","forwardRef","jsx","forwardRef","Textarea","jsx"]}
|
package/dist/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--color-black:#000;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--font-weight-medium:500;--font-weight-semibold:600;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.z-50{z-index:50}.mt-4{margin-top:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.contents{display:contents}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-44{min-height:calc(var(--spacing) * 44)}.min-h-80{min-height:calc(var(--spacing) * 80)}.w-\(--trigger-width\){width:var(--trigger-width)}.w-2\/3{width:66.6667%}.w-4\/5{width:80%}.w-9{width:calc(var(--spacing) * 9)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-80{min-width:calc(var(--spacing) * 80)}.min-w-120{min-width:calc(var(--spacing) * 120)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.place-items-center{place-items:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--ui-radius)}.rounded-md{border-radius:calc(var(--ui-radius) * .8)}.rounded-sm{border-radius:calc(var(--ui-radius) * .6)}.rounded-xl{border-radius:calc(var(--ui-radius) * 1.4)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-border{border-color:var(--ui-border)}.border-transparent{border-color:#0000}.bg-accent{background-color:var(--ui-accent)}.bg-background{background-color:var(--ui-background)}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab, red, red)){.bg-black\/20{background-color:color-mix(in oklab, var(--color-black) 20%, transparent)}}.bg-border{background-color:var(--ui-border)}.bg-card{background-color:var(--ui-card)}.bg-destructive\/10{background-color:var(--ui-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, var(--ui-destructive) 10%, transparent)}}.bg-foreground{background-color:var(--ui-foreground)}.bg-muted{background-color:var(--ui-muted)}.bg-primary{background-color:var(--ui-primary)}.bg-secondary{background-color:var(--ui-secondary)}.bg-success\/10{background-color:var(--ui-success)}@supports (color:color-mix(in lab, red, red)){.bg-success\/10{background-color:color-mix(in oklab, var(--ui-success) 10%, transparent)}}.bg-warning\/10{background-color:var(--ui-warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/10{background-color:color-mix(in oklab, var(--ui-warning) 10%, transparent)}}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-7{padding-block:calc(var(--spacing) * 7)}.pt-0{padding-top:0}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-sans{font-family:var(--font-sans)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-accent-foreground{color:var(--ui-accent-foreground)}.text-background{color:var(--ui-background)}.text-destructive{color:var(--ui-destructive)}.text-foreground{color:var(--ui-foreground)}.text-muted-foreground{color:var(--ui-muted-foreground)}.text-primary{color:var(--ui-primary)}.text-primary-foreground{color:var(--ui-primary-foreground)}.text-secondary-foreground{color:var(--ui-secondary-foreground)}.text-success{color:var(--ui-success)}.text-warning{color:var(--ui-warning)}.underline-offset-4{text-underline-offset:4px}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-data-focus-visible\:ring-3:is(:where(.group)[data-focus-visible] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-focus-visible\:ring-ring\/50:is(:where(.group)[data-focus-visible] *){--tw-ring-color:var(--ui-ring)}@supports (color:color-mix(in lab, red, red)){.group-data-focus-visible\:ring-ring\/50:is(:where(.group)[data-focus-visible] *){--tw-ring-color:color-mix(in oklab, var(--ui-ring) 50%, transparent)}}.group-data-selected\:translate-x-4:is(:where(.group)[data-selected] *){--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-data-selected\:border-primary:is(:where(.group)[data-selected] *){border-color:var(--ui-primary)}.group-data-selected\:bg-primary:is(:where(.group)[data-selected] *){background-color:var(--ui-primary)}.placeholder\:text-muted-foreground::placeholder{color:var(--ui-muted-foreground)}@media (hover:hover){.hover\:bg-destructive\/20:hover{background-color:var(--ui-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/20:hover{background-color:color-mix(in oklab, var(--ui-destructive) 20%, transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--ui-muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--ui-muted) 50%, transparent)}}.hover\:bg-primary\/85:hover{background-color:var(--ui-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/85:hover{background-color:color-mix(in oklab, var(--ui-primary) 85%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--ui-secondary) 80%, transparent)}}.hover\:underline:hover{text-decoration-line:underline}}.focus-visible\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ui-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ui-ring) 50%, transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--ui-destructive)}.data-disabled\:pointer-events-none[data-disabled]{pointer-events:none}.data-disabled\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-disabled\:opacity-50[data-disabled]{opacity:.5}.data-focus-visible\:ring-2[data-focus-visible]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-focus-visible\:ring-3[data-focus-visible]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-focus-visible\:ring-ring[data-focus-visible],.data-focus-visible\:ring-ring\/50[data-focus-visible]{--tw-ring-color:var(--ui-ring)}@supports (color:color-mix(in lab, red, red)){.data-focus-visible\:ring-ring\/50[data-focus-visible]{--tw-ring-color:color-mix(in oklab, var(--ui-ring) 50%, transparent)}}.data-focused\:bg-muted[data-focused]{background-color:var(--ui-muted)}.data-horizontal\:h-px[data-horizontal]{height:1px}.data-horizontal\:w-full[data-horizontal]{width:100%}.data-hovered\:text-foreground[data-hovered]{color:var(--ui-foreground)}.data-placeholder\:text-muted-foreground[data-placeholder]{color:var(--ui-muted-foreground)}.data-selected\:bg-background[data-selected]{background-color:var(--ui-background)}.data-selected\:bg-muted[data-selected]{background-color:var(--ui-muted)}.data-selected\:text-foreground[data-selected]{color:var(--ui-foreground)}.data-selected\:shadow-sm[data-selected]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-vertical\:w-px[data-vertical]{width:1px}.data-vertical\:self-stretch[data-vertical]{align-self:stretch}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}}:root{--ui-radius:var(--radius,.625rem);--ui-background:var(--background,#fafafa);--ui-foreground:var(--foreground,#171717);--ui-card:var(--card,#fff);--ui-background-foreground:var(--background-foreground,#2d2d2d);--ui-primary:var(--primary,#2a4227);--ui-primary-foreground:var(--primary-foreground,#fff);--ui-secondary:var(--secondary,#f3f4f6);--ui-secondary-foreground:var(--secondary-foreground,#171717);--ui-muted:var(--muted,#f5f5f5);--ui-muted-foreground:var(--muted-foreground,#737373);--ui-accent:var(--accent,#bdff7b);--ui-accent-foreground:var(--accent-foreground,#1a2e18);--ui-destructive:var(--destructive,#ef4444);--ui-success:var(--success,#16a34a);--ui-warning:var(--warning,#ca8a04);--ui-border:var(--border,#d4d4d4);--ui-ring:var(--ring,oklch(87.1% .006 286.286))}.dark{--ui-background:var(--background,oklch(14.5% 0 0));--ui-foreground:var(--foreground,oklch(98.5% 0 0));--ui-card:var(--card,oklch(20.5% 0 0));--ui-background-foreground:var(--background-foreground,oklch(98.5% 0 0));--ui-primary:var(--primary,oklch(92.2% 0 0));--ui-primary-foreground:var(--primary-foreground,oklch(20.5% 0 0));--ui-secondary:var(--secondary,oklch(26.9% 0 0));--ui-secondary-foreground:var(--secondary-foreground,oklch(98.5% 0 0));--ui-muted:var(--muted,oklch(26.9% 0 0));--ui-muted-foreground:var(--muted-foreground,oklch(70.8% 0 0));--ui-accent:var(--accent,#bdff7b);--ui-accent-foreground:var(--accent-foreground,#1a2e18);--ui-destructive:var(--destructive,oklch(70.4% .191 22.216));--ui-success:var(--success,#22c55e);--ui-warning:var(--warning,#eab308);--ui-border:var(--border,oklch(100% 0 0/.15));--ui-ring:var(--ring,oklch(55.6% 0 0))}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--color-black:#000;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--font-weight-medium:500;--font-weight-semibold:600;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--animate-ui-surface-in:ui-surface-in .15s cubic-bezier(.16, 1, .3, 1);--animate-ui-surface-out:ui-surface-out .1s ease-in;--animate-ui-overlay-in:ui-overlay-in .15s ease-out;--animate-ui-overlay-out:ui-overlay-out .1s ease-in}}@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.z-50{z-index:50}.mt-4{margin-top:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.contents{display:contents}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-44{min-height:calc(var(--spacing) * 44)}.min-h-80{min-height:calc(var(--spacing) * 80)}.w-\(--trigger-width\){width:var(--trigger-width)}.w-2\/3{width:66.6667%}.w-4\/5{width:80%}.w-9{width:calc(var(--spacing) * 9)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-80{min-width:calc(var(--spacing) * 80)}.min-w-120{min-width:calc(var(--spacing) * 120)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.place-items-center{place-items:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--ui-radius)}.rounded-md{border-radius:calc(var(--ui-radius) * .8)}.rounded-sm{border-radius:calc(var(--ui-radius) * .6)}.rounded-xl{border-radius:calc(var(--ui-radius) * 1.4)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-border{border-color:var(--ui-border)}.border-transparent{border-color:#0000}.bg-accent{background-color:var(--ui-accent)}.bg-background{background-color:var(--ui-background)}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab, red, red)){.bg-black\/20{background-color:color-mix(in oklab, var(--color-black) 20%, transparent)}}.bg-border{background-color:var(--ui-border)}.bg-card{background-color:var(--ui-card)}.bg-destructive\/10{background-color:var(--ui-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, var(--ui-destructive) 10%, transparent)}}.bg-foreground{background-color:var(--ui-foreground)}.bg-muted{background-color:var(--ui-muted)}.bg-primary{background-color:var(--ui-primary)}.bg-secondary{background-color:var(--ui-secondary)}.bg-success\/10{background-color:var(--ui-success)}@supports (color:color-mix(in lab, red, red)){.bg-success\/10{background-color:color-mix(in oklab, var(--ui-success) 10%, transparent)}}.bg-warning\/10{background-color:var(--ui-warning)}@supports (color:color-mix(in lab, red, red)){.bg-warning\/10{background-color:color-mix(in oklab, var(--ui-warning) 10%, transparent)}}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-7{padding-block:calc(var(--spacing) * 7)}.pt-0{padding-top:0}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-sans{font-family:var(--font-sans)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-accent-foreground{color:var(--ui-accent-foreground)}.text-background{color:var(--ui-background)}.text-destructive{color:var(--ui-destructive)}.text-foreground{color:var(--ui-foreground)}.text-muted-foreground{color:var(--ui-muted-foreground)}.text-primary{color:var(--ui-primary)}.text-primary-foreground{color:var(--ui-primary-foreground)}.text-secondary-foreground{color:var(--ui-secondary-foreground)}.text-success{color:var(--ui-success)}.text-warning{color:var(--ui-warning)}.underline-offset-4{text-underline-offset:4px}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-data-focus-visible\:ring-3:is(:where(.group)[data-focus-visible] *){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-focus-visible\:ring-ring\/50:is(:where(.group)[data-focus-visible] *){--tw-ring-color:var(--ui-ring)}@supports (color:color-mix(in lab, red, red)){.group-data-focus-visible\:ring-ring\/50:is(:where(.group)[data-focus-visible] *){--tw-ring-color:color-mix(in oklab, var(--ui-ring) 50%, transparent)}}.group-data-selected\:translate-x-4:is(:where(.group)[data-selected] *){--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-data-selected\:border-primary:is(:where(.group)[data-selected] *){border-color:var(--ui-primary)}.group-data-selected\:bg-primary:is(:where(.group)[data-selected] *){background-color:var(--ui-primary)}.placeholder\:text-muted-foreground::placeholder{color:var(--ui-muted-foreground)}@media (hover:hover){.hover\:bg-destructive\/20:hover{background-color:var(--ui-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/20:hover{background-color:color-mix(in oklab, var(--ui-destructive) 20%, transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--ui-muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--ui-muted) 50%, transparent)}}.hover\:bg-primary\/85:hover{background-color:var(--ui-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/85:hover{background-color:color-mix(in oklab, var(--ui-primary) 85%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--ui-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--ui-secondary) 80%, transparent)}}.hover\:underline:hover{text-decoration-line:underline}}.focus-visible\:ring-3:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ui-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ui-ring) 50%, transparent)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--ui-destructive)}.data-disabled\:pointer-events-none[data-disabled]{pointer-events:none}.data-disabled\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-disabled\:opacity-50[data-disabled]{opacity:.5}.data-focus-visible\:ring-2[data-focus-visible]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-focus-visible\:ring-3[data-focus-visible]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-focus-visible\:ring-ring[data-focus-visible],.data-focus-visible\:ring-ring\/50[data-focus-visible]{--tw-ring-color:var(--ui-ring)}@supports (color:color-mix(in lab, red, red)){.data-focus-visible\:ring-ring\/50[data-focus-visible]{--tw-ring-color:color-mix(in oklab, var(--ui-ring) 50%, transparent)}}.data-focused\:bg-muted[data-focused]{background-color:var(--ui-muted)}.data-horizontal\:h-px[data-horizontal]{height:1px}.data-horizontal\:w-full[data-horizontal]{width:100%}.data-hovered\:text-foreground[data-hovered]{color:var(--ui-foreground)}.data-placeholder\:text-muted-foreground[data-placeholder]{color:var(--ui-muted-foreground)}.data-selected\:bg-background[data-selected]{background-color:var(--ui-background)}.data-selected\:bg-muted[data-selected]{background-color:var(--ui-muted)}.data-selected\:text-foreground[data-selected]{color:var(--ui-foreground)}.data-selected\:shadow-sm[data-selected]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-vertical\:w-px[data-vertical]{width:1px}.data-vertical\:self-stretch[data-vertical]{align-self:stretch}@media (prefers-reduced-motion:no-preference){.motion-safe\:data-entering\:animate-ui-overlay-in[data-entering]{animation:var(--animate-ui-overlay-in)}.motion-safe\:data-entering\:animate-ui-surface-in[data-entering]{animation:var(--animate-ui-surface-in)}.motion-safe\:data-exiting\:animate-ui-overlay-out[data-exiting]{animation:var(--animate-ui-overlay-out)}.motion-safe\:data-exiting\:animate-ui-surface-out[data-exiting]{animation:var(--animate-ui-surface-out)}}@media (min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}}:root{--ui-radius:var(--radius,.625rem);--ui-background:var(--background,#fafafa);--ui-foreground:var(--foreground,#171717);--ui-card:var(--card,#fff);--ui-background-foreground:var(--background-foreground,#2d2d2d);--ui-primary:var(--primary,#2a4227);--ui-primary-foreground:var(--primary-foreground,#fff);--ui-secondary:var(--secondary,#f3f4f6);--ui-secondary-foreground:var(--secondary-foreground,#171717);--ui-muted:var(--muted,#f5f5f5);--ui-muted-foreground:var(--muted-foreground,#737373);--ui-accent:var(--accent,#bdff7b);--ui-accent-foreground:var(--accent-foreground,#1a2e18);--ui-destructive:var(--destructive,#ef4444);--ui-success:var(--success,#16a34a);--ui-warning:var(--warning,#ca8a04);--ui-border:var(--border,#d4d4d4);--ui-ring:var(--ring,oklch(87.1% .006 286.286))}.dark{--ui-background:var(--background,oklch(14.5% 0 0));--ui-foreground:var(--foreground,oklch(98.5% 0 0));--ui-card:var(--card,oklch(20.5% 0 0));--ui-background-foreground:var(--background-foreground,oklch(98.5% 0 0));--ui-primary:var(--primary,oklch(92.2% 0 0));--ui-primary-foreground:var(--primary-foreground,oklch(20.5% 0 0));--ui-secondary:var(--secondary,oklch(26.9% 0 0));--ui-secondary-foreground:var(--secondary-foreground,oklch(98.5% 0 0));--ui-muted:var(--muted,oklch(26.9% 0 0));--ui-muted-foreground:var(--muted-foreground,oklch(70.8% 0 0));--ui-accent:var(--accent,#bdff7b);--ui-accent-foreground:var(--accent-foreground,#1a2e18);--ui-destructive:var(--destructive,oklch(70.4% .191 22.216));--ui-success:var(--success,#22c55e);--ui-warning:var(--warning,#eab308);--ui-border:var(--border,oklch(100% 0 0/.15));--ui-ring:var(--ring,oklch(55.6% 0 0))}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}@keyframes ui-surface-in{0%{opacity:0;transform:translateY(-.125rem)scale(.98)}}@keyframes ui-surface-out{to{opacity:0;transform:translateY(-.0625rem)scale(.98)}}@keyframes ui-overlay-in{0%{opacity:0}}@keyframes ui-overlay-out{to{opacity:0}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@doscientos/ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Accessible, themeable React primitives for Doscientos products.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,8 +32,9 @@
|
|
|
32
32
|
"build:css": "tailwindcss -i ./src/styles.css -o ./dist/styles.css --minify",
|
|
33
33
|
"dev": "tsup --watch",
|
|
34
34
|
"typecheck": "tsc --noEmit",
|
|
35
|
-
"test": "vitest run",
|
|
36
|
-
"test:watch": "vitest",
|
|
35
|
+
"test": "vitest run --project unit",
|
|
36
|
+
"test:watch": "vitest --project unit",
|
|
37
|
+
"test:storybook": "vitest run --project storybook",
|
|
37
38
|
"storybook": "storybook dev -p 6006",
|
|
38
39
|
"build-storybook": "storybook build"
|
|
39
40
|
},
|
|
@@ -53,6 +54,7 @@
|
|
|
53
54
|
},
|
|
54
55
|
"devDependencies": {
|
|
55
56
|
"@storybook/addon-a11y": "^10.5.9",
|
|
57
|
+
"@storybook/addon-vitest": "^10.5.9",
|
|
56
58
|
"@storybook/react-vite": "^10.5.9",
|
|
57
59
|
"@tailwindcss/cli": "^4.3.3",
|
|
58
60
|
"@tailwindcss/vite": "^4.3.3",
|
|
@@ -61,7 +63,10 @@
|
|
|
61
63
|
"@testing-library/user-event": "^14.6.5",
|
|
62
64
|
"@types/react": "^19.2.18",
|
|
63
65
|
"@types/react-dom": "^19.2.4",
|
|
66
|
+
"@vitest/browser": "^4.1.11",
|
|
67
|
+
"@vitest/browser-playwright": "^4.1.11",
|
|
64
68
|
"happy-dom": "^20.11.2",
|
|
69
|
+
"playwright": "^1.62.1",
|
|
65
70
|
"react": "^19.2.8",
|
|
66
71
|
"react-dom": "^19.2.8",
|
|
67
72
|
"storybook": "^10.5.9",
|