diff --git a/dist/sigpro-ui.js b/dist/sigpro-ui.js index ac097f4..c529883 100644 --- a/dist/sigpro-ui.js +++ b/dist/sigpro-ui.js @@ -266,7 +266,7 @@ runner(); return runner.stop; }; - var $html = (tag, props = {}, content = []) => { + var $html2 = (tag, props = {}, content = []) => { if (props instanceof Node || Array.isArray(props) || typeof props !== "object") { content = props; props = {}; @@ -328,7 +328,7 @@ }; var $if = (condition, thenVal, otherwiseVal = null) => { const marker = document.createTextNode(""); - const container = $html("div", { style: "display:contents" }, [marker]); + const container = $html2("div", { style: "display:contents" }, [marker]); let current = null, last = null; $watch(() => { const state = !!(typeof condition === "function" ? condition() : condition); @@ -348,7 +348,7 @@ $if.not = (condition, thenVal, otherwiseVal) => $if(() => !(typeof condition === "function" ? condition() : condition), thenVal, otherwiseVal); var $for = (source, render, keyFn) => { const marker = document.createTextNode(""); - const container = $html("div", { style: "display:contents" }, [marker]); + const container = $html2("div", { style: "display:contents" }, [marker]); let cache = new Map; $watch(() => { const items = (typeof source === "function" ? source() : source) || []; @@ -385,7 +385,7 @@ var $router = (routes) => { const sPath = $(window.location.hash.replace(/^#/, "") || "/"); window.addEventListener("hashchange", () => sPath(window.location.hash.replace(/^#/, "") || "/")); - const outlet = $html("div", { class: "router-outlet" }); + const outlet = $html2("div", { class: "router-outlet" }); let current = null; $watch([sPath], async () => { const path = sPath(); @@ -411,7 +411,7 @@ try { return typeof comp === "function" ? comp(params) : comp; } catch (e) { - return $html("div", { class: "p-4 text-error" }, "Error loading view"); + return $html2("div", { class: "p-4 text-error" }, "Error loading view"); } }); outlet.appendChild(current.container); @@ -434,7 +434,7 @@ MOUNTED_NODES.set(el, instance); return instance; }; - var SigProCore = { $, $watch, $html, $if, $for, $router, $mount }; + var SigProCore = { $, $watch, $html: $html2, $if, $for, $router, $mount }; if (typeof window !== "undefined") { const install = (registry) => { Object.keys(registry).forEach((key) => { @@ -444,7 +444,7 @@ tags.forEach((tagName) => { const helperName = tagName.charAt(0).toUpperCase() + tagName.slice(1); if (!(helperName in window)) { - window[helperName] = (props, content) => $html(tagName, props, content); + window[helperName] = (props, content) => $html2(tagName, props, content); } }); window.SigPro = Object.freeze(registry); @@ -509,10 +509,10 @@ if (!icon) return null; if (typeof icon === "function") { - return $html("span", { class: "mr-1" }, icon()); + return $html2("span", { class: "mr-1" }, icon()); } if (typeof icon === "object") { - return $html("span", { class: "mr-1" }, icon); + return $html2("span", { class: "mr-1" }, icon); } if (typeof icon === "string") { const parts = icon.trim().split(/\s+/); @@ -520,9 +520,9 @@ const iconClass = hasRight ? parts.slice(0, -1).join(" ") : icon; const spacing = hasRight ? "ml-1" : "mr-1"; if (iconClass && !iconClass.startsWith("icon-[") && !iconClass.includes("--")) { - return $html("span", { class: spacing }, iconClass); + return $html2("span", { class: spacing }, iconClass); } - return $html("span", { class: `${iconClass} ${spacing}`.trim() }); + return $html2("span", { class: `${iconClass} ${spacing}`.trim() }); } return null; }; @@ -530,17 +530,17 @@ // src/components/Accordion.js var Accordion = (props, children) => { const { class: className, title, name, open, ...rest } = props; - return $html("div", { + return $html2("div", { ...rest, class: ui("collapse collapse-arrow bg-base-200 mb-2", className) }, [ - $html("input", { + $html2("input", { type: name ? "radio" : "checkbox", name, checked: val(open) }), - $html("div", { class: "collapse-title text-xl font-medium" }, title), - $html("div", { class: "collapse-content" }, children) + $html2("div", { class: "collapse-title text-xl font-medium" }, title), + $html2("div", { class: "collapse-content" }, children) ]); }; @@ -561,16 +561,16 @@ const softClass = soft ? "alert-soft" : ""; const allClasses = [typeClass, softClass, className].filter(Boolean).join(" "); const content = children || props.message; - return $html("div", { + return $html2("div", { ...rest, role: "alert", class: ui("alert", allClasses) }, () => [ getIcon(iconMap[type]), - $html("div", { class: "flex-1" }, [ - $html("span", {}, [typeof content === "function" ? content() : content]) + $html2("div", { class: "flex-1" }, [ + $html2("span", {}, [typeof content === "function" ? content() : content]) ]), - actions ? $html("div", { class: "flex-none" }, [ + actions ? $html2("div", { class: "flex-none" }, [ typeof actions === "function" ? actions() : actions ]) : null ].filter(Boolean)); @@ -646,8 +646,8 @@ return "btn-lg"; return "btn-md"; }; - return $html("div", { class: "relative w-full" }, () => [ - $html("input", { + return $html2("div", { class: "relative w-full" }, () => [ + $html2("input", { ...rest, type: () => isPassword ? visible() ? "text" : "password" : type, placeholder: placeholder || " ", @@ -656,10 +656,10 @@ oninput: (e) => oninput?.(e), disabled: () => val(disabled) }), - leftIcon ? $html("div", { + leftIcon ? $html2("div", { class: "absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60" }, leftIcon) : null, - isPassword ? $html("button", { + isPassword ? $html2("button", { type: "button", class: ui("absolute right-3 inset-y-0 flex items-center", "btn btn-ghost btn-circle opacity-50 hover:opacity-100", buttonSize()), onclick: (e) => { @@ -707,7 +707,7 @@ isOpen(false); } }; - return $html("div", { class: "relative w-full" }, [ + return $html2("div", { class: "relative w-full" }, [ Input({ label, class: className, @@ -726,18 +726,18 @@ }, ...rest }), - $html("ul", { + $html2("ul", { class: "absolute left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50", style: () => isOpen() && list().length ? "display:block" : "display:none" }, [ - $for(list, (opt, i) => $html("li", {}, [ - $html("a", { + $for(list, (opt, i) => $html2("li", {}, [ + $html2("a", { class: () => `block w-full ${cursor() === i ? "active bg-primary text-primary-content" : ""}`, onclick: () => pick(opt), onmouseenter: () => cursor(i) }, typeof opt === "string" ? opt : opt.label) ]), (opt, i) => (typeof opt === "string" ? opt : opt.value) + i), - () => list().length ? null : $html("li", { class: "p-2 text-center opacity-50" }, tt("nodata")()) + () => list().length ? null : $html2("li", { class: "p-2 text-center opacity-50" }, tt("nodata")()) ]) ]); }; @@ -749,7 +749,7 @@ }); var Badge = (props, children) => { const { class: className, ...rest } = props; - return $html("span", { + return $html2("span", { ...rest, class: ui("badge", className) }, children); @@ -763,12 +763,12 @@ var Button = (props, children) => { const { class: className, loading, icon, ...rest } = props; const iconEl = getIcon(icon); - return $html("button", { + return $html2("button", { ...rest, class: ui("btn", className), disabled: () => val(loading) || val(props.disabled) }, () => [ - val(loading) && $html("span", { class: "loading loading-spinner" }), + val(loading) && $html2("span", { class: "loading loading-spinner" }), iconEl, children ].filter(Boolean)); @@ -781,17 +781,17 @@ }); var Checkbox = (props) => { const { class: className, value, tooltip, toggle, label, ...rest } = props; - const checkEl = $html("input", { + const checkEl = $html2("input", { ...rest, type: "checkbox", class: () => ui(val(toggle) ? "toggle" : "checkbox", className), checked: value }); - const layout = $html("label", { class: "label cursor-pointer justify-start gap-3" }, [ + const layout = $html2("label", { class: "label cursor-pointer justify-start gap-3" }, [ checkEl, - label ? $html("span", { class: "label-text" }, label) : null + label ? $html2("span", { class: "label-text" }, label) : null ]); - return tooltip ? $html("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout; + return tooltip ? $html2("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout; }; // src/components/Colorpicker.js @@ -813,8 +813,8 @@ ...["#2e1065", "#4c1d95", "#6d28d9", "#7c3aed", "#8b5cf6", "#a855f7", "#d946ef", "#fae8ff"] ]; const getColor = () => val(value) || "#000000"; - return $html("div", { class: ui("relative w-fit", className) }, [ - $html("button", { + return $html2("div", { class: ui("relative w-fit", className) }, [ + $html2("button", { type: "button", class: "btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case", onclick: (e) => { @@ -823,17 +823,17 @@ }, ...rest }, [ - $html("div", { + $html2("div", { class: "size-5 rounded-sm shadow-inner border border-black/10 shrink-0", style: () => `background-color: ${getColor()}` }), - label ? $html("span", { class: "opacity-80" }, label) : null + label ? $html2("span", { class: "opacity-80" }, label) : null ]), - $if(isOpen, () => $html("div", { + $if(isOpen, () => $html2("div", { class: "absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none", onclick: (e) => e.stopPropagation() }, [ - $html("div", { class: "grid grid-cols-8 gap-1" }, palette.map((c) => $html("button", { + $html2("div", { class: "grid grid-cols-8 gap-1" }, palette.map((c) => $html2("button", { type: "button", style: `background-color: ${c}`, class: () => { @@ -848,7 +848,7 @@ } }))) ])), - $if(isOpen, () => $html("div", { + $if(isOpen, () => $html2("div", { class: "fixed inset-0 z-[100]", onclick: () => isOpen(false) })) @@ -936,9 +936,9 @@ internalDate(new Date(d.getFullYear() + y, d.getMonth(), 1)); }; const HourSlider = ({ value: hVal, onChange }) => { - return $html("div", { class: "flex-1" }, [ - $html("div", { class: "flex gap-2 items-center" }, [ - $html("input", { + return $html2("div", { class: "flex-1" }, [ + $html2("div", { class: "flex gap-2 items-center" }, [ + $html2("input", { type: "range", min: 0, max: 23, @@ -949,11 +949,11 @@ onChange(newHour); } }), - $html("span", { class: "text-sm font-mono min-w-[48px] text-center" }, () => String(val(hVal)).padStart(2, "0") + ":00") + $html2("span", { class: "text-sm font-mono min-w-[48px] text-center" }, () => String(val(hVal)).padStart(2, "0") + ":00") ]) ]); }; - return $html("div", { class: ui("relative w-full", className) }, [ + return $html2("div", { class: ui("relative w-full", className) }, [ Input({ label, placeholder: placeholder || (isRangeMode() ? "Seleccionar rango..." : "Seleccionar fecha..."), @@ -966,25 +966,25 @@ }, ...rest }), - $if(isOpen, () => $html("div", { + $if(isOpen, () => $html2("div", { class: "absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none", onclick: (e) => e.stopPropagation() }, [ - $html("div", { class: "flex justify-between items-center mb-4 gap-1" }, [ - $html("div", { class: "flex gap-0.5" }, [ - $html("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => moveYear(-1) }, getIcon("icon-[lucide--chevrons-left]")), - $html("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => move(-1) }, getIcon("icon-[lucide--chevron-left]")) + $html2("div", { class: "flex justify-between items-center mb-4 gap-1" }, [ + $html2("div", { class: "flex gap-0.5" }, [ + $html2("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => moveYear(-1) }, getIcon("icon-[lucide--chevrons-left]")), + $html2("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => move(-1) }, getIcon("icon-[lucide--chevron-left]")) ]), - $html("span", { class: "font-bold uppercase flex-1 text-center" }, [ + $html2("span", { class: "font-bold uppercase flex-1 text-center" }, [ () => internalDate().toLocaleString("es-ES", { month: "short", year: "numeric" }) ]), - $html("div", { class: "flex gap-0.5" }, [ - $html("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => move(1) }, getIcon("icon-[lucide--chevron-right]")), - $html("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => moveYear(1) }, getIcon("icon-[lucide--chevrons-right]")) + $html2("div", { class: "flex gap-0.5" }, [ + $html2("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => move(1) }, getIcon("icon-[lucide--chevron-right]")), + $html2("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => moveYear(1) }, getIcon("icon-[lucide--chevrons-right]")) ]) ]), - $html("div", { class: "grid grid-cols-7 gap-1", onmouseleave: () => hoverDate(null) }, [ - ...["L", "M", "X", "J", "V", "S", "D"].map((d) => $html("div", { class: "text-[10px] opacity-40 font-bold text-center" }, d)), + $html2("div", { class: "grid grid-cols-7 gap-1", onmouseleave: () => hoverDate(null) }, [ + ...["L", "M", "X", "J", "V", "S", "D"].map((d) => $html2("div", { class: "text-[10px] opacity-40 font-bold text-center" }, d)), () => { const d = internalDate(); const year = d.getFullYear(); @@ -994,11 +994,11 @@ const daysInMonth = new Date(year, month + 1, 0).getDate(); const nodes = []; for (let i = 0;i < offset; i++) - nodes.push($html("div")); + nodes.push($html2("div")); for (let i = 1;i <= daysInMonth; i++) { const date = new Date(year, month, i); const dStr = formatDate(date); - nodes.push($html("button", { + nodes.push($html2("button", { type: "button", class: () => { const v = val(value); @@ -1029,8 +1029,8 @@ return nodes; } ]), - hour ? $html("div", { class: "mt-3 pt-2 border-t border-base-300" }, [ - isRangeMode() ? $html("div", { class: "flex gap-4" }, [ + hour ? $html2("div", { class: "mt-3 pt-2 border-t border-base-300" }, [ + isRangeMode() ? $html2("div", { class: "flex gap-4" }, [ HourSlider({ value: startHour, onChange: (newHour) => { @@ -1061,7 +1061,7 @@ }) ]) : null ])), - $if(isOpen, () => $html("div", { class: "fixed inset-0 z-[90]", onclick: () => isOpen(false) })) + $if(isOpen, () => $html2("div", { class: "fixed inset-0 z-[90]", onclick: () => isOpen(false) })) ]); }; @@ -1073,11 +1073,11 @@ var Drawer = (props, children) => { const { class: className, id, open, side, content, ...rest } = props; const drawerId = id || `drawer-${Math.random().toString(36).slice(2, 9)}`; - return $html("div", { + return $html2("div", { ...rest, class: ui("drawer", className) }, [ - $html("input", { + $html2("input", { id: drawerId, type: "checkbox", class: "drawer-toggle", @@ -1087,11 +1087,11 @@ open(e.target.checked); } }), - $html("div", { class: "drawer-content" }, [ + $html2("div", { class: "drawer-content" }, [ typeof content === "function" ? content() : content ]), - $html("div", { class: "drawer-side" }, [ - $html("label", { + $html2("div", { class: "drawer-side" }, [ + $html2("label", { for: drawerId, class: "drawer-overlay", onclick: () => { @@ -1099,7 +1099,7 @@ open(false); } }), - $html("div", { class: "min-h-full bg-base-200 w-80" }, [ + $html2("div", { class: "min-h-full bg-base-200 w-80" }, [ typeof side === "function" ? side() : side ]) ]) @@ -1111,51 +1111,64 @@ __export(exports_Dropdown, { Dropdown: () => Dropdown }); - var Dropdown = (props, children) => { + var currentOpen = null; + if (typeof window !== "undefined" && !window.__dropdownHandlerRegistered) { + window.addEventListener("click", (e) => { + if (currentOpen && !currentOpen.contains(e.target)) { + currentOpen.open = false; + currentOpen = null; + } + }); + window.__dropdownHandlerRegistered = true; + } + var Dropdown = (props) => { const { class: className, label, icon, items, ...rest } = props; - const renderContent = () => { - if (items) { - const source = typeof items === "function" ? items : () => items; - return $html("ul", { - tabindex: 0, - class: "dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300" - }, [ - $for(source, (item) => $html("li", {}, [ + return $html("details", { + ...rest, + class: ui("dropdown", className) + }, [ + $html("summary", { + class: "btn m-1 flex items-center gap-2 list-none cursor-pointer", + style: "display: inline-flex;", + onclick: (e) => { + const details = e.currentTarget.closest("details"); + if (currentOpen && currentOpen !== details) { + currentOpen.open = false; + } + setTimeout(() => { + currentOpen = details.open ? details : null; + }, 0); + } + }, [ + () => icon ? typeof icon === "function" ? icon() : icon : null, + () => label ? typeof label === "function" ? label() : label : null + ]), + $html("ul", { + tabindex: "-1", + class: "dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300" + }, [ + () => { + const currentItems = typeof items === "function" ? items() : items || []; + return currentItems.map((item) => $html("li", {}, [ $html("a", { class: item.class || "", onclick: (e) => { if (item.onclick) item.onclick(e); - if (document.activeElement) - document.activeElement.blur(); + const details = e.currentTarget.closest("details"); + if (details) { + details.open = false; + if (currentOpen === details) + currentOpen = null; + } } }, [ item.icon ? $html("span", {}, item.icon) : null, $html("span", {}, item.label) ]) - ])) - ]); - } - return $html("div", { - tabindex: 0, - class: "dropdown-content z-[50] p-2 shadow bg-base-100 rounded-box min-w-max border border-base-300" - }, [ - typeof children === "function" ? children() : children - ]); - }; - return $html("div", { - ...rest, - class: ui("dropdown", className) - }, [ - $html("div", { - tabindex: 0, - role: "button", - class: "btn m-1 flex items-center gap-2" - }, [ - icon ? typeof icon === "function" ? icon() : icon : null, - label ? typeof label === "function" ? label() : label : null - ]), - renderContent() + ])); + } + ]) ]); }; @@ -1166,11 +1179,11 @@ }); var Fab = (props) => { const { class: className, icon, label, actions = [], position = "bottom-6 right-6", ...rest } = props; - return $html("div", { + return $html2("div", { ...rest, class: ui(`fab absolute ${position} flex flex-col-reverse items-end gap-3 z-[100]`, className) }, [ - $html("div", { + $html2("div", { tabindex: 0, role: "button", class: "btn btn-lg btn-circle btn-primary shadow-2xl" @@ -1178,9 +1191,9 @@ icon ? getIcon(icon) : null, !icon && label ? label : null ]), - ...val(actions).map((act) => $html("div", { class: "flex items-center gap-3 transition-all duration-300" }, [ - act.label ? $html("span", { class: "badge badge-ghost shadow-sm whitespace-nowrap" }, act.label) : null, - $html("button", { + ...val(actions).map((act) => $html2("div", { class: "flex items-center gap-3 transition-all duration-300" }, [ + act.label ? $html2("span", { class: "badge badge-ghost shadow-sm whitespace-nowrap" }, act.label) : null, + $html2("button", { type: "button", class: `btn btn-circle shadow-lg ${act.class || ""}`, onclick: (e) => { @@ -1199,13 +1212,13 @@ }); var Fieldset = (props, children) => { const { class: className, legend, ...rest } = props; - return $html("fieldset", { + return $html2("fieldset", { ...rest, class: ui("fieldset bg-base-200 border border-base-300 p-4 rounded-lg", className) }, [ () => { const legendText = val(legend); - return legendText ? $html("legend", { class: "fieldset-legend font-bold" }, [legendText]) : null; + return legendText ? $html2("legend", { class: "fieldset-legend font-bold" }, [legendText]) : null; }, children ]); @@ -1238,12 +1251,12 @@ selectedFiles(updated); onSelect?.(updated); }; - return $html("fieldset", { ...rest, class: ui("fieldset w-full p-0", className) }, [ - $html("div", { + return $html2("fieldset", { ...rest, class: ui("fieldset w-full p-0", className) }, [ + $html2("div", { class: () => `w-full ${tooltip ? "tooltip tooltip-top before:z-50 after:z-50" : ""}`, "data-tip": tooltip }, [ - $html("label", { + $html2("label", { class: () => ` relative flex items-center justify-between w-full h-12 px-4 border-2 border-dashed rounded-lg cursor-pointer @@ -1261,12 +1274,12 @@ handleFiles(e.dataTransfer.files); } }, [ - $html("div", { class: "flex items-center gap-3 w-full" }, [ + $html2("div", { class: "flex items-center gap-3 w-full" }, [ getIcon("icon-[lucide--upload]"), - $html("span", { class: "text-sm opacity-70 truncate grow text-left" }, "Arrastra o selecciona archivos..."), - $html("span", { class: "text-[10px] opacity-40 shrink-0" }, `Máx ${max}MB`) + $html2("span", { class: "text-sm opacity-70 truncate grow text-left" }, "Arrastra o selecciona archivos..."), + $html2("span", { class: "text-[10px] opacity-40 shrink-0" }, `Máx ${max}MB`) ]), - $html("input", { + $html2("input", { type: "file", multiple: true, accept, @@ -1275,15 +1288,15 @@ }) ]) ]), - () => error() ? $html("span", { class: "text-[10px] text-error mt-1 px-1 font-medium" }, error()) : null, - $if(() => selectedFiles().length > 0, () => $html("ul", { class: "mt-2 space-y-1" }, [ - $for(selectedFiles, (file, index) => $html("li", { class: "flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300" }, [ - $html("div", { class: "flex items-center gap-2 truncate" }, [ - $html("span", { class: "opacity-50" }, "\uD83D\uDCC4"), - $html("span", { class: "truncate font-medium max-w-[200px]" }, file.name), - $html("span", { class: "text-[9px] opacity-40" }, `(${(file.size / 1024).toFixed(0)} KB)`) + () => error() ? $html2("span", { class: "text-[10px] text-error mt-1 px-1 font-medium" }, error()) : null, + $if(() => selectedFiles().length > 0, () => $html2("ul", { class: "mt-2 space-y-1" }, [ + $for(selectedFiles, (file, index) => $html2("li", { class: "flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300" }, [ + $html2("div", { class: "flex items-center gap-2 truncate" }, [ + $html2("span", { class: "opacity-50" }, "\uD83D\uDCC4"), + $html2("span", { class: "truncate font-medium max-w-[200px]" }, file.name), + $html2("span", { class: "text-[9px] opacity-40" }, `(${(file.size / 1024).toFixed(0)} KB)`) ]), - $html("button", { + $html2("button", { type: "button", class: "btn btn-ghost btn-xs btn-circle", onclick: (e) => { @@ -1302,9 +1315,9 @@ __export(exports_Indicator, { Indicator: () => Indicator }); - var Indicator = (props, children) => $html("div", { class: "indicator" }, () => [ + var Indicator = (props, children) => $html2("div", { class: "indicator" }, () => [ children, - props.value && $html("span", { class: ui("indicator-item badge", props.class) }, props.value) + props.value && $html2("span", { class: ui("indicator-item badge", props.class) }, props.value) ].filter(Boolean)); // src/components/Label.js @@ -1315,16 +1328,16 @@ var Label = (props) => { const { children, value, floating = false, error, required, class: className, ...rest } = props; if (floating) { - return $html("label", { class: ui("floating-label w-full", className), ...rest }, () => [ - value ? $html("span", {}, value) : null, + return $html2("label", { class: ui("floating-label w-full", className), ...rest }, () => [ + value ? $html2("span", {}, value) : null, children, - error ? $html("span", { class: "text-error text-xs" }, val(error)) : null + error ? $html2("span", { class: "text-error text-xs" }, val(error)) : null ]); } - return $html("label", { class: ui("input w-full", className), ...rest }, () => [ - value ? $html("span", { class: "label" }, value) : null, + return $html2("label", { class: ui("input w-full", className), ...rest }, () => [ + value ? $html2("span", { class: "label" }, value) : null, children, - error ? $html("span", { class: "text-error text-xs" }, val(error)) : null + error ? $html2("span", { class: "text-error text-xs" }, val(error)) : null ]); }; @@ -1335,11 +1348,11 @@ }); var List = (props) => { const { class: className, items, header, render, keyFn = (item, index) => index, ...rest } = props; - const listItems = $for(items, (item, index) => $html("li", { class: "list-row" }, [render(item, index)]), keyFn); - return $html("ul", { + const listItems = $for(items, (item, index) => $html2("li", { class: "list-row" }, [render(item, index)]), keyFn); + return $html2("ul", { ...rest, class: ui("list bg-base-100 rounded-box shadow-md", className) - }, header ? [$if(header, () => $html("li", { class: "p-4 pb-2 text-xs opacity-60" }, [val(header)])), listItems] : listItems); + }, header ? [$if(header, () => $html2("li", { class: "p-4 pb-2 text-xs opacity-60" }, [val(header)])), listItems] : listItems); }; // src/components/Loading.js @@ -1348,10 +1361,10 @@ Loading: () => Loading }); var Loading = (props) => { - return $if(props.$show, () => $html("div", { + return $if(props.$show, () => $html2("div", { class: "fixed inset-0 z-[100] flex items-center justify-center backdrop-blur-sm bg-base-100/30" }, [ - $html("span", { class: "loading loading-spinner loading-lg text-primary" }) + $html2("span", { class: "loading loading-spinner loading-lg text-primary" }) ])); }; @@ -1362,16 +1375,16 @@ }); var Menu = (props) => { const { class: className, items, ...rest } = props; - const renderItems = (items2) => $for(() => items2 || [], (it) => $html("li", {}, [ - it.children ? $html("details", { open: it.open }, [ - $html("summary", {}, [it.icon && $html("span", { class: "mr-2" }, it.icon), it.label]), - $html("ul", {}, renderItems(it.children)) - ]) : $html("a", { class: () => val(it.active) ? "active" : "", onclick: it.onclick }, [ - it.icon && $html("span", { class: "mr-2" }, it.icon), + const renderItems = (items2) => $for(() => items2 || [], (it) => $html2("li", {}, [ + it.children ? $html2("details", { open: it.open }, [ + $html2("summary", {}, [it.icon && $html2("span", { class: "mr-2" }, it.icon), it.label]), + $html2("ul", {}, renderItems(it.children)) + ]) : $html2("a", { class: () => val(it.active) ? "active" : "", onclick: it.onclick }, [ + it.icon && $html2("span", { class: "mr-2" }, it.icon), it.label ]) ]), (it, i) => it.label || i); - return $html("ul", { ...rest, class: ui("menu bg-base-200 rounded-box", className) }, renderItems(items)); + return $html2("ul", { ...rest, class: ui("menu bg-base-200 rounded-box", className) }, renderItems(items)); }; // src/components/Modal.js @@ -1400,28 +1413,28 @@ if (typeof open === "function") open(false); }; - return $html("dialog", { + return $html2("dialog", { ...rest, ref: dialogRef, class: ui("modal", className), oncancel: () => typeof open === "function" && open(false) }, [ - $html("div", { class: "modal-box" }, [ - title ? $html("h3", { class: "text-lg font-bold mb-4" }, title) : null, - $html("div", { class: "py-2" }, [ + $html2("div", { class: "modal-box" }, [ + title ? $html2("h3", { class: "text-lg font-bold mb-4" }, title) : null, + $html2("div", { class: "py-2" }, [ typeof children === "function" ? children() : children ]), - $html("div", { class: "modal-action flex gap-2" }, [ + $html2("div", { class: "modal-action flex gap-2" }, [ ...(Array.isArray(buttons) ? buttons : [buttons]).filter(Boolean), Button({ type: "button", onclick: close }, tt("close")()) ]) ]), - $html("form", { + $html2("form", { method: "dialog", class: "modal-backdrop", onsubmit: close }, [ - $html("button", {}, "close") + $html2("button", {}, "close") ]) ]); }; @@ -1433,7 +1446,7 @@ }); var Navbar = (props, children) => { const { class: className, ...rest } = props; - return $html("div", { ...rest, class: ui("navbar bg-base-100 shadow-sm px-4", className) }, children); + return $html2("div", { ...rest, class: ui("navbar bg-base-100 shadow-sm px-4", className) }, children); }; // src/components/Radio.js @@ -1443,7 +1456,7 @@ }); var Radio = (props) => { const { class: className, label, tooltip, value, inputValue, name, ...rest } = props; - const radioEl = $html("input", { + const radioEl = $html2("input", { ...rest, type: "radio", name, @@ -1456,11 +1469,11 @@ }); if (!label && !tooltip) return radioEl; - const layout = $html("label", { class: "label cursor-pointer justify-start gap-3" }, [ + const layout = $html2("label", { class: "label cursor-pointer justify-start gap-3" }, [ radioEl, - label ? $html("span", { class: "label-text" }, label) : null + label ? $html2("span", { class: "label-text" }, label) : null ]); - return tooltip ? $html("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout; + return tooltip ? $html2("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout; }; // src/components/Range.js @@ -1470,7 +1483,7 @@ }); var Range = (props) => { const { class: className, label, tooltip, value, ...rest } = props; - const rangeEl = $html("input", { + const rangeEl = $html2("input", { ...rest, type: "range", class: ui("range", className), @@ -1479,11 +1492,11 @@ }); if (!label && !tooltip) return rangeEl; - const layout = $html("div", { class: "flex flex-col gap-2" }, [ - label ? $html("span", { class: "label-text" }, label) : null, + const layout = $html2("div", { class: "flex flex-col gap-2" }, [ + label ? $html2("span", { class: "label-text" }, label) : null, rangeEl ]); - return tooltip ? $html("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout; + return tooltip ? $html2("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout; }; // src/components/Rating.js @@ -1494,12 +1507,12 @@ var Rating = (props) => { const { class: className, value, count = 5, mask = "mask-star", readonly = false, onchange, ...rest } = props; const ratingGroup = `rating-${Math.random().toString(36).slice(2, 7)}`; - return $html("div", { + return $html2("div", { ...rest, class: () => ui(`rating ${val(readonly) ? "pointer-events-none" : ""}`, className) }, Array.from({ length: val(count) }, (_, i) => { const starValue = i + 1; - return $html("input", { + return $html2("input", { type: "radio", name: ratingGroup, class: `mask ${mask}`, @@ -1524,18 +1537,18 @@ }); var Select = (props) => { const { class: className, label, items, value, ...rest } = props; - const selectEl = $html("select", { + const selectEl = $html2("select", { ...rest, class: ui("select select-bordered w-full", className), value - }, $for(() => val(items) || [], (opt) => $html("option", { + }, $for(() => val(items) || [], (opt) => $html2("option", { value: opt.value, $selected: () => String(val(value)) === String(opt.value) }, opt.label), (opt) => opt.value)); if (!label) return selectEl; - return $html("label", { class: "fieldset-label flex flex-col gap-1" }, [ - $html("span", {}, label), + return $html2("label", { class: "fieldset-label flex flex-col gap-1" }, [ + $html2("span", {}, label), selectEl ]); }; @@ -1547,7 +1560,7 @@ }); var Stack = (props, children) => { const { class: className, ...rest } = props; - return $html("div", { ...rest, class: ui("stack", className) }, children); + return $html2("div", { ...rest, class: ui("stack", className) }, children); }; // src/components/Stat.js @@ -1557,11 +1570,11 @@ }); var Stat = (props) => { const { class: className, icon, label, value, desc, ...rest } = props; - return $html("div", { ...rest, class: ui("stat", className) }, [ - icon && $html("div", { class: "stat-figure text-secondary" }, icon), - label && $html("div", { class: "stat-title" }, label), - $html("div", { class: "stat-value" }, () => val(value) ?? value), - desc && $html("div", { class: "stat-desc" }, desc) + return $html2("div", { ...rest, class: ui("stat", className) }, [ + icon && $html2("div", { class: "stat-figure text-secondary" }, icon), + label && $html2("div", { class: "stat-title" }, label), + $html2("div", { class: "stat-value" }, () => val(value) ?? value), + desc && $html2("div", { class: "stat-desc" }, desc) ]); }; @@ -1572,13 +1585,13 @@ }); var Swap = (props) => { const { class: className, value, on, off, ...rest } = props; - return $html("label", { ...rest, class: ui("swap", className) }, [ - $html("input", { + return $html2("label", { ...rest, class: ui("swap", className) }, [ + $html2("input", { type: "checkbox", checked: val(value) }), - $html("div", { class: "swap-on" }, on), - $html("div", { class: "swap-off" }, off) + $html2("div", { class: "swap-on" }, on), + $html2("div", { class: "swap-off" }, off) ]); }; @@ -1594,31 +1607,31 @@ const pinRowsClass = val(pinRows) ? "table-pin-rows" : ""; return ui("table", className, zebraClass, pinRowsClass); }; - return $html("div", { class: "overflow-x-auto w-full bg-base-100 rounded-box border border-base-300" }, [ - $html("table", { ...rest, class: tableClass }, [ - $html("thead", {}, [ - $html("tr", {}, columns.map((col) => $html("th", { class: col.class || "" }, col.label))) + return $html2("div", { class: "overflow-x-auto w-full bg-base-100 rounded-box border border-base-300" }, [ + $html2("table", { ...rest, class: tableClass }, [ + $html2("thead", {}, [ + $html2("tr", {}, columns.map((col) => $html2("th", { class: col.class || "" }, col.label))) ]), - $html("tbody", {}, [ + $html2("tbody", {}, [ $for(items, (item, index) => { - return $html("tr", { class: "hover" }, columns.map((col) => { + return $html2("tr", { class: "hover" }, columns.map((col) => { const cellContent = () => { if (col.render) return col.render(item, index); const value = item[col.key]; return val(value); }; - return $html("td", { class: col.class || "" }, [cellContent]); + return $html2("td", { class: col.class || "" }, [cellContent]); })); }, keyFn || ((item, idx) => item.id || idx)), - $if(() => val(items).length === 0, () => $html("tr", {}, [ - $html("td", { colspan: columns.length, class: "text-center p-10 opacity-50" }, [ + $if(() => val(items).length === 0, () => $html2("tr", {}, [ + $html2("td", { colspan: columns.length, class: "text-center p-10 opacity-50" }, [ val(empty) ]) ])) ]), - $if(() => columns.some((c) => c.footer), () => $html("tfoot", {}, [ - $html("tr", {}, columns.map((col) => $html("th", {}, col.footer || ""))) + $if(() => columns.some((c) => c.footer), () => $html2("tfoot", {}, [ + $html2("tr", {}, columns.map((col) => $html2("th", {}, col.footer || ""))) ])) ]) ]); @@ -1640,13 +1653,13 @@ } onClick?.(e); }; - return $html("div", { ...rest, class: "flex flex-col gap-4 w-full" }, [ - $html("div", { + return $html2("div", { ...rest, class: "flex flex-col gap-4 w-full" }, [ + $html2("div", { role: "tablist", class: ui("tabs tabs-box", className) }, $for(itemsSignal, (it, idx) => { const isActive = val(it.active) ?? currentActive() === idx; - return $html("a", { + return $html2("a", { role: "tab", class: () => ui("tab", isActive ? "tab-active" : "", val(it.disabled) ? "tab-disabled" : ""), onclick: !val(it.disabled) ? handleTabClick(idx, it.onclick) : undefined @@ -1657,7 +1670,7 @@ if (!activeItem) return null; const content = val(activeItem.content); - return $html("div", { class: "p-4" }, [ + return $html2("div", { class: "p-4" }, [ typeof content === "function" ? content() : content ]); } @@ -1677,7 +1690,7 @@ warning: "icon-[lucide--alert-triangle]", error: "icon-[lucide--alert-circle]" }; - return $html("ul", { + return $html2("ul", { ...rest, class: () => ui(`timeline ${val(vertical) ? "timeline-vertical" : "timeline-horizontal"} ${val(compact) ? "timeline-compact" : ""}`, className) }, [ @@ -1686,14 +1699,14 @@ const isLast = i === val(items).length - 1; const itemType = item.type || "success"; const renderSlot = (content) => typeof content === "function" ? content() : content; - return $html("li", { class: "flex-1" }, [ - !isFirst ? $html("hr", { class: item.completed ? "bg-primary" : "" }) : null, - $html("div", { class: "timeline-start" }, [renderSlot(item.title)]), - $html("div", { class: "timeline-middle" }, [ + return $html2("li", { class: "flex-1" }, [ + !isFirst ? $html2("hr", { class: item.completed ? "bg-primary" : "" }) : null, + $html2("div", { class: "timeline-start" }, [renderSlot(item.title)]), + $html2("div", { class: "timeline-middle" }, [ item.icon ? getIcon(item.icon) : getIcon(iconMap[itemType] || iconMap.success) ]), - $html("div", { class: "timeline-end timeline-box shadow-sm" }, [renderSlot(item.detail)]), - !isLast ? $html("hr", { class: item.completed ? "bg-primary" : "" }) : null + $html2("div", { class: "timeline-end timeline-box shadow-sm" }, [renderSlot(item.detail)]), + !isLast ? $html2("hr", { class: item.completed ? "bg-primary" : "" }) : null ]); }, (item, i) => item.id || i) ]); @@ -1707,13 +1720,13 @@ var Toast = (message, type = "alert-success", duration = 3500) => { let container = document.getElementById("sigpro-toast-container"); if (!container) { - container = $html("div", { + container = $html2("div", { id: "sigpro-toast-container", class: "fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none" }); document.body.appendChild(container); } - const toastHost = $html("div", { style: "display: contents" }); + const toastHost = $html2("div", { style: "display: contents" }); container.appendChild(toastHost); let timeoutId; const close = () => { @@ -1734,10 +1747,10 @@ }; const ToastComponent = () => { const closeIcon = getIcon("icon-[lucide--x]"); - const el = $html("div", { + const el = $html2("div", { class: `alert alert-soft ${type} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto` }, [ - $html("span", {}, [typeof message === "function" ? message() : message]), + $html2("span", {}, [typeof message === "function" ? message() : message]), Button({ class: "btn-xs btn-circle btn-ghost", onclick: close @@ -1758,7 +1771,7 @@ __export(exports_Tooltip, { Tooltip: () => Tooltip }); - var Tooltip = (props, children) => $html("div", { + var Tooltip = (props, children) => $html2("div", { ...props, class: () => ui("tooltip", props.ui, props.class), "data-tip": props.tip diff --git a/dist/sigpro-ui.min.js b/dist/sigpro-ui.min.js index 45177bd..6514503 100644 --- a/dist/sigpro-ui.min.js +++ b/dist/sigpro-ui.min.js @@ -1,7 +1,7 @@ -(()=>{var{defineProperty:t,getOwnPropertyNames:VJ,getOwnPropertyDescriptor:HJ}=Object,EJ=Object.prototype.hasOwnProperty;var CJ=new WeakMap,jJ=(W)=>{var Z=CJ.get(W),X;if(Z)return Z;if(Z=t({},"__esModule",{value:!0}),W&&typeof W==="object"||typeof W==="function")VJ(W).map((J)=>!EJ.call(Z,J)&&t(Z,J,{get:()=>W[J],enumerable:!(X=HJ(W,J))||X.enumerable}));return CJ.set(W,Z),Z};var z=(W,Z)=>{for(var X in Z)t(W,X,{get:Z[X],enumerable:!0,configurable:!0,set:(J)=>Z[X]=()=>J})};var kJ={};z(kJ,{val:()=>P,ui:()=>A,tt:()=>x,getIcon:()=>V,Tooltip:()=>BJ,Toast:()=>QJ,Timeline:()=>YJ,Tabs:()=>XJ,Table:()=>WJ,Swap:()=>JJ,Stat:()=>eM,Stack:()=>nM,Select:()=>lM,Rating:()=>rM,Range:()=>iM,Radio:()=>pM,Navbar:()=>mM,Modal:()=>hM,Menu:()=>bM,Loading:()=>vM,List:()=>fM,Label:()=>kM,Input:()=>b,Indicator:()=>IM,Fileinput:()=>OM,Fieldset:()=>jM,Fab:()=>HM,Dropdown:()=>UM,Drawer:()=>FM,Datepicker:()=>RM,Colorpicker:()=>TM,Checkbox:()=>_M,Button:()=>g,Badge:()=>qM,Autocomplete:()=>LM,Alert:()=>XM,Accordion:()=>WM});var N=null,f=null,m=new Set,d=!1,e=new WeakMap,SJ=()=>{if(d)return;d=!0;while(m.size>0){let W=Array.from(m).sort((Z,X)=>(Z.depth||0)-(X.depth||0));m.clear();for(let Z of W)if(!Z._deleted)Z()}d=!1},RJ=(W)=>{if(N&&!N._deleted)W.add(N),N._deps.add(W)},MM=(W)=>{for(let Z of W){if(Z===N||Z._deleted)continue;if(Z._isComputed){if(Z.markDirty(),Z._subs)MM(Z._subs)}else m.add(Z)}if(!d)queueMicrotask(SJ)},JM=(W)=>{if(W._cleanups)W._cleanups.forEach((Z)=>Z()),W._cleanups.clear();W.childNodes?.forEach(JM)},p=(W)=>{let Z=new Set,X=f,J=document.createElement("div");J.style.display="contents",f={cleanups:Z};try{let Y=W({onCleanup:(K)=>Z.add(K)}),L=(K)=>{if(!K)return;if(K._isRuntime)Z.add(K.destroy),J.appendChild(K.container);else if(Array.isArray(K))K.forEach(L);else J.appendChild(K instanceof Node?K:document.createTextNode(String(K)))};L(Y)}finally{f=X}return{_isRuntime:!0,container:J,destroy:()=>{Z.forEach((Y)=>Y()),JM(J),J.remove()}}},U=(W,Z=null)=>{if(typeof W==="function"){let Y=new Set,L,K=!0,G=()=>{if(G._deleted)return;G._deps.forEach((Q)=>Q.delete(G)),G._deps.clear();let q=N;N=G;try{let Q=W();if(!Object.is(L,Q)||K)L=Q,K=!1,MM(Y)}finally{N=q}};if(G._deps=new Set,G._isComputed=!0,G._subs=Y,G._deleted=!1,G.markDirty=()=>K=!0,G.stop=()=>{G._deleted=!0,G._deps.forEach((q)=>q.delete(G)),Y.clear()},f)f.cleanups.add(G.stop);return()=>{if(K)G();return RJ(Y),L}}let X=W;if(Z)try{let Y=localStorage.getItem(Z);if(Y!==null)X=JSON.parse(Y)}catch(Y){console.warn("SigPro: LocalStorage locked",Y)}let J=new Set;return(...Y)=>{if(Y.length){let L=typeof Y[0]==="function"?Y[0](X):Y[0];if(!Object.is(X,L)){if(X=L,Z)localStorage.setItem(Z,JSON.stringify(X));MM(J)}}return RJ(J),X}},y=(W,Z)=>{let X=Array.isArray(W),J=X?Z:W,Y=X?W:null;if(typeof J!=="function")return()=>{};let L=f,K=()=>{if(K._deleted)return;K._deps.forEach((Q)=>Q.delete(K)),K._deps.clear(),K._cleanups.forEach((Q)=>Q()),K._cleanups.clear();let G=N,q=f;N=K,f={cleanups:K._cleanups},K.depth=G?G.depth+1:0;try{if(X)N=null,J(),N=K,Y.forEach((Q)=>typeof Q==="function"&&Q());else J()}finally{N=G,f=q}};if(K._deps=new Set,K._cleanups=new Set,K._deleted=!1,K.stop=()=>{if(K._deleted)return;if(K._deleted=!0,m.delete(K),K._deps.forEach((G)=>G.delete(K)),K._cleanups.forEach((G)=>G()),L)L.cleanups.delete(K.stop)},L)L.cleanups.add(K.stop);return K(),K.stop},M=(W,Z={},X=[])=>{if(Z instanceof Node||Array.isArray(Z)||typeof Z!=="object")X=Z,Z={};let J=document.createElement(W),Y=(K,G)=>(K==="src"||K==="href")&&String(G).toLowerCase().includes("javascript:")?"#":G;J._cleanups=new Set;for(let[K,G]of Object.entries(Z)){if(K==="ref"){typeof G==="function"?G(J):G.current=J;continue}let q=typeof G==="function";if(["INPUT","TEXTAREA","SELECT"].includes(J.tagName)&&(K==="value"||K==="checked")&&q){J._cleanups.add(y(()=>{let C=G();if(J[K]!==C)J[K]=C}));let _=K==="checked"?"change":"input",D=(C)=>G(C.target[K]);J.addEventListener(_,D),J._cleanups.add(()=>J.removeEventListener(_,D))}else if(K.startsWith("on")){let _=K.slice(2).toLowerCase().split(".")[0],D=(C)=>G(C);J.addEventListener(_,D),J._cleanups.add(()=>J.removeEventListener(_,D))}else if(q)J._cleanups.add(y(()=>{let _=Y(K,G());if(K==="class")J.className=_||"";else _==null?J.removeAttribute(K):J.setAttribute(K,_)}));else J.setAttribute(K,Y(K,G))}let L=(K)=>{if(Array.isArray(K))return K.forEach(L);if(typeof K==="function"){let G=document.createTextNode("");J.appendChild(G);let q=[];J._cleanups.add(y(()=>{let Q=K(),B=(Array.isArray(Q)?Q:[Q]).map((_)=>_?._isRuntime?_.container:_ instanceof Node?_:document.createTextNode(_??""));q.forEach((_)=>{JM(_),_.remove()}),B.forEach((_)=>G.parentNode?.insertBefore(_,G)),q=B}))}else J.appendChild(K instanceof Node?K:document.createTextNode(K??""))};return L(X),J},j=(W,Z,X=null)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=null,K=null;return y(()=>{let G=!!(typeof W==="function"?W():W);if(G!==K){if(K=G,L)L.destroy();let q=G?Z:X;if(q)L=p(()=>typeof q==="function"?q():q),Y.insertBefore(L.container,J)}}),Y};j.not=(W,Z,X)=>j(()=>!(typeof W==="function"?W():W),Z,X);var E=(W,Z,X)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=new Map;return y(()=>{let K=(typeof W==="function"?W():W)||[],G=new Map,q=[];for(let B=0;BZ(_,B));else L.delete(D);G.set(D,C),q.push(D)}L.forEach((B)=>{B.destroy(),B.container.remove()});let Q=J;for(let B=q.length-1;B>=0;B--){let _=G.get(q[B]);if(_.container.nextSibling!==Q)Y.insertBefore(_.container,Q);Q=_.container}L=G}),Y},$=(W)=>{let Z=U(window.location.hash.replace(/^#/,"")||"/");window.addEventListener("hashchange",()=>Z(window.location.hash.replace(/^#/,"")||"/"));let X=M("div",{class:"router-outlet"}),J=null;return y([Z],async()=>{let Y=Z(),L=W.find((K)=>{let G=K.path.split("/").filter(Boolean),q=Y.split("/").filter(Boolean);return G.length===q.length&&G.every((Q,B)=>Q.startsWith(":")||Q===q[B])})||W.find((K)=>K.path==="*");if(L){let K=L.component;if(typeof K==="function"&&K.toString().includes("import"))K=(await K()).default||await K();let G={};if(L.path.split("/").filter(Boolean).forEach((q,Q)=>{if(q.startsWith(":"))G[q.slice(1)]=Y.split("/").filter(Boolean)[Q]}),J)J.destroy();if($.params)$.params(G);J=p(()=>{try{return typeof K==="function"?K(G):K}catch(q){return M("div",{class:"p-4 text-error"},"Error loading view")}}),X.appendChild(J.container)}}),X};$.params=U({});$.to=(W)=>window.location.hash=W.replace(/^#?\/?/,"#/");$.back=()=>window.history.back();$.path=()=>window.location.hash.replace(/^#/,"")||"/";var KM=(W,Z)=>{let X=typeof Z==="string"?document.querySelector(Z):Z;if(!X)return;if(e.has(X))e.get(X).destroy();let J=p(typeof W==="function"?W:()=>W);return X.replaceChildren(J.container),e.set(X,J),J},OJ={$:U,$watch:y,$html:M,$if:j,$for:E,$router:$,$mount:KM};if(typeof window<"u")((Z)=>{Object.keys(Z).forEach((J)=>{window[J]=Z[J]}),"div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer address ul ol li dl dt dd a em strong small i b u mark time sub sup pre code blockquote details summary dialog form label input textarea select button option fieldset legend table thead tbody tfoot tr th td caption img video audio canvas svg iframe picture source progress meter".split(/\s+/).forEach((J)=>{let Y=J.charAt(0).toUpperCase()+J.slice(1);if(!(Y in window))window[Y]=(L,K)=>M(J,L,K)}),window.SigPro=Object.freeze(Z)})(OJ);var i={};z(i,{default:()=>xJ,Tooltip:()=>BJ,Toast:()=>QJ,Timeline:()=>YJ,Tabs:()=>XJ,Table:()=>WJ,Swap:()=>JJ,Stat:()=>eM,Stack:()=>nM,Select:()=>lM,Rating:()=>rM,Range:()=>iM,Radio:()=>pM,Navbar:()=>mM,Modal:()=>hM,Menu:()=>bM,Loading:()=>vM,List:()=>fM,Label:()=>kM,Input:()=>b,Indicator:()=>IM,Fileinput:()=>OM,Fieldset:()=>jM,Fab:()=>HM,Dropdown:()=>UM,Drawer:()=>FM,Datepicker:()=>RM,Colorpicker:()=>TM,Checkbox:()=>_M,Button:()=>g,Badge:()=>qM,Autocomplete:()=>LM,Alert:()=>XM,Accordion:()=>WM});var ZM={};z(ZM,{Accordion:()=>WM});var c={};z(c,{val:()=>P,ui:()=>A,getIcon:()=>V});var P=(W)=>typeof W==="function"?W():W,A=(W,Z)=>typeof Z==="function"?()=>`${W} ${Z()||""}`.trim():`${W} ${Z||""}`.trim(),V=(W)=>{if(!W)return null;if(typeof W==="function")return M("span",{class:"mr-1"},W());if(typeof W==="object")return M("span",{class:"mr-1"},W);if(typeof W==="string"){let Z=W.trim().split(/\s+/),X=Z[Z.length-1]==="right",J=X?Z.slice(0,-1).join(" "):W,Y=X?"ml-1":"mr-1";if(J&&!J.startsWith("icon-[")&&!J.includes("--"))return M("span",{class:Y},J);return M("span",{class:`${J} ${Y}`.trim()})}return null};var WM=(W,Z)=>{let{class:X,title:J,name:Y,open:L,...K}=W;return M("div",{...K,class:A("collapse collapse-arrow bg-base-200 mb-2",X)},[M("input",{type:Y?"radio":"checkbox",name:Y,checked:P(L)}),M("div",{class:"collapse-title text-xl font-medium"},J),M("div",{class:"collapse-content"},Z)])};var GM={};z(GM,{Alert:()=>XM});var XM=(W,Z)=>{let{class:X,actions:J,type:Y="info",soft:L=!0,...K}=W,G={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},B=[`alert-${Y}`,L?"alert-soft":"",X].filter(Boolean).join(" "),_=Z||W.message;return M("div",{...K,role:"alert",class:A("alert",B)},()=>[V(G[Y]),M("div",{class:"flex-1"},[M("span",{},[typeof _==="function"?_():_])]),J?M("div",{class:"flex-none"},[typeof J==="function"?J():J]):null].filter(Boolean))};var QM={};z(QM,{Autocomplete:()=>LM});var NJ={es:{close:"Cerrar",confirm:"Confirmar",cancel:"Cancelar",search:"Buscar...",loading:"Cargando...",nodata:"Sin datos"},en:{close:"Close",confirm:"Confirm",cancel:"Cancel",search:"Search...",loading:"Loading...",nodata:"No data"}},IJ=U("es");var x=(W)=>()=>NJ[IJ()][W]||W;var YM={};z(YM,{Input:()=>b});var b=(W)=>{let{class:Z,value:X,type:J="text",icon:Y,oninput:L,placeholder:K,disabled:G,size:q,...Q}=W,B=J==="password",_=U(!1),D={text:"icon-[lucide--text]",password:"icon-[lucide--lock]",date:"icon-[lucide--calendar]",number:"icon-[lucide--hash]",email:"icon-[lucide--mail]",search:"icon-[lucide--search]",tel:"icon-[lucide--phone]",url:"icon-[lucide--link]"},C=Y?V(Y):D[J]?V(D[J]):null,R=()=>V(_()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),H=C?"pl-10":"",O=B?"pr-10":"",o=()=>{if(Z?.includes("input-xs"))return"btn-xs";if(Z?.includes("input-sm"))return"btn-sm";if(Z?.includes("input-lg"))return"btn-lg";return"btn-md"};return M("div",{class:"relative w-full"},()=>[M("input",{...Q,type:()=>B?_()?"text":"password":J,placeholder:K||" ",class:A("input w-full",`${H} ${O} ${Z||""}`.trim()),value:X,oninput:(h)=>L?.(h),disabled:()=>P(G)}),C?M("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},C):null,B?M("button",{type:"button",class:A("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",o()),onclick:(h)=>{h.preventDefault(),_(!_())}},()=>R()):null])};var LM=(W)=>{let{class:Z,items:X=[],value:J,onSelect:Y,label:L,placeholder:K,...G}=W,q=U(P(J)||""),Q=U(!1),B=U(-1),_=U(()=>{let R=q().toLowerCase(),H=P(X)||[];return R?H.filter((O)=>(typeof O==="string"?O:O.label).toLowerCase().includes(R)):H}),D=(R)=>{let H=typeof R==="string"?R:R.value,O=typeof R==="string"?R:R.label;if(q(O),typeof J==="function")J(H);Y?.(R),Q(!1),B(-1)},C=(R)=>{let H=_();if(R.key==="ArrowDown")R.preventDefault(),Q(!0),B(Math.min(B()+1,H.length-1));else if(R.key==="ArrowUp")R.preventDefault(),B(Math.max(B()-1,0));else if(R.key==="Enter"&&B()>=0)R.preventDefault(),D(H[B()]);else if(R.key==="Escape")Q(!1)};return M("div",{class:"relative w-full"},[b({label:L,class:Z,placeholder:K||x("search")(),value:q,onfocus:()=>Q(!0),onblur:()=>setTimeout(()=>Q(!1),150),onkeydown:C,oninput:(R)=>{let H=R.target.value;if(q(H),typeof J==="function")J(H);Q(!0),B(-1)},...G}),M("ul",{class:"absolute left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50",style:()=>Q()&&_().length?"display:block":"display:none"},[E(_,(R,H)=>M("li",{},[M("a",{class:()=>`block w-full ${B()===H?"active bg-primary text-primary-content":""}`,onclick:()=>D(R),onmouseenter:()=>B(H)},typeof R==="string"?R:R.label)]),(R,H)=>(typeof R==="string"?R:R.value)+H),()=>_().length?null:M("li",{class:"p-2 text-center opacity-50"},x("nodata")())])])};var BM={};z(BM,{Badge:()=>qM});var qM=(W,Z)=>{let{class:X,...J}=W;return M("span",{...J,class:A("badge",X)},Z)};var PM={};z(PM,{Button:()=>g});var g=(W,Z)=>{let{class:X,loading:J,icon:Y,...L}=W,K=V(Y);return M("button",{...L,class:A("btn",X),disabled:()=>P(J)||P(W.disabled)},()=>[P(J)&&M("span",{class:"loading loading-spinner"}),K,Z].filter(Boolean))};var AM={};z(AM,{Checkbox:()=>_M});var _M=(W)=>{let{class:Z,value:X,tooltip:J,toggle:Y,label:L,...K}=W,G=M("input",{...K,type:"checkbox",class:()=>A(P(Y)?"toggle":"checkbox",Z),checked:X}),q=M("label",{class:"label cursor-pointer justify-start gap-3"},[G,L?M("span",{class:"label-text"},L):null]);return J?M("div",{class:"tooltip","data-tip":J},q):q};var CM={};z(CM,{Colorpicker:()=>TM});var TM=(W)=>{let{class:Z,value:X,label:J,...Y}=W,L=U(!1),K=["#000","#1A1A1A","#333","#4D4D4D","#666","#808080","#B3B3B3","#FFF","#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626","#ef4444","#f87171","#fca5a5","#431407","#7c2d12","#9a3412","#c2410c","#ea580c","#f97316","#fb923c","#ffedd5","#713f12","#a16207","#ca8a04","#eab308","#facc15","#fde047","#fef08a","#fff9c4","#064e3b","#065f46","#059669","#10b981","#34d399","#4ade80","#84cc16","#d9f99d","#082f49","#075985","#0284c7","#0ea5e9","#38bdf8","#7dd3fc","#22d3ee","#cffafe","#1e1b4b","#312e81","#4338ca","#4f46e5","#6366f1","#818cf8","#a5b4fc","#e0e7ff","#2e1065","#4c1d95","#6d28d9","#7c3aed","#8b5cf6","#a855f7","#d946ef","#fae8ff"],G=()=>P(X)||"#000000";return M("div",{class:A("relative w-fit",Z)},[M("button",{type:"button",class:"btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case",onclick:(q)=>{q.stopPropagation(),L(!L())},...Y},[M("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${G()}`}),J?M("span",{class:"opacity-80"},J):null]),j(L,()=>M("div",{class:"absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none",onclick:(q)=>q.stopPropagation()},[M("div",{class:"grid grid-cols-8 gap-1"},K.map((q)=>M("button",{type:"button",style:`background-color: ${q}`,class:()=>{return`size-6 rounded-sm cursor-pointer transition-all hover:scale-125 hover:z-10 active:scale-95 outline-none border border-black/5 - ${G().toLowerCase()===q.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof X==="function")X(q);L(!1)}})))])),j(L,()=>M("div",{class:"fixed inset-0 z-[100]",onclick:()=>L(!1)}))])};var zM={};z(zM,{Datepicker:()=>RM});var RM=(W)=>{let{class:Z,value:X,range:J,label:Y,placeholder:L,hour:K=!1,...G}=W,q=U(!1),Q=U(new Date),B=U(null),_=U(0),D=U(0),C=()=>P(J)===!0,R=new Date,H=`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}-${String(R.getDate()).padStart(2,"0")}`,O=(T)=>{let F=T.getFullYear(),S=String(T.getMonth()+1).padStart(2,"0"),k=String(T.getDate()).padStart(2,"0");return`${F}-${S}-${k}`},o=(T)=>{let F=O(T),S=P(X);if(C())if(!S?.start||S.start&&S.end){if(typeof X==="function")X({start:F,end:null,...K&&{startHour:_()}})}else{let k=S.start;if(typeof X==="function"){let u=F{let T=P(X);if(!T)return"";if(typeof T==="string"){if(K&&T.includes("T"))return T.replace("T"," ");return T}if(T.start&&T.end){let F=K&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start,S=K&&T.endHour?`${T.end} ${String(T.endHour).padStart(2,"0")}:00`:T.end;return`${F} - ${S}`}if(T.start)return`${K&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start}...`;return""}),_J=(T)=>{let F=Q();Q(new Date(F.getFullYear(),F.getMonth()+T,1))},AJ=(T)=>{let F=Q();Q(new Date(F.getFullYear()+T,F.getMonth(),1))},r=({value:T,onChange:F})=>{return M("div",{class:"flex-1"},[M("div",{class:"flex gap-2 items-center"},[M("input",{type:"range",min:0,max:23,value:T,class:"range range-xs flex-1",oninput:(S)=>{let k=parseInt(S.target.value);F(k)}}),M("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(P(T)).padStart(2,"0")+":00")])])};return M("div",{class:A("relative w-full",Z)},[b({label:Y,placeholder:L||(C()?"Seleccionar rango...":"Seleccionar fecha..."),value:h,readonly:!0,icon:V("icon-[lucide--calendar]"),onclick:(T)=>{T.stopPropagation(),q(!q())},...G}),j(q,()=>M("div",{class:"absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none",onclick:(T)=>T.stopPropagation()},[M("div",{class:"flex justify-between items-center mb-4 gap-1"},[M("div",{class:"flex gap-0.5"},[M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>AJ(-1)},V("icon-[lucide--chevrons-left]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>_J(-1)},V("icon-[lucide--chevron-left]"))]),M("span",{class:"font-bold uppercase flex-1 text-center"},[()=>Q().toLocaleString("es-ES",{month:"short",year:"numeric"})]),M("div",{class:"flex gap-0.5"},[M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>_J(1)},V("icon-[lucide--chevron-right]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>AJ(1)},V("icon-[lucide--chevrons-right]"))])]),M("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>B(null)},[...["L","M","X","J","V","S","D"].map((T)=>M("div",{class:"text-[10px] opacity-40 font-bold text-center"},T)),()=>{let T=Q(),F=T.getFullYear(),S=T.getMonth(),k=new Date(F,S,1).getDay(),u=k===0?6:k-1,FJ=new Date(F,S+1,0).getDate(),a=[];for(let v=0;v{let w=P(X),l=B(),DJ=typeof w==="string"?w.split("T")[0]===I:w?.start===I,UJ=w?.end===I,s=!1;if(C()&&w?.start){let n=w.start;if(!w.end&&l)s=I>n&&I<=l||I=l;else if(w.end)s=I>n&&I{if(C())B(I)},onclick:()=>o(TJ)},[v.toString()]))}return a}]),K?M("div",{class:"mt-3 pt-2 border-t border-base-300"},[C()?M("div",{class:"flex gap-4"},[r({value:_,onChange:(T)=>{_(T);let F=P(X);if(F?.start)X({...F,startHour:T})}}),r({value:D,onChange:(T)=>{D(T);let F=P(X);if(F?.end)X({...F,endHour:T})}})]):r({value:_,onChange:(T)=>{_(T);let F=P(X);if(F&&typeof F==="string"&&F.includes("-"))X(F.split("T")[0]+"T"+String(T).padStart(2,"0")+":00:00")}})]):null])),j(q,()=>M("div",{class:"fixed inset-0 z-[90]",onclick:()=>q(!1)}))])};var DM={};z(DM,{Drawer:()=>FM});var FM=(W,Z)=>{let{class:X,id:J,open:Y,side:L,content:K,...G}=W,q=J||`drawer-${Math.random().toString(36).slice(2,9)}`;return M("div",{...G,class:A("drawer",X)},[M("input",{id:q,type:"checkbox",class:"drawer-toggle",checked:()=>typeof Y==="function"?Y():Y,onchange:(Q)=>{if(typeof Y==="function")Y(Q.target.checked)}}),M("div",{class:"drawer-content"},[typeof K==="function"?K():K]),M("div",{class:"drawer-side"},[M("label",{for:q,class:"drawer-overlay",onclick:()=>{if(typeof Y==="function")Y(!1)}}),M("div",{class:"min-h-full bg-base-200 w-80"},[typeof L==="function"?L():L])])])};var VM={};z(VM,{Dropdown:()=>UM});var UM=(W,Z)=>{let{class:X,label:J,icon:Y,items:L,...K}=W,G=()=>{if(L)return M("ul",{tabindex:0,class:"dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300"},[E(typeof L==="function"?L:()=>L,(Q)=>M("li",{},[M("a",{class:Q.class||"",onclick:(B)=>{if(Q.onclick)Q.onclick(B);if(document.activeElement)document.activeElement.blur()}},[Q.icon?M("span",{},Q.icon):null,M("span",{},Q.label)])]))]);return M("div",{tabindex:0,class:"dropdown-content z-[50] p-2 shadow bg-base-100 rounded-box min-w-max border border-base-300"},[typeof Z==="function"?Z():Z])};return M("div",{...K,class:A("dropdown",X)},[M("div",{tabindex:0,role:"button",class:"btn m-1 flex items-center gap-2"},[Y?typeof Y==="function"?Y():Y:null,J?typeof J==="function"?J():J:null]),G()])};var EM={};z(EM,{Fab:()=>HM});var HM=(W)=>{let{class:Z,icon:X,label:J,actions:Y=[],position:L="bottom-6 right-6",...K}=W;return M("div",{...K,class:A(`fab absolute ${L} flex flex-col-reverse items-end gap-3 z-[100]`,Z)},[M("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[X?V(X):null,!X&&J?J:null]),...P(Y).map((G)=>M("div",{class:"flex items-center gap-3 transition-all duration-300"},[G.label?M("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},G.label):null,M("button",{type:"button",class:`btn btn-circle shadow-lg ${G.class||""}`,onclick:(q)=>{q.stopPropagation(),G.onclick?.(q)}},[G.icon?V(G.icon):G.text||""])]))])};var SM={};z(SM,{Fieldset:()=>jM});var jM=(W,Z)=>{let{class:X,legend:J,...Y}=W;return M("fieldset",{...Y,class:A("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",X)},[()=>{let L=P(J);return L?M("legend",{class:"fieldset-legend font-bold"},[L]):null},Z])};var NM={};z(NM,{Fileinput:()=>OM});var OM=(W)=>{let{class:Z,tooltip:X,max:J=2,accept:Y="*",onSelect:L,...K}=W,G=U([]),q=U(!1),Q=U(null),B=J*1024*1024,_=(C)=>{let R=Array.from(C);if(Q(null),R.find((O)=>O.size>B)){Q(`Máx ${J}MB`);return}G([...G(),...R]),L?.(G())},D=(C)=>{let R=G().filter((H,O)=>O!==C);G(R),L?.(R)};return M("fieldset",{...K,class:A("fieldset w-full p-0",Z)},[M("div",{class:()=>`w-full ${X?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":X},[M("label",{class:()=>` +(()=>{var{defineProperty:e,getOwnPropertyNames:HJ,getOwnPropertyDescriptor:EJ}=Object,jJ=Object.prototype.hasOwnProperty;var RJ=new WeakMap,SJ=(W)=>{var Z=RJ.get(W),X;if(Z)return Z;if(Z=e({},"__esModule",{value:!0}),W&&typeof W==="object"||typeof W==="function")HJ(W).map((J)=>!jJ.call(Z,J)&&e(Z,J,{get:()=>W[J],enumerable:!(X=EJ(W,J))||X.enumerable}));return RJ.set(W,Z),Z};var z=(W,Z)=>{for(var X in Z)e(W,X,{get:Z[X],enumerable:!0,configurable:!0,set:(J)=>Z[X]=()=>J})};var wJ={};z(wJ,{val:()=>P,ui:()=>A,tt:()=>x,getIcon:()=>V,Tooltip:()=>PJ,Toast:()=>qJ,Timeline:()=>LJ,Tabs:()=>GJ,Table:()=>ZJ,Swap:()=>KJ,Stat:()=>MJ,Stack:()=>tM,Select:()=>sM,Rating:()=>lM,Range:()=>oM,Radio:()=>cM,Navbar:()=>dM,Modal:()=>mM,Menu:()=>gM,Loading:()=>$M,List:()=>yM,Label:()=>wM,Input:()=>g,Indicator:()=>xM,Fileinput:()=>OM,Fieldset:()=>SM,Fab:()=>EM,Dropdown:()=>VM,Drawer:()=>DM,Datepicker:()=>zM,Colorpicker:()=>CM,Checkbox:()=>AM,Button:()=>h,Badge:()=>BM,Autocomplete:()=>QM,Alert:()=>GM,Accordion:()=>ZM});var O=null,y=null,d=new Set,p=!1,MM=new WeakMap,NJ=()=>{if(p)return;p=!0;while(d.size>0){let W=Array.from(d).sort((Z,X)=>(Z.depth||0)-(X.depth||0));d.clear();for(let Z of W)if(!Z._deleted)Z()}p=!1},zJ=(W)=>{if(O&&!O._deleted)W.add(O),O._deps.add(W)},JM=(W)=>{for(let Z of W){if(Z===O||Z._deleted)continue;if(Z._isComputed){if(Z.markDirty(),Z._subs)JM(Z._subs)}else d.add(Z)}if(!p)queueMicrotask(NJ)},KM=(W)=>{if(W._cleanups)W._cleanups.forEach((Z)=>Z()),W._cleanups.clear();W.childNodes?.forEach(KM)},c=(W)=>{let Z=new Set,X=y,J=document.createElement("div");J.style.display="contents",y={cleanups:Z};try{let Y=W({onCleanup:(K)=>Z.add(K)}),L=(K)=>{if(!K)return;if(K._isRuntime)Z.add(K.destroy),J.appendChild(K.container);else if(Array.isArray(K))K.forEach(L);else J.appendChild(K instanceof Node?K:document.createTextNode(String(K)))};L(Y)}finally{y=X}return{_isRuntime:!0,container:J,destroy:()=>{Z.forEach((Y)=>Y()),KM(J),J.remove()}}},U=(W,Z=null)=>{if(typeof W==="function"){let Y=new Set,L,K=!0,G=()=>{if(G._deleted)return;G._deps.forEach((Q)=>Q.delete(G)),G._deps.clear();let q=O;O=G;try{let Q=W();if(!Object.is(L,Q)||K)L=Q,K=!1,JM(Y)}finally{O=q}};if(G._deps=new Set,G._isComputed=!0,G._subs=Y,G._deleted=!1,G.markDirty=()=>K=!0,G.stop=()=>{G._deleted=!0,G._deps.forEach((q)=>q.delete(G)),Y.clear()},y)y.cleanups.add(G.stop);return()=>{if(K)G();return zJ(Y),L}}let X=W;if(Z)try{let Y=localStorage.getItem(Z);if(Y!==null)X=JSON.parse(Y)}catch(Y){console.warn("SigPro: LocalStorage locked",Y)}let J=new Set;return(...Y)=>{if(Y.length){let L=typeof Y[0]==="function"?Y[0](X):Y[0];if(!Object.is(X,L)){if(X=L,Z)localStorage.setItem(Z,JSON.stringify(X));JM(J)}}return zJ(J),X}},v=(W,Z)=>{let X=Array.isArray(W),J=X?Z:W,Y=X?W:null;if(typeof J!=="function")return()=>{};let L=y,K=()=>{if(K._deleted)return;K._deps.forEach((Q)=>Q.delete(K)),K._deps.clear(),K._cleanups.forEach((Q)=>Q()),K._cleanups.clear();let G=O,q=y;O=K,y={cleanups:K._cleanups},K.depth=G?G.depth+1:0;try{if(X)O=null,J(),O=K,Y.forEach((Q)=>typeof Q==="function"&&Q());else J()}finally{O=G,y=q}};if(K._deps=new Set,K._cleanups=new Set,K._deleted=!1,K.stop=()=>{if(K._deleted)return;if(K._deleted=!0,d.delete(K),K._deps.forEach((G)=>G.delete(K)),K._cleanups.forEach((G)=>G()),L)L.cleanups.delete(K.stop)},L)L.cleanups.add(K.stop);return K(),K.stop},M=(W,Z={},X=[])=>{if(Z instanceof Node||Array.isArray(Z)||typeof Z!=="object")X=Z,Z={};let J=document.createElement(W),Y=(K,G)=>(K==="src"||K==="href")&&String(G).toLowerCase().includes("javascript:")?"#":G;J._cleanups=new Set;for(let[K,G]of Object.entries(Z)){if(K==="ref"){typeof G==="function"?G(J):G.current=J;continue}let q=typeof G==="function";if(["INPUT","TEXTAREA","SELECT"].includes(J.tagName)&&(K==="value"||K==="checked")&&q){J._cleanups.add(v(()=>{let C=G();if(J[K]!==C)J[K]=C}));let _=K==="checked"?"change":"input",D=(C)=>G(C.target[K]);J.addEventListener(_,D),J._cleanups.add(()=>J.removeEventListener(_,D))}else if(K.startsWith("on")){let _=K.slice(2).toLowerCase().split(".")[0],D=(C)=>G(C);J.addEventListener(_,D),J._cleanups.add(()=>J.removeEventListener(_,D))}else if(q)J._cleanups.add(v(()=>{let _=Y(K,G());if(K==="class")J.className=_||"";else _==null?J.removeAttribute(K):J.setAttribute(K,_)}));else J.setAttribute(K,Y(K,G))}let L=(K)=>{if(Array.isArray(K))return K.forEach(L);if(typeof K==="function"){let G=document.createTextNode("");J.appendChild(G);let q=[];J._cleanups.add(v(()=>{let Q=K(),B=(Array.isArray(Q)?Q:[Q]).map((_)=>_?._isRuntime?_.container:_ instanceof Node?_:document.createTextNode(_??""));q.forEach((_)=>{KM(_),_.remove()}),B.forEach((_)=>G.parentNode?.insertBefore(_,G)),q=B}))}else J.appendChild(K instanceof Node?K:document.createTextNode(K??""))};return L(X),J},E=(W,Z,X=null)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=null,K=null;return v(()=>{let G=!!(typeof W==="function"?W():W);if(G!==K){if(K=G,L)L.destroy();let q=G?Z:X;if(q)L=c(()=>typeof q==="function"?q():q),Y.insertBefore(L.container,J)}}),Y};E.not=(W,Z,X)=>E(()=>!(typeof W==="function"?W():W),Z,X);var j=(W,Z,X)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=new Map;return v(()=>{let K=(typeof W==="function"?W():W)||[],G=new Map,q=[];for(let B=0;BZ(_,B));else L.delete(D);G.set(D,C),q.push(D)}L.forEach((B)=>{B.destroy(),B.container.remove()});let Q=J;for(let B=q.length-1;B>=0;B--){let _=G.get(q[B]);if(_.container.nextSibling!==Q)Y.insertBefore(_.container,Q);Q=_.container}L=G}),Y},b=(W)=>{let Z=U(window.location.hash.replace(/^#/,"")||"/");window.addEventListener("hashchange",()=>Z(window.location.hash.replace(/^#/,"")||"/"));let X=M("div",{class:"router-outlet"}),J=null;return v([Z],async()=>{let Y=Z(),L=W.find((K)=>{let G=K.path.split("/").filter(Boolean),q=Y.split("/").filter(Boolean);return G.length===q.length&&G.every((Q,B)=>Q.startsWith(":")||Q===q[B])})||W.find((K)=>K.path==="*");if(L){let K=L.component;if(typeof K==="function"&&K.toString().includes("import"))K=(await K()).default||await K();let G={};if(L.path.split("/").filter(Boolean).forEach((q,Q)=>{if(q.startsWith(":"))G[q.slice(1)]=Y.split("/").filter(Boolean)[Q]}),J)J.destroy();if(b.params)b.params(G);J=c(()=>{try{return typeof K==="function"?K(G):K}catch(q){return M("div",{class:"p-4 text-error"},"Error loading view")}}),X.appendChild(J.container)}}),X};b.params=U({});b.to=(W)=>window.location.hash=W.replace(/^#?\/?/,"#/");b.back=()=>window.history.back();b.path=()=>window.location.hash.replace(/^#/,"")||"/";var WM=(W,Z)=>{let X=typeof Z==="string"?document.querySelector(Z):Z;if(!X)return;if(MM.has(X))MM.get(X).destroy();let J=c(typeof W==="function"?W:()=>W);return X.replaceChildren(J.container),MM.set(X,J),J},OJ={$:U,$watch:v,$html:M,$if:E,$for:j,$router:b,$mount:WM};if(typeof window<"u")((Z)=>{Object.keys(Z).forEach((J)=>{window[J]=Z[J]}),"div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer address ul ol li dl dt dd a em strong small i b u mark time sub sup pre code blockquote details summary dialog form label input textarea select button option fieldset legend table thead tbody tfoot tr th td caption img video audio canvas svg iframe picture source progress meter".split(/\s+/).forEach((J)=>{let Y=J.charAt(0).toUpperCase()+J.slice(1);if(!(Y in window))window[Y]=(L,K)=>M(J,L,K)}),window.SigPro=Object.freeze(Z)})(OJ);var o={};z(o,{default:()=>kJ,Tooltip:()=>PJ,Toast:()=>qJ,Timeline:()=>LJ,Tabs:()=>GJ,Table:()=>ZJ,Swap:()=>KJ,Stat:()=>MJ,Stack:()=>tM,Select:()=>sM,Rating:()=>lM,Range:()=>oM,Radio:()=>cM,Navbar:()=>dM,Modal:()=>mM,Menu:()=>gM,Loading:()=>$M,List:()=>yM,Label:()=>wM,Input:()=>g,Indicator:()=>xM,Fileinput:()=>OM,Fieldset:()=>SM,Fab:()=>EM,Dropdown:()=>VM,Drawer:()=>DM,Datepicker:()=>zM,Colorpicker:()=>CM,Checkbox:()=>AM,Button:()=>h,Badge:()=>BM,Autocomplete:()=>QM,Alert:()=>GM,Accordion:()=>ZM});var XM={};z(XM,{Accordion:()=>ZM});var i={};z(i,{val:()=>P,ui:()=>A,getIcon:()=>V});var P=(W)=>typeof W==="function"?W():W,A=(W,Z)=>typeof Z==="function"?()=>`${W} ${Z()||""}`.trim():`${W} ${Z||""}`.trim(),V=(W)=>{if(!W)return null;if(typeof W==="function")return M("span",{class:"mr-1"},W());if(typeof W==="object")return M("span",{class:"mr-1"},W);if(typeof W==="string"){let Z=W.trim().split(/\s+/),X=Z[Z.length-1]==="right",J=X?Z.slice(0,-1).join(" "):W,Y=X?"ml-1":"mr-1";if(J&&!J.startsWith("icon-[")&&!J.includes("--"))return M("span",{class:Y},J);return M("span",{class:`${J} ${Y}`.trim()})}return null};var ZM=(W,Z)=>{let{class:X,title:J,name:Y,open:L,...K}=W;return M("div",{...K,class:A("collapse collapse-arrow bg-base-200 mb-2",X)},[M("input",{type:Y?"radio":"checkbox",name:Y,checked:P(L)}),M("div",{class:"collapse-title text-xl font-medium"},J),M("div",{class:"collapse-content"},Z)])};var YM={};z(YM,{Alert:()=>GM});var GM=(W,Z)=>{let{class:X,actions:J,type:Y="info",soft:L=!0,...K}=W,G={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},B=[`alert-${Y}`,L?"alert-soft":"",X].filter(Boolean).join(" "),_=Z||W.message;return M("div",{...K,role:"alert",class:A("alert",B)},()=>[V(G[Y]),M("div",{class:"flex-1"},[M("span",{},[typeof _==="function"?_():_])]),J?M("div",{class:"flex-none"},[typeof J==="function"?J():J]):null].filter(Boolean))};var qM={};z(qM,{Autocomplete:()=>QM});var IJ={es:{close:"Cerrar",confirm:"Confirmar",cancel:"Cancelar",search:"Buscar...",loading:"Cargando...",nodata:"Sin datos"},en:{close:"Close",confirm:"Confirm",cancel:"Cancel",search:"Search...",loading:"Loading...",nodata:"No data"}},xJ=U("es");var x=(W)=>()=>IJ[xJ()][W]||W;var LM={};z(LM,{Input:()=>g});var g=(W)=>{let{class:Z,value:X,type:J="text",icon:Y,oninput:L,placeholder:K,disabled:G,size:q,...Q}=W,B=J==="password",_=U(!1),D={text:"icon-[lucide--text]",password:"icon-[lucide--lock]",date:"icon-[lucide--calendar]",number:"icon-[lucide--hash]",email:"icon-[lucide--mail]",search:"icon-[lucide--search]",tel:"icon-[lucide--phone]",url:"icon-[lucide--link]"},C=Y?V(Y):D[J]?V(D[J]):null,R=()=>V(_()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),H=C?"pl-10":"",N=B?"pr-10":"",r=()=>{if(Z?.includes("input-xs"))return"btn-xs";if(Z?.includes("input-sm"))return"btn-sm";if(Z?.includes("input-lg"))return"btn-lg";return"btn-md"};return M("div",{class:"relative w-full"},()=>[M("input",{...Q,type:()=>B?_()?"text":"password":J,placeholder:K||" ",class:A("input w-full",`${H} ${N} ${Z||""}`.trim()),value:X,oninput:(m)=>L?.(m),disabled:()=>P(G)}),C?M("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},C):null,B?M("button",{type:"button",class:A("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",r()),onclick:(m)=>{m.preventDefault(),_(!_())}},()=>R()):null])};var QM=(W)=>{let{class:Z,items:X=[],value:J,onSelect:Y,label:L,placeholder:K,...G}=W,q=U(P(J)||""),Q=U(!1),B=U(-1),_=U(()=>{let R=q().toLowerCase(),H=P(X)||[];return R?H.filter((N)=>(typeof N==="string"?N:N.label).toLowerCase().includes(R)):H}),D=(R)=>{let H=typeof R==="string"?R:R.value,N=typeof R==="string"?R:R.label;if(q(N),typeof J==="function")J(H);Y?.(R),Q(!1),B(-1)},C=(R)=>{let H=_();if(R.key==="ArrowDown")R.preventDefault(),Q(!0),B(Math.min(B()+1,H.length-1));else if(R.key==="ArrowUp")R.preventDefault(),B(Math.max(B()-1,0));else if(R.key==="Enter"&&B()>=0)R.preventDefault(),D(H[B()]);else if(R.key==="Escape")Q(!1)};return M("div",{class:"relative w-full"},[g({label:L,class:Z,placeholder:K||x("search")(),value:q,onfocus:()=>Q(!0),onblur:()=>setTimeout(()=>Q(!1),150),onkeydown:C,oninput:(R)=>{let H=R.target.value;if(q(H),typeof J==="function")J(H);Q(!0),B(-1)},...G}),M("ul",{class:"absolute left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50",style:()=>Q()&&_().length?"display:block":"display:none"},[j(_,(R,H)=>M("li",{},[M("a",{class:()=>`block w-full ${B()===H?"active bg-primary text-primary-content":""}`,onclick:()=>D(R),onmouseenter:()=>B(H)},typeof R==="string"?R:R.label)]),(R,H)=>(typeof R==="string"?R:R.value)+H),()=>_().length?null:M("li",{class:"p-2 text-center opacity-50"},x("nodata")())])])};var PM={};z(PM,{Badge:()=>BM});var BM=(W,Z)=>{let{class:X,...J}=W;return M("span",{...J,class:A("badge",X)},Z)};var _M={};z(_M,{Button:()=>h});var h=(W,Z)=>{let{class:X,loading:J,icon:Y,...L}=W,K=V(Y);return M("button",{...L,class:A("btn",X),disabled:()=>P(J)||P(W.disabled)},()=>[P(J)&&M("span",{class:"loading loading-spinner"}),K,Z].filter(Boolean))};var TM={};z(TM,{Checkbox:()=>AM});var AM=(W)=>{let{class:Z,value:X,tooltip:J,toggle:Y,label:L,...K}=W,G=M("input",{...K,type:"checkbox",class:()=>A(P(Y)?"toggle":"checkbox",Z),checked:X}),q=M("label",{class:"label cursor-pointer justify-start gap-3"},[G,L?M("span",{class:"label-text"},L):null]);return J?M("div",{class:"tooltip","data-tip":J},q):q};var RM={};z(RM,{Colorpicker:()=>CM});var CM=(W)=>{let{class:Z,value:X,label:J,...Y}=W,L=U(!1),K=["#000","#1A1A1A","#333","#4D4D4D","#666","#808080","#B3B3B3","#FFF","#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626","#ef4444","#f87171","#fca5a5","#431407","#7c2d12","#9a3412","#c2410c","#ea580c","#f97316","#fb923c","#ffedd5","#713f12","#a16207","#ca8a04","#eab308","#facc15","#fde047","#fef08a","#fff9c4","#064e3b","#065f46","#059669","#10b981","#34d399","#4ade80","#84cc16","#d9f99d","#082f49","#075985","#0284c7","#0ea5e9","#38bdf8","#7dd3fc","#22d3ee","#cffafe","#1e1b4b","#312e81","#4338ca","#4f46e5","#6366f1","#818cf8","#a5b4fc","#e0e7ff","#2e1065","#4c1d95","#6d28d9","#7c3aed","#8b5cf6","#a855f7","#d946ef","#fae8ff"],G=()=>P(X)||"#000000";return M("div",{class:A("relative w-fit",Z)},[M("button",{type:"button",class:"btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case",onclick:(q)=>{q.stopPropagation(),L(!L())},...Y},[M("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${G()}`}),J?M("span",{class:"opacity-80"},J):null]),E(L,()=>M("div",{class:"absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none",onclick:(q)=>q.stopPropagation()},[M("div",{class:"grid grid-cols-8 gap-1"},K.map((q)=>M("button",{type:"button",style:`background-color: ${q}`,class:()=>{return`size-6 rounded-sm cursor-pointer transition-all hover:scale-125 hover:z-10 active:scale-95 outline-none border border-black/5 + ${G().toLowerCase()===q.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof X==="function")X(q);L(!1)}})))])),E(L,()=>M("div",{class:"fixed inset-0 z-[100]",onclick:()=>L(!1)}))])};var FM={};z(FM,{Datepicker:()=>zM});var zM=(W)=>{let{class:Z,value:X,range:J,label:Y,placeholder:L,hour:K=!1,...G}=W,q=U(!1),Q=U(new Date),B=U(null),_=U(0),D=U(0),C=()=>P(J)===!0,R=new Date,H=`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}-${String(R.getDate()).padStart(2,"0")}`,N=(T)=>{let F=T.getFullYear(),S=String(T.getMonth()+1).padStart(2,"0"),k=String(T.getDate()).padStart(2,"0");return`${F}-${S}-${k}`},r=(T)=>{let F=N(T),S=P(X);if(C())if(!S?.start||S.start&&S.end){if(typeof X==="function")X({start:F,end:null,...K&&{startHour:_()}})}else{let k=S.start;if(typeof X==="function"){let u=F{let T=P(X);if(!T)return"";if(typeof T==="string"){if(K&&T.includes("T"))return T.replace("T"," ");return T}if(T.start&&T.end){let F=K&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start,S=K&&T.endHour?`${T.end} ${String(T.endHour).padStart(2,"0")}:00`:T.end;return`${F} - ${S}`}if(T.start)return`${K&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start}...`;return""}),AJ=(T)=>{let F=Q();Q(new Date(F.getFullYear(),F.getMonth()+T,1))},TJ=(T)=>{let F=Q();Q(new Date(F.getFullYear()+T,F.getMonth(),1))},l=({value:T,onChange:F})=>{return M("div",{class:"flex-1"},[M("div",{class:"flex gap-2 items-center"},[M("input",{type:"range",min:0,max:23,value:T,class:"range range-xs flex-1",oninput:(S)=>{let k=parseInt(S.target.value);F(k)}}),M("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(P(T)).padStart(2,"0")+":00")])])};return M("div",{class:A("relative w-full",Z)},[g({label:Y,placeholder:L||(C()?"Seleccionar rango...":"Seleccionar fecha..."),value:m,readonly:!0,icon:V("icon-[lucide--calendar]"),onclick:(T)=>{T.stopPropagation(),q(!q())},...G}),E(q,()=>M("div",{class:"absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none",onclick:(T)=>T.stopPropagation()},[M("div",{class:"flex justify-between items-center mb-4 gap-1"},[M("div",{class:"flex gap-0.5"},[M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>TJ(-1)},V("icon-[lucide--chevrons-left]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>AJ(-1)},V("icon-[lucide--chevron-left]"))]),M("span",{class:"font-bold uppercase flex-1 text-center"},[()=>Q().toLocaleString("es-ES",{month:"short",year:"numeric"})]),M("div",{class:"flex gap-0.5"},[M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>AJ(1)},V("icon-[lucide--chevron-right]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>TJ(1)},V("icon-[lucide--chevrons-right]"))])]),M("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>B(null)},[...["L","M","X","J","V","S","D"].map((T)=>M("div",{class:"text-[10px] opacity-40 font-bold text-center"},T)),()=>{let T=Q(),F=T.getFullYear(),S=T.getMonth(),k=new Date(F,S,1).getDay(),u=k===0?6:k-1,DJ=new Date(F,S+1,0).getDate(),a=[];for(let $=0;${let f=P(X),s=B(),UJ=typeof f==="string"?f.split("T")[0]===I:f?.start===I,VJ=f?.end===I,n=!1;if(C()&&f?.start){let t=f.start;if(!f.end&&s)n=I>t&&I<=s||I=s;else if(f.end)n=I>t&&I{if(C())B(I)},onclick:()=>r(CJ)},[$.toString()]))}return a}]),K?M("div",{class:"mt-3 pt-2 border-t border-base-300"},[C()?M("div",{class:"flex gap-4"},[l({value:_,onChange:(T)=>{_(T);let F=P(X);if(F?.start)X({...F,startHour:T})}}),l({value:D,onChange:(T)=>{D(T);let F=P(X);if(F?.end)X({...F,endHour:T})}})]):l({value:_,onChange:(T)=>{_(T);let F=P(X);if(F&&typeof F==="string"&&F.includes("-"))X(F.split("T")[0]+"T"+String(T).padStart(2,"0")+":00:00")}})]):null])),E(q,()=>M("div",{class:"fixed inset-0 z-[90]",onclick:()=>q(!1)}))])};var UM={};z(UM,{Drawer:()=>DM});var DM=(W,Z)=>{let{class:X,id:J,open:Y,side:L,content:K,...G}=W,q=J||`drawer-${Math.random().toString(36).slice(2,9)}`;return M("div",{...G,class:A("drawer",X)},[M("input",{id:q,type:"checkbox",class:"drawer-toggle",checked:()=>typeof Y==="function"?Y():Y,onchange:(Q)=>{if(typeof Y==="function")Y(Q.target.checked)}}),M("div",{class:"drawer-content"},[typeof K==="function"?K():K]),M("div",{class:"drawer-side"},[M("label",{for:q,class:"drawer-overlay",onclick:()=>{if(typeof Y==="function")Y(!1)}}),M("div",{class:"min-h-full bg-base-200 w-80"},[typeof L==="function"?L():L])])])};var HM={};z(HM,{Dropdown:()=>VM});var w=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(W)=>{if(w&&!w.contains(W.target))w.open=!1,w=null}),window.__dropdownHandlerRegistered=!0;var VM=(W)=>{let{class:Z,label:X,icon:J,items:Y,...L}=W;return $html("details",{...L,class:A("dropdown",Z)},[$html("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(K)=>{let G=K.currentTarget.closest("details");if(w&&w!==G)w.open=!1;setTimeout(()=>{w=G.open?G:null},0)}},[()=>J?typeof J==="function"?J():J:null,()=>X?typeof X==="function"?X():X:null]),$html("ul",{tabindex:"-1",class:"dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300"},[()=>{return(typeof Y==="function"?Y():Y||[]).map((G)=>$html("li",{},[$html("a",{class:G.class||"",onclick:(q)=>{if(G.onclick)G.onclick(q);let Q=q.currentTarget.closest("details");if(Q){if(Q.open=!1,w===Q)w=null}}},[G.icon?$html("span",{},G.icon):null,$html("span",{},G.label)])]))}])])};var jM={};z(jM,{Fab:()=>EM});var EM=(W)=>{let{class:Z,icon:X,label:J,actions:Y=[],position:L="bottom-6 right-6",...K}=W;return M("div",{...K,class:A(`fab absolute ${L} flex flex-col-reverse items-end gap-3 z-[100]`,Z)},[M("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[X?V(X):null,!X&&J?J:null]),...P(Y).map((G)=>M("div",{class:"flex items-center gap-3 transition-all duration-300"},[G.label?M("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},G.label):null,M("button",{type:"button",class:`btn btn-circle shadow-lg ${G.class||""}`,onclick:(q)=>{q.stopPropagation(),G.onclick?.(q)}},[G.icon?V(G.icon):G.text||""])]))])};var NM={};z(NM,{Fieldset:()=>SM});var SM=(W,Z)=>{let{class:X,legend:J,...Y}=W;return M("fieldset",{...Y,class:A("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",X)},[()=>{let L=P(J);return L?M("legend",{class:"fieldset-legend font-bold"},[L]):null},Z])};var IM={};z(IM,{Fileinput:()=>OM});var OM=(W)=>{let{class:Z,tooltip:X,max:J=2,accept:Y="*",onSelect:L,...K}=W,G=U([]),q=U(!1),Q=U(null),B=J*1024*1024,_=(C)=>{let R=Array.from(C);if(Q(null),R.find((N)=>N.size>B)){Q(`Máx ${J}MB`);return}G([...G(),...R]),L?.(G())},D=(C)=>{let R=G().filter((H,N)=>N!==C);G(R),L?.(R)};return M("fieldset",{...K,class:A("fieldset w-full p-0",Z)},[M("div",{class:()=>`w-full ${X?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":X},[M("label",{class:()=>` relative flex items-center justify-between w-full h-12 px-4 border-2 border-dashed rounded-lg cursor-pointer transition-all duration-200 ${q()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} - `,ondragover:(C)=>{C.preventDefault(),q(!0)},ondragleave:()=>q(!1),ondrop:(C)=>{C.preventDefault(),q(!1),_(C.dataTransfer.files)}},[M("div",{class:"flex items-center gap-3 w-full"},[V("icon-[lucide--upload]"),M("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),M("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${J}MB`)]),M("input",{type:"file",multiple:!0,accept:Y,class:"hidden",onchange:(C)=>_(C.target.files)})])]),()=>Q()?M("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},Q()):null,j(()=>G().length>0,()=>M("ul",{class:"mt-2 space-y-1"},[E(G,(C,R)=>M("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[M("div",{class:"flex items-center gap-2 truncate"},[M("span",{class:"opacity-50"},"\uD83D\uDCC4"),M("span",{class:"truncate font-medium max-w-[200px]"},C.name),M("span",{class:"text-[9px] opacity-40"},`(${(C.size/1024).toFixed(0)} KB)`)]),M("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(H)=>{H.preventDefault(),H.stopPropagation(),D(R)}},[V("icon-[lucide--x]")])]),(C)=>C.name+C.lastModified)]))])};var xM={};z(xM,{Indicator:()=>IM});var IM=(W,Z)=>M("div",{class:"indicator"},()=>[Z,W.value&&M("span",{class:A("indicator-item badge",W.class)},W.value)].filter(Boolean));var wM={};z(wM,{Label:()=>kM});var kM=(W)=>{let{children:Z,value:X,floating:J=!1,error:Y,required:L,class:K,...G}=W;if(J)return M("label",{class:A("floating-label w-full",K),...G},()=>[X?M("span",{},X):null,Z,Y?M("span",{class:"text-error text-xs"},P(Y)):null]);return M("label",{class:A("input w-full",K),...G},()=>[X?M("span",{class:"label"},X):null,Z,Y?M("span",{class:"text-error text-xs"},P(Y)):null])};var yM={};z(yM,{List:()=>fM});var fM=(W)=>{let{class:Z,items:X,header:J,render:Y,keyFn:L=(q,Q)=>Q,...K}=W,G=E(X,(q,Q)=>M("li",{class:"list-row"},[Y(q,Q)]),L);return M("ul",{...K,class:A("list bg-base-100 rounded-box shadow-md",Z)},J?[j(J,()=>M("li",{class:"p-4 pb-2 text-xs opacity-60"},[P(J)])),G]:G)};var $M={};z($M,{Loading:()=>vM});var vM=(W)=>{return j(W.$show,()=>M("div",{class:"fixed inset-0 z-[100] flex items-center justify-center backdrop-blur-sm bg-base-100/30"},[M("span",{class:"loading loading-spinner loading-lg text-primary"})]))};var gM={};z(gM,{Menu:()=>bM});var bM=(W)=>{let{class:Z,items:X,...J}=W,Y=(L)=>E(()=>L||[],(K)=>M("li",{},[K.children?M("details",{open:K.open},[M("summary",{},[K.icon&&M("span",{class:"mr-2"},K.icon),K.label]),M("ul",{},Y(K.children))]):M("a",{class:()=>P(K.active)?"active":"",onclick:K.onclick},[K.icon&&M("span",{class:"mr-2"},K.icon),K.label])]),(K,G)=>K.label||G);return M("ul",{...J,class:A("menu bg-base-200 rounded-box",Z)},Y(X))};var uM={};z(uM,{Modal:()=>hM});var hM=(W,Z)=>{let{class:X,title:J,buttons:Y,open:L,...K}=W,G={current:null};y(()=>{let Q=G.current;if(!Q)return;if(P(L)){if(!Q.open)Q.showModal()}else if(Q.open)Q.close()});let q=(Q)=>{if(Q&&Q.preventDefault)Q.preventDefault();if(typeof L==="function")L(!1)};return M("dialog",{...K,ref:G,class:A("modal",X),oncancel:()=>typeof L==="function"&&L(!1)},[M("div",{class:"modal-box"},[J?M("h3",{class:"text-lg font-bold mb-4"},J):null,M("div",{class:"py-2"},[typeof Z==="function"?Z():Z]),M("div",{class:"modal-action flex gap-2"},[...(Array.isArray(Y)?Y:[Y]).filter(Boolean),g({type:"button",onclick:q},x("close")())])]),M("form",{method:"dialog",class:"modal-backdrop",onsubmit:q},[M("button",{},"close")])])};var dM={};z(dM,{Navbar:()=>mM});var mM=(W,Z)=>{let{class:X,...J}=W;return M("div",{...J,class:A("navbar bg-base-100 shadow-sm px-4",X)},Z)};var cM={};z(cM,{Radio:()=>pM});var pM=(W)=>{let{class:Z,label:X,tooltip:J,value:Y,inputValue:L,name:K,...G}=W,q=M("input",{...G,type:"radio",name:K,class:A("radio",Z),checked:()=>P(Y)===L,onclick:()=>{if(typeof Y==="function")Y(L)}});if(!X&&!J)return q;let Q=M("label",{class:"label cursor-pointer justify-start gap-3"},[q,X?M("span",{class:"label-text"},X):null]);return J?M("div",{class:"tooltip","data-tip":J},Q):Q};var oM={};z(oM,{Range:()=>iM});var iM=(W)=>{let{class:Z,label:X,tooltip:J,value:Y,...L}=W,K=M("input",{...L,type:"range",class:A("range",Z),value:Y,disabled:()=>P(W.disabled)});if(!X&&!J)return K;let G=M("div",{class:"flex flex-col gap-2"},[X?M("span",{class:"label-text"},X):null,K]);return J?M("div",{class:"tooltip","data-tip":J},G):G};var aM={};z(aM,{Rating:()=>rM});var rM=(W)=>{let{class:Z,value:X,count:J=5,mask:Y="mask-star",readonly:L=!1,onchange:K,...G}=W,q=`rating-${Math.random().toString(36).slice(2,7)}`;return M("div",{...G,class:()=>A(`rating ${P(L)?"pointer-events-none":""}`,Z)},Array.from({length:P(J)},(Q,B)=>{let _=B+1;return M("input",{type:"radio",name:q,class:`mask ${Y}`,checked:()=>Math.round(P(X))===_,onchange:()=>{if(!P(L)){if(typeof K==="function")K(_);else if(typeof X==="function")X(_)}}})}))};var sM={};z(sM,{Select:()=>lM});var lM=(W)=>{let{class:Z,label:X,items:J,value:Y,...L}=W,K=M("select",{...L,class:A("select select-bordered w-full",Z),value:Y},E(()=>P(J)||[],(G)=>M("option",{value:G.value,$selected:()=>String(P(Y))===String(G.value)},G.label),(G)=>G.value));if(!X)return K;return M("label",{class:"fieldset-label flex flex-col gap-1"},[M("span",{},X),K])};var tM={};z(tM,{Stack:()=>nM});var nM=(W,Z)=>{let{class:X,...J}=W;return M("div",{...J,class:A("stack",X)},Z)};var MJ={};z(MJ,{Stat:()=>eM});var eM=(W)=>{let{class:Z,icon:X,label:J,value:Y,desc:L,...K}=W;return M("div",{...K,class:A("stat",Z)},[X&&M("div",{class:"stat-figure text-secondary"},X),J&&M("div",{class:"stat-title"},J),M("div",{class:"stat-value"},()=>P(Y)??Y),L&&M("div",{class:"stat-desc"},L)])};var KJ={};z(KJ,{Swap:()=>JJ});var JJ=(W)=>{let{class:Z,value:X,on:J,off:Y,...L}=W;return M("label",{...L,class:A("swap",Z)},[M("input",{type:"checkbox",checked:P(X)}),M("div",{class:"swap-on"},J),M("div",{class:"swap-off"},Y)])};var ZJ={};z(ZJ,{Table:()=>WJ});var WJ=(W)=>{let{class:Z,items:X=[],columns:J=[],keyFn:Y,zebra:L=!1,pinRows:K=!1,empty:G=x("nodata")(),...q}=W;return M("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[M("table",{...q,class:()=>{let B=P(L)?"table-zebra":"",_=P(K)?"table-pin-rows":"";return A("table",Z,B,_)}},[M("thead",{},[M("tr",{},J.map((B)=>M("th",{class:B.class||""},B.label)))]),M("tbody",{},[E(X,(B,_)=>{return M("tr",{class:"hover"},J.map((D)=>{let C=()=>{if(D.render)return D.render(B,_);let R=B[D.key];return P(R)};return M("td",{class:D.class||""},[C])}))},Y||((B,_)=>B.id||_)),j(()=>P(X).length===0,()=>M("tr",{},[M("td",{colspan:J.length,class:"text-center p-10 opacity-50"},[P(G)])]))]),j(()=>J.some((B)=>B.footer),()=>M("tfoot",{},[M("tr",{},J.map((B)=>M("th",{},B.footer||"")))]))])])};var GJ={};z(GJ,{Tabs:()=>XJ});var XJ=(W)=>{let{class:Z,items:X,activeIndex:J=U(0),...Y}=W,L=typeof X==="function"?X:()=>X||[],K=U(0),G=J!==void 0?J:K,q=(Q,B)=>(_)=>{if(typeof G==="function")G(Q);B?.(_)};return M("div",{...Y,class:"flex flex-col gap-4 w-full"},[M("div",{role:"tablist",class:A("tabs tabs-box",Z)},E(L,(Q,B)=>{let _=P(Q.active)??G()===B;return M("a",{role:"tab",class:()=>A("tab",_?"tab-active":"",P(Q.disabled)?"tab-disabled":""),onclick:!P(Q.disabled)?q(B,Q.onclick):void 0},Q.label)},(Q,B)=>Q.label+B)),()=>{let Q=L().find((_,D)=>P(_.active)??G()===D);if(!Q)return null;let B=P(Q.content);return M("div",{class:"p-4"},[typeof B==="function"?B():B])}])};var LJ={};z(LJ,{Timeline:()=>YJ});var YJ=(W)=>{let{class:Z,items:X=[],vertical:J=!0,compact:Y=!1,...L}=W,K={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return M("ul",{...L,class:()=>A(`timeline ${P(J)?"timeline-vertical":"timeline-horizontal"} ${P(Y)?"timeline-compact":""}`,Z)},[E(X,(G,q)=>{let Q=q===0,B=q===P(X).length-1,_=G.type||"success",D=(C)=>typeof C==="function"?C():C;return M("li",{class:"flex-1"},[!Q?M("hr",{class:G.completed?"bg-primary":""}):null,M("div",{class:"timeline-start"},[D(G.title)]),M("div",{class:"timeline-middle"},[G.icon?V(G.icon):V(K[_]||K.success)]),M("div",{class:"timeline-end timeline-box shadow-sm"},[D(G.detail)]),!B?M("hr",{class:G.completed?"bg-primary":""}):null])},(G,q)=>G.id||q)])};var qJ={};z(qJ,{Toast:()=>QJ});var QJ=(W,Z="alert-success",X=3500)=>{let J=document.getElementById("sigpro-toast-container");if(!J)J=M("div",{id:"sigpro-toast-container",class:"fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none"}),document.body.appendChild(J);let Y=M("div",{style:"display: contents"});J.appendChild(Y);let L,K=()=>{clearTimeout(L);let Q=Y.firstElementChild;if(Q&&!Q.classList.contains("opacity-0"))Q.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(q.destroy(),Y.remove(),!J.hasChildNodes())J.remove()},300);else q.destroy(),Y.remove()},q=KM(()=>{let Q=V("icon-[lucide--x]"),B=M("div",{class:`alert alert-soft ${Z} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[M("span",{},[typeof W==="function"?W():W]),g({class:"btn-xs btn-circle btn-ghost",onclick:K},Q)]);return requestAnimationFrame(()=>B.classList.remove("translate-x-10","opacity-0")),B},Y);if(X>0)L=setTimeout(K,X);return K};var PJ={};z(PJ,{Tooltip:()=>BJ});var BJ=(W,Z)=>M("div",{...W,class:()=>A("tooltip",W.ui,W.class),"data-tip":W.tip},Z);var zJ={...ZM,...GM,...QM,...BM,...PM,...AM,...CM,...zM,...DM,...VM,...EM,...SM,...NM,...xM,...YM,...wM,...yM,...$M,...gM,...uM,...dM,...cM,...oM,...aM,...sM,...tM,...MJ,...KJ,...ZJ,...GJ,...LJ,...qJ,...PJ},xJ={...zJ,install:(W=window)=>{Object.entries(zJ).forEach(([Z,X])=>{W[Z]=X}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(i).forEach(([W,Z])=>{window[W]=Z}),window.Utils=c,window.tt=x,window.SigProUI={...i,Utils:c,tt:x},console.log("\uD83C\uDFA8 SigProUI ready");})(); + `,ondragover:(C)=>{C.preventDefault(),q(!0)},ondragleave:()=>q(!1),ondrop:(C)=>{C.preventDefault(),q(!1),_(C.dataTransfer.files)}},[M("div",{class:"flex items-center gap-3 w-full"},[V("icon-[lucide--upload]"),M("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),M("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${J}MB`)]),M("input",{type:"file",multiple:!0,accept:Y,class:"hidden",onchange:(C)=>_(C.target.files)})])]),()=>Q()?M("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},Q()):null,E(()=>G().length>0,()=>M("ul",{class:"mt-2 space-y-1"},[j(G,(C,R)=>M("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[M("div",{class:"flex items-center gap-2 truncate"},[M("span",{class:"opacity-50"},"\uD83D\uDCC4"),M("span",{class:"truncate font-medium max-w-[200px]"},C.name),M("span",{class:"text-[9px] opacity-40"},`(${(C.size/1024).toFixed(0)} KB)`)]),M("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(H)=>{H.preventDefault(),H.stopPropagation(),D(R)}},[V("icon-[lucide--x]")])]),(C)=>C.name+C.lastModified)]))])};var kM={};z(kM,{Indicator:()=>xM});var xM=(W,Z)=>M("div",{class:"indicator"},()=>[Z,W.value&&M("span",{class:A("indicator-item badge",W.class)},W.value)].filter(Boolean));var fM={};z(fM,{Label:()=>wM});var wM=(W)=>{let{children:Z,value:X,floating:J=!1,error:Y,required:L,class:K,...G}=W;if(J)return M("label",{class:A("floating-label w-full",K),...G},()=>[X?M("span",{},X):null,Z,Y?M("span",{class:"text-error text-xs"},P(Y)):null]);return M("label",{class:A("input w-full",K),...G},()=>[X?M("span",{class:"label"},X):null,Z,Y?M("span",{class:"text-error text-xs"},P(Y)):null])};var vM={};z(vM,{List:()=>yM});var yM=(W)=>{let{class:Z,items:X,header:J,render:Y,keyFn:L=(q,Q)=>Q,...K}=W,G=j(X,(q,Q)=>M("li",{class:"list-row"},[Y(q,Q)]),L);return M("ul",{...K,class:A("list bg-base-100 rounded-box shadow-md",Z)},J?[E(J,()=>M("li",{class:"p-4 pb-2 text-xs opacity-60"},[P(J)])),G]:G)};var bM={};z(bM,{Loading:()=>$M});var $M=(W)=>{return E(W.$show,()=>M("div",{class:"fixed inset-0 z-[100] flex items-center justify-center backdrop-blur-sm bg-base-100/30"},[M("span",{class:"loading loading-spinner loading-lg text-primary"})]))};var hM={};z(hM,{Menu:()=>gM});var gM=(W)=>{let{class:Z,items:X,...J}=W,Y=(L)=>j(()=>L||[],(K)=>M("li",{},[K.children?M("details",{open:K.open},[M("summary",{},[K.icon&&M("span",{class:"mr-2"},K.icon),K.label]),M("ul",{},Y(K.children))]):M("a",{class:()=>P(K.active)?"active":"",onclick:K.onclick},[K.icon&&M("span",{class:"mr-2"},K.icon),K.label])]),(K,G)=>K.label||G);return M("ul",{...J,class:A("menu bg-base-200 rounded-box",Z)},Y(X))};var uM={};z(uM,{Modal:()=>mM});var mM=(W,Z)=>{let{class:X,title:J,buttons:Y,open:L,...K}=W,G={current:null};v(()=>{let Q=G.current;if(!Q)return;if(P(L)){if(!Q.open)Q.showModal()}else if(Q.open)Q.close()});let q=(Q)=>{if(Q&&Q.preventDefault)Q.preventDefault();if(typeof L==="function")L(!1)};return M("dialog",{...K,ref:G,class:A("modal",X),oncancel:()=>typeof L==="function"&&L(!1)},[M("div",{class:"modal-box"},[J?M("h3",{class:"text-lg font-bold mb-4"},J):null,M("div",{class:"py-2"},[typeof Z==="function"?Z():Z]),M("div",{class:"modal-action flex gap-2"},[...(Array.isArray(Y)?Y:[Y]).filter(Boolean),h({type:"button",onclick:q},x("close")())])]),M("form",{method:"dialog",class:"modal-backdrop",onsubmit:q},[M("button",{},"close")])])};var pM={};z(pM,{Navbar:()=>dM});var dM=(W,Z)=>{let{class:X,...J}=W;return M("div",{...J,class:A("navbar bg-base-100 shadow-sm px-4",X)},Z)};var iM={};z(iM,{Radio:()=>cM});var cM=(W)=>{let{class:Z,label:X,tooltip:J,value:Y,inputValue:L,name:K,...G}=W,q=M("input",{...G,type:"radio",name:K,class:A("radio",Z),checked:()=>P(Y)===L,onclick:()=>{if(typeof Y==="function")Y(L)}});if(!X&&!J)return q;let Q=M("label",{class:"label cursor-pointer justify-start gap-3"},[q,X?M("span",{class:"label-text"},X):null]);return J?M("div",{class:"tooltip","data-tip":J},Q):Q};var rM={};z(rM,{Range:()=>oM});var oM=(W)=>{let{class:Z,label:X,tooltip:J,value:Y,...L}=W,K=M("input",{...L,type:"range",class:A("range",Z),value:Y,disabled:()=>P(W.disabled)});if(!X&&!J)return K;let G=M("div",{class:"flex flex-col gap-2"},[X?M("span",{class:"label-text"},X):null,K]);return J?M("div",{class:"tooltip","data-tip":J},G):G};var aM={};z(aM,{Rating:()=>lM});var lM=(W)=>{let{class:Z,value:X,count:J=5,mask:Y="mask-star",readonly:L=!1,onchange:K,...G}=W,q=`rating-${Math.random().toString(36).slice(2,7)}`;return M("div",{...G,class:()=>A(`rating ${P(L)?"pointer-events-none":""}`,Z)},Array.from({length:P(J)},(Q,B)=>{let _=B+1;return M("input",{type:"radio",name:q,class:`mask ${Y}`,checked:()=>Math.round(P(X))===_,onchange:()=>{if(!P(L)){if(typeof K==="function")K(_);else if(typeof X==="function")X(_)}}})}))};var nM={};z(nM,{Select:()=>sM});var sM=(W)=>{let{class:Z,label:X,items:J,value:Y,...L}=W,K=M("select",{...L,class:A("select select-bordered w-full",Z),value:Y},j(()=>P(J)||[],(G)=>M("option",{value:G.value,$selected:()=>String(P(Y))===String(G.value)},G.label),(G)=>G.value));if(!X)return K;return M("label",{class:"fieldset-label flex flex-col gap-1"},[M("span",{},X),K])};var eM={};z(eM,{Stack:()=>tM});var tM=(W,Z)=>{let{class:X,...J}=W;return M("div",{...J,class:A("stack",X)},Z)};var JJ={};z(JJ,{Stat:()=>MJ});var MJ=(W)=>{let{class:Z,icon:X,label:J,value:Y,desc:L,...K}=W;return M("div",{...K,class:A("stat",Z)},[X&&M("div",{class:"stat-figure text-secondary"},X),J&&M("div",{class:"stat-title"},J),M("div",{class:"stat-value"},()=>P(Y)??Y),L&&M("div",{class:"stat-desc"},L)])};var WJ={};z(WJ,{Swap:()=>KJ});var KJ=(W)=>{let{class:Z,value:X,on:J,off:Y,...L}=W;return M("label",{...L,class:A("swap",Z)},[M("input",{type:"checkbox",checked:P(X)}),M("div",{class:"swap-on"},J),M("div",{class:"swap-off"},Y)])};var XJ={};z(XJ,{Table:()=>ZJ});var ZJ=(W)=>{let{class:Z,items:X=[],columns:J=[],keyFn:Y,zebra:L=!1,pinRows:K=!1,empty:G=x("nodata")(),...q}=W;return M("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[M("table",{...q,class:()=>{let B=P(L)?"table-zebra":"",_=P(K)?"table-pin-rows":"";return A("table",Z,B,_)}},[M("thead",{},[M("tr",{},J.map((B)=>M("th",{class:B.class||""},B.label)))]),M("tbody",{},[j(X,(B,_)=>{return M("tr",{class:"hover"},J.map((D)=>{let C=()=>{if(D.render)return D.render(B,_);let R=B[D.key];return P(R)};return M("td",{class:D.class||""},[C])}))},Y||((B,_)=>B.id||_)),E(()=>P(X).length===0,()=>M("tr",{},[M("td",{colspan:J.length,class:"text-center p-10 opacity-50"},[P(G)])]))]),E(()=>J.some((B)=>B.footer),()=>M("tfoot",{},[M("tr",{},J.map((B)=>M("th",{},B.footer||"")))]))])])};var YJ={};z(YJ,{Tabs:()=>GJ});var GJ=(W)=>{let{class:Z,items:X,activeIndex:J=U(0),...Y}=W,L=typeof X==="function"?X:()=>X||[],K=U(0),G=J!==void 0?J:K,q=(Q,B)=>(_)=>{if(typeof G==="function")G(Q);B?.(_)};return M("div",{...Y,class:"flex flex-col gap-4 w-full"},[M("div",{role:"tablist",class:A("tabs tabs-box",Z)},j(L,(Q,B)=>{let _=P(Q.active)??G()===B;return M("a",{role:"tab",class:()=>A("tab",_?"tab-active":"",P(Q.disabled)?"tab-disabled":""),onclick:!P(Q.disabled)?q(B,Q.onclick):void 0},Q.label)},(Q,B)=>Q.label+B)),()=>{let Q=L().find((_,D)=>P(_.active)??G()===D);if(!Q)return null;let B=P(Q.content);return M("div",{class:"p-4"},[typeof B==="function"?B():B])}])};var QJ={};z(QJ,{Timeline:()=>LJ});var LJ=(W)=>{let{class:Z,items:X=[],vertical:J=!0,compact:Y=!1,...L}=W,K={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return M("ul",{...L,class:()=>A(`timeline ${P(J)?"timeline-vertical":"timeline-horizontal"} ${P(Y)?"timeline-compact":""}`,Z)},[j(X,(G,q)=>{let Q=q===0,B=q===P(X).length-1,_=G.type||"success",D=(C)=>typeof C==="function"?C():C;return M("li",{class:"flex-1"},[!Q?M("hr",{class:G.completed?"bg-primary":""}):null,M("div",{class:"timeline-start"},[D(G.title)]),M("div",{class:"timeline-middle"},[G.icon?V(G.icon):V(K[_]||K.success)]),M("div",{class:"timeline-end timeline-box shadow-sm"},[D(G.detail)]),!B?M("hr",{class:G.completed?"bg-primary":""}):null])},(G,q)=>G.id||q)])};var BJ={};z(BJ,{Toast:()=>qJ});var qJ=(W,Z="alert-success",X=3500)=>{let J=document.getElementById("sigpro-toast-container");if(!J)J=M("div",{id:"sigpro-toast-container",class:"fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none"}),document.body.appendChild(J);let Y=M("div",{style:"display: contents"});J.appendChild(Y);let L,K=()=>{clearTimeout(L);let Q=Y.firstElementChild;if(Q&&!Q.classList.contains("opacity-0"))Q.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(q.destroy(),Y.remove(),!J.hasChildNodes())J.remove()},300);else q.destroy(),Y.remove()},q=WM(()=>{let Q=V("icon-[lucide--x]"),B=M("div",{class:`alert alert-soft ${Z} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[M("span",{},[typeof W==="function"?W():W]),h({class:"btn-xs btn-circle btn-ghost",onclick:K},Q)]);return requestAnimationFrame(()=>B.classList.remove("translate-x-10","opacity-0")),B},Y);if(X>0)L=setTimeout(K,X);return K};var _J={};z(_J,{Tooltip:()=>PJ});var PJ=(W,Z)=>M("div",{...W,class:()=>A("tooltip",W.ui,W.class),"data-tip":W.tip},Z);var FJ={...XM,...YM,...qM,...PM,..._M,...TM,...RM,...FM,...UM,...HM,...jM,...NM,...IM,...kM,...LM,...fM,...vM,...bM,...hM,...uM,...pM,...iM,...rM,...aM,...nM,...eM,...JJ,...WJ,...XJ,...YJ,...QJ,...BJ,..._J},kJ={...FJ,install:(W=window)=>{Object.entries(FJ).forEach(([Z,X])=>{W[Z]=X}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(o).forEach(([W,Z])=>{window[W]=Z}),window.Utils=i,window.tt=x,window.SigProUI={...o,Utils:i,tt:x},console.log("\uD83C\uDFA8 SigProUI ready");})(); diff --git a/docs/components/dropdown.md b/docs/components/dropdown.md index 437af68..511c574 100644 --- a/docs/components/dropdown.md +++ b/docs/components/dropdown.md @@ -1,6 +1,6 @@ # Dropdown -Dropdown component for creating menus, selectors, and action panels that appear when triggered. Supports both array-based items and custom content. +Dropdown component for creating menus that appear when triggered. Uses DaisyUI's native details/summary pattern. ## Tag @@ -12,11 +12,10 @@ Dropdown component for creating menus, selectors, and action panels that appear | :--- | :--- | :--- | :--- | | `label` | `string \| VNode \| Signal` | `-` | Button label or content | | `icon` | `string \| VNode \| Signal` | `-` | Icon displayed next to label | -| `items` | `Array \| Signal` | `-` | Array of menu items (alternative to children) | +| `items` | `Array \| Signal` | Required | Array of menu items | | `class` | `string` | `''` | Additional CSS classes (DaisyUI + Tailwind) | -| `children` | `VNode \| function` | `-` | Custom dropdown content (alternative to items) | -### MenuItem Structure (when using `items`) +### MenuItem Structure | Property | Type | Description | | :--- | :--- | :--- | @@ -43,14 +42,16 @@ Dropdown supports all **daisyUI Dropdown classes**: Dropdown({ label: "Menu", class: "dropdown-end dropdown-hover", - items: menuItems + items: [ + { label: "Profile", onclick: () => console.log("Profile") }, + { label: "Settings", onclick: () => console.log("Settings") } + ] }); -// Applies: right-aligned, opens on hover ``` ## Live Examples -### Basic Dropdown (Items Array) +### Basic Dropdown
@@ -73,7 +74,7 @@ const BasicDemo = () => { $mount(BasicDemo, '#demo-basic'); ``` -### With Icons (Items Array) +### With Icons
@@ -98,7 +99,7 @@ const IconsDemo = () => { $mount(IconsDemo, '#demo-icons'); ``` -### Action Dropdown (Items Array) +### Action Dropdown
@@ -126,7 +127,7 @@ const ActionsDemo = () => { $mount(ActionsDemo, '#demo-actions'); ``` -### User Dropdown (Items Array) +### User Dropdown
@@ -167,7 +168,7 @@ $mount(UserDropdown, '#demo-user'); ```javascript const ReactiveDropdown = () => { const count = $(0); - + $watch(()=>console.log(count())); const items = () => [ { label: `Count: ${count()}`, onclick: () => {} }, { label: 'Increment', onclick: () => count(count() + 1) }, @@ -183,7 +184,7 @@ const ReactiveDropdown = () => { $mount(ReactiveDropdown, '#demo-reactive'); ``` -### Notification Dropdown (Custom Children) +### Notification Dropdown
@@ -200,81 +201,34 @@ const NotificationsDropdown = () => { { id: 3, title: 'Task completed', time: '2 hours ago', read: true } ]); + const unreadCount = () => notifications().filter(n => !n.read).length; + const markAsRead = (id) => { notifications(notifications().map(n => n.id === id ? { ...n, read: true } : n )); }; - const unreadCount = () => notifications().filter(n => !n.read).length; - return Dropdown({ label: Span({ class: 'relative' }, [ '🔔', () => unreadCount() > 0 ? Span({ class: 'badge badge-xs badge-error absolute -top-1 -right-2' }, unreadCount()) : null ]), class: 'dropdown-end', - children: () => Div({ class: 'w-80' }, [ - Div({ class: 'p-3 border-b border-base-300 font-bold' }, `Notifications (${unreadCount()} unread)`), - Div({ class: 'max-h-64 overflow-y-auto' }, notifications().map(notif => - Div({ - class: `p-3 border-b border-base-300 cursor-pointer hover:bg-base-200 ${!notif.read ? 'bg-primary/5' : ''}`, - onclick: () => markAsRead(notif.id) - }, [ - Div({ class: 'font-medium' }, notif.title), - Div({ class: 'text-xs opacity-60' }, notif.time), - !notif.read && Span({ class: 'badge badge-xs badge-primary mt-1' }, 'New') - ]) - )), - Div({ class: 'p-2 text-center' }, [ - Button({ - class: 'btn btn-xs btn-ghost w-full', - onclick: () => notifications([]) - }, 'Clear all') - ]) - ]) + items: () => notifications().map(notif => ({ + label: Div({ class: 'flex flex-col' }, [ + Span({ class: 'font-medium' }, notif.title), + Span({ class: 'text-xs opacity-60' }, notif.time) + ]), + class: notif.read ? '' : 'bg-primary/5', + onclick: () => markAsRead(notif.id) + })) }); }; + $mount(NotificationsDropdown, '#demo-notifications'); ``` -### Custom Content Dropdown - -
-
-

Live Demo

-
-
-
- -```javascript -const CustomDropdown = () => { - const selected = $('Option 1'); - - return Dropdown({ - label: () => selected(), - children: () => Div({ class: 'p-4 min-w-48' }, [ - Div({ class: 'text-sm font-bold mb-2' }, 'Select an option'), - Div({ class: 'flex flex-col gap-1' }, [ - Button({ - class: 'btn btn-ghost btn-sm justify-start', - onclick: () => selected('Option 1') - }, 'Option 1'), - Button({ - class: 'btn btn-ghost btn-sm justify-start', - onclick: () => selected('Option 2') - }, 'Option 2'), - Button({ - class: 'btn btn-ghost btn-sm justify-start', - onclick: () => selected('Option 3') - }, 'Option 3') - ]) - ]) - }); -}; -$mount(CustomDropdown, '#demo-custom'); -``` - ### All Variants
diff --git a/docs/sigpro-ui.min.js b/docs/sigpro-ui.min.js index 45177bd..6514503 100644 --- a/docs/sigpro-ui.min.js +++ b/docs/sigpro-ui.min.js @@ -1,7 +1,7 @@ -(()=>{var{defineProperty:t,getOwnPropertyNames:VJ,getOwnPropertyDescriptor:HJ}=Object,EJ=Object.prototype.hasOwnProperty;var CJ=new WeakMap,jJ=(W)=>{var Z=CJ.get(W),X;if(Z)return Z;if(Z=t({},"__esModule",{value:!0}),W&&typeof W==="object"||typeof W==="function")VJ(W).map((J)=>!EJ.call(Z,J)&&t(Z,J,{get:()=>W[J],enumerable:!(X=HJ(W,J))||X.enumerable}));return CJ.set(W,Z),Z};var z=(W,Z)=>{for(var X in Z)t(W,X,{get:Z[X],enumerable:!0,configurable:!0,set:(J)=>Z[X]=()=>J})};var kJ={};z(kJ,{val:()=>P,ui:()=>A,tt:()=>x,getIcon:()=>V,Tooltip:()=>BJ,Toast:()=>QJ,Timeline:()=>YJ,Tabs:()=>XJ,Table:()=>WJ,Swap:()=>JJ,Stat:()=>eM,Stack:()=>nM,Select:()=>lM,Rating:()=>rM,Range:()=>iM,Radio:()=>pM,Navbar:()=>mM,Modal:()=>hM,Menu:()=>bM,Loading:()=>vM,List:()=>fM,Label:()=>kM,Input:()=>b,Indicator:()=>IM,Fileinput:()=>OM,Fieldset:()=>jM,Fab:()=>HM,Dropdown:()=>UM,Drawer:()=>FM,Datepicker:()=>RM,Colorpicker:()=>TM,Checkbox:()=>_M,Button:()=>g,Badge:()=>qM,Autocomplete:()=>LM,Alert:()=>XM,Accordion:()=>WM});var N=null,f=null,m=new Set,d=!1,e=new WeakMap,SJ=()=>{if(d)return;d=!0;while(m.size>0){let W=Array.from(m).sort((Z,X)=>(Z.depth||0)-(X.depth||0));m.clear();for(let Z of W)if(!Z._deleted)Z()}d=!1},RJ=(W)=>{if(N&&!N._deleted)W.add(N),N._deps.add(W)},MM=(W)=>{for(let Z of W){if(Z===N||Z._deleted)continue;if(Z._isComputed){if(Z.markDirty(),Z._subs)MM(Z._subs)}else m.add(Z)}if(!d)queueMicrotask(SJ)},JM=(W)=>{if(W._cleanups)W._cleanups.forEach((Z)=>Z()),W._cleanups.clear();W.childNodes?.forEach(JM)},p=(W)=>{let Z=new Set,X=f,J=document.createElement("div");J.style.display="contents",f={cleanups:Z};try{let Y=W({onCleanup:(K)=>Z.add(K)}),L=(K)=>{if(!K)return;if(K._isRuntime)Z.add(K.destroy),J.appendChild(K.container);else if(Array.isArray(K))K.forEach(L);else J.appendChild(K instanceof Node?K:document.createTextNode(String(K)))};L(Y)}finally{f=X}return{_isRuntime:!0,container:J,destroy:()=>{Z.forEach((Y)=>Y()),JM(J),J.remove()}}},U=(W,Z=null)=>{if(typeof W==="function"){let Y=new Set,L,K=!0,G=()=>{if(G._deleted)return;G._deps.forEach((Q)=>Q.delete(G)),G._deps.clear();let q=N;N=G;try{let Q=W();if(!Object.is(L,Q)||K)L=Q,K=!1,MM(Y)}finally{N=q}};if(G._deps=new Set,G._isComputed=!0,G._subs=Y,G._deleted=!1,G.markDirty=()=>K=!0,G.stop=()=>{G._deleted=!0,G._deps.forEach((q)=>q.delete(G)),Y.clear()},f)f.cleanups.add(G.stop);return()=>{if(K)G();return RJ(Y),L}}let X=W;if(Z)try{let Y=localStorage.getItem(Z);if(Y!==null)X=JSON.parse(Y)}catch(Y){console.warn("SigPro: LocalStorage locked",Y)}let J=new Set;return(...Y)=>{if(Y.length){let L=typeof Y[0]==="function"?Y[0](X):Y[0];if(!Object.is(X,L)){if(X=L,Z)localStorage.setItem(Z,JSON.stringify(X));MM(J)}}return RJ(J),X}},y=(W,Z)=>{let X=Array.isArray(W),J=X?Z:W,Y=X?W:null;if(typeof J!=="function")return()=>{};let L=f,K=()=>{if(K._deleted)return;K._deps.forEach((Q)=>Q.delete(K)),K._deps.clear(),K._cleanups.forEach((Q)=>Q()),K._cleanups.clear();let G=N,q=f;N=K,f={cleanups:K._cleanups},K.depth=G?G.depth+1:0;try{if(X)N=null,J(),N=K,Y.forEach((Q)=>typeof Q==="function"&&Q());else J()}finally{N=G,f=q}};if(K._deps=new Set,K._cleanups=new Set,K._deleted=!1,K.stop=()=>{if(K._deleted)return;if(K._deleted=!0,m.delete(K),K._deps.forEach((G)=>G.delete(K)),K._cleanups.forEach((G)=>G()),L)L.cleanups.delete(K.stop)},L)L.cleanups.add(K.stop);return K(),K.stop},M=(W,Z={},X=[])=>{if(Z instanceof Node||Array.isArray(Z)||typeof Z!=="object")X=Z,Z={};let J=document.createElement(W),Y=(K,G)=>(K==="src"||K==="href")&&String(G).toLowerCase().includes("javascript:")?"#":G;J._cleanups=new Set;for(let[K,G]of Object.entries(Z)){if(K==="ref"){typeof G==="function"?G(J):G.current=J;continue}let q=typeof G==="function";if(["INPUT","TEXTAREA","SELECT"].includes(J.tagName)&&(K==="value"||K==="checked")&&q){J._cleanups.add(y(()=>{let C=G();if(J[K]!==C)J[K]=C}));let _=K==="checked"?"change":"input",D=(C)=>G(C.target[K]);J.addEventListener(_,D),J._cleanups.add(()=>J.removeEventListener(_,D))}else if(K.startsWith("on")){let _=K.slice(2).toLowerCase().split(".")[0],D=(C)=>G(C);J.addEventListener(_,D),J._cleanups.add(()=>J.removeEventListener(_,D))}else if(q)J._cleanups.add(y(()=>{let _=Y(K,G());if(K==="class")J.className=_||"";else _==null?J.removeAttribute(K):J.setAttribute(K,_)}));else J.setAttribute(K,Y(K,G))}let L=(K)=>{if(Array.isArray(K))return K.forEach(L);if(typeof K==="function"){let G=document.createTextNode("");J.appendChild(G);let q=[];J._cleanups.add(y(()=>{let Q=K(),B=(Array.isArray(Q)?Q:[Q]).map((_)=>_?._isRuntime?_.container:_ instanceof Node?_:document.createTextNode(_??""));q.forEach((_)=>{JM(_),_.remove()}),B.forEach((_)=>G.parentNode?.insertBefore(_,G)),q=B}))}else J.appendChild(K instanceof Node?K:document.createTextNode(K??""))};return L(X),J},j=(W,Z,X=null)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=null,K=null;return y(()=>{let G=!!(typeof W==="function"?W():W);if(G!==K){if(K=G,L)L.destroy();let q=G?Z:X;if(q)L=p(()=>typeof q==="function"?q():q),Y.insertBefore(L.container,J)}}),Y};j.not=(W,Z,X)=>j(()=>!(typeof W==="function"?W():W),Z,X);var E=(W,Z,X)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=new Map;return y(()=>{let K=(typeof W==="function"?W():W)||[],G=new Map,q=[];for(let B=0;BZ(_,B));else L.delete(D);G.set(D,C),q.push(D)}L.forEach((B)=>{B.destroy(),B.container.remove()});let Q=J;for(let B=q.length-1;B>=0;B--){let _=G.get(q[B]);if(_.container.nextSibling!==Q)Y.insertBefore(_.container,Q);Q=_.container}L=G}),Y},$=(W)=>{let Z=U(window.location.hash.replace(/^#/,"")||"/");window.addEventListener("hashchange",()=>Z(window.location.hash.replace(/^#/,"")||"/"));let X=M("div",{class:"router-outlet"}),J=null;return y([Z],async()=>{let Y=Z(),L=W.find((K)=>{let G=K.path.split("/").filter(Boolean),q=Y.split("/").filter(Boolean);return G.length===q.length&&G.every((Q,B)=>Q.startsWith(":")||Q===q[B])})||W.find((K)=>K.path==="*");if(L){let K=L.component;if(typeof K==="function"&&K.toString().includes("import"))K=(await K()).default||await K();let G={};if(L.path.split("/").filter(Boolean).forEach((q,Q)=>{if(q.startsWith(":"))G[q.slice(1)]=Y.split("/").filter(Boolean)[Q]}),J)J.destroy();if($.params)$.params(G);J=p(()=>{try{return typeof K==="function"?K(G):K}catch(q){return M("div",{class:"p-4 text-error"},"Error loading view")}}),X.appendChild(J.container)}}),X};$.params=U({});$.to=(W)=>window.location.hash=W.replace(/^#?\/?/,"#/");$.back=()=>window.history.back();$.path=()=>window.location.hash.replace(/^#/,"")||"/";var KM=(W,Z)=>{let X=typeof Z==="string"?document.querySelector(Z):Z;if(!X)return;if(e.has(X))e.get(X).destroy();let J=p(typeof W==="function"?W:()=>W);return X.replaceChildren(J.container),e.set(X,J),J},OJ={$:U,$watch:y,$html:M,$if:j,$for:E,$router:$,$mount:KM};if(typeof window<"u")((Z)=>{Object.keys(Z).forEach((J)=>{window[J]=Z[J]}),"div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer address ul ol li dl dt dd a em strong small i b u mark time sub sup pre code blockquote details summary dialog form label input textarea select button option fieldset legend table thead tbody tfoot tr th td caption img video audio canvas svg iframe picture source progress meter".split(/\s+/).forEach((J)=>{let Y=J.charAt(0).toUpperCase()+J.slice(1);if(!(Y in window))window[Y]=(L,K)=>M(J,L,K)}),window.SigPro=Object.freeze(Z)})(OJ);var i={};z(i,{default:()=>xJ,Tooltip:()=>BJ,Toast:()=>QJ,Timeline:()=>YJ,Tabs:()=>XJ,Table:()=>WJ,Swap:()=>JJ,Stat:()=>eM,Stack:()=>nM,Select:()=>lM,Rating:()=>rM,Range:()=>iM,Radio:()=>pM,Navbar:()=>mM,Modal:()=>hM,Menu:()=>bM,Loading:()=>vM,List:()=>fM,Label:()=>kM,Input:()=>b,Indicator:()=>IM,Fileinput:()=>OM,Fieldset:()=>jM,Fab:()=>HM,Dropdown:()=>UM,Drawer:()=>FM,Datepicker:()=>RM,Colorpicker:()=>TM,Checkbox:()=>_M,Button:()=>g,Badge:()=>qM,Autocomplete:()=>LM,Alert:()=>XM,Accordion:()=>WM});var ZM={};z(ZM,{Accordion:()=>WM});var c={};z(c,{val:()=>P,ui:()=>A,getIcon:()=>V});var P=(W)=>typeof W==="function"?W():W,A=(W,Z)=>typeof Z==="function"?()=>`${W} ${Z()||""}`.trim():`${W} ${Z||""}`.trim(),V=(W)=>{if(!W)return null;if(typeof W==="function")return M("span",{class:"mr-1"},W());if(typeof W==="object")return M("span",{class:"mr-1"},W);if(typeof W==="string"){let Z=W.trim().split(/\s+/),X=Z[Z.length-1]==="right",J=X?Z.slice(0,-1).join(" "):W,Y=X?"ml-1":"mr-1";if(J&&!J.startsWith("icon-[")&&!J.includes("--"))return M("span",{class:Y},J);return M("span",{class:`${J} ${Y}`.trim()})}return null};var WM=(W,Z)=>{let{class:X,title:J,name:Y,open:L,...K}=W;return M("div",{...K,class:A("collapse collapse-arrow bg-base-200 mb-2",X)},[M("input",{type:Y?"radio":"checkbox",name:Y,checked:P(L)}),M("div",{class:"collapse-title text-xl font-medium"},J),M("div",{class:"collapse-content"},Z)])};var GM={};z(GM,{Alert:()=>XM});var XM=(W,Z)=>{let{class:X,actions:J,type:Y="info",soft:L=!0,...K}=W,G={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},B=[`alert-${Y}`,L?"alert-soft":"",X].filter(Boolean).join(" "),_=Z||W.message;return M("div",{...K,role:"alert",class:A("alert",B)},()=>[V(G[Y]),M("div",{class:"flex-1"},[M("span",{},[typeof _==="function"?_():_])]),J?M("div",{class:"flex-none"},[typeof J==="function"?J():J]):null].filter(Boolean))};var QM={};z(QM,{Autocomplete:()=>LM});var NJ={es:{close:"Cerrar",confirm:"Confirmar",cancel:"Cancelar",search:"Buscar...",loading:"Cargando...",nodata:"Sin datos"},en:{close:"Close",confirm:"Confirm",cancel:"Cancel",search:"Search...",loading:"Loading...",nodata:"No data"}},IJ=U("es");var x=(W)=>()=>NJ[IJ()][W]||W;var YM={};z(YM,{Input:()=>b});var b=(W)=>{let{class:Z,value:X,type:J="text",icon:Y,oninput:L,placeholder:K,disabled:G,size:q,...Q}=W,B=J==="password",_=U(!1),D={text:"icon-[lucide--text]",password:"icon-[lucide--lock]",date:"icon-[lucide--calendar]",number:"icon-[lucide--hash]",email:"icon-[lucide--mail]",search:"icon-[lucide--search]",tel:"icon-[lucide--phone]",url:"icon-[lucide--link]"},C=Y?V(Y):D[J]?V(D[J]):null,R=()=>V(_()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),H=C?"pl-10":"",O=B?"pr-10":"",o=()=>{if(Z?.includes("input-xs"))return"btn-xs";if(Z?.includes("input-sm"))return"btn-sm";if(Z?.includes("input-lg"))return"btn-lg";return"btn-md"};return M("div",{class:"relative w-full"},()=>[M("input",{...Q,type:()=>B?_()?"text":"password":J,placeholder:K||" ",class:A("input w-full",`${H} ${O} ${Z||""}`.trim()),value:X,oninput:(h)=>L?.(h),disabled:()=>P(G)}),C?M("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},C):null,B?M("button",{type:"button",class:A("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",o()),onclick:(h)=>{h.preventDefault(),_(!_())}},()=>R()):null])};var LM=(W)=>{let{class:Z,items:X=[],value:J,onSelect:Y,label:L,placeholder:K,...G}=W,q=U(P(J)||""),Q=U(!1),B=U(-1),_=U(()=>{let R=q().toLowerCase(),H=P(X)||[];return R?H.filter((O)=>(typeof O==="string"?O:O.label).toLowerCase().includes(R)):H}),D=(R)=>{let H=typeof R==="string"?R:R.value,O=typeof R==="string"?R:R.label;if(q(O),typeof J==="function")J(H);Y?.(R),Q(!1),B(-1)},C=(R)=>{let H=_();if(R.key==="ArrowDown")R.preventDefault(),Q(!0),B(Math.min(B()+1,H.length-1));else if(R.key==="ArrowUp")R.preventDefault(),B(Math.max(B()-1,0));else if(R.key==="Enter"&&B()>=0)R.preventDefault(),D(H[B()]);else if(R.key==="Escape")Q(!1)};return M("div",{class:"relative w-full"},[b({label:L,class:Z,placeholder:K||x("search")(),value:q,onfocus:()=>Q(!0),onblur:()=>setTimeout(()=>Q(!1),150),onkeydown:C,oninput:(R)=>{let H=R.target.value;if(q(H),typeof J==="function")J(H);Q(!0),B(-1)},...G}),M("ul",{class:"absolute left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50",style:()=>Q()&&_().length?"display:block":"display:none"},[E(_,(R,H)=>M("li",{},[M("a",{class:()=>`block w-full ${B()===H?"active bg-primary text-primary-content":""}`,onclick:()=>D(R),onmouseenter:()=>B(H)},typeof R==="string"?R:R.label)]),(R,H)=>(typeof R==="string"?R:R.value)+H),()=>_().length?null:M("li",{class:"p-2 text-center opacity-50"},x("nodata")())])])};var BM={};z(BM,{Badge:()=>qM});var qM=(W,Z)=>{let{class:X,...J}=W;return M("span",{...J,class:A("badge",X)},Z)};var PM={};z(PM,{Button:()=>g});var g=(W,Z)=>{let{class:X,loading:J,icon:Y,...L}=W,K=V(Y);return M("button",{...L,class:A("btn",X),disabled:()=>P(J)||P(W.disabled)},()=>[P(J)&&M("span",{class:"loading loading-spinner"}),K,Z].filter(Boolean))};var AM={};z(AM,{Checkbox:()=>_M});var _M=(W)=>{let{class:Z,value:X,tooltip:J,toggle:Y,label:L,...K}=W,G=M("input",{...K,type:"checkbox",class:()=>A(P(Y)?"toggle":"checkbox",Z),checked:X}),q=M("label",{class:"label cursor-pointer justify-start gap-3"},[G,L?M("span",{class:"label-text"},L):null]);return J?M("div",{class:"tooltip","data-tip":J},q):q};var CM={};z(CM,{Colorpicker:()=>TM});var TM=(W)=>{let{class:Z,value:X,label:J,...Y}=W,L=U(!1),K=["#000","#1A1A1A","#333","#4D4D4D","#666","#808080","#B3B3B3","#FFF","#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626","#ef4444","#f87171","#fca5a5","#431407","#7c2d12","#9a3412","#c2410c","#ea580c","#f97316","#fb923c","#ffedd5","#713f12","#a16207","#ca8a04","#eab308","#facc15","#fde047","#fef08a","#fff9c4","#064e3b","#065f46","#059669","#10b981","#34d399","#4ade80","#84cc16","#d9f99d","#082f49","#075985","#0284c7","#0ea5e9","#38bdf8","#7dd3fc","#22d3ee","#cffafe","#1e1b4b","#312e81","#4338ca","#4f46e5","#6366f1","#818cf8","#a5b4fc","#e0e7ff","#2e1065","#4c1d95","#6d28d9","#7c3aed","#8b5cf6","#a855f7","#d946ef","#fae8ff"],G=()=>P(X)||"#000000";return M("div",{class:A("relative w-fit",Z)},[M("button",{type:"button",class:"btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case",onclick:(q)=>{q.stopPropagation(),L(!L())},...Y},[M("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${G()}`}),J?M("span",{class:"opacity-80"},J):null]),j(L,()=>M("div",{class:"absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none",onclick:(q)=>q.stopPropagation()},[M("div",{class:"grid grid-cols-8 gap-1"},K.map((q)=>M("button",{type:"button",style:`background-color: ${q}`,class:()=>{return`size-6 rounded-sm cursor-pointer transition-all hover:scale-125 hover:z-10 active:scale-95 outline-none border border-black/5 - ${G().toLowerCase()===q.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof X==="function")X(q);L(!1)}})))])),j(L,()=>M("div",{class:"fixed inset-0 z-[100]",onclick:()=>L(!1)}))])};var zM={};z(zM,{Datepicker:()=>RM});var RM=(W)=>{let{class:Z,value:X,range:J,label:Y,placeholder:L,hour:K=!1,...G}=W,q=U(!1),Q=U(new Date),B=U(null),_=U(0),D=U(0),C=()=>P(J)===!0,R=new Date,H=`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}-${String(R.getDate()).padStart(2,"0")}`,O=(T)=>{let F=T.getFullYear(),S=String(T.getMonth()+1).padStart(2,"0"),k=String(T.getDate()).padStart(2,"0");return`${F}-${S}-${k}`},o=(T)=>{let F=O(T),S=P(X);if(C())if(!S?.start||S.start&&S.end){if(typeof X==="function")X({start:F,end:null,...K&&{startHour:_()}})}else{let k=S.start;if(typeof X==="function"){let u=F{let T=P(X);if(!T)return"";if(typeof T==="string"){if(K&&T.includes("T"))return T.replace("T"," ");return T}if(T.start&&T.end){let F=K&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start,S=K&&T.endHour?`${T.end} ${String(T.endHour).padStart(2,"0")}:00`:T.end;return`${F} - ${S}`}if(T.start)return`${K&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start}...`;return""}),_J=(T)=>{let F=Q();Q(new Date(F.getFullYear(),F.getMonth()+T,1))},AJ=(T)=>{let F=Q();Q(new Date(F.getFullYear()+T,F.getMonth(),1))},r=({value:T,onChange:F})=>{return M("div",{class:"flex-1"},[M("div",{class:"flex gap-2 items-center"},[M("input",{type:"range",min:0,max:23,value:T,class:"range range-xs flex-1",oninput:(S)=>{let k=parseInt(S.target.value);F(k)}}),M("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(P(T)).padStart(2,"0")+":00")])])};return M("div",{class:A("relative w-full",Z)},[b({label:Y,placeholder:L||(C()?"Seleccionar rango...":"Seleccionar fecha..."),value:h,readonly:!0,icon:V("icon-[lucide--calendar]"),onclick:(T)=>{T.stopPropagation(),q(!q())},...G}),j(q,()=>M("div",{class:"absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none",onclick:(T)=>T.stopPropagation()},[M("div",{class:"flex justify-between items-center mb-4 gap-1"},[M("div",{class:"flex gap-0.5"},[M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>AJ(-1)},V("icon-[lucide--chevrons-left]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>_J(-1)},V("icon-[lucide--chevron-left]"))]),M("span",{class:"font-bold uppercase flex-1 text-center"},[()=>Q().toLocaleString("es-ES",{month:"short",year:"numeric"})]),M("div",{class:"flex gap-0.5"},[M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>_J(1)},V("icon-[lucide--chevron-right]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>AJ(1)},V("icon-[lucide--chevrons-right]"))])]),M("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>B(null)},[...["L","M","X","J","V","S","D"].map((T)=>M("div",{class:"text-[10px] opacity-40 font-bold text-center"},T)),()=>{let T=Q(),F=T.getFullYear(),S=T.getMonth(),k=new Date(F,S,1).getDay(),u=k===0?6:k-1,FJ=new Date(F,S+1,0).getDate(),a=[];for(let v=0;v{let w=P(X),l=B(),DJ=typeof w==="string"?w.split("T")[0]===I:w?.start===I,UJ=w?.end===I,s=!1;if(C()&&w?.start){let n=w.start;if(!w.end&&l)s=I>n&&I<=l||I=l;else if(w.end)s=I>n&&I{if(C())B(I)},onclick:()=>o(TJ)},[v.toString()]))}return a}]),K?M("div",{class:"mt-3 pt-2 border-t border-base-300"},[C()?M("div",{class:"flex gap-4"},[r({value:_,onChange:(T)=>{_(T);let F=P(X);if(F?.start)X({...F,startHour:T})}}),r({value:D,onChange:(T)=>{D(T);let F=P(X);if(F?.end)X({...F,endHour:T})}})]):r({value:_,onChange:(T)=>{_(T);let F=P(X);if(F&&typeof F==="string"&&F.includes("-"))X(F.split("T")[0]+"T"+String(T).padStart(2,"0")+":00:00")}})]):null])),j(q,()=>M("div",{class:"fixed inset-0 z-[90]",onclick:()=>q(!1)}))])};var DM={};z(DM,{Drawer:()=>FM});var FM=(W,Z)=>{let{class:X,id:J,open:Y,side:L,content:K,...G}=W,q=J||`drawer-${Math.random().toString(36).slice(2,9)}`;return M("div",{...G,class:A("drawer",X)},[M("input",{id:q,type:"checkbox",class:"drawer-toggle",checked:()=>typeof Y==="function"?Y():Y,onchange:(Q)=>{if(typeof Y==="function")Y(Q.target.checked)}}),M("div",{class:"drawer-content"},[typeof K==="function"?K():K]),M("div",{class:"drawer-side"},[M("label",{for:q,class:"drawer-overlay",onclick:()=>{if(typeof Y==="function")Y(!1)}}),M("div",{class:"min-h-full bg-base-200 w-80"},[typeof L==="function"?L():L])])])};var VM={};z(VM,{Dropdown:()=>UM});var UM=(W,Z)=>{let{class:X,label:J,icon:Y,items:L,...K}=W,G=()=>{if(L)return M("ul",{tabindex:0,class:"dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300"},[E(typeof L==="function"?L:()=>L,(Q)=>M("li",{},[M("a",{class:Q.class||"",onclick:(B)=>{if(Q.onclick)Q.onclick(B);if(document.activeElement)document.activeElement.blur()}},[Q.icon?M("span",{},Q.icon):null,M("span",{},Q.label)])]))]);return M("div",{tabindex:0,class:"dropdown-content z-[50] p-2 shadow bg-base-100 rounded-box min-w-max border border-base-300"},[typeof Z==="function"?Z():Z])};return M("div",{...K,class:A("dropdown",X)},[M("div",{tabindex:0,role:"button",class:"btn m-1 flex items-center gap-2"},[Y?typeof Y==="function"?Y():Y:null,J?typeof J==="function"?J():J:null]),G()])};var EM={};z(EM,{Fab:()=>HM});var HM=(W)=>{let{class:Z,icon:X,label:J,actions:Y=[],position:L="bottom-6 right-6",...K}=W;return M("div",{...K,class:A(`fab absolute ${L} flex flex-col-reverse items-end gap-3 z-[100]`,Z)},[M("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[X?V(X):null,!X&&J?J:null]),...P(Y).map((G)=>M("div",{class:"flex items-center gap-3 transition-all duration-300"},[G.label?M("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},G.label):null,M("button",{type:"button",class:`btn btn-circle shadow-lg ${G.class||""}`,onclick:(q)=>{q.stopPropagation(),G.onclick?.(q)}},[G.icon?V(G.icon):G.text||""])]))])};var SM={};z(SM,{Fieldset:()=>jM});var jM=(W,Z)=>{let{class:X,legend:J,...Y}=W;return M("fieldset",{...Y,class:A("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",X)},[()=>{let L=P(J);return L?M("legend",{class:"fieldset-legend font-bold"},[L]):null},Z])};var NM={};z(NM,{Fileinput:()=>OM});var OM=(W)=>{let{class:Z,tooltip:X,max:J=2,accept:Y="*",onSelect:L,...K}=W,G=U([]),q=U(!1),Q=U(null),B=J*1024*1024,_=(C)=>{let R=Array.from(C);if(Q(null),R.find((O)=>O.size>B)){Q(`Máx ${J}MB`);return}G([...G(),...R]),L?.(G())},D=(C)=>{let R=G().filter((H,O)=>O!==C);G(R),L?.(R)};return M("fieldset",{...K,class:A("fieldset w-full p-0",Z)},[M("div",{class:()=>`w-full ${X?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":X},[M("label",{class:()=>` +(()=>{var{defineProperty:e,getOwnPropertyNames:HJ,getOwnPropertyDescriptor:EJ}=Object,jJ=Object.prototype.hasOwnProperty;var RJ=new WeakMap,SJ=(W)=>{var Z=RJ.get(W),X;if(Z)return Z;if(Z=e({},"__esModule",{value:!0}),W&&typeof W==="object"||typeof W==="function")HJ(W).map((J)=>!jJ.call(Z,J)&&e(Z,J,{get:()=>W[J],enumerable:!(X=EJ(W,J))||X.enumerable}));return RJ.set(W,Z),Z};var z=(W,Z)=>{for(var X in Z)e(W,X,{get:Z[X],enumerable:!0,configurable:!0,set:(J)=>Z[X]=()=>J})};var wJ={};z(wJ,{val:()=>P,ui:()=>A,tt:()=>x,getIcon:()=>V,Tooltip:()=>PJ,Toast:()=>qJ,Timeline:()=>LJ,Tabs:()=>GJ,Table:()=>ZJ,Swap:()=>KJ,Stat:()=>MJ,Stack:()=>tM,Select:()=>sM,Rating:()=>lM,Range:()=>oM,Radio:()=>cM,Navbar:()=>dM,Modal:()=>mM,Menu:()=>gM,Loading:()=>$M,List:()=>yM,Label:()=>wM,Input:()=>g,Indicator:()=>xM,Fileinput:()=>OM,Fieldset:()=>SM,Fab:()=>EM,Dropdown:()=>VM,Drawer:()=>DM,Datepicker:()=>zM,Colorpicker:()=>CM,Checkbox:()=>AM,Button:()=>h,Badge:()=>BM,Autocomplete:()=>QM,Alert:()=>GM,Accordion:()=>ZM});var O=null,y=null,d=new Set,p=!1,MM=new WeakMap,NJ=()=>{if(p)return;p=!0;while(d.size>0){let W=Array.from(d).sort((Z,X)=>(Z.depth||0)-(X.depth||0));d.clear();for(let Z of W)if(!Z._deleted)Z()}p=!1},zJ=(W)=>{if(O&&!O._deleted)W.add(O),O._deps.add(W)},JM=(W)=>{for(let Z of W){if(Z===O||Z._deleted)continue;if(Z._isComputed){if(Z.markDirty(),Z._subs)JM(Z._subs)}else d.add(Z)}if(!p)queueMicrotask(NJ)},KM=(W)=>{if(W._cleanups)W._cleanups.forEach((Z)=>Z()),W._cleanups.clear();W.childNodes?.forEach(KM)},c=(W)=>{let Z=new Set,X=y,J=document.createElement("div");J.style.display="contents",y={cleanups:Z};try{let Y=W({onCleanup:(K)=>Z.add(K)}),L=(K)=>{if(!K)return;if(K._isRuntime)Z.add(K.destroy),J.appendChild(K.container);else if(Array.isArray(K))K.forEach(L);else J.appendChild(K instanceof Node?K:document.createTextNode(String(K)))};L(Y)}finally{y=X}return{_isRuntime:!0,container:J,destroy:()=>{Z.forEach((Y)=>Y()),KM(J),J.remove()}}},U=(W,Z=null)=>{if(typeof W==="function"){let Y=new Set,L,K=!0,G=()=>{if(G._deleted)return;G._deps.forEach((Q)=>Q.delete(G)),G._deps.clear();let q=O;O=G;try{let Q=W();if(!Object.is(L,Q)||K)L=Q,K=!1,JM(Y)}finally{O=q}};if(G._deps=new Set,G._isComputed=!0,G._subs=Y,G._deleted=!1,G.markDirty=()=>K=!0,G.stop=()=>{G._deleted=!0,G._deps.forEach((q)=>q.delete(G)),Y.clear()},y)y.cleanups.add(G.stop);return()=>{if(K)G();return zJ(Y),L}}let X=W;if(Z)try{let Y=localStorage.getItem(Z);if(Y!==null)X=JSON.parse(Y)}catch(Y){console.warn("SigPro: LocalStorage locked",Y)}let J=new Set;return(...Y)=>{if(Y.length){let L=typeof Y[0]==="function"?Y[0](X):Y[0];if(!Object.is(X,L)){if(X=L,Z)localStorage.setItem(Z,JSON.stringify(X));JM(J)}}return zJ(J),X}},v=(W,Z)=>{let X=Array.isArray(W),J=X?Z:W,Y=X?W:null;if(typeof J!=="function")return()=>{};let L=y,K=()=>{if(K._deleted)return;K._deps.forEach((Q)=>Q.delete(K)),K._deps.clear(),K._cleanups.forEach((Q)=>Q()),K._cleanups.clear();let G=O,q=y;O=K,y={cleanups:K._cleanups},K.depth=G?G.depth+1:0;try{if(X)O=null,J(),O=K,Y.forEach((Q)=>typeof Q==="function"&&Q());else J()}finally{O=G,y=q}};if(K._deps=new Set,K._cleanups=new Set,K._deleted=!1,K.stop=()=>{if(K._deleted)return;if(K._deleted=!0,d.delete(K),K._deps.forEach((G)=>G.delete(K)),K._cleanups.forEach((G)=>G()),L)L.cleanups.delete(K.stop)},L)L.cleanups.add(K.stop);return K(),K.stop},M=(W,Z={},X=[])=>{if(Z instanceof Node||Array.isArray(Z)||typeof Z!=="object")X=Z,Z={};let J=document.createElement(W),Y=(K,G)=>(K==="src"||K==="href")&&String(G).toLowerCase().includes("javascript:")?"#":G;J._cleanups=new Set;for(let[K,G]of Object.entries(Z)){if(K==="ref"){typeof G==="function"?G(J):G.current=J;continue}let q=typeof G==="function";if(["INPUT","TEXTAREA","SELECT"].includes(J.tagName)&&(K==="value"||K==="checked")&&q){J._cleanups.add(v(()=>{let C=G();if(J[K]!==C)J[K]=C}));let _=K==="checked"?"change":"input",D=(C)=>G(C.target[K]);J.addEventListener(_,D),J._cleanups.add(()=>J.removeEventListener(_,D))}else if(K.startsWith("on")){let _=K.slice(2).toLowerCase().split(".")[0],D=(C)=>G(C);J.addEventListener(_,D),J._cleanups.add(()=>J.removeEventListener(_,D))}else if(q)J._cleanups.add(v(()=>{let _=Y(K,G());if(K==="class")J.className=_||"";else _==null?J.removeAttribute(K):J.setAttribute(K,_)}));else J.setAttribute(K,Y(K,G))}let L=(K)=>{if(Array.isArray(K))return K.forEach(L);if(typeof K==="function"){let G=document.createTextNode("");J.appendChild(G);let q=[];J._cleanups.add(v(()=>{let Q=K(),B=(Array.isArray(Q)?Q:[Q]).map((_)=>_?._isRuntime?_.container:_ instanceof Node?_:document.createTextNode(_??""));q.forEach((_)=>{KM(_),_.remove()}),B.forEach((_)=>G.parentNode?.insertBefore(_,G)),q=B}))}else J.appendChild(K instanceof Node?K:document.createTextNode(K??""))};return L(X),J},E=(W,Z,X=null)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=null,K=null;return v(()=>{let G=!!(typeof W==="function"?W():W);if(G!==K){if(K=G,L)L.destroy();let q=G?Z:X;if(q)L=c(()=>typeof q==="function"?q():q),Y.insertBefore(L.container,J)}}),Y};E.not=(W,Z,X)=>E(()=>!(typeof W==="function"?W():W),Z,X);var j=(W,Z,X)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=new Map;return v(()=>{let K=(typeof W==="function"?W():W)||[],G=new Map,q=[];for(let B=0;BZ(_,B));else L.delete(D);G.set(D,C),q.push(D)}L.forEach((B)=>{B.destroy(),B.container.remove()});let Q=J;for(let B=q.length-1;B>=0;B--){let _=G.get(q[B]);if(_.container.nextSibling!==Q)Y.insertBefore(_.container,Q);Q=_.container}L=G}),Y},b=(W)=>{let Z=U(window.location.hash.replace(/^#/,"")||"/");window.addEventListener("hashchange",()=>Z(window.location.hash.replace(/^#/,"")||"/"));let X=M("div",{class:"router-outlet"}),J=null;return v([Z],async()=>{let Y=Z(),L=W.find((K)=>{let G=K.path.split("/").filter(Boolean),q=Y.split("/").filter(Boolean);return G.length===q.length&&G.every((Q,B)=>Q.startsWith(":")||Q===q[B])})||W.find((K)=>K.path==="*");if(L){let K=L.component;if(typeof K==="function"&&K.toString().includes("import"))K=(await K()).default||await K();let G={};if(L.path.split("/").filter(Boolean).forEach((q,Q)=>{if(q.startsWith(":"))G[q.slice(1)]=Y.split("/").filter(Boolean)[Q]}),J)J.destroy();if(b.params)b.params(G);J=c(()=>{try{return typeof K==="function"?K(G):K}catch(q){return M("div",{class:"p-4 text-error"},"Error loading view")}}),X.appendChild(J.container)}}),X};b.params=U({});b.to=(W)=>window.location.hash=W.replace(/^#?\/?/,"#/");b.back=()=>window.history.back();b.path=()=>window.location.hash.replace(/^#/,"")||"/";var WM=(W,Z)=>{let X=typeof Z==="string"?document.querySelector(Z):Z;if(!X)return;if(MM.has(X))MM.get(X).destroy();let J=c(typeof W==="function"?W:()=>W);return X.replaceChildren(J.container),MM.set(X,J),J},OJ={$:U,$watch:v,$html:M,$if:E,$for:j,$router:b,$mount:WM};if(typeof window<"u")((Z)=>{Object.keys(Z).forEach((J)=>{window[J]=Z[J]}),"div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer address ul ol li dl dt dd a em strong small i b u mark time sub sup pre code blockquote details summary dialog form label input textarea select button option fieldset legend table thead tbody tfoot tr th td caption img video audio canvas svg iframe picture source progress meter".split(/\s+/).forEach((J)=>{let Y=J.charAt(0).toUpperCase()+J.slice(1);if(!(Y in window))window[Y]=(L,K)=>M(J,L,K)}),window.SigPro=Object.freeze(Z)})(OJ);var o={};z(o,{default:()=>kJ,Tooltip:()=>PJ,Toast:()=>qJ,Timeline:()=>LJ,Tabs:()=>GJ,Table:()=>ZJ,Swap:()=>KJ,Stat:()=>MJ,Stack:()=>tM,Select:()=>sM,Rating:()=>lM,Range:()=>oM,Radio:()=>cM,Navbar:()=>dM,Modal:()=>mM,Menu:()=>gM,Loading:()=>$M,List:()=>yM,Label:()=>wM,Input:()=>g,Indicator:()=>xM,Fileinput:()=>OM,Fieldset:()=>SM,Fab:()=>EM,Dropdown:()=>VM,Drawer:()=>DM,Datepicker:()=>zM,Colorpicker:()=>CM,Checkbox:()=>AM,Button:()=>h,Badge:()=>BM,Autocomplete:()=>QM,Alert:()=>GM,Accordion:()=>ZM});var XM={};z(XM,{Accordion:()=>ZM});var i={};z(i,{val:()=>P,ui:()=>A,getIcon:()=>V});var P=(W)=>typeof W==="function"?W():W,A=(W,Z)=>typeof Z==="function"?()=>`${W} ${Z()||""}`.trim():`${W} ${Z||""}`.trim(),V=(W)=>{if(!W)return null;if(typeof W==="function")return M("span",{class:"mr-1"},W());if(typeof W==="object")return M("span",{class:"mr-1"},W);if(typeof W==="string"){let Z=W.trim().split(/\s+/),X=Z[Z.length-1]==="right",J=X?Z.slice(0,-1).join(" "):W,Y=X?"ml-1":"mr-1";if(J&&!J.startsWith("icon-[")&&!J.includes("--"))return M("span",{class:Y},J);return M("span",{class:`${J} ${Y}`.trim()})}return null};var ZM=(W,Z)=>{let{class:X,title:J,name:Y,open:L,...K}=W;return M("div",{...K,class:A("collapse collapse-arrow bg-base-200 mb-2",X)},[M("input",{type:Y?"radio":"checkbox",name:Y,checked:P(L)}),M("div",{class:"collapse-title text-xl font-medium"},J),M("div",{class:"collapse-content"},Z)])};var YM={};z(YM,{Alert:()=>GM});var GM=(W,Z)=>{let{class:X,actions:J,type:Y="info",soft:L=!0,...K}=W,G={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},B=[`alert-${Y}`,L?"alert-soft":"",X].filter(Boolean).join(" "),_=Z||W.message;return M("div",{...K,role:"alert",class:A("alert",B)},()=>[V(G[Y]),M("div",{class:"flex-1"},[M("span",{},[typeof _==="function"?_():_])]),J?M("div",{class:"flex-none"},[typeof J==="function"?J():J]):null].filter(Boolean))};var qM={};z(qM,{Autocomplete:()=>QM});var IJ={es:{close:"Cerrar",confirm:"Confirmar",cancel:"Cancelar",search:"Buscar...",loading:"Cargando...",nodata:"Sin datos"},en:{close:"Close",confirm:"Confirm",cancel:"Cancel",search:"Search...",loading:"Loading...",nodata:"No data"}},xJ=U("es");var x=(W)=>()=>IJ[xJ()][W]||W;var LM={};z(LM,{Input:()=>g});var g=(W)=>{let{class:Z,value:X,type:J="text",icon:Y,oninput:L,placeholder:K,disabled:G,size:q,...Q}=W,B=J==="password",_=U(!1),D={text:"icon-[lucide--text]",password:"icon-[lucide--lock]",date:"icon-[lucide--calendar]",number:"icon-[lucide--hash]",email:"icon-[lucide--mail]",search:"icon-[lucide--search]",tel:"icon-[lucide--phone]",url:"icon-[lucide--link]"},C=Y?V(Y):D[J]?V(D[J]):null,R=()=>V(_()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),H=C?"pl-10":"",N=B?"pr-10":"",r=()=>{if(Z?.includes("input-xs"))return"btn-xs";if(Z?.includes("input-sm"))return"btn-sm";if(Z?.includes("input-lg"))return"btn-lg";return"btn-md"};return M("div",{class:"relative w-full"},()=>[M("input",{...Q,type:()=>B?_()?"text":"password":J,placeholder:K||" ",class:A("input w-full",`${H} ${N} ${Z||""}`.trim()),value:X,oninput:(m)=>L?.(m),disabled:()=>P(G)}),C?M("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},C):null,B?M("button",{type:"button",class:A("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",r()),onclick:(m)=>{m.preventDefault(),_(!_())}},()=>R()):null])};var QM=(W)=>{let{class:Z,items:X=[],value:J,onSelect:Y,label:L,placeholder:K,...G}=W,q=U(P(J)||""),Q=U(!1),B=U(-1),_=U(()=>{let R=q().toLowerCase(),H=P(X)||[];return R?H.filter((N)=>(typeof N==="string"?N:N.label).toLowerCase().includes(R)):H}),D=(R)=>{let H=typeof R==="string"?R:R.value,N=typeof R==="string"?R:R.label;if(q(N),typeof J==="function")J(H);Y?.(R),Q(!1),B(-1)},C=(R)=>{let H=_();if(R.key==="ArrowDown")R.preventDefault(),Q(!0),B(Math.min(B()+1,H.length-1));else if(R.key==="ArrowUp")R.preventDefault(),B(Math.max(B()-1,0));else if(R.key==="Enter"&&B()>=0)R.preventDefault(),D(H[B()]);else if(R.key==="Escape")Q(!1)};return M("div",{class:"relative w-full"},[g({label:L,class:Z,placeholder:K||x("search")(),value:q,onfocus:()=>Q(!0),onblur:()=>setTimeout(()=>Q(!1),150),onkeydown:C,oninput:(R)=>{let H=R.target.value;if(q(H),typeof J==="function")J(H);Q(!0),B(-1)},...G}),M("ul",{class:"absolute left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50",style:()=>Q()&&_().length?"display:block":"display:none"},[j(_,(R,H)=>M("li",{},[M("a",{class:()=>`block w-full ${B()===H?"active bg-primary text-primary-content":""}`,onclick:()=>D(R),onmouseenter:()=>B(H)},typeof R==="string"?R:R.label)]),(R,H)=>(typeof R==="string"?R:R.value)+H),()=>_().length?null:M("li",{class:"p-2 text-center opacity-50"},x("nodata")())])])};var PM={};z(PM,{Badge:()=>BM});var BM=(W,Z)=>{let{class:X,...J}=W;return M("span",{...J,class:A("badge",X)},Z)};var _M={};z(_M,{Button:()=>h});var h=(W,Z)=>{let{class:X,loading:J,icon:Y,...L}=W,K=V(Y);return M("button",{...L,class:A("btn",X),disabled:()=>P(J)||P(W.disabled)},()=>[P(J)&&M("span",{class:"loading loading-spinner"}),K,Z].filter(Boolean))};var TM={};z(TM,{Checkbox:()=>AM});var AM=(W)=>{let{class:Z,value:X,tooltip:J,toggle:Y,label:L,...K}=W,G=M("input",{...K,type:"checkbox",class:()=>A(P(Y)?"toggle":"checkbox",Z),checked:X}),q=M("label",{class:"label cursor-pointer justify-start gap-3"},[G,L?M("span",{class:"label-text"},L):null]);return J?M("div",{class:"tooltip","data-tip":J},q):q};var RM={};z(RM,{Colorpicker:()=>CM});var CM=(W)=>{let{class:Z,value:X,label:J,...Y}=W,L=U(!1),K=["#000","#1A1A1A","#333","#4D4D4D","#666","#808080","#B3B3B3","#FFF","#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626","#ef4444","#f87171","#fca5a5","#431407","#7c2d12","#9a3412","#c2410c","#ea580c","#f97316","#fb923c","#ffedd5","#713f12","#a16207","#ca8a04","#eab308","#facc15","#fde047","#fef08a","#fff9c4","#064e3b","#065f46","#059669","#10b981","#34d399","#4ade80","#84cc16","#d9f99d","#082f49","#075985","#0284c7","#0ea5e9","#38bdf8","#7dd3fc","#22d3ee","#cffafe","#1e1b4b","#312e81","#4338ca","#4f46e5","#6366f1","#818cf8","#a5b4fc","#e0e7ff","#2e1065","#4c1d95","#6d28d9","#7c3aed","#8b5cf6","#a855f7","#d946ef","#fae8ff"],G=()=>P(X)||"#000000";return M("div",{class:A("relative w-fit",Z)},[M("button",{type:"button",class:"btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case",onclick:(q)=>{q.stopPropagation(),L(!L())},...Y},[M("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${G()}`}),J?M("span",{class:"opacity-80"},J):null]),E(L,()=>M("div",{class:"absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none",onclick:(q)=>q.stopPropagation()},[M("div",{class:"grid grid-cols-8 gap-1"},K.map((q)=>M("button",{type:"button",style:`background-color: ${q}`,class:()=>{return`size-6 rounded-sm cursor-pointer transition-all hover:scale-125 hover:z-10 active:scale-95 outline-none border border-black/5 + ${G().toLowerCase()===q.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof X==="function")X(q);L(!1)}})))])),E(L,()=>M("div",{class:"fixed inset-0 z-[100]",onclick:()=>L(!1)}))])};var FM={};z(FM,{Datepicker:()=>zM});var zM=(W)=>{let{class:Z,value:X,range:J,label:Y,placeholder:L,hour:K=!1,...G}=W,q=U(!1),Q=U(new Date),B=U(null),_=U(0),D=U(0),C=()=>P(J)===!0,R=new Date,H=`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}-${String(R.getDate()).padStart(2,"0")}`,N=(T)=>{let F=T.getFullYear(),S=String(T.getMonth()+1).padStart(2,"0"),k=String(T.getDate()).padStart(2,"0");return`${F}-${S}-${k}`},r=(T)=>{let F=N(T),S=P(X);if(C())if(!S?.start||S.start&&S.end){if(typeof X==="function")X({start:F,end:null,...K&&{startHour:_()}})}else{let k=S.start;if(typeof X==="function"){let u=F{let T=P(X);if(!T)return"";if(typeof T==="string"){if(K&&T.includes("T"))return T.replace("T"," ");return T}if(T.start&&T.end){let F=K&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start,S=K&&T.endHour?`${T.end} ${String(T.endHour).padStart(2,"0")}:00`:T.end;return`${F} - ${S}`}if(T.start)return`${K&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start}...`;return""}),AJ=(T)=>{let F=Q();Q(new Date(F.getFullYear(),F.getMonth()+T,1))},TJ=(T)=>{let F=Q();Q(new Date(F.getFullYear()+T,F.getMonth(),1))},l=({value:T,onChange:F})=>{return M("div",{class:"flex-1"},[M("div",{class:"flex gap-2 items-center"},[M("input",{type:"range",min:0,max:23,value:T,class:"range range-xs flex-1",oninput:(S)=>{let k=parseInt(S.target.value);F(k)}}),M("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(P(T)).padStart(2,"0")+":00")])])};return M("div",{class:A("relative w-full",Z)},[g({label:Y,placeholder:L||(C()?"Seleccionar rango...":"Seleccionar fecha..."),value:m,readonly:!0,icon:V("icon-[lucide--calendar]"),onclick:(T)=>{T.stopPropagation(),q(!q())},...G}),E(q,()=>M("div",{class:"absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none",onclick:(T)=>T.stopPropagation()},[M("div",{class:"flex justify-between items-center mb-4 gap-1"},[M("div",{class:"flex gap-0.5"},[M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>TJ(-1)},V("icon-[lucide--chevrons-left]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>AJ(-1)},V("icon-[lucide--chevron-left]"))]),M("span",{class:"font-bold uppercase flex-1 text-center"},[()=>Q().toLocaleString("es-ES",{month:"short",year:"numeric"})]),M("div",{class:"flex gap-0.5"},[M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>AJ(1)},V("icon-[lucide--chevron-right]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>TJ(1)},V("icon-[lucide--chevrons-right]"))])]),M("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>B(null)},[...["L","M","X","J","V","S","D"].map((T)=>M("div",{class:"text-[10px] opacity-40 font-bold text-center"},T)),()=>{let T=Q(),F=T.getFullYear(),S=T.getMonth(),k=new Date(F,S,1).getDay(),u=k===0?6:k-1,DJ=new Date(F,S+1,0).getDate(),a=[];for(let $=0;${let f=P(X),s=B(),UJ=typeof f==="string"?f.split("T")[0]===I:f?.start===I,VJ=f?.end===I,n=!1;if(C()&&f?.start){let t=f.start;if(!f.end&&s)n=I>t&&I<=s||I=s;else if(f.end)n=I>t&&I{if(C())B(I)},onclick:()=>r(CJ)},[$.toString()]))}return a}]),K?M("div",{class:"mt-3 pt-2 border-t border-base-300"},[C()?M("div",{class:"flex gap-4"},[l({value:_,onChange:(T)=>{_(T);let F=P(X);if(F?.start)X({...F,startHour:T})}}),l({value:D,onChange:(T)=>{D(T);let F=P(X);if(F?.end)X({...F,endHour:T})}})]):l({value:_,onChange:(T)=>{_(T);let F=P(X);if(F&&typeof F==="string"&&F.includes("-"))X(F.split("T")[0]+"T"+String(T).padStart(2,"0")+":00:00")}})]):null])),E(q,()=>M("div",{class:"fixed inset-0 z-[90]",onclick:()=>q(!1)}))])};var UM={};z(UM,{Drawer:()=>DM});var DM=(W,Z)=>{let{class:X,id:J,open:Y,side:L,content:K,...G}=W,q=J||`drawer-${Math.random().toString(36).slice(2,9)}`;return M("div",{...G,class:A("drawer",X)},[M("input",{id:q,type:"checkbox",class:"drawer-toggle",checked:()=>typeof Y==="function"?Y():Y,onchange:(Q)=>{if(typeof Y==="function")Y(Q.target.checked)}}),M("div",{class:"drawer-content"},[typeof K==="function"?K():K]),M("div",{class:"drawer-side"},[M("label",{for:q,class:"drawer-overlay",onclick:()=>{if(typeof Y==="function")Y(!1)}}),M("div",{class:"min-h-full bg-base-200 w-80"},[typeof L==="function"?L():L])])])};var HM={};z(HM,{Dropdown:()=>VM});var w=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(W)=>{if(w&&!w.contains(W.target))w.open=!1,w=null}),window.__dropdownHandlerRegistered=!0;var VM=(W)=>{let{class:Z,label:X,icon:J,items:Y,...L}=W;return $html("details",{...L,class:A("dropdown",Z)},[$html("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(K)=>{let G=K.currentTarget.closest("details");if(w&&w!==G)w.open=!1;setTimeout(()=>{w=G.open?G:null},0)}},[()=>J?typeof J==="function"?J():J:null,()=>X?typeof X==="function"?X():X:null]),$html("ul",{tabindex:"-1",class:"dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300"},[()=>{return(typeof Y==="function"?Y():Y||[]).map((G)=>$html("li",{},[$html("a",{class:G.class||"",onclick:(q)=>{if(G.onclick)G.onclick(q);let Q=q.currentTarget.closest("details");if(Q){if(Q.open=!1,w===Q)w=null}}},[G.icon?$html("span",{},G.icon):null,$html("span",{},G.label)])]))}])])};var jM={};z(jM,{Fab:()=>EM});var EM=(W)=>{let{class:Z,icon:X,label:J,actions:Y=[],position:L="bottom-6 right-6",...K}=W;return M("div",{...K,class:A(`fab absolute ${L} flex flex-col-reverse items-end gap-3 z-[100]`,Z)},[M("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[X?V(X):null,!X&&J?J:null]),...P(Y).map((G)=>M("div",{class:"flex items-center gap-3 transition-all duration-300"},[G.label?M("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},G.label):null,M("button",{type:"button",class:`btn btn-circle shadow-lg ${G.class||""}`,onclick:(q)=>{q.stopPropagation(),G.onclick?.(q)}},[G.icon?V(G.icon):G.text||""])]))])};var NM={};z(NM,{Fieldset:()=>SM});var SM=(W,Z)=>{let{class:X,legend:J,...Y}=W;return M("fieldset",{...Y,class:A("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",X)},[()=>{let L=P(J);return L?M("legend",{class:"fieldset-legend font-bold"},[L]):null},Z])};var IM={};z(IM,{Fileinput:()=>OM});var OM=(W)=>{let{class:Z,tooltip:X,max:J=2,accept:Y="*",onSelect:L,...K}=W,G=U([]),q=U(!1),Q=U(null),B=J*1024*1024,_=(C)=>{let R=Array.from(C);if(Q(null),R.find((N)=>N.size>B)){Q(`Máx ${J}MB`);return}G([...G(),...R]),L?.(G())},D=(C)=>{let R=G().filter((H,N)=>N!==C);G(R),L?.(R)};return M("fieldset",{...K,class:A("fieldset w-full p-0",Z)},[M("div",{class:()=>`w-full ${X?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":X},[M("label",{class:()=>` relative flex items-center justify-between w-full h-12 px-4 border-2 border-dashed rounded-lg cursor-pointer transition-all duration-200 ${q()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} - `,ondragover:(C)=>{C.preventDefault(),q(!0)},ondragleave:()=>q(!1),ondrop:(C)=>{C.preventDefault(),q(!1),_(C.dataTransfer.files)}},[M("div",{class:"flex items-center gap-3 w-full"},[V("icon-[lucide--upload]"),M("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),M("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${J}MB`)]),M("input",{type:"file",multiple:!0,accept:Y,class:"hidden",onchange:(C)=>_(C.target.files)})])]),()=>Q()?M("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},Q()):null,j(()=>G().length>0,()=>M("ul",{class:"mt-2 space-y-1"},[E(G,(C,R)=>M("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[M("div",{class:"flex items-center gap-2 truncate"},[M("span",{class:"opacity-50"},"\uD83D\uDCC4"),M("span",{class:"truncate font-medium max-w-[200px]"},C.name),M("span",{class:"text-[9px] opacity-40"},`(${(C.size/1024).toFixed(0)} KB)`)]),M("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(H)=>{H.preventDefault(),H.stopPropagation(),D(R)}},[V("icon-[lucide--x]")])]),(C)=>C.name+C.lastModified)]))])};var xM={};z(xM,{Indicator:()=>IM});var IM=(W,Z)=>M("div",{class:"indicator"},()=>[Z,W.value&&M("span",{class:A("indicator-item badge",W.class)},W.value)].filter(Boolean));var wM={};z(wM,{Label:()=>kM});var kM=(W)=>{let{children:Z,value:X,floating:J=!1,error:Y,required:L,class:K,...G}=W;if(J)return M("label",{class:A("floating-label w-full",K),...G},()=>[X?M("span",{},X):null,Z,Y?M("span",{class:"text-error text-xs"},P(Y)):null]);return M("label",{class:A("input w-full",K),...G},()=>[X?M("span",{class:"label"},X):null,Z,Y?M("span",{class:"text-error text-xs"},P(Y)):null])};var yM={};z(yM,{List:()=>fM});var fM=(W)=>{let{class:Z,items:X,header:J,render:Y,keyFn:L=(q,Q)=>Q,...K}=W,G=E(X,(q,Q)=>M("li",{class:"list-row"},[Y(q,Q)]),L);return M("ul",{...K,class:A("list bg-base-100 rounded-box shadow-md",Z)},J?[j(J,()=>M("li",{class:"p-4 pb-2 text-xs opacity-60"},[P(J)])),G]:G)};var $M={};z($M,{Loading:()=>vM});var vM=(W)=>{return j(W.$show,()=>M("div",{class:"fixed inset-0 z-[100] flex items-center justify-center backdrop-blur-sm bg-base-100/30"},[M("span",{class:"loading loading-spinner loading-lg text-primary"})]))};var gM={};z(gM,{Menu:()=>bM});var bM=(W)=>{let{class:Z,items:X,...J}=W,Y=(L)=>E(()=>L||[],(K)=>M("li",{},[K.children?M("details",{open:K.open},[M("summary",{},[K.icon&&M("span",{class:"mr-2"},K.icon),K.label]),M("ul",{},Y(K.children))]):M("a",{class:()=>P(K.active)?"active":"",onclick:K.onclick},[K.icon&&M("span",{class:"mr-2"},K.icon),K.label])]),(K,G)=>K.label||G);return M("ul",{...J,class:A("menu bg-base-200 rounded-box",Z)},Y(X))};var uM={};z(uM,{Modal:()=>hM});var hM=(W,Z)=>{let{class:X,title:J,buttons:Y,open:L,...K}=W,G={current:null};y(()=>{let Q=G.current;if(!Q)return;if(P(L)){if(!Q.open)Q.showModal()}else if(Q.open)Q.close()});let q=(Q)=>{if(Q&&Q.preventDefault)Q.preventDefault();if(typeof L==="function")L(!1)};return M("dialog",{...K,ref:G,class:A("modal",X),oncancel:()=>typeof L==="function"&&L(!1)},[M("div",{class:"modal-box"},[J?M("h3",{class:"text-lg font-bold mb-4"},J):null,M("div",{class:"py-2"},[typeof Z==="function"?Z():Z]),M("div",{class:"modal-action flex gap-2"},[...(Array.isArray(Y)?Y:[Y]).filter(Boolean),g({type:"button",onclick:q},x("close")())])]),M("form",{method:"dialog",class:"modal-backdrop",onsubmit:q},[M("button",{},"close")])])};var dM={};z(dM,{Navbar:()=>mM});var mM=(W,Z)=>{let{class:X,...J}=W;return M("div",{...J,class:A("navbar bg-base-100 shadow-sm px-4",X)},Z)};var cM={};z(cM,{Radio:()=>pM});var pM=(W)=>{let{class:Z,label:X,tooltip:J,value:Y,inputValue:L,name:K,...G}=W,q=M("input",{...G,type:"radio",name:K,class:A("radio",Z),checked:()=>P(Y)===L,onclick:()=>{if(typeof Y==="function")Y(L)}});if(!X&&!J)return q;let Q=M("label",{class:"label cursor-pointer justify-start gap-3"},[q,X?M("span",{class:"label-text"},X):null]);return J?M("div",{class:"tooltip","data-tip":J},Q):Q};var oM={};z(oM,{Range:()=>iM});var iM=(W)=>{let{class:Z,label:X,tooltip:J,value:Y,...L}=W,K=M("input",{...L,type:"range",class:A("range",Z),value:Y,disabled:()=>P(W.disabled)});if(!X&&!J)return K;let G=M("div",{class:"flex flex-col gap-2"},[X?M("span",{class:"label-text"},X):null,K]);return J?M("div",{class:"tooltip","data-tip":J},G):G};var aM={};z(aM,{Rating:()=>rM});var rM=(W)=>{let{class:Z,value:X,count:J=5,mask:Y="mask-star",readonly:L=!1,onchange:K,...G}=W,q=`rating-${Math.random().toString(36).slice(2,7)}`;return M("div",{...G,class:()=>A(`rating ${P(L)?"pointer-events-none":""}`,Z)},Array.from({length:P(J)},(Q,B)=>{let _=B+1;return M("input",{type:"radio",name:q,class:`mask ${Y}`,checked:()=>Math.round(P(X))===_,onchange:()=>{if(!P(L)){if(typeof K==="function")K(_);else if(typeof X==="function")X(_)}}})}))};var sM={};z(sM,{Select:()=>lM});var lM=(W)=>{let{class:Z,label:X,items:J,value:Y,...L}=W,K=M("select",{...L,class:A("select select-bordered w-full",Z),value:Y},E(()=>P(J)||[],(G)=>M("option",{value:G.value,$selected:()=>String(P(Y))===String(G.value)},G.label),(G)=>G.value));if(!X)return K;return M("label",{class:"fieldset-label flex flex-col gap-1"},[M("span",{},X),K])};var tM={};z(tM,{Stack:()=>nM});var nM=(W,Z)=>{let{class:X,...J}=W;return M("div",{...J,class:A("stack",X)},Z)};var MJ={};z(MJ,{Stat:()=>eM});var eM=(W)=>{let{class:Z,icon:X,label:J,value:Y,desc:L,...K}=W;return M("div",{...K,class:A("stat",Z)},[X&&M("div",{class:"stat-figure text-secondary"},X),J&&M("div",{class:"stat-title"},J),M("div",{class:"stat-value"},()=>P(Y)??Y),L&&M("div",{class:"stat-desc"},L)])};var KJ={};z(KJ,{Swap:()=>JJ});var JJ=(W)=>{let{class:Z,value:X,on:J,off:Y,...L}=W;return M("label",{...L,class:A("swap",Z)},[M("input",{type:"checkbox",checked:P(X)}),M("div",{class:"swap-on"},J),M("div",{class:"swap-off"},Y)])};var ZJ={};z(ZJ,{Table:()=>WJ});var WJ=(W)=>{let{class:Z,items:X=[],columns:J=[],keyFn:Y,zebra:L=!1,pinRows:K=!1,empty:G=x("nodata")(),...q}=W;return M("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[M("table",{...q,class:()=>{let B=P(L)?"table-zebra":"",_=P(K)?"table-pin-rows":"";return A("table",Z,B,_)}},[M("thead",{},[M("tr",{},J.map((B)=>M("th",{class:B.class||""},B.label)))]),M("tbody",{},[E(X,(B,_)=>{return M("tr",{class:"hover"},J.map((D)=>{let C=()=>{if(D.render)return D.render(B,_);let R=B[D.key];return P(R)};return M("td",{class:D.class||""},[C])}))},Y||((B,_)=>B.id||_)),j(()=>P(X).length===0,()=>M("tr",{},[M("td",{colspan:J.length,class:"text-center p-10 opacity-50"},[P(G)])]))]),j(()=>J.some((B)=>B.footer),()=>M("tfoot",{},[M("tr",{},J.map((B)=>M("th",{},B.footer||"")))]))])])};var GJ={};z(GJ,{Tabs:()=>XJ});var XJ=(W)=>{let{class:Z,items:X,activeIndex:J=U(0),...Y}=W,L=typeof X==="function"?X:()=>X||[],K=U(0),G=J!==void 0?J:K,q=(Q,B)=>(_)=>{if(typeof G==="function")G(Q);B?.(_)};return M("div",{...Y,class:"flex flex-col gap-4 w-full"},[M("div",{role:"tablist",class:A("tabs tabs-box",Z)},E(L,(Q,B)=>{let _=P(Q.active)??G()===B;return M("a",{role:"tab",class:()=>A("tab",_?"tab-active":"",P(Q.disabled)?"tab-disabled":""),onclick:!P(Q.disabled)?q(B,Q.onclick):void 0},Q.label)},(Q,B)=>Q.label+B)),()=>{let Q=L().find((_,D)=>P(_.active)??G()===D);if(!Q)return null;let B=P(Q.content);return M("div",{class:"p-4"},[typeof B==="function"?B():B])}])};var LJ={};z(LJ,{Timeline:()=>YJ});var YJ=(W)=>{let{class:Z,items:X=[],vertical:J=!0,compact:Y=!1,...L}=W,K={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return M("ul",{...L,class:()=>A(`timeline ${P(J)?"timeline-vertical":"timeline-horizontal"} ${P(Y)?"timeline-compact":""}`,Z)},[E(X,(G,q)=>{let Q=q===0,B=q===P(X).length-1,_=G.type||"success",D=(C)=>typeof C==="function"?C():C;return M("li",{class:"flex-1"},[!Q?M("hr",{class:G.completed?"bg-primary":""}):null,M("div",{class:"timeline-start"},[D(G.title)]),M("div",{class:"timeline-middle"},[G.icon?V(G.icon):V(K[_]||K.success)]),M("div",{class:"timeline-end timeline-box shadow-sm"},[D(G.detail)]),!B?M("hr",{class:G.completed?"bg-primary":""}):null])},(G,q)=>G.id||q)])};var qJ={};z(qJ,{Toast:()=>QJ});var QJ=(W,Z="alert-success",X=3500)=>{let J=document.getElementById("sigpro-toast-container");if(!J)J=M("div",{id:"sigpro-toast-container",class:"fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none"}),document.body.appendChild(J);let Y=M("div",{style:"display: contents"});J.appendChild(Y);let L,K=()=>{clearTimeout(L);let Q=Y.firstElementChild;if(Q&&!Q.classList.contains("opacity-0"))Q.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(q.destroy(),Y.remove(),!J.hasChildNodes())J.remove()},300);else q.destroy(),Y.remove()},q=KM(()=>{let Q=V("icon-[lucide--x]"),B=M("div",{class:`alert alert-soft ${Z} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[M("span",{},[typeof W==="function"?W():W]),g({class:"btn-xs btn-circle btn-ghost",onclick:K},Q)]);return requestAnimationFrame(()=>B.classList.remove("translate-x-10","opacity-0")),B},Y);if(X>0)L=setTimeout(K,X);return K};var PJ={};z(PJ,{Tooltip:()=>BJ});var BJ=(W,Z)=>M("div",{...W,class:()=>A("tooltip",W.ui,W.class),"data-tip":W.tip},Z);var zJ={...ZM,...GM,...QM,...BM,...PM,...AM,...CM,...zM,...DM,...VM,...EM,...SM,...NM,...xM,...YM,...wM,...yM,...$M,...gM,...uM,...dM,...cM,...oM,...aM,...sM,...tM,...MJ,...KJ,...ZJ,...GJ,...LJ,...qJ,...PJ},xJ={...zJ,install:(W=window)=>{Object.entries(zJ).forEach(([Z,X])=>{W[Z]=X}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(i).forEach(([W,Z])=>{window[W]=Z}),window.Utils=c,window.tt=x,window.SigProUI={...i,Utils:c,tt:x},console.log("\uD83C\uDFA8 SigProUI ready");})(); + `,ondragover:(C)=>{C.preventDefault(),q(!0)},ondragleave:()=>q(!1),ondrop:(C)=>{C.preventDefault(),q(!1),_(C.dataTransfer.files)}},[M("div",{class:"flex items-center gap-3 w-full"},[V("icon-[lucide--upload]"),M("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),M("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${J}MB`)]),M("input",{type:"file",multiple:!0,accept:Y,class:"hidden",onchange:(C)=>_(C.target.files)})])]),()=>Q()?M("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},Q()):null,E(()=>G().length>0,()=>M("ul",{class:"mt-2 space-y-1"},[j(G,(C,R)=>M("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[M("div",{class:"flex items-center gap-2 truncate"},[M("span",{class:"opacity-50"},"\uD83D\uDCC4"),M("span",{class:"truncate font-medium max-w-[200px]"},C.name),M("span",{class:"text-[9px] opacity-40"},`(${(C.size/1024).toFixed(0)} KB)`)]),M("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(H)=>{H.preventDefault(),H.stopPropagation(),D(R)}},[V("icon-[lucide--x]")])]),(C)=>C.name+C.lastModified)]))])};var kM={};z(kM,{Indicator:()=>xM});var xM=(W,Z)=>M("div",{class:"indicator"},()=>[Z,W.value&&M("span",{class:A("indicator-item badge",W.class)},W.value)].filter(Boolean));var fM={};z(fM,{Label:()=>wM});var wM=(W)=>{let{children:Z,value:X,floating:J=!1,error:Y,required:L,class:K,...G}=W;if(J)return M("label",{class:A("floating-label w-full",K),...G},()=>[X?M("span",{},X):null,Z,Y?M("span",{class:"text-error text-xs"},P(Y)):null]);return M("label",{class:A("input w-full",K),...G},()=>[X?M("span",{class:"label"},X):null,Z,Y?M("span",{class:"text-error text-xs"},P(Y)):null])};var vM={};z(vM,{List:()=>yM});var yM=(W)=>{let{class:Z,items:X,header:J,render:Y,keyFn:L=(q,Q)=>Q,...K}=W,G=j(X,(q,Q)=>M("li",{class:"list-row"},[Y(q,Q)]),L);return M("ul",{...K,class:A("list bg-base-100 rounded-box shadow-md",Z)},J?[E(J,()=>M("li",{class:"p-4 pb-2 text-xs opacity-60"},[P(J)])),G]:G)};var bM={};z(bM,{Loading:()=>$M});var $M=(W)=>{return E(W.$show,()=>M("div",{class:"fixed inset-0 z-[100] flex items-center justify-center backdrop-blur-sm bg-base-100/30"},[M("span",{class:"loading loading-spinner loading-lg text-primary"})]))};var hM={};z(hM,{Menu:()=>gM});var gM=(W)=>{let{class:Z,items:X,...J}=W,Y=(L)=>j(()=>L||[],(K)=>M("li",{},[K.children?M("details",{open:K.open},[M("summary",{},[K.icon&&M("span",{class:"mr-2"},K.icon),K.label]),M("ul",{},Y(K.children))]):M("a",{class:()=>P(K.active)?"active":"",onclick:K.onclick},[K.icon&&M("span",{class:"mr-2"},K.icon),K.label])]),(K,G)=>K.label||G);return M("ul",{...J,class:A("menu bg-base-200 rounded-box",Z)},Y(X))};var uM={};z(uM,{Modal:()=>mM});var mM=(W,Z)=>{let{class:X,title:J,buttons:Y,open:L,...K}=W,G={current:null};v(()=>{let Q=G.current;if(!Q)return;if(P(L)){if(!Q.open)Q.showModal()}else if(Q.open)Q.close()});let q=(Q)=>{if(Q&&Q.preventDefault)Q.preventDefault();if(typeof L==="function")L(!1)};return M("dialog",{...K,ref:G,class:A("modal",X),oncancel:()=>typeof L==="function"&&L(!1)},[M("div",{class:"modal-box"},[J?M("h3",{class:"text-lg font-bold mb-4"},J):null,M("div",{class:"py-2"},[typeof Z==="function"?Z():Z]),M("div",{class:"modal-action flex gap-2"},[...(Array.isArray(Y)?Y:[Y]).filter(Boolean),h({type:"button",onclick:q},x("close")())])]),M("form",{method:"dialog",class:"modal-backdrop",onsubmit:q},[M("button",{},"close")])])};var pM={};z(pM,{Navbar:()=>dM});var dM=(W,Z)=>{let{class:X,...J}=W;return M("div",{...J,class:A("navbar bg-base-100 shadow-sm px-4",X)},Z)};var iM={};z(iM,{Radio:()=>cM});var cM=(W)=>{let{class:Z,label:X,tooltip:J,value:Y,inputValue:L,name:K,...G}=W,q=M("input",{...G,type:"radio",name:K,class:A("radio",Z),checked:()=>P(Y)===L,onclick:()=>{if(typeof Y==="function")Y(L)}});if(!X&&!J)return q;let Q=M("label",{class:"label cursor-pointer justify-start gap-3"},[q,X?M("span",{class:"label-text"},X):null]);return J?M("div",{class:"tooltip","data-tip":J},Q):Q};var rM={};z(rM,{Range:()=>oM});var oM=(W)=>{let{class:Z,label:X,tooltip:J,value:Y,...L}=W,K=M("input",{...L,type:"range",class:A("range",Z),value:Y,disabled:()=>P(W.disabled)});if(!X&&!J)return K;let G=M("div",{class:"flex flex-col gap-2"},[X?M("span",{class:"label-text"},X):null,K]);return J?M("div",{class:"tooltip","data-tip":J},G):G};var aM={};z(aM,{Rating:()=>lM});var lM=(W)=>{let{class:Z,value:X,count:J=5,mask:Y="mask-star",readonly:L=!1,onchange:K,...G}=W,q=`rating-${Math.random().toString(36).slice(2,7)}`;return M("div",{...G,class:()=>A(`rating ${P(L)?"pointer-events-none":""}`,Z)},Array.from({length:P(J)},(Q,B)=>{let _=B+1;return M("input",{type:"radio",name:q,class:`mask ${Y}`,checked:()=>Math.round(P(X))===_,onchange:()=>{if(!P(L)){if(typeof K==="function")K(_);else if(typeof X==="function")X(_)}}})}))};var nM={};z(nM,{Select:()=>sM});var sM=(W)=>{let{class:Z,label:X,items:J,value:Y,...L}=W,K=M("select",{...L,class:A("select select-bordered w-full",Z),value:Y},j(()=>P(J)||[],(G)=>M("option",{value:G.value,$selected:()=>String(P(Y))===String(G.value)},G.label),(G)=>G.value));if(!X)return K;return M("label",{class:"fieldset-label flex flex-col gap-1"},[M("span",{},X),K])};var eM={};z(eM,{Stack:()=>tM});var tM=(W,Z)=>{let{class:X,...J}=W;return M("div",{...J,class:A("stack",X)},Z)};var JJ={};z(JJ,{Stat:()=>MJ});var MJ=(W)=>{let{class:Z,icon:X,label:J,value:Y,desc:L,...K}=W;return M("div",{...K,class:A("stat",Z)},[X&&M("div",{class:"stat-figure text-secondary"},X),J&&M("div",{class:"stat-title"},J),M("div",{class:"stat-value"},()=>P(Y)??Y),L&&M("div",{class:"stat-desc"},L)])};var WJ={};z(WJ,{Swap:()=>KJ});var KJ=(W)=>{let{class:Z,value:X,on:J,off:Y,...L}=W;return M("label",{...L,class:A("swap",Z)},[M("input",{type:"checkbox",checked:P(X)}),M("div",{class:"swap-on"},J),M("div",{class:"swap-off"},Y)])};var XJ={};z(XJ,{Table:()=>ZJ});var ZJ=(W)=>{let{class:Z,items:X=[],columns:J=[],keyFn:Y,zebra:L=!1,pinRows:K=!1,empty:G=x("nodata")(),...q}=W;return M("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[M("table",{...q,class:()=>{let B=P(L)?"table-zebra":"",_=P(K)?"table-pin-rows":"";return A("table",Z,B,_)}},[M("thead",{},[M("tr",{},J.map((B)=>M("th",{class:B.class||""},B.label)))]),M("tbody",{},[j(X,(B,_)=>{return M("tr",{class:"hover"},J.map((D)=>{let C=()=>{if(D.render)return D.render(B,_);let R=B[D.key];return P(R)};return M("td",{class:D.class||""},[C])}))},Y||((B,_)=>B.id||_)),E(()=>P(X).length===0,()=>M("tr",{},[M("td",{colspan:J.length,class:"text-center p-10 opacity-50"},[P(G)])]))]),E(()=>J.some((B)=>B.footer),()=>M("tfoot",{},[M("tr",{},J.map((B)=>M("th",{},B.footer||"")))]))])])};var YJ={};z(YJ,{Tabs:()=>GJ});var GJ=(W)=>{let{class:Z,items:X,activeIndex:J=U(0),...Y}=W,L=typeof X==="function"?X:()=>X||[],K=U(0),G=J!==void 0?J:K,q=(Q,B)=>(_)=>{if(typeof G==="function")G(Q);B?.(_)};return M("div",{...Y,class:"flex flex-col gap-4 w-full"},[M("div",{role:"tablist",class:A("tabs tabs-box",Z)},j(L,(Q,B)=>{let _=P(Q.active)??G()===B;return M("a",{role:"tab",class:()=>A("tab",_?"tab-active":"",P(Q.disabled)?"tab-disabled":""),onclick:!P(Q.disabled)?q(B,Q.onclick):void 0},Q.label)},(Q,B)=>Q.label+B)),()=>{let Q=L().find((_,D)=>P(_.active)??G()===D);if(!Q)return null;let B=P(Q.content);return M("div",{class:"p-4"},[typeof B==="function"?B():B])}])};var QJ={};z(QJ,{Timeline:()=>LJ});var LJ=(W)=>{let{class:Z,items:X=[],vertical:J=!0,compact:Y=!1,...L}=W,K={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return M("ul",{...L,class:()=>A(`timeline ${P(J)?"timeline-vertical":"timeline-horizontal"} ${P(Y)?"timeline-compact":""}`,Z)},[j(X,(G,q)=>{let Q=q===0,B=q===P(X).length-1,_=G.type||"success",D=(C)=>typeof C==="function"?C():C;return M("li",{class:"flex-1"},[!Q?M("hr",{class:G.completed?"bg-primary":""}):null,M("div",{class:"timeline-start"},[D(G.title)]),M("div",{class:"timeline-middle"},[G.icon?V(G.icon):V(K[_]||K.success)]),M("div",{class:"timeline-end timeline-box shadow-sm"},[D(G.detail)]),!B?M("hr",{class:G.completed?"bg-primary":""}):null])},(G,q)=>G.id||q)])};var BJ={};z(BJ,{Toast:()=>qJ});var qJ=(W,Z="alert-success",X=3500)=>{let J=document.getElementById("sigpro-toast-container");if(!J)J=M("div",{id:"sigpro-toast-container",class:"fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none"}),document.body.appendChild(J);let Y=M("div",{style:"display: contents"});J.appendChild(Y);let L,K=()=>{clearTimeout(L);let Q=Y.firstElementChild;if(Q&&!Q.classList.contains("opacity-0"))Q.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(q.destroy(),Y.remove(),!J.hasChildNodes())J.remove()},300);else q.destroy(),Y.remove()},q=WM(()=>{let Q=V("icon-[lucide--x]"),B=M("div",{class:`alert alert-soft ${Z} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[M("span",{},[typeof W==="function"?W():W]),h({class:"btn-xs btn-circle btn-ghost",onclick:K},Q)]);return requestAnimationFrame(()=>B.classList.remove("translate-x-10","opacity-0")),B},Y);if(X>0)L=setTimeout(K,X);return K};var _J={};z(_J,{Tooltip:()=>PJ});var PJ=(W,Z)=>M("div",{...W,class:()=>A("tooltip",W.ui,W.class),"data-tip":W.tip},Z);var FJ={...XM,...YM,...qM,...PM,..._M,...TM,...RM,...FM,...UM,...HM,...jM,...NM,...IM,...kM,...LM,...fM,...vM,...bM,...hM,...uM,...pM,...iM,...rM,...aM,...nM,...eM,...JJ,...WJ,...XJ,...YJ,...QJ,...BJ,..._J},kJ={...FJ,install:(W=window)=>{Object.entries(FJ).forEach(([Z,X])=>{W[Z]=X}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(o).forEach(([W,Z])=>{window[W]=Z}),window.Utils=i,window.tt=x,window.SigProUI={...o,Utils:i,tt:x},console.log("\uD83C\uDFA8 SigProUI ready");})(); diff --git a/src/components/Drawer.js b/src/components/Drawer.js index b884a90..50d253e 100644 --- a/src/components/Drawer.js +++ b/src/components/Drawer.js @@ -12,7 +12,6 @@ import { ui } from "../core/utils.js"; export const Drawer = (props, children) => { const { class: className, id, open, side, content, ...rest } = props; - // Generar un id único si no se proporciona const drawerId = id || `drawer-${Math.random().toString(36).slice(2, 9)}`; return $html("div", { @@ -32,7 +31,6 @@ export const Drawer = (props, children) => { typeof content === "function" ? content() : content ]), $html("div", { class: "drawer-side" }, [ - // El overlay debe tener for apuntando al checkbox $html("label", { for: drawerId, class: "drawer-overlay", diff --git a/src/components/Dropdown.js b/src/components/Dropdown.js index 3c0c663..1f4bde2 100644 --- a/src/components/Dropdown.js +++ b/src/components/Dropdown.js @@ -1,65 +1,78 @@ // components/Dropdown.js -import { $html, $for } from "sigpro"; +// import { $html, $for, $watch } from "sigpro"; import { ui } from "../core/utils.js"; /** - * Dropdown component + * Dropdown component - Solo soporta menús (items) * * daisyUI classes used: * - dropdown, dropdown-content, dropdown-end, dropdown-top, dropdown-bottom - * - menu, menu-dropdown, menu-dropdown-show - * - btn, btn-ghost, btn-sm, btn-md, btn-lg - * - bg-base-100, shadow, rounded-box, border, border-base-300 - * - z-50, p-2, w-52, min-w-max + * - menu, btn + * - bg-base-100, shadow, rounded-box, border + * - z-50, p-2, w-52 * - m-1, flex, items-center, gap-2 */ -export const Dropdown = (props, children) => { + +let currentOpen = null; + +if (typeof window !== 'undefined' && !window.__dropdownHandlerRegistered) { + window.addEventListener('click', (e) => { + if (currentOpen && !currentOpen.contains(e.target)) { + currentOpen.open = false; + currentOpen = null; + } + }); + window.__dropdownHandlerRegistered = true; +} + +export const Dropdown = (props) => { const { class: className, label, icon, items, ...rest } = props; - const renderContent = () => { - if (items) { - const source = typeof items === "function" ? items : () => items; - return $html("ul", { - tabindex: 0, - class: "dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300" - }, [ - $for(source, (item) => + return $html("details", { + ...rest, + class: ui('dropdown', className), + }, [ + $html("summary", { + class: "btn m-1 flex items-center gap-2 list-none cursor-pointer", + style: "display: inline-flex;", + onclick: (e) => { + const details = e.currentTarget.closest('details'); + if (currentOpen && currentOpen !== details) { + currentOpen.open = false; + } + setTimeout(() => { + currentOpen = details.open ? details : null; + }, 0); + } + }, [ + () => icon ? (typeof icon === "function" ? icon() : icon) : null, + () => label ? (typeof label === "function" ? label() : label) : null + ]), + $html("ul", { + tabindex: "-1", + class: "dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300" + }, [ + () => { + const currentItems = typeof items === "function" ? items() : (items || []); + return currentItems.map(item => $html("li", {}, [ $html("a", { class: item.class || "", onclick: (e) => { if (item.onclick) item.onclick(e); - if (document.activeElement) document.activeElement.blur(); + const details = e.currentTarget.closest('details'); + if (details) { + details.open = false; + if (currentOpen === details) currentOpen = null; + } } }, [ item.icon ? $html("span", {}, item.icon) : null, $html("span", {}, item.label) ]) ]) - ) - ]); - } - - return $html("div", { - tabindex: 0, - class: "dropdown-content z-[50] p-2 shadow bg-base-100 rounded-box min-w-max border border-base-300" - }, [ - typeof children === "function" ? children() : children - ]); - }; - - return $html("div", { - ...rest, - class: ui('dropdown', className), - }, [ - $html("div", { - tabindex: 0, - role: "button", - class: "btn m-1 flex items-center gap-2", - }, [ - icon ? (typeof icon === "function" ? icon() : icon) : null, - label ? (typeof label === "function" ? label() : label) : null - ]), - renderContent() + ); + } + ]) ]); }; \ No newline at end of file