From bd63afa23b90638a6359a0927dfd9645872ceefd Mon Sep 17 00:00:00 2001 From: natxocc Date: Sat, 4 Apr 2026 14:07:21 +0200 Subject: [PATCH] new build esm --- dist/sigpro-ui.esm.js | 1643 +++++++++++++++++++++++++++++++++++++ dist/sigpro-ui.esm.min.js | 7 + dist/sigpro-ui.js | 231 ------ dist/sigpro-ui.min.js | 8 +- docs/sigpro-ui.min.js | 8 +- index.js | 21 +- package.json | 19 +- src/bundle.js | 23 + 8 files changed, 1697 insertions(+), 263 deletions(-) create mode 100644 dist/sigpro-ui.esm.js create mode 100644 dist/sigpro-ui.esm.min.js create mode 100644 src/bundle.js diff --git a/dist/sigpro-ui.esm.js b/dist/sigpro-ui.esm.js new file mode 100644 index 0000000..f225398 --- /dev/null +++ b/dist/sigpro-ui.esm.js @@ -0,0 +1,1643 @@ +// src/sigpro.js +var activeEffect = null; +var currentOwner = null; +var effectQueue = new Set; +var isFlushing = false; +var MOUNTED_NODES = new WeakMap; +var flush = () => { + if (isFlushing) + return; + isFlushing = true; + while (effectQueue.size > 0) { + const sorted = Array.from(effectQueue).sort((a, b) => (a.depth || 0) - (b.depth || 0)); + effectQueue.clear(); + for (const eff of sorted) + if (!eff._deleted) + eff(); + } + isFlushing = false; +}; +var track = (subs) => { + if (activeEffect && !activeEffect._deleted) { + subs.add(activeEffect); + activeEffect._deps.add(subs); + } +}; +var trigger = (subs) => { + for (const eff of subs) { + if (eff === activeEffect || eff._deleted) + continue; + if (eff._isComputed) { + eff.markDirty(); + if (eff._subs) + trigger(eff._subs); + } else { + effectQueue.add(eff); + } + } + if (!isFlushing) + queueMicrotask(flush); +}; +var sweep = (node) => { + if (node._cleanups) { + node._cleanups.forEach((f) => f()); + node._cleanups.clear(); + } + node.childNodes?.forEach(sweep); +}; +var _view = (fn) => { + const cleanups = new Set; + const prev = currentOwner; + const container = document.createElement("div"); + container.style.display = "contents"; + currentOwner = { cleanups }; + try { + const res = fn({ onCleanup: (f) => cleanups.add(f) }); + const process = (n) => { + if (!n) + return; + if (n._isRuntime) { + cleanups.add(n.destroy); + container.appendChild(n.container); + } else if (Array.isArray(n)) + n.forEach(process); + else + container.appendChild(n instanceof Node ? n : document.createTextNode(String(n))); + }; + process(res); + } finally { + currentOwner = prev; + } + return { + _isRuntime: true, + container, + destroy: () => { + cleanups.forEach((f) => f()); + sweep(container); + container.remove(); + } + }; +}; +var $ = (initial, key = null) => { + if (typeof initial === "function") { + const subs2 = new Set; + let cached, dirty = true; + const effect = () => { + if (effect._deleted) + return; + effect._deps.forEach((s) => s.delete(effect)); + effect._deps.clear(); + const prev = activeEffect; + activeEffect = effect; + try { + const val = initial(); + if (!Object.is(cached, val) || dirty) { + cached = val; + dirty = false; + trigger(subs2); + } + } finally { + activeEffect = prev; + } + }; + effect._deps = new Set; + effect._isComputed = true; + effect._subs = subs2; + effect._deleted = false; + effect.markDirty = () => dirty = true; + effect.stop = () => { + effect._deleted = true; + effect._deps.forEach((s) => s.delete(effect)); + subs2.clear(); + }; + if (currentOwner) + currentOwner.cleanups.add(effect.stop); + return () => { + if (dirty) + effect(); + track(subs2); + return cached; + }; + } + let value = initial; + if (key) { + try { + const saved = localStorage.getItem(key); + if (saved !== null) + value = JSON.parse(saved); + } catch (e) { + console.warn("SigPro: LocalStorage locked", e); + } + } + const subs = new Set; + return (...args) => { + if (args.length) { + const next = typeof args[0] === "function" ? args[0](value) : args[0]; + if (!Object.is(value, next)) { + value = next; + if (key) + localStorage.setItem(key, JSON.stringify(value)); + trigger(subs); + } + } + track(subs); + return value; + }; +}; +var $watch2 = (target, fn) => { + const isExplicit = Array.isArray(target); + const callback = isExplicit ? fn : target; + const depsInput = isExplicit ? target : null; + if (typeof callback !== "function") + return () => {}; + const owner = currentOwner; + const runner = () => { + if (runner._deleted) + return; + runner._deps.forEach((s) => s.delete(runner)); + runner._deps.clear(); + runner._cleanups.forEach((c) => c()); + runner._cleanups.clear(); + const prevEffect = activeEffect; + const prevOwner = currentOwner; + activeEffect = runner; + currentOwner = { cleanups: runner._cleanups }; + runner.depth = prevEffect ? prevEffect.depth + 1 : 0; + try { + if (isExplicit) { + activeEffect = null; + callback(); + activeEffect = runner; + depsInput.forEach((d) => typeof d === "function" && d()); + } else { + callback(); + } + } finally { + activeEffect = prevEffect; + currentOwner = prevOwner; + } + }; + runner._deps = new Set; + runner._cleanups = new Set; + runner._deleted = false; + runner.stop = () => { + if (runner._deleted) + return; + runner._deleted = true; + effectQueue.delete(runner); + runner._deps.forEach((s) => s.delete(runner)); + runner._cleanups.forEach((c) => c()); + if (owner) + owner.cleanups.delete(runner.stop); + }; + if (owner) + owner.cleanups.add(runner.stop); + runner(); + return runner.stop; +}; +var $html2 = (tag, props = {}, content = []) => { + if (props instanceof Node || Array.isArray(props) || typeof props !== "object") { + content = props; + props = {}; + } + const el = document.createElement(tag), _sanitize = (key, val) => (key === "src" || key === "href") && String(val).toLowerCase().includes("javascript:") ? "#" : val; + el._cleanups = new Set; + const boolAttrs = ["disabled", "checked", "required", "readonly", "selected", "multiple", "autofocus"]; + for (let [key, val] of Object.entries(props)) { + if (key === "ref") { + typeof val === "function" ? val(el) : val.current = el; + continue; + } + const isSignal = typeof val === "function", isInput = ["INPUT", "TEXTAREA", "SELECT"].includes(el.tagName), isBindAttr = key === "value" || key === "checked"; + if (isInput && isBindAttr && isSignal) { + el._cleanups.add($watch2(() => { + const currentVal = val(); + if (el[key] !== currentVal) + el[key] = currentVal; + })); + const eventName = key === "checked" ? "change" : "input", handler = (event) => val(event.target[key]); + el.addEventListener(eventName, handler); + el._cleanups.add(() => el.removeEventListener(eventName, handler)); + } else if (key.startsWith("on")) { + const eventName = key.slice(2).toLowerCase().split(".")[0], handler = (event) => val(event); + el.addEventListener(eventName, handler); + el._cleanups.add(() => el.removeEventListener(eventName, handler)); + } else if (isSignal) { + el._cleanups.add($watch2(() => { + const currentVal = _sanitize(key, val()); + if (key === "class") { + el.className = currentVal || ""; + } else if (boolAttrs.includes(key)) { + if (currentVal) { + el.setAttribute(key, ""); + el[key] = true; + } else { + el.removeAttribute(key); + el[key] = false; + } + } else { + currentVal == null ? el.removeAttribute(key) : el.setAttribute(key, currentVal); + } + })); + } else { + if (boolAttrs.includes(key)) { + if (val) { + el.setAttribute(key, ""); + el[key] = true; + } else { + el.removeAttribute(key); + el[key] = false; + } + } else { + el.setAttribute(key, _sanitize(key, val)); + } + } + } + const append = (child) => { + if (Array.isArray(child)) + return child.forEach(append); + if (child instanceof Node) { + el.appendChild(child); + } else if (typeof child === "function") { + const marker = document.createTextNode(""); + el.appendChild(marker); + let nodes = []; + el._cleanups.add($watch2(() => { + const res = child(), next = (Array.isArray(res) ? res : [res]).map((i) => i?._isRuntime ? i.container : i instanceof Node ? i : document.createTextNode(i ?? "")); + nodes.forEach((n) => { + sweep?.(n); + n.remove(); + }); + next.forEach((n) => marker.parentNode?.insertBefore(n, marker)); + nodes = next; + })); + } else + el.appendChild(document.createTextNode(child ?? "")); + }; + append(content); + return el; +}; +var $if = (condition, thenVal, otherwiseVal = null) => { + const marker = document.createTextNode(""); + const container = $html2("div", { style: "display:contents" }, [marker]); + let current = null, last = null; + $watch2(() => { + const state = !!(typeof condition === "function" ? condition() : condition); + if (state !== last) { + last = state; + if (current) + current.destroy(); + const branch = state ? thenVal : otherwiseVal; + if (branch) { + current = _view(() => typeof branch === "function" ? branch() : branch); + container.insertBefore(current.container, marker); + } + } + }); + return container; +}; +$if.not = (condition, thenVal, otherwiseVal) => $if(() => !(typeof condition === "function" ? condition() : condition), thenVal, otherwiseVal); +var $for = (source, render, keyFn, tag = "div", props = { style: "display:contents" }) => { + const marker = document.createTextNode(""); + const container = $html2(tag, props, [marker]); + let cache = new Map; + $watch2(() => { + const items = (typeof source === "function" ? source() : source) || []; + const newCache = new Map; + const newOrder = []; + for (let i = 0;i < items.length; i++) { + const item = items[i]; + const key = keyFn ? keyFn(item, i) : i; + let run = cache.get(key); + if (!run) { + run = _view(() => render(item, i)); + } else { + cache.delete(key); + } + newCache.set(key, run); + newOrder.push(key); + } + cache.forEach((run) => { + run.destroy(); + run.container.remove(); + }); + let anchor = marker; + for (let i = newOrder.length - 1;i >= 0; i--) { + const run = newCache.get(newOrder[i]); + if (run.container.nextSibling !== anchor) { + container.insertBefore(run.container, anchor); + } + anchor = run.container; + } + cache = newCache; + }); + return container; +}; +var $router = (routes) => { + const sPath = $(window.location.hash.replace(/^#/, "") || "/"); + window.addEventListener("hashchange", () => sPath(window.location.hash.replace(/^#/, "") || "/")); + const outlet = $html2("div", { class: "router-outlet" }); + let current = null; + $watch2([sPath], async () => { + const path = sPath(); + const route = routes.find((r) => { + const rp = r.path.split("/").filter(Boolean), pp = path.split("/").filter(Boolean); + return rp.length === pp.length && rp.every((p, i) => p.startsWith(":") || p === pp[i]); + }) || routes.find((r) => r.path === "*"); + if (route) { + let comp = route.component; + if (typeof comp === "function" && comp.toString().includes("import")) { + comp = (await comp()).default || await comp(); + } + const params = {}; + route.path.split("/").filter(Boolean).forEach((p, i) => { + if (p.startsWith(":")) + params[p.slice(1)] = path.split("/").filter(Boolean)[i]; + }); + if (current) + current.destroy(); + if ($router.params) + $router.params(params); + current = _view(() => { + try { + return typeof comp === "function" ? comp(params) : comp; + } catch (e) { + return $html2("div", { class: "p-4 text-error" }, "Error loading view"); + } + }); + outlet.appendChild(current.container); + } + }); + return outlet; +}; +$router.params = $({}); +$router.to = (path) => window.location.hash = path.replace(/^#?\/?/, "#/"); +$router.back = () => window.history.back(); +$router.path = () => window.location.hash.replace(/^#/, "") || "/"; +var $mount = (component, target) => { + const el = typeof target === "string" ? document.querySelector(target) : target; + if (!el) + return; + if (MOUNTED_NODES.has(el)) + MOUNTED_NODES.get(el).destroy(); + const instance = _view(typeof component === "function" ? component : () => component); + el.replaceChildren(instance.container); + MOUNTED_NODES.set(el, instance); + return instance; +}; +var SigProCore = { $, $watch: $watch2, $html: $html2, $if, $for, $router, $mount }; +if (typeof window !== "undefined") { + const install = (registry) => { + Object.keys(registry).forEach((key) => { + window[key] = registry[key]; + }); + const tags = `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+/); + tags.forEach((tagName) => { + const helperName = tagName.charAt(0).toUpperCase() + tagName.slice(1); + if (!(helperName in window)) { + window[helperName] = (props, content) => $html2(tagName, props, content); + } + }); + window.SigPro = Object.freeze(registry); + }; + install(SigProCore); +} + +// src/core/utils.js +var val = (t) => typeof t === "function" ? t() : t; +var ui = (baseClass, additionalClassOrFn) => typeof additionalClassOrFn === "function" ? () => `${baseClass} ${additionalClassOrFn() || ""}`.trim() : `${baseClass} ${additionalClassOrFn || ""}`.trim(); +var getIcon = (icon) => { + if (!icon) + return null; + if (typeof icon === "function") { + return $html2("span", { class: "mr-1" }, icon()); + } + if (typeof icon === "object") { + return $html2("span", { class: "mr-1" }, icon); + } + if (typeof icon === "string") { + const parts = icon.trim().split(/\s+/); + const hasRight = parts[parts.length - 1] === "right"; + const iconClass = hasRight ? parts.slice(0, -1).join(" ") : icon; + const spacing = hasRight ? "ml-1" : "mr-1"; + if (iconClass && !iconClass.startsWith("icon-[") && !iconClass.includes("--")) { + return $html2("span", { class: spacing }, iconClass); + } + return $html2("span", { class: `${iconClass} ${spacing}`.trim() }); + } + return null; +}; + +// src/components/Accordion.js +var Accordion = (props, children) => { + const { class: className, title, name, open, ...rest } = props; + return $html2("div", { + ...rest, + class: ui("collapse collapse-arrow bg-base-200 mb-2", className) + }, [ + $html2("input", { + type: name ? "radio" : "checkbox", + name, + checked: val(open) + }), + $html2("div", { class: "collapse-title text-xl font-medium" }, title), + $html2("div", { class: "collapse-content" }, children) + ]); +}; + +// src/components/Alert.js +var Alert = (props, children) => { + const { class: className, actions, type = "info", soft = true, ...rest } = props; + const iconMap = { + info: "icon-[lucide--info]", + success: "icon-[lucide--check-circle]", + warning: "icon-[lucide--alert-triangle]", + error: "icon-[lucide--alert-circle]" + }; + const typeClass = `alert-${type}`; + const softClass = soft ? "alert-soft" : ""; + const allClasses = [typeClass, softClass, className].filter(Boolean).join(" "); + const content = children || props.message; + return $html2("div", { + ...rest, + role: "alert", + class: ui("alert", allClasses) + }, () => [ + getIcon(iconMap[type]), + $html2("div", { class: "flex-1" }, [ + $html2("span", {}, [typeof content === "function" ? content() : content]) + ]), + actions ? $html2("div", { class: "flex-none" }, [ + typeof actions === "function" ? actions() : actions + ]) : null + ].filter(Boolean)); +}; + +// src/core/i18n.js +var i18n = { + 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" + } +}; +var currentLocale = $("es"); +var tt = (t) => () => i18n[currentLocale()][t] || t; + +// src/components/Input.js +var Input = (props) => { + const { + class: className, + value, + type = "text", + icon, + oninput, + placeholder, + disabled, + size, + validate, + ...rest + } = props; + const isPassword = type === "password"; + const visible = $(false); + const errorMsg = $(null); + const iconMap = { + 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]" + }; + const leftIcon = icon ? getIcon(icon) : iconMap[type] ? getIcon(iconMap[type]) : null; + const getPasswordIcon = () => getIcon(visible() ? "icon-[lucide--eye-off]" : "icon-[lucide--eye]"); + const paddingLeft = leftIcon ? "pl-10" : ""; + const paddingRight = isPassword ? "pr-10" : ""; + const buttonSize = () => { + if (className?.includes("input-xs")) + return "btn-xs"; + if (className?.includes("input-sm")) + return "btn-sm"; + if (className?.includes("input-lg")) + return "btn-lg"; + return "btn-md"; + }; + const handleInput = (e) => { + const newValue = e.target.value; + if (validate) { + const result = validate(newValue); + errorMsg(result || null); + } + oninput?.(e); + }; + const hasError = () => errorMsg() && errorMsg() !== ""; + const inputClasses = () => { + let classes = `input w-full ${paddingLeft} ${paddingRight}`; + if (className) + classes += ` ${className}`; + if (hasError()) + classes += " input-error"; + return classes.trim(); + }; + const inputElement = $html2("input", { + ...rest, + type: () => isPassword ? visible() ? "text" : "password" : type, + placeholder: placeholder || " ", + class: inputClasses, + value, + oninput: handleInput, + disabled: () => val(disabled), + "aria-invalid": () => hasError() ? "true" : "false" + }); + return $html2("div", { class: "relative w-full" }, () => [ + inputElement, + leftIcon ? $html2("div", { + class: "absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60" + }, leftIcon) : null, + 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) => { + e.preventDefault(); + visible(!visible()); + } + }, () => getPasswordIcon()) : null, + $html2("div", { + class: "text-error text-xs mt-1 px-3 absolute -bottom-5 left-0" + }, () => hasError() ? errorMsg() : null) + ]); +}; + +// src/components/Autocomplete.js +var Autocomplete = (props) => { + const { class: className, items = [], value, onSelect, label, placeholder, ...rest } = props; + const query = $(val(value) || ""); + const isOpen = $(false); + const cursor = $(-1); + const list = $(() => { + const q = query().toLowerCase(); + const data = val(items) || []; + return q ? data.filter((o) => (typeof o === "string" ? o : o.label).toLowerCase().includes(q)) : data; + }); + const pick = (opt) => { + const valStr = typeof opt === "string" ? opt : opt.value; + const labelStr = typeof opt === "string" ? opt : opt.label; + query(labelStr); + if (typeof value === "function") + value(valStr); + onSelect?.(opt); + isOpen(false); + cursor(-1); + }; + const nav = (e) => { + const items2 = list(); + if (e.key === "ArrowDown") { + e.preventDefault(); + isOpen(true); + cursor(Math.min(cursor() + 1, items2.length - 1)); + } else if (e.key === "ArrowUp") { + e.preventDefault(); + cursor(Math.max(cursor() - 1, 0)); + } else if (e.key === "Enter" && cursor() >= 0) { + e.preventDefault(); + pick(items2[cursor()]); + } else if (e.key === "Escape") { + isOpen(false); + } + }; + return $html2("div", { class: "relative w-full" }, [ + Input({ + label, + class: className, + placeholder: placeholder || tt("search")(), + value: query, + onfocus: () => isOpen(true), + onblur: () => setTimeout(() => isOpen(false), 150), + onkeydown: nav, + oninput: (e) => { + const v = e.target.value; + query(v); + if (typeof value === "function") + value(v); + isOpen(true); + cursor(-1); + }, + ...rest + }), + $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) => $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 : $html2("li", { class: "p-2 text-center opacity-50" }, tt("nodata")()) + ]) + ]); +}; + +// src/components/Badge.js +var Badge = (props, children) => { + const { class: className, ...rest } = props; + return $html2("span", { + ...rest, + class: ui("badge", className) + }, children); +}; + +// src/components/Button.js +var Button = (props, children) => { + const { class: className, loading, icon, ...rest } = props; + const iconEl = getIcon(icon); + return $html2("button", { + ...rest, + class: ui("btn", className), + disabled: () => val(loading) || val(props.disabled) + }, () => [ + val(loading) && $html2("span", { class: "loading loading-spinner" }), + iconEl, + children + ].filter(Boolean)); +}; + +// src/components/Checkbox.js +var Checkbox = (props) => { + const { class: className, value, tooltip, toggle, label, ...rest } = props; + const checkEl = $html2("input", { + ...rest, + type: "checkbox", + class: () => ui(val(toggle) ? "toggle" : "checkbox", className), + checked: value + }); + const layout = $html2("label", { class: "label cursor-pointer justify-start gap-3" }, [ + checkEl, + label ? $html2("span", { class: "label-text" }, label) : null + ]); + return tooltip ? $html2("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout; +}; + +// src/components/Colorpicker.js +var Colorpicker = (props) => { + const { class: className, value, label, ...rest } = props; + const isOpen = $(false); + const palette = [ + ...["#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"] + ]; + const getColor = () => val(value) || "#000000"; + 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) => { + e.stopPropagation(); + isOpen(!isOpen()); + }, + ...rest + }, [ + $html2("div", { + class: "size-5 rounded-sm shadow-inner border border-black/10 shrink-0", + style: () => `background-color: ${getColor()}` + }), + label ? $html2("span", { class: "opacity-80" }, label) : null + ]), + $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() + }, [ + $html2("div", { class: "grid grid-cols-8 gap-1" }, palette.map((c) => $html2("button", { + type: "button", + style: `background-color: ${c}`, + class: () => { + const active = getColor().toLowerCase() === c.toLowerCase(); + return `size-6 rounded-sm cursor-pointer transition-all hover:scale-125 hover:z-10 active:scale-95 outline-none border border-black/5 + ${active ? "ring-2 ring-offset-1 ring-primary z-10 scale-110" : ""}`; + }, + onclick: () => { + if (typeof value === "function") + value(c); + isOpen(false); + } + }))) + ])), + $if(isOpen, () => $html2("div", { + class: "fixed inset-0 z-[100]", + onclick: () => isOpen(false) + })) + ]); +}; + +// src/components/Datepicker.js +var Datepicker = (props) => { + const { class: className, value, range, label, placeholder, hour = false, ...rest } = props; + const isOpen = $(false); + const internalDate = $(new Date); + const hoverDate = $(null); + const startHour = $(0); + const endHour = $(0); + const isRangeMode = () => val(range) === true; + const now = new Date; + const todayStr = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}-${String(now.getDate()).padStart(2, "0")}`; + const formatDate = (d) => { + const year = d.getFullYear(); + const month = String(d.getMonth() + 1).padStart(2, "0"); + const day = String(d.getDate()).padStart(2, "0"); + return `${year}-${month}-${day}`; + }; + const selectDate = (date) => { + const dateStr = formatDate(date); + const current = val(value); + if (isRangeMode()) { + if (!current?.start || current.start && current.end) { + if (typeof value === "function") { + value({ + start: dateStr, + end: null, + ...hour && { startHour: startHour() } + }); + } + } else { + const start = current.start; + if (typeof value === "function") { + const newValue = dateStr < start ? { start: dateStr, end: start } : { start, end: dateStr }; + if (hour) { + newValue.startHour = current.startHour || startHour(); + newValue.endHour = current.endHour || endHour(); + } + value(newValue); + } + isOpen(false); + } + } else { + if (typeof value === "function") { + value(hour ? `${dateStr}T${String(startHour()).padStart(2, "0")}:00:00` : dateStr); + } + isOpen(false); + } + }; + const displayValue = $(() => { + const v = val(value); + if (!v) + return ""; + if (typeof v === "string") { + if (hour && v.includes("T")) + return v.replace("T", " "); + return v; + } + if (v.start && v.end) { + const startStr = hour && v.startHour ? `${v.start} ${String(v.startHour).padStart(2, "0")}:00` : v.start; + const endStr = hour && v.endHour ? `${v.end} ${String(v.endHour).padStart(2, "0")}:00` : v.end; + return `${startStr} - ${endStr}`; + } + if (v.start) { + const startStr = hour && v.startHour ? `${v.start} ${String(v.startHour).padStart(2, "0")}:00` : v.start; + return `${startStr}...`; + } + return ""; + }); + const move = (m) => { + const d = internalDate(); + internalDate(new Date(d.getFullYear(), d.getMonth() + m, 1)); + }; + const moveYear = (y) => { + const d = internalDate(); + internalDate(new Date(d.getFullYear() + y, d.getMonth(), 1)); + }; + const HourSlider = ({ value: hVal, onChange }) => { + return $html2("div", { class: "flex-1" }, [ + $html2("div", { class: "flex gap-2 items-center" }, [ + $html2("input", { + type: "range", + min: 0, + max: 23, + value: hVal, + class: "range range-xs flex-1", + oninput: (e) => { + const newHour = parseInt(e.target.value); + onChange(newHour); + } + }), + $html2("span", { class: "text-sm font-mono min-w-[48px] text-center" }, () => String(val(hVal)).padStart(2, "0") + ":00") + ]) + ]); + }; + return $html2("div", { class: ui("relative w-full", className) }, [ + Input({ + label, + placeholder: placeholder || (isRangeMode() ? "Seleccionar rango..." : "Seleccionar fecha..."), + value: displayValue, + readonly: true, + icon: getIcon("icon-[lucide--calendar]"), + onclick: (e) => { + e.stopPropagation(); + isOpen(!isOpen()); + }, + ...rest + }), + $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() + }, [ + $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]")) + ]), + $html2("span", { class: "font-bold uppercase flex-1 text-center" }, [ + () => internalDate().toLocaleString("es-ES", { month: "short", year: "numeric" }) + ]), + $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]")) + ]) + ]), + $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(); + const month = d.getMonth(); + const firstDay = new Date(year, month, 1).getDay(); + const offset = firstDay === 0 ? 6 : firstDay - 1; + const daysInMonth = new Date(year, month + 1, 0).getDate(); + const nodes = []; + for (let i = 0;i < offset; i++) + nodes.push($html2("div")); + for (let i = 1;i <= daysInMonth; i++) { + const date = new Date(year, month, i); + const dStr = formatDate(date); + nodes.push($html2("button", { + type: "button", + class: () => { + const v = val(value); + const h = hoverDate(); + const isStart = typeof v === "string" ? v.split("T")[0] === dStr : v?.start === dStr; + const isEnd = v?.end === dStr; + let inRange = false; + if (isRangeMode() && v?.start) { + const start = v.start; + if (!v.end && h) { + inRange = dStr > start && dStr <= h || dStr < start && dStr >= h; + } else if (v.end) { + inRange = dStr > start && dStr < v.end; + } + } + const base = "btn btn-xs p-0 aspect-square min-h-0 h-auto font-normal relative"; + const state = isStart || isEnd ? "btn-primary z-10" : inRange ? "bg-primary/20 border-none rounded-none" : "btn-ghost"; + const today = dStr === todayStr ? "ring-1 ring-primary ring-inset font-black text-primary" : ""; + return `${base} ${state} ${today}`; + }, + onmouseenter: () => { + if (isRangeMode()) + hoverDate(dStr); + }, + onclick: () => selectDate(date) + }, [i.toString()])); + } + return nodes; + } + ]), + 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) => { + startHour(newHour); + const currentVal = val(value); + if (currentVal?.start) + value({ ...currentVal, startHour: newHour }); + } + }), + HourSlider({ + value: endHour, + onChange: (newHour) => { + endHour(newHour); + const currentVal = val(value); + if (currentVal?.end) + value({ ...currentVal, endHour: newHour }); + } + }) + ]) : HourSlider({ + value: startHour, + onChange: (newHour) => { + startHour(newHour); + const currentVal = val(value); + if (currentVal && typeof currentVal === "string" && currentVal.includes("-")) { + value(currentVal.split("T")[0] + "T" + String(newHour).padStart(2, "0") + ":00:00"); + } + } + }) + ]) : null + ])), + $if(isOpen, () => $html2("div", { class: "fixed inset-0 z-[90]", onclick: () => isOpen(false) })) + ]); +}; + +// src/components/Drawer.js +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 $html2("div", { + ...rest, + class: ui("drawer", className) + }, [ + $html2("input", { + id: drawerId, + type: "checkbox", + class: "drawer-toggle", + checked: () => typeof open === "function" ? open() : open, + onchange: (e) => { + if (typeof open === "function") + open(e.target.checked); + } + }), + $html2("div", { class: "drawer-content" }, [ + typeof content === "function" ? content() : content + ]), + $html2("div", { class: "drawer-side" }, [ + $html2("label", { + for: drawerId, + class: "drawer-overlay", + onclick: () => { + if (typeof open === "function") + open(false); + } + }), + $html2("div", { class: "min-h-full bg-base-200 w-80" }, [ + typeof side === "function" ? side() : side + ]) + ]) + ]); +}; + +// src/components/Dropdown.js +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; + 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); + 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) + ]) + ])); + } + ]) + ]); +}; + +// src/components/Fab.js +var Fab = (props) => { + const { class: className, icon, label, actions = [], position = "bottom-6 right-6", ...rest } = props; + return $html2("div", { + ...rest, + class: ui(`fab absolute ${position} flex flex-col-reverse items-end gap-3 z-[100]`, className) + }, [ + $html2("div", { + tabindex: 0, + role: "button", + class: "btn btn-lg btn-circle btn-primary shadow-2xl" + }, [ + icon ? getIcon(icon) : null, + !icon && label ? label : null + ]), + ...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) => { + e.stopPropagation(); + act.onclick?.(e); + } + }, [act.icon ? getIcon(act.icon) : act.text || ""]) + ])) + ]); +}; + +// src/components/Fieldset.js +var Fieldset = (props, children) => { + const { class: className, legend, ...rest } = props; + 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 ? $html2("legend", { class: "fieldset-legend font-bold" }, [legendText]) : null; + }, + children + ]); +}; + +// src/components/Fileinput.js +var Fileinput = (props) => { + const { class: className, tooltip, max = 2, accept = "*", onSelect, ...rest } = props; + const selectedFiles = $([]); + const isDragging = $(false); + const error = $(null); + const MAX_BYTES = max * 1024 * 1024; + const handleFiles = (files) => { + const fileList = Array.from(files); + error(null); + const oversized = fileList.find((f) => f.size > MAX_BYTES); + if (oversized) { + error(`Máx ${max}MB`); + return; + } + selectedFiles([...selectedFiles(), ...fileList]); + onSelect?.(selectedFiles()); + }; + const removeFile = (index) => { + const updated = selectedFiles().filter((_, i) => i !== index); + selectedFiles(updated); + onSelect?.(updated); + }; + 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 + }, [ + $html2("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 + ${isDragging() ? "border-primary bg-primary/10" : "border-base-content/20 bg-base-100 hover:bg-base-200"} + `, + ondragover: (e) => { + e.preventDefault(); + isDragging(true); + }, + ondragleave: () => isDragging(false), + ondrop: (e) => { + e.preventDefault(); + isDragging(false); + handleFiles(e.dataTransfer.files); + } + }, [ + $html2("div", { class: "flex items-center gap-3 w-full" }, [ + getIcon("icon-[lucide--upload]"), + $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`) + ]), + $html2("input", { + type: "file", + multiple: true, + accept, + class: "hidden", + onchange: (e) => handleFiles(e.target.files) + }) + ]) + ]), + () => 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)`) + ]), + $html2("button", { + type: "button", + class: "btn btn-ghost btn-xs btn-circle", + onclick: (e) => { + e.preventDefault(); + e.stopPropagation(); + removeFile(index); + } + }, [getIcon("icon-[lucide--x]")]) + ]), (file) => file.name + file.lastModified) + ])) + ]); +}; + +// src/components/Indicator.js +var Indicator = (props, children) => { + const { value, class: className, ...rest } = props; + return $html2("div", { + ...rest, + class: "indicator" + }, () => [ + value ? $html2("span", { + class: ui("indicator-item badge", className) + }, () => typeof value === "function" ? value() : value) : null, + children + ].filter(Boolean)); +}; + +// src/components/Label.js +var Label = (props) => { + const { children, value, floating = false, error, required, class: className, ...rest } = props; + if (floating) { + return $html2("label", { class: ui("floating-label w-full", className), ...rest }, () => [ + value ? $html2("span", {}, value) : null, + children, + error ? $html2("span", { class: "text-error text-xs" }, val(error)) : null + ]); + } + return $html2("label", { class: ui("input w-full", className), ...rest }, () => [ + value ? $html2("span", { class: "label" }, value) : null, + children, + error ? $html2("span", { class: "text-error text-xs" }, val(error)) : null + ]); +}; + +// src/components/List.js +var List = (props) => { + const { class: className, items, header, render, keyFn = (item, index) => item.id ?? index, ...rest } = props; + 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, () => $html2("li", { class: "p-4 pb-2 text-xs opacity-60" }, [val(header)])), listItems] : listItems); +}; + +// src/components/Menu.js +var Menu = (props) => { + const { class: className, items, ...rest } = props; + 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 $html2("ul", { ...rest, class: ui("menu bg-base-200 rounded-box", className) }, renderItems(items)); +}; + +// src/components/Modal.js +var Modal = (props, children) => { + const { class: className, title, buttons, open, ...rest } = props; + let dialogElement = null; + const handleOpen = () => { + const isOpen = typeof open === "function" ? open() : open; + if (!dialogElement) + return; + if (isOpen) { + if (!dialogElement.open) + dialogElement.showModal(); + } else { + if (dialogElement.open) + dialogElement.close(); + } + }; + $watch2(() => handleOpen()); + const close = () => { + if (typeof open === "function") + open(false); + }; + return $html2("dialog", { + ...rest, + ref: (el) => { + dialogElement = el; + if (el) + handleOpen(); + }, + class: ui("modal", className), + onclose: close, + oncancel: close + }, [ + $html2("div", { class: "modal-box" }, [ + title ? $html2("h3", { class: "text-lg font-bold mb-4" }, () => typeof title === "function" ? title() : title) : null, + $html2("div", { class: "py-2" }, [ + typeof children === "function" ? children() : children + ]), + $html2("div", { class: "modal-action" }, [ + $html2("form", { method: "dialog", class: "flex gap-2" }, [ + ...(Array.isArray(buttons) ? buttons : [buttons]).filter(Boolean), + Button({ type: "submit" }, tt("close")()) + ]) + ]) + ]), + $html2("form", { method: "dialog", class: "modal-backdrop" }, [ + $html2("button", {}, "close") + ]) + ]); +}; + +// src/components/Navbar.js +var Navbar = (props, children) => { + const { class: className, ...rest } = props; + return $html2("div", { ...rest, class: ui("navbar bg-base-100 shadow-sm px-4", className) }, children); +}; + +// src/components/Radio.js +var Radio = (props) => { + const { class: className, label, tooltip, value, inputValue, name, ...rest } = props; + const radioEl = $html2("input", { + ...rest, + type: "radio", + name, + class: ui("radio", className), + checked: () => val(value) === inputValue, + onclick: () => { + if (typeof value === "function") + value(inputValue); + } + }); + if (!label && !tooltip) + return radioEl; + const layout = $html2("label", { class: "label cursor-pointer justify-start gap-3" }, [ + radioEl, + label ? $html2("span", { class: "label-text" }, label) : null + ]); + return tooltip ? $html2("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout; +}; + +// src/components/Range.js +var Range = (props) => { + const { class: className, label, tooltip, value, ...rest } = props; + const rangeEl = $html2("input", { + ...rest, + type: "range", + class: ui("range", className), + value, + disabled: () => val(props.disabled) + }); + if (!label && !tooltip) + return rangeEl; + const layout = $html2("div", { class: "flex flex-col gap-2" }, [ + label ? $html2("span", { class: "label-text" }, label) : null, + rangeEl + ]); + return tooltip ? $html2("div", { class: "tooltip", "data-tip": tooltip }, layout) : layout; +}; + +// src/components/Rating.js +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 $html2("div", { + ...rest, + class: () => ui(`rating ${val(readonly) ? "pointer-events-none" : ""}`, className) + }, Array.from({ length: val(count) }, (_, i) => { + const starValue = i + 1; + return $html2("input", { + type: "radio", + name: ratingGroup, + class: `mask ${mask}`, + checked: () => Math.round(val(value)) === starValue, + onchange: () => { + if (!val(readonly)) { + if (typeof onchange === "function") { + onchange(starValue); + } else if (typeof value === "function") { + value(starValue); + } + } + } + }); + })); +}; + +// src/components/Select.js +var Select = (props) => { + const { class: className, label, items, value, ...rest } = props; + const selectEl = $html2("select", { + ...rest, + class: ui("select select-bordered w-full", className), + value + }, $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 $html2("label", { class: "fieldset-label flex flex-col gap-1" }, [ + $html2("span", {}, label), + selectEl + ]); +}; + +// src/components/Stack.js +var Stack = (props, children) => { + const { class: className, ...rest } = props; + return $html2("div", { ...rest, class: ui("stack", className) }, children); +}; + +// src/components/Stat.js +var Stat = (props) => { + const { class: className, icon, label, value, desc, ...rest } = props; + 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) + ]); +}; + +// src/components/Swap.js +var Swap = (props) => { + const { class: className, value, on, off, ...rest } = props; + return $html2("label", { ...rest, class: ui("swap", className) }, [ + $html2("input", { + type: "checkbox", + checked: () => val(value), + onclick: (e) => { + if (typeof value === "function") { + value(e.target.checked); + } + } + }), + $html2("div", { class: "swap-on" }, on), + $html2("div", { class: "swap-off" }, off) + ]); +}; + +// src/components/Table.js +var Table = (props) => { + const { class: className, items = [], columns = [], keyFn, zebra = false, pinRows = false, empty = tt("nodata")(), ...rest } = props; + const tableClass = () => { + const zebraClass = val(zebra) ? "table-zebra" : ""; + const pinRowsClass = val(pinRows) ? "table-pin-rows" : ""; + return ui("table", className, zebraClass, pinRowsClass); + }; + const getInternalKeyFn = keyFn || ((item, idx) => item.id || idx); + 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))) + ]), + $html2("tbody", {}, [ + $for(items, (item, index) => { + const it = () => { + const currentItems = val(items); + const key = getInternalKeyFn(item, index); + return currentItems.find((u, i) => getInternalKeyFn(u, i) === key) || item; + }; + return $html2("tr", { class: "hover" }, columns.map((col) => { + const cellContent = () => { + const latestItem = it(); + if (col.render) + return col.render(latestItem, index); + return val(latestItem[col.key]); + }; + return $html2("td", { class: col.class || "" }, [cellContent]); + })); + }, getInternalKeyFn), + $if(() => val(items).length === 0, () => $html2("tr", {}, [ + $html2("td", { colspan: columns.length, class: "text-center p-10 opacity-50" }, [ + val(empty) + ]) + ])) + ]) + ]) + ]); +}; + +// src/components/Tabs.js +var Tabs = (props) => { + const { items, class: className, ...rest } = props; + const itemsSignal = typeof items === "function" ? items : () => items || []; + const activeIndex = $(0); + $watch(() => { + const idx = itemsSignal().findIndex((it) => val(it.active) === true); + if (idx !== -1 && idx !== activeIndex()) + activeIndex(idx); + }); + return $html2("div", { ...rest, class: "w-full" }, [ + $html2("div", { + role: "tablist", + class: ui("tabs", className || "tabs-box") + }, () => { + const list = itemsSignal(); + return list.map((it, idx) => { + const isSelected = () => activeIndex() === idx; + const tab = $html2("button", { + role: "tab", + class: () => ui("tab", isSelected() ? "tab-active" : ""), + onclick: (e) => { + e.preventDefault(); + if (!val(it.disabled)) { + if (it.onclick) + it.onclick(); + activeIndex(idx); + } + } + }); + $watch(() => { + const content = val(it.label); + if (content instanceof Node) { + tab.replaceChildren(content); + } else { + tab.textContent = String(content); + } + }); + return tab; + }); + }), + $html2("div", { class: "tab-panels" }, () => { + return itemsSignal().map((it, idx) => { + const isVisible = () => activeIndex() === idx; + return $html2("div", { + role: "tabpanel", + class: "tab-content bg-base-100 border-base-300 p-6", + style: () => isVisible() ? "display: block" : "display: none" + }, [ + () => typeof it.content === "function" ? it.content() : it.content + ]); + }); + }) + ]); +}; + +// src/components/Timeline.js +var Timeline = (props) => { + const { class: className, items = [], vertical = true, compact = false, ...rest } = props; + const iconMap = { + info: "icon-[lucide--info]", + success: "icon-[lucide--check-circle]", + warning: "icon-[lucide--alert-triangle]", + error: "icon-[lucide--alert-circle]" + }; + return $html2("ul", { + ...rest, + class: () => ui(`timeline ${val(vertical) ? "timeline-vertical" : "timeline-horizontal"} ${val(compact) ? "timeline-compact" : ""}`, className) + }, () => { + const list = (typeof items === "function" ? items() : items) || []; + return list.map((item, i) => { + const isFirst = i === 0; + const isLast = i === list.length - 1; + const itemType = item.type || "success"; + const isCompleted = () => val(item.completed); + const prevCompleted = () => i > 0 && val(list[i - 1].completed); + const renderSlot = (content) => typeof content === "function" ? content() : content; + return $html2("li", { class: "flex-1" }, [ + !isFirst ? $html2("hr", { class: () => prevCompleted() ? "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) + ]), + $html2("div", { class: "timeline-end timeline-box shadow-sm" }, [() => renderSlot(item.detail)]), + !isLast ? $html2("hr", { class: () => isCompleted() ? "bg-primary" : "" }) : null + ]); + }); + }); +}; + +// src/components/Toast.js +var Toast = (message, type = "alert-success", duration = 3500) => { + let container = document.getElementById("sigpro-toast-container"); + if (!container) { + 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 = $html2("div", { style: "display: contents" }); + container.appendChild(toastHost); + let timeoutId; + const close = () => { + clearTimeout(timeoutId); + const el = toastHost.firstElementChild; + if (el && !el.classList.contains("opacity-0")) { + el.classList.add("translate-x-full", "opacity-0"); + setTimeout(() => { + instance.destroy(); + toastHost.remove(); + if (!container.hasChildNodes()) + container.remove(); + }, 300); + } else { + instance.destroy(); + toastHost.remove(); + } + }; + const ToastComponent = () => { + const closeIcon = getIcon("icon-[lucide--x]"); + const el = $html2("div", { + class: `alert alert-soft ${type} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto` + }, [ + $html2("span", {}, [typeof message === "function" ? message() : message]), + Button({ + class: "btn-xs btn-circle btn-ghost", + onclick: close + }, closeIcon) + ]); + requestAnimationFrame(() => el.classList.remove("translate-x-10", "opacity-0")); + return el; + }; + const instance = $mount(ToastComponent, toastHost); + if (duration > 0) { + timeoutId = setTimeout(close, duration); + } + return close; +}; + +// src/components/Tooltip.js +var Tooltip = (props, children) => $html2("div", { + ...props, + class: () => ui("tooltip", props.ui, props.class), + "data-tip": props.tip +}, children); +export { + val, + ui, + tt, + getIcon, + Tooltip, + Toast, + Timeline, + Tabs, + Table, + Swap, + Stat, + Stack, + Select, + Rating, + Range, + Radio, + Navbar, + Modal, + Menu, + List, + Label, + Input, + Indicator, + Fileinput, + Fieldset, + Fab, + Dropdown, + Drawer, + Datepicker, + Colorpicker, + Checkbox, + Button, + Badge, + Autocomplete, + Alert, + Accordion +}; diff --git a/dist/sigpro-ui.esm.min.js b/dist/sigpro-ui.esm.min.js new file mode 100644 index 0000000..20b9ce1 --- /dev/null +++ b/dist/sigpro-ui.esm.min.js @@ -0,0 +1,7 @@ +var O=null,y=null,u=new Set,p=!1,t=new WeakMap,QJ=()=>{if(p)return;p=!0;while(u.size>0){let K=Array.from(u).sort((Y,G)=>(Y.depth||0)-(G.depth||0));u.clear();for(let Y of K)if(!Y._deleted)Y()}p=!1},XJ=(K)=>{if(O&&!O._deleted)K.add(O),O._deps.add(K)},e=(K)=>{for(let Y of K){if(Y===O||Y._deleted)continue;if(Y._isComputed){if(Y.markDirty(),Y._subs)e(Y._subs)}else u.add(Y)}if(!p)queueMicrotask(QJ)},JJ=(K)=>{if(K._cleanups)K._cleanups.forEach((Y)=>Y()),K._cleanups.clear();K.childNodes?.forEach(JJ)},c=(K)=>{let Y=new Set,G=y,W=document.createElement("div");W.style.display="contents",y={cleanups:Y};try{let Q=K({onCleanup:(X)=>Y.add(X)}),q=(X)=>{if(!X)return;if(X._isRuntime)Y.add(X.destroy),W.appendChild(X.container);else if(Array.isArray(X))X.forEach(q);else W.appendChild(X instanceof Node?X:document.createTextNode(String(X)))};q(Q)}finally{y=G}return{_isRuntime:!0,container:W,destroy:()=>{Y.forEach((Q)=>Q()),JJ(W),W.remove()}}},F=(K,Y=null)=>{if(typeof K==="function"){let Q=new Set,q,X=!0,Z=()=>{if(Z._deleted)return;Z._deps.forEach((B)=>B.delete(Z)),Z._deps.clear();let L=O;O=Z;try{let B=K();if(!Object.is(q,B)||X)q=B,X=!1,e(Q)}finally{O=L}};if(Z._deps=new Set,Z._isComputed=!0,Z._subs=Q,Z._deleted=!1,Z.markDirty=()=>X=!0,Z.stop=()=>{Z._deleted=!0,Z._deps.forEach((L)=>L.delete(Z)),Q.clear()},y)y.cleanups.add(Z.stop);return()=>{if(X)Z();return XJ(Q),q}}let G=K;if(Y)try{let Q=localStorage.getItem(Y);if(Q!==null)G=JSON.parse(Q)}catch(Q){console.warn("SigPro: LocalStorage locked",Q)}let W=new Set;return(...Q)=>{if(Q.length){let q=typeof Q[0]==="function"?Q[0](G):Q[0];if(!Object.is(G,q)){if(G=q,Y)localStorage.setItem(Y,JSON.stringify(G));e(W)}}return XJ(W),G}},k=(K,Y)=>{let G=Array.isArray(K),W=G?Y:K,Q=G?K:null;if(typeof W!=="function")return()=>{};let q=y,X=()=>{if(X._deleted)return;X._deps.forEach((B)=>B.delete(X)),X._deps.clear(),X._cleanups.forEach((B)=>B()),X._cleanups.clear();let Z=O,L=y;O=X,y={cleanups:X._cleanups},X.depth=Z?Z.depth+1:0;try{if(G)O=null,W(),O=X,Q.forEach((B)=>typeof B==="function"&&B());else W()}finally{O=Z,y=L}};if(X._deps=new Set,X._cleanups=new Set,X._deleted=!1,X.stop=()=>{if(X._deleted)return;if(X._deleted=!0,u.delete(X),X._deps.forEach((Z)=>Z.delete(X)),X._cleanups.forEach((Z)=>Z()),q)q.cleanups.delete(X.stop)},q)q.cleanups.add(X.stop);return X(),X.stop},J=(K,Y={},G=[])=>{if(Y instanceof Node||Array.isArray(Y)||typeof Y!=="object")G=Y,Y={};let W=document.createElement(K),Q=(Z,L)=>(Z==="src"||Z==="href")&&String(L).toLowerCase().includes("javascript:")?"#":L;W._cleanups=new Set;let q=["disabled","checked","required","readonly","selected","multiple","autofocus"];for(let[Z,L]of Object.entries(Y)){if(Z==="ref"){typeof L==="function"?L(W):L.current=W;continue}let B=typeof L==="function";if(["INPUT","TEXTAREA","SELECT"].includes(W.tagName)&&(Z==="value"||Z==="checked")&&B){W._cleanups.add(k(()=>{let A=L();if(W[Z]!==A)W[Z]=A}));let C=Z==="checked"?"change":"input",M=(A)=>L(A.target[Z]);W.addEventListener(C,M),W._cleanups.add(()=>W.removeEventListener(C,M))}else if(Z.startsWith("on")){let C=Z.slice(2).toLowerCase().split(".")[0],M=(A)=>L(A);W.addEventListener(C,M),W._cleanups.add(()=>W.removeEventListener(C,M))}else if(B)W._cleanups.add(k(()=>{let C=Q(Z,L());if(Z==="class")W.className=C||"";else if(q.includes(Z))if(C)W.setAttribute(Z,""),W[Z]=!0;else W.removeAttribute(Z),W[Z]=!1;else C==null?W.removeAttribute(Z):W.setAttribute(Z,C)}));else if(q.includes(Z))if(L)W.setAttribute(Z,""),W[Z]=!0;else W.removeAttribute(Z),W[Z]=!1;else W.setAttribute(Z,Q(Z,L))}let X=(Z)=>{if(Array.isArray(Z))return Z.forEach(X);if(Z instanceof Node)W.appendChild(Z);else if(typeof Z==="function"){let L=document.createTextNode("");W.appendChild(L);let B=[];W._cleanups.add(k(()=>{let R=Z(),z=(Array.isArray(R)?R:[R]).map((C)=>C?._isRuntime?C.container:C instanceof Node?C:document.createTextNode(C??""));B.forEach((C)=>{JJ?.(C),C.remove()}),z.forEach((C)=>L.parentNode?.insertBefore(C,L)),B=z}))}else W.appendChild(document.createTextNode(Z??""))};return X(G),W},E=(K,Y,G=null)=>{let W=document.createTextNode(""),Q=J("div",{style:"display:contents"},[W]),q=null,X=null;return k(()=>{let Z=!!(typeof K==="function"?K():K);if(Z!==X){if(X=Z,q)q.destroy();let L=Z?Y:G;if(L)q=c(()=>typeof L==="function"?L():L),Q.insertBefore(q.container,W)}}),Q};E.not=(K,Y,G)=>E(()=>!(typeof K==="function"?K():K),Y,G);var N=(K,Y,G,W="div",Q={style:"display:contents"})=>{let q=document.createTextNode(""),X=J(W,Q,[q]),Z=new Map;return k(()=>{let L=(typeof K==="function"?K():K)||[],B=new Map,R=[];for(let C=0;CY(M,C));else Z.delete(A);B.set(A,U),R.push(A)}Z.forEach((C)=>{C.destroy(),C.container.remove()});let z=q;for(let C=R.length-1;C>=0;C--){let M=B.get(R[C]);if(M.container.nextSibling!==z)X.insertBefore(M.container,z);z=M.container}Z=B}),X},g=(K)=>{let Y=F(window.location.hash.replace(/^#/,"")||"/");window.addEventListener("hashchange",()=>Y(window.location.hash.replace(/^#/,"")||"/"));let G=J("div",{class:"router-outlet"}),W=null;return k([Y],async()=>{let Q=Y(),q=K.find((X)=>{let Z=X.path.split("/").filter(Boolean),L=Q.split("/").filter(Boolean);return Z.length===L.length&&Z.every((B,R)=>B.startsWith(":")||B===L[R])})||K.find((X)=>X.path==="*");if(q){let X=q.component;if(typeof X==="function"&&X.toString().includes("import"))X=(await X()).default||await X();let Z={};if(q.path.split("/").filter(Boolean).forEach((L,B)=>{if(L.startsWith(":"))Z[L.slice(1)]=Q.split("/").filter(Boolean)[B]}),W)W.destroy();if(g.params)g.params(Z);W=c(()=>{try{return typeof X==="function"?X(Z):X}catch(L){return J("div",{class:"p-4 text-error"},"Error loading view")}}),G.appendChild(W.container)}}),G};g.params=F({});g.to=(K)=>window.location.hash=K.replace(/^#?\/?/,"#/");g.back=()=>window.history.back();g.path=()=>window.location.hash.replace(/^#/,"")||"/";var WJ=(K,Y)=>{let G=typeof Y==="string"?document.querySelector(Y):Y;if(!G)return;if(t.has(G))t.get(G).destroy();let W=c(typeof K==="function"?K:()=>K);return G.replaceChildren(W.container),t.set(G,W),W},LJ={$:F,$watch:k,$html:J,$if:E,$for:N,$router:g,$mount:WJ};if(typeof window<"u")((Y)=>{Object.keys(Y).forEach((W)=>{window[W]=Y[W]}),"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((W)=>{let Q=W.charAt(0).toUpperCase()+W.slice(1);if(!(Q in window))window[Q]=(q,X)=>J(W,q,X)}),window.SigPro=Object.freeze(Y)})(LJ);var _=(K)=>typeof K==="function"?K():K,P=(K,Y)=>typeof Y==="function"?()=>`${K} ${Y()||""}`.trim():`${K} ${Y||""}`.trim(),V=(K)=>{if(!K)return null;if(typeof K==="function")return J("span",{class:"mr-1"},K());if(typeof K==="object")return J("span",{class:"mr-1"},K);if(typeof K==="string"){let Y=K.trim().split(/\s+/),G=Y[Y.length-1]==="right",W=G?Y.slice(0,-1).join(" "):K,Q=G?"ml-1":"mr-1";if(W&&!W.startsWith("icon-[")&&!W.includes("--"))return J("span",{class:Q},W);return J("span",{class:`${W} ${Q}`.trim()})}return null};var UJ=(K,Y)=>{let{class:G,title:W,name:Q,open:q,...X}=K;return J("div",{...X,class:P("collapse collapse-arrow bg-base-200 mb-2",G)},[J("input",{type:Q?"radio":"checkbox",name:Q,checked:_(q)}),J("div",{class:"collapse-title text-xl font-medium"},W),J("div",{class:"collapse-content"},Y)])};var VJ=(K,Y)=>{let{class:G,actions:W,type:Q="info",soft:q=!0,...X}=K,Z={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},R=[`alert-${Q}`,q?"alert-soft":"",G].filter(Boolean).join(" "),z=Y||K.message;return J("div",{...X,role:"alert",class:P("alert",R)},()=>[V(Z[Q]),J("div",{class:"flex-1"},[J("span",{},[typeof z==="function"?z():z])]),W?J("div",{class:"flex-none"},[typeof W==="function"?W():W]):null].filter(Boolean))};var qJ={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"}},BJ=F("es");var f=(K)=>()=>qJ[BJ()][K]||K;var i=(K)=>{let{class:Y,value:G,type:W="text",icon:Q,oninput:q,placeholder:X,disabled:Z,size:L,validate:B,...R}=K,z=W==="password",C=F(!1),M=F(null),A={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]"},U=Q?V(Q):A[W]?V(A[W]):null,S=()=>V(C()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),h=U?"pl-10":"",a=z?"pr-10":"",m=()=>{if(Y?.includes("input-xs"))return"btn-xs";if(Y?.includes("input-sm"))return"btn-sm";if(Y?.includes("input-lg"))return"btn-lg";return"btn-md"},d=(H)=>{let j=H.target.value;if(B){let v=B(j);M(v||null)}q?.(H)},$=()=>M()&&M()!=="",D=J("input",{...R,type:()=>z?C()?"text":"password":W,placeholder:X||" ",class:()=>{let H=`input w-full ${h} ${a}`;if(Y)H+=` ${Y}`;if($())H+=" input-error";return H.trim()},value:G,oninput:d,disabled:()=>_(Z),"aria-invalid":()=>$()?"true":"false"});return J("div",{class:"relative w-full"},()=>[D,U?J("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},U):null,z?J("button",{type:"button",class:P("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",m()),onclick:(H)=>{H.preventDefault(),C(!C())}},()=>S()):null,J("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>$()?M():null)])};var fJ=(K)=>{let{class:Y,items:G=[],value:W,onSelect:Q,label:q,placeholder:X,...Z}=K,L=F(_(W)||""),B=F(!1),R=F(-1),z=F(()=>{let A=L().toLowerCase(),U=_(G)||[];return A?U.filter((S)=>(typeof S==="string"?S:S.label).toLowerCase().includes(A)):U}),C=(A)=>{let U=typeof A==="string"?A:A.value,S=typeof A==="string"?A:A.label;if(L(S),typeof W==="function")W(U);Q?.(A),B(!1),R(-1)},M=(A)=>{let U=z();if(A.key==="ArrowDown")A.preventDefault(),B(!0),R(Math.min(R()+1,U.length-1));else if(A.key==="ArrowUp")A.preventDefault(),R(Math.max(R()-1,0));else if(A.key==="Enter"&&R()>=0)A.preventDefault(),C(U[R()]);else if(A.key==="Escape")B(!1)};return J("div",{class:"relative w-full"},[i({label:q,class:Y,placeholder:X||f("search")(),value:L,onfocus:()=>B(!0),onblur:()=>setTimeout(()=>B(!1),150),onkeydown:M,oninput:(A)=>{let U=A.target.value;if(L(U),typeof W==="function")W(U);B(!0),R(-1)},...Z}),J("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:()=>B()&&z().length?"display:block":"display:none"},[N(z,(A,U)=>J("li",{},[J("a",{class:()=>`block w-full ${R()===U?"active bg-primary text-primary-content":""}`,onclick:()=>C(A),onmouseenter:()=>R(U)},typeof A==="string"?A:A.label)]),(A,U)=>(typeof A==="string"?A:A.value)+U),()=>z().length?null:J("li",{class:"p-2 text-center opacity-50"},f("nodata")())])])};var gJ=(K,Y)=>{let{class:G,...W}=K;return J("span",{...W,class:P("badge",G)},Y)};var n=(K,Y)=>{let{class:G,loading:W,icon:Q,...q}=K,X=V(Q);return J("button",{...q,class:P("btn",G),disabled:()=>_(W)||_(K.disabled)},()=>[_(W)&&J("span",{class:"loading loading-spinner"}),X,Y].filter(Boolean))};var iJ=(K)=>{let{class:Y,value:G,tooltip:W,toggle:Q,label:q,...X}=K,Z=J("input",{...X,type:"checkbox",class:()=>P(_(Q)?"toggle":"checkbox",Y),checked:G}),L=J("label",{class:"label cursor-pointer justify-start gap-3"},[Z,q?J("span",{class:"label-text"},q):null]);return W?J("div",{class:"tooltip","data-tip":W},L):L};var sJ=(K)=>{let{class:Y,value:G,label:W,...Q}=K,q=F(!1),X=["#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"],Z=()=>_(G)||"#000000";return J("div",{class:P("relative w-fit",Y)},[J("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:(L)=>{L.stopPropagation(),q(!q())},...Q},[J("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${Z()}`}),W?J("span",{class:"opacity-80"},W):null]),E(q,()=>J("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:(L)=>L.stopPropagation()},[J("div",{class:"grid grid-cols-8 gap-1"},X.map((L)=>J("button",{type:"button",style:`background-color: ${L}`,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 + ${Z().toLowerCase()===L.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof G==="function")G(L);q(!1)}})))])),E(q,()=>J("div",{class:"fixed inset-0 z-[100]",onclick:()=>q(!1)}))])};var JW=(K)=>{let{class:Y,value:G,range:W,label:Q,placeholder:q,hour:X=!1,...Z}=K,L=F(!1),B=F(new Date),R=F(null),z=F(0),C=F(0),M=()=>_(W)===!0,A=new Date,U=`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,S=(T)=>{let D=T.getFullYear(),H=String(T.getMonth()+1).padStart(2,"0"),j=String(T.getDate()).padStart(2,"0");return`${D}-${H}-${j}`},h=(T)=>{let D=S(T),H=_(G);if(M())if(!H?.start||H.start&&H.end){if(typeof G==="function")G({start:D,end:null,...X&&{startHour:z()}})}else{let j=H.start;if(typeof G==="function"){let v=D{let T=_(G);if(!T)return"";if(typeof T==="string"){if(X&&T.includes("T"))return T.replace("T"," ");return T}if(T.start&&T.end){let D=X&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start,H=X&&T.endHour?`${T.end} ${String(T.endHour).padStart(2,"0")}:00`:T.end;return`${D} - ${H}`}if(T.start)return`${X&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start}...`;return""}),m=(T)=>{let D=B();B(new Date(D.getFullYear(),D.getMonth()+T,1))},d=(T)=>{let D=B();B(new Date(D.getFullYear()+T,D.getMonth(),1))},$=({value:T,onChange:D})=>{return J("div",{class:"flex-1"},[J("div",{class:"flex gap-2 items-center"},[J("input",{type:"range",min:0,max:23,value:T,class:"range range-xs flex-1",oninput:(H)=>{let j=parseInt(H.target.value);D(j)}}),J("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(_(T)).padStart(2,"0")+":00")])])};return J("div",{class:P("relative w-full",Y)},[i({label:Q,placeholder:q||(M()?"Seleccionar rango...":"Seleccionar fecha..."),value:a,readonly:!0,icon:V("icon-[lucide--calendar]"),onclick:(T)=>{T.stopPropagation(),L(!L())},...Z}),E(L,()=>J("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()},[J("div",{class:"flex justify-between items-center mb-4 gap-1"},[J("div",{class:"flex gap-0.5"},[J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>d(-1)},V("icon-[lucide--chevrons-left]")),J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>m(-1)},V("icon-[lucide--chevron-left]"))]),J("span",{class:"font-bold uppercase flex-1 text-center"},[()=>B().toLocaleString("es-ES",{month:"short",year:"numeric"})]),J("div",{class:"flex gap-0.5"},[J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>m(1)},V("icon-[lucide--chevron-right]")),J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>d(1)},V("icon-[lucide--chevrons-right]"))])]),J("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>R(null)},[...["L","M","X","J","V","S","D"].map((T)=>J("div",{class:"text-[10px] opacity-40 font-bold text-center"},T)),()=>{let T=B(),D=T.getFullYear(),H=T.getMonth(),j=new Date(D,H,1).getDay(),v=j===0?6:j-1,GJ=new Date(D,H+1,0).getDate(),l=[];for(let b=0;b{let w=_(G),s=R(),KJ=typeof w==="string"?w.split("T")[0]===I:w?.start===I,YJ=w?.end===I,o=!1;if(M()&&w?.start){let r=w.start;if(!w.end&&s)o=I>r&&I<=s||I=s;else if(w.end)o=I>r&&I{if(M())R(I)},onclick:()=>h(ZJ)},[b.toString()]))}return l}]),X?J("div",{class:"mt-3 pt-2 border-t border-base-300"},[M()?J("div",{class:"flex gap-4"},[$({value:z,onChange:(T)=>{z(T);let D=_(G);if(D?.start)G({...D,startHour:T})}}),$({value:C,onChange:(T)=>{C(T);let D=_(G);if(D?.end)G({...D,endHour:T})}})]):$({value:z,onChange:(T)=>{z(T);let D=_(G);if(D&&typeof D==="string"&&D.includes("-"))G(D.split("T")[0]+"T"+String(T).padStart(2,"0")+":00:00")}})]):null])),E(L,()=>J("div",{class:"fixed inset-0 z-[90]",onclick:()=>L(!1)}))])};var GW=(K,Y)=>{let{class:G,id:W,open:Q,side:q,content:X,...Z}=K,L=W||`drawer-${Math.random().toString(36).slice(2,9)}`;return J("div",{...Z,class:P("drawer",G)},[J("input",{id:L,type:"checkbox",class:"drawer-toggle",checked:()=>typeof Q==="function"?Q():Q,onchange:(B)=>{if(typeof Q==="function")Q(B.target.checked)}}),J("div",{class:"drawer-content"},[typeof X==="function"?X():X]),J("div",{class:"drawer-side"},[J("label",{for:L,class:"drawer-overlay",onclick:()=>{if(typeof Q==="function")Q(!1)}}),J("div",{class:"min-h-full bg-base-200 w-80"},[typeof q==="function"?q():q])])])};var x=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(K)=>{if(x&&!x.contains(K.target))x.open=!1,x=null}),window.__dropdownHandlerRegistered=!0;var QW=(K)=>{let{class:Y,label:G,icon:W,items:Q,...q}=K;return $html("details",{...q,class:P("dropdown",Y)},[$html("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(X)=>{let Z=X.currentTarget.closest("details");if(x&&x!==Z)x.open=!1;setTimeout(()=>{x=Z.open?Z:null},0)}},[()=>W?typeof W==="function"?W():W:null,()=>G?typeof G==="function"?G():G: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 Q==="function"?Q():Q||[]).map((Z)=>$html("li",{},[$html("a",{class:Z.class||"",onclick:(L)=>{if(Z.onclick)Z.onclick(L);let B=L.currentTarget.closest("details");if(B){if(B.open=!1,x===B)x=null}}},[Z.icon?$html("span",{},Z.icon):null,$html("span",{},Z.label)])]))}])])};var _W=(K)=>{let{class:Y,icon:G,label:W,actions:Q=[],position:q="bottom-6 right-6",...X}=K;return J("div",{...X,class:P(`fab absolute ${q} flex flex-col-reverse items-end gap-3 z-[100]`,Y)},[J("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[G?V(G):null,!G&&W?W:null]),..._(Q).map((Z)=>J("div",{class:"flex items-center gap-3 transition-all duration-300"},[Z.label?J("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},Z.label):null,J("button",{type:"button",class:`btn btn-circle shadow-lg ${Z.class||""}`,onclick:(L)=>{L.stopPropagation(),Z.onclick?.(L)}},[Z.icon?V(Z.icon):Z.text||""])]))])};var zW=(K,Y)=>{let{class:G,legend:W,...Q}=K;return J("fieldset",{...Q,class:P("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",G)},[()=>{let q=_(W);return q?J("legend",{class:"fieldset-legend font-bold"},[q]):null},Y])};var UW=(K)=>{let{class:Y,tooltip:G,max:W=2,accept:Q="*",onSelect:q,...X}=K,Z=F([]),L=F(!1),B=F(null),R=W*1024*1024,z=(M)=>{let A=Array.from(M);if(B(null),A.find((S)=>S.size>R)){B(`Máx ${W}MB`);return}Z([...Z(),...A]),q?.(Z())},C=(M)=>{let A=Z().filter((U,S)=>S!==M);Z(A),q?.(A)};return J("fieldset",{...X,class:P("fieldset w-full p-0",Y)},[J("div",{class:()=>`w-full ${G?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":G},[J("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 + ${L()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} + `,ondragover:(M)=>{M.preventDefault(),L(!0)},ondragleave:()=>L(!1),ondrop:(M)=>{M.preventDefault(),L(!1),z(M.dataTransfer.files)}},[J("div",{class:"flex items-center gap-3 w-full"},[V("icon-[lucide--upload]"),J("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),J("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${W}MB`)]),J("input",{type:"file",multiple:!0,accept:Q,class:"hidden",onchange:(M)=>z(M.target.files)})])]),()=>B()?J("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},B()):null,E(()=>Z().length>0,()=>J("ul",{class:"mt-2 space-y-1"},[N(Z,(M,A)=>J("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[J("div",{class:"flex items-center gap-2 truncate"},[J("span",{class:"opacity-50"},"\uD83D\uDCC4"),J("span",{class:"truncate font-medium max-w-[200px]"},M.name),J("span",{class:"text-[9px] opacity-40"},`(${(M.size/1024).toFixed(0)} KB)`)]),J("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(U)=>{U.preventDefault(),U.stopPropagation(),C(A)}},[V("icon-[lucide--x]")])]),(M)=>M.name+M.lastModified)]))])};var VW=(K,Y)=>{let{value:G,class:W,...Q}=K;return J("div",{...Q,class:"indicator"},()=>[G?J("span",{class:P("indicator-item badge",W)},()=>typeof G==="function"?G():G):null,Y].filter(Boolean))};var OW=(K)=>{let{children:Y,value:G,floating:W=!1,error:Q,required:q,class:X,...Z}=K;if(W)return J("label",{class:P("floating-label w-full",X),...Z},()=>[G?J("span",{},G):null,Y,Q?J("span",{class:"text-error text-xs"},_(Q)):null]);return J("label",{class:P("input w-full",X),...Z},()=>[G?J("span",{class:"label"},G):null,Y,Q?J("span",{class:"text-error text-xs"},_(Q)):null])};var xW=(K)=>{let{class:Y,items:G,header:W,render:Q,keyFn:q=(L,B)=>L.id??B,...X}=K,Z=N(G,(L,B)=>J("li",{class:"list-row"},[Q(L,B)]),q);return J("ul",{...X,class:P("list bg-base-100 rounded-box shadow-md",Y)},W?[E(W,()=>J("li",{class:"p-4 pb-2 text-xs opacity-60"},[_(W)])),Z]:Z)};var $W=(K)=>{let{class:Y,items:G,...W}=K,Q=(q)=>N(()=>q||[],(X)=>J("li",{},[X.children?J("details",{open:X.open},[J("summary",{},[X.icon&&J("span",{class:"mr-2"},X.icon),X.label]),J("ul",{},Q(X.children))]):J("a",{class:()=>_(X.active)?"active":"",onclick:X.onclick},[X.icon&&J("span",{class:"mr-2"},X.icon),X.label])]),(X,Z)=>X.label||Z);return J("ul",{...W,class:P("menu bg-base-200 rounded-box",Y)},Q(G))};var mW=(K,Y)=>{let{class:G,title:W,buttons:Q,open:q,...X}=K,Z=null,L=()=>{let R=typeof q==="function"?q():q;if(!Z)return;if(R){if(!Z.open)Z.showModal()}else if(Z.open)Z.close()};k(()=>L());let B=()=>{if(typeof q==="function")q(!1)};return J("dialog",{...X,ref:(R)=>{if(Z=R,R)L()},class:P("modal",G),onclose:B,oncancel:B},[J("div",{class:"modal-box"},[W?J("h3",{class:"text-lg font-bold mb-4"},()=>typeof W==="function"?W():W):null,J("div",{class:"py-2"},[typeof Y==="function"?Y():Y]),J("div",{class:"modal-action"},[J("form",{method:"dialog",class:"flex gap-2"},[...(Array.isArray(Q)?Q:[Q]).filter(Boolean),n({type:"submit"},f("close")())])])]),J("form",{method:"dialog",class:"modal-backdrop"},[J("button",{},"close")])])};var iW=(K,Y)=>{let{class:G,...W}=K;return J("div",{...W,class:P("navbar bg-base-100 shadow-sm px-4",G)},Y)};var sW=(K)=>{let{class:Y,label:G,tooltip:W,value:Q,inputValue:q,name:X,...Z}=K,L=J("input",{...Z,type:"radio",name:X,class:P("radio",Y),checked:()=>_(Q)===q,onclick:()=>{if(typeof Q==="function")Q(q)}});if(!G&&!W)return L;let B=J("label",{class:"label cursor-pointer justify-start gap-3"},[L,G?J("span",{class:"label-text"},G):null]);return W?J("div",{class:"tooltip","data-tip":W},B):B};var eW=(K)=>{let{class:Y,label:G,tooltip:W,value:Q,...q}=K,X=J("input",{...q,type:"range",class:P("range",Y),value:Q,disabled:()=>_(K.disabled)});if(!G&&!W)return X;let Z=J("div",{class:"flex flex-col gap-2"},[G?J("span",{class:"label-text"},G):null,X]);return W?J("div",{class:"tooltip","data-tip":W},Z):Z};var XZ=(K)=>{let{class:Y,value:G,count:W=5,mask:Q="mask-star",readonly:q=!1,onchange:X,...Z}=K,L=`rating-${Math.random().toString(36).slice(2,7)}`;return J("div",{...Z,class:()=>P(`rating ${_(q)?"pointer-events-none":""}`,Y)},Array.from({length:_(W)},(B,R)=>{let z=R+1;return J("input",{type:"radio",name:L,class:`mask ${Q}`,checked:()=>Math.round(_(G))===z,onchange:()=>{if(!_(q)){if(typeof X==="function")X(z);else if(typeof G==="function")G(z)}}})}))};var QZ=(K)=>{let{class:Y,label:G,items:W,value:Q,...q}=K,X=J("select",{...q,class:P("select select-bordered w-full",Y),value:Q},N(()=>_(W)||[],(Z)=>J("option",{value:Z.value,$selected:()=>String(_(Q))===String(Z.value)},Z.label),(Z)=>Z.value));if(!G)return X;return J("label",{class:"fieldset-label flex flex-col gap-1"},[J("span",{},G),X])};var _Z=(K,Y)=>{let{class:G,...W}=K;return J("div",{...W,class:P("stack",G)},Y)};var zZ=(K)=>{let{class:Y,icon:G,label:W,value:Q,desc:q,...X}=K;return J("div",{...X,class:P("stat",Y)},[G&&J("div",{class:"stat-figure text-secondary"},G),W&&J("div",{class:"stat-title"},W),J("div",{class:"stat-value"},()=>_(Q)??Q),q&&J("div",{class:"stat-desc"},q)])};var UZ=(K)=>{let{class:Y,value:G,on:W,off:Q,...q}=K;return J("label",{...q,class:P("swap",Y)},[J("input",{type:"checkbox",checked:()=>_(G),onclick:(X)=>{if(typeof G==="function")G(X.target.checked)}}),J("div",{class:"swap-on"},W),J("div",{class:"swap-off"},Q)])};var SZ=(K)=>{let{class:Y,items:G=[],columns:W=[],keyFn:Q,zebra:q=!1,pinRows:X=!1,empty:Z=f("nodata")(),...L}=K,B=()=>{let z=_(q)?"table-zebra":"",C=_(X)?"table-pin-rows":"";return P("table",Y,z,C)},R=Q||((z,C)=>z.id||C);return J("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[J("table",{...L,class:B},[J("thead",{},[J("tr",{},W.map((z)=>J("th",{class:z.class||""},z.label)))]),J("tbody",{},[N(G,(z,C)=>{let M=()=>{let A=_(G),U=R(z,C);return A.find((S,h)=>R(S,h)===U)||z};return J("tr",{class:"hover"},W.map((A)=>{let U=()=>{let S=M();if(A.render)return A.render(S,C);return _(S[A.key])};return J("td",{class:A.class||""},[U])}))},R),E(()=>_(G).length===0,()=>J("tr",{},[J("td",{colspan:W.length,class:"text-center p-10 opacity-50"},[_(Z)])]))])])])};var jZ=(K)=>{let{items:Y,class:G,...W}=K,Q=typeof Y==="function"?Y:()=>Y||[],q=F(0);return $watch(()=>{let X=Q().findIndex((Z)=>_(Z.active)===!0);if(X!==-1&&X!==q())q(X)}),J("div",{...W,class:"w-full"},[J("div",{role:"tablist",class:P("tabs",G||"tabs-box")},()=>{return Q().map((Z,L)=>{let B=()=>q()===L,R=J("button",{role:"tab",class:()=>P("tab",B()?"tab-active":""),onclick:(z)=>{if(z.preventDefault(),!_(Z.disabled)){if(Z.onclick)Z.onclick();q(L)}}});return $watch(()=>{let z=_(Z.label);if(z instanceof Node)R.replaceChildren(z);else R.textContent=String(z)}),R})}),J("div",{class:"tab-panels"},()=>{return Q().map((X,Z)=>{let L=()=>q()===Z;return J("div",{role:"tabpanel",class:"tab-content bg-base-100 border-base-300 p-6",style:()=>L()?"display: block":"display: none"},[()=>typeof X.content==="function"?X.content():X.content])})})])};var wZ=(K)=>{let{class:Y,items:G=[],vertical:W=!0,compact:Q=!1,...q}=K,X={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return J("ul",{...q,class:()=>P(`timeline ${_(W)?"timeline-vertical":"timeline-horizontal"} ${_(Q)?"timeline-compact":""}`,Y)},()=>{let Z=(typeof G==="function"?G():G)||[];return Z.map((L,B)=>{let R=B===0,z=B===Z.length-1,C=L.type||"success",M=()=>_(L.completed),A=()=>B>0&&_(Z[B-1].completed),U=(S)=>typeof S==="function"?S():S;return J("li",{class:"flex-1"},[!R?J("hr",{class:()=>A()?"bg-primary":""}):null,J("div",{class:"timeline-start"},[()=>U(L.title)]),J("div",{class:"timeline-middle"},[()=>L.icon?V(L.icon):V(X[C]||X.success)]),J("div",{class:"timeline-end timeline-box shadow-sm"},[()=>U(L.detail)]),!z?J("hr",{class:()=>M()?"bg-primary":""}):null])})})};var bZ=(K,Y="alert-success",G=3500)=>{let W=document.getElementById("sigpro-toast-container");if(!W)W=J("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(W);let Q=J("div",{style:"display: contents"});W.appendChild(Q);let q,X=()=>{clearTimeout(q);let B=Q.firstElementChild;if(B&&!B.classList.contains("opacity-0"))B.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(L.destroy(),Q.remove(),!W.hasChildNodes())W.remove()},300);else L.destroy(),Q.remove()},L=WJ(()=>{let B=V("icon-[lucide--x]"),R=J("div",{class:`alert alert-soft ${Y} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[J("span",{},[typeof K==="function"?K():K]),n({class:"btn-xs btn-circle btn-ghost",onclick:X},B)]);return requestAnimationFrame(()=>R.classList.remove("translate-x-10","opacity-0")),R},Q);if(G>0)q=setTimeout(X,G);return X};var mZ=(K,Y)=>J("div",{...K,class:()=>P("tooltip",K.ui,K.class),"data-tip":K.tip},Y);export{_ as val,P as ui,f as tt,V as getIcon,mZ as Tooltip,bZ as Toast,wZ as Timeline,jZ as Tabs,SZ as Table,UZ as Swap,zZ as Stat,_Z as Stack,QZ as Select,XZ as Rating,eW as Range,sW as Radio,iW as Navbar,mW as Modal,$W as Menu,xW as List,OW as Label,i as Input,VW as Indicator,UW as Fileinput,zW as Fieldset,_W as Fab,QW as Dropdown,GW as Drawer,JW as Datepicker,sJ as Colorpicker,iJ as Checkbox,n as Button,gJ as Badge,fJ as Autocomplete,VJ as Alert,UJ as Accordion}; diff --git a/dist/sigpro-ui.js b/dist/sigpro-ui.js index e5d311d..e02535b 100644 --- a/dist/sigpro-ui.js +++ b/dist/sigpro-ui.js @@ -473,57 +473,7 @@ install(SigProCore); } - // src/components/index.js - var exports_components = {}; - __export(exports_components, { - default: () => components_default, - Tooltip: () => Tooltip, - Toast: () => Toast, - Timeline: () => Timeline, - Tabs: () => Tabs, - Table: () => Table, - Swap: () => Swap, - Stat: () => Stat, - Stack: () => Stack, - Select: () => Select, - Rating: () => Rating, - Range: () => Range, - Radio: () => Radio, - Navbar: () => Navbar, - Modal: () => Modal, - Menu: () => Menu, - List: () => List, - Label: () => Label, - Input: () => Input, - Indicator: () => Indicator, - Fileinput: () => Fileinput, - Fieldset: () => Fieldset, - Fab: () => Fab, - Dropdown: () => Dropdown, - Drawer: () => Drawer, - Datepicker: () => Datepicker, - Colorpicker: () => Colorpicker, - Checkbox: () => Checkbox, - Button: () => Button, - Badge: () => Badge, - Autocomplete: () => Autocomplete, - Alert: () => Alert, - Accordion: () => Accordion - }); - - // src/components/Accordion.js - var exports_Accordion = {}; - __export(exports_Accordion, { - Accordion: () => Accordion - }); - // src/core/utils.js - var exports_utils = {}; - __export(exports_utils, { - val: () => val, - ui: () => ui, - getIcon: () => getIcon - }); var val = (t) => typeof t === "function" ? t() : t; var ui = (baseClass, additionalClassOrFn) => typeof additionalClassOrFn === "function" ? () => `${baseClass} ${additionalClassOrFn() || ""}`.trim() : `${baseClass} ${additionalClassOrFn || ""}`.trim(); var getIcon = (icon) => { @@ -566,10 +516,6 @@ }; // src/components/Alert.js - var exports_Alert = {}; - __export(exports_Alert, { - Alert: () => Alert - }); var Alert = (props, children) => { const { class: className, actions, type = "info", soft = true, ...rest } = props; const iconMap = { @@ -597,12 +543,6 @@ ].filter(Boolean)); }; - // src/components/Autocomplete.js - var exports_Autocomplete = {}; - __export(exports_Autocomplete, { - Autocomplete: () => Autocomplete - }); - // src/core/i18n.js var i18n = { es: { @@ -626,10 +566,6 @@ var tt = (t) => () => i18n[currentLocale()][t] || t; // src/components/Input.js - var exports_Input = {}; - __export(exports_Input, { - Input: () => Input - }); var Input = (props) => { const { class: className, @@ -788,10 +724,6 @@ }; // src/components/Badge.js - var exports_Badge = {}; - __export(exports_Badge, { - Badge: () => Badge - }); var Badge = (props, children) => { const { class: className, ...rest } = props; return $html2("span", { @@ -801,10 +733,6 @@ }; // src/components/Button.js - var exports_Button = {}; - __export(exports_Button, { - Button: () => Button - }); var Button = (props, children) => { const { class: className, loading, icon, ...rest } = props; const iconEl = getIcon(icon); @@ -820,10 +748,6 @@ }; // src/components/Checkbox.js - var exports_Checkbox = {}; - __export(exports_Checkbox, { - Checkbox: () => Checkbox - }); var Checkbox = (props) => { const { class: className, value, tooltip, toggle, label, ...rest } = props; const checkEl = $html2("input", { @@ -840,10 +764,6 @@ }; // src/components/Colorpicker.js - var exports_Colorpicker = {}; - __export(exports_Colorpicker, { - Colorpicker: () => Colorpicker - }); var Colorpicker = (props) => { const { class: className, value, label, ...rest } = props; const isOpen = $(false); @@ -901,10 +821,6 @@ }; // src/components/Datepicker.js - var exports_Datepicker = {}; - __export(exports_Datepicker, { - Datepicker: () => Datepicker - }); var Datepicker = (props) => { const { class: className, value, range, label, placeholder, hour = false, ...rest } = props; const isOpen = $(false); @@ -1111,10 +1027,6 @@ }; // src/components/Drawer.js - var exports_Drawer = {}; - __export(exports_Drawer, { - Drawer: () => Drawer - }); var Drawer = (props, children) => { const { class: className, id, open, side, content, ...rest } = props; const drawerId = id || `drawer-${Math.random().toString(36).slice(2, 9)}`; @@ -1152,10 +1064,6 @@ }; // src/components/Dropdown.js - var exports_Dropdown = {}; - __export(exports_Dropdown, { - Dropdown: () => Dropdown - }); var currentOpen = null; if (typeof window !== "undefined" && !window.__dropdownHandlerRegistered) { window.addEventListener("click", (e) => { @@ -1218,10 +1126,6 @@ }; // src/components/Fab.js - var exports_Fab = {}; - __export(exports_Fab, { - Fab: () => Fab - }); var Fab = (props) => { const { class: className, icon, label, actions = [], position = "bottom-6 right-6", ...rest } = props; return $html2("div", { @@ -1251,10 +1155,6 @@ }; // src/components/Fieldset.js - var exports_Fieldset = {}; - __export(exports_Fieldset, { - Fieldset: () => Fieldset - }); var Fieldset = (props, children) => { const { class: className, legend, ...rest } = props; return $html2("fieldset", { @@ -1270,10 +1170,6 @@ }; // src/components/Fileinput.js - var exports_Fileinput = {}; - __export(exports_Fileinput, { - Fileinput: () => Fileinput - }); var Fileinput = (props) => { const { class: className, tooltip, max = 2, accept = "*", onSelect, ...rest } = props; const selectedFiles = $([]); @@ -1356,10 +1252,6 @@ }; // src/components/Indicator.js - var exports_Indicator = {}; - __export(exports_Indicator, { - Indicator: () => Indicator - }); var Indicator = (props, children) => { const { value, class: className, ...rest } = props; return $html2("div", { @@ -1374,10 +1266,6 @@ }; // src/components/Label.js - var exports_Label = {}; - __export(exports_Label, { - Label: () => Label - }); var Label = (props) => { const { children, value, floating = false, error, required, class: className, ...rest } = props; if (floating) { @@ -1395,10 +1283,6 @@ }; // src/components/List.js - var exports_List = {}; - __export(exports_List, { - List: () => List - }); var List = (props) => { const { class: className, items, header, render, keyFn = (item, index) => item.id ?? index, ...rest } = props; const listItems = $for(items, (item, index) => $html2("li", { class: "list-row" }, [render(item, index)]), keyFn); @@ -1409,10 +1293,6 @@ }; // src/components/Menu.js - var exports_Menu = {}; - __export(exports_Menu, { - Menu: () => Menu - }); var Menu = (props) => { const { class: className, items, ...rest } = props; const renderItems = (items2) => $for(() => items2 || [], (it) => $html2("li", {}, [ @@ -1428,10 +1308,6 @@ }; // src/components/Modal.js - var exports_Modal = {}; - __export(exports_Modal, { - Modal: () => Modal - }); var Modal = (props, children) => { const { class: className, title, buttons, open, ...rest } = props; let dialogElement = null; @@ -1482,20 +1358,12 @@ }; // src/components/Navbar.js - var exports_Navbar = {}; - __export(exports_Navbar, { - Navbar: () => Navbar - }); var Navbar = (props, children) => { const { class: className, ...rest } = props; return $html2("div", { ...rest, class: ui("navbar bg-base-100 shadow-sm px-4", className) }, children); }; // src/components/Radio.js - var exports_Radio = {}; - __export(exports_Radio, { - Radio: () => Radio - }); var Radio = (props) => { const { class: className, label, tooltip, value, inputValue, name, ...rest } = props; const radioEl = $html2("input", { @@ -1519,10 +1387,6 @@ }; // src/components/Range.js - var exports_Range = {}; - __export(exports_Range, { - Range: () => Range - }); var Range = (props) => { const { class: className, label, tooltip, value, ...rest } = props; const rangeEl = $html2("input", { @@ -1542,10 +1406,6 @@ }; // src/components/Rating.js - var exports_Rating = {}; - __export(exports_Rating, { - Rating: () => Rating - }); 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)}`; @@ -1573,10 +1433,6 @@ }; // src/components/Select.js - var exports_Select = {}; - __export(exports_Select, { - Select: () => Select - }); var Select = (props) => { const { class: className, label, items, value, ...rest } = props; const selectEl = $html2("select", { @@ -1596,20 +1452,12 @@ }; // src/components/Stack.js - var exports_Stack = {}; - __export(exports_Stack, { - Stack: () => Stack - }); var Stack = (props, children) => { const { class: className, ...rest } = props; return $html2("div", { ...rest, class: ui("stack", className) }, children); }; // src/components/Stat.js - var exports_Stat = {}; - __export(exports_Stat, { - Stat: () => Stat - }); var Stat = (props) => { const { class: className, icon, label, value, desc, ...rest } = props; return $html2("div", { ...rest, class: ui("stat", className) }, [ @@ -1621,10 +1469,6 @@ }; // src/components/Swap.js - var exports_Swap = {}; - __export(exports_Swap, { - Swap: () => Swap - }); var Swap = (props) => { const { class: className, value, on, off, ...rest } = props; return $html2("label", { ...rest, class: ui("swap", className) }, [ @@ -1643,10 +1487,6 @@ }; // src/components/Table.js - var exports_Table = {}; - __export(exports_Table, { - Table: () => Table - }); var Table = (props) => { const { class: className, items = [], columns = [], keyFn, zebra = false, pinRows = false, empty = tt("nodata")(), ...rest } = props; const tableClass = () => { @@ -1688,10 +1528,6 @@ }; // src/components/Tabs.js - var exports_Tabs = {}; - __export(exports_Tabs, { - Tabs: () => Tabs - }); var Tabs = (props) => { const { items, class: className, ...rest } = props; const itemsSignal = typeof items === "function" ? items : () => items || []; @@ -1748,10 +1584,6 @@ }; // src/components/Timeline.js - var exports_Timeline = {}; - __export(exports_Timeline, { - Timeline: () => Timeline - }); var Timeline = (props) => { const { class: className, items = [], vertical = true, compact = false, ...rest } = props; const iconMap = { @@ -1786,10 +1618,6 @@ }; // src/components/Toast.js - var exports_Toast = {}; - __export(exports_Toast, { - Toast: () => Toast - }); var Toast = (message, type = "alert-success", duration = 3500) => { let container = document.getElementById("sigpro-toast-container"); if (!container) { @@ -1840,68 +1668,9 @@ }; // src/components/Tooltip.js - var exports_Tooltip = {}; - __export(exports_Tooltip, { - Tooltip: () => Tooltip - }); var Tooltip = (props, children) => $html2("div", { ...props, class: () => ui("tooltip", props.ui, props.class), "data-tip": props.tip }, children); - - // src/components/index.js - var Components = { - ...exports_Accordion, - ...exports_Alert, - ...exports_Autocomplete, - ...exports_Badge, - ...exports_Button, - ...exports_Checkbox, - ...exports_Colorpicker, - ...exports_Datepicker, - ...exports_Drawer, - ...exports_Dropdown, - ...exports_Fab, - ...exports_Fieldset, - ...exports_Fileinput, - ...exports_Indicator, - ...exports_Input, - ...exports_Label, - ...exports_List, - ...exports_Menu, - ...exports_Modal, - ...exports_Navbar, - ...exports_Radio, - ...exports_Range, - ...exports_Rating, - ...exports_Select, - ...exports_Stack, - ...exports_Stat, - ...exports_Swap, - ...exports_Table, - ...exports_Tabs, - ...exports_Timeline, - ...exports_Toast, - ...exports_Tooltip - }; - var components_default = { - ...Components, - install: (target = window) => { - Object.entries(Components).forEach(([name, component]) => { - target[name] = component; - }); - console.log("\uD83D\uDE80 SigproUI"); - } - }; - // index.js - if (typeof window !== "undefined") { - Object.entries(exports_components).forEach(([name, component]) => { - window[name] = component; - }); - window.Utils = exports_utils; - window.tt = tt; - window.SigProUI = { ...exports_components, Utils: exports_utils, tt }; - console.log("\uD83C\uDFA8 SigProUI ready"); - } })(); diff --git a/dist/sigpro-ui.min.js b/dist/sigpro-ui.min.js index aaa0514..854d7a4 100644 --- a/dist/sigpro-ui.min.js +++ b/dist/sigpro-ui.min.js @@ -1,7 +1,7 @@ -(()=>{var{defineProperty:JM,getOwnPropertyNames:UJ,getOwnPropertyDescriptor:HJ}=Object,VJ=Object.prototype.hasOwnProperty;var TJ=new WeakMap,SJ=(Z)=>{var K=TJ.get(Z),G;if(K)return K;if(K=JM({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function")UJ(Z).map((J)=>!VJ.call(K,J)&&JM(K,J,{get:()=>Z[J],enumerable:!(G=HJ(Z,J))||G.enumerable}));return TJ.set(Z,K),K};var U=(Z,K)=>{for(var G in K)JM(Z,G,{get:K[G],enumerable:!0,configurable:!0,set:(J)=>K[G]=()=>J})};var xJ={};U(xJ,{val:()=>q,ui:()=>_,tt:()=>k,getIcon:()=>V,Tooltip:()=>AJ,Toast:()=>BJ,Timeline:()=>QJ,Tabs:()=>KJ,Table:()=>XJ,Swap:()=>WJ,Stat:()=>MJ,Stack:()=>tM,Select:()=>nM,Rating:()=>aM,Range:()=>iM,Radio:()=>cM,Navbar:()=>dM,Modal:()=>mM,Menu:()=>gM,List:()=>vM,Label:()=>yM,Input:()=>m,Indicator:()=>wM,Fileinput:()=>xM,Fieldset:()=>jM,Fab:()=>NM,Dropdown:()=>SM,Drawer:()=>HM,Datepicker:()=>FM,Colorpicker:()=>RM,Checkbox:()=>CM,Button:()=>u,Badge:()=>_M,Autocomplete:()=>qM,Alert:()=>QM,Accordion:()=>KM});var j=null,$=null,p=new Set,i=!1,WM=new WeakMap,EJ=()=>{if(i)return;i=!0;while(p.size>0){let Z=Array.from(p).sort((K,G)=>(K.depth||0)-(G.depth||0));p.clear();for(let K of Z)if(!K._deleted)K()}i=!1},CJ=(Z)=>{if(j&&!j._deleted)Z.add(j),j._deps.add(Z)},ZM=(Z)=>{for(let K of Z){if(K===j||K._deleted)continue;if(K._isComputed){if(K.markDirty(),K._subs)ZM(K._subs)}else p.add(K)}if(!i)queueMicrotask(EJ)},XM=(Z)=>{if(Z._cleanups)Z._cleanups.forEach((K)=>K()),Z._cleanups.clear();Z.childNodes?.forEach(XM)},r=(Z)=>{let K=new Set,G=$,J=document.createElement("div");J.style.display="contents",$={cleanups:K};try{let Y=Z({onCleanup:(X)=>K.add(X)}),L=(X)=>{if(!X)return;if(X._isRuntime)K.add(X.destroy),J.appendChild(X.container);else if(Array.isArray(X))X.forEach(L);else J.appendChild(X instanceof Node?X:document.createTextNode(String(X)))};L(Y)}finally{$=G}return{_isRuntime:!0,container:J,destroy:()=>{K.forEach((Y)=>Y()),XM(J),J.remove()}}},H=(Z,K=null)=>{if(typeof Z==="function"){let Y=new Set,L,X=!0,W=()=>{if(W._deleted)return;W._deps.forEach((B)=>B.delete(W)),W._deps.clear();let Q=j;j=W;try{let B=Z();if(!Object.is(L,B)||X)L=B,X=!1,ZM(Y)}finally{j=Q}};if(W._deps=new Set,W._isComputed=!0,W._subs=Y,W._deleted=!1,W.markDirty=()=>X=!0,W.stop=()=>{W._deleted=!0,W._deps.forEach((Q)=>Q.delete(W)),Y.clear()},$)$.cleanups.add(W.stop);return()=>{if(X)W();return CJ(Y),L}}let G=Z;if(K)try{let Y=localStorage.getItem(K);if(Y!==null)G=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](G):Y[0];if(!Object.is(G,L)){if(G=L,K)localStorage.setItem(K,JSON.stringify(G));ZM(J)}}return CJ(J),G}},w=(Z,K)=>{let G=Array.isArray(Z),J=G?K:Z,Y=G?Z:null;if(typeof J!=="function")return()=>{};let L=$,X=()=>{if(X._deleted)return;X._deps.forEach((B)=>B.delete(X)),X._deps.clear(),X._cleanups.forEach((B)=>B()),X._cleanups.clear();let W=j,Q=$;j=X,$={cleanups:X._cleanups},X.depth=W?W.depth+1:0;try{if(G)j=null,J(),j=X,Y.forEach((B)=>typeof B==="function"&&B());else J()}finally{j=W,$=Q}};if(X._deps=new Set,X._cleanups=new Set,X._deleted=!1,X.stop=()=>{if(X._deleted)return;if(X._deleted=!0,p.delete(X),X._deps.forEach((W)=>W.delete(X)),X._cleanups.forEach((W)=>W()),L)L.cleanups.delete(X.stop)},L)L.cleanups.add(X.stop);return X(),X.stop},M=(Z,K={},G=[])=>{if(K instanceof Node||Array.isArray(K)||typeof K!=="object")G=K,K={};let J=document.createElement(Z),Y=(W,Q)=>(W==="src"||W==="href")&&String(Q).toLowerCase().includes("javascript:")?"#":Q;J._cleanups=new Set;let L=["disabled","checked","required","readonly","selected","multiple","autofocus"];for(let[W,Q]of Object.entries(K)){if(W==="ref"){typeof Q==="function"?Q(J):Q.current=J;continue}let B=typeof Q==="function";if(["INPUT","TEXTAREA","SELECT"].includes(J.tagName)&&(W==="value"||W==="checked")&&B){J._cleanups.add(w(()=>{let A=Q();if(J[W]!==A)J[W]=A}));let P=W==="checked"?"change":"input",R=(A)=>Q(A.target[W]);J.addEventListener(P,R),J._cleanups.add(()=>J.removeEventListener(P,R))}else if(W.startsWith("on")){let P=W.slice(2).toLowerCase().split(".")[0],R=(A)=>Q(A);J.addEventListener(P,R),J._cleanups.add(()=>J.removeEventListener(P,R))}else if(B)J._cleanups.add(w(()=>{let P=Y(W,Q());if(W==="class")J.className=P||"";else if(L.includes(W))if(P)J.setAttribute(W,""),J[W]=!0;else J.removeAttribute(W),J[W]=!1;else P==null?J.removeAttribute(W):J.setAttribute(W,P)}));else if(L.includes(W))if(Q)J.setAttribute(W,""),J[W]=!0;else J.removeAttribute(W),J[W]=!1;else J.setAttribute(W,Y(W,Q))}let X=(W)=>{if(Array.isArray(W))return W.forEach(X);if(W instanceof Node)J.appendChild(W);else if(typeof W==="function"){let Q=document.createTextNode("");J.appendChild(Q);let B=[];J._cleanups.add(w(()=>{let z=W(),T=(Array.isArray(z)?z:[z]).map((P)=>P?._isRuntime?P.container:P instanceof Node?P:document.createTextNode(P??""));B.forEach((P)=>{XM?.(P),P.remove()}),T.forEach((P)=>Q.parentNode?.insertBefore(P,Q)),B=T}))}else J.appendChild(document.createTextNode(W??""))};return X(G),J},N=(Z,K,G=null)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=null,X=null;return w(()=>{let W=!!(typeof Z==="function"?Z():Z);if(W!==X){if(X=W,L)L.destroy();let Q=W?K:G;if(Q)L=r(()=>typeof Q==="function"?Q():Q),Y.insertBefore(L.container,J)}}),Y};N.not=(Z,K,G)=>N(()=>!(typeof Z==="function"?Z():Z),K,G);var O=(Z,K,G,J="div",Y={style:"display:contents"})=>{let L=document.createTextNode(""),X=M(J,Y,[L]),W=new Map;return w(()=>{let Q=(typeof Z==="function"?Z():Z)||[],B=new Map,z=[];for(let P=0;PK(R,P));else W.delete(A);B.set(A,D),z.push(A)}W.forEach((P)=>{P.destroy(),P.container.remove()});let T=L;for(let P=z.length-1;P>=0;P--){let R=B.get(z[P]);if(R.container.nextSibling!==T)X.insertBefore(R.container,T);T=R.container}W=B}),X},h=(Z)=>{let K=H(window.location.hash.replace(/^#/,"")||"/");window.addEventListener("hashchange",()=>K(window.location.hash.replace(/^#/,"")||"/"));let G=M("div",{class:"router-outlet"}),J=null;return w([K],async()=>{let Y=K(),L=Z.find((X)=>{let W=X.path.split("/").filter(Boolean),Q=Y.split("/").filter(Boolean);return W.length===Q.length&&W.every((B,z)=>B.startsWith(":")||B===Q[z])})||Z.find((X)=>X.path==="*");if(L){let X=L.component;if(typeof X==="function"&&X.toString().includes("import"))X=(await X()).default||await X();let W={};if(L.path.split("/").filter(Boolean).forEach((Q,B)=>{if(Q.startsWith(":"))W[Q.slice(1)]=Y.split("/").filter(Boolean)[B]}),J)J.destroy();if(h.params)h.params(W);J=r(()=>{try{return typeof X==="function"?X(W):X}catch(Q){return M("div",{class:"p-4 text-error"},"Error loading view")}}),G.appendChild(J.container)}}),G};h.params=H({});h.to=(Z)=>window.location.hash=Z.replace(/^#?\/?/,"#/");h.back=()=>window.history.back();h.path=()=>window.location.hash.replace(/^#/,"")||"/";var GM=(Z,K)=>{let G=typeof K==="string"?document.querySelector(K):K;if(!G)return;if(WM.has(G))WM.get(G).destroy();let J=r(typeof Z==="function"?Z:()=>Z);return G.replaceChildren(J.container),WM.set(G,J),J},NJ={$:H,$watch:w,$html:M,$if:N,$for:O,$router:h,$mount:GM};if(typeof window<"u")((K)=>{Object.keys(K).forEach((J)=>{window[J]=K[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,X)=>M(J,L,X)}),window.SigPro=Object.freeze(K)})(NJ);var l={};U(l,{default:()=>IJ,Tooltip:()=>AJ,Toast:()=>BJ,Timeline:()=>QJ,Tabs:()=>KJ,Table:()=>XJ,Swap:()=>WJ,Stat:()=>MJ,Stack:()=>tM,Select:()=>nM,Rating:()=>aM,Range:()=>iM,Radio:()=>cM,Navbar:()=>dM,Modal:()=>mM,Menu:()=>gM,List:()=>vM,Label:()=>yM,Input:()=>m,Indicator:()=>wM,Fileinput:()=>xM,Fieldset:()=>jM,Fab:()=>NM,Dropdown:()=>SM,Drawer:()=>HM,Datepicker:()=>FM,Colorpicker:()=>RM,Checkbox:()=>CM,Button:()=>u,Badge:()=>_M,Autocomplete:()=>qM,Alert:()=>QM,Accordion:()=>KM});var YM={};U(YM,{Accordion:()=>KM});var a={};U(a,{val:()=>q,ui:()=>_,getIcon:()=>V});var q=(Z)=>typeof Z==="function"?Z():Z,_=(Z,K)=>typeof K==="function"?()=>`${Z} ${K()||""}`.trim():`${Z} ${K||""}`.trim(),V=(Z)=>{if(!Z)return null;if(typeof Z==="function")return M("span",{class:"mr-1"},Z());if(typeof Z==="object")return M("span",{class:"mr-1"},Z);if(typeof Z==="string"){let K=Z.trim().split(/\s+/),G=K[K.length-1]==="right",J=G?K.slice(0,-1).join(" "):Z,Y=G?"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 KM=(Z,K)=>{let{class:G,title:J,name:Y,open:L,...X}=Z;return M("div",{...X,class:_("collapse collapse-arrow bg-base-200 mb-2",G)},[M("input",{type:Y?"radio":"checkbox",name:Y,checked:q(L)}),M("div",{class:"collapse-title text-xl font-medium"},J),M("div",{class:"collapse-content"},K)])};var LM={};U(LM,{Alert:()=>QM});var QM=(Z,K)=>{let{class:G,actions:J,type:Y="info",soft:L=!0,...X}=Z,W={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},z=[`alert-${Y}`,L?"alert-soft":"",G].filter(Boolean).join(" "),T=K||Z.message;return M("div",{...X,role:"alert",class:_("alert",z)},()=>[V(W[Y]),M("div",{class:"flex-1"},[M("span",{},[typeof T==="function"?T():T])]),J?M("div",{class:"flex-none"},[typeof J==="function"?J():J]):null].filter(Boolean))};var AM={};U(AM,{Autocomplete:()=>qM});var OJ={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"}},jJ=H("es");var k=(Z)=>()=>OJ[jJ()][Z]||Z;var BM={};U(BM,{Input:()=>m});var m=(Z)=>{let{class:K,value:G,type:J="text",icon:Y,oninput:L,placeholder:X,disabled:W,size:Q,validate:B,...z}=Z,T=J==="password",P=H(!1),R=H(null),A={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]"},D=Y?V(Y):A[J]?V(A[J]):null,E=()=>V(P()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),d=D?"pl-10":"",n=T?"pr-10":"",c=()=>{if(K?.includes("input-xs"))return"btn-xs";if(K?.includes("input-sm"))return"btn-sm";if(K?.includes("input-lg"))return"btn-lg";return"btn-md"},o=(S)=>{let I=S.target.value;if(B){let b=B(I);R(b||null)}L?.(S)},v=()=>R()&&R()!=="",F=M("input",{...z,type:()=>T?P()?"text":"password":J,placeholder:X||" ",class:()=>{let S=`input w-full ${d} ${n}`;if(K)S+=` ${K}`;if(v())S+=" input-error";return S.trim()},value:G,oninput:o,disabled:()=>q(W),"aria-invalid":()=>v()?"true":"false"});return M("div",{class:"relative w-full"},()=>[F,D?M("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},D):null,T?M("button",{type:"button",class:_("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",c()),onclick:(S)=>{S.preventDefault(),P(!P())}},()=>E()):null,M("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>v()?R():null)])};var qM=(Z)=>{let{class:K,items:G=[],value:J,onSelect:Y,label:L,placeholder:X,...W}=Z,Q=H(q(J)||""),B=H(!1),z=H(-1),T=H(()=>{let A=Q().toLowerCase(),D=q(G)||[];return A?D.filter((E)=>(typeof E==="string"?E:E.label).toLowerCase().includes(A)):D}),P=(A)=>{let D=typeof A==="string"?A:A.value,E=typeof A==="string"?A:A.label;if(Q(E),typeof J==="function")J(D);Y?.(A),B(!1),z(-1)},R=(A)=>{let D=T();if(A.key==="ArrowDown")A.preventDefault(),B(!0),z(Math.min(z()+1,D.length-1));else if(A.key==="ArrowUp")A.preventDefault(),z(Math.max(z()-1,0));else if(A.key==="Enter"&&z()>=0)A.preventDefault(),P(D[z()]);else if(A.key==="Escape")B(!1)};return M("div",{class:"relative w-full"},[m({label:L,class:K,placeholder:X||k("search")(),value:Q,onfocus:()=>B(!0),onblur:()=>setTimeout(()=>B(!1),150),onkeydown:R,oninput:(A)=>{let D=A.target.value;if(Q(D),typeof J==="function")J(D);B(!0),z(-1)},...W}),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:()=>B()&&T().length?"display:block":"display:none"},[O(T,(A,D)=>M("li",{},[M("a",{class:()=>`block w-full ${z()===D?"active bg-primary text-primary-content":""}`,onclick:()=>P(A),onmouseenter:()=>z(D)},typeof A==="string"?A:A.label)]),(A,D)=>(typeof A==="string"?A:A.value)+D),()=>T().length?null:M("li",{class:"p-2 text-center opacity-50"},k("nodata")())])])};var PM={};U(PM,{Badge:()=>_M});var _M=(Z,K)=>{let{class:G,...J}=Z;return M("span",{...J,class:_("badge",G)},K)};var TM={};U(TM,{Button:()=>u});var u=(Z,K)=>{let{class:G,loading:J,icon:Y,...L}=Z,X=V(Y);return M("button",{...L,class:_("btn",G),disabled:()=>q(J)||q(Z.disabled)},()=>[q(J)&&M("span",{class:"loading loading-spinner"}),X,K].filter(Boolean))};var zM={};U(zM,{Checkbox:()=>CM});var CM=(Z)=>{let{class:K,value:G,tooltip:J,toggle:Y,label:L,...X}=Z,W=M("input",{...X,type:"checkbox",class:()=>_(q(Y)?"toggle":"checkbox",K),checked:G}),Q=M("label",{class:"label cursor-pointer justify-start gap-3"},[W,L?M("span",{class:"label-text"},L):null]);return J?M("div",{class:"tooltip","data-tip":J},Q):Q};var DM={};U(DM,{Colorpicker:()=>RM});var RM=(Z)=>{let{class:K,value:G,label:J,...Y}=Z,L=H(!1),X=["#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"],W=()=>q(G)||"#000000";return M("div",{class:_("relative w-fit",K)},[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: ${W()}`}),J?M("span",{class:"opacity-80"},J):null]),N(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"},X.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 - ${W().toLowerCase()===Q.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof G==="function")G(Q);L(!1)}})))])),N(L,()=>M("div",{class:"fixed inset-0 z-[100]",onclick:()=>L(!1)}))])};var UM={};U(UM,{Datepicker:()=>FM});var FM=(Z)=>{let{class:K,value:G,range:J,label:Y,placeholder:L,hour:X=!1,...W}=Z,Q=H(!1),B=H(new Date),z=H(null),T=H(0),P=H(0),R=()=>q(J)===!0,A=new Date,D=`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,E=(C)=>{let F=C.getFullYear(),S=String(C.getMonth()+1).padStart(2,"0"),I=String(C.getDate()).padStart(2,"0");return`${F}-${S}-${I}`},d=(C)=>{let F=E(C),S=q(G);if(R())if(!S?.start||S.start&&S.end){if(typeof G==="function")G({start:F,end:null,...X&&{startHour:T()}})}else{let I=S.start;if(typeof G==="function"){let b=F{let C=q(G);if(!C)return"";if(typeof C==="string"){if(X&&C.includes("T"))return C.replace("T"," ");return C}if(C.start&&C.end){let F=X&&C.startHour?`${C.start} ${String(C.startHour).padStart(2,"0")}:00`:C.start,S=X&&C.endHour?`${C.end} ${String(C.endHour).padStart(2,"0")}:00`:C.end;return`${F} - ${S}`}if(C.start)return`${X&&C.startHour?`${C.start} ${String(C.startHour).padStart(2,"0")}:00`:C.start}...`;return""}),c=(C)=>{let F=B();B(new Date(F.getFullYear(),F.getMonth()+C,1))},o=(C)=>{let F=B();B(new Date(F.getFullYear()+C,F.getMonth(),1))},v=({value:C,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:C,class:"range range-xs flex-1",oninput:(S)=>{let I=parseInt(S.target.value);F(I)}}),M("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(q(C)).padStart(2,"0")+":00")])])};return M("div",{class:_("relative w-full",K)},[m({label:Y,placeholder:L||(R()?"Seleccionar rango...":"Seleccionar fecha..."),value:n,readonly:!0,icon:V("icon-[lucide--calendar]"),onclick:(C)=>{C.stopPropagation(),Q(!Q())},...W}),N(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:(C)=>C.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:()=>o(-1)},V("icon-[lucide--chevrons-left]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>c(-1)},V("icon-[lucide--chevron-left]"))]),M("span",{class:"font-bold uppercase flex-1 text-center"},[()=>B().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:()=>c(1)},V("icon-[lucide--chevron-right]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>o(1)},V("icon-[lucide--chevrons-right]"))])]),M("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>z(null)},[...["L","M","X","J","V","S","D"].map((C)=>M("div",{class:"text-[10px] opacity-40 font-bold text-center"},C)),()=>{let C=B(),F=C.getFullYear(),S=C.getMonth(),I=new Date(F,S,1).getDay(),b=I===0?6:I-1,RJ=new Date(F,S+1,0).getDate(),s=[];for(let g=0;g{let y=q(G),t=z(),DJ=typeof y==="string"?y.split("T")[0]===x:y?.start===x,FJ=y?.end===x,e=!1;if(R()&&y?.start){let MM=y.start;if(!y.end&&t)e=x>MM&&x<=t||x=t;else if(y.end)e=x>MM&&x{if(R())z(x)},onclick:()=>d(PJ)},[g.toString()]))}return s}]),X?M("div",{class:"mt-3 pt-2 border-t border-base-300"},[R()?M("div",{class:"flex gap-4"},[v({value:T,onChange:(C)=>{T(C);let F=q(G);if(F?.start)G({...F,startHour:C})}}),v({value:P,onChange:(C)=>{P(C);let F=q(G);if(F?.end)G({...F,endHour:C})}})]):v({value:T,onChange:(C)=>{T(C);let F=q(G);if(F&&typeof F==="string"&&F.includes("-"))G(F.split("T")[0]+"T"+String(C).padStart(2,"0")+":00:00")}})]):null])),N(Q,()=>M("div",{class:"fixed inset-0 z-[90]",onclick:()=>Q(!1)}))])};var VM={};U(VM,{Drawer:()=>HM});var HM=(Z,K)=>{let{class:G,id:J,open:Y,side:L,content:X,...W}=Z,Q=J||`drawer-${Math.random().toString(36).slice(2,9)}`;return M("div",{...W,class:_("drawer",G)},[M("input",{id:Q,type:"checkbox",class:"drawer-toggle",checked:()=>typeof Y==="function"?Y():Y,onchange:(B)=>{if(typeof Y==="function")Y(B.target.checked)}}),M("div",{class:"drawer-content"},[typeof X==="function"?X():X]),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 EM={};U(EM,{Dropdown:()=>SM});var f=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(Z)=>{if(f&&!f.contains(Z.target))f.open=!1,f=null}),window.__dropdownHandlerRegistered=!0;var SM=(Z)=>{let{class:K,label:G,icon:J,items:Y,...L}=Z;return $html("details",{...L,class:_("dropdown",K)},[$html("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(X)=>{let W=X.currentTarget.closest("details");if(f&&f!==W)f.open=!1;setTimeout(()=>{f=W.open?W:null},0)}},[()=>J?typeof J==="function"?J():J:null,()=>G?typeof G==="function"?G():G: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((W)=>$html("li",{},[$html("a",{class:W.class||"",onclick:(Q)=>{if(W.onclick)W.onclick(Q);let B=Q.currentTarget.closest("details");if(B){if(B.open=!1,f===B)f=null}}},[W.icon?$html("span",{},W.icon):null,$html("span",{},W.label)])]))}])])};var OM={};U(OM,{Fab:()=>NM});var NM=(Z)=>{let{class:K,icon:G,label:J,actions:Y=[],position:L="bottom-6 right-6",...X}=Z;return M("div",{...X,class:_(`fab absolute ${L} flex flex-col-reverse items-end gap-3 z-[100]`,K)},[M("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[G?V(G):null,!G&&J?J:null]),...q(Y).map((W)=>M("div",{class:"flex items-center gap-3 transition-all duration-300"},[W.label?M("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},W.label):null,M("button",{type:"button",class:`btn btn-circle shadow-lg ${W.class||""}`,onclick:(Q)=>{Q.stopPropagation(),W.onclick?.(Q)}},[W.icon?V(W.icon):W.text||""])]))])};var IM={};U(IM,{Fieldset:()=>jM});var jM=(Z,K)=>{let{class:G,legend:J,...Y}=Z;return M("fieldset",{...Y,class:_("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",G)},[()=>{let L=q(J);return L?M("legend",{class:"fieldset-legend font-bold"},[L]):null},K])};var kM={};U(kM,{Fileinput:()=>xM});var xM=(Z)=>{let{class:K,tooltip:G,max:J=2,accept:Y="*",onSelect:L,...X}=Z,W=H([]),Q=H(!1),B=H(null),z=J*1024*1024,T=(R)=>{let A=Array.from(R);if(B(null),A.find((E)=>E.size>z)){B(`Máx ${J}MB`);return}W([...W(),...A]),L?.(W())},P=(R)=>{let A=W().filter((D,E)=>E!==R);W(A),L?.(A)};return M("fieldset",{...X,class:_("fieldset w-full p-0",K)},[M("div",{class:()=>`w-full ${G?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":G},[M("label",{class:()=>` +(()=>{var{defineProperty:t,getOwnPropertyNames:qJ,getOwnPropertyDescriptor:BJ}=Object,_J=Object.prototype.hasOwnProperty;var GJ=new WeakMap,AJ=(G)=>{var Y=GJ.get(G),K;if(Y)return Y;if(Y=t({},"__esModule",{value:!0}),G&&typeof G==="object"||typeof G==="function")qJ(G).map((W)=>!_J.call(Y,W)&&t(Y,W,{get:()=>G[W],enumerable:!(K=BJ(G,W))||K.enumerable}));return GJ.set(G,Y),Y};var PJ=(G,Y)=>{for(var K in Y)t(G,K,{get:Y[K],enumerable:!0,configurable:!0,set:(W)=>Y[K]=()=>W})};var lJ={};PJ(lJ,{val:()=>_,ui:()=>P,tt:()=>f,getIcon:()=>H,Tooltip:()=>aJ,Toast:()=>nJ,Timeline:()=>iJ,Tabs:()=>cJ,Table:()=>pJ,Swap:()=>dJ,Stat:()=>mJ,Stack:()=>uJ,Select:()=>hJ,Rating:()=>gJ,Range:()=>bJ,Radio:()=>vJ,Navbar:()=>$J,Modal:()=>fJ,Menu:()=>yJ,List:()=>wJ,Label:()=>xJ,Input:()=>m,Indicator:()=>kJ,Fileinput:()=>IJ,Fieldset:()=>jJ,Fab:()=>OJ,Dropdown:()=>NJ,Drawer:()=>EJ,Datepicker:()=>SJ,Colorpicker:()=>VJ,Checkbox:()=>HJ,Button:()=>d,Badge:()=>FJ,Autocomplete:()=>DJ,Alert:()=>RJ,Accordion:()=>TJ});var O=null,y=null,u=new Set,i=!1,e=new WeakMap,CJ=()=>{if(i)return;i=!0;while(u.size>0){let G=Array.from(u).sort((Y,K)=>(Y.depth||0)-(K.depth||0));u.clear();for(let Y of G)if(!Y._deleted)Y()}i=!1},KJ=(G)=>{if(O&&!O._deleted)G.add(O),O._deps.add(G)},JJ=(G)=>{for(let Y of G){if(Y===O||Y._deleted)continue;if(Y._isComputed){if(Y.markDirty(),Y._subs)JJ(Y._subs)}else u.add(Y)}if(!i)queueMicrotask(CJ)},WJ=(G)=>{if(G._cleanups)G._cleanups.forEach((Y)=>Y()),G._cleanups.clear();G.childNodes?.forEach(WJ)},n=(G)=>{let Y=new Set,K=y,W=document.createElement("div");W.style.display="contents",y={cleanups:Y};try{let Q=G({onCleanup:(X)=>Y.add(X)}),q=(X)=>{if(!X)return;if(X._isRuntime)Y.add(X.destroy),W.appendChild(X.container);else if(Array.isArray(X))X.forEach(q);else W.appendChild(X instanceof Node?X:document.createTextNode(String(X)))};q(Q)}finally{y=K}return{_isRuntime:!0,container:W,destroy:()=>{Y.forEach((Q)=>Q()),WJ(W),W.remove()}}},F=(G,Y=null)=>{if(typeof G==="function"){let Q=new Set,q,X=!0,Z=()=>{if(Z._deleted)return;Z._deps.forEach((B)=>B.delete(Z)),Z._deps.clear();let L=O;O=Z;try{let B=G();if(!Object.is(q,B)||X)q=B,X=!1,JJ(Q)}finally{O=L}};if(Z._deps=new Set,Z._isComputed=!0,Z._subs=Q,Z._deleted=!1,Z.markDirty=()=>X=!0,Z.stop=()=>{Z._deleted=!0,Z._deps.forEach((L)=>L.delete(Z)),Q.clear()},y)y.cleanups.add(Z.stop);return()=>{if(X)Z();return KJ(Q),q}}let K=G;if(Y)try{let Q=localStorage.getItem(Y);if(Q!==null)K=JSON.parse(Q)}catch(Q){console.warn("SigPro: LocalStorage locked",Q)}let W=new Set;return(...Q)=>{if(Q.length){let q=typeof Q[0]==="function"?Q[0](K):Q[0];if(!Object.is(K,q)){if(K=q,Y)localStorage.setItem(Y,JSON.stringify(K));JJ(W)}}return KJ(W),K}},k=(G,Y)=>{let K=Array.isArray(G),W=K?Y:G,Q=K?G:null;if(typeof W!=="function")return()=>{};let q=y,X=()=>{if(X._deleted)return;X._deps.forEach((B)=>B.delete(X)),X._deps.clear(),X._cleanups.forEach((B)=>B()),X._cleanups.clear();let Z=O,L=y;O=X,y={cleanups:X._cleanups},X.depth=Z?Z.depth+1:0;try{if(K)O=null,W(),O=X,Q.forEach((B)=>typeof B==="function"&&B());else W()}finally{O=Z,y=L}};if(X._deps=new Set,X._cleanups=new Set,X._deleted=!1,X.stop=()=>{if(X._deleted)return;if(X._deleted=!0,u.delete(X),X._deps.forEach((Z)=>Z.delete(X)),X._cleanups.forEach((Z)=>Z()),q)q.cleanups.delete(X.stop)},q)q.cleanups.add(X.stop);return X(),X.stop},J=(G,Y={},K=[])=>{if(Y instanceof Node||Array.isArray(Y)||typeof Y!=="object")K=Y,Y={};let W=document.createElement(G),Q=(Z,L)=>(Z==="src"||Z==="href")&&String(L).toLowerCase().includes("javascript:")?"#":L;W._cleanups=new Set;let q=["disabled","checked","required","readonly","selected","multiple","autofocus"];for(let[Z,L]of Object.entries(Y)){if(Z==="ref"){typeof L==="function"?L(W):L.current=W;continue}let B=typeof L==="function";if(["INPUT","TEXTAREA","SELECT"].includes(W.tagName)&&(Z==="value"||Z==="checked")&&B){W._cleanups.add(k(()=>{let A=L();if(W[Z]!==A)W[Z]=A}));let C=Z==="checked"?"change":"input",M=(A)=>L(A.target[Z]);W.addEventListener(C,M),W._cleanups.add(()=>W.removeEventListener(C,M))}else if(Z.startsWith("on")){let C=Z.slice(2).toLowerCase().split(".")[0],M=(A)=>L(A);W.addEventListener(C,M),W._cleanups.add(()=>W.removeEventListener(C,M))}else if(B)W._cleanups.add(k(()=>{let C=Q(Z,L());if(Z==="class")W.className=C||"";else if(q.includes(Z))if(C)W.setAttribute(Z,""),W[Z]=!0;else W.removeAttribute(Z),W[Z]=!1;else C==null?W.removeAttribute(Z):W.setAttribute(Z,C)}));else if(q.includes(Z))if(L)W.setAttribute(Z,""),W[Z]=!0;else W.removeAttribute(Z),W[Z]=!1;else W.setAttribute(Z,Q(Z,L))}let X=(Z)=>{if(Array.isArray(Z))return Z.forEach(X);if(Z instanceof Node)W.appendChild(Z);else if(typeof Z==="function"){let L=document.createTextNode("");W.appendChild(L);let B=[];W._cleanups.add(k(()=>{let R=Z(),z=(Array.isArray(R)?R:[R]).map((C)=>C?._isRuntime?C.container:C instanceof Node?C:document.createTextNode(C??""));B.forEach((C)=>{WJ?.(C),C.remove()}),z.forEach((C)=>L.parentNode?.insertBefore(C,L)),B=z}))}else W.appendChild(document.createTextNode(Z??""))};return X(K),W},E=(G,Y,K=null)=>{let W=document.createTextNode(""),Q=J("div",{style:"display:contents"},[W]),q=null,X=null;return k(()=>{let Z=!!(typeof G==="function"?G():G);if(Z!==X){if(X=Z,q)q.destroy();let L=Z?Y:K;if(L)q=n(()=>typeof L==="function"?L():L),Q.insertBefore(q.container,W)}}),Q};E.not=(G,Y,K)=>E(()=>!(typeof G==="function"?G():G),Y,K);var N=(G,Y,K,W="div",Q={style:"display:contents"})=>{let q=document.createTextNode(""),X=J(W,Q,[q]),Z=new Map;return k(()=>{let L=(typeof G==="function"?G():G)||[],B=new Map,R=[];for(let C=0;CY(M,C));else Z.delete(A);B.set(A,U),R.push(A)}Z.forEach((C)=>{C.destroy(),C.container.remove()});let z=q;for(let C=R.length-1;C>=0;C--){let M=B.get(R[C]);if(M.container.nextSibling!==z)X.insertBefore(M.container,z);z=M.container}Z=B}),X},g=(G)=>{let Y=F(window.location.hash.replace(/^#/,"")||"/");window.addEventListener("hashchange",()=>Y(window.location.hash.replace(/^#/,"")||"/"));let K=J("div",{class:"router-outlet"}),W=null;return k([Y],async()=>{let Q=Y(),q=G.find((X)=>{let Z=X.path.split("/").filter(Boolean),L=Q.split("/").filter(Boolean);return Z.length===L.length&&Z.every((B,R)=>B.startsWith(":")||B===L[R])})||G.find((X)=>X.path==="*");if(q){let X=q.component;if(typeof X==="function"&&X.toString().includes("import"))X=(await X()).default||await X();let Z={};if(q.path.split("/").filter(Boolean).forEach((L,B)=>{if(L.startsWith(":"))Z[L.slice(1)]=Q.split("/").filter(Boolean)[B]}),W)W.destroy();if(g.params)g.params(Z);W=n(()=>{try{return typeof X==="function"?X(Z):X}catch(L){return J("div",{class:"p-4 text-error"},"Error loading view")}}),K.appendChild(W.container)}}),K};g.params=F({});g.to=(G)=>window.location.hash=G.replace(/^#?\/?/,"#/");g.back=()=>window.history.back();g.path=()=>window.location.hash.replace(/^#/,"")||"/";var ZJ=(G,Y)=>{let K=typeof Y==="string"?document.querySelector(Y):Y;if(!K)return;if(e.has(K))e.get(K).destroy();let W=n(typeof G==="function"?G:()=>G);return K.replaceChildren(W.container),e.set(K,W),W},zJ={$:F,$watch:k,$html:J,$if:E,$for:N,$router:g,$mount:ZJ};if(typeof window<"u")((Y)=>{Object.keys(Y).forEach((W)=>{window[W]=Y[W]}),"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((W)=>{let Q=W.charAt(0).toUpperCase()+W.slice(1);if(!(Q in window))window[Q]=(q,X)=>J(W,q,X)}),window.SigPro=Object.freeze(Y)})(zJ);var _=(G)=>typeof G==="function"?G():G,P=(G,Y)=>typeof Y==="function"?()=>`${G} ${Y()||""}`.trim():`${G} ${Y||""}`.trim(),H=(G)=>{if(!G)return null;if(typeof G==="function")return J("span",{class:"mr-1"},G());if(typeof G==="object")return J("span",{class:"mr-1"},G);if(typeof G==="string"){let Y=G.trim().split(/\s+/),K=Y[Y.length-1]==="right",W=K?Y.slice(0,-1).join(" "):G,Q=K?"ml-1":"mr-1";if(W&&!W.startsWith("icon-[")&&!W.includes("--"))return J("span",{class:Q},W);return J("span",{class:`${W} ${Q}`.trim()})}return null};var TJ=(G,Y)=>{let{class:K,title:W,name:Q,open:q,...X}=G;return J("div",{...X,class:P("collapse collapse-arrow bg-base-200 mb-2",K)},[J("input",{type:Q?"radio":"checkbox",name:Q,checked:_(q)}),J("div",{class:"collapse-title text-xl font-medium"},W),J("div",{class:"collapse-content"},Y)])};var RJ=(G,Y)=>{let{class:K,actions:W,type:Q="info",soft:q=!0,...X}=G,Z={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},R=[`alert-${Q}`,q?"alert-soft":"",K].filter(Boolean).join(" "),z=Y||G.message;return J("div",{...X,role:"alert",class:P("alert",R)},()=>[H(Z[Q]),J("div",{class:"flex-1"},[J("span",{},[typeof z==="function"?z():z])]),W?J("div",{class:"flex-none"},[typeof W==="function"?W():W]):null].filter(Boolean))};var MJ={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"}},UJ=F("es");var f=(G)=>()=>MJ[UJ()][G]||G;var m=(G)=>{let{class:Y,value:K,type:W="text",icon:Q,oninput:q,placeholder:X,disabled:Z,size:L,validate:B,...R}=G,z=W==="password",C=F(!1),M=F(null),A={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]"},U=Q?H(Q):A[W]?H(A[W]):null,S=()=>H(C()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),h=U?"pl-10":"",a=z?"pr-10":"",p=()=>{if(Y?.includes("input-xs"))return"btn-xs";if(Y?.includes("input-sm"))return"btn-sm";if(Y?.includes("input-lg"))return"btn-lg";return"btn-md"},c=(V)=>{let j=V.target.value;if(B){let v=B(j);M(v||null)}q?.(V)},$=()=>M()&&M()!=="",D=J("input",{...R,type:()=>z?C()?"text":"password":W,placeholder:X||" ",class:()=>{let V=`input w-full ${h} ${a}`;if(Y)V+=` ${Y}`;if($())V+=" input-error";return V.trim()},value:K,oninput:c,disabled:()=>_(Z),"aria-invalid":()=>$()?"true":"false"});return J("div",{class:"relative w-full"},()=>[D,U?J("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},U):null,z?J("button",{type:"button",class:P("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",p()),onclick:(V)=>{V.preventDefault(),C(!C())}},()=>S()):null,J("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>$()?M():null)])};var DJ=(G)=>{let{class:Y,items:K=[],value:W,onSelect:Q,label:q,placeholder:X,...Z}=G,L=F(_(W)||""),B=F(!1),R=F(-1),z=F(()=>{let A=L().toLowerCase(),U=_(K)||[];return A?U.filter((S)=>(typeof S==="string"?S:S.label).toLowerCase().includes(A)):U}),C=(A)=>{let U=typeof A==="string"?A:A.value,S=typeof A==="string"?A:A.label;if(L(S),typeof W==="function")W(U);Q?.(A),B(!1),R(-1)},M=(A)=>{let U=z();if(A.key==="ArrowDown")A.preventDefault(),B(!0),R(Math.min(R()+1,U.length-1));else if(A.key==="ArrowUp")A.preventDefault(),R(Math.max(R()-1,0));else if(A.key==="Enter"&&R()>=0)A.preventDefault(),C(U[R()]);else if(A.key==="Escape")B(!1)};return J("div",{class:"relative w-full"},[m({label:q,class:Y,placeholder:X||f("search")(),value:L,onfocus:()=>B(!0),onblur:()=>setTimeout(()=>B(!1),150),onkeydown:M,oninput:(A)=>{let U=A.target.value;if(L(U),typeof W==="function")W(U);B(!0),R(-1)},...Z}),J("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:()=>B()&&z().length?"display:block":"display:none"},[N(z,(A,U)=>J("li",{},[J("a",{class:()=>`block w-full ${R()===U?"active bg-primary text-primary-content":""}`,onclick:()=>C(A),onmouseenter:()=>R(U)},typeof A==="string"?A:A.label)]),(A,U)=>(typeof A==="string"?A:A.value)+U),()=>z().length?null:J("li",{class:"p-2 text-center opacity-50"},f("nodata")())])])};var FJ=(G,Y)=>{let{class:K,...W}=G;return J("span",{...W,class:P("badge",K)},Y)};var d=(G,Y)=>{let{class:K,loading:W,icon:Q,...q}=G,X=H(Q);return J("button",{...q,class:P("btn",K),disabled:()=>_(W)||_(G.disabled)},()=>[_(W)&&J("span",{class:"loading loading-spinner"}),X,Y].filter(Boolean))};var HJ=(G)=>{let{class:Y,value:K,tooltip:W,toggle:Q,label:q,...X}=G,Z=J("input",{...X,type:"checkbox",class:()=>P(_(Q)?"toggle":"checkbox",Y),checked:K}),L=J("label",{class:"label cursor-pointer justify-start gap-3"},[Z,q?J("span",{class:"label-text"},q):null]);return W?J("div",{class:"tooltip","data-tip":W},L):L};var VJ=(G)=>{let{class:Y,value:K,label:W,...Q}=G,q=F(!1),X=["#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"],Z=()=>_(K)||"#000000";return J("div",{class:P("relative w-fit",Y)},[J("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:(L)=>{L.stopPropagation(),q(!q())},...Q},[J("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${Z()}`}),W?J("span",{class:"opacity-80"},W):null]),E(q,()=>J("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:(L)=>L.stopPropagation()},[J("div",{class:"grid grid-cols-8 gap-1"},X.map((L)=>J("button",{type:"button",style:`background-color: ${L}`,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 + ${Z().toLowerCase()===L.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof K==="function")K(L);q(!1)}})))])),E(q,()=>J("div",{class:"fixed inset-0 z-[100]",onclick:()=>q(!1)}))])};var SJ=(G)=>{let{class:Y,value:K,range:W,label:Q,placeholder:q,hour:X=!1,...Z}=G,L=F(!1),B=F(new Date),R=F(null),z=F(0),C=F(0),M=()=>_(W)===!0,A=new Date,U=`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,S=(T)=>{let D=T.getFullYear(),V=String(T.getMonth()+1).padStart(2,"0"),j=String(T.getDate()).padStart(2,"0");return`${D}-${V}-${j}`},h=(T)=>{let D=S(T),V=_(K);if(M())if(!V?.start||V.start&&V.end){if(typeof K==="function")K({start:D,end:null,...X&&{startHour:z()}})}else{let j=V.start;if(typeof K==="function"){let v=D{let T=_(K);if(!T)return"";if(typeof T==="string"){if(X&&T.includes("T"))return T.replace("T"," ");return T}if(T.start&&T.end){let D=X&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start,V=X&&T.endHour?`${T.end} ${String(T.endHour).padStart(2,"0")}:00`:T.end;return`${D} - ${V}`}if(T.start)return`${X&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start}...`;return""}),p=(T)=>{let D=B();B(new Date(D.getFullYear(),D.getMonth()+T,1))},c=(T)=>{let D=B();B(new Date(D.getFullYear()+T,D.getMonth(),1))},$=({value:T,onChange:D})=>{return J("div",{class:"flex-1"},[J("div",{class:"flex gap-2 items-center"},[J("input",{type:"range",min:0,max:23,value:T,class:"range range-xs flex-1",oninput:(V)=>{let j=parseInt(V.target.value);D(j)}}),J("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(_(T)).padStart(2,"0")+":00")])])};return J("div",{class:P("relative w-full",Y)},[m({label:Q,placeholder:q||(M()?"Seleccionar rango...":"Seleccionar fecha..."),value:a,readonly:!0,icon:H("icon-[lucide--calendar]"),onclick:(T)=>{T.stopPropagation(),L(!L())},...Z}),E(L,()=>J("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()},[J("div",{class:"flex justify-between items-center mb-4 gap-1"},[J("div",{class:"flex gap-0.5"},[J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>c(-1)},H("icon-[lucide--chevrons-left]")),J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>p(-1)},H("icon-[lucide--chevron-left]"))]),J("span",{class:"font-bold uppercase flex-1 text-center"},[()=>B().toLocaleString("es-ES",{month:"short",year:"numeric"})]),J("div",{class:"flex gap-0.5"},[J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>p(1)},H("icon-[lucide--chevron-right]")),J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>c(1)},H("icon-[lucide--chevrons-right]"))])]),J("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>R(null)},[...["L","M","X","J","V","S","D"].map((T)=>J("div",{class:"text-[10px] opacity-40 font-bold text-center"},T)),()=>{let T=B(),D=T.getFullYear(),V=T.getMonth(),j=new Date(D,V,1).getDay(),v=j===0?6:j-1,YJ=new Date(D,V+1,0).getDate(),l=[];for(let b=0;b{let w=_(K),s=R(),QJ=typeof w==="string"?w.split("T")[0]===I:w?.start===I,LJ=w?.end===I,o=!1;if(M()&&w?.start){let r=w.start;if(!w.end&&s)o=I>r&&I<=s||I=s;else if(w.end)o=I>r&&I{if(M())R(I)},onclick:()=>h(XJ)},[b.toString()]))}return l}]),X?J("div",{class:"mt-3 pt-2 border-t border-base-300"},[M()?J("div",{class:"flex gap-4"},[$({value:z,onChange:(T)=>{z(T);let D=_(K);if(D?.start)K({...D,startHour:T})}}),$({value:C,onChange:(T)=>{C(T);let D=_(K);if(D?.end)K({...D,endHour:T})}})]):$({value:z,onChange:(T)=>{z(T);let D=_(K);if(D&&typeof D==="string"&&D.includes("-"))K(D.split("T")[0]+"T"+String(T).padStart(2,"0")+":00:00")}})]):null])),E(L,()=>J("div",{class:"fixed inset-0 z-[90]",onclick:()=>L(!1)}))])};var EJ=(G,Y)=>{let{class:K,id:W,open:Q,side:q,content:X,...Z}=G,L=W||`drawer-${Math.random().toString(36).slice(2,9)}`;return J("div",{...Z,class:P("drawer",K)},[J("input",{id:L,type:"checkbox",class:"drawer-toggle",checked:()=>typeof Q==="function"?Q():Q,onchange:(B)=>{if(typeof Q==="function")Q(B.target.checked)}}),J("div",{class:"drawer-content"},[typeof X==="function"?X():X]),J("div",{class:"drawer-side"},[J("label",{for:L,class:"drawer-overlay",onclick:()=>{if(typeof Q==="function")Q(!1)}}),J("div",{class:"min-h-full bg-base-200 w-80"},[typeof q==="function"?q():q])])])};var x=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(G)=>{if(x&&!x.contains(G.target))x.open=!1,x=null}),window.__dropdownHandlerRegistered=!0;var NJ=(G)=>{let{class:Y,label:K,icon:W,items:Q,...q}=G;return $html("details",{...q,class:P("dropdown",Y)},[$html("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(X)=>{let Z=X.currentTarget.closest("details");if(x&&x!==Z)x.open=!1;setTimeout(()=>{x=Z.open?Z:null},0)}},[()=>W?typeof W==="function"?W():W:null,()=>K?typeof K==="function"?K():K: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 Q==="function"?Q():Q||[]).map((Z)=>$html("li",{},[$html("a",{class:Z.class||"",onclick:(L)=>{if(Z.onclick)Z.onclick(L);let B=L.currentTarget.closest("details");if(B){if(B.open=!1,x===B)x=null}}},[Z.icon?$html("span",{},Z.icon):null,$html("span",{},Z.label)])]))}])])};var OJ=(G)=>{let{class:Y,icon:K,label:W,actions:Q=[],position:q="bottom-6 right-6",...X}=G;return J("div",{...X,class:P(`fab absolute ${q} flex flex-col-reverse items-end gap-3 z-[100]`,Y)},[J("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[K?H(K):null,!K&&W?W:null]),..._(Q).map((Z)=>J("div",{class:"flex items-center gap-3 transition-all duration-300"},[Z.label?J("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},Z.label):null,J("button",{type:"button",class:`btn btn-circle shadow-lg ${Z.class||""}`,onclick:(L)=>{L.stopPropagation(),Z.onclick?.(L)}},[Z.icon?H(Z.icon):Z.text||""])]))])};var jJ=(G,Y)=>{let{class:K,legend:W,...Q}=G;return J("fieldset",{...Q,class:P("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",K)},[()=>{let q=_(W);return q?J("legend",{class:"fieldset-legend font-bold"},[q]):null},Y])};var IJ=(G)=>{let{class:Y,tooltip:K,max:W=2,accept:Q="*",onSelect:q,...X}=G,Z=F([]),L=F(!1),B=F(null),R=W*1024*1024,z=(M)=>{let A=Array.from(M);if(B(null),A.find((S)=>S.size>R)){B(`Máx ${W}MB`);return}Z([...Z(),...A]),q?.(Z())},C=(M)=>{let A=Z().filter((U,S)=>S!==M);Z(A),q?.(A)};return J("fieldset",{...X,class:P("fieldset w-full p-0",Y)},[J("div",{class:()=>`w-full ${K?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":K},[J("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:(R)=>{R.preventDefault(),Q(!0)},ondragleave:()=>Q(!1),ondrop:(R)=>{R.preventDefault(),Q(!1),T(R.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:(R)=>T(R.target.files)})])]),()=>B()?M("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},B()):null,N(()=>W().length>0,()=>M("ul",{class:"mt-2 space-y-1"},[O(W,(R,A)=>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]"},R.name),M("span",{class:"text-[9px] opacity-40"},`(${(R.size/1024).toFixed(0)} KB)`)]),M("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(D)=>{D.preventDefault(),D.stopPropagation(),P(A)}},[V("icon-[lucide--x]")])]),(R)=>R.name+R.lastModified)]))])};var fM={};U(fM,{Indicator:()=>wM});var wM=(Z,K)=>{let{value:G,class:J,...Y}=Z;return M("div",{...Y,class:"indicator"},()=>[G?M("span",{class:_("indicator-item badge",J)},()=>typeof G==="function"?G():G):null,K].filter(Boolean))};var $M={};U($M,{Label:()=>yM});var yM=(Z)=>{let{children:K,value:G,floating:J=!1,error:Y,required:L,class:X,...W}=Z;if(J)return M("label",{class:_("floating-label w-full",X),...W},()=>[G?M("span",{},G):null,K,Y?M("span",{class:"text-error text-xs"},q(Y)):null]);return M("label",{class:_("input w-full",X),...W},()=>[G?M("span",{class:"label"},G):null,K,Y?M("span",{class:"text-error text-xs"},q(Y)):null])};var bM={};U(bM,{List:()=>vM});var vM=(Z)=>{let{class:K,items:G,header:J,render:Y,keyFn:L=(Q,B)=>Q.id??B,...X}=Z,W=O(G,(Q,B)=>M("li",{class:"list-row"},[Y(Q,B)]),L);return M("ul",{...X,class:_("list bg-base-100 rounded-box shadow-md",K)},J?[N(J,()=>M("li",{class:"p-4 pb-2 text-xs opacity-60"},[q(J)])),W]:W)};var hM={};U(hM,{Menu:()=>gM});var gM=(Z)=>{let{class:K,items:G,...J}=Z,Y=(L)=>O(()=>L||[],(X)=>M("li",{},[X.children?M("details",{open:X.open},[M("summary",{},[X.icon&&M("span",{class:"mr-2"},X.icon),X.label]),M("ul",{},Y(X.children))]):M("a",{class:()=>q(X.active)?"active":"",onclick:X.onclick},[X.icon&&M("span",{class:"mr-2"},X.icon),X.label])]),(X,W)=>X.label||W);return M("ul",{...J,class:_("menu bg-base-200 rounded-box",K)},Y(G))};var uM={};U(uM,{Modal:()=>mM});var mM=(Z,K)=>{let{class:G,title:J,buttons:Y,open:L,...X}=Z,W=null,Q=()=>{let z=typeof L==="function"?L():L;if(!W)return;if(z){if(!W.open)W.showModal()}else if(W.open)W.close()};w(()=>Q());let B=()=>{if(typeof L==="function")L(!1)};return M("dialog",{...X,ref:(z)=>{if(W=z,z)Q()},class:_("modal",G),onclose:B,oncancel:B},[M("div",{class:"modal-box"},[J?M("h3",{class:"text-lg font-bold mb-4"},()=>typeof J==="function"?J():J):null,M("div",{class:"py-2"},[typeof K==="function"?K():K]),M("div",{class:"modal-action"},[M("form",{method:"dialog",class:"flex gap-2"},[...(Array.isArray(Y)?Y:[Y]).filter(Boolean),u({type:"submit"},k("close")())])])]),M("form",{method:"dialog",class:"modal-backdrop"},[M("button",{},"close")])])};var pM={};U(pM,{Navbar:()=>dM});var dM=(Z,K)=>{let{class:G,...J}=Z;return M("div",{...J,class:_("navbar bg-base-100 shadow-sm px-4",G)},K)};var oM={};U(oM,{Radio:()=>cM});var cM=(Z)=>{let{class:K,label:G,tooltip:J,value:Y,inputValue:L,name:X,...W}=Z,Q=M("input",{...W,type:"radio",name:X,class:_("radio",K),checked:()=>q(Y)===L,onclick:()=>{if(typeof Y==="function")Y(L)}});if(!G&&!J)return Q;let B=M("label",{class:"label cursor-pointer justify-start gap-3"},[Q,G?M("span",{class:"label-text"},G):null]);return J?M("div",{class:"tooltip","data-tip":J},B):B};var rM={};U(rM,{Range:()=>iM});var iM=(Z)=>{let{class:K,label:G,tooltip:J,value:Y,...L}=Z,X=M("input",{...L,type:"range",class:_("range",K),value:Y,disabled:()=>q(Z.disabled)});if(!G&&!J)return X;let W=M("div",{class:"flex flex-col gap-2"},[G?M("span",{class:"label-text"},G):null,X]);return J?M("div",{class:"tooltip","data-tip":J},W):W};var lM={};U(lM,{Rating:()=>aM});var aM=(Z)=>{let{class:K,value:G,count:J=5,mask:Y="mask-star",readonly:L=!1,onchange:X,...W}=Z,Q=`rating-${Math.random().toString(36).slice(2,7)}`;return M("div",{...W,class:()=>_(`rating ${q(L)?"pointer-events-none":""}`,K)},Array.from({length:q(J)},(B,z)=>{let T=z+1;return M("input",{type:"radio",name:Q,class:`mask ${Y}`,checked:()=>Math.round(q(G))===T,onchange:()=>{if(!q(L)){if(typeof X==="function")X(T);else if(typeof G==="function")G(T)}}})}))};var sM={};U(sM,{Select:()=>nM});var nM=(Z)=>{let{class:K,label:G,items:J,value:Y,...L}=Z,X=M("select",{...L,class:_("select select-bordered w-full",K),value:Y},O(()=>q(J)||[],(W)=>M("option",{value:W.value,$selected:()=>String(q(Y))===String(W.value)},W.label),(W)=>W.value));if(!G)return X;return M("label",{class:"fieldset-label flex flex-col gap-1"},[M("span",{},G),X])};var eM={};U(eM,{Stack:()=>tM});var tM=(Z,K)=>{let{class:G,...J}=Z;return M("div",{...J,class:_("stack",G)},K)};var JJ={};U(JJ,{Stat:()=>MJ});var MJ=(Z)=>{let{class:K,icon:G,label:J,value:Y,desc:L,...X}=Z;return M("div",{...X,class:_("stat",K)},[G&&M("div",{class:"stat-figure text-secondary"},G),J&&M("div",{class:"stat-title"},J),M("div",{class:"stat-value"},()=>q(Y)??Y),L&&M("div",{class:"stat-desc"},L)])};var ZJ={};U(ZJ,{Swap:()=>WJ});var WJ=(Z)=>{let{class:K,value:G,on:J,off:Y,...L}=Z;return M("label",{...L,class:_("swap",K)},[M("input",{type:"checkbox",checked:()=>q(G),onclick:(X)=>{if(typeof G==="function")G(X.target.checked)}}),M("div",{class:"swap-on"},J),M("div",{class:"swap-off"},Y)])};var GJ={};U(GJ,{Table:()=>XJ});var XJ=(Z)=>{let{class:K,items:G=[],columns:J=[],keyFn:Y,zebra:L=!1,pinRows:X=!1,empty:W=k("nodata")(),...Q}=Z,B=()=>{let T=q(L)?"table-zebra":"",P=q(X)?"table-pin-rows":"";return _("table",K,T,P)},z=Y||((T,P)=>T.id||P);return M("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[M("table",{...Q,class:B},[M("thead",{},[M("tr",{},J.map((T)=>M("th",{class:T.class||""},T.label)))]),M("tbody",{},[O(G,(T,P)=>{let R=()=>{let A=q(G),D=z(T,P);return A.find((E,d)=>z(E,d)===D)||T};return M("tr",{class:"hover"},J.map((A)=>{let D=()=>{let E=R();if(A.render)return A.render(E,P);return q(E[A.key])};return M("td",{class:A.class||""},[D])}))},z),N(()=>q(G).length===0,()=>M("tr",{},[M("td",{colspan:J.length,class:"text-center p-10 opacity-50"},[q(W)])]))])])])};var YJ={};U(YJ,{Tabs:()=>KJ});var KJ=(Z)=>{let{items:K,class:G,...J}=Z,Y=typeof K==="function"?K:()=>K||[],L=H(0);return $watch(()=>{let X=Y().findIndex((W)=>q(W.active)===!0);if(X!==-1&&X!==L())L(X)}),M("div",{...J,class:"w-full"},[M("div",{role:"tablist",class:_("tabs",G||"tabs-box")},()=>{return Y().map((W,Q)=>{let B=()=>L()===Q,z=M("button",{role:"tab",class:()=>_("tab",B()?"tab-active":""),onclick:(T)=>{if(T.preventDefault(),!q(W.disabled)){if(W.onclick)W.onclick();L(Q)}}});return $watch(()=>{let T=q(W.label);if(T instanceof Node)z.replaceChildren(T);else z.textContent=String(T)}),z})}),M("div",{class:"tab-panels"},()=>{return Y().map((X,W)=>{let Q=()=>L()===W;return M("div",{role:"tabpanel",class:"tab-content bg-base-100 border-base-300 p-6",style:()=>Q()?"display: block":"display: none"},[()=>typeof X.content==="function"?X.content():X.content])})})])};var LJ={};U(LJ,{Timeline:()=>QJ});var QJ=(Z)=>{let{class:K,items:G=[],vertical:J=!0,compact:Y=!1,...L}=Z,X={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return M("ul",{...L,class:()=>_(`timeline ${q(J)?"timeline-vertical":"timeline-horizontal"} ${q(Y)?"timeline-compact":""}`,K)},()=>{let W=(typeof G==="function"?G():G)||[];return W.map((Q,B)=>{let z=B===0,T=B===W.length-1,P=Q.type||"success",R=()=>q(Q.completed),A=()=>B>0&&q(W[B-1].completed),D=(E)=>typeof E==="function"?E():E;return M("li",{class:"flex-1"},[!z?M("hr",{class:()=>A()?"bg-primary":""}):null,M("div",{class:"timeline-start"},[()=>D(Q.title)]),M("div",{class:"timeline-middle"},[()=>Q.icon?V(Q.icon):V(X[P]||X.success)]),M("div",{class:"timeline-end timeline-box shadow-sm"},[()=>D(Q.detail)]),!T?M("hr",{class:()=>R()?"bg-primary":""}):null])})})};var qJ={};U(qJ,{Toast:()=>BJ});var BJ=(Z,K="alert-success",G=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,X=()=>{clearTimeout(L);let B=Y.firstElementChild;if(B&&!B.classList.contains("opacity-0"))B.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(Q.destroy(),Y.remove(),!J.hasChildNodes())J.remove()},300);else Q.destroy(),Y.remove()},Q=GM(()=>{let B=V("icon-[lucide--x]"),z=M("div",{class:`alert alert-soft ${K} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[M("span",{},[typeof Z==="function"?Z():Z]),u({class:"btn-xs btn-circle btn-ghost",onclick:X},B)]);return requestAnimationFrame(()=>z.classList.remove("translate-x-10","opacity-0")),z},Y);if(G>0)L=setTimeout(X,G);return X};var _J={};U(_J,{Tooltip:()=>AJ});var AJ=(Z,K)=>M("div",{...Z,class:()=>_("tooltip",Z.ui,Z.class),"data-tip":Z.tip},K);var zJ={...YM,...LM,...AM,...PM,...TM,...zM,...DM,...UM,...VM,...EM,...OM,...IM,...kM,...fM,...BM,...$M,...bM,...hM,...uM,...pM,...oM,...rM,...lM,...sM,...eM,...JJ,...ZJ,...GJ,...YJ,...LJ,...qJ,..._J},IJ={...zJ,install:(Z=window)=>{Object.entries(zJ).forEach(([K,G])=>{Z[K]=G}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(l).forEach(([Z,K])=>{window[Z]=K}),window.Utils=a,window.tt=k,window.SigProUI={...l,Utils:a,tt:k},console.log("\uD83C\uDFA8 SigProUI ready");})(); + ${L()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} + `,ondragover:(M)=>{M.preventDefault(),L(!0)},ondragleave:()=>L(!1),ondrop:(M)=>{M.preventDefault(),L(!1),z(M.dataTransfer.files)}},[J("div",{class:"flex items-center gap-3 w-full"},[H("icon-[lucide--upload]"),J("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),J("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${W}MB`)]),J("input",{type:"file",multiple:!0,accept:Q,class:"hidden",onchange:(M)=>z(M.target.files)})])]),()=>B()?J("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},B()):null,E(()=>Z().length>0,()=>J("ul",{class:"mt-2 space-y-1"},[N(Z,(M,A)=>J("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[J("div",{class:"flex items-center gap-2 truncate"},[J("span",{class:"opacity-50"},"\uD83D\uDCC4"),J("span",{class:"truncate font-medium max-w-[200px]"},M.name),J("span",{class:"text-[9px] opacity-40"},`(${(M.size/1024).toFixed(0)} KB)`)]),J("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(U)=>{U.preventDefault(),U.stopPropagation(),C(A)}},[H("icon-[lucide--x]")])]),(M)=>M.name+M.lastModified)]))])};var kJ=(G,Y)=>{let{value:K,class:W,...Q}=G;return J("div",{...Q,class:"indicator"},()=>[K?J("span",{class:P("indicator-item badge",W)},()=>typeof K==="function"?K():K):null,Y].filter(Boolean))};var xJ=(G)=>{let{children:Y,value:K,floating:W=!1,error:Q,required:q,class:X,...Z}=G;if(W)return J("label",{class:P("floating-label w-full",X),...Z},()=>[K?J("span",{},K):null,Y,Q?J("span",{class:"text-error text-xs"},_(Q)):null]);return J("label",{class:P("input w-full",X),...Z},()=>[K?J("span",{class:"label"},K):null,Y,Q?J("span",{class:"text-error text-xs"},_(Q)):null])};var wJ=(G)=>{let{class:Y,items:K,header:W,render:Q,keyFn:q=(L,B)=>L.id??B,...X}=G,Z=N(K,(L,B)=>J("li",{class:"list-row"},[Q(L,B)]),q);return J("ul",{...X,class:P("list bg-base-100 rounded-box shadow-md",Y)},W?[E(W,()=>J("li",{class:"p-4 pb-2 text-xs opacity-60"},[_(W)])),Z]:Z)};var yJ=(G)=>{let{class:Y,items:K,...W}=G,Q=(q)=>N(()=>q||[],(X)=>J("li",{},[X.children?J("details",{open:X.open},[J("summary",{},[X.icon&&J("span",{class:"mr-2"},X.icon),X.label]),J("ul",{},Q(X.children))]):J("a",{class:()=>_(X.active)?"active":"",onclick:X.onclick},[X.icon&&J("span",{class:"mr-2"},X.icon),X.label])]),(X,Z)=>X.label||Z);return J("ul",{...W,class:P("menu bg-base-200 rounded-box",Y)},Q(K))};var fJ=(G,Y)=>{let{class:K,title:W,buttons:Q,open:q,...X}=G,Z=null,L=()=>{let R=typeof q==="function"?q():q;if(!Z)return;if(R){if(!Z.open)Z.showModal()}else if(Z.open)Z.close()};k(()=>L());let B=()=>{if(typeof q==="function")q(!1)};return J("dialog",{...X,ref:(R)=>{if(Z=R,R)L()},class:P("modal",K),onclose:B,oncancel:B},[J("div",{class:"modal-box"},[W?J("h3",{class:"text-lg font-bold mb-4"},()=>typeof W==="function"?W():W):null,J("div",{class:"py-2"},[typeof Y==="function"?Y():Y]),J("div",{class:"modal-action"},[J("form",{method:"dialog",class:"flex gap-2"},[...(Array.isArray(Q)?Q:[Q]).filter(Boolean),d({type:"submit"},f("close")())])])]),J("form",{method:"dialog",class:"modal-backdrop"},[J("button",{},"close")])])};var $J=(G,Y)=>{let{class:K,...W}=G;return J("div",{...W,class:P("navbar bg-base-100 shadow-sm px-4",K)},Y)};var vJ=(G)=>{let{class:Y,label:K,tooltip:W,value:Q,inputValue:q,name:X,...Z}=G,L=J("input",{...Z,type:"radio",name:X,class:P("radio",Y),checked:()=>_(Q)===q,onclick:()=>{if(typeof Q==="function")Q(q)}});if(!K&&!W)return L;let B=J("label",{class:"label cursor-pointer justify-start gap-3"},[L,K?J("span",{class:"label-text"},K):null]);return W?J("div",{class:"tooltip","data-tip":W},B):B};var bJ=(G)=>{let{class:Y,label:K,tooltip:W,value:Q,...q}=G,X=J("input",{...q,type:"range",class:P("range",Y),value:Q,disabled:()=>_(G.disabled)});if(!K&&!W)return X;let Z=J("div",{class:"flex flex-col gap-2"},[K?J("span",{class:"label-text"},K):null,X]);return W?J("div",{class:"tooltip","data-tip":W},Z):Z};var gJ=(G)=>{let{class:Y,value:K,count:W=5,mask:Q="mask-star",readonly:q=!1,onchange:X,...Z}=G,L=`rating-${Math.random().toString(36).slice(2,7)}`;return J("div",{...Z,class:()=>P(`rating ${_(q)?"pointer-events-none":""}`,Y)},Array.from({length:_(W)},(B,R)=>{let z=R+1;return J("input",{type:"radio",name:L,class:`mask ${Q}`,checked:()=>Math.round(_(K))===z,onchange:()=>{if(!_(q)){if(typeof X==="function")X(z);else if(typeof K==="function")K(z)}}})}))};var hJ=(G)=>{let{class:Y,label:K,items:W,value:Q,...q}=G,X=J("select",{...q,class:P("select select-bordered w-full",Y),value:Q},N(()=>_(W)||[],(Z)=>J("option",{value:Z.value,$selected:()=>String(_(Q))===String(Z.value)},Z.label),(Z)=>Z.value));if(!K)return X;return J("label",{class:"fieldset-label flex flex-col gap-1"},[J("span",{},K),X])};var uJ=(G,Y)=>{let{class:K,...W}=G;return J("div",{...W,class:P("stack",K)},Y)};var mJ=(G)=>{let{class:Y,icon:K,label:W,value:Q,desc:q,...X}=G;return J("div",{...X,class:P("stat",Y)},[K&&J("div",{class:"stat-figure text-secondary"},K),W&&J("div",{class:"stat-title"},W),J("div",{class:"stat-value"},()=>_(Q)??Q),q&&J("div",{class:"stat-desc"},q)])};var dJ=(G)=>{let{class:Y,value:K,on:W,off:Q,...q}=G;return J("label",{...q,class:P("swap",Y)},[J("input",{type:"checkbox",checked:()=>_(K),onclick:(X)=>{if(typeof K==="function")K(X.target.checked)}}),J("div",{class:"swap-on"},W),J("div",{class:"swap-off"},Q)])};var pJ=(G)=>{let{class:Y,items:K=[],columns:W=[],keyFn:Q,zebra:q=!1,pinRows:X=!1,empty:Z=f("nodata")(),...L}=G,B=()=>{let z=_(q)?"table-zebra":"",C=_(X)?"table-pin-rows":"";return P("table",Y,z,C)},R=Q||((z,C)=>z.id||C);return J("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[J("table",{...L,class:B},[J("thead",{},[J("tr",{},W.map((z)=>J("th",{class:z.class||""},z.label)))]),J("tbody",{},[N(K,(z,C)=>{let M=()=>{let A=_(K),U=R(z,C);return A.find((S,h)=>R(S,h)===U)||z};return J("tr",{class:"hover"},W.map((A)=>{let U=()=>{let S=M();if(A.render)return A.render(S,C);return _(S[A.key])};return J("td",{class:A.class||""},[U])}))},R),E(()=>_(K).length===0,()=>J("tr",{},[J("td",{colspan:W.length,class:"text-center p-10 opacity-50"},[_(Z)])]))])])])};var cJ=(G)=>{let{items:Y,class:K,...W}=G,Q=typeof Y==="function"?Y:()=>Y||[],q=F(0);return $watch(()=>{let X=Q().findIndex((Z)=>_(Z.active)===!0);if(X!==-1&&X!==q())q(X)}),J("div",{...W,class:"w-full"},[J("div",{role:"tablist",class:P("tabs",K||"tabs-box")},()=>{return Q().map((Z,L)=>{let B=()=>q()===L,R=J("button",{role:"tab",class:()=>P("tab",B()?"tab-active":""),onclick:(z)=>{if(z.preventDefault(),!_(Z.disabled)){if(Z.onclick)Z.onclick();q(L)}}});return $watch(()=>{let z=_(Z.label);if(z instanceof Node)R.replaceChildren(z);else R.textContent=String(z)}),R})}),J("div",{class:"tab-panels"},()=>{return Q().map((X,Z)=>{let L=()=>q()===Z;return J("div",{role:"tabpanel",class:"tab-content bg-base-100 border-base-300 p-6",style:()=>L()?"display: block":"display: none"},[()=>typeof X.content==="function"?X.content():X.content])})})])};var iJ=(G)=>{let{class:Y,items:K=[],vertical:W=!0,compact:Q=!1,...q}=G,X={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return J("ul",{...q,class:()=>P(`timeline ${_(W)?"timeline-vertical":"timeline-horizontal"} ${_(Q)?"timeline-compact":""}`,Y)},()=>{let Z=(typeof K==="function"?K():K)||[];return Z.map((L,B)=>{let R=B===0,z=B===Z.length-1,C=L.type||"success",M=()=>_(L.completed),A=()=>B>0&&_(Z[B-1].completed),U=(S)=>typeof S==="function"?S():S;return J("li",{class:"flex-1"},[!R?J("hr",{class:()=>A()?"bg-primary":""}):null,J("div",{class:"timeline-start"},[()=>U(L.title)]),J("div",{class:"timeline-middle"},[()=>L.icon?H(L.icon):H(X[C]||X.success)]),J("div",{class:"timeline-end timeline-box shadow-sm"},[()=>U(L.detail)]),!z?J("hr",{class:()=>M()?"bg-primary":""}):null])})})};var nJ=(G,Y="alert-success",K=3500)=>{let W=document.getElementById("sigpro-toast-container");if(!W)W=J("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(W);let Q=J("div",{style:"display: contents"});W.appendChild(Q);let q,X=()=>{clearTimeout(q);let B=Q.firstElementChild;if(B&&!B.classList.contains("opacity-0"))B.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(L.destroy(),Q.remove(),!W.hasChildNodes())W.remove()},300);else L.destroy(),Q.remove()},L=ZJ(()=>{let B=H("icon-[lucide--x]"),R=J("div",{class:`alert alert-soft ${Y} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[J("span",{},[typeof G==="function"?G():G]),d({class:"btn-xs btn-circle btn-ghost",onclick:X},B)]);return requestAnimationFrame(()=>R.classList.remove("translate-x-10","opacity-0")),R},Q);if(K>0)q=setTimeout(X,K);return X};var aJ=(G,Y)=>J("div",{...G,class:()=>P("tooltip",G.ui,G.class),"data-tip":G.tip},Y);})(); diff --git a/docs/sigpro-ui.min.js b/docs/sigpro-ui.min.js index aaa0514..854d7a4 100644 --- a/docs/sigpro-ui.min.js +++ b/docs/sigpro-ui.min.js @@ -1,7 +1,7 @@ -(()=>{var{defineProperty:JM,getOwnPropertyNames:UJ,getOwnPropertyDescriptor:HJ}=Object,VJ=Object.prototype.hasOwnProperty;var TJ=new WeakMap,SJ=(Z)=>{var K=TJ.get(Z),G;if(K)return K;if(K=JM({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function")UJ(Z).map((J)=>!VJ.call(K,J)&&JM(K,J,{get:()=>Z[J],enumerable:!(G=HJ(Z,J))||G.enumerable}));return TJ.set(Z,K),K};var U=(Z,K)=>{for(var G in K)JM(Z,G,{get:K[G],enumerable:!0,configurable:!0,set:(J)=>K[G]=()=>J})};var xJ={};U(xJ,{val:()=>q,ui:()=>_,tt:()=>k,getIcon:()=>V,Tooltip:()=>AJ,Toast:()=>BJ,Timeline:()=>QJ,Tabs:()=>KJ,Table:()=>XJ,Swap:()=>WJ,Stat:()=>MJ,Stack:()=>tM,Select:()=>nM,Rating:()=>aM,Range:()=>iM,Radio:()=>cM,Navbar:()=>dM,Modal:()=>mM,Menu:()=>gM,List:()=>vM,Label:()=>yM,Input:()=>m,Indicator:()=>wM,Fileinput:()=>xM,Fieldset:()=>jM,Fab:()=>NM,Dropdown:()=>SM,Drawer:()=>HM,Datepicker:()=>FM,Colorpicker:()=>RM,Checkbox:()=>CM,Button:()=>u,Badge:()=>_M,Autocomplete:()=>qM,Alert:()=>QM,Accordion:()=>KM});var j=null,$=null,p=new Set,i=!1,WM=new WeakMap,EJ=()=>{if(i)return;i=!0;while(p.size>0){let Z=Array.from(p).sort((K,G)=>(K.depth||0)-(G.depth||0));p.clear();for(let K of Z)if(!K._deleted)K()}i=!1},CJ=(Z)=>{if(j&&!j._deleted)Z.add(j),j._deps.add(Z)},ZM=(Z)=>{for(let K of Z){if(K===j||K._deleted)continue;if(K._isComputed){if(K.markDirty(),K._subs)ZM(K._subs)}else p.add(K)}if(!i)queueMicrotask(EJ)},XM=(Z)=>{if(Z._cleanups)Z._cleanups.forEach((K)=>K()),Z._cleanups.clear();Z.childNodes?.forEach(XM)},r=(Z)=>{let K=new Set,G=$,J=document.createElement("div");J.style.display="contents",$={cleanups:K};try{let Y=Z({onCleanup:(X)=>K.add(X)}),L=(X)=>{if(!X)return;if(X._isRuntime)K.add(X.destroy),J.appendChild(X.container);else if(Array.isArray(X))X.forEach(L);else J.appendChild(X instanceof Node?X:document.createTextNode(String(X)))};L(Y)}finally{$=G}return{_isRuntime:!0,container:J,destroy:()=>{K.forEach((Y)=>Y()),XM(J),J.remove()}}},H=(Z,K=null)=>{if(typeof Z==="function"){let Y=new Set,L,X=!0,W=()=>{if(W._deleted)return;W._deps.forEach((B)=>B.delete(W)),W._deps.clear();let Q=j;j=W;try{let B=Z();if(!Object.is(L,B)||X)L=B,X=!1,ZM(Y)}finally{j=Q}};if(W._deps=new Set,W._isComputed=!0,W._subs=Y,W._deleted=!1,W.markDirty=()=>X=!0,W.stop=()=>{W._deleted=!0,W._deps.forEach((Q)=>Q.delete(W)),Y.clear()},$)$.cleanups.add(W.stop);return()=>{if(X)W();return CJ(Y),L}}let G=Z;if(K)try{let Y=localStorage.getItem(K);if(Y!==null)G=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](G):Y[0];if(!Object.is(G,L)){if(G=L,K)localStorage.setItem(K,JSON.stringify(G));ZM(J)}}return CJ(J),G}},w=(Z,K)=>{let G=Array.isArray(Z),J=G?K:Z,Y=G?Z:null;if(typeof J!=="function")return()=>{};let L=$,X=()=>{if(X._deleted)return;X._deps.forEach((B)=>B.delete(X)),X._deps.clear(),X._cleanups.forEach((B)=>B()),X._cleanups.clear();let W=j,Q=$;j=X,$={cleanups:X._cleanups},X.depth=W?W.depth+1:0;try{if(G)j=null,J(),j=X,Y.forEach((B)=>typeof B==="function"&&B());else J()}finally{j=W,$=Q}};if(X._deps=new Set,X._cleanups=new Set,X._deleted=!1,X.stop=()=>{if(X._deleted)return;if(X._deleted=!0,p.delete(X),X._deps.forEach((W)=>W.delete(X)),X._cleanups.forEach((W)=>W()),L)L.cleanups.delete(X.stop)},L)L.cleanups.add(X.stop);return X(),X.stop},M=(Z,K={},G=[])=>{if(K instanceof Node||Array.isArray(K)||typeof K!=="object")G=K,K={};let J=document.createElement(Z),Y=(W,Q)=>(W==="src"||W==="href")&&String(Q).toLowerCase().includes("javascript:")?"#":Q;J._cleanups=new Set;let L=["disabled","checked","required","readonly","selected","multiple","autofocus"];for(let[W,Q]of Object.entries(K)){if(W==="ref"){typeof Q==="function"?Q(J):Q.current=J;continue}let B=typeof Q==="function";if(["INPUT","TEXTAREA","SELECT"].includes(J.tagName)&&(W==="value"||W==="checked")&&B){J._cleanups.add(w(()=>{let A=Q();if(J[W]!==A)J[W]=A}));let P=W==="checked"?"change":"input",R=(A)=>Q(A.target[W]);J.addEventListener(P,R),J._cleanups.add(()=>J.removeEventListener(P,R))}else if(W.startsWith("on")){let P=W.slice(2).toLowerCase().split(".")[0],R=(A)=>Q(A);J.addEventListener(P,R),J._cleanups.add(()=>J.removeEventListener(P,R))}else if(B)J._cleanups.add(w(()=>{let P=Y(W,Q());if(W==="class")J.className=P||"";else if(L.includes(W))if(P)J.setAttribute(W,""),J[W]=!0;else J.removeAttribute(W),J[W]=!1;else P==null?J.removeAttribute(W):J.setAttribute(W,P)}));else if(L.includes(W))if(Q)J.setAttribute(W,""),J[W]=!0;else J.removeAttribute(W),J[W]=!1;else J.setAttribute(W,Y(W,Q))}let X=(W)=>{if(Array.isArray(W))return W.forEach(X);if(W instanceof Node)J.appendChild(W);else if(typeof W==="function"){let Q=document.createTextNode("");J.appendChild(Q);let B=[];J._cleanups.add(w(()=>{let z=W(),T=(Array.isArray(z)?z:[z]).map((P)=>P?._isRuntime?P.container:P instanceof Node?P:document.createTextNode(P??""));B.forEach((P)=>{XM?.(P),P.remove()}),T.forEach((P)=>Q.parentNode?.insertBefore(P,Q)),B=T}))}else J.appendChild(document.createTextNode(W??""))};return X(G),J},N=(Z,K,G=null)=>{let J=document.createTextNode(""),Y=M("div",{style:"display:contents"},[J]),L=null,X=null;return w(()=>{let W=!!(typeof Z==="function"?Z():Z);if(W!==X){if(X=W,L)L.destroy();let Q=W?K:G;if(Q)L=r(()=>typeof Q==="function"?Q():Q),Y.insertBefore(L.container,J)}}),Y};N.not=(Z,K,G)=>N(()=>!(typeof Z==="function"?Z():Z),K,G);var O=(Z,K,G,J="div",Y={style:"display:contents"})=>{let L=document.createTextNode(""),X=M(J,Y,[L]),W=new Map;return w(()=>{let Q=(typeof Z==="function"?Z():Z)||[],B=new Map,z=[];for(let P=0;PK(R,P));else W.delete(A);B.set(A,D),z.push(A)}W.forEach((P)=>{P.destroy(),P.container.remove()});let T=L;for(let P=z.length-1;P>=0;P--){let R=B.get(z[P]);if(R.container.nextSibling!==T)X.insertBefore(R.container,T);T=R.container}W=B}),X},h=(Z)=>{let K=H(window.location.hash.replace(/^#/,"")||"/");window.addEventListener("hashchange",()=>K(window.location.hash.replace(/^#/,"")||"/"));let G=M("div",{class:"router-outlet"}),J=null;return w([K],async()=>{let Y=K(),L=Z.find((X)=>{let W=X.path.split("/").filter(Boolean),Q=Y.split("/").filter(Boolean);return W.length===Q.length&&W.every((B,z)=>B.startsWith(":")||B===Q[z])})||Z.find((X)=>X.path==="*");if(L){let X=L.component;if(typeof X==="function"&&X.toString().includes("import"))X=(await X()).default||await X();let W={};if(L.path.split("/").filter(Boolean).forEach((Q,B)=>{if(Q.startsWith(":"))W[Q.slice(1)]=Y.split("/").filter(Boolean)[B]}),J)J.destroy();if(h.params)h.params(W);J=r(()=>{try{return typeof X==="function"?X(W):X}catch(Q){return M("div",{class:"p-4 text-error"},"Error loading view")}}),G.appendChild(J.container)}}),G};h.params=H({});h.to=(Z)=>window.location.hash=Z.replace(/^#?\/?/,"#/");h.back=()=>window.history.back();h.path=()=>window.location.hash.replace(/^#/,"")||"/";var GM=(Z,K)=>{let G=typeof K==="string"?document.querySelector(K):K;if(!G)return;if(WM.has(G))WM.get(G).destroy();let J=r(typeof Z==="function"?Z:()=>Z);return G.replaceChildren(J.container),WM.set(G,J),J},NJ={$:H,$watch:w,$html:M,$if:N,$for:O,$router:h,$mount:GM};if(typeof window<"u")((K)=>{Object.keys(K).forEach((J)=>{window[J]=K[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,X)=>M(J,L,X)}),window.SigPro=Object.freeze(K)})(NJ);var l={};U(l,{default:()=>IJ,Tooltip:()=>AJ,Toast:()=>BJ,Timeline:()=>QJ,Tabs:()=>KJ,Table:()=>XJ,Swap:()=>WJ,Stat:()=>MJ,Stack:()=>tM,Select:()=>nM,Rating:()=>aM,Range:()=>iM,Radio:()=>cM,Navbar:()=>dM,Modal:()=>mM,Menu:()=>gM,List:()=>vM,Label:()=>yM,Input:()=>m,Indicator:()=>wM,Fileinput:()=>xM,Fieldset:()=>jM,Fab:()=>NM,Dropdown:()=>SM,Drawer:()=>HM,Datepicker:()=>FM,Colorpicker:()=>RM,Checkbox:()=>CM,Button:()=>u,Badge:()=>_M,Autocomplete:()=>qM,Alert:()=>QM,Accordion:()=>KM});var YM={};U(YM,{Accordion:()=>KM});var a={};U(a,{val:()=>q,ui:()=>_,getIcon:()=>V});var q=(Z)=>typeof Z==="function"?Z():Z,_=(Z,K)=>typeof K==="function"?()=>`${Z} ${K()||""}`.trim():`${Z} ${K||""}`.trim(),V=(Z)=>{if(!Z)return null;if(typeof Z==="function")return M("span",{class:"mr-1"},Z());if(typeof Z==="object")return M("span",{class:"mr-1"},Z);if(typeof Z==="string"){let K=Z.trim().split(/\s+/),G=K[K.length-1]==="right",J=G?K.slice(0,-1).join(" "):Z,Y=G?"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 KM=(Z,K)=>{let{class:G,title:J,name:Y,open:L,...X}=Z;return M("div",{...X,class:_("collapse collapse-arrow bg-base-200 mb-2",G)},[M("input",{type:Y?"radio":"checkbox",name:Y,checked:q(L)}),M("div",{class:"collapse-title text-xl font-medium"},J),M("div",{class:"collapse-content"},K)])};var LM={};U(LM,{Alert:()=>QM});var QM=(Z,K)=>{let{class:G,actions:J,type:Y="info",soft:L=!0,...X}=Z,W={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},z=[`alert-${Y}`,L?"alert-soft":"",G].filter(Boolean).join(" "),T=K||Z.message;return M("div",{...X,role:"alert",class:_("alert",z)},()=>[V(W[Y]),M("div",{class:"flex-1"},[M("span",{},[typeof T==="function"?T():T])]),J?M("div",{class:"flex-none"},[typeof J==="function"?J():J]):null].filter(Boolean))};var AM={};U(AM,{Autocomplete:()=>qM});var OJ={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"}},jJ=H("es");var k=(Z)=>()=>OJ[jJ()][Z]||Z;var BM={};U(BM,{Input:()=>m});var m=(Z)=>{let{class:K,value:G,type:J="text",icon:Y,oninput:L,placeholder:X,disabled:W,size:Q,validate:B,...z}=Z,T=J==="password",P=H(!1),R=H(null),A={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]"},D=Y?V(Y):A[J]?V(A[J]):null,E=()=>V(P()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),d=D?"pl-10":"",n=T?"pr-10":"",c=()=>{if(K?.includes("input-xs"))return"btn-xs";if(K?.includes("input-sm"))return"btn-sm";if(K?.includes("input-lg"))return"btn-lg";return"btn-md"},o=(S)=>{let I=S.target.value;if(B){let b=B(I);R(b||null)}L?.(S)},v=()=>R()&&R()!=="",F=M("input",{...z,type:()=>T?P()?"text":"password":J,placeholder:X||" ",class:()=>{let S=`input w-full ${d} ${n}`;if(K)S+=` ${K}`;if(v())S+=" input-error";return S.trim()},value:G,oninput:o,disabled:()=>q(W),"aria-invalid":()=>v()?"true":"false"});return M("div",{class:"relative w-full"},()=>[F,D?M("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},D):null,T?M("button",{type:"button",class:_("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",c()),onclick:(S)=>{S.preventDefault(),P(!P())}},()=>E()):null,M("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>v()?R():null)])};var qM=(Z)=>{let{class:K,items:G=[],value:J,onSelect:Y,label:L,placeholder:X,...W}=Z,Q=H(q(J)||""),B=H(!1),z=H(-1),T=H(()=>{let A=Q().toLowerCase(),D=q(G)||[];return A?D.filter((E)=>(typeof E==="string"?E:E.label).toLowerCase().includes(A)):D}),P=(A)=>{let D=typeof A==="string"?A:A.value,E=typeof A==="string"?A:A.label;if(Q(E),typeof J==="function")J(D);Y?.(A),B(!1),z(-1)},R=(A)=>{let D=T();if(A.key==="ArrowDown")A.preventDefault(),B(!0),z(Math.min(z()+1,D.length-1));else if(A.key==="ArrowUp")A.preventDefault(),z(Math.max(z()-1,0));else if(A.key==="Enter"&&z()>=0)A.preventDefault(),P(D[z()]);else if(A.key==="Escape")B(!1)};return M("div",{class:"relative w-full"},[m({label:L,class:K,placeholder:X||k("search")(),value:Q,onfocus:()=>B(!0),onblur:()=>setTimeout(()=>B(!1),150),onkeydown:R,oninput:(A)=>{let D=A.target.value;if(Q(D),typeof J==="function")J(D);B(!0),z(-1)},...W}),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:()=>B()&&T().length?"display:block":"display:none"},[O(T,(A,D)=>M("li",{},[M("a",{class:()=>`block w-full ${z()===D?"active bg-primary text-primary-content":""}`,onclick:()=>P(A),onmouseenter:()=>z(D)},typeof A==="string"?A:A.label)]),(A,D)=>(typeof A==="string"?A:A.value)+D),()=>T().length?null:M("li",{class:"p-2 text-center opacity-50"},k("nodata")())])])};var PM={};U(PM,{Badge:()=>_M});var _M=(Z,K)=>{let{class:G,...J}=Z;return M("span",{...J,class:_("badge",G)},K)};var TM={};U(TM,{Button:()=>u});var u=(Z,K)=>{let{class:G,loading:J,icon:Y,...L}=Z,X=V(Y);return M("button",{...L,class:_("btn",G),disabled:()=>q(J)||q(Z.disabled)},()=>[q(J)&&M("span",{class:"loading loading-spinner"}),X,K].filter(Boolean))};var zM={};U(zM,{Checkbox:()=>CM});var CM=(Z)=>{let{class:K,value:G,tooltip:J,toggle:Y,label:L,...X}=Z,W=M("input",{...X,type:"checkbox",class:()=>_(q(Y)?"toggle":"checkbox",K),checked:G}),Q=M("label",{class:"label cursor-pointer justify-start gap-3"},[W,L?M("span",{class:"label-text"},L):null]);return J?M("div",{class:"tooltip","data-tip":J},Q):Q};var DM={};U(DM,{Colorpicker:()=>RM});var RM=(Z)=>{let{class:K,value:G,label:J,...Y}=Z,L=H(!1),X=["#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"],W=()=>q(G)||"#000000";return M("div",{class:_("relative w-fit",K)},[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: ${W()}`}),J?M("span",{class:"opacity-80"},J):null]),N(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"},X.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 - ${W().toLowerCase()===Q.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof G==="function")G(Q);L(!1)}})))])),N(L,()=>M("div",{class:"fixed inset-0 z-[100]",onclick:()=>L(!1)}))])};var UM={};U(UM,{Datepicker:()=>FM});var FM=(Z)=>{let{class:K,value:G,range:J,label:Y,placeholder:L,hour:X=!1,...W}=Z,Q=H(!1),B=H(new Date),z=H(null),T=H(0),P=H(0),R=()=>q(J)===!0,A=new Date,D=`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,E=(C)=>{let F=C.getFullYear(),S=String(C.getMonth()+1).padStart(2,"0"),I=String(C.getDate()).padStart(2,"0");return`${F}-${S}-${I}`},d=(C)=>{let F=E(C),S=q(G);if(R())if(!S?.start||S.start&&S.end){if(typeof G==="function")G({start:F,end:null,...X&&{startHour:T()}})}else{let I=S.start;if(typeof G==="function"){let b=F{let C=q(G);if(!C)return"";if(typeof C==="string"){if(X&&C.includes("T"))return C.replace("T"," ");return C}if(C.start&&C.end){let F=X&&C.startHour?`${C.start} ${String(C.startHour).padStart(2,"0")}:00`:C.start,S=X&&C.endHour?`${C.end} ${String(C.endHour).padStart(2,"0")}:00`:C.end;return`${F} - ${S}`}if(C.start)return`${X&&C.startHour?`${C.start} ${String(C.startHour).padStart(2,"0")}:00`:C.start}...`;return""}),c=(C)=>{let F=B();B(new Date(F.getFullYear(),F.getMonth()+C,1))},o=(C)=>{let F=B();B(new Date(F.getFullYear()+C,F.getMonth(),1))},v=({value:C,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:C,class:"range range-xs flex-1",oninput:(S)=>{let I=parseInt(S.target.value);F(I)}}),M("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(q(C)).padStart(2,"0")+":00")])])};return M("div",{class:_("relative w-full",K)},[m({label:Y,placeholder:L||(R()?"Seleccionar rango...":"Seleccionar fecha..."),value:n,readonly:!0,icon:V("icon-[lucide--calendar]"),onclick:(C)=>{C.stopPropagation(),Q(!Q())},...W}),N(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:(C)=>C.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:()=>o(-1)},V("icon-[lucide--chevrons-left]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>c(-1)},V("icon-[lucide--chevron-left]"))]),M("span",{class:"font-bold uppercase flex-1 text-center"},[()=>B().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:()=>c(1)},V("icon-[lucide--chevron-right]")),M("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>o(1)},V("icon-[lucide--chevrons-right]"))])]),M("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>z(null)},[...["L","M","X","J","V","S","D"].map((C)=>M("div",{class:"text-[10px] opacity-40 font-bold text-center"},C)),()=>{let C=B(),F=C.getFullYear(),S=C.getMonth(),I=new Date(F,S,1).getDay(),b=I===0?6:I-1,RJ=new Date(F,S+1,0).getDate(),s=[];for(let g=0;g{let y=q(G),t=z(),DJ=typeof y==="string"?y.split("T")[0]===x:y?.start===x,FJ=y?.end===x,e=!1;if(R()&&y?.start){let MM=y.start;if(!y.end&&t)e=x>MM&&x<=t||x=t;else if(y.end)e=x>MM&&x{if(R())z(x)},onclick:()=>d(PJ)},[g.toString()]))}return s}]),X?M("div",{class:"mt-3 pt-2 border-t border-base-300"},[R()?M("div",{class:"flex gap-4"},[v({value:T,onChange:(C)=>{T(C);let F=q(G);if(F?.start)G({...F,startHour:C})}}),v({value:P,onChange:(C)=>{P(C);let F=q(G);if(F?.end)G({...F,endHour:C})}})]):v({value:T,onChange:(C)=>{T(C);let F=q(G);if(F&&typeof F==="string"&&F.includes("-"))G(F.split("T")[0]+"T"+String(C).padStart(2,"0")+":00:00")}})]):null])),N(Q,()=>M("div",{class:"fixed inset-0 z-[90]",onclick:()=>Q(!1)}))])};var VM={};U(VM,{Drawer:()=>HM});var HM=(Z,K)=>{let{class:G,id:J,open:Y,side:L,content:X,...W}=Z,Q=J||`drawer-${Math.random().toString(36).slice(2,9)}`;return M("div",{...W,class:_("drawer",G)},[M("input",{id:Q,type:"checkbox",class:"drawer-toggle",checked:()=>typeof Y==="function"?Y():Y,onchange:(B)=>{if(typeof Y==="function")Y(B.target.checked)}}),M("div",{class:"drawer-content"},[typeof X==="function"?X():X]),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 EM={};U(EM,{Dropdown:()=>SM});var f=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(Z)=>{if(f&&!f.contains(Z.target))f.open=!1,f=null}),window.__dropdownHandlerRegistered=!0;var SM=(Z)=>{let{class:K,label:G,icon:J,items:Y,...L}=Z;return $html("details",{...L,class:_("dropdown",K)},[$html("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(X)=>{let W=X.currentTarget.closest("details");if(f&&f!==W)f.open=!1;setTimeout(()=>{f=W.open?W:null},0)}},[()=>J?typeof J==="function"?J():J:null,()=>G?typeof G==="function"?G():G: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((W)=>$html("li",{},[$html("a",{class:W.class||"",onclick:(Q)=>{if(W.onclick)W.onclick(Q);let B=Q.currentTarget.closest("details");if(B){if(B.open=!1,f===B)f=null}}},[W.icon?$html("span",{},W.icon):null,$html("span",{},W.label)])]))}])])};var OM={};U(OM,{Fab:()=>NM});var NM=(Z)=>{let{class:K,icon:G,label:J,actions:Y=[],position:L="bottom-6 right-6",...X}=Z;return M("div",{...X,class:_(`fab absolute ${L} flex flex-col-reverse items-end gap-3 z-[100]`,K)},[M("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[G?V(G):null,!G&&J?J:null]),...q(Y).map((W)=>M("div",{class:"flex items-center gap-3 transition-all duration-300"},[W.label?M("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},W.label):null,M("button",{type:"button",class:`btn btn-circle shadow-lg ${W.class||""}`,onclick:(Q)=>{Q.stopPropagation(),W.onclick?.(Q)}},[W.icon?V(W.icon):W.text||""])]))])};var IM={};U(IM,{Fieldset:()=>jM});var jM=(Z,K)=>{let{class:G,legend:J,...Y}=Z;return M("fieldset",{...Y,class:_("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",G)},[()=>{let L=q(J);return L?M("legend",{class:"fieldset-legend font-bold"},[L]):null},K])};var kM={};U(kM,{Fileinput:()=>xM});var xM=(Z)=>{let{class:K,tooltip:G,max:J=2,accept:Y="*",onSelect:L,...X}=Z,W=H([]),Q=H(!1),B=H(null),z=J*1024*1024,T=(R)=>{let A=Array.from(R);if(B(null),A.find((E)=>E.size>z)){B(`Máx ${J}MB`);return}W([...W(),...A]),L?.(W())},P=(R)=>{let A=W().filter((D,E)=>E!==R);W(A),L?.(A)};return M("fieldset",{...X,class:_("fieldset w-full p-0",K)},[M("div",{class:()=>`w-full ${G?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":G},[M("label",{class:()=>` +(()=>{var{defineProperty:t,getOwnPropertyNames:qJ,getOwnPropertyDescriptor:BJ}=Object,_J=Object.prototype.hasOwnProperty;var GJ=new WeakMap,AJ=(G)=>{var Y=GJ.get(G),K;if(Y)return Y;if(Y=t({},"__esModule",{value:!0}),G&&typeof G==="object"||typeof G==="function")qJ(G).map((W)=>!_J.call(Y,W)&&t(Y,W,{get:()=>G[W],enumerable:!(K=BJ(G,W))||K.enumerable}));return GJ.set(G,Y),Y};var PJ=(G,Y)=>{for(var K in Y)t(G,K,{get:Y[K],enumerable:!0,configurable:!0,set:(W)=>Y[K]=()=>W})};var lJ={};PJ(lJ,{val:()=>_,ui:()=>P,tt:()=>f,getIcon:()=>H,Tooltip:()=>aJ,Toast:()=>nJ,Timeline:()=>iJ,Tabs:()=>cJ,Table:()=>pJ,Swap:()=>dJ,Stat:()=>mJ,Stack:()=>uJ,Select:()=>hJ,Rating:()=>gJ,Range:()=>bJ,Radio:()=>vJ,Navbar:()=>$J,Modal:()=>fJ,Menu:()=>yJ,List:()=>wJ,Label:()=>xJ,Input:()=>m,Indicator:()=>kJ,Fileinput:()=>IJ,Fieldset:()=>jJ,Fab:()=>OJ,Dropdown:()=>NJ,Drawer:()=>EJ,Datepicker:()=>SJ,Colorpicker:()=>VJ,Checkbox:()=>HJ,Button:()=>d,Badge:()=>FJ,Autocomplete:()=>DJ,Alert:()=>RJ,Accordion:()=>TJ});var O=null,y=null,u=new Set,i=!1,e=new WeakMap,CJ=()=>{if(i)return;i=!0;while(u.size>0){let G=Array.from(u).sort((Y,K)=>(Y.depth||0)-(K.depth||0));u.clear();for(let Y of G)if(!Y._deleted)Y()}i=!1},KJ=(G)=>{if(O&&!O._deleted)G.add(O),O._deps.add(G)},JJ=(G)=>{for(let Y of G){if(Y===O||Y._deleted)continue;if(Y._isComputed){if(Y.markDirty(),Y._subs)JJ(Y._subs)}else u.add(Y)}if(!i)queueMicrotask(CJ)},WJ=(G)=>{if(G._cleanups)G._cleanups.forEach((Y)=>Y()),G._cleanups.clear();G.childNodes?.forEach(WJ)},n=(G)=>{let Y=new Set,K=y,W=document.createElement("div");W.style.display="contents",y={cleanups:Y};try{let Q=G({onCleanup:(X)=>Y.add(X)}),q=(X)=>{if(!X)return;if(X._isRuntime)Y.add(X.destroy),W.appendChild(X.container);else if(Array.isArray(X))X.forEach(q);else W.appendChild(X instanceof Node?X:document.createTextNode(String(X)))};q(Q)}finally{y=K}return{_isRuntime:!0,container:W,destroy:()=>{Y.forEach((Q)=>Q()),WJ(W),W.remove()}}},F=(G,Y=null)=>{if(typeof G==="function"){let Q=new Set,q,X=!0,Z=()=>{if(Z._deleted)return;Z._deps.forEach((B)=>B.delete(Z)),Z._deps.clear();let L=O;O=Z;try{let B=G();if(!Object.is(q,B)||X)q=B,X=!1,JJ(Q)}finally{O=L}};if(Z._deps=new Set,Z._isComputed=!0,Z._subs=Q,Z._deleted=!1,Z.markDirty=()=>X=!0,Z.stop=()=>{Z._deleted=!0,Z._deps.forEach((L)=>L.delete(Z)),Q.clear()},y)y.cleanups.add(Z.stop);return()=>{if(X)Z();return KJ(Q),q}}let K=G;if(Y)try{let Q=localStorage.getItem(Y);if(Q!==null)K=JSON.parse(Q)}catch(Q){console.warn("SigPro: LocalStorage locked",Q)}let W=new Set;return(...Q)=>{if(Q.length){let q=typeof Q[0]==="function"?Q[0](K):Q[0];if(!Object.is(K,q)){if(K=q,Y)localStorage.setItem(Y,JSON.stringify(K));JJ(W)}}return KJ(W),K}},k=(G,Y)=>{let K=Array.isArray(G),W=K?Y:G,Q=K?G:null;if(typeof W!=="function")return()=>{};let q=y,X=()=>{if(X._deleted)return;X._deps.forEach((B)=>B.delete(X)),X._deps.clear(),X._cleanups.forEach((B)=>B()),X._cleanups.clear();let Z=O,L=y;O=X,y={cleanups:X._cleanups},X.depth=Z?Z.depth+1:0;try{if(K)O=null,W(),O=X,Q.forEach((B)=>typeof B==="function"&&B());else W()}finally{O=Z,y=L}};if(X._deps=new Set,X._cleanups=new Set,X._deleted=!1,X.stop=()=>{if(X._deleted)return;if(X._deleted=!0,u.delete(X),X._deps.forEach((Z)=>Z.delete(X)),X._cleanups.forEach((Z)=>Z()),q)q.cleanups.delete(X.stop)},q)q.cleanups.add(X.stop);return X(),X.stop},J=(G,Y={},K=[])=>{if(Y instanceof Node||Array.isArray(Y)||typeof Y!=="object")K=Y,Y={};let W=document.createElement(G),Q=(Z,L)=>(Z==="src"||Z==="href")&&String(L).toLowerCase().includes("javascript:")?"#":L;W._cleanups=new Set;let q=["disabled","checked","required","readonly","selected","multiple","autofocus"];for(let[Z,L]of Object.entries(Y)){if(Z==="ref"){typeof L==="function"?L(W):L.current=W;continue}let B=typeof L==="function";if(["INPUT","TEXTAREA","SELECT"].includes(W.tagName)&&(Z==="value"||Z==="checked")&&B){W._cleanups.add(k(()=>{let A=L();if(W[Z]!==A)W[Z]=A}));let C=Z==="checked"?"change":"input",M=(A)=>L(A.target[Z]);W.addEventListener(C,M),W._cleanups.add(()=>W.removeEventListener(C,M))}else if(Z.startsWith("on")){let C=Z.slice(2).toLowerCase().split(".")[0],M=(A)=>L(A);W.addEventListener(C,M),W._cleanups.add(()=>W.removeEventListener(C,M))}else if(B)W._cleanups.add(k(()=>{let C=Q(Z,L());if(Z==="class")W.className=C||"";else if(q.includes(Z))if(C)W.setAttribute(Z,""),W[Z]=!0;else W.removeAttribute(Z),W[Z]=!1;else C==null?W.removeAttribute(Z):W.setAttribute(Z,C)}));else if(q.includes(Z))if(L)W.setAttribute(Z,""),W[Z]=!0;else W.removeAttribute(Z),W[Z]=!1;else W.setAttribute(Z,Q(Z,L))}let X=(Z)=>{if(Array.isArray(Z))return Z.forEach(X);if(Z instanceof Node)W.appendChild(Z);else if(typeof Z==="function"){let L=document.createTextNode("");W.appendChild(L);let B=[];W._cleanups.add(k(()=>{let R=Z(),z=(Array.isArray(R)?R:[R]).map((C)=>C?._isRuntime?C.container:C instanceof Node?C:document.createTextNode(C??""));B.forEach((C)=>{WJ?.(C),C.remove()}),z.forEach((C)=>L.parentNode?.insertBefore(C,L)),B=z}))}else W.appendChild(document.createTextNode(Z??""))};return X(K),W},E=(G,Y,K=null)=>{let W=document.createTextNode(""),Q=J("div",{style:"display:contents"},[W]),q=null,X=null;return k(()=>{let Z=!!(typeof G==="function"?G():G);if(Z!==X){if(X=Z,q)q.destroy();let L=Z?Y:K;if(L)q=n(()=>typeof L==="function"?L():L),Q.insertBefore(q.container,W)}}),Q};E.not=(G,Y,K)=>E(()=>!(typeof G==="function"?G():G),Y,K);var N=(G,Y,K,W="div",Q={style:"display:contents"})=>{let q=document.createTextNode(""),X=J(W,Q,[q]),Z=new Map;return k(()=>{let L=(typeof G==="function"?G():G)||[],B=new Map,R=[];for(let C=0;CY(M,C));else Z.delete(A);B.set(A,U),R.push(A)}Z.forEach((C)=>{C.destroy(),C.container.remove()});let z=q;for(let C=R.length-1;C>=0;C--){let M=B.get(R[C]);if(M.container.nextSibling!==z)X.insertBefore(M.container,z);z=M.container}Z=B}),X},g=(G)=>{let Y=F(window.location.hash.replace(/^#/,"")||"/");window.addEventListener("hashchange",()=>Y(window.location.hash.replace(/^#/,"")||"/"));let K=J("div",{class:"router-outlet"}),W=null;return k([Y],async()=>{let Q=Y(),q=G.find((X)=>{let Z=X.path.split("/").filter(Boolean),L=Q.split("/").filter(Boolean);return Z.length===L.length&&Z.every((B,R)=>B.startsWith(":")||B===L[R])})||G.find((X)=>X.path==="*");if(q){let X=q.component;if(typeof X==="function"&&X.toString().includes("import"))X=(await X()).default||await X();let Z={};if(q.path.split("/").filter(Boolean).forEach((L,B)=>{if(L.startsWith(":"))Z[L.slice(1)]=Q.split("/").filter(Boolean)[B]}),W)W.destroy();if(g.params)g.params(Z);W=n(()=>{try{return typeof X==="function"?X(Z):X}catch(L){return J("div",{class:"p-4 text-error"},"Error loading view")}}),K.appendChild(W.container)}}),K};g.params=F({});g.to=(G)=>window.location.hash=G.replace(/^#?\/?/,"#/");g.back=()=>window.history.back();g.path=()=>window.location.hash.replace(/^#/,"")||"/";var ZJ=(G,Y)=>{let K=typeof Y==="string"?document.querySelector(Y):Y;if(!K)return;if(e.has(K))e.get(K).destroy();let W=n(typeof G==="function"?G:()=>G);return K.replaceChildren(W.container),e.set(K,W),W},zJ={$:F,$watch:k,$html:J,$if:E,$for:N,$router:g,$mount:ZJ};if(typeof window<"u")((Y)=>{Object.keys(Y).forEach((W)=>{window[W]=Y[W]}),"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((W)=>{let Q=W.charAt(0).toUpperCase()+W.slice(1);if(!(Q in window))window[Q]=(q,X)=>J(W,q,X)}),window.SigPro=Object.freeze(Y)})(zJ);var _=(G)=>typeof G==="function"?G():G,P=(G,Y)=>typeof Y==="function"?()=>`${G} ${Y()||""}`.trim():`${G} ${Y||""}`.trim(),H=(G)=>{if(!G)return null;if(typeof G==="function")return J("span",{class:"mr-1"},G());if(typeof G==="object")return J("span",{class:"mr-1"},G);if(typeof G==="string"){let Y=G.trim().split(/\s+/),K=Y[Y.length-1]==="right",W=K?Y.slice(0,-1).join(" "):G,Q=K?"ml-1":"mr-1";if(W&&!W.startsWith("icon-[")&&!W.includes("--"))return J("span",{class:Q},W);return J("span",{class:`${W} ${Q}`.trim()})}return null};var TJ=(G,Y)=>{let{class:K,title:W,name:Q,open:q,...X}=G;return J("div",{...X,class:P("collapse collapse-arrow bg-base-200 mb-2",K)},[J("input",{type:Q?"radio":"checkbox",name:Q,checked:_(q)}),J("div",{class:"collapse-title text-xl font-medium"},W),J("div",{class:"collapse-content"},Y)])};var RJ=(G,Y)=>{let{class:K,actions:W,type:Q="info",soft:q=!0,...X}=G,Z={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},R=[`alert-${Q}`,q?"alert-soft":"",K].filter(Boolean).join(" "),z=Y||G.message;return J("div",{...X,role:"alert",class:P("alert",R)},()=>[H(Z[Q]),J("div",{class:"flex-1"},[J("span",{},[typeof z==="function"?z():z])]),W?J("div",{class:"flex-none"},[typeof W==="function"?W():W]):null].filter(Boolean))};var MJ={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"}},UJ=F("es");var f=(G)=>()=>MJ[UJ()][G]||G;var m=(G)=>{let{class:Y,value:K,type:W="text",icon:Q,oninput:q,placeholder:X,disabled:Z,size:L,validate:B,...R}=G,z=W==="password",C=F(!1),M=F(null),A={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]"},U=Q?H(Q):A[W]?H(A[W]):null,S=()=>H(C()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),h=U?"pl-10":"",a=z?"pr-10":"",p=()=>{if(Y?.includes("input-xs"))return"btn-xs";if(Y?.includes("input-sm"))return"btn-sm";if(Y?.includes("input-lg"))return"btn-lg";return"btn-md"},c=(V)=>{let j=V.target.value;if(B){let v=B(j);M(v||null)}q?.(V)},$=()=>M()&&M()!=="",D=J("input",{...R,type:()=>z?C()?"text":"password":W,placeholder:X||" ",class:()=>{let V=`input w-full ${h} ${a}`;if(Y)V+=` ${Y}`;if($())V+=" input-error";return V.trim()},value:K,oninput:c,disabled:()=>_(Z),"aria-invalid":()=>$()?"true":"false"});return J("div",{class:"relative w-full"},()=>[D,U?J("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},U):null,z?J("button",{type:"button",class:P("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",p()),onclick:(V)=>{V.preventDefault(),C(!C())}},()=>S()):null,J("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>$()?M():null)])};var DJ=(G)=>{let{class:Y,items:K=[],value:W,onSelect:Q,label:q,placeholder:X,...Z}=G,L=F(_(W)||""),B=F(!1),R=F(-1),z=F(()=>{let A=L().toLowerCase(),U=_(K)||[];return A?U.filter((S)=>(typeof S==="string"?S:S.label).toLowerCase().includes(A)):U}),C=(A)=>{let U=typeof A==="string"?A:A.value,S=typeof A==="string"?A:A.label;if(L(S),typeof W==="function")W(U);Q?.(A),B(!1),R(-1)},M=(A)=>{let U=z();if(A.key==="ArrowDown")A.preventDefault(),B(!0),R(Math.min(R()+1,U.length-1));else if(A.key==="ArrowUp")A.preventDefault(),R(Math.max(R()-1,0));else if(A.key==="Enter"&&R()>=0)A.preventDefault(),C(U[R()]);else if(A.key==="Escape")B(!1)};return J("div",{class:"relative w-full"},[m({label:q,class:Y,placeholder:X||f("search")(),value:L,onfocus:()=>B(!0),onblur:()=>setTimeout(()=>B(!1),150),onkeydown:M,oninput:(A)=>{let U=A.target.value;if(L(U),typeof W==="function")W(U);B(!0),R(-1)},...Z}),J("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:()=>B()&&z().length?"display:block":"display:none"},[N(z,(A,U)=>J("li",{},[J("a",{class:()=>`block w-full ${R()===U?"active bg-primary text-primary-content":""}`,onclick:()=>C(A),onmouseenter:()=>R(U)},typeof A==="string"?A:A.label)]),(A,U)=>(typeof A==="string"?A:A.value)+U),()=>z().length?null:J("li",{class:"p-2 text-center opacity-50"},f("nodata")())])])};var FJ=(G,Y)=>{let{class:K,...W}=G;return J("span",{...W,class:P("badge",K)},Y)};var d=(G,Y)=>{let{class:K,loading:W,icon:Q,...q}=G,X=H(Q);return J("button",{...q,class:P("btn",K),disabled:()=>_(W)||_(G.disabled)},()=>[_(W)&&J("span",{class:"loading loading-spinner"}),X,Y].filter(Boolean))};var HJ=(G)=>{let{class:Y,value:K,tooltip:W,toggle:Q,label:q,...X}=G,Z=J("input",{...X,type:"checkbox",class:()=>P(_(Q)?"toggle":"checkbox",Y),checked:K}),L=J("label",{class:"label cursor-pointer justify-start gap-3"},[Z,q?J("span",{class:"label-text"},q):null]);return W?J("div",{class:"tooltip","data-tip":W},L):L};var VJ=(G)=>{let{class:Y,value:K,label:W,...Q}=G,q=F(!1),X=["#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"],Z=()=>_(K)||"#000000";return J("div",{class:P("relative w-fit",Y)},[J("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:(L)=>{L.stopPropagation(),q(!q())},...Q},[J("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${Z()}`}),W?J("span",{class:"opacity-80"},W):null]),E(q,()=>J("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:(L)=>L.stopPropagation()},[J("div",{class:"grid grid-cols-8 gap-1"},X.map((L)=>J("button",{type:"button",style:`background-color: ${L}`,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 + ${Z().toLowerCase()===L.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof K==="function")K(L);q(!1)}})))])),E(q,()=>J("div",{class:"fixed inset-0 z-[100]",onclick:()=>q(!1)}))])};var SJ=(G)=>{let{class:Y,value:K,range:W,label:Q,placeholder:q,hour:X=!1,...Z}=G,L=F(!1),B=F(new Date),R=F(null),z=F(0),C=F(0),M=()=>_(W)===!0,A=new Date,U=`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,S=(T)=>{let D=T.getFullYear(),V=String(T.getMonth()+1).padStart(2,"0"),j=String(T.getDate()).padStart(2,"0");return`${D}-${V}-${j}`},h=(T)=>{let D=S(T),V=_(K);if(M())if(!V?.start||V.start&&V.end){if(typeof K==="function")K({start:D,end:null,...X&&{startHour:z()}})}else{let j=V.start;if(typeof K==="function"){let v=D{let T=_(K);if(!T)return"";if(typeof T==="string"){if(X&&T.includes("T"))return T.replace("T"," ");return T}if(T.start&&T.end){let D=X&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start,V=X&&T.endHour?`${T.end} ${String(T.endHour).padStart(2,"0")}:00`:T.end;return`${D} - ${V}`}if(T.start)return`${X&&T.startHour?`${T.start} ${String(T.startHour).padStart(2,"0")}:00`:T.start}...`;return""}),p=(T)=>{let D=B();B(new Date(D.getFullYear(),D.getMonth()+T,1))},c=(T)=>{let D=B();B(new Date(D.getFullYear()+T,D.getMonth(),1))},$=({value:T,onChange:D})=>{return J("div",{class:"flex-1"},[J("div",{class:"flex gap-2 items-center"},[J("input",{type:"range",min:0,max:23,value:T,class:"range range-xs flex-1",oninput:(V)=>{let j=parseInt(V.target.value);D(j)}}),J("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(_(T)).padStart(2,"0")+":00")])])};return J("div",{class:P("relative w-full",Y)},[m({label:Q,placeholder:q||(M()?"Seleccionar rango...":"Seleccionar fecha..."),value:a,readonly:!0,icon:H("icon-[lucide--calendar]"),onclick:(T)=>{T.stopPropagation(),L(!L())},...Z}),E(L,()=>J("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()},[J("div",{class:"flex justify-between items-center mb-4 gap-1"},[J("div",{class:"flex gap-0.5"},[J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>c(-1)},H("icon-[lucide--chevrons-left]")),J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>p(-1)},H("icon-[lucide--chevron-left]"))]),J("span",{class:"font-bold uppercase flex-1 text-center"},[()=>B().toLocaleString("es-ES",{month:"short",year:"numeric"})]),J("div",{class:"flex gap-0.5"},[J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>p(1)},H("icon-[lucide--chevron-right]")),J("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>c(1)},H("icon-[lucide--chevrons-right]"))])]),J("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>R(null)},[...["L","M","X","J","V","S","D"].map((T)=>J("div",{class:"text-[10px] opacity-40 font-bold text-center"},T)),()=>{let T=B(),D=T.getFullYear(),V=T.getMonth(),j=new Date(D,V,1).getDay(),v=j===0?6:j-1,YJ=new Date(D,V+1,0).getDate(),l=[];for(let b=0;b{let w=_(K),s=R(),QJ=typeof w==="string"?w.split("T")[0]===I:w?.start===I,LJ=w?.end===I,o=!1;if(M()&&w?.start){let r=w.start;if(!w.end&&s)o=I>r&&I<=s||I=s;else if(w.end)o=I>r&&I{if(M())R(I)},onclick:()=>h(XJ)},[b.toString()]))}return l}]),X?J("div",{class:"mt-3 pt-2 border-t border-base-300"},[M()?J("div",{class:"flex gap-4"},[$({value:z,onChange:(T)=>{z(T);let D=_(K);if(D?.start)K({...D,startHour:T})}}),$({value:C,onChange:(T)=>{C(T);let D=_(K);if(D?.end)K({...D,endHour:T})}})]):$({value:z,onChange:(T)=>{z(T);let D=_(K);if(D&&typeof D==="string"&&D.includes("-"))K(D.split("T")[0]+"T"+String(T).padStart(2,"0")+":00:00")}})]):null])),E(L,()=>J("div",{class:"fixed inset-0 z-[90]",onclick:()=>L(!1)}))])};var EJ=(G,Y)=>{let{class:K,id:W,open:Q,side:q,content:X,...Z}=G,L=W||`drawer-${Math.random().toString(36).slice(2,9)}`;return J("div",{...Z,class:P("drawer",K)},[J("input",{id:L,type:"checkbox",class:"drawer-toggle",checked:()=>typeof Q==="function"?Q():Q,onchange:(B)=>{if(typeof Q==="function")Q(B.target.checked)}}),J("div",{class:"drawer-content"},[typeof X==="function"?X():X]),J("div",{class:"drawer-side"},[J("label",{for:L,class:"drawer-overlay",onclick:()=>{if(typeof Q==="function")Q(!1)}}),J("div",{class:"min-h-full bg-base-200 w-80"},[typeof q==="function"?q():q])])])};var x=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(G)=>{if(x&&!x.contains(G.target))x.open=!1,x=null}),window.__dropdownHandlerRegistered=!0;var NJ=(G)=>{let{class:Y,label:K,icon:W,items:Q,...q}=G;return $html("details",{...q,class:P("dropdown",Y)},[$html("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(X)=>{let Z=X.currentTarget.closest("details");if(x&&x!==Z)x.open=!1;setTimeout(()=>{x=Z.open?Z:null},0)}},[()=>W?typeof W==="function"?W():W:null,()=>K?typeof K==="function"?K():K: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 Q==="function"?Q():Q||[]).map((Z)=>$html("li",{},[$html("a",{class:Z.class||"",onclick:(L)=>{if(Z.onclick)Z.onclick(L);let B=L.currentTarget.closest("details");if(B){if(B.open=!1,x===B)x=null}}},[Z.icon?$html("span",{},Z.icon):null,$html("span",{},Z.label)])]))}])])};var OJ=(G)=>{let{class:Y,icon:K,label:W,actions:Q=[],position:q="bottom-6 right-6",...X}=G;return J("div",{...X,class:P(`fab absolute ${q} flex flex-col-reverse items-end gap-3 z-[100]`,Y)},[J("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[K?H(K):null,!K&&W?W:null]),..._(Q).map((Z)=>J("div",{class:"flex items-center gap-3 transition-all duration-300"},[Z.label?J("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},Z.label):null,J("button",{type:"button",class:`btn btn-circle shadow-lg ${Z.class||""}`,onclick:(L)=>{L.stopPropagation(),Z.onclick?.(L)}},[Z.icon?H(Z.icon):Z.text||""])]))])};var jJ=(G,Y)=>{let{class:K,legend:W,...Q}=G;return J("fieldset",{...Q,class:P("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",K)},[()=>{let q=_(W);return q?J("legend",{class:"fieldset-legend font-bold"},[q]):null},Y])};var IJ=(G)=>{let{class:Y,tooltip:K,max:W=2,accept:Q="*",onSelect:q,...X}=G,Z=F([]),L=F(!1),B=F(null),R=W*1024*1024,z=(M)=>{let A=Array.from(M);if(B(null),A.find((S)=>S.size>R)){B(`Máx ${W}MB`);return}Z([...Z(),...A]),q?.(Z())},C=(M)=>{let A=Z().filter((U,S)=>S!==M);Z(A),q?.(A)};return J("fieldset",{...X,class:P("fieldset w-full p-0",Y)},[J("div",{class:()=>`w-full ${K?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":K},[J("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:(R)=>{R.preventDefault(),Q(!0)},ondragleave:()=>Q(!1),ondrop:(R)=>{R.preventDefault(),Q(!1),T(R.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:(R)=>T(R.target.files)})])]),()=>B()?M("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},B()):null,N(()=>W().length>0,()=>M("ul",{class:"mt-2 space-y-1"},[O(W,(R,A)=>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]"},R.name),M("span",{class:"text-[9px] opacity-40"},`(${(R.size/1024).toFixed(0)} KB)`)]),M("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(D)=>{D.preventDefault(),D.stopPropagation(),P(A)}},[V("icon-[lucide--x]")])]),(R)=>R.name+R.lastModified)]))])};var fM={};U(fM,{Indicator:()=>wM});var wM=(Z,K)=>{let{value:G,class:J,...Y}=Z;return M("div",{...Y,class:"indicator"},()=>[G?M("span",{class:_("indicator-item badge",J)},()=>typeof G==="function"?G():G):null,K].filter(Boolean))};var $M={};U($M,{Label:()=>yM});var yM=(Z)=>{let{children:K,value:G,floating:J=!1,error:Y,required:L,class:X,...W}=Z;if(J)return M("label",{class:_("floating-label w-full",X),...W},()=>[G?M("span",{},G):null,K,Y?M("span",{class:"text-error text-xs"},q(Y)):null]);return M("label",{class:_("input w-full",X),...W},()=>[G?M("span",{class:"label"},G):null,K,Y?M("span",{class:"text-error text-xs"},q(Y)):null])};var bM={};U(bM,{List:()=>vM});var vM=(Z)=>{let{class:K,items:G,header:J,render:Y,keyFn:L=(Q,B)=>Q.id??B,...X}=Z,W=O(G,(Q,B)=>M("li",{class:"list-row"},[Y(Q,B)]),L);return M("ul",{...X,class:_("list bg-base-100 rounded-box shadow-md",K)},J?[N(J,()=>M("li",{class:"p-4 pb-2 text-xs opacity-60"},[q(J)])),W]:W)};var hM={};U(hM,{Menu:()=>gM});var gM=(Z)=>{let{class:K,items:G,...J}=Z,Y=(L)=>O(()=>L||[],(X)=>M("li",{},[X.children?M("details",{open:X.open},[M("summary",{},[X.icon&&M("span",{class:"mr-2"},X.icon),X.label]),M("ul",{},Y(X.children))]):M("a",{class:()=>q(X.active)?"active":"",onclick:X.onclick},[X.icon&&M("span",{class:"mr-2"},X.icon),X.label])]),(X,W)=>X.label||W);return M("ul",{...J,class:_("menu bg-base-200 rounded-box",K)},Y(G))};var uM={};U(uM,{Modal:()=>mM});var mM=(Z,K)=>{let{class:G,title:J,buttons:Y,open:L,...X}=Z,W=null,Q=()=>{let z=typeof L==="function"?L():L;if(!W)return;if(z){if(!W.open)W.showModal()}else if(W.open)W.close()};w(()=>Q());let B=()=>{if(typeof L==="function")L(!1)};return M("dialog",{...X,ref:(z)=>{if(W=z,z)Q()},class:_("modal",G),onclose:B,oncancel:B},[M("div",{class:"modal-box"},[J?M("h3",{class:"text-lg font-bold mb-4"},()=>typeof J==="function"?J():J):null,M("div",{class:"py-2"},[typeof K==="function"?K():K]),M("div",{class:"modal-action"},[M("form",{method:"dialog",class:"flex gap-2"},[...(Array.isArray(Y)?Y:[Y]).filter(Boolean),u({type:"submit"},k("close")())])])]),M("form",{method:"dialog",class:"modal-backdrop"},[M("button",{},"close")])])};var pM={};U(pM,{Navbar:()=>dM});var dM=(Z,K)=>{let{class:G,...J}=Z;return M("div",{...J,class:_("navbar bg-base-100 shadow-sm px-4",G)},K)};var oM={};U(oM,{Radio:()=>cM});var cM=(Z)=>{let{class:K,label:G,tooltip:J,value:Y,inputValue:L,name:X,...W}=Z,Q=M("input",{...W,type:"radio",name:X,class:_("radio",K),checked:()=>q(Y)===L,onclick:()=>{if(typeof Y==="function")Y(L)}});if(!G&&!J)return Q;let B=M("label",{class:"label cursor-pointer justify-start gap-3"},[Q,G?M("span",{class:"label-text"},G):null]);return J?M("div",{class:"tooltip","data-tip":J},B):B};var rM={};U(rM,{Range:()=>iM});var iM=(Z)=>{let{class:K,label:G,tooltip:J,value:Y,...L}=Z,X=M("input",{...L,type:"range",class:_("range",K),value:Y,disabled:()=>q(Z.disabled)});if(!G&&!J)return X;let W=M("div",{class:"flex flex-col gap-2"},[G?M("span",{class:"label-text"},G):null,X]);return J?M("div",{class:"tooltip","data-tip":J},W):W};var lM={};U(lM,{Rating:()=>aM});var aM=(Z)=>{let{class:K,value:G,count:J=5,mask:Y="mask-star",readonly:L=!1,onchange:X,...W}=Z,Q=`rating-${Math.random().toString(36).slice(2,7)}`;return M("div",{...W,class:()=>_(`rating ${q(L)?"pointer-events-none":""}`,K)},Array.from({length:q(J)},(B,z)=>{let T=z+1;return M("input",{type:"radio",name:Q,class:`mask ${Y}`,checked:()=>Math.round(q(G))===T,onchange:()=>{if(!q(L)){if(typeof X==="function")X(T);else if(typeof G==="function")G(T)}}})}))};var sM={};U(sM,{Select:()=>nM});var nM=(Z)=>{let{class:K,label:G,items:J,value:Y,...L}=Z,X=M("select",{...L,class:_("select select-bordered w-full",K),value:Y},O(()=>q(J)||[],(W)=>M("option",{value:W.value,$selected:()=>String(q(Y))===String(W.value)},W.label),(W)=>W.value));if(!G)return X;return M("label",{class:"fieldset-label flex flex-col gap-1"},[M("span",{},G),X])};var eM={};U(eM,{Stack:()=>tM});var tM=(Z,K)=>{let{class:G,...J}=Z;return M("div",{...J,class:_("stack",G)},K)};var JJ={};U(JJ,{Stat:()=>MJ});var MJ=(Z)=>{let{class:K,icon:G,label:J,value:Y,desc:L,...X}=Z;return M("div",{...X,class:_("stat",K)},[G&&M("div",{class:"stat-figure text-secondary"},G),J&&M("div",{class:"stat-title"},J),M("div",{class:"stat-value"},()=>q(Y)??Y),L&&M("div",{class:"stat-desc"},L)])};var ZJ={};U(ZJ,{Swap:()=>WJ});var WJ=(Z)=>{let{class:K,value:G,on:J,off:Y,...L}=Z;return M("label",{...L,class:_("swap",K)},[M("input",{type:"checkbox",checked:()=>q(G),onclick:(X)=>{if(typeof G==="function")G(X.target.checked)}}),M("div",{class:"swap-on"},J),M("div",{class:"swap-off"},Y)])};var GJ={};U(GJ,{Table:()=>XJ});var XJ=(Z)=>{let{class:K,items:G=[],columns:J=[],keyFn:Y,zebra:L=!1,pinRows:X=!1,empty:W=k("nodata")(),...Q}=Z,B=()=>{let T=q(L)?"table-zebra":"",P=q(X)?"table-pin-rows":"";return _("table",K,T,P)},z=Y||((T,P)=>T.id||P);return M("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[M("table",{...Q,class:B},[M("thead",{},[M("tr",{},J.map((T)=>M("th",{class:T.class||""},T.label)))]),M("tbody",{},[O(G,(T,P)=>{let R=()=>{let A=q(G),D=z(T,P);return A.find((E,d)=>z(E,d)===D)||T};return M("tr",{class:"hover"},J.map((A)=>{let D=()=>{let E=R();if(A.render)return A.render(E,P);return q(E[A.key])};return M("td",{class:A.class||""},[D])}))},z),N(()=>q(G).length===0,()=>M("tr",{},[M("td",{colspan:J.length,class:"text-center p-10 opacity-50"},[q(W)])]))])])])};var YJ={};U(YJ,{Tabs:()=>KJ});var KJ=(Z)=>{let{items:K,class:G,...J}=Z,Y=typeof K==="function"?K:()=>K||[],L=H(0);return $watch(()=>{let X=Y().findIndex((W)=>q(W.active)===!0);if(X!==-1&&X!==L())L(X)}),M("div",{...J,class:"w-full"},[M("div",{role:"tablist",class:_("tabs",G||"tabs-box")},()=>{return Y().map((W,Q)=>{let B=()=>L()===Q,z=M("button",{role:"tab",class:()=>_("tab",B()?"tab-active":""),onclick:(T)=>{if(T.preventDefault(),!q(W.disabled)){if(W.onclick)W.onclick();L(Q)}}});return $watch(()=>{let T=q(W.label);if(T instanceof Node)z.replaceChildren(T);else z.textContent=String(T)}),z})}),M("div",{class:"tab-panels"},()=>{return Y().map((X,W)=>{let Q=()=>L()===W;return M("div",{role:"tabpanel",class:"tab-content bg-base-100 border-base-300 p-6",style:()=>Q()?"display: block":"display: none"},[()=>typeof X.content==="function"?X.content():X.content])})})])};var LJ={};U(LJ,{Timeline:()=>QJ});var QJ=(Z)=>{let{class:K,items:G=[],vertical:J=!0,compact:Y=!1,...L}=Z,X={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return M("ul",{...L,class:()=>_(`timeline ${q(J)?"timeline-vertical":"timeline-horizontal"} ${q(Y)?"timeline-compact":""}`,K)},()=>{let W=(typeof G==="function"?G():G)||[];return W.map((Q,B)=>{let z=B===0,T=B===W.length-1,P=Q.type||"success",R=()=>q(Q.completed),A=()=>B>0&&q(W[B-1].completed),D=(E)=>typeof E==="function"?E():E;return M("li",{class:"flex-1"},[!z?M("hr",{class:()=>A()?"bg-primary":""}):null,M("div",{class:"timeline-start"},[()=>D(Q.title)]),M("div",{class:"timeline-middle"},[()=>Q.icon?V(Q.icon):V(X[P]||X.success)]),M("div",{class:"timeline-end timeline-box shadow-sm"},[()=>D(Q.detail)]),!T?M("hr",{class:()=>R()?"bg-primary":""}):null])})})};var qJ={};U(qJ,{Toast:()=>BJ});var BJ=(Z,K="alert-success",G=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,X=()=>{clearTimeout(L);let B=Y.firstElementChild;if(B&&!B.classList.contains("opacity-0"))B.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(Q.destroy(),Y.remove(),!J.hasChildNodes())J.remove()},300);else Q.destroy(),Y.remove()},Q=GM(()=>{let B=V("icon-[lucide--x]"),z=M("div",{class:`alert alert-soft ${K} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[M("span",{},[typeof Z==="function"?Z():Z]),u({class:"btn-xs btn-circle btn-ghost",onclick:X},B)]);return requestAnimationFrame(()=>z.classList.remove("translate-x-10","opacity-0")),z},Y);if(G>0)L=setTimeout(X,G);return X};var _J={};U(_J,{Tooltip:()=>AJ});var AJ=(Z,K)=>M("div",{...Z,class:()=>_("tooltip",Z.ui,Z.class),"data-tip":Z.tip},K);var zJ={...YM,...LM,...AM,...PM,...TM,...zM,...DM,...UM,...VM,...EM,...OM,...IM,...kM,...fM,...BM,...$M,...bM,...hM,...uM,...pM,...oM,...rM,...lM,...sM,...eM,...JJ,...ZJ,...GJ,...YJ,...LJ,...qJ,..._J},IJ={...zJ,install:(Z=window)=>{Object.entries(zJ).forEach(([K,G])=>{Z[K]=G}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(l).forEach(([Z,K])=>{window[Z]=K}),window.Utils=a,window.tt=k,window.SigProUI={...l,Utils:a,tt:k},console.log("\uD83C\uDFA8 SigProUI ready");})(); + ${L()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} + `,ondragover:(M)=>{M.preventDefault(),L(!0)},ondragleave:()=>L(!1),ondrop:(M)=>{M.preventDefault(),L(!1),z(M.dataTransfer.files)}},[J("div",{class:"flex items-center gap-3 w-full"},[H("icon-[lucide--upload]"),J("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),J("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${W}MB`)]),J("input",{type:"file",multiple:!0,accept:Q,class:"hidden",onchange:(M)=>z(M.target.files)})])]),()=>B()?J("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},B()):null,E(()=>Z().length>0,()=>J("ul",{class:"mt-2 space-y-1"},[N(Z,(M,A)=>J("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[J("div",{class:"flex items-center gap-2 truncate"},[J("span",{class:"opacity-50"},"\uD83D\uDCC4"),J("span",{class:"truncate font-medium max-w-[200px]"},M.name),J("span",{class:"text-[9px] opacity-40"},`(${(M.size/1024).toFixed(0)} KB)`)]),J("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(U)=>{U.preventDefault(),U.stopPropagation(),C(A)}},[H("icon-[lucide--x]")])]),(M)=>M.name+M.lastModified)]))])};var kJ=(G,Y)=>{let{value:K,class:W,...Q}=G;return J("div",{...Q,class:"indicator"},()=>[K?J("span",{class:P("indicator-item badge",W)},()=>typeof K==="function"?K():K):null,Y].filter(Boolean))};var xJ=(G)=>{let{children:Y,value:K,floating:W=!1,error:Q,required:q,class:X,...Z}=G;if(W)return J("label",{class:P("floating-label w-full",X),...Z},()=>[K?J("span",{},K):null,Y,Q?J("span",{class:"text-error text-xs"},_(Q)):null]);return J("label",{class:P("input w-full",X),...Z},()=>[K?J("span",{class:"label"},K):null,Y,Q?J("span",{class:"text-error text-xs"},_(Q)):null])};var wJ=(G)=>{let{class:Y,items:K,header:W,render:Q,keyFn:q=(L,B)=>L.id??B,...X}=G,Z=N(K,(L,B)=>J("li",{class:"list-row"},[Q(L,B)]),q);return J("ul",{...X,class:P("list bg-base-100 rounded-box shadow-md",Y)},W?[E(W,()=>J("li",{class:"p-4 pb-2 text-xs opacity-60"},[_(W)])),Z]:Z)};var yJ=(G)=>{let{class:Y,items:K,...W}=G,Q=(q)=>N(()=>q||[],(X)=>J("li",{},[X.children?J("details",{open:X.open},[J("summary",{},[X.icon&&J("span",{class:"mr-2"},X.icon),X.label]),J("ul",{},Q(X.children))]):J("a",{class:()=>_(X.active)?"active":"",onclick:X.onclick},[X.icon&&J("span",{class:"mr-2"},X.icon),X.label])]),(X,Z)=>X.label||Z);return J("ul",{...W,class:P("menu bg-base-200 rounded-box",Y)},Q(K))};var fJ=(G,Y)=>{let{class:K,title:W,buttons:Q,open:q,...X}=G,Z=null,L=()=>{let R=typeof q==="function"?q():q;if(!Z)return;if(R){if(!Z.open)Z.showModal()}else if(Z.open)Z.close()};k(()=>L());let B=()=>{if(typeof q==="function")q(!1)};return J("dialog",{...X,ref:(R)=>{if(Z=R,R)L()},class:P("modal",K),onclose:B,oncancel:B},[J("div",{class:"modal-box"},[W?J("h3",{class:"text-lg font-bold mb-4"},()=>typeof W==="function"?W():W):null,J("div",{class:"py-2"},[typeof Y==="function"?Y():Y]),J("div",{class:"modal-action"},[J("form",{method:"dialog",class:"flex gap-2"},[...(Array.isArray(Q)?Q:[Q]).filter(Boolean),d({type:"submit"},f("close")())])])]),J("form",{method:"dialog",class:"modal-backdrop"},[J("button",{},"close")])])};var $J=(G,Y)=>{let{class:K,...W}=G;return J("div",{...W,class:P("navbar bg-base-100 shadow-sm px-4",K)},Y)};var vJ=(G)=>{let{class:Y,label:K,tooltip:W,value:Q,inputValue:q,name:X,...Z}=G,L=J("input",{...Z,type:"radio",name:X,class:P("radio",Y),checked:()=>_(Q)===q,onclick:()=>{if(typeof Q==="function")Q(q)}});if(!K&&!W)return L;let B=J("label",{class:"label cursor-pointer justify-start gap-3"},[L,K?J("span",{class:"label-text"},K):null]);return W?J("div",{class:"tooltip","data-tip":W},B):B};var bJ=(G)=>{let{class:Y,label:K,tooltip:W,value:Q,...q}=G,X=J("input",{...q,type:"range",class:P("range",Y),value:Q,disabled:()=>_(G.disabled)});if(!K&&!W)return X;let Z=J("div",{class:"flex flex-col gap-2"},[K?J("span",{class:"label-text"},K):null,X]);return W?J("div",{class:"tooltip","data-tip":W},Z):Z};var gJ=(G)=>{let{class:Y,value:K,count:W=5,mask:Q="mask-star",readonly:q=!1,onchange:X,...Z}=G,L=`rating-${Math.random().toString(36).slice(2,7)}`;return J("div",{...Z,class:()=>P(`rating ${_(q)?"pointer-events-none":""}`,Y)},Array.from({length:_(W)},(B,R)=>{let z=R+1;return J("input",{type:"radio",name:L,class:`mask ${Q}`,checked:()=>Math.round(_(K))===z,onchange:()=>{if(!_(q)){if(typeof X==="function")X(z);else if(typeof K==="function")K(z)}}})}))};var hJ=(G)=>{let{class:Y,label:K,items:W,value:Q,...q}=G,X=J("select",{...q,class:P("select select-bordered w-full",Y),value:Q},N(()=>_(W)||[],(Z)=>J("option",{value:Z.value,$selected:()=>String(_(Q))===String(Z.value)},Z.label),(Z)=>Z.value));if(!K)return X;return J("label",{class:"fieldset-label flex flex-col gap-1"},[J("span",{},K),X])};var uJ=(G,Y)=>{let{class:K,...W}=G;return J("div",{...W,class:P("stack",K)},Y)};var mJ=(G)=>{let{class:Y,icon:K,label:W,value:Q,desc:q,...X}=G;return J("div",{...X,class:P("stat",Y)},[K&&J("div",{class:"stat-figure text-secondary"},K),W&&J("div",{class:"stat-title"},W),J("div",{class:"stat-value"},()=>_(Q)??Q),q&&J("div",{class:"stat-desc"},q)])};var dJ=(G)=>{let{class:Y,value:K,on:W,off:Q,...q}=G;return J("label",{...q,class:P("swap",Y)},[J("input",{type:"checkbox",checked:()=>_(K),onclick:(X)=>{if(typeof K==="function")K(X.target.checked)}}),J("div",{class:"swap-on"},W),J("div",{class:"swap-off"},Q)])};var pJ=(G)=>{let{class:Y,items:K=[],columns:W=[],keyFn:Q,zebra:q=!1,pinRows:X=!1,empty:Z=f("nodata")(),...L}=G,B=()=>{let z=_(q)?"table-zebra":"",C=_(X)?"table-pin-rows":"";return P("table",Y,z,C)},R=Q||((z,C)=>z.id||C);return J("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[J("table",{...L,class:B},[J("thead",{},[J("tr",{},W.map((z)=>J("th",{class:z.class||""},z.label)))]),J("tbody",{},[N(K,(z,C)=>{let M=()=>{let A=_(K),U=R(z,C);return A.find((S,h)=>R(S,h)===U)||z};return J("tr",{class:"hover"},W.map((A)=>{let U=()=>{let S=M();if(A.render)return A.render(S,C);return _(S[A.key])};return J("td",{class:A.class||""},[U])}))},R),E(()=>_(K).length===0,()=>J("tr",{},[J("td",{colspan:W.length,class:"text-center p-10 opacity-50"},[_(Z)])]))])])])};var cJ=(G)=>{let{items:Y,class:K,...W}=G,Q=typeof Y==="function"?Y:()=>Y||[],q=F(0);return $watch(()=>{let X=Q().findIndex((Z)=>_(Z.active)===!0);if(X!==-1&&X!==q())q(X)}),J("div",{...W,class:"w-full"},[J("div",{role:"tablist",class:P("tabs",K||"tabs-box")},()=>{return Q().map((Z,L)=>{let B=()=>q()===L,R=J("button",{role:"tab",class:()=>P("tab",B()?"tab-active":""),onclick:(z)=>{if(z.preventDefault(),!_(Z.disabled)){if(Z.onclick)Z.onclick();q(L)}}});return $watch(()=>{let z=_(Z.label);if(z instanceof Node)R.replaceChildren(z);else R.textContent=String(z)}),R})}),J("div",{class:"tab-panels"},()=>{return Q().map((X,Z)=>{let L=()=>q()===Z;return J("div",{role:"tabpanel",class:"tab-content bg-base-100 border-base-300 p-6",style:()=>L()?"display: block":"display: none"},[()=>typeof X.content==="function"?X.content():X.content])})})])};var iJ=(G)=>{let{class:Y,items:K=[],vertical:W=!0,compact:Q=!1,...q}=G,X={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return J("ul",{...q,class:()=>P(`timeline ${_(W)?"timeline-vertical":"timeline-horizontal"} ${_(Q)?"timeline-compact":""}`,Y)},()=>{let Z=(typeof K==="function"?K():K)||[];return Z.map((L,B)=>{let R=B===0,z=B===Z.length-1,C=L.type||"success",M=()=>_(L.completed),A=()=>B>0&&_(Z[B-1].completed),U=(S)=>typeof S==="function"?S():S;return J("li",{class:"flex-1"},[!R?J("hr",{class:()=>A()?"bg-primary":""}):null,J("div",{class:"timeline-start"},[()=>U(L.title)]),J("div",{class:"timeline-middle"},[()=>L.icon?H(L.icon):H(X[C]||X.success)]),J("div",{class:"timeline-end timeline-box shadow-sm"},[()=>U(L.detail)]),!z?J("hr",{class:()=>M()?"bg-primary":""}):null])})})};var nJ=(G,Y="alert-success",K=3500)=>{let W=document.getElementById("sigpro-toast-container");if(!W)W=J("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(W);let Q=J("div",{style:"display: contents"});W.appendChild(Q);let q,X=()=>{clearTimeout(q);let B=Q.firstElementChild;if(B&&!B.classList.contains("opacity-0"))B.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(L.destroy(),Q.remove(),!W.hasChildNodes())W.remove()},300);else L.destroy(),Q.remove()},L=ZJ(()=>{let B=H("icon-[lucide--x]"),R=J("div",{class:`alert alert-soft ${Y} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[J("span",{},[typeof G==="function"?G():G]),d({class:"btn-xs btn-circle btn-ghost",onclick:X},B)]);return requestAnimationFrame(()=>R.classList.remove("translate-x-10","opacity-0")),R},Q);if(K>0)q=setTimeout(X,K);return X};var aJ=(G,Y)=>J("div",{...G,class:()=>P("tooltip",G.ui,G.class),"data-tip":G.tip},Y);})(); diff --git a/index.js b/index.js index 03ed591..73391b0 100644 --- a/index.js +++ b/index.js @@ -1,25 +1,10 @@ // index.js -import './src/sigpro.js'; -// import './src/css/sigpro.css'; // No importes CSS en JS +import './src/sigpro.js'; // El Core import * as Components from './src/components/index.js'; -// import * as Icons from './src/core/icons.js'; // ELIMINAR import * as Utils from './src/core/utils.js'; import { tt } from './src/core/i18n.js'; +// Exportamos todo para que el Tree Shaking funcione export * from './src/components/index.js'; -// export * from './src/core/icons.js'; // ELIMINAR export * from './src/core/utils.js'; -export { tt }; - -if (typeof window !== 'undefined') { - Object.entries(Components).forEach(([name, component]) => { - window[name] = component; - }); - - // window.Icons = Icons; // ELIMINAR - window.Utils = Utils; - window.tt = tt; - window.SigProUI = { ...Components, Utils, tt }; - - console.log("🎨 SigProUI ready"); -} \ No newline at end of file +export { tt }; \ No newline at end of file diff --git a/package.json b/package.json index 828eb51..185f50b 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ }, "exports": { ".": { - "import": "./index.js", + "import": "./dist/sigpro-ui.esm.js", "script": "./dist/sigpro-ui.js", "types": "./index.d.ts" }, @@ -39,13 +39,20 @@ ], "jsdelivr": "./dist/sigpro-ui.min.js", "license": "MIT", + "sideEffects": [ + "./css/*", + "**/*.css" + ], "scripts": { - "build:cssmin": "./node_modules/.bin/tailwindcss -i ./src/css/sigpro.css -o ./css/sigpro.min.css --content './src/**/*.js' --minify", - "build:css": "./node_modules/.bin/tailwindcss -i ./src/css/sigpro.css -o ./css/sigpro.css --content './src/**/*.js'", - "build:cssdocs": "./node_modules/.bin/tailwindcss -i ./src/css/sigpro.css -o ./docs/sigpro.css --content './src/**/*.js' --minify", - "build:js": "bun build ./index.js --bundle --outfile=./dist/sigpro-ui.js --format=iife --global-name=SigProUI && bun build ./index.js --bundle --outfile=./dist/sigpro-ui.min.js --format=iife --global-name=SigProUI --minify", + "clean": "rm -rf ./dist ./css/*.css ./docs/*.js ./docs/*.css", + "build:cssmin": "tailwindcss -i ./src/css/sigpro.css -o ./css/sigpro.min.css --content './src/**/*.js' --minify", + "build:css": "tailwindcss -i ./src/css/sigpro.css -o ./css/sigpro.css --content './src/**/*.js'", + "build:cssdocs": "tailwindcss -i ./src/css/sigpro.css -o ./docs/sigpro.css --content './src/**/*.js' --minify", + "build:js": "bun run build:js:iife && bun run build:js:esm", + "build:js:iife": "bun build ./index.js --bundle --outfile=./dist/sigpro-ui.js --format=iife --global-name=SigProUI && bun build ./index.js --bundle --outfile=./dist/sigpro-ui.min.js --format=iife --global-name=SigProUI --minify", + "build:js:esm": "bun build ./index.js --bundle --outfile=./dist/sigpro-ui.esm.js --format=esm && bun build ./index.js --bundle --outfile=./dist/sigpro-ui.esm.min.js --format=esm --minify", "build:jsdocs": "bun build ./index.js --bundle --outfile=./docs/sigpro-ui.min.js --format=iife --global-name=SigProUI --minify", - "build": "bun run build:css && bun run build:js && bun run build:jsdocs && bun run build:cssdocs && bun run build:cssmin", + "build": "bun run clean && bun run build:css && bun run build:js && bun run build:jsdocs && bun run build:cssdocs && bun run build:cssmin", "prepublishOnly": "bun run build", "docs": "bun x serve docs" }, diff --git a/src/bundle.js b/src/bundle.js new file mode 100644 index 0000000..191e5bf --- /dev/null +++ b/src/bundle.js @@ -0,0 +1,23 @@ +// src/bundle.js +import './sigpro.js'; // Ahora sí, están en la misma carpeta +import * as Components from './components/index.js'; +import * as Utils from './core/utils.js'; +import { tt } from './core/i18n.js'; + +if (typeof window !== 'undefined') { + // Registramos funciones globales: Div(), Input(), tt()... + Object.entries(Components).forEach(([name, component]) => { + window[name] = component; + }); + + window.Utils = Utils; + window.tt = tt; + window.SigProUI = { ...Components, Utils, tt }; + + console.log("🎨 SigProUI (Global Mode) ready"); +} + +// Re-exportamos por compatibilidad +export * from './components/index.js'; +export * from './core/utils.js'; +export { tt }; \ No newline at end of file