@doscientos/ui 0.1.7 → 0.1.8
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 +65 -65
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +36 -36
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -327,7 +327,7 @@ function getTextMatchParts(text, query) {
|
|
|
327
327
|
|
|
328
328
|
// src/ui/accordion/accordion.tsx
|
|
329
329
|
var import_react_aria_components = require("react-aria-components");
|
|
330
|
-
var
|
|
330
|
+
var import_lucide_react = require("lucide-react");
|
|
331
331
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
332
332
|
function Accordion({ className, ...props }) {
|
|
333
333
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_aria_components.DisclosureGroup, { "data-slot": "accordion", className: cn("flex w-full flex-col", className), ...props });
|
|
@@ -338,7 +338,7 @@ function AccordionItem({ className, ...props }) {
|
|
|
338
338
|
function AccordionTrigger({ className, children, ...props }) {
|
|
339
339
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_aria_components.Button, { "data-slot": "accordion-trigger", className: cn("group/accordion-trigger flex w-full items-center justify-between py-3 text-left text-sm font-medium outline-none transition-colors hover:text-primary focus-visible:ring-3 focus-visible:ring-ring/50", className), ...props, children: (values) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
340
340
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: typeof children === "function" ? children(values) : children }),
|
|
341
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
341
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ChevronDown, { "aria-hidden": "true", className: "size-4 transition-transform group-data-expanded/accordion-trigger:rotate-180 motion-reduce:transition-none" })
|
|
342
342
|
] }) });
|
|
343
343
|
}
|
|
344
344
|
function AccordionContent({ className, ...props }) {
|
|
@@ -382,14 +382,14 @@ function AppShellContent({ className, ...props }) {
|
|
|
382
382
|
}
|
|
383
383
|
|
|
384
384
|
// src/ui/avatar/avatar.tsx
|
|
385
|
-
var
|
|
385
|
+
var import_react4 = require("react");
|
|
386
386
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
387
387
|
var sizes = { xs: "size-5 text-[10px]", sm: "size-6 text-xs", default: "size-8 text-sm", lg: "size-10 text-base" };
|
|
388
388
|
function Avatar({ className, size = "default", ...props }) {
|
|
389
389
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { "data-slot": "avatar", "data-size": size, className: cn("group/avatar relative flex shrink-0 overflow-hidden rounded-full bg-muted text-muted-foreground", sizes[size], className), ...props });
|
|
390
390
|
}
|
|
391
391
|
function AvatarImage({ className, ...props }) {
|
|
392
|
-
const [failed, setFailed] = (0,
|
|
392
|
+
const [failed, setFailed] = (0, import_react4.useState)(false);
|
|
393
393
|
if (failed) return null;
|
|
394
394
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("img", { "data-slot": "avatar-image", className: cn("aspect-square size-full object-cover", className), onError: () => setFailed(true), ...props });
|
|
395
395
|
}
|
|
@@ -509,17 +509,17 @@ function CardFooter({ className, ...props }) {
|
|
|
509
509
|
|
|
510
510
|
// src/ui/checkbox/checkbox.tsx
|
|
511
511
|
var import_react_aria_components4 = require("react-aria-components");
|
|
512
|
-
var
|
|
512
|
+
var import_lucide_react2 = require("lucide-react");
|
|
513
513
|
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
514
514
|
function Checkbox({ className, children, ...props }) {
|
|
515
515
|
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_react_aria_components4.Checkbox, { "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, children: (state) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
516
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { "aria-hidden": "true", className: "grid size-4 place-items-center rounded border border-border bg-background text-primary-foreground transition-colors group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
516
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { "aria-hidden": "true", className: "grid size-4 place-items-center rounded border border-border bg-background text-primary-foreground transition-colors group-data-selected:border-primary group-data-selected:bg-primary group-data-focus-visible:ring-3 group-data-focus-visible:ring-ring/50", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react2.Check, { className: "size-3 opacity-0 transition-opacity group-data-selected:opacity-100 motion-reduce:transition-none" }) }),
|
|
517
517
|
typeof children === "function" ? children(state) : children
|
|
518
518
|
] }) });
|
|
519
519
|
}
|
|
520
520
|
|
|
521
521
|
// src/ui/combobox/combobox.tsx
|
|
522
|
-
var
|
|
522
|
+
var import_react5 = require("react");
|
|
523
523
|
var import_react_aria_components5 = require("react-aria-components");
|
|
524
524
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
525
525
|
var Combobox = import_react_aria_components5.ComboBox;
|
|
@@ -536,18 +536,18 @@ function ComboboxItem({ className, children, ...props }) {
|
|
|
536
536
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_aria_components5.ListBoxItem, { "data-slot": "combobox-item", className: cn("flex w-full cursor-default items-center justify-between rounded-md px-2 py-2 text-sm outline-none transition-colors data-focused:bg-muted data-focused:text-foreground data-hovered:bg-muted data-disabled:pointer-events-none data-disabled:opacity-50", className), ...props, children });
|
|
537
537
|
}
|
|
538
538
|
function HighlightMatch({ text, query, className }) {
|
|
539
|
-
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
539
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className, children: getTextMatchParts(text, query).map((part, index) => part.match ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("mark", { className: "rounded bg-accent px-0.5 text-accent-foreground", children: part.text }, `${part.text}-${index}`) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react5.Fragment, { children: part.text }, `${part.text}-${index}`)) });
|
|
540
540
|
}
|
|
541
541
|
function AutocompleteCombobox({ items, getItemKey, getItemLabel, renderItem, inputValue: controlledInputValue, onInputChange, selectedKey, onSelectionChange, label, description, errorMessage, emptyState = /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "px-3 py-7 text-center text-sm text-muted-foreground", children: "No hay resultados." }), suggestion = true, placeholder, className, onKeyDown: _onKeyDown, ...props }) {
|
|
542
|
-
const [internalInputValue, setInternalInputValue] = (0,
|
|
542
|
+
const [internalInputValue, setInternalInputValue] = (0, import_react5.useState)("");
|
|
543
543
|
const inputValue = controlledInputValue ?? internalInputValue;
|
|
544
544
|
const setInputValue = (value) => {
|
|
545
545
|
setInternalInputValue(value);
|
|
546
546
|
onInputChange?.(value);
|
|
547
547
|
};
|
|
548
548
|
const normalizedQuery = inputValue.trim().toLocaleLowerCase();
|
|
549
|
-
const filteredItems = (0,
|
|
550
|
-
const suggestedItem = (0,
|
|
549
|
+
const filteredItems = (0, import_react5.useMemo)(() => normalizedQuery ? items.filter((item) => getItemLabel(item).toLocaleLowerCase().includes(normalizedQuery)) : [...items], [getItemLabel, items, normalizedQuery]);
|
|
550
|
+
const suggestedItem = (0, import_react5.useMemo)(() => !suggestion || !normalizedQuery ? void 0 : items.find((item) => getItemLabel(item).toLocaleLowerCase().startsWith(normalizedQuery) && getItemLabel(item).length > inputValue.length), [getItemLabel, inputValue.length, items, normalizedQuery, suggestion]);
|
|
551
551
|
const suggestionLabel = suggestedItem ? getItemLabel(suggestedItem) : void 0;
|
|
552
552
|
const acceptSuggestion = () => {
|
|
553
553
|
if (!suggestedItem || !suggestionLabel) return false;
|
|
@@ -597,16 +597,16 @@ function CommandItem({ className, ...props }) {
|
|
|
597
597
|
}
|
|
598
598
|
|
|
599
599
|
// src/ui/dialog/dialog.tsx
|
|
600
|
-
var
|
|
601
|
-
var
|
|
600
|
+
var import_react6 = require("react");
|
|
601
|
+
var import_lucide_react3 = require("lucide-react");
|
|
602
602
|
var import_react_aria_components7 = require("react-aria-components");
|
|
603
603
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
604
|
-
var DialogCloseContext = (0,
|
|
604
|
+
var DialogCloseContext = (0, import_react6.createContext)(null);
|
|
605
605
|
function Dialog({ open, children, ...props }) {
|
|
606
606
|
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components7.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 });
|
|
607
607
|
}
|
|
608
608
|
function DialogClose({ onPress, ...props }) {
|
|
609
|
-
const close = (0,
|
|
609
|
+
const close = (0, import_react6.useContext)(DialogCloseContext);
|
|
610
610
|
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Button2, { onPress: (event) => {
|
|
611
611
|
onPress?.(event);
|
|
612
612
|
close?.();
|
|
@@ -615,7 +615,7 @@ function DialogClose({ onPress, ...props }) {
|
|
|
615
615
|
function DialogContent({ className, children, showCloseButton = true, ...props }) {
|
|
616
616
|
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components7.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_runtime13.jsx)(import_react_aria_components7.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_runtime13.jsxs)(DialogCloseContext.Provider, { value: close, children: [
|
|
617
617
|
typeof children === "function" ? children({ close }) : children,
|
|
618
|
-
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogClose, { "aria-label": "Cerrar di\xE1logo", variant: "ghost", size: "icon", className: "absolute top-2 right-2", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
618
|
+
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogClose, { "aria-label": "Cerrar di\xE1logo", variant: "ghost", size: "icon", className: "absolute top-2 right-2", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react3.X, { "aria-hidden": "true", className: "size-4" }) })
|
|
619
619
|
] }) }) });
|
|
620
620
|
}
|
|
621
621
|
function DialogHeader({ className, ...props }) {
|
|
@@ -694,10 +694,10 @@ function EmptyStateDescription({ className, ...props }) {
|
|
|
694
694
|
}
|
|
695
695
|
|
|
696
696
|
// src/ui/label/label.tsx
|
|
697
|
-
var
|
|
697
|
+
var import_react7 = require("react");
|
|
698
698
|
var import_react_aria_components10 = require("react-aria-components");
|
|
699
699
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
700
|
-
var Label2 = (0,
|
|
700
|
+
var Label2 = (0, import_react7.forwardRef)(function Label3({ className, ...props }, ref) {
|
|
701
701
|
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components10.Label, { ref, "data-slot": "label", className: cn("flex items-center gap-2 text-sm font-medium leading-none select-none", className), ...props });
|
|
702
702
|
});
|
|
703
703
|
|
|
@@ -718,32 +718,32 @@ function FieldError2({ className, children, ...props }) {
|
|
|
718
718
|
}
|
|
719
719
|
|
|
720
720
|
// src/ui/form-feedback/form-feedback.tsx
|
|
721
|
-
var
|
|
722
|
-
var
|
|
721
|
+
var import_react8 = require("react");
|
|
722
|
+
var import_lucide_react4 = require("lucide-react");
|
|
723
723
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
724
724
|
function useFormFeedback(options) {
|
|
725
725
|
const resetMs = options?.successResetMs ?? 2500;
|
|
726
|
-
const [state, setState] = (0,
|
|
727
|
-
const timer = (0,
|
|
728
|
-
const clearTimer = (0,
|
|
726
|
+
const [state, setState] = (0, import_react8.useState)({ status: "idle" });
|
|
727
|
+
const timer = (0, import_react8.useRef)(null);
|
|
728
|
+
const clearTimer = (0, import_react8.useCallback)(() => {
|
|
729
729
|
if (timer.current) clearTimeout(timer.current);
|
|
730
730
|
timer.current = null;
|
|
731
731
|
}, []);
|
|
732
|
-
(0,
|
|
733
|
-
const setPending = (0,
|
|
732
|
+
(0, import_react8.useEffect)(() => () => clearTimer(), [clearTimer]);
|
|
733
|
+
const setPending = (0, import_react8.useCallback)(() => {
|
|
734
734
|
clearTimer();
|
|
735
735
|
setState({ status: "pending" });
|
|
736
736
|
}, [clearTimer]);
|
|
737
|
-
const setSuccess = (0,
|
|
737
|
+
const setSuccess = (0, import_react8.useCallback)((message) => {
|
|
738
738
|
clearTimer();
|
|
739
739
|
setState({ status: "success", message });
|
|
740
740
|
if (resetMs > 0) timer.current = setTimeout(() => setState({ status: "idle" }), resetMs);
|
|
741
741
|
}, [clearTimer, resetMs]);
|
|
742
|
-
const setError = (0,
|
|
742
|
+
const setError = (0, import_react8.useCallback)((message) => {
|
|
743
743
|
clearTimer();
|
|
744
744
|
setState({ status: "error", message });
|
|
745
745
|
}, [clearTimer]);
|
|
746
|
-
const reset = (0,
|
|
746
|
+
const reset = (0, import_react8.useCallback)(() => {
|
|
747
747
|
clearTimer();
|
|
748
748
|
setState({ status: "idle" });
|
|
749
749
|
}, [clearTimer]);
|
|
@@ -754,9 +754,9 @@ function FormFeedback({ state, className, pendingLabel = "Guardando\u2026", succ
|
|
|
754
754
|
const error = state.status === "error";
|
|
755
755
|
const success = state.status === "success";
|
|
756
756
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("span", { role: error ? "alert" : "status", "aria-live": "polite", className: cn("inline-flex h-5 items-center gap-1.5 text-xs", error && "text-destructive", success && "text-success", state.status === "pending" && "text-muted-foreground", className), children: [
|
|
757
|
-
state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
758
|
-
success && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
759
|
-
error && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
757
|
+
state.status === "pending" && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react4.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
|
|
758
|
+
success && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react4.CheckCircle, { "aria-hidden": "true", className: "size-3.5" }),
|
|
759
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react4.CircleAlert, { "aria-hidden": "true", className: "size-3.5" }),
|
|
760
760
|
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: state.status === "pending" ? pendingLabel : success ? state.message ?? successLabel : state.message })
|
|
761
761
|
] });
|
|
762
762
|
}
|
|
@@ -833,10 +833,10 @@ function IconButton({
|
|
|
833
833
|
}
|
|
834
834
|
|
|
835
835
|
// src/ui/input/input.tsx
|
|
836
|
-
var
|
|
836
|
+
var import_react9 = require("react");
|
|
837
837
|
var import_react_aria_components13 = require("react-aria-components");
|
|
838
838
|
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
839
|
-
var InputImpl = (0,
|
|
839
|
+
var InputImpl = (0, import_react9.forwardRef)(function Input2({ className, type, ...props }, ref) {
|
|
840
840
|
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components13.Input, { ref, type, "data-slot": "input", className: cn("h-8 w-full min-w-0 rounded-lg border border-border bg-background px-2.5 py-1 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
|
|
841
841
|
});
|
|
842
842
|
var Input3 = InputImpl;
|
|
@@ -845,10 +845,10 @@ var Input3 = InputImpl;
|
|
|
845
845
|
var import_class_variance_authority3 = require("class-variance-authority");
|
|
846
846
|
|
|
847
847
|
// src/ui/textarea/textarea.tsx
|
|
848
|
-
var
|
|
848
|
+
var import_react10 = require("react");
|
|
849
849
|
var import_react_aria_components14 = require("react-aria-components");
|
|
850
850
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
851
|
-
var TextareaImpl = (0,
|
|
851
|
+
var TextareaImpl = (0, import_react10.forwardRef)(function Textarea({ className, ...props }, ref) {
|
|
852
852
|
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components14.TextArea, { ref, "data-slot": "textarea", className: cn("min-h-20 w-full rounded-lg border border-border bg-background px-2.5 py-2 text-sm text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive", className), ...props });
|
|
853
853
|
});
|
|
854
854
|
var Textarea2 = TextareaImpl;
|
|
@@ -885,11 +885,11 @@ function KbdGroup({ className, ...props }) {
|
|
|
885
885
|
}
|
|
886
886
|
|
|
887
887
|
// src/ui/loading-overlay/loading-overlay.tsx
|
|
888
|
-
var
|
|
888
|
+
var import_lucide_react5 = require("lucide-react");
|
|
889
889
|
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
890
890
|
function LoadingOverlay({ label = "Cargando", className, ...props }) {
|
|
891
891
|
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { role: "status", "aria-live": "polite", className: cn("absolute inset-0 z-10 flex items-center justify-center bg-background/70 backdrop-blur-[2px]", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm shadow-sm", children: [
|
|
892
|
-
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
892
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react5.LoaderCircle, { className: "animate-spin", "aria-hidden": "true" }),
|
|
893
893
|
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { children: label })
|
|
894
894
|
] }) });
|
|
895
895
|
}
|
|
@@ -927,7 +927,7 @@ function PageHeaderActions({ className, ...props }) {
|
|
|
927
927
|
}
|
|
928
928
|
|
|
929
929
|
// src/ui/pagination/pagination.tsx
|
|
930
|
-
var
|
|
930
|
+
var import_lucide_react6 = require("lucide-react");
|
|
931
931
|
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
932
932
|
function Pagination({ page, pageCount, onPageChange, className }) {
|
|
933
933
|
const pages = Array.from({ length: pageCount }, (_, index) => index + 1);
|
|
@@ -939,9 +939,9 @@ function Pagination({ page, pageCount, onPageChange, className }) {
|
|
|
939
939
|
pageCount
|
|
940
940
|
] }),
|
|
941
941
|
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center gap-1", children: [
|
|
942
|
-
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button2, { "aria-label": "P\xE1gina anterior", isDisabled: page <= 1, onPress: () => onPageChange(page - 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
942
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button2, { "aria-label": "P\xE1gina anterior", isDisabled: page <= 1, onPress: () => onPageChange(page - 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react6.ChevronLeft, {}) }),
|
|
943
943
|
pages.map((item) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button2, { "aria-current": item === page ? "page" : void 0, "aria-label": `P\xE1gina ${item}`, onPress: () => onPageChange(item), size: "icon", variant: item === page ? "secondary" : "ghost", children: item }, item)),
|
|
944
|
-
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button2, { "aria-label": "P\xE1gina siguiente", isDisabled: page >= pageCount, onPress: () => onPageChange(page + 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
944
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button2, { "aria-label": "P\xE1gina siguiente", isDisabled: page >= pageCount, onPress: () => onPageChange(page + 1), size: "icon", variant: "ghost", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react6.ChevronRight, {}) })
|
|
945
945
|
] })
|
|
946
946
|
] });
|
|
947
947
|
}
|
|
@@ -956,7 +956,7 @@ function Popover4({ className, ...props }) {
|
|
|
956
956
|
var PopoverContent = Popover4;
|
|
957
957
|
|
|
958
958
|
// src/ui/quantity-input/quantity-input.tsx
|
|
959
|
-
var
|
|
959
|
+
var import_lucide_react7 = require("lucide-react");
|
|
960
960
|
var import_react_aria_components17 = require("react-aria-components");
|
|
961
961
|
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
962
962
|
function QuantityInput({
|
|
@@ -982,9 +982,9 @@ function QuantityInput({
|
|
|
982
982
|
"data-slot": "quantity-input-group",
|
|
983
983
|
className: "flex h-8 min-w-0 items-stretch overflow-hidden rounded-lg border border-border bg-background text-foreground transition-[border-color,box-shadow] focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50 group-data-invalid/quantity-input:border-destructive",
|
|
984
984
|
children: [
|
|
985
|
-
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components17.Button, { slot: "decrement", "aria-label": decrementAriaLabel, "data-slot": "quantity-input-decrement", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-r border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
985
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components17.Button, { slot: "decrement", "aria-label": decrementAriaLabel, "data-slot": "quantity-input-decrement", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-r border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react7.Minus, { "aria-hidden": "true", className: "size-4" }) }),
|
|
986
986
|
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components17.Input, { "data-slot": "quantity-input-value", className: cn("w-14 min-w-0 bg-transparent px-1 text-center text-sm tabular-nums outline-none", inputClassName) }),
|
|
987
|
-
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components17.Button, { slot: "increment", "aria-label": incrementAriaLabel, "data-slot": "quantity-input-increment", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-l border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
987
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components17.Button, { slot: "increment", "aria-label": incrementAriaLabel, "data-slot": "quantity-input-increment", className: "flex size-8 shrink-0 cursor-pointer items-center justify-center border-l border-border text-muted-foreground outline-none transition-colors hover:bg-muted hover:text-foreground data-focus-visible:bg-muted data-pressed:bg-muted data-disabled:pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react7.Plus, { "aria-hidden": "true", className: "size-4" }) })
|
|
988
988
|
]
|
|
989
989
|
}
|
|
990
990
|
)
|
|
@@ -994,25 +994,25 @@ function QuantityInput({
|
|
|
994
994
|
|
|
995
995
|
// src/ui/search-field/search-field.tsx
|
|
996
996
|
var import_react_aria_components18 = require("react-aria-components");
|
|
997
|
-
var
|
|
997
|
+
var import_lucide_react8 = require("lucide-react");
|
|
998
998
|
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
999
999
|
var SearchField = import_react_aria_components18.SearchField;
|
|
1000
1000
|
function SearchInput({ className, ...props }) {
|
|
1001
1001
|
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_aria_components18.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 });
|
|
1002
1002
|
}
|
|
1003
|
-
function SearchClearButton({ className, children = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
1003
|
+
function SearchClearButton({ className, children = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react8.X, { "aria-hidden": "true", className: "size-4" }), ...props }) {
|
|
1004
1004
|
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_aria_components18.Button, { slot: "clear", "data-slot": "search-clear", className: cn("absolute top-1/2 right-1 rounded p-1 text-muted-foreground outline-none hover:bg-muted data-focus-visible:ring-2 data-focus-visible:ring-ring", className), ...props, children });
|
|
1005
1005
|
}
|
|
1006
1006
|
|
|
1007
1007
|
// src/ui/select/select.tsx
|
|
1008
1008
|
var import_react_aria_components19 = require("react-aria-components");
|
|
1009
|
-
var
|
|
1009
|
+
var import_lucide_react9 = require("lucide-react");
|
|
1010
1010
|
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
1011
1011
|
var Select = import_react_aria_components19.Select;
|
|
1012
1012
|
function SelectTrigger({ className, children, ...props }) {
|
|
1013
1013
|
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components19.Button, { "data-slot": "select-trigger", className: cn("group/select-trigger flex h-8 w-full min-w-36 items-center gap-2 rounded-lg border border-border bg-background px-2.5 text-left text-sm text-foreground outline-none data-focus-visible:ring-3 data-focus-visible:ring-ring/50 data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: (state) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
|
|
1014
1014
|
typeof children === "function" ? children(state) : children,
|
|
1015
|
-
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
1015
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react9.ChevronDown, { "aria-hidden": "true", className: "ml-auto size-4 text-muted-foreground transition-transform group-data-pressed/select-trigger:rotate-180 motion-reduce:transition-none" })
|
|
1016
1016
|
] }) });
|
|
1017
1017
|
}
|
|
1018
1018
|
function SelectValue({ className, ...props }) {
|
|
@@ -1036,13 +1036,13 @@ function Separator({ className, orientation = "horizontal", ...props }) {
|
|
|
1036
1036
|
}
|
|
1037
1037
|
|
|
1038
1038
|
// src/ui/sidebar/sidebar.tsx
|
|
1039
|
-
var
|
|
1040
|
-
var
|
|
1039
|
+
var import_lucide_react10 = require("lucide-react");
|
|
1040
|
+
var import_react11 = require("react");
|
|
1041
1041
|
var import_react_aria_components21 = require("react-aria-components");
|
|
1042
1042
|
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
1043
|
-
var SidebarContext = (0,
|
|
1043
|
+
var SidebarContext = (0, import_react11.createContext)(null);
|
|
1044
1044
|
function useSidebar() {
|
|
1045
|
-
const context = (0,
|
|
1045
|
+
const context = (0, import_react11.useContext)(SidebarContext);
|
|
1046
1046
|
if (!context)
|
|
1047
1047
|
throw new Error("useSidebar must be used inside SidebarProvider");
|
|
1048
1048
|
return context;
|
|
@@ -1051,8 +1051,8 @@ function SidebarProvider({
|
|
|
1051
1051
|
defaultCollapsed = false,
|
|
1052
1052
|
children
|
|
1053
1053
|
}) {
|
|
1054
|
-
const [collapsed, setCollapsed] = (0,
|
|
1055
|
-
const value = (0,
|
|
1054
|
+
const [collapsed, setCollapsed] = (0, import_react11.useState)(defaultCollapsed);
|
|
1055
|
+
const value = (0, import_react11.useMemo)(
|
|
1056
1056
|
() => ({
|
|
1057
1057
|
collapsed,
|
|
1058
1058
|
setCollapsed,
|
|
@@ -1110,7 +1110,7 @@ function SidebarSearch({
|
|
|
1110
1110
|
),
|
|
1111
1111
|
...props,
|
|
1112
1112
|
children: [
|
|
1113
|
-
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1113
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.Search, { className: "size-4 shrink-0" }),
|
|
1114
1114
|
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "flex-1 text-left", children: label }),
|
|
1115
1115
|
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("kbd", { className: "rounded bg-secondary px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground", children: shortcut })
|
|
1116
1116
|
]
|
|
@@ -1237,7 +1237,7 @@ function SidebarTrigger({ className, ...props }) {
|
|
|
1237
1237
|
variant: "ghost",
|
|
1238
1238
|
className: cn("ml-auto", className),
|
|
1239
1239
|
...props,
|
|
1240
|
-
children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1240
|
+
children: collapsed ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.ChevronRight, {}) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.ChevronLeft, {})
|
|
1241
1241
|
}
|
|
1242
1242
|
);
|
|
1243
1243
|
}
|
|
@@ -1269,7 +1269,7 @@ function SidebarMore({ className, ...props }) {
|
|
|
1269
1269
|
variant: "ghost",
|
|
1270
1270
|
className: cn("size-7", className),
|
|
1271
1271
|
...props,
|
|
1272
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1272
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.Ellipsis, {})
|
|
1273
1273
|
}
|
|
1274
1274
|
);
|
|
1275
1275
|
}
|
|
@@ -1282,13 +1282,13 @@ function Skeleton({ className, ...props }) {
|
|
|
1282
1282
|
|
|
1283
1283
|
// src/ui/submit-button/submit-button.tsx
|
|
1284
1284
|
var import_react_dom = require("react-dom");
|
|
1285
|
-
var
|
|
1285
|
+
var import_lucide_react11 = require("lucide-react");
|
|
1286
1286
|
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
1287
1287
|
function SubmitButton({ pendingLabel = "Guardando\u2026", loading = false, children, isDisabled, size = "sm", ...props }) {
|
|
1288
1288
|
const { pending } = (0, import_react_dom.useFormStatus)();
|
|
1289
1289
|
const busy = pending || loading;
|
|
1290
1290
|
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Button2, { type: "submit", size, isDisabled: busy || isDisabled, "aria-busy": busy || void 0, ...props, children: busy ? /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
|
|
1291
|
-
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
1291
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react11.LoaderCircle, { "aria-hidden": "true", className: "size-3.5 animate-spin" }),
|
|
1292
1292
|
pendingLabel
|
|
1293
1293
|
] }) : children });
|
|
1294
1294
|
}
|
|
@@ -1393,8 +1393,8 @@ function TabsContent({ className, ...props }) {
|
|
|
1393
1393
|
}
|
|
1394
1394
|
|
|
1395
1395
|
// src/ui/toast/toast.tsx
|
|
1396
|
-
var
|
|
1397
|
-
var
|
|
1396
|
+
var import_react12 = require("react");
|
|
1397
|
+
var import_lucide_react12 = require("lucide-react");
|
|
1398
1398
|
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
1399
1399
|
var records = [];
|
|
1400
1400
|
var listeners = /* @__PURE__ */ new Set();
|
|
@@ -1457,25 +1457,25 @@ function Toaster({ position = "bottom-right" }) {
|
|
|
1457
1457
|
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment, { children: Object.keys(positionClasses).map((item) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ToastViewport, { position: item, visiblePosition: position }, item)) });
|
|
1458
1458
|
}
|
|
1459
1459
|
function ToastViewport({ position, visiblePosition, className }) {
|
|
1460
|
-
const toasts = (0,
|
|
1460
|
+
const toasts = (0, import_react12.useSyncExternalStore)(subscribe, snapshot, snapshot).filter((item) => item.position === position);
|
|
1461
1461
|
if (visiblePosition && position !== visiblePosition && toasts.length === 0) return null;
|
|
1462
1462
|
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { "aria-label": `Notificaciones ${position}`, className: cn("pointer-events-none fixed z-50 flex w-[min(24rem,calc(100vw-2rem))] flex-col gap-2", positionClasses[position], className), children: toasts.map((item) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Toast, { ...item, onDismiss: () => dismiss(item.id) }, item.id)) });
|
|
1463
1463
|
}
|
|
1464
1464
|
function Toast({ id, title, description, variant = "default", action, state = "open", duration = 0, onDismiss }) {
|
|
1465
|
-
(0,
|
|
1465
|
+
(0, import_react12.useEffect)(() => {
|
|
1466
1466
|
if (state !== "open" || duration <= 0) return;
|
|
1467
1467
|
const timeout = window.setTimeout(() => dismiss(id), duration);
|
|
1468
1468
|
return () => window.clearTimeout(timeout);
|
|
1469
1469
|
}, [duration, id, state]);
|
|
1470
|
-
const Icon = variant === "success" ?
|
|
1470
|
+
const Icon = variant === "success" ? import_lucide_react12.CheckCircle : variant === "error" ? import_lucide_react12.XCircle : variant === "warning" ? import_lucide_react12.CircleAlert : variant === "info" ? import_lucide_react12.Info : import_lucide_react12.Info;
|
|
1471
1471
|
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { role: variant === "error" ? "alert" : "status", "data-state": state, className: cn("pointer-events-auto w-full overflow-hidden rounded-xl border border-border/80 bg-background/95 p-3.5 text-foreground shadow-xl shadow-black/10 backdrop-blur-md animate-ui-toast-in", "data-[state=closing]:animate-ui-toast-out motion-reduce:animate-none", variant === "success" && "border-success/30", variant === "error" && "border-destructive/30", variant === "warning" && "border-warning/40"), children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
1472
|
-
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { "aria-hidden": "true",
|
|
1472
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { "aria-hidden": "true", className: cn("mt-0.5 size-5 shrink-0", variant === "success" && "text-success", variant === "error" && "text-destructive", variant === "warning" && "text-warning", variant === "info" && "text-primary") }),
|
|
1473
1473
|
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
1474
1474
|
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "animate-ui-toast-title text-sm font-semibold", children: title }),
|
|
1475
1475
|
description && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "mt-1 max-h-20 animate-ui-toast-description overflow-hidden text-sm leading-5 text-muted-foreground data-[state=closing]:max-h-0", "data-state": state, children: description }),
|
|
1476
1476
|
action && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Button2, { size: "sm", variant: "link", onPress: action.onPress, className: "mt-1 h-auto px-0", children: action.label })
|
|
1477
1477
|
] }),
|
|
1478
|
-
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Button2, { "aria-label": "Cerrar notificaci\xF3n", onPress: onDismiss, size: "icon", variant: "ghost", className: "-mr-2 -mt-2 size-7", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
1478
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Button2, { "aria-label": "Cerrar notificaci\xF3n", onPress: onDismiss, size: "icon", variant: "ghost", className: "-mr-2 -mt-2 size-7", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react12.X, {}) })
|
|
1479
1479
|
] }) });
|
|
1480
1480
|
}
|
|
1481
1481
|
|