var __defProp = Object.defineProperty; var __returnValue = (v) => v; function __exportSetter(name, newValue) { this[name] = __returnValue.bind(null, newValue); } var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true, configurable: true, set: __exportSetter.bind(all, name) }); }; // sigpro-ui.js var exports_sigpro_ui = {}; __export(exports_sigpro_ui, { Tooltip: () => Tooltip, Toggle: () => Toggle, Toast: () => Toast, Timeline: () => Timeline, Textrotate: () => Textrotate, Textarea: () => Textarea, Tabs: () => Tabs, TableItems: () => TableItems, Table: () => Table, SwapToggle: () => SwapToggle, SwapOn: () => SwapOn, SwapOff: () => SwapOff, Swap: () => Swap, Steps: () => Steps, Step: () => Step, Stats: () => Stats, Stat: () => Stat, Stack: () => Stack, SkeletonText: () => SkeletonText, Skeleton: () => Skeleton, Select: () => Select, RatingItems: () => RatingItems, Rating: () => Rating, Range: () => Range, Radio: () => Radio, Radial: () => Radial, Progress: () => Progress, Navbar: () => Navbar, Modal: () => Modal, Menu: () => Menu, Loading: () => Loading, ListRows: () => ListRows, List: () => List, Kbd: () => Kbd, Input: () => Input, Indicator: () => Indicator, Icon: () => Icon, Fileinput: () => Fileinput, Fieldset: () => Fieldset, Fab: () => Fab, DropdownContent: () => DropdownContent, DropdownButton: () => DropdownButton, Dropdown: () => Dropdown, DrawerToggle: () => DrawerToggle, DrawerSide: () => DrawerSide, DrawerOverlay: () => DrawerOverlay, DrawerContent: () => DrawerContent, Drawer: () => Drawer, Divider: () => Divider, Datepicker: () => Datepicker, Colorpicker: () => Colorpicker, ColorPalette: () => ColorPalette, Checkbox: () => Checkbox, ChatImage: () => ChatImage, ChatHeader: () => ChatHeader, ChatFooter: () => ChatFooter, ChatBubble: () => ChatBubble, Chat: () => Chat, CarouselItem: () => CarouselItem, Carousel: () => Carousel, CardTitle: () => CardTitle, CardBody: () => CardBody, CardActions: () => CardActions, Card: () => Card, Calendar: () => Calendar, Button: () => Button, Breadcrumbs: () => Breadcrumbs, Badge: () => Badge, AvatarGroup: () => AvatarGroup, Avatar: () => Avatar, Autocomplete: () => Autocomplete, Alert: () => Alert, Accordion: () => Accordion }); // node_modules/sigpro/dist/sigpro.esm.min.js var w = (e) => typeof e === "function"; var B = (e) => e && typeof e === "object"; var g = Array.isArray; var E = typeof document < "u" ? document : null; var V = (e) => e?._isRuntime ? e.container : e instanceof Node ? e : E.createTextNode(e == null ? "" : String(e)); var d = null; var _ = null; var N = false; var R = 0; var O = new Set; var I = new WeakMap; var j = Symbol("iter"); var k = new WeakMap; var W = "http://www.w3.org/2000/svg"; var M = "http://www.w3.org/1999/xlink"; var q = new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(",")); var b = (e) => { if (!e || e._disposed) return; e._disposed = true; let s = [e]; while (s.length) { let n = s.pop(); if (n._cleanups) n._cleanups.forEach((r) => r()), n._cleanups.clear(); if (n._children) n._children.forEach((r) => s.push(r)), n._children.clear(); if (n._deps) n._deps.forEach((r) => r.delete(n)), n._deps.clear(); } }; var v = (e) => { if (_) (_._cleanups ||= new Set).add(e); }; var K = (e) => { let s = d; d = null; try { return e(); } finally { d = s; } }; var x = (e, s = false) => { let n = () => { if (n._disposed) return; if (n._deps) n._deps.forEach((i) => i.delete(n)); if (n._cleanups) n._cleanups.forEach((i) => i()), n._cleanups.clear(); let r = d, o = _; d = _ = n; try { return n._result = e(); } catch (i) { console.error("[SigPro]", i); } finally { d = r, _ = o; } }; if (n._deps = n._cleanups = n._children = null, n._disposed = false, n._isComputed = s, n._depth = d ? d._depth + 1 : 0, n._mounts = [], n._parent = _, _) (_._children ||= new Set).add(n); return n; }; var $ = () => { if (N) return; N = true; let e = Array.from(O).sort((s, n) => s._depth - n._depth); O.clear(); for (let s of e) if (!s._disposed) s(); N = false; }; var z = (e) => { R++; try { return e(); } finally { if (R--, R === 0 && O.size > 0 && !N) $(); } }; var m = (e, s = false) => { if (!s && d && !d._disposed) e.add(d), (d._deps ||= new Set).add(e); else if (s && e.size > 0) { let n = false; for (let r of e) { if (r === d || r._disposed) continue; if (r._isComputed) { if (r._dirty = true, r._subs) m(r._subs, true); } else O.add(r), n = true; } if (n && !N && R === 0) queueMicrotask($); } }; var P = (e, s = null) => { let n = new Set; if (w(e)) { let r, o = () => { if (o._dirty) { let i = d; d = o; try { let t = e(); if (!Object.is(r, t)) r = t, m(n, true); } finally { d = i; } o._dirty = false; } return m(n), r; }; return o._isComputed = true, o._subs = n, o._dirty = true, o._deps = null, o._disposed = false, o; } if (s) try { e = JSON.parse(localStorage.getItem(s)) ?? e; } catch (r) {} return (...r) => { if (r.length) { let o = w(r[0]) ? r[0](e) : r[0]; if (!Object.is(e, o)) { if (e = o, s) localStorage.setItem(s, JSON.stringify(e)); m(n, true); } } return m(n), e; }; }; var D = (e) => { if (!B(e)) return e; let s = I.get(e); if (s) return s; let n = new Map, r = (i) => { let t = n.get(i); if (!t) n.set(i, t = new Set); return t; }, o = new Proxy(e, { get(i, t, c) { if (typeof t !== "symbol") m(r(t)); return D(Reflect.get(i, t, c)); }, set(i, t, c, l) { let a = Reflect.has(i, t), f = Reflect.get(i, t, l), u = Reflect.set(i, t, c, l); if (u && !Object.is(f, c)) { if (m(r(t), true), !a) m(r(j), true); } return u; }, deleteProperty(i, t) { let c = Reflect.deleteProperty(i, t); if (c) m(r(t), true), m(r(j), true); return c; }, ownKeys(i) { return m(r(j)), Reflect.ownKeys(i); } }); return I.set(e, o), o; }; var T = (e, s) => { if (s === undefined) { let r = x(e); return r(), () => b(r); } let n = x(() => { let r = Array.isArray(e) ? e.map((o) => o()) : e(); K(() => s(r)); }); return n(), () => b(n); }; var U = (e) => { if (!e) return; if (e._cleanups) e._cleanups.forEach((s) => s()), e._cleanups.clear(); if (e._ownerEffect) b(e._ownerEffect); if (e.childNodes) e.childNodes.forEach((s) => U(s)); }; var J = /^\s*(javascript|data|vbscript):/i; var Q = new Set(["src", "href", "formaction", "action", "background", "code", "archive"]); var X = (e) => Q.has(e) || e.startsWith("on"); var L = (e, s) => { if (s == null || s === false) return null; if (X(e)) { let n = String(s); if (J.test(n)) return console.warn(`[SigPro] Bloqueado protocolo peligroso en ${e}`), "#"; } return s; }; var A = (e, s = {}, n = []) => { if (s instanceof Node || g(s) || !B(s)) n = s, s = {}; if (w(e)) { let t = x(() => { let f = e(s, { children: n, emit: (u, ...h) => s[`on${u[0].toUpperCase()}${u.slice(1)}`]?.(...h) }); return t._result = f, f; }); t(); let c = t._result; if (c == null) return null; let l = c instanceof Node || g(c) && c.every((f) => f instanceof Node) ? c : E.createTextNode(String(c)), a = (f) => { if (B(f) && !f._isRuntime) f._mounts = t._mounts || [], f._cleanups = t._cleanups || new Set, f._ownerEffect = t; }; return g(l) ? l.forEach(a) : a(l), l; } let r = q.has(e), o = r ? E.createElementNS(W, e) : E.createElement(e); o._cleanups = new Set; for (let t of Object.keys(s)) { let c = s[t]; if (t === "ref") { w(c) ? c(o) : c.current = o; continue; } if (r && t.startsWith("xlink:")) { let l = L(t.slice(6), c); l == null ? o.removeAttributeNS(M, t.slice(6)) : o.setAttributeNS(M, t.slice(6), l); continue; } if (t.startsWith("on")) { let l = t.slice(2).toLowerCase(); o.addEventListener(l, c); let a = () => o.removeEventListener(l, c); o._cleanups.add(a), v(a); } else if (w(c)) { let l = x(() => { let a = L(t, c()); if (t === "class") o.className = a || ""; else if (a == null) o.removeAttribute(t); else if (t === "style" && typeof a === "string") o.setAttribute("style", a); else if (t in o && !r) o[t] = a; else o.setAttribute(t, a === true ? "" : a); }); if (l(), o._cleanups.add(() => b(l)), v(() => b(l)), /^(INPUT|TEXTAREA|SELECT)$/.test(o.tagName) && (t === "value" || t === "checked")) { let a = t === "checked" ? "change" : "input"; o.addEventListener(a, (f) => c(f.target[t])); } } else { let l = L(t, c); if (l != null) if (t === "style" && typeof l === "string") o.setAttribute("style", l); else if (t in o && !r) o[t] = l; else o.setAttribute(t, l === true ? "" : l); } } let i = (t) => { if (g(t)) return t.forEach(i); if (w(t)) { let c = E.createTextNode(""); o.appendChild(c); let l = [], a = x(() => { let f = t(), u = (g(f) ? f : [f]).map(V); l.forEach((p) => { if (p._isRuntime) p.destroy(); else U(p); if (p.parentNode) p.remove(); }); let h = c; for (let p = u.length - 1;p >= 0; p--) { let y = u[p]; if (y.parentNode !== h.parentNode) h.parentNode?.insertBefore(y, h); if (y._mounts) y._mounts.forEach((G) => G()); h = y; } l = u; }); a(), o._cleanups.add(() => b(a)), v(() => b(a)); } else { let c = V(t); if (o.appendChild(c), c._mounts) c._mounts.forEach((l) => l()); } }; return i(n), o; }; var C = (e) => { let s = new Set, n = _, r = d, o = E.createElement("div"); o.style.display = "contents", o.setAttribute("role", "presentation"), _ = { _cleanups: s }, d = null; let i = (t) => { if (!t) return; if (t._isRuntime) s.add(t.destroy), o.appendChild(t.container); else if (g(t)) t.forEach(i); else o.appendChild(t instanceof Node ? t : E.createTextNode(String(t == null ? "" : t))); }; try { i(e({ onCleanup: (t) => s.add(t) })); } finally { _ = n, d = r; } return { _isRuntime: true, container: o, destroy: () => { s.forEach((t) => t()), U(o), o.remove(); } }; }; var F = (e, s, n = null) => { let r = E.createTextNode(""), o = A("div", { style: "display:contents" }, [r]), i = null; return T(() => !!(w(e) ? e() : e), (t) => { if (i) i.destroy(), i = null; let c = t ? s : n; if (c) i = C(() => w(c) ? c() : c), o.insertBefore(i.container, r); }), v(() => i?.destroy()), o; }; var H = (e, s, n) => { let r = E.createTextNode(""), o = A("div", { style: "display:contents" }, [r]), i = new Map; return T(() => (w(e) ? e() : e) || [], (t) => { let c = new Map, l = [], a = t || []; for (let u = 0;u < a.length; u++) { let h = a[u], p = n ? h?.[n] ?? u : h?.id ?? u, y = i.get(p); if (!y) y = C(() => s(h, u)); else i.delete(p); c.set(p, y), l.push(y); } i.forEach((u) => u.destroy()); let f = r; for (let u = l.length - 1;u >= 0; u--) { let p = l[u].container; if (p.nextSibling !== f) o.insertBefore(p, f); f = p; } i = c; }), o; }; var S = (e) => { let s = () => window.location.hash.slice(1) || "/", n = P(s()), r = () => n(s()); window.addEventListener("hashchange", r), v(() => window.removeEventListener("hashchange", r)); let o = A("div", { class: "router-hook" }), i = null; return T([n], () => { let t = n(), c = e.find((l) => { let a = l.path.split("/").filter(Boolean), f = t.split("/").filter(Boolean); return a.length === f.length && a.every((u, h) => u[0] === ":" || u === f[h]); }) || e.find((l) => l.path === "*"); if (c) { i?.destroy(); let l = {}; c.path.split("/").filter(Boolean).forEach((a, f) => { if (a[0] === ":") l[a.slice(1)] = t.split("/").filter(Boolean)[f]; }), S.params(l), i = C(() => w(c.component) ? c.component(l) : c.component), o.replaceChildren(i.container); } }), o; }; S.params = P({}); S.to = (e) => window.location.hash = e.replace(/^#?\/?/, "#/"); S.back = () => window.history.back(); S.path = () => window.location.hash.replace(/^#/, "") || "/"; var Y = (e, s) => { let n = typeof s === "string" ? E.querySelector(s) : s; if (!n) return; if (k.has(n)) k.get(n).destroy(); let r = C(w(e) ? e : () => e); return n.replaceChildren(r.container), k.set(n, r), r; }; if (typeof window < "u") Object.assign(window, { $: P, $$: D, watch: T, h: A, when: F, each: H, router: S, mount: Y, batch: z }), "a abbr article aside audio b blockquote br button canvas caption cite code col colgroup datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hr i iframe img input ins kbd label legend li main mark meter nav object ol optgroup option output p picture pre progress section select slot small source span strong sub summary sup svg table tbody td template textarea tfoot th thead time tr u ul video".split(" ").forEach((e) => { window[e] = (s, n) => A(e, s, n); }); // sigpro-helpers.js var get = (val) => typeof val === "function" ? val() : val; var getBy = (item, field = "label") => item && typeof item === "object" ? item[field] : item; var cls = (...classes) => classes.filter(Boolean).join(" ").trim(); var isFn = (f) => typeof f === "function"; var filterBy = (items, query, field = "label", q2 = String(query).toLowerCase()) => !query ? get(items) : get(items).filter((item) => String(item && typeof item === "object" ? item[field] : item).toLowerCase().includes(q2)); var rand = (r) => `${r}-${Math.random().toString(36).slice(2, 9)}`; var hide = () => document.activeElement?.blur(); // sigpro-ui.js var Accordion = (p) => { const name = p.name || rand("acc"); return H(p.items, (it) => { return A("div", { class: cls("collapse", p.class) }, [ A("input", { type: "radio", name, checked: it.open || undefined }), it.title ? A("div", { class: cls("collapse-title", `${it.classTitle ?? " font-semibold"}`) }, it.title) : null, it.content ? A("div", { class: cls("collapse-content text-sm", `${it.classContent ?? " font-semibold"}`) }, it.content) : null ]); }); }; var Alert = (p, c) => A("div", { ...p, class: cls("alert", p.class) }, c); var Avatar = (p, c) => A("div", { class: "avatar" }, A("div", { class: p.class }, c)); var AvatarGroup = (p, c) => A("div", { ...p, class: cls("avatar-group -space-x-6", p.class) }, c); var Autocomplete = ({ items, value, onselect, placeholder = "...", ...props }) => { const query = P(get(value) || ""); const filtered = P(() => filterBy(items, query())); const pick = (item) => { const display = getBy(item); const actual = typeof item === "string" ? item : item.value; query(display); if (isFn(value)) value(actual); onselect?.(item); hide(); }; return Dropdown({ class: "w-full" }, [ A("div", { tabindex: "0", role: "button", class: "w-full" }, Input({ ...props, placeholder, value: query, left: A("span", { class: "icon-[lucide--search]" }), oninput: (e) => { query(e.target.value); if (isFn(value)) value(e.target.value); } })), DropdownContent({ class: "p-2 bg-base-100 rounded-box shadow-xl w-full max-h-60 overflow-y-auto border border-base-300 z-50" }, A("ul", { class: "menu flex-col flex-nowrap w-full p-0" }, [ H(filtered, (item) => A("li", {}, [ A("a", { onmousedown: (e) => e.preventDefault(), onclick: () => pick(item) }, getBy(item)) ]), (item) => getBy(item)), () => filtered().length === 0 ? A("li", { class: "p-4 opacity-50 text-center" }, "Sin resultados") : null ])) ]); }; var Badge = (p, c) => A("span", { ...p, class: cls("badge", p.class) }, c); var Breadcrumbs = (p, c) => A("div", { ...p, class: cls("breadcrumbs", p.class) }, c); var Button = (p, c) => A("button", { ...p, class: cls("btn", p.class) }, c); var Calendar = (p) => { const internalDate = P(new Date); const hoverDate = P(null); const startHour = P(0); const endHour = P(0); const now = new Date; const todayStr = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}-${String(now.getDate()).padStart(2, "0")}`; const fmt = (d2) => `${d2.getFullYear()}-${String(d2.getMonth() + 1).padStart(2, "0")}-${String(d2.getDate()).padStart(2, "0")}`; const rangeMode = () => get(p.range) === true; const current = () => get(p.value); const selectDate = (date) => { const s = fmt(date); const v2 = current(); if (rangeMode()) { if (!v2?.start || v2.start && v2.end) { p.onChange?.({ start: s, end: null, ...p.hour && { startHour: startHour() } }); } else { const start = v2.start; const nv = s < start ? { start: s, end: start } : { start, end: s }; if (p.hour) { nv.startHour = v2.startHour ?? startHour(); nv.endHour = endHour(); } p.onChange?.(nv); } } else { p.onChange?.(p.hour ? `${s}T${String(startHour()).padStart(2, "0")}:00:00` : s); } }; const move = (m2) => { const d2 = internalDate(); internalDate(new Date(d2.getFullYear(), d2.getMonth() + m2, 1)); }; const moveYear = (y) => { const d2 = internalDate(); internalDate(new Date(d2.getFullYear() + y, d2.getMonth(), 1)); }; const HourSlider = ({ value: hVal, onChange: onH }) => A("div", { class: "flex-1" }, [ A("div", { class: "flex gap-2 items-center" }, [ A("input", { type: "range", min: 0, max: 23, value: hVal, class: "range range-xs flex-1", oninput: (e) => onH(+e.target.value) }), A("span", { class: "text-sm font-mono min-w-[48px] text-center" }, () => String(get(hVal)).padStart(2, "0") + ":00") ]) ]); return A("div", { class: cls("p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box w-80 select-none", p.class) }, [ A("div", { class: "flex justify-between items-center mb-4 gap-1" }, [ A("div", { class: "flex gap-0.5" }, [ A("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => moveYear(-1) }, A("span", { class: "icon-[lucide--chevrons-left]" })), A("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => move(-1) }, A("span", { class: "icon-[lucide--chevron-left]" })) ]), A("span", { class: "font-bold uppercase flex-1 text-center" }, () => internalDate().toLocaleString("es-ES", { month: "short", year: "numeric" })), A("div", { class: "flex gap-0.5" }, [ A("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => move(1) }, A("span", { class: "icon-[lucide--chevron-right]" })), A("button", { type: "button", class: "btn btn-ghost btn-xs px-1", onclick: () => moveYear(1) }, A("span", { class: "icon-[lucide--chevrons-right]" })) ]) ]), A("div", { class: "grid grid-cols-7 gap-1", onmouseleave: () => hoverDate(null) }, [ ...["L", "M", "X", "J", "V", "S", "D"].map((d2) => A("div", { class: "text-[10px] opacity-40 font-bold text-center" }, d2)), () => { const d2 = internalDate(), y = d2.getFullYear(), m2 = d2.getMonth(); const firstDay = new Date(y, m2, 1).getDay(); const offset = firstDay === 0 ? 6 : firstDay - 1; const dim = new Date(y, m2 + 1, 0).getDate(); const cells = []; for (let i = 0;i < offset; i++) cells.push(A("div")); for (let i = 1;i <= dim; i++) { const date = new Date(y, m2, i), ds = fmt(date); cells.push(A("button", { type: "button", class: () => { const v2 = current(), h = hoverDate(); const isStart = typeof v2 === "string" ? v2.split("T")[0] === ds : v2?.start === ds; const isEnd = v2?.end === ds; let inRange = false; if (rangeMode() && v2?.start) { const start = v2.start; if (!v2.end && h) inRange = ds > start && ds <= h || ds < start && ds >= h; else if (v2.end) inRange = ds > start && ds < v2.end; } const base = "btn btn-xs p-0 aspect-square min-h-0 h-auto font-normal relative"; const st = isStart || isEnd ? "btn-primary z-10" : inRange ? "bg-primary/20 border-none rounded-none" : "btn-ghost"; const today = ds === todayStr ? "ring-1 ring-primary ring-inset font-black text-primary" : ""; return cls(base, st, today); }, onmouseenter: () => rangeMode() && hoverDate(ds), onclick: () => selectDate(date) }, i.toString())); } return cells; } ]), p.hour ? A("div", { class: "mt-3 pt-2 border-t border-base-300" }, rangeMode() ? A("div", { class: "flex gap-4" }, [HourSlider({ value: startHour, onChange: (h) => startHour(h) }), HourSlider({ value: endHour, onChange: (h) => endHour(h) })]) : HourSlider({ value: startHour, onChange: (h) => startHour(h) })) : null ]); }; var Card = (p, c) => A("div", { ...p, class: cls("card", p.class) }, c); var CardTitle = (p, c) => A("div", { ...p, class: cls("card-title", p.class) }, c); var CardBody = (p, c) => A("div", { ...p, class: cls("card-body", p.class) }, c); var CardActions = (p, c) => A("div", { ...p, class: cls("card-actions", p.class) }, c); var Carousel = (p, c) => A("div", { ...p, class: cls("carousel", p.class) }, c); var CarouselItem = (p, c) => A("div", { ...p, class: cls("carousel-item", p.class) }, c); var Chat = (p, c) => A("div", { ...p, class: cls("chat", p.class) }, c); var ChatBubble = (p, c) => A("div", { ...p, class: cls("chat-bubble", p.class) }, c); var ChatFooter = (p, c) => A("div", { ...p, class: cls("chat-footer", p.class) }, c); var ChatHeader = (p, c) => A("div", { ...p, class: cls("chat-header", p.class) }, c); var ChatImage = (p, c) => A("div", { ...p, class: cls("chat-image avatar", p.class) }, A("div", { class: "w-10 rounded-full" }, typeof c === "string" ? A("img", { src: c, alt: "avatar" }) : c)); var Checkbox = (p) => A("input", { ...p, type: "checkbox", class: cls("checkbox", p.class) }); var Colorpicker = (p) => { const current = () => get(p.value) || "#000000"; return Dropdown({}, [ DropdownButton({ class: "btn" }, [ A("div", { class: "size-5 rounded-sm", style: () => `background-color: ${current()}` }), p.label && A("span", {}, p.label) ]), DropdownContent({ class: "p-0" }, ColorPalette({ value: p.value, onchange: (c) => { isFn(p.value) ? p.value(c) : p.onchange?.(c); } })) ]); }; var ColorPalette = (p) => { const current = () => get(p.value) || "#000000"; 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 pick = (c) => { isFn(p.value) ? p.value(c) : p.onchange?.(c); hide(); }; return A("div", { class: cls("p-3 bg-base-100 rounded-box shadow w-64", p.class) }, A("div", { class: "grid grid-cols-8 gap-1" }, palette.map((c) => A("button", { type: "button", style: `background-color: ${c}`, class: () => { const act = current().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 p-0 min-h-0 ${act ? "ring-2 ring-offset-1 ring-primary z-10 scale-110" : ""}`; }, onclick: () => { pick(c); } })))); }; var Datepicker = (p) => { const displayValue = P(""); const rangeMode = () => get(p.range) === true; T(() => { const v2 = get(p.value); if (!v2) return displayValue(""); let text = ""; if (typeof v2 === "string") { text = p.hour && v2.includes("T") ? v2.replace("T", " ") : v2; } else if (v2.start && v2.end) { const startStr = p.hour && v2.startHour != null ? `${v2.start} ${String(v2.startHour).padStart(2, "0")}:00` : v2.start; const endStr = p.hour && v2.endHour != null ? `${v2.end} ${String(v2.endHour).padStart(2, "0")}:00` : v2.end; text = `${startStr} - ${endStr}`; } else if (v2.start) { const startStr = p.hour && v2.startHour != null ? `${v2.start} ${String(v2.startHour).padStart(2, "0")}:00` : v2.start; text = `${startStr}...`; } displayValue(text); }); const handleChange = (val) => { if (isFn(p.value)) p.value(val); else p.onChange?.(val); if (!rangeMode() || val?.end != null) hide(); }; return Dropdown({ class: cls("w-full", p.class) }, [ A("label", { tabindex: "0", role: "button", class: "input input-bordered flex items-center gap-2 cursor-pointer" }, [ A("span", { class: "icon-[lucide--calendar] shrink-0" }), A("span", { class: () => `grow text-left truncate ${!displayValue() ? "opacity-50" : ""}` }, () => displayValue() || p.placeholder || (rangeMode() ? "Seleccionar rango..." : "Seleccionar fecha...")), () => displayValue() ? A("button", { type: "button", class: "btn btn-ghost btn-xs btn-circle -mr-2", onmousedown: (e) => { e.preventDefault(); e.stopPropagation(); if (isFn(p.value)) p.value(null); else p.onChange?.(null); displayValue(""); } }, A("span", { class: "icon-[lucide--x] opacity-50" })) : null ]), DropdownContent({ class: "p-0" }, Calendar({ value: p.value, range: rangeMode(), hour: p.hour, onChange: handleChange })) ]); }; var Drawer = (p, c) => div({ ...p, class: cls("drawer", p.class) }, c); var DrawerToggle = (p) => input({ ...p, type: "checkbox", class: "drawer-toggle", checked: () => get(p.checked), onchange: (e) => isFn(p.checked) && p.checked(e.target.checked) }); var DrawerContent = (p, c) => div({ ...p, class: cls("drawer-content", p.class) }, c); var DrawerSide = (p, c) => div({ ...p, class: cls("drawer-side", p.class) }, c); var DrawerOverlay = (p) => label({ ...p, for: p.for, class: cls("drawer-overlay", p.class) }); var Divider = (p) => A("div", { ...p, class: cls("divider", p.class) }); var Dropdown = (p, c) => A("div", { ...p, class: cls("dropdown", p.class) }, c); var DropdownButton = (p, c) => A("div", { ...p, tabindex: "0", role: "button", class: cls("btn", p.class) }, c); var DropdownContent = (p, c) => A("div", { ...p, tabindex: "0", class: cls("dropdown-content", p.class) }, c); var Fab = (p, c) => A("div", { class: "fab" }, [A("div", { tabindex: "0", role: "button", class: cls("btn", p.class) }, Icon(p.icon)), c]); var Fieldset = (p, c) => A("fieldset", { class: cls("fieldset", p.class) }, [A("legend", { class: "fieldset-legend" }, p.label), c]); var Fileinput = (p) => { const files = P([]); const drag = P(false); const error = P(null); const maxBytes = (p.max || 2) * 1024 * 1024; const process = (fileList) => { const arr = Array.from(fileList); error(null); if (arr.some((f) => f.size > maxBytes)) { error(`Máx ${p.max || 2}MB`); return; } const updated = [...files(), ...arr]; files(updated); if (isFn(p.onselect)) p.onselect(updated); else if (isFn(p.value)) p.value(updated); }; const remove = (idx) => { const updated = files().filter((_2, i) => i !== idx); files(updated); if (isFn(p.onselect)) p.onselect(updated); else if (isFn(p.value)) p.value(updated); }; return A("div", { class: cls("fieldset w-full p-0", p.class) }, [ A("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 ${drag() ? "border-primary bg-primary/10" : "border-base-content/20 bg-base-100 hover:bg-base-200"}`, ondragover: (e) => { e.preventDefault(); drag(true); }, ondragleave: () => drag(false), ondrop: (e) => { e.preventDefault(); drag(false); process(e.dataTransfer.files); } }, [ A("div", { class: "flex items-center gap-3 w-full" }, [ A("span", { class: "icon-[lucide--upload]" }), A("span", { class: "text-sm opacity-70 truncate grow text-left" }, "Drag and drop..."), A("span", { class: "text-[10px] opacity-40 shrink-0" }, `Máx ${p.max || 2}MB`) ]), A("input", { type: "file", multiple: true, accept: p.accept || "*", class: "hidden", onchange: (e) => process(e.target.files) }) ]), () => error() && A("span", { class: "text-[10px] text-error mt-1 px-1 font-medium" }, error()), F(() => files().length > 0, () => A("ul", { class: "mt-2 space-y-1" }, H(files, (file, idx) => A("li", { class: "flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300" }, [ A("div", { class: "flex items-center gap-2 truncate" }, [ A("span", { class: "opacity-50" }, "\uD83D\uDCC4"), A("span", { class: "truncate font-medium max-w-[200px]" }, file.name), A("span", { class: "text-[9px] opacity-40" }, `(${(file.size / 1024).toFixed(0)} KB)`) ]), A("button", { type: "button", class: "btn btn-ghost btn-xs btn-circle", onclick: (e) => { e.preventDefault(); remove(idx); } }, A("span", { class: "icon-[lucide--x]" })) ])))) ]); }; var Icon = (p) => A("span", { class: p.startsWith("icon-") ? p : "" }, p.startsWith("icon-") ? null : p); var Indicator = (p, c) => A("div", { ...p, class: cls("indicator", p.class) }, [p.value && A("span", { class: cls("indicator-item badge", p.class) }, p.value), c]); var Input = (p) => { const { label: label2, icon, float, placeholder, value, left, right, rule, hint, content, ...rest } = p; const showPassword = P(false); const isPassword = p.type === "password"; const pattern = rule ?? null; const inputType = () => isPassword ? get(showPassword) ? "text" : "password" : p.type || "search"; return A("label", { class: float ? "floating-label" : "" }, [ float ? A("span", {}, label2) : null, A("label", { pattern, class: () => cls("input validator", p.class) }, [ label2 && !float ? A("span", { class: "label" }, label2) : null, left ?? null, A("input", { ...rest, type: inputType, class: "grow", pattern, placeholder: placeholder || label2 || " ", value }), right ?? null, isPassword ? Swap({ class: "ml-2" }, [ SwapToggle({ value: showPassword, class: "swap-rotate" }), SwapOn({}, Icon("icon-[lucide--eye]")), SwapOff({}, Icon("icon-[lucide--eye-off]")) ]) : null ]), hint ? A("div", { class: "validator-hint" }, hint) : null ]); }; var Kbd = (p, c) => A("kbd", { ...p, class: cls("kbd", p.class) }, c); var List = (p, c) => A("ul", { ...p, class: cls("list", p.class) }, c); var ListRows = (p) => () => (get(p.items) || []).map((item, idx) => A("li", { class: cls("list-row", p.class, item?.class) }, typeof p.render === "function" ? p.render(item, idx) : item)); var Loading = (p, c) => A("span", { ...p, class: cls("loading loading-spinner", p.class) }, c); var Menu = (p) => { if (p.children !== undefined) return A("ul", { class: cls("menu", p.class), ...p }, p.children); const { items } = p; const render = (item) => item.children ? A("li", {}, A("details", { open: item.open || undefined }, [ A("summary", {}, getBy(item)), A("ul", {}, H(() => get(item.children) || [], render)) ])) : A("li", {}, A("a", { href: item.href, onclick: item.onclick ? (e) => { if (!item.href) e.preventDefault(); item.onclick(e); } : null }, getBy(item))); return A("ul", { class: cls("menu", p.class) }, H(() => get(items) || [], render)); }; var Modal = (p) => { let dialogRef = null; T(() => { const isOpen = get(p.open); if (!dialogRef) return; isOpen ? dialogRef.showModal() : dialogRef.hide(); }); const close = () => isFn(p.open) && p.open(false); return A("dialog", { ...p, ref: (el) => dialogRef = el, class: cls("modal", p.class), onclose: close, oncancel: close }, [ A("div", { class: "modal-box" }, [ p.title && A("h3", { class: "text-lg font-bold" }, p.title), p.children, A("div", { class: "modal-action" }, [ p.actions || Button({ class: "btn", onclick: close }, "Cerrar") ]) ]), A("form", { method: "dialog", class: "modal-backdrop" }, [ A("button", {}, "close") ]) ]); }; var Navbar = (p, c) => A("div", { ...p, class: cls("navbar", p.class) }, c); var Progress = (p) => A("progress", { ...p, class: cls("progress", p.class) }); var Radial = (p, c) => A("div", { class: cls("radial-progress", p.class), style: `--value:${get(p.value) ?? 0};`, role: "progressbar", "aria-valuenow": p.value }, c); var Radio = (p) => A("input", { ...p, type: "radio", class: cls("radio", p.class) }); var Range = (p) => A("input", { ...p, type: "range", class: cls("range", p.class) }); var Rating = (p, c) => A("div", { ...p, class: "rating" }, c); var RatingItems = (p) => [...Array(p.count)].map((_2, i) => A("input", { class: cls("mask", p.class), name: p.name, type: "radio", checked: () => get(p.value) === i, onchange: () => isFn(p.value) ? p.value(i) : p.onchange?.(i) })); var Select = (p, c) => { if (c !== undefined) return A("select", { class: cls("select", p.class), ...p }, c); const { label: label2, float, placeholder, placeholderDisabled = true, value, left, right, hint, items, keyFn, ...rest } = p; const opts = () => { const raw = get(items) || []; const ph = placeholder ? [{ disabled: placeholderDisabled, label: placeholder, value: "" }] : []; return [...ph, ...raw]; }; return A("label", { class: float ? "floating-label" : "" }, [ float ? A("span", {}, label2) : null, A("label", { class: cls("select", rest.class) }, [ !float && label2 ? A("span", { class: "label" }, label2) : null, left ?? null, A("select", { value: () => get(value), onchange: (e) => isFn(value) ? value(e.target.value) : rest.onchange?.(e) }, H(opts, (item) => { const val = getBy(item, item.value !== undefined ? "value" : undefined); const lab = getBy(item, "label"); return A("option", { value: val, disabled: item.disabled || undefined }, lab); })), right ?? null ]), hint ? A("div", { class: "validator-hint" }, hint) : null ]); }; var Skeleton = (p) => A("div", { ...p, class: cls("skeleton", p.class) }); var SkeletonText = (p) => A("span", { ...p, class: cls("skeleton skeleton-text", p.class) }); var Stack = (p, c) => A("div", { ...p, class: cls("stack", p.class) }, c); var Stats = (p, c) => A("div", { ...p, class: cls("stats shadow", p.class) }, c); var Stat = (p) => A("div", { ...p, class: cls("stat", p.class) }, [ p.title ? A("div", { class: "stat-title" }, p.title) : null, p.value ? A("div", { class: "stat-value" }, p.value) : null, p.desc ? A("div", { class: "stat-desc" }, p.desc) : null ]); var Steps = (p, c) => A("ul", { ...p, class: cls("steps", p.class) }, c); var Step = (p, c) => A("li", { ...p, class: cls("step", p.class), "data-content": p.dataContent }, c); var Swap = (p, c) => A("label", { ...p, class: cls("swap", p.class) }, c); var SwapToggle = (p) => A("input", { type: "checkbox", checked: () => get(p.value), onchange: (e) => isFn(p.value) && p.value(e.target.checked), class: p.class }); var SwapOn = (p, c) => A("div", { ...p, class: cls("swap-on", p.class) }, c); var SwapOff = (p, c) => A("div", { ...p, class: cls("swap-off", p.class) }, c); var Table = (p, c) => A("table", { ...p, class: cls("table", p.class) }, c); var TableItems = ({ items, columns = [], header = true }) => { const head = header !== false && columns.some((c) => c.label) ? A("thead", {}, A("tr", {}, columns.map((c) => A("th", { class: c.class }, c.label)))) : null; const body = A("tbody", {}, () => { const list = get(items) || []; return list.map((it, idx) => A("tr", {}, columns.map((c) => { const v2 = c.render ? c.render(it, idx) : it[c.key]; return A("td", { class: c.class }, v2); }))); }); return [head, body].filter(Boolean); }; var Tabs = (p, c) => { if (!p.items) { const { class: className2, ...rest2 } = p; return A("div", { ...rest2, class: cls("tabs", className2) }, c); } const { items, activeIndex, onClose, class: className, ...rest } = p; const get2 = (x2) => isFn(x2) ? x2() : x2; const closeH = onClose || (isFn(items) ? (idx, item) => { const arr = get2(items); const newArr = arr.filter((_2, i) => i !== idx); items(newArr); if (activeIndex() >= newArr.length) activeIndex(Math.max(0, newArr.length - 1)); } : null); return A("div", { ...rest, class: cls("tabs", className) }, () => { const list = get2(items) || []; return list.flatMap((it, idx) => { const isActive = () => activeIndex() === idx; const button = A("button", { class: () => `tab ${isActive() ? "tab-active" : ""} ${it.class || ""}`, onclick: (e) => { e.preventDefault(); activeIndex(idx); it.onclick?.(e); } }, [ getBy(it), it.closable ? A("span", { class: "ml-1 inline-flex items-center justify-center w-4 h-4 rounded-full hover:bg-base-300 text-base-content/60 hover:text-base-content cursor-pointer", onclick: (e) => { e.stopPropagation(); closeH?.(idx, it); } }, A("span", { class: "icon-[lucide--x] w-3 h-3" })) : null ]); const contentDiv = A("div", { class: "tab-content bg-base-100 border-base-300 p-6", style: () => `display: ${isActive() ? "block" : "none"};` }, isFn(it.content) ? it.content() : it.content); return [button, contentDiv]; }); }); }; var Textarea = (p) => A("textarea", { ...p, class: cls("textarea", p.class) }); var Textrotate = (p, c) => A("span", { ...p, class: cls("text-rotate", p.class) }, A("span", {}, c)); var Timeline = (p, c) => A("ul", { ...p, class: cls("timeline", p.class) }, c); var Toast = (message, type = "alert-success", duration = 3500) => { let container = document.getElementById("sigpro-toast-container"); if (!container) { container = A("div", { id: "sigpro-toast-container", class: "fixed top-0 right-0 z-[9999] p-4 flex flex-col items-end gap-2 pointer-events-none" }); document.body.appendChild(container); } const host = A("div", { style: "display: contents" }); container.appendChild(host); let closeFn, timer, enterTimer; const ToastComponent = () => { const visible = P(false); const leaving = P(false); closeFn = () => { if (leaving()) return; clearTimeout(timer); clearTimeout(enterTimer); leaving(true); setTimeout(() => { instance.destroy(); host.remove(); if (!container.hasChildNodes()) container.remove(); }, 300); }; enterTimer = setTimeout(() => visible(true), 0); const content = typeof message === "function" ? get(message) : message; const msgNode = typeof content === "string" ? A("span", {}, content) : content; return A("div", { class: () => { const base = `alert alert-soft ${type} shadow-lg transition-all duration-300 inline-flex w-auto whitespace-nowrap pointer-events-auto`; if (leaving()) return `${base} translate-x-full opacity-0`; if (visible()) return `${base} translate-x-0 opacity-100`; return `${base} translate-x-10 opacity-0`; } }, [ msgNode, A("button", { class: "btn btn-xs btn-circle btn-ghost", onclick: closeFn }, A("span", { class: "icon-[lucide--x]" })) ]); }; const instance = Y(ToastComponent, host); if (duration > 0) timer = setTimeout(closeFn, duration); return closeFn; }; var Toggle = (p) => A("input", { ...p, type: "checkbox", class: cls("toggle", p.class) }); var Tooltip = (p, c) => A("div", { ...p, class: cls("tooltip", p.class), "data-tip": p.tip }, c); // sigpro-editor.js var exports_sigpro_editor = {}; __export(exports_sigpro_editor, { Editor: () => Editor }); var Editor = (p) => { const { value, class: extraClass } = p; let editorRef = null; let savedRange = null; const isSource = P(false); const source = P(""); const count = P(0); const refreshTick = P(0); const showEmojis = P(false); const emojis = ["\uD83D\uDE00", "\uD83D\uDE0A", "\uD83D\uDE09", "\uD83E\uDDD0", "\uD83D\uDE2E", "\uD83E\uDD14", "\uD83D\uDE05", "\uD83D\uDE02", "\uD83D\uDE0D", "\uD83D\uDE18", "\uD83E\uDD70", "\uD83D\uDC4D", "\uD83D\uDC4E", "\uD83D\uDC4C", "\uD83E\uDD1D", "\uD83E\uDD1E", "\uD83D\uDC4B", "\uD83D\uDC4F", "\uD83D\uDE4C", "\uD83D\uDE4F", "\uD83D\uDCAA", "☝️", "\uD83D\uDC47", "\uD83D\uDC48", "\uD83D\uDC49", "\uD83D\uDD95", "✅", "⚠️", "\uD83D\uDE80", "\uD83D\uDCE2", "✉️", "❤️"]; const saveSelection = () => { const sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) savedRange = sel.getRangeAt(0); }; const restoreSelection = () => { if (savedRange) { const sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(savedRange); } }; const triggerRefresh = () => { refreshTick(refreshTick() + 1); if (editorRef) count(editorRef.innerText.length); }; const notify = () => { if (!editorRef) return; const html = editorRef.innerHTML; if (isFn(value)) value(html); else p.onchange?.(html); triggerRefresh(); }; const exec = (cmd, val = null) => { if (!editorRef) return; editorRef.focus(); if (savedRange) restoreSelection(); document.execCommand(cmd, false, val); savedRange = null; notify(); }; const openLightbox = (src) => { const overlay = document.createElement("div"); overlay.style = `position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.9);z-index:9999;display:flex;align-items:center;justify-content:center;cursor:zoom-out;`; const img = document.createElement("img"); img.src = src; img.style = `max-width:95%;max-height:95%;box-shadow:0 0 30px rgba(0,0,0,0.5);border-radius:4px;`; overlay.onclick = () => document.body.removeChild(overlay); overlay.appendChild(img); document.body.appendChild(overlay); }; const handleUpload = (file) => { if (!file) return; const reader = new FileReader; reader.onload = (re) => { if (file.type.startsWith("image/")) { const imgHtml = `
 `; exec("insertHTML", imgHtml); } else { const linkHtml = `${file.name} `; exec("insertHTML", linkHtml); } }; reader.readAsDataURL(file); }; const queryState = (cmd, val = null) => { refreshTick(); if (!editorRef || isSource()) return false; try { if (cmd === "formatBlock") { let node = window.getSelection().getRangeAt(0).commonAncestorContainer; while (node && node !== editorRef) { if (node.nodeType === 1 && node.tagName === val) return true; node = node.parentNode; } return false; } return document.queryCommandState(cmd); } catch (e) { return false; } }; const toolbar = A("div", { class: "flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20" }, [ A("div", { class: "flex flex-wrap gap-1 flex-1 items-center" }, [ A("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("bold") ? "btn-active bg-primary/20" : ""}`, onclick: () => exec("bold") }, A("span", { class: "icon-[lucide--bold]" })), A("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("italic") ? "btn-active bg-primary/20" : ""}`, onclick: () => exec("italic") }, A("span", { class: "icon-[lucide--italic]" })), A("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("underline") ? "btn-active bg-primary/20" : ""}`, onclick: () => exec("underline") }, A("span", { class: "icon-[lucide--underline]" })), A("input", { type: "color", class: "w-5 h-5 p-0 border-0 bg-transparent cursor-pointer", oninput: (e) => exec("foreColor", e.target.value) }), A("span", { class: "w-px h-5 bg-base-300 mx-1" }), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("justifyLeft") }, A("span", { class: "icon-[lucide--align-left]" })), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("justifyCenter") }, A("span", { class: "icon-[lucide--align-center]" })), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("justifyRight") }, A("span", { class: "icon-[lucide--align-right]" })), A("span", { class: "w-px h-5 bg-base-300 mx-1" }), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("insertUnorderedList") }, A("span", { class: "icon-[lucide--list]" })), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("insertOrderedList") }, A("span", { class: "icon-[lucide--list-ordered]" })), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("outdent") }, A("span", { class: "icon-[lucide--indent-decrease]" })), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("indent") }, A("span", { class: "icon-[lucide--indent-increase]" })), A("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("formatBlock", "BLOCKQUOTE") ? "btn-active" : ""}`, onclick: () => exec("formatBlock", queryState("formatBlock", "BLOCKQUOTE") ? "P" : "BLOCKQUOTE") }, A("span", { class: "icon-[lucide--quote]" })), A("span", { class: "w-px h-5 bg-base-300 mx-1" }), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => { const url = window.prompt("URL:"); if (url) exec("createLink", url); } }, A("span", { class: "icon-[lucide--link]" })), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => { const input2 = document.createElement("input"); input2.type = "file"; input2.onchange = (e) => handleUpload(e.target.files[0]); input2.click(); } }, A("span", { class: "icon-[lucide--paperclip]" })), A("div", { class: "relative" }, [ A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: (e) => { e.stopPropagation(); saveSelection(); showEmojis(!showEmojis()); } }, A("span", { class: "icon-[lucide--smile]" })), A("div", { class: "absolute top-full left-0 mt-1 p-2 bg-base-100 border border-base-300 shadow-xl rounded-box w-52 z-50 flex flex-wrap gap-1", style: () => showEmojis() ? "display:flex" : "display:none" }, emojis.map((emo) => A("span", { class: "cursor-pointer hover:bg-base-200 p-1 rounded text-lg", onclick: (e) => { e.stopPropagation(); exec("insertText", emo); showEmojis(false); } }, emo))) ]), A("span", { class: "w-px h-5 bg-base-300 mx-1" }), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("undo") }, A("span", { class: "icon-[lucide--undo-2]" })), A("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("redo") }, A("span", { class: "icon-[lucide--redo-2]" })) ]), A("button", { type: "button", class: () => `btn btn-ghost btn-xs ${isSource() ? "btn-active" : ""}`, onclick: () => { if (!isSource()) source(editorRef?.innerHTML || ""); else if (editorRef) { editorRef.innerHTML = source(); notify(); } isSource(!isSource()); } }, A("span", { class: "icon-[lucide--code-2]" })) ]); if (typeof document !== "undefined" && !document.getElementById("editor-styles")) { const style = document.createElement("style"); style.id = "editor-styles"; style.textContent = ` [contenteditable="true"] div, [contenteditable="true"] p { margin: 0; padding: 0; } `; document.head.appendChild(style); } return A("div", { class: cls("border border-base-300 rounded-box bg-base-100 overflow-hidden shadow-sm flex flex-col", extraClass) }, [ toolbar, A("div", { class: "relative flex-1 flex flex-col", onclick: () => showEmojis(false) }, [ A("div", { ref: (el) => { if (!editorRef && el) { editorRef = el; el.innerHTML = get(value) || ""; document.execCommand("defaultParagraphSeparator", false, "br"); el.addEventListener("click", (e) => { const container = e.target.closest(".resizable-img-container"); if (container) { const img = container.querySelector("img"); if (img) openLightbox(img.src); } }); } }, style: () => `min-height:22rem;${isSource() ? "display:none" : ""}`, class: "p-4 outline-none text-base-content leading-relaxed [&>div]:m-0 [&>p]:m-0 [&>div]:min-h-[1em] [&_.resizable-img-container]:hover:border-primary [&_blockquote]:border-l-4 [&_blockquote]:border-base-300 [&_blockquote]:pl-4 [&_blockquote]:italic [&_ul]:list-disc [&_ul]:pl-8 [&_ol]:list-decimal [&_ol]:pl-8", contenteditable: "true", oninput: notify, onkeydown: (e) => { if (e.key === "Tab") { e.preventDefault(); exec("indent"); } }, onkeyup: () => { triggerRefresh(); saveSelection(); }, onclick: (e) => { triggerRefresh(); saveSelection(); e.stopPropagation(); }, onmouseup: () => { notify(); saveSelection(); }, onpaste: (e) => { e.preventDefault(); const text = e.clipboardData.getData("text/plain"); exec("insertText", text); }, ondragover: (e) => e.preventDefault(), ondrop: (e) => { e.preventDefault(); handleUpload(e.dataTransfer.files[0]); } }), A("textarea", { class: "w-full flex-1 min-h-[22rem] p-4 outline-none font-mono text-sm bg-base-200 border-0", style: () => isSource() ? "" : "display:none", value: source, oninput: (e) => { source(e.target.value); if (editorRef) editorRef.innerHTML = e.target.value; p.onchange?.(e.target.value); } }) ]), A("div", { class: "px-3 py-1 border-t border-base-300 bg-base-100/50 text-[10px] text-right text-base-content/60 italic" }, [ A("span", () => `${count()}`) ]) ]); }; // sigpro-locale.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 = P("es"); var Locale = (t) => currentLocale(t); var tt = (t) => () => i18n[currentLocale()][t] || t; // index.js var Components = { ...exports_sigpro_ui, ...exports_sigpro_editor }; var Utils = { Locale, tt, hide, get }; if (typeof window !== "undefined") { Object.entries({ ...Components, ...Utils }).forEach(([name, value]) => { Object.defineProperty(window, name, { value, writable: false, configurable: true, enumerable: true }); }); } export { Utils, Components };