From e6b172efa1a7567b02056b52807fb69e0eb11f44 Mon Sep 17 00:00:00 2001 From: natxocc Date: Mon, 4 May 2026 16:39:57 +0200 Subject: [PATCH] Independent sigpro vs sigpro-ui --- Readme.md | 31 +- dist/sigpro-ui.editor.esm.js | 250 +++++++ dist/sigpro-ui.editor.esm.min.js | 7 + dist/sigpro-ui.esm.js | 1085 +++------------------------- dist/sigpro-ui.esm.min.js | 8 +- dist/sigpro-ui.js | 952 +++++++++++------------- dist/sigpro-ui.min.js | 4 +- docs/README.md | 4 +- docs/demo.md | 14 +- docs/index.html | 1 + docs/install.md | 19 +- docs/quick.md | 5 +- docs/sigpro-ui.min.js | 4 +- package.json | 27 +- sigpro-ui.js | 747 ------------------- sigpro-ui_ESM.js | 10 - sigpro-ui_IIFE.js | 23 - src/build_editor.js | 1 + src/build_esm.js | 2 + src/build_umd.js | 7 + src/editor.js | 189 +++++ src/helpers.js | 11 + src/locale.js | 7 + sigpro-ui.css => src/sigpro-ui.css | 0 src/sigpro-ui.js | 539 ++++++++++++++ sigpro.js => src/sigpro.js | 17 +- 26 files changed, 1596 insertions(+), 2368 deletions(-) create mode 100644 dist/sigpro-ui.editor.esm.js create mode 100644 dist/sigpro-ui.editor.esm.min.js delete mode 100644 sigpro-ui.js delete mode 100644 sigpro-ui_ESM.js delete mode 100644 sigpro-ui_IIFE.js create mode 100644 src/build_editor.js create mode 100644 src/build_esm.js create mode 100644 src/build_umd.js create mode 100644 src/editor.js create mode 100644 src/helpers.js create mode 100644 src/locale.js rename sigpro-ui.css => src/sigpro-ui.css (100%) create mode 100644 src/sigpro-ui.js rename sigpro.js => src/sigpro.js (95%) diff --git a/Readme.md b/Readme.md index 0d3c457..b9f4f39 100644 --- a/Readme.md +++ b/Readme.md @@ -14,7 +14,7 @@ Based in SigPro Core **SigPro UI** is a lightweight, ultra-fast, and reactive component library built for the **SigPro** reactivity core. It provides a set of high-quality, accessible, and themeable UI components with **zero external dependencies** - everything is included. -**SigPro UI** is a complete, full self-contained UI library + reactive core in under **35KB gzip** (< 13KB JS + < 22KB CSS). ๐ŸŽ‰ +**SigPro UI** is a complete, full self-contained UI library in under **35KB gzip** (JS + CSS). ๐ŸŽ‰ Unlike heavy frameworks, SigPro UI focuses on a **"Zero-Build"** philosophy, allowing you to build complex reactive interfaces with a functional, declarative syntax that runs natively in the browser. @@ -36,19 +36,20 @@ Unlike heavy frameworks, SigPro UI focuses on a **"Zero-Build"** philosophy, all ### ESM / Bundler ```bash -npm install sigpro-ui +npm install sigpro sigpro-ui # or -bun add sigpro-ui +bun add sigpro sigpro-ui ``` ### CDN (Browser - All-in-One) ```html - + + ``` -**That's it!** The CDN version includes SigPro core internally - no additional scripts needed. +**That's it!** no additional scripts needed. --- @@ -57,8 +58,9 @@ bun add sigpro-ui ### ESM / Modular (Tree Shaking) ```javascript -import { $, mount, watch, h, Button, Modal, Input, Alert } from "sigpro-ui"; -import "sigpro-ui/css"; +import { $, mount, watch, h } from "sigpro"; // Core functions +import { Button, Modal, Input, Alert } from "sigpro-ui"; // Components +import "sigpro-ui/css"; // CSS const App = () => { const show = $(false); @@ -111,6 +113,7 @@ mount(App, "#app"); - `when()` - Conditional rendering - `each()` - List rendering - `mount()` - Mount components to DOM +- `batch()` - Batch multiple reactive updates into a single flush > [SigPro Core Docs](https://sigpro.natxocc.com/#/) @@ -124,23 +127,23 @@ mount(App, "#app"); - And 30+ more! ### Utilities -- `tt()` - i18n translation function (ES/EN) -- `Locale()` - Set global language +- `t()` - i18n translation function +- `setLocale()` - Set global language --- ## Language Support -Built-in i18n with Spanish and English: +Built-in i18n with custom language: ```javascript -import { tt, Locale } from "sigpro-ui"; +import { tt, setLocale } from "sigpro-ui"; -// Change locale (default is 'es') -Locale('en'); +// Change locale +setLocale('en'); // Use translations -Button({}, tt('close')); +Button({}, t('close')); Input({ placeholder: tt('search') }); ``` diff --git a/dist/sigpro-ui.editor.esm.js b/dist/sigpro-ui.editor.esm.js new file mode 100644 index 0000000..d8280d1 --- /dev/null +++ b/dist/sigpro-ui.editor.esm.js @@ -0,0 +1,250 @@ +// src/editor.js +import { $, isFunc, h } from "./sigpro.js"; + +// src/helpers.js +var val = (val2) => typeof val2 === "function" ? val2() : val2; +var cls = (...classes) => classes.filter(Boolean).join(" ").trim(); + +// src/editor.js +var Editor = (p) => { + const { value, class: extraClass } = p; + let editorRef = null; + let savedRange = null; + const isSource = $(false); + const source = $(""); + const count = $(0); + const refreshTick = $(0); + const showEmojis = $(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 (isFunc(value)) + value(html); + else + p.onchange?.(html); + triggerRefresh(); + }; + const exec = (cmd, val2 = null) => { + if (!editorRef) + return; + editorRef.focus(); + if (savedRange) + restoreSelection(); + document.execCommand(cmd, false, val2); + 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, val2 = 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 === val2) + return true; + node = node.parentNode; + } + return false; + } + return document.queryCommandState(cmd); + } catch (e) { + return false; + } + }; + const toolbar = h("div", { class: "flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20" }, [ + h("div", { class: "flex flex-wrap gap-1 flex-1 items-center" }, [ + h("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("bold") ? "btn-active bg-primary/20" : ""}`, onclick: () => exec("bold") }, h("span", { class: "icon-[lucide--bold]" })), + h("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("italic") ? "btn-active bg-primary/20" : ""}`, onclick: () => exec("italic") }, h("span", { class: "icon-[lucide--italic]" })), + h("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("underline") ? "btn-active bg-primary/20" : ""}`, onclick: () => exec("underline") }, h("span", { class: "icon-[lucide--underline]" })), + h("input", { type: "color", class: "w-5 h-5 p-0 border-0 bg-transparent cursor-pointer", oninput: (e) => exec("foreColor", e.target.value) }), + h("span", { class: "w-px h-5 bg-base-300 mx-1" }), + h("button", { + type: "button", + class: "btn btn-ghost btn-xs", + onclick: () => exec("justifyLeft") + }, h("span", { class: "icon-[lucide--align-left]" })), + h("button", { + type: "button", + class: "btn btn-ghost btn-xs", + onclick: () => exec("justifyCenter") + }, h("span", { class: "icon-[lucide--align-center]" })), + h("button", { + type: "button", + class: "btn btn-ghost btn-xs", + onclick: () => exec("justifyRight") + }, h("span", { class: "icon-[lucide--align-right]" })), + h("span", { class: "w-px h-5 bg-base-300 mx-1" }), + h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("insertUnorderedList") }, h("span", { class: "icon-[lucide--list]" })), + h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("insertOrderedList") }, h("span", { class: "icon-[lucide--list-ordered]" })), + h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("outdent") }, h("span", { class: "icon-[lucide--indent-decrease]" })), + h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("indent") }, h("span", { class: "icon-[lucide--indent-increase]" })), + h("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("formatBlock", "BLOCKQUOTE") ? "btn-active" : ""}`, onclick: () => exec("formatBlock", queryState("formatBlock", "BLOCKQUOTE") ? "P" : "BLOCKQUOTE") }, h("span", { class: "icon-[lucide--quote]" })), + h("span", { class: "w-px h-5 bg-base-300 mx-1" }), + h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => { + const url = window.prompt("URL:"); + if (url) + exec("createLink", url); + } }, h("span", { class: "icon-[lucide--link]" })), + h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => { + const input = document.createElement("input"); + input.type = "file"; + input.onchange = (e) => handleUpload(e.target.files[0]); + input.click(); + } }, h("span", { class: "icon-[lucide--paperclip]" })), + h("div", { class: "relative" }, [ + h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: (e) => { + e.stopPropagation(); + saveSelection(); + showEmojis(!showEmojis()); + } }, h("span", { class: "icon-[lucide--smile]" })), + h("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) => h("span", { class: "cursor-pointer hover:bg-base-200 p-1 rounded text-lg", onclick: (e) => { + e.stopPropagation(); + exec("insertText", emo); + showEmojis(false); + } }, emo))) + ]), + h("span", { class: "w-px h-5 bg-base-300 mx-1" }), + h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("undo") }, h("span", { class: "icon-[lucide--undo-2]" })), + h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("redo") }, h("span", { class: "icon-[lucide--redo-2]" })) + ]), + h("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()); + } }, h("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 h("div", { class: cls("border border-base-300 rounded-box bg-base-100 overflow-hidden shadow-sm flex flex-col", extraClass) }, [ + toolbar, + h("div", { class: "relative flex-1 flex flex-col", onclick: () => showEmojis(false) }, [ + h("div", { + ref: (el) => { + if (!editorRef && el) { + editorRef = el; + el.innerHTML = val(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]); + } + }), + h("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); + } + }) + ]), + h("div", { class: "px-3 py-1 border-t border-base-300 bg-base-100/50 text-[10px] text-right text-base-content/60 italic" }, [ + h("span", () => `${count()}`) + ]) + ]); +}; +export { + Editor +}; diff --git a/dist/sigpro-ui.editor.esm.min.js b/dist/sigpro-ui.editor.esm.min.js new file mode 100644 index 0000000..60c8d06 --- /dev/null +++ b/dist/sigpro-ui.editor.esm.min.js @@ -0,0 +1,7 @@ +import{$ as p,isFunc as E,h as e}from"./sigpro.js";var k=(a)=>typeof a==="function"?a():a;var w=(...a)=>a.filter(Boolean).join(" ").trim();var H=(a)=>{let{value:x,class:L}=a,l=null,r=null,i=p(!1),u=p(""),y=p(0),m=p(0),d=p(!1),C=["\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","โœ‰๏ธ","โค๏ธ"],g=()=>{let t=window.getSelection();if(t.getRangeAt&&t.rangeCount)r=t.getRangeAt(0)},T=()=>{if(r){let t=window.getSelection();t.removeAllRanges(),t.addRange(r)}},h=()=>{if(m(m()+1),l)y(l.innerText.length)},f=()=>{if(!l)return;let t=l.innerHTML;if(E(x))x(t);else a.onchange?.(t);h()},n=(t,o=null)=>{if(!l)return;if(l.focus(),r)T();document.execCommand(t,!1,o),r=null,f()},$=(t)=>{let o=document.createElement("div");o.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;";let s=document.createElement("img");s.src=t,s.style="max-width:95%;max-height:95%;box-shadow:0 0 30px rgba(0,0,0,0.5);border-radius:4px;",o.onclick=()=>document.body.removeChild(o),o.appendChild(s),document.body.appendChild(o)},v=(t)=>{if(!t)return;let o=new FileReader;o.onload=(s)=>{if(t.type.startsWith("image/")){let c=`
 `;n("insertHTML",c)}else{let c=`${t.name} `;n("insertHTML",c)}},o.readAsDataURL(t)},b=(t,o=null)=>{if(m(),!l||i())return!1;try{if(t==="formatBlock"){let s=window.getSelection().getRangeAt(0).commonAncestorContainer;while(s&&s!==l){if(s.nodeType===1&&s.tagName===o)return!0;s=s.parentNode}return!1}return document.queryCommandState(t)}catch(s){return!1}},S=e("div",{class:"flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20"},[e("div",{class:"flex flex-wrap gap-1 flex-1 items-center"},[e("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${b("bold")?"btn-active bg-primary/20":""}`,onclick:()=>n("bold")},e("span",{class:"icon-[lucide--bold]"})),e("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${b("italic")?"btn-active bg-primary/20":""}`,onclick:()=>n("italic")},e("span",{class:"icon-[lucide--italic]"})),e("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${b("underline")?"btn-active bg-primary/20":""}`,onclick:()=>n("underline")},e("span",{class:"icon-[lucide--underline]"})),e("input",{type:"color",class:"w-5 h-5 p-0 border-0 bg-transparent cursor-pointer",oninput:(t)=>n("foreColor",t.target.value)}),e("span",{class:"w-px h-5 bg-base-300 mx-1"}),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>n("justifyLeft")},e("span",{class:"icon-[lucide--align-left]"})),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>n("justifyCenter")},e("span",{class:"icon-[lucide--align-center]"})),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>n("justifyRight")},e("span",{class:"icon-[lucide--align-right]"})),e("span",{class:"w-px h-5 bg-base-300 mx-1"}),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>n("insertUnorderedList")},e("span",{class:"icon-[lucide--list]"})),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>n("insertOrderedList")},e("span",{class:"icon-[lucide--list-ordered]"})),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>n("outdent")},e("span",{class:"icon-[lucide--indent-decrease]"})),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>n("indent")},e("span",{class:"icon-[lucide--indent-increase]"})),e("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${b("formatBlock","BLOCKQUOTE")?"btn-active":""}`,onclick:()=>n("formatBlock",b("formatBlock","BLOCKQUOTE")?"P":"BLOCKQUOTE")},e("span",{class:"icon-[lucide--quote]"})),e("span",{class:"w-px h-5 bg-base-300 mx-1"}),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>{let t=window.prompt("URL:");if(t)n("createLink",t)}},e("span",{class:"icon-[lucide--link]"})),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>{let t=document.createElement("input");t.type="file",t.onchange=(o)=>v(o.target.files[0]),t.click()}},e("span",{class:"icon-[lucide--paperclip]"})),e("div",{class:"relative"},[e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:(t)=>{t.stopPropagation(),g(),d(!d())}},e("span",{class:"icon-[lucide--smile]"})),e("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:()=>d()?"display:flex":"display:none"},C.map((t)=>e("span",{class:"cursor-pointer hover:bg-base-200 p-1 rounded text-lg",onclick:(o)=>{o.stopPropagation(),n("insertText",t),d(!1)}},t)))]),e("span",{class:"w-px h-5 bg-base-300 mx-1"}),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>n("undo")},e("span",{class:"icon-[lucide--undo-2]"})),e("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>n("redo")},e("span",{class:"icon-[lucide--redo-2]"}))]),e("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${i()?"btn-active":""}`,onclick:()=>{if(!i())u(l?.innerHTML||"");else if(l)l.innerHTML=u(),f();i(!i())}},e("span",{class:"icon-[lucide--code-2]"}))]);if(typeof document<"u"&&!document.getElementById("editor-styles")){let t=document.createElement("style");t.id="editor-styles",t.textContent=` + [contenteditable="true"] div, + [contenteditable="true"] p { + margin: 0; + padding: 0; + } + `,document.head.appendChild(t)}return e("div",{class:w("border border-base-300 rounded-box bg-base-100 overflow-hidden shadow-sm flex flex-col",L)},[S,e("div",{class:"relative flex-1 flex flex-col",onclick:()=>d(!1)},[e("div",{ref:(t)=>{if(!l&&t)l=t,t.innerHTML=k(x)||"",document.execCommand("defaultParagraphSeparator",!1,"br"),t.addEventListener("click",(o)=>{let s=o.target.closest(".resizable-img-container");if(s){let c=s.querySelector("img");if(c)$(c.src)}})},style:()=>`min-height:22rem;${i()?"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:f,onkeydown:(t)=>{if(t.key==="Tab")t.preventDefault(),n("indent")},onkeyup:()=>{h(),g()},onclick:(t)=>{h(),g(),t.stopPropagation()},onmouseup:()=>{f(),g()},onpaste:(t)=>{t.preventDefault();let o=t.clipboardData.getData("text/plain");n("insertText",o)},ondragover:(t)=>t.preventDefault(),ondrop:(t)=>{t.preventDefault(),v(t.dataTransfer.files[0])}}),e("textarea",{class:"w-full flex-1 min-h-[22rem] p-4 outline-none font-mono text-sm bg-base-200 border-0",style:()=>i()?"":"display:none",value:u,oninput:(t)=>{if(u(t.target.value),l)l.innerHTML=t.target.value;a.onchange?.(t.target.value)}})]),e("div",{class:"px-3 py-1 border-t border-base-300 bg-base-100/50 text-[10px] text-right text-base-content/60 italic"},[e("span",()=>`${y()}`)])])};export{H as Editor}; diff --git a/dist/sigpro-ui.esm.js b/dist/sigpro-ui.esm.js index 9235ae9..880330b 100644 --- a/dist/sigpro-ui.esm.js +++ b/dist/sigpro-ui.esm.js @@ -1,639 +1,7 @@ -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) - }); -}; +// src/sigpro-ui.js +import { $ as $2, watch, h, mount, when, each, isFunc } from "./sigpro.js"; -// sigpro-ui.js -var exports_sigpro_ui = {}; -__export(exports_sigpro_ui, { - when: () => when, - watch: () => watch, - t: () => t, - router: () => router, - onUnmount: () => onUnmount, - mount: () => mount, - lang: () => lang, - isObj: () => isObj, - isFunc: () => isFunc, - isArr: () => isArr, - hide: () => hide, - h: () => h, - each: () => each, - currentLocale: () => currentLocale, - batch: () => batch, - 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, - Locale: () => Locale, - Loading: () => Loading, - ListRows: () => ListRows, - List: () => List, - Kbd: () => Kbd, - Input: () => Input, - Indicator: () => Indicator, - Icon: () => Icon, - Fragment: () => Fragment, - Fileinput: () => Fileinput, - Fieldset: () => Fieldset, - Fab: () => Fab, - Editor: () => Editor, - 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, - $$: () => $$, - $: () => $ -}); - -// sigpro.js -var isFunc = (f) => typeof f === "function"; -var isObj = (o) => o && typeof o === "object"; -var isArr = Array.isArray; -var doc = typeof document !== "undefined" ? document : null; -var ensureNode = (n) => n?._isRuntime ? n.container : n instanceof Node ? n : doc.createTextNode(n == null ? "" : String(n)); -var activeEffect = null; -var activeOwner = null; -var isFlushing = false; -var batchDepth = 0; -var effectQueue = new Set; -var proxyCache = new WeakMap; -var ITER = Symbol("iter"); -var MOUNTED_NODES = new WeakMap; -var SVG_NS = "http://www.w3.org/2000/svg"; -var XLINK_NS = "http://www.w3.org/1999/xlink"; -var SVG_TAGS = new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(",")); -var dispose = (eff) => { - if (!eff || eff._disposed) - return; - eff._disposed = true; - const stack = [eff]; - while (stack.length) { - const e = stack.pop(); - if (e._cleanups) { - e._cleanups.forEach((fn) => fn()); - e._cleanups.clear(); - } - if (e._children) { - e._children.forEach((child) => stack.push(child)); - e._children.clear(); - } - if (e._deps) { - e._deps.forEach((depSet) => depSet.delete(e)); - e._deps.clear(); - } - } -}; -var onUnmount = (fn) => { - if (activeOwner) - (activeOwner._cleanups ||= new Set).add(fn); -}; -var untrack = (fn) => { - const p = activeEffect; - activeEffect = null; - try { - return fn(); - } finally { - activeEffect = p; - } -}; -var createEffect = (fn, isComputed = false) => { - const effect = () => { - if (effect._disposed) - return; - if (effect._deps) - effect._deps.forEach((s) => s.delete(effect)); - if (effect._cleanups) { - effect._cleanups.forEach((c) => c()); - effect._cleanups.clear(); - } - const prevEffect = activeEffect; - const prevOwner = activeOwner; - activeEffect = activeOwner = effect; - try { - return effect._result = fn(); - } catch (e) { - console.error("[SigPro]", e); - } finally { - activeEffect = prevEffect; - activeOwner = prevOwner; - } - }; - effect._deps = effect._cleanups = effect._children = null; - effect._disposed = false; - effect._isComputed = isComputed; - effect._depth = activeEffect ? activeEffect._depth + 1 : 0; - effect._mounts = []; - effect._parent = activeOwner; - if (activeOwner) - (activeOwner._children ||= new Set).add(effect); - return effect; -}; -var flush = () => { - if (isFlushing) - return; - isFlushing = true; - const sorted = Array.from(effectQueue).sort((a, b) => a._depth - b._depth); - effectQueue.clear(); - for (const e of sorted) - if (!e._disposed) - e(); - isFlushing = false; -}; -var batch = (fn) => { - batchDepth++; - try { - return fn(); - } finally { - batchDepth--; - if (batchDepth === 0 && effectQueue.size > 0 && !isFlushing) { - flush(); - } - } -}; -var trackUpdate = (subs, trigger = false) => { - if (!trigger && activeEffect && !activeEffect._disposed) { - subs.add(activeEffect); - (activeEffect._deps ||= new Set).add(subs); - } else if (trigger && subs.size > 0) { - let hasQueue = false; - for (const e of subs) { - if (e === activeEffect || e._disposed) - continue; - if (e._isComputed) { - e._dirty = true; - if (e._subs) - trackUpdate(e._subs, true); - } else { - effectQueue.add(e); - hasQueue = true; - } - } - if (hasQueue && !isFlushing && batchDepth === 0) - queueMicrotask(flush); - } -}; -var $ = (val, key = null) => { - const subs = new Set; - if (isFunc(val)) { - let cache; - const computed = () => { - if (computed._dirty) { - const prev = activeEffect; - activeEffect = computed; - try { - const next = val(); - if (!Object.is(cache, next)) { - cache = next; - trackUpdate(subs, true); - } - } finally { - activeEffect = prev; - } - computed._dirty = false; - } - trackUpdate(subs); - return cache; - }; - computed._isComputed = true; - computed._subs = subs; - computed._dirty = true; - computed._deps = null; - computed._disposed = false; - return computed; - } - if (key) - try { - val = JSON.parse(localStorage.getItem(key)) ?? val; - } catch (e) {} - return (...args) => { - if (args.length) { - const next = isFunc(args[0]) ? args[0](val) : args[0]; - if (!Object.is(val, next)) { - val = next; - if (key) - localStorage.setItem(key, JSON.stringify(val)); - trackUpdate(subs, true); - } - } - trackUpdate(subs); - return val; - }; -}; -var $$ = (target) => { - if (!isObj(target)) - return target; - const cached = proxyCache.get(target); - if (cached) - return cached; - const subs = new Map; - const getSubs = (key) => { - let set = subs.get(key); - if (!set) - subs.set(key, set = new Set); - return set; - }; - const proxy = new Proxy(target, { - get(target2, key, receiver) { - if (typeof key !== "symbol") - trackUpdate(getSubs(key)); - return $$(Reflect.get(target2, key, receiver)); - }, - set(target2, key, value, receiver) { - const hadKey = Reflect.has(target2, key); - const oldValue = Reflect.get(target2, key, receiver); - const result = Reflect.set(target2, key, value, receiver); - if (result && !Object.is(oldValue, value)) { - trackUpdate(getSubs(key), true); - if (!hadKey) - trackUpdate(getSubs(ITER), true); - } - return result; - }, - deleteProperty(target2, key) { - const result = Reflect.deleteProperty(target2, key); - if (result) { - trackUpdate(getSubs(key), true); - trackUpdate(getSubs(ITER), true); - } - return result; - }, - ownKeys(target2) { - trackUpdate(getSubs(ITER)); - return Reflect.ownKeys(target2); - } - }); - proxyCache.set(target, proxy); - return proxy; -}; -var watch = (sources, cb) => { - if (cb === undefined) { - const effect2 = createEffect(sources); - effect2(); - return () => dispose(effect2); - } - const effect = createEffect(() => { - const vals = Array.isArray(sources) ? sources.map((s) => s()) : sources(); - untrack(() => cb(vals)); - }); - effect(); - return () => dispose(effect); -}; -var cleanupNode = (node) => { - if (!node) - return; - if (node._cleanups) { - node._cleanups.forEach((fn) => fn()); - node._cleanups.clear(); - } - if (node._ownerEffect) - dispose(node._ownerEffect); - if (node.childNodes) - node.childNodes.forEach((n) => cleanupNode(n)); -}; -var DANGEROUS_PROTOCOL = /^\s*(javascript|data|vbscript):/i; -var DANGEROUS_URI_ATTRS = new Set(["src", "href", "formaction", "action", "background", "code", "archive"]); -var isDangerousAttr = (key) => DANGEROUS_URI_ATTRS.has(key) || key.startsWith("on"); -var validateAttr = (key, val) => { - if (val == null || val === false) - return null; - if (isDangerousAttr(key)) { - const sVal = String(val); - if (DANGEROUS_PROTOCOL.test(sVal)) { - console.warn(`[SigPro] Bloqueado protocolo peligroso en ${key}`); - return "#"; - } - } - return val; -}; -var h = (tag, props = {}, children = []) => { - if (props instanceof Node || isArr(props) || !isObj(props)) { - children = props; - props = {}; - } - if (isFunc(tag)) { - const effect = createEffect(() => { - const result2 = tag(props, { - children, - emit: (ev, ...args) => props[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...args) - }); - effect._result = result2; - return result2; - }); - effect(); - const result = effect._result; - if (result == null) - return null; - const node = result instanceof Node || isArr(result) && result.every((n) => n instanceof Node) ? result : doc.createTextNode(String(result)); - const attach = (n) => { - if (isObj(n) && !n._isRuntime) { - n._mounts = effect._mounts || []; - n._cleanups = effect._cleanups || new Set; - n._ownerEffect = effect; - } - }; - isArr(node) ? node.forEach(attach) : attach(node); - return node; - } - const isSVG = SVG_TAGS.has(tag); - const el = isSVG ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag); - el._cleanups = new Set; - for (const k of Object.keys(props)) { - let v = props[k]; - if (k === "ref") { - isFunc(v) ? v(el) : v.current = el; - continue; - } - if (isSVG && k.startsWith("xlink:")) { - const cleanVal = validateAttr(k.slice(6), v); - cleanVal == null ? el.removeAttributeNS(XLINK_NS, k.slice(6)) : el.setAttributeNS(XLINK_NS, k.slice(6), cleanVal); - continue; - } - if (k.startsWith("on")) { - const ev = k.slice(2).toLowerCase(); - el.addEventListener(ev, v); - const off = () => el.removeEventListener(ev, v); - el._cleanups.add(off); - onUnmount(off); - } else if (isFunc(v)) { - const effect = createEffect(() => { - const val = validateAttr(k, v()); - if (k === "class") - el.className = val || ""; - else if (val == null) - el.removeAttribute(k); - else if (k === "style" && typeof val === "string") - el.setAttribute("style", val); - else if (k in el && !isSVG) - el[k] = val; - else - el.setAttribute(k, val === true ? "" : val); - }); - effect(); - el._cleanups.add(() => dispose(effect)); - onUnmount(() => dispose(effect)); - if (/^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName) && (k === "value" || k === "checked")) { - const evType = k === "checked" ? "change" : "input"; - el.addEventListener(evType, (ev) => v(ev.target[k])); - } - } else { - const val = validateAttr(k, v); - if (val != null) { - if (k === "style" && typeof val === "string") - el.setAttribute("style", val); - else if (k in el && !isSVG) - el[k] = val; - else - el.setAttribute(k, val === true ? "" : val); - } - } - } - const append = (c) => { - if (isArr(c)) - return c.forEach(append); - if (isFunc(c)) { - const anchor = doc.createTextNode(""); - el.appendChild(anchor); - let currentNodes = []; - const effect = createEffect(() => { - const res = c(); - const next = (isArr(res) ? res : [res]).map(ensureNode); - currentNodes.forEach((n) => { - if (n._isRuntime) - n.destroy(); - else - cleanupNode(n); - if (n.parentNode) - n.remove(); - }); - let ref = anchor; - for (let i = next.length - 1;i >= 0; i--) { - const node = next[i]; - if (node.parentNode !== ref.parentNode) - ref.parentNode?.insertBefore(node, ref); - if (node._mounts) - node._mounts.forEach((fn) => fn()); - ref = node; - } - currentNodes = next; - }); - effect(); - el._cleanups.add(() => dispose(effect)); - onUnmount(() => dispose(effect)); - } else { - const node = ensureNode(c); - el.appendChild(node); - if (node._mounts) - node._mounts.forEach((fn) => fn()); - } - }; - append(children); - return el; -}; -var render = (renderFn) => { - const cleanups = new Set; - const previousOwner = activeOwner; - const previousEffect = activeEffect; - const container = doc.createElement("div"); - container.style.display = "contents"; - container.setAttribute("role", "presentation"); - activeOwner = { _cleanups: cleanups }; - activeEffect = null; - const processResult = (result) => { - if (!result) - return; - if (result._isRuntime) { - cleanups.add(result.destroy); - container.appendChild(result.container); - } else if (isArr(result)) { - result.forEach(processResult); - } else { - container.appendChild(result instanceof Node ? result : doc.createTextNode(String(result == null ? "" : result))); - } - }; - try { - processResult(renderFn({ onCleanup: (fn) => cleanups.add(fn) })); - } finally { - activeOwner = previousOwner; - activeEffect = previousEffect; - } - return { - _isRuntime: true, - container, - destroy: () => { - cleanups.forEach((fn) => fn()); - cleanupNode(container); - container.remove(); - } - }; -}; -var when = (cond, SIP, NOP = null) => { - const anchor = doc.createTextNode(""); - const root = h("div", { style: "display:contents" }, [anchor]); - let currentView = null; - watch(() => !!(isFunc(cond) ? cond() : cond), (show) => { - if (currentView) { - currentView.destroy(); - currentView = null; - } - const content = show ? SIP : NOP; - if (content) { - currentView = render(() => isFunc(content) ? content() : content); - root.insertBefore(currentView.container, anchor); - } - }); - onUnmount(() => currentView?.destroy()); - return root; -}; -var each = (src, itemFn, keyField) => { - const anchor = doc.createTextNode(""); - const root = h("div", { style: "display:contents" }, [anchor]); - let cache = new Map; - watch(() => (isFunc(src) ? src() : src) || [], (items) => { - const nextCache = new Map; - const nextOrder = []; - const newItems = items || []; - for (let i = 0;i < newItems.length; i++) { - const item = newItems[i]; - const key = keyField ? item?.[keyField] ?? i : item?.id ?? i; - let view = cache.get(key); - if (!view) - view = render(() => itemFn(item, i)); - else - cache.delete(key); - nextCache.set(key, view); - nextOrder.push(view); - } - cache.forEach((view) => view.destroy()); - let lastRef = anchor; - for (let i = nextOrder.length - 1;i >= 0; i--) { - const view = nextOrder[i]; - const node = view.container; - if (node.nextSibling !== lastRef) - root.insertBefore(node, lastRef); - lastRef = node; - } - cache = nextCache; - }); - return root; -}; -var router = (routes) => { - const getHash = () => window.location.hash.slice(1) || "/"; - const path = $(getHash()); - const handler = () => path(getHash()); - window.addEventListener("hashchange", handler); - onUnmount(() => window.removeEventListener("hashchange", handler)); - const hook = h("div", { class: "router-hook" }); - let currentView = null; - watch([path], () => { - const cur = path(); - const route = routes.find((r) => { - const p1 = r.path.split("/").filter(Boolean); - const p2 = cur.split("/").filter(Boolean); - return p1.length === p2.length && p1.every((p, i) => p[0] === ":" || p === p2[i]); - }) || routes.find((r) => r.path === "*"); - if (route) { - currentView?.destroy(); - const params = {}; - route.path.split("/").filter(Boolean).forEach((p, i) => { - if (p[0] === ":") - params[p.slice(1)] = cur.split("/").filter(Boolean)[i]; - }); - router.params(params); - currentView = render(() => isFunc(route.component) ? route.component(params) : route.component); - hook.replaceChildren(currentView.container); - } - }); - return hook; -}; -router.params = $({}); -router.to = (p) => window.location.hash = p.replace(/^#?\/?/, "#/"); -router.back = () => window.history.back(); -router.path = () => window.location.hash.replace(/^#/, "") || "/"; -var Fragment = (props) => props.children; -var mount = (comp, target) => { - const t = typeof target === "string" ? doc.querySelector(target) : target; - if (!t) - return; - if (MOUNTED_NODES.has(t)) - MOUNTED_NODES.get(t).destroy(); - const inst = render(isFunc(comp) ? comp : () => comp); - t.replaceChildren(inst.container); - MOUNTED_NODES.set(t, inst); - return inst; -}; - -// sigpro-ui.js -if (typeof window !== "undefined") { - "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((tag) => { - window[tag] = (props, children) => h(tag, props, children); - }); -} +// src/helpers.js var val = (val2) => typeof val2 === "function" ? val2() : val2; var getBy = (item, field = "label") => item && typeof item === "object" ? item[field] : item; var cls = (...classes) => classes.filter(Boolean).join(" ").trim(); @@ -644,17 +12,81 @@ var filterBy = (items, query, field = "label") => { }; var rand = (r) => `${r}-${Math.random().toString(36).slice(2, 9)}`; var hide = () => document.activeElement?.blur(); -var lang = { - es: { - uploadFiles: "Arrastrar y soltar o click para seleccionar..." - }, - en: { - uploadFiles: "Drag and drop or click to select" - } -}; + +// src/locale.js var currentLocale = $("en"); -var Locale = (t) => currentLocale(t); +var lang = { + es: { uploadFiles: "Arrastrar y soltar o click para seleccionar..." }, + en: { uploadFiles: "Drag and drop or click to select" } +}; +var setLocale = (locale) => { + if (lang[locale]) + currentLocale(locale); +}; var t = (t2) => () => lang[currentLocale()][t2] || t2; + +// src/sigpro-ui.js +var c1 = (tag, cls2) => (p) => h(tag, { ...p, class: `${cls2} ${p?.class || ""}`.trim() }); +var c2 = (tag, cls2) => (p, c) => h(tag, { ...p, class: `${cls2} ${p?.class || ""}`.trim() }, c); +var ct = (tag, cls2, type) => (p) => h(tag, { type, ...p, class: `${cls2} ${p?.class || ""}`.trim() }); +var Alert = c2("div", "alert"); +var Avatar = (p, c) => h("div", { class: "avatar" }, h("div", { class: p.class }, c)); +var AvatarGroup = c2("div", "avatar-group -space-x-6"); +var Badge = c2("span", "badge"); +var Breadcrumbs = c2("div", "breadcrumbs"); +var Button = c2("button", "btn"); +var Card = c2("div", "card"); +var CardTitle = c2("div", "card-title"); +var CardBody = c2("div", "card-body"); +var CardActions = c2("div", "card-actions"); +var Carousel = c2("div", "carousel"); +var CarouselItem = c2("div", "carousel-item"); +var Chat = c2("div", "chat"); +var ChatBubble = c2("div", "chat-bubble"); +var ChatFooter = c2("div", "chat-footer"); +var ChatHeader = c2("div", "chat-header"); +var ChatImage = (p, c) => h("div", { ...p, class: cls("chat-image avatar", p.class) }, h("div", { class: "w-10 rounded-full" }, typeof c === "string" ? h("img", { src: c, alt: "avatar" }) : c)); +var Checkbox = ct("input", "checkbox", "checkbox"); +var Drawer = c2("div", "drawer"); +var DrawerToggle = (p) => input({ ...p, type: "checkbox", class: "drawer-toggle", checked: () => val(p.checked), onchange: (e) => isFunc(p.checked) && p.checked(e.target.checked) }); +var DrawerContent = c2("div", "drawer-content"); +var DrawerSide = c2("div", "drawer-side"); +var DrawerOverlay = (p) => label({ ...p, for: p.for, class: cls("drawer-overlay", p.class) }); +var Divider = c1("div", "divider"); +var Dropdown = c2("div", "dropdown"); +var DropdownButton = (p, c) => h("div", { ...p, tabindex: "0", role: "button", class: cls("btn", p.class) }, c); +var DropdownContent = (p, c) => h("div", { ...p, tabindex: "0", class: cls("dropdown-content", p.class) }, c); +var Fab = (p, c) => h("div", { class: "fab" }, [h("div", { tabindex: "0", role: "button", class: cls("btn", p.class) }, Icon({}, p.icon)), c]); +var Fieldset = (p, c) => h("fieldset", { class: cls("fieldset", p.class) }, [h("legend", { class: "fieldset-legend" }, p.label), c]); +var Icon = (p, c) => h("span", { ...p, class: cls(c, p.class) }); +var Indicator = (p, c) => h("div", { ...p, class: cls("indicator", p.class) }, [p.value && h("span", { class: cls("indicator-item badge", p.class) }, p.value), c]); +var Kbd = c2("kbd", "kbd"); +var List = c2("ul", "list"); +var ListRows = (p) => () => (val(p.items) || []).map((item, idx) => h("li", { class: cls("list-row", p.class, item?.class) }, typeof p.render === "function" ? p.render(item, idx) : item)); +var Loading = c2("span", "loading loading-spinner"); +var Navbar = c2("div", "navbar"); +var Progress = c1("progress", "progress"); +var Radial = (p, c) => h("div", { class: cls("radial-progress", p.class), style: `--value:${val(p.value) ?? 0};`, role: "progressbar", "aria-valuenow": p.value }, c); +var Radio = ct("input", "radio", "radio"); +var Range = ct("input", "range", "range"); +var Rating = c2("div", "rating"); +var RatingItems = (p) => [...Array(p.count)].map((_, i) => h("input", { class: cls("mask", p.class), name: p.name, type: "radio", checked: () => val(p.value) === i, onchange: () => isFunc(p.value) ? p.value(i) : p.onchange?.(i) })); +var Skeleton = c1("div", "skeleton"); +var SkeletonText = c1("span", "skeleton skeleton-text"); +var Stack = c2("div", "stack"); +var Stats = c2("div", "stats shadow"); +var Steps = c2("ul", "steps"); +var Step = (p, c) => h("li", { ...p, class: cls("step", p.class), "data-content": p.dataContent }, c); +var Swap = c2("label", "swap"); +var SwapToggle = (p) => h("input", { type: "checkbox", checked: () => val(p.value), onchange: (e) => isFunc(p.value) && p.value(e.target.checked), class: p.class }); +var SwapOn = c2("div", "swap-on"); +var SwapOff = c2("div", "swap-off"); +var Table = c2("table", "table"); +var Textarea = c1("textarea", "textarea"); +var Textrotate = (p, c) => h("span", { ...p, class: cls("text-rotate", p.class) }, h("span", {}, c)); +var Timeline = c2("ul", "timeline"); +var Toggle = ct("input", "toggle", "checkbox"); +var Tooltip = (p, c) => h("div", { ...p, class: cls("tooltip", p.class), "data-tip": p.tip }, c); var Accordion = (p) => { const name = p.name || rand("acc"); return each(p.items, (it) => { @@ -665,12 +97,9 @@ var Accordion = (p) => { ]); }); }; -var Alert = (p, c) => h("div", { ...p, class: cls("alert", p.class) }, c); -var Avatar = (p, c) => h("div", { class: "avatar" }, h("div", { class: p.class }, c)); -var AvatarGroup = (p, c) => h("div", { ...p, class: cls("avatar-group -space-x-6", p.class) }, c); var Autocomplete = ({ items, value, onselect, placeholder = "...", ...props }) => { - const query = $(val(value) || ""); - const filtered = $(() => filterBy(items, query())); + const query = $2(val(value) || ""); + const filtered = $2(() => filterBy(items, query())); const pick = (item) => { const display = getBy(item); const actual = typeof item === "string" ? item : item.value; @@ -681,21 +110,18 @@ var Autocomplete = ({ items, value, onselect, placeholder = "...", ...props }) = hide(); }; return Dropdown({ class: "w-80" }, [ - h("div", { tabindex: "0", role: "button", class: "w-full" }, Input({ ...props, placeholder, value: query, left: Icon("icon-[lucide--search]") })), + h("div", { tabindex: "0", role: "button", class: "w-full" }, Input({ ...props, placeholder, value: query, left: Icon({}, "icon-[lucide--search]") })), 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" }, h("ul", { class: "menu flex-col flex-nowrap w-full p-0" }, [ each(filtered, (item) => h("li", {}, [h("a", { onmousedown: (e) => e.preventDefault(), onclick: () => pick(item) }, getBy(item))]), "value"), () => filtered().length === 0 ? h("li", { class: "p-4 opacity-50 text-center" }, "Sin resultados") : null ])) ]); }; -var Badge = (p, c) => h("span", { ...p, class: cls("badge", p.class) }, c); -var Breadcrumbs = (p, c) => h("div", { ...p, class: cls("breadcrumbs", p.class) }, c); -var Button = (p, c) => h("button", { ...p, class: cls("btn", p.class) }, c); var Calendar = (p) => { - const internalDate = $(new Date); - const hoverDate = $(null); - const startHour = $(0); - const endHour = $(0); + const internalDate = $2(new Date); + const hoverDate = $2(null); + const startHour = $2(0); + const endHour = $2(0); const now = new Date; const todayStr = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}-${String(now.getDate()).padStart(2, "0")}`; const fmt = (d) => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`; @@ -789,18 +215,6 @@ var Calendar = (p) => { p.hour ? h("div", { class: "mt-3 pt-2 border-t border-base-300" }, rangeMode() ? h("div", { class: "flex gap-4" }, [HourSlider({ value: startHour, onChange: (h2) => startHour(h2) }), HourSlider({ value: endHour, onChange: (h2) => endHour(h2) })]) : HourSlider({ value: startHour, onChange: (h2) => startHour(h2) })) : null ]); }; -var Card = (p, c) => h("div", { ...p, class: cls("card", p.class) }, c); -var CardTitle = (p, c) => h("div", { ...p, class: cls("card-title", p.class) }, c); -var CardBody = (p, c) => h("div", { ...p, class: cls("card-body", p.class) }, c); -var CardActions = (p, c) => h("div", { ...p, class: cls("card-actions", p.class) }, c); -var Carousel = (p, c) => h("div", { ...p, class: cls("carousel", p.class) }, c); -var CarouselItem = (p, c) => h("div", { ...p, class: cls("carousel-item", p.class) }, c); -var Chat = (p, c) => h("div", { ...p, class: cls("chat", p.class) }, c); -var ChatBubble = (p, c) => h("div", { ...p, class: cls("chat-bubble", p.class) }, c); -var ChatFooter = (p, c) => h("div", { ...p, class: cls("chat-footer", p.class) }, c); -var ChatHeader = (p, c) => h("div", { ...p, class: cls("chat-header", p.class) }, c); -var ChatImage = (p, c) => h("div", { ...p, class: cls("chat-image avatar", p.class) }, h("div", { class: "w-10 rounded-full" }, typeof c === "string" ? h("img", { src: c, alt: "avatar" }) : c)); -var Checkbox = (p) => h("input", { ...p, type: "checkbox", class: cls("checkbox", p.class) }); var Colorpicker = (p) => { const current = () => val(p.value) || "#000000"; return Dropdown({}, [ @@ -900,7 +314,7 @@ var ColorPalette = (p) => { })))); }; var Datepicker = (p) => { - const displayValue = $(""); + const displayValue = $2(""); const rangeMode = () => val(p.range) === true; watch(() => { const v = val(p.value); @@ -954,21 +368,10 @@ var Datepicker = (p) => { 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: () => val(p.checked), onchange: (e) => isFunc(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) => h("div", { ...p, class: cls("divider", p.class) }); -var Dropdown = (p, c) => h("div", { ...p, class: cls("dropdown", p.class) }, c); -var DropdownButton = (p, c) => h("div", { ...p, tabindex: "0", role: "button", class: cls("btn", p.class) }, c); -var DropdownContent = (p, c) => h("div", { ...p, tabindex: "0", class: cls("dropdown-content", p.class) }, c); -var Fab = (p, c) => h("div", { class: "fab" }, [h("div", { tabindex: "0", role: "button", class: cls("btn", p.class) }, Icon(p.icon)), c]); -var Fieldset = (p, c) => h("fieldset", { class: cls("fieldset", p.class) }, [h("legend", { class: "fieldset-legend" }, p.label), c]); var Fileinput = (p) => { - const files = $([]); - const drag = $(false); - const error = $(null); + const files = $2([]); + const drag = $2(false); + const error = $2(null); const maxBytes = (p.max || 2) * 1024 * 1024; const process = (fileList) => { const arr = Array.from(fileList); @@ -1037,11 +440,9 @@ var Fileinput = (p) => { ])))) ]); }; -var Icon = (p) => h("span", { class: p.startsWith("icon-") ? p : "" }, p.startsWith("icon-") ? null : p); -var Indicator = (p, c) => h("div", { ...p, class: cls("indicator", p.class) }, [p.value && h("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 = $(false); + const showPassword = $2(false); const isPassword = p.type === "password"; const pattern = rule ?? null; const inputType = () => isPassword ? val(showPassword) ? "text" : "password" : p.type || "search"; @@ -1054,24 +455,20 @@ var Input = (p) => { right ?? null, isPassword ? Swap({ class: "ml-2" }, [ SwapToggle({ value: showPassword, class: "swap-rotate" }), - SwapOn({}, Icon("icon-[lucide--eye]")), - SwapOff({}, Icon("icon-[lucide--eye-off]")) + SwapOn({}, Icon({}, "icon-[lucide--eye]")), + SwapOff({}, Icon({}, "icon-[lucide--eye-off]")) ]) : null ]), hint ? h("div", { class: "validator-hint" }, hint) : null ]); }; -var Kbd = (p, c) => h("kbd", { ...p, class: cls("kbd", p.class) }, c); -var List = (p, c) => h("ul", { ...p, class: cls("list", p.class) }, c); -var ListRows = (p) => () => (val(p.items) || []).map((item, idx) => h("li", { class: cls("list-row", p.class, item?.class) }, typeof p.render === "function" ? p.render(item, idx) : item)); -var Loading = (p, c) => h("span", { ...p, class: cls("loading loading-spinner", p.class) }, c); var Menu = (p) => { if (p.children !== undefined) return h("ul", { class: cls("menu", p.class), ...p }, p.children); const { items } = p; - const render2 = (item) => item.children ? h("li", {}, h("details", { open: item.open || undefined }, [ + const render = (item) => item.children ? h("li", {}, h("details", { open: item.open || undefined }, [ h("summary", {}, getBy(item)), - h("ul", {}, each(() => val(item.children) || [], render2)) + h("ul", {}, each(() => val(item.children) || [], render)) ])) : h("li", {}, h("a", { href: item.href, onclick: item.onclick ? (e) => { @@ -1080,7 +477,7 @@ var Menu = (p) => { item.onclick(e); } : null }, getBy(item))); - return h("ul", { class: cls("menu", p.class) }, each(() => val(items) || [], render2)); + return h("ul", { class: cls("menu", p.class) }, each(() => val(items) || [], render)); }; var Modal = (p) => { let dialogRef = null; @@ -1104,13 +501,6 @@ var Modal = (p) => { ]) ]); }; -var Navbar = (p, c) => h("div", { ...p, class: cls("navbar", p.class) }, c); -var Progress = (p) => h("progress", { ...p, class: cls("progress", p.class) }); -var Radial = (p, c) => h("div", { class: cls("radial-progress", p.class), style: `--value:${val(p.value) ?? 0};`, role: "progressbar", "aria-valuenow": p.value }, c); -var Radio = (p) => h("input", { ...p, type: "radio", class: cls("radio", p.class) }); -var Range = (p) => h("input", { ...p, type: "range", class: cls("range", p.class) }); -var Rating = (p, c) => h("div", { ...p, class: "rating" }, c); -var RatingItems = (p) => [...Array(p.count)].map((_, i) => h("input", { class: cls("mask", p.class), name: p.name, type: "radio", checked: () => val(p.value) === i, onchange: () => isFunc(p.value) ? p.value(i) : p.onchange?.(i) })); var Select = (p, c) => { if (c !== undefined) return h("select", { class: cls("select", p.class), ...p }, c); @@ -1138,22 +528,11 @@ var Select = (p, c) => { hint ? h("div", { class: "validator-hint" }, hint) : null ]); }; -var Skeleton = (p) => h("div", { ...p, class: cls("skeleton", p.class) }); -var SkeletonText = (p) => h("span", { ...p, class: cls("skeleton skeleton-text", p.class) }); -var Stack = (p, c) => h("div", { ...p, class: cls("stack", p.class) }, c); -var Stats = (p, c) => h("div", { ...p, class: cls("stats shadow", p.class) }, c); var Stat = (p) => h("div", { ...p, class: cls("stat", p.class) }, [ p.title ? h("div", { class: "stat-title" }, p.title) : null, p.value ? h("div", { class: "stat-value" }, p.value) : null, p.desc ? h("div", { class: "stat-desc" }, p.desc) : null ]); -var Steps = (p, c) => h("ul", { ...p, class: cls("steps", p.class) }, c); -var Step = (p, c) => h("li", { ...p, class: cls("step", p.class), "data-content": p.dataContent }, c); -var Swap = (p, c) => h("label", { ...p, class: cls("swap", p.class) }, c); -var SwapToggle = (p) => h("input", { type: "checkbox", checked: () => val(p.value), onchange: (e) => isFunc(p.value) && p.value(e.target.checked), class: p.class }); -var SwapOn = (p, c) => h("div", { ...p, class: cls("swap-on", p.class) }, c); -var SwapOff = (p, c) => h("div", { ...p, class: cls("swap-off", p.class) }, c); -var Table = (p, c) => h("table", { ...p, class: cls("table", p.class) }, c); var TableItems = ({ items, columns = [], header = true }) => { const head = header !== false && columns.some((c) => c.label) ? h("thead", {}, h("tr", {}, columns.map((c) => h("th", { class: c.class }, c.label)))) : null; const body = h("tbody", {}, () => { @@ -1208,9 +587,6 @@ var Tabs = (p, c) => { }); }); }; -var Textarea = (p) => h("textarea", { ...p, class: cls("textarea", p.class) }); -var Textrotate = (p, c) => h("span", { ...p, class: cls("text-rotate", p.class) }, h("span", {}, c)); -var Timeline = (p, c) => h("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) { @@ -1221,8 +597,8 @@ var Toast = (message, type = "alert-success", duration = 3500) => { container.appendChild(host); let closeFn, timer, enterTimer; const ToastComponent = () => { - const visible = $(false); - const leaving = $(false); + const visible = $2(false); + const leaving = $2(false); closeFn = () => { if (leaving()) return; @@ -1261,270 +637,9 @@ var Toast = (message, type = "alert-success", duration = 3500) => { timer = setTimeout(closeFn, duration); return closeFn; }; -var Toggle = (p) => h("input", { ...p, type: "checkbox", class: cls("toggle", p.class) }); -var Tooltip = (p, c) => h("div", { ...p, class: cls("tooltip", p.class), "data-tip": p.tip }, c); -var Editor = (p) => { - const { value, class: extraClass } = p; - let editorRef = null; - let savedRange = null; - const isSource = $(false); - const source = $(""); - const count = $(0); - const refreshTick = $(0); - const showEmojis = $(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 (isFunc(value)) - value(html); - else - p.onchange?.(html); - triggerRefresh(); - }; - const exec = (cmd, val2 = null) => { - if (!editorRef) - return; - editorRef.focus(); - if (savedRange) - restoreSelection(); - document.execCommand(cmd, false, val2); - 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, val2 = 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 === val2) - return true; - node = node.parentNode; - } - return false; - } - return document.queryCommandState(cmd); - } catch (e) { - return false; - } - }; - const toolbar = h("div", { class: "flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20" }, [ - h("div", { class: "flex flex-wrap gap-1 flex-1 items-center" }, [ - h("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("bold") ? "btn-active bg-primary/20" : ""}`, onclick: () => exec("bold") }, h("span", { class: "icon-[lucide--bold]" })), - h("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("italic") ? "btn-active bg-primary/20" : ""}`, onclick: () => exec("italic") }, h("span", { class: "icon-[lucide--italic]" })), - h("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("underline") ? "btn-active bg-primary/20" : ""}`, onclick: () => exec("underline") }, h("span", { class: "icon-[lucide--underline]" })), - h("input", { type: "color", class: "w-5 h-5 p-0 border-0 bg-transparent cursor-pointer", oninput: (e) => exec("foreColor", e.target.value) }), - h("span", { class: "w-px h-5 bg-base-300 mx-1" }), - h("button", { - type: "button", - class: "btn btn-ghost btn-xs", - onclick: () => exec("justifyLeft") - }, h("span", { class: "icon-[lucide--align-left]" })), - h("button", { - type: "button", - class: "btn btn-ghost btn-xs", - onclick: () => exec("justifyCenter") - }, h("span", { class: "icon-[lucide--align-center]" })), - h("button", { - type: "button", - class: "btn btn-ghost btn-xs", - onclick: () => exec("justifyRight") - }, h("span", { class: "icon-[lucide--align-right]" })), - h("span", { class: "w-px h-5 bg-base-300 mx-1" }), - h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("insertUnorderedList") }, h("span", { class: "icon-[lucide--list]" })), - h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("insertOrderedList") }, h("span", { class: "icon-[lucide--list-ordered]" })), - h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("outdent") }, h("span", { class: "icon-[lucide--indent-decrease]" })), - h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("indent") }, h("span", { class: "icon-[lucide--indent-increase]" })), - h("button", { type: "button", class: () => `btn btn-ghost btn-xs ${queryState("formatBlock", "BLOCKQUOTE") ? "btn-active" : ""}`, onclick: () => exec("formatBlock", queryState("formatBlock", "BLOCKQUOTE") ? "P" : "BLOCKQUOTE") }, h("span", { class: "icon-[lucide--quote]" })), - h("span", { class: "w-px h-5 bg-base-300 mx-1" }), - h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => { - const url = window.prompt("URL:"); - if (url) - exec("createLink", url); - } }, h("span", { class: "icon-[lucide--link]" })), - h("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(); - } }, h("span", { class: "icon-[lucide--paperclip]" })), - h("div", { class: "relative" }, [ - h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: (e) => { - e.stopPropagation(); - saveSelection(); - showEmojis(!showEmojis()); - } }, h("span", { class: "icon-[lucide--smile]" })), - h("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) => h("span", { class: "cursor-pointer hover:bg-base-200 p-1 rounded text-lg", onclick: (e) => { - e.stopPropagation(); - exec("insertText", emo); - showEmojis(false); - } }, emo))) - ]), - h("span", { class: "w-px h-5 bg-base-300 mx-1" }), - h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("undo") }, h("span", { class: "icon-[lucide--undo-2]" })), - h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("redo") }, h("span", { class: "icon-[lucide--redo-2]" })) - ]), - h("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()); - } }, h("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 h("div", { class: cls("border border-base-300 rounded-box bg-base-100 overflow-hidden shadow-sm flex flex-col", extraClass) }, [ - toolbar, - h("div", { class: "relative flex-1 flex flex-col", onclick: () => showEmojis(false) }, [ - h("div", { - ref: (el) => { - if (!editorRef && el) { - editorRef = el; - el.innerHTML = val(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]); - } - }), - h("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); - } - }) - ]), - h("div", { class: "px-3 py-1 border-t border-base-300 bg-base-100/50 text-[10px] text-right text-base-content/60 italic" }, [ - h("span", () => `${count()}`) - ]) - ]); -}; -// sigpro-ui_ESM.js -var Components = { ...exports_sigpro_ui }; -if (typeof window !== "undefined") { - "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((tag) => { - window[tag] = (props, children) => h(tag, props, children); - }); -} export { - when, - watch, t, - router, - onUnmount, - mount, - lang, - isObj, - isFunc, - isArr, - hide, - h, - each, - currentLocale, - batch, + setLocale, Tooltip, Toggle, Toast, @@ -1555,7 +670,6 @@ export { Navbar, Modal, Menu, - Locale, Loading, ListRows, List, @@ -1563,11 +677,9 @@ export { Input, Indicator, Icon, - Fragment, Fileinput, Fieldset, Fab, - Editor, DropdownContent, DropdownButton, Dropdown, @@ -1578,7 +690,6 @@ export { Drawer, Divider, Datepicker, - Components, Colorpicker, ColorPalette, Checkbox, @@ -1601,7 +712,5 @@ export { Avatar, Autocomplete, Alert, - Accordion, - $$, - $ + Accordion }; diff --git a/dist/sigpro-ui.esm.min.js b/dist/sigpro-ui.esm.min.js index 45c28b4..a6999e9 100644 --- a/dist/sigpro-ui.esm.min.js +++ b/dist/sigpro-ui.esm.min.js @@ -1,7 +1 @@ -var Xn=Object.defineProperty;var jn=(n)=>n;function zn(n,t){this[n]=jn.bind(null,t)}var Mn=(n,t)=>{for(var f in t)Xn(n,f,{get:t[f],enumerable:!0,configurable:!0,set:zn.bind(t,f)})};var wn={};Mn(wn,{when:()=>i,watch:()=>d,t:()=>Cn,router:()=>B,onUnmount:()=>Y,mount:()=>m,lang:()=>Tn,isObj:()=>$,isFunc:()=>G,isArr:()=>I,hide:()=>l,h:()=>o,each:()=>V,currentLocale:()=>Nn,batch:()=>un,Tooltip:()=>it,Toggle:()=>ct,Toast:()=>at,Timeline:()=>xt,Textrotate:()=>gt,Textarea:()=>Ft,Tabs:()=>Ht,TableItems:()=>Dt,Table:()=>$t,SwapToggle:()=>Ln,SwapOn:()=>kn,SwapOff:()=>Pn,Swap:()=>Kn,Steps:()=>qt,Step:()=>Rt,Stats:()=>dt,Stat:()=>Bt,Stack:()=>Yt,SkeletonText:()=>Vt,Skeleton:()=>It,Select:()=>Zt,RatingItems:()=>Mt,Rating:()=>zt,Range:()=>jt,Radio:()=>Xt,Radial:()=>Qt,Progress:()=>Jt,Navbar:()=>Pt,Modal:()=>kt,Menu:()=>Lt,Locale:()=>$n,Loading:()=>Kt,ListRows:()=>Wt,List:()=>Ut,Kbd:()=>Gt,Input:()=>Wn,Indicator:()=>yt,Icon:()=>F,Fragment:()=>En,Fileinput:()=>et,Fieldset:()=>Ct,Fab:()=>Tt,Editor:()=>mt,DropdownContent:()=>h,DropdownButton:()=>Un,Dropdown:()=>v,DrawerToggle:()=>wt,DrawerSide:()=>At,DrawerOverlay:()=>Ot,DrawerContent:()=>bt,Drawer:()=>Nt,Divider:()=>St,Datepicker:()=>Et,Colorpicker:()=>st,ColorPalette:()=>Gn,Checkbox:()=>ut,ChatImage:()=>_t,ChatHeader:()=>rt,ChatFooter:()=>ft,ChatBubble:()=>ot,Chat:()=>tt,CarouselItem:()=>nt,Carousel:()=>pn,CardTitle:()=>ln,CardBody:()=>vn,CardActions:()=>hn,Card:()=>mn,Calendar:()=>yn,Button:()=>en,Breadcrumbs:()=>cn,Badge:()=>an,AvatarGroup:()=>gn,Avatar:()=>Fn,Autocomplete:()=>xn,Alert:()=>Hn,Accordion:()=>Dn,$$:()=>a,$:()=>K});var G=(n)=>typeof n==="function",$=(n)=>n&&typeof n==="object",I=Array.isArray,z=typeof document<"u"?document:null,bn=(n)=>n?._isRuntime?n.container:n instanceof Node?n:z.createTextNode(n==null?"":String(n)),k=null,X=null,D=!1,g=0,x=new Set,An=new WeakMap,fn=Symbol("iter"),rn=new WeakMap,Zn="http://www.w3.org/2000/svg",On="http://www.w3.org/1999/xlink",In=new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(",")),q=(n)=>{if(!n||n._disposed)return;n._disposed=!0;let t=[n];while(t.length){let f=t.pop();if(f._cleanups)f._cleanups.forEach((r)=>r()),f._cleanups.clear();if(f._children)f._children.forEach((r)=>t.push(r)),f._children.clear();if(f._deps)f._deps.forEach((r)=>r.delete(f)),f._deps.clear()}},Y=(n)=>{if(X)(X._cleanups||=new Set).add(n)},Vn=(n)=>{let t=k;k=null;try{return n()}finally{k=t}},H=(n,t=!1)=>{let f=()=>{if(f._disposed)return;if(f._deps)f._deps.forEach((s)=>s.delete(f));if(f._cleanups)f._cleanups.forEach((s)=>s()),f._cleanups.clear();let r=k,_=X;k=X=f;try{return f._result=n()}catch(s){console.error("[SigPro]",s)}finally{k=r,X=_}};if(f._deps=f._cleanups=f._children=null,f._disposed=!1,f._isComputed=t,f._depth=k?k._depth+1:0,f._mounts=[],f._parent=X,X)(X._children||=new Set).add(f);return f},Sn=()=>{if(D)return;D=!0;let n=Array.from(x).sort((t,f)=>t._depth-f._depth);x.clear();for(let t of n)if(!t._disposed)t();D=!1},un=(n)=>{g++;try{return n()}finally{if(g--,g===0&&x.size>0&&!D)Sn()}},j=(n,t=!1)=>{if(!t&&k&&!k._disposed)n.add(k),(k._deps||=new Set).add(n);else if(t&&n.size>0){let f=!1;for(let r of n){if(r===k||r._disposed)continue;if(r._isComputed){if(r._dirty=!0,r._subs)j(r._subs,!0)}else x.add(r),f=!0}if(f&&!D&&g===0)queueMicrotask(Sn)}},K=(n,t=null)=>{let f=new Set;if(G(n)){let r,_=()=>{if(_._dirty){let s=k;k=_;try{let u=n();if(!Object.is(r,u))r=u,j(f,!0)}finally{k=s}_._dirty=!1}return j(f),r};return _._isComputed=!0,_._subs=f,_._dirty=!0,_._deps=null,_._disposed=!1,_}if(t)try{n=JSON.parse(localStorage.getItem(t))??n}catch(r){}return(...r)=>{if(r.length){let _=G(r[0])?r[0](n):r[0];if(!Object.is(n,_)){if(n=_,t)localStorage.setItem(t,JSON.stringify(n));j(f,!0)}}return j(f),n}},a=(n)=>{if(!$(n))return n;let t=An.get(n);if(t)return t;let f=new Map,r=(s)=>{let u=f.get(s);if(!u)f.set(s,u=new Set);return u},_=new Proxy(n,{get(s,u,E){if(typeof u!=="symbol")j(r(u));return a(Reflect.get(s,u,E))},set(s,u,E,N){let b=Reflect.has(s,u),S=Reflect.get(s,u,N),C=Reflect.set(s,u,E,N);if(C&&!Object.is(S,E)){if(j(r(u),!0),!b)j(r(fn),!0)}return C},deleteProperty(s,u){let E=Reflect.deleteProperty(s,u);if(E)j(r(u),!0),j(r(fn),!0);return E},ownKeys(s){return j(r(fn)),Reflect.ownKeys(s)}});return An.set(n,_),_},d=(n,t)=>{if(t===void 0){let r=H(n);return r(),()=>q(r)}let f=H(()=>{let r=Array.isArray(n)?n.map((_)=>_()):n();Vn(()=>t(r))});return f(),()=>q(f)},sn=(n)=>{if(!n)return;if(n._cleanups)n._cleanups.forEach((t)=>t()),n._cleanups.clear();if(n._ownerEffect)q(n._ownerEffect);if(n.childNodes)n.childNodes.forEach((t)=>sn(t))},Yn=/^\s*(javascript|data|vbscript):/i,dn=new Set(["src","href","formaction","action","background","code","archive"]),Bn=(n)=>dn.has(n)||n.startsWith("on"),_n=(n,t)=>{if(t==null||t===!1)return null;if(Bn(n)){let f=String(t);if(Yn.test(f))return console.warn(`[SigPro] Bloqueado protocolo peligroso en ${n}`),"#"}return t},o=(n,t={},f=[])=>{if(t instanceof Node||I(t)||!$(t))f=t,t={};if(G(n)){let u=H(()=>{let S=n(t,{children:f,emit:(C,...e)=>t[`on${C[0].toUpperCase()}${C.slice(1)}`]?.(...e)});return u._result=S,S});u();let E=u._result;if(E==null)return null;let N=E instanceof Node||I(E)&&E.every((S)=>S instanceof Node)?E:z.createTextNode(String(E)),b=(S)=>{if($(S)&&!S._isRuntime)S._mounts=u._mounts||[],S._cleanups=u._cleanups||new Set,S._ownerEffect=u};return I(N)?N.forEach(b):b(N),N}let r=In.has(n),_=r?z.createElementNS(Zn,n):z.createElement(n);_._cleanups=new Set;for(let u of Object.keys(t)){let E=t[u];if(u==="ref"){G(E)?E(_):E.current=_;continue}if(r&&u.startsWith("xlink:")){let N=_n(u.slice(6),E);N==null?_.removeAttributeNS(On,u.slice(6)):_.setAttributeNS(On,u.slice(6),N);continue}if(u.startsWith("on")){let N=u.slice(2).toLowerCase();_.addEventListener(N,E);let b=()=>_.removeEventListener(N,E);_._cleanups.add(b),Y(b)}else if(G(E)){let N=H(()=>{let b=_n(u,E());if(u==="class")_.className=b||"";else if(b==null)_.removeAttribute(u);else if(u==="style"&&typeof b==="string")_.setAttribute("style",b);else if(u in _&&!r)_[u]=b;else _.setAttribute(u,b===!0?"":b)});if(N(),_._cleanups.add(()=>q(N)),Y(()=>q(N)),/^(INPUT|TEXTAREA|SELECT)$/.test(_.tagName)&&(u==="value"||u==="checked")){let b=u==="checked"?"change":"input";_.addEventListener(b,(S)=>E(S.target[u]))}}else{let N=_n(u,E);if(N!=null)if(u==="style"&&typeof N==="string")_.setAttribute("style",N);else if(u in _&&!r)_[u]=N;else _.setAttribute(u,N===!0?"":N)}}let s=(u)=>{if(I(u))return u.forEach(s);if(G(u)){let E=z.createTextNode("");_.appendChild(E);let N=[],b=H(()=>{let S=u(),C=(I(S)?S:[S]).map(bn);N.forEach((y)=>{if(y._isRuntime)y.destroy();else sn(y);if(y.parentNode)y.remove()});let e=E;for(let y=C.length-1;y>=0;y--){let O=C[y];if(O.parentNode!==e.parentNode)e.parentNode?.insertBefore(O,e);if(O._mounts)O._mounts.forEach((T)=>T());e=O}N=C});b(),_._cleanups.add(()=>q(b)),Y(()=>q(b))}else{let E=bn(u);if(_.appendChild(E),E._mounts)E._mounts.forEach((N)=>N())}};return s(f),_},c=(n)=>{let t=new Set,f=X,r=k,_=z.createElement("div");_.style.display="contents",_.setAttribute("role","presentation"),X={_cleanups:t},k=null;let s=(u)=>{if(!u)return;if(u._isRuntime)t.add(u.destroy),_.appendChild(u.container);else if(I(u))u.forEach(s);else _.appendChild(u instanceof Node?u:z.createTextNode(String(u==null?"":u)))};try{s(n({onCleanup:(u)=>t.add(u)}))}finally{X=f,k=r}return{_isRuntime:!0,container:_,destroy:()=>{t.forEach((u)=>u()),sn(_),_.remove()}}},i=(n,t,f=null)=>{let r=z.createTextNode(""),_=o("div",{style:"display:contents"},[r]),s=null;return d(()=>!!(G(n)?n():n),(u)=>{if(s)s.destroy(),s=null;let E=u?t:f;if(E)s=c(()=>G(E)?E():E),_.insertBefore(s.container,r)}),Y(()=>s?.destroy()),_},V=(n,t,f)=>{let r=z.createTextNode(""),_=o("div",{style:"display:contents"},[r]),s=new Map;return d(()=>(G(n)?n():n)||[],(u)=>{let E=new Map,N=[],b=u||[];for(let C=0;Ct(e,C));else s.delete(y);E.set(y,O),N.push(O)}s.forEach((C)=>C.destroy());let S=r;for(let C=N.length-1;C>=0;C--){let y=N[C].container;if(y.nextSibling!==S)_.insertBefore(y,S);S=y}s=E}),_},B=(n)=>{let t=()=>window.location.hash.slice(1)||"/",f=K(t()),r=()=>f(t());window.addEventListener("hashchange",r),Y(()=>window.removeEventListener("hashchange",r));let _=o("div",{class:"router-hook"}),s=null;return d([f],()=>{let u=f(),E=n.find((N)=>{let b=N.path.split("/").filter(Boolean),S=u.split("/").filter(Boolean);return b.length===S.length&&b.every((C,e)=>C[0]===":"||C===S[e])})||n.find((N)=>N.path==="*");if(E){s?.destroy();let N={};E.path.split("/").filter(Boolean).forEach((b,S)=>{if(b[0]===":")N[b.slice(1)]=u.split("/").filter(Boolean)[S]}),B.params(N),s=c(()=>G(E.component)?E.component(N):E.component),_.replaceChildren(s.container)}}),_};B.params=K({});B.to=(n)=>window.location.hash=n.replace(/^#?\/?/,"#/");B.back=()=>window.history.back();B.path=()=>window.location.hash.replace(/^#/,"")||"/";var En=(n)=>n.children,m=(n,t)=>{let f=typeof t==="string"?z.querySelector(t):t;if(!f)return;if(rn.has(f))rn.get(f).destroy();let r=c(G(n)?n:()=>n);return f.replaceChildren(r.container),rn.set(f,r),r};if(typeof window<"u")"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((n)=>{window[n]=(t,f)=>o(n,t,f)});var W=(n)=>typeof n==="function"?n():n,R=(n,t="label")=>n&&typeof n==="object"?n[t]:n,w=(...n)=>n.filter(Boolean).join(" ").trim(),qn=(n,t,f="label")=>{let r=String(W(t)||"").toLowerCase(),_=(W(n)||[]).map((s)=>typeof s==="object"?s:{label:s,value:s});return!r?_:_.filter((s)=>String(s[f]||"").toLowerCase().includes(r))},Rn=(n)=>`${n}-${Math.random().toString(36).slice(2,9)}`,l=()=>document.activeElement?.blur(),Tn={es:{uploadFiles:"Arrastrar y soltar o click para seleccionar..."},en:{uploadFiles:"Drag and drop or click to select"}},Nn=K("en"),$n=(n)=>Nn(n),Cn=(n)=>()=>Tn[Nn()][n]||n,Dn=(n)=>{let t=n.name||Rn("acc");return V(n.items,(f)=>{return o("div",{class:w("collapse",n.class)},[o("input",{type:"radio",name:t,checked:f.open||void 0}),f.title?o("div",{class:w("collapse-title",`${f.classTitle??" font-semibold"}`)},f.title):null,f.content?o("div",{class:w("collapse-content text-sm",`${f.classContent??" font-semibold"}`)},f.content):null])})},Hn=(n,t)=>o("div",{...n,class:w("alert",n.class)},t),Fn=(n,t)=>o("div",{class:"avatar"},o("div",{class:n.class},t)),gn=(n,t)=>o("div",{...n,class:w("avatar-group -space-x-6",n.class)},t),xn=({items:n,value:t,onselect:f,placeholder:r="...",..._})=>{let s=K(W(t)||""),u=K(()=>qn(n,s())),E=(N)=>{let b=R(N),S=typeof N==="string"?N:N.value;if(s(b),G(t))t(S);f?.(N),l()};return v({class:"w-80"},[o("div",{tabindex:"0",role:"button",class:"w-full"},Wn({..._,placeholder:r,value:s,left:F("icon-[lucide--search]")})),h({class:"p-2 bg-base-100 rounded-box shadow-xl w-full max-h-60 overflow-y-auto border border-base-300 z-50"},o("ul",{class:"menu flex-col flex-nowrap w-full p-0"},[V(u,(N)=>o("li",{},[o("a",{onmousedown:(b)=>b.preventDefault(),onclick:()=>E(N)},R(N))]),"value"),()=>u().length===0?o("li",{class:"p-4 opacity-50 text-center"},"Sin resultados"):null]))])},an=(n,t)=>o("span",{...n,class:w("badge",n.class)},t),cn=(n,t)=>o("div",{...n,class:w("breadcrumbs",n.class)},t),en=(n,t)=>o("button",{...n,class:w("btn",n.class)},t),yn=(n)=>{let t=K(new Date),f=K(null),r=K(0),_=K(0),s=new Date,u=`${s.getFullYear()}-${String(s.getMonth()+1).padStart(2,"0")}-${String(s.getDate()).padStart(2,"0")}`,E=(O)=>`${O.getFullYear()}-${String(O.getMonth()+1).padStart(2,"0")}-${String(O.getDate()).padStart(2,"0")}`,N=()=>W(n.range)===!0,b=()=>W(n.value),S=(O)=>{let T=E(O),J=b();if(N())if(!J?.start||J.start&&J.end)n.onChange?.({start:T,end:null,...n.hour&&{startHour:r()}});else{let M=J.start,Q=T{let T=t();t(new Date(T.getFullYear(),T.getMonth()+O,1))},e=(O)=>{let T=t();t(new Date(T.getFullYear()+O,T.getMonth(),1))},y=({value:O,onChange:T})=>o("div",{class:"flex-1"},[o("div",{class:"flex gap-2 items-center"},[o("input",{type:"range",min:0,max:23,value:O,class:"range range-xs flex-1",oninput:(J)=>T(+J.target.value)}),o("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(W(O)).padStart(2,"0")+":00")])]);return o("div",{class:w("p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box w-80 select-none",n.class)},[o("div",{class:"flex justify-between items-center mb-4 gap-1"},[o("div",{class:"flex gap-0.5"},[o("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>e(-1)},o("span",{class:"icon-[lucide--chevrons-left]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>C(-1)},o("span",{class:"icon-[lucide--chevron-left]"}))]),o("span",{class:"font-bold uppercase flex-1 text-center"},()=>t().toLocaleString("es-ES",{month:"short",year:"numeric"})),o("div",{class:"flex gap-0.5"},[o("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>C(1)},o("span",{class:"icon-[lucide--chevron-right]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>e(1)},o("span",{class:"icon-[lucide--chevrons-right]"}))])]),o("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>f(null)},[...["L","M","X","J","V","S","D"].map((O)=>o("div",{class:"text-[10px] opacity-40 font-bold text-center"},O)),()=>{let O=t(),T=O.getFullYear(),J=O.getMonth(),M=new Date(T,J,1).getDay(),Q=M===0?6:M-1,p=new Date(T,J+1,0).getDate(),A=[];for(let U=0;U{let Z=b(),nn=f(),Jn=typeof Z==="string"?Z.split("T")[0]===P:Z?.start===P,Qn=Z?.end===P,tn=!1;if(N()&&Z?.start){let on=Z.start;if(!Z.end&&nn)tn=P>on&&P<=nn||P=nn;else if(Z.end)tn=P>on&&PN()&&f(P),onclick:()=>S(L)},U.toString()))}return A}]),n.hour?o("div",{class:"mt-3 pt-2 border-t border-base-300"},N()?o("div",{class:"flex gap-4"},[y({value:r,onChange:(O)=>r(O)}),y({value:_,onChange:(O)=>_(O)})]):y({value:r,onChange:(O)=>r(O)})):null])},mn=(n,t)=>o("div",{...n,class:w("card",n.class)},t),ln=(n,t)=>o("div",{...n,class:w("card-title",n.class)},t),vn=(n,t)=>o("div",{...n,class:w("card-body",n.class)},t),hn=(n,t)=>o("div",{...n,class:w("card-actions",n.class)},t),pn=(n,t)=>o("div",{...n,class:w("carousel",n.class)},t),nt=(n,t)=>o("div",{...n,class:w("carousel-item",n.class)},t),tt=(n,t)=>o("div",{...n,class:w("chat",n.class)},t),ot=(n,t)=>o("div",{...n,class:w("chat-bubble",n.class)},t),ft=(n,t)=>o("div",{...n,class:w("chat-footer",n.class)},t),rt=(n,t)=>o("div",{...n,class:w("chat-header",n.class)},t),_t=(n,t)=>o("div",{...n,class:w("chat-image avatar",n.class)},o("div",{class:"w-10 rounded-full"},typeof t==="string"?o("img",{src:t,alt:"avatar"}):t)),ut=(n)=>o("input",{...n,type:"checkbox",class:w("checkbox",n.class)}),st=(n)=>{let t=()=>W(n.value)||"#000000";return v({},[Un({class:"btn"},[o("div",{class:"size-5 rounded-sm",style:()=>`background-color: ${t()}`}),n.label&&o("span",{},n.label)]),h({class:"p-0"},Gn({value:n.value,onchange:(f)=>{G(n.value)?n.value(f):n.onchange?.(f)}}))])},Gn=(n)=>{let t=()=>W(n.value)||"#000000",f=["#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"],r=(_)=>{G(n.value)?n.value(_):n.onchange?.(_),l()};return o("div",{class:w("p-3 bg-base-100 rounded-box shadow w-64",n.class)},o("div",{class:"grid grid-cols-8 gap-1"},f.map((_)=>o("button",{type:"button",style:`background-color: ${_}`,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 p-0 min-h-0 ${t().toLowerCase()===_.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{r(_)}}))))},Et=(n)=>{let t=K(""),f=()=>W(n.range)===!0;d(()=>{let _=W(n.value);if(!_)return t("");let s="";if(typeof _==="string")s=n.hour&&_.includes("T")?_.replace("T"," "):_;else if(_.start&&_.end){let u=n.hour&&_.startHour!=null?`${_.start} ${String(_.startHour).padStart(2,"0")}:00`:_.start,E=n.hour&&_.endHour!=null?`${_.end} ${String(_.endHour).padStart(2,"0")}:00`:_.end;s=`${u} - ${E}`}else if(_.start)s=`${n.hour&&_.startHour!=null?`${_.start} ${String(_.startHour).padStart(2,"0")}:00`:_.start}...`;t(s)});let r=(_)=>{if(G(n.value))n.value(_);else n.onChange?.(_);if(!f()||_?.end!=null)l()};return v({class:w("w-full",n.class)},[o("label",{tabindex:"0",role:"button",class:"input input-bordered flex items-center gap-2 cursor-pointer"},[o("span",{class:"icon-[lucide--calendar] shrink-0"}),o("span",{class:()=>`grow text-left truncate ${!t()?"opacity-50":""}`},()=>t()||n.placeholder||(f()?"Seleccionar rango...":"Seleccionar fecha...")),()=>t()?o("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle -mr-2",onmousedown:(_)=>{if(_.preventDefault(),_.stopPropagation(),G(n.value))n.value(null);else n.onChange?.(null);t("")}},o("span",{class:"icon-[lucide--x] opacity-50"})):null]),h({class:"p-0"},yn({value:n.value,range:f(),hour:n.hour,onChange:r}))])},Nt=(n,t)=>div({...n,class:w("drawer",n.class)},t),wt=(n)=>input({...n,type:"checkbox",class:"drawer-toggle",checked:()=>W(n.checked),onchange:(t)=>G(n.checked)&&n.checked(t.target.checked)}),bt=(n,t)=>div({...n,class:w("drawer-content",n.class)},t),At=(n,t)=>div({...n,class:w("drawer-side",n.class)},t),Ot=(n)=>label({...n,for:n.for,class:w("drawer-overlay",n.class)}),St=(n)=>o("div",{...n,class:w("divider",n.class)}),v=(n,t)=>o("div",{...n,class:w("dropdown",n.class)},t),Un=(n,t)=>o("div",{...n,tabindex:"0",role:"button",class:w("btn",n.class)},t),h=(n,t)=>o("div",{...n,tabindex:"0",class:w("dropdown-content",n.class)},t),Tt=(n,t)=>o("div",{class:"fab"},[o("div",{tabindex:"0",role:"button",class:w("btn",n.class)},F(n.icon)),t]),Ct=(n,t)=>o("fieldset",{class:w("fieldset",n.class)},[o("legend",{class:"fieldset-legend"},n.label),t]),et=(n)=>{let t=K([]),f=K(!1),r=K(null),_=(n.max||2)*1024*1024,s=(E)=>{let N=Array.from(E);if(r(null),N.some((S)=>S.size>_)){r(`Mรกx ${n.max||2}MB`);return}let b=[...t(),...N];if(t(b),G(n.onselect))n.onselect(b);else if(G(n.value))n.value(b)},u=(E)=>{let N=t().filter((b,S)=>S!==E);if(t(N),G(n.onselect))n.onselect(N);else if(G(n.value))n.value(N)};return o("div",{class:w("fieldset w-full p-0",n.class)},[o("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 ${f()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"}`,ondragover:(E)=>{E.preventDefault(),f(!0)},ondragleave:()=>f(!1),ondrop:(E)=>{E.preventDefault(),f(!1),s(E.dataTransfer.files)}},[o("div",{class:"flex items-center gap-3 w-full"},[o("span",{class:"icon-[lucide--upload]"}),o("span",{class:"text-sm opacity-70 truncate grow text-left"},Cn("uploadFiles")),o("span",{class:"text-[10px] opacity-40 shrink-0"},`Mรกx ${n.max||2}MB`)]),o("input",{type:"file",multiple:!0,accept:n.accept||"*",class:"hidden",onchange:(E)=>s(E.target.files)})]),()=>r()&&o("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},r()),i(()=>t().length>0,()=>o("ul",{class:"mt-2 space-y-1"},V(t,(E,N)=>o("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[o("div",{class:"flex items-center gap-2 truncate"},[o("span",{class:"opacity-50"},"\uD83D\uDCC4"),o("span",{class:"truncate font-medium max-w-[200px]"},E.name),o("span",{class:"text-[9px] opacity-40"},`(${(E.size/1024).toFixed(0)} KB)`)]),o("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(b)=>{b.preventDefault(),u(N)}},o("span",{class:"icon-[lucide--x]"}))]))))])},F=(n)=>o("span",{class:n.startsWith("icon-")?n:""},n.startsWith("icon-")?null:n),yt=(n,t)=>o("div",{...n,class:w("indicator",n.class)},[n.value&&o("span",{class:w("indicator-item badge",n.class)},n.value),t]),Wn=(n)=>{let{label:t,icon:f,float:r,placeholder:_,value:s,left:u,right:E,rule:N,hint:b,content:S,...C}=n,e=K(!1),y=n.type==="password",O=N??null,T=()=>y?W(e)?"text":"password":n.type||"search";return o("label",{class:r?"floating-label":""},[r?o("span",{},t):null,o("label",{pattern:O,class:()=>w("input validator",n.class)},[t&&!r?o("span",{class:"label"},t):null,u??null,o("input",{...C,type:T,class:"grow",pattern:O,placeholder:_||t||" ",value:s}),E??null,y?Kn({class:"ml-2"},[Ln({value:e,class:"swap-rotate"}),kn({},F("icon-[lucide--eye]")),Pn({},F("icon-[lucide--eye-off]"))]):null]),b?o("div",{class:"validator-hint"},b):null])},Gt=(n,t)=>o("kbd",{...n,class:w("kbd",n.class)},t),Ut=(n,t)=>o("ul",{...n,class:w("list",n.class)},t),Wt=(n)=>()=>(W(n.items)||[]).map((t,f)=>o("li",{class:w("list-row",n.class,t?.class)},typeof n.render==="function"?n.render(t,f):t)),Kt=(n,t)=>o("span",{...n,class:w("loading loading-spinner",n.class)},t),Lt=(n)=>{if(n.children!==void 0)return o("ul",{class:w("menu",n.class),...n},n.children);let{items:t}=n,f=(r)=>r.children?o("li",{},o("details",{open:r.open||void 0},[o("summary",{},R(r)),o("ul",{},V(()=>W(r.children)||[],f))])):o("li",{},o("a",{href:r.href,onclick:r.onclick?(_)=>{if(!r.href)_.preventDefault();r.onclick(_)}:null},R(r)));return o("ul",{class:w("menu",n.class)},V(()=>W(t)||[],f))},kt=(n)=>{let t=null;d(()=>{let r=W(n.open);if(!t)return;r?t.showModal():t.hide()});let f=()=>G(n.open)&&n.open(!1);return o("dialog",{...n,ref:(r)=>t=r,class:w("modal",n.class),onclose:f,oncancel:f},[o("div",{class:"modal-box"},[n.title&&o("h3",{class:"text-lg font-bold"},n.title),n.children,o("div",{class:"modal-action"},[n.actions||en({class:"btn",onclick:f},"Cerrar")])]),o("form",{method:"dialog",class:"modal-backdrop"},[o("button",{},"close")])])},Pt=(n,t)=>o("div",{...n,class:w("navbar",n.class)},t),Jt=(n)=>o("progress",{...n,class:w("progress",n.class)}),Qt=(n,t)=>o("div",{class:w("radial-progress",n.class),style:`--value:${W(n.value)??0};`,role:"progressbar","aria-valuenow":n.value},t),Xt=(n)=>o("input",{...n,type:"radio",class:w("radio",n.class)}),jt=(n)=>o("input",{...n,type:"range",class:w("range",n.class)}),zt=(n,t)=>o("div",{...n,class:"rating"},t),Mt=(n)=>[...Array(n.count)].map((t,f)=>o("input",{class:w("mask",n.class),name:n.name,type:"radio",checked:()=>W(n.value)===f,onchange:()=>G(n.value)?n.value(f):n.onchange?.(f)})),Zt=(n,t)=>{if(t!==void 0)return o("select",{class:w("select",n.class),...n},t);let{label:f,float:r,placeholder:_,placeholderDisabled:s=!0,value:u,left:E,right:N,hint:b,items:S,keyFn:C,...e}=n,y=()=>{let O=W(S)||[];return[..._?[{disabled:s,label:_,value:""}]:[],...O]};return o("label",{class:r?"floating-label":""},[r?o("span",{},f):null,o("label",{class:w("select",e.class)},[!r&&f?o("span",{class:"label"},f):null,E??null,o("select",{value:()=>W(u),onchange:(O)=>G(u)?u(O.target.value):e.onchange?.(O)},V(y,(O)=>{let T=R(O,O.value!==void 0?"value":void 0),J=R(O,"label");return o("option",{value:T,disabled:O.disabled||void 0},J)})),N??null]),b?o("div",{class:"validator-hint"},b):null])},It=(n)=>o("div",{...n,class:w("skeleton",n.class)}),Vt=(n)=>o("span",{...n,class:w("skeleton skeleton-text",n.class)}),Yt=(n,t)=>o("div",{...n,class:w("stack",n.class)},t),dt=(n,t)=>o("div",{...n,class:w("stats shadow",n.class)},t),Bt=(n)=>o("div",{...n,class:w("stat",n.class)},[n.title?o("div",{class:"stat-title"},n.title):null,n.value?o("div",{class:"stat-value"},n.value):null,n.desc?o("div",{class:"stat-desc"},n.desc):null]),qt=(n,t)=>o("ul",{...n,class:w("steps",n.class)},t),Rt=(n,t)=>o("li",{...n,class:w("step",n.class),"data-content":n.dataContent},t),Kn=(n,t)=>o("label",{...n,class:w("swap",n.class)},t),Ln=(n)=>o("input",{type:"checkbox",checked:()=>W(n.value),onchange:(t)=>G(n.value)&&n.value(t.target.checked),class:n.class}),kn=(n,t)=>o("div",{...n,class:w("swap-on",n.class)},t),Pn=(n,t)=>o("div",{...n,class:w("swap-off",n.class)},t),$t=(n,t)=>o("table",{...n,class:w("table",n.class)},t),Dt=({items:n,columns:t=[],header:f=!0})=>{let r=f!==!1&&t.some((s)=>s.label)?o("thead",{},o("tr",{},t.map((s)=>o("th",{class:s.class},s.label)))):null,_=o("tbody",{},()=>{return(W(n)||[]).map((u,E)=>o("tr",{},t.map((N)=>{let b=N.render?N.render(u,E):u[N.key];return o("td",{class:N.class},b)})))});return[r,_].filter(Boolean)},Ht=(n,t)=>{if(!n.items){let{class:b,...S}=n;return o("div",{...S,class:w("tabs",b)},t)}let{items:f,activeIndex:r,onClose:_,class:s,...u}=n,E=(b)=>G(b)?b():b,N=_||(G(f)?(b,S)=>{let e=W(f).filter((y,O)=>O!==b);if(f(e),r()>=e.length)r(Math.max(0,e.length-1))}:null);return o("div",{...u,class:w("tabs",s)},()=>{return(W(f)||[]).flatMap((S,C)=>{let e=()=>r()===C,y=o("button",{class:()=>`tab ${e()?"tab-active":""} ${S.class||""}`,onclick:(T)=>{T.preventDefault(),r(C),S.onclick?.(T)}},[R(S),S.closable?o("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:(T)=>{T.stopPropagation(),N?.(C,S)}},o("span",{class:"icon-[lucide--x] w-3 h-3"})):null]),O=o("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>`display: ${e()?"block":"none"};`},G(S.content)?S.content():S.content);return[y,O]})})},Ft=(n)=>o("textarea",{...n,class:w("textarea",n.class)}),gt=(n,t)=>o("span",{...n,class:w("text-rotate",n.class)},o("span",{},t)),xt=(n,t)=>o("ul",{...n,class:w("timeline",n.class)},t),at=(n,t="alert-success",f=3500)=>{let r=document.getElementById("sigpro-toast-container");if(!r)r=o("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(r);let _=o("div",{style:"display: contents"});r.appendChild(_);let s,u,E,b=m(()=>{let S=K(!1),C=K(!1);s=()=>{if(C())return;clearTimeout(u),clearTimeout(E),C(!0),setTimeout(()=>{if(b.destroy(),_.remove(),!r.hasChildNodes())r.remove()},300)},E=setTimeout(()=>S(!0),0);let e=typeof n==="function"?W(n):n,y=typeof e==="string"?o("span",{},e):e;return o("div",{class:()=>{let O=`alert alert-soft ${t} shadow-lg transition-all duration-300 inline-flex w-auto whitespace-nowrap pointer-events-auto`;if(C())return`${O} translate-x-full opacity-0`;if(S())return`${O} translate-x-0 opacity-100`;return`${O} translate-x-10 opacity-0`}},[y,o("button",{class:"btn btn-xs btn-circle btn-ghost",onclick:s},o("span",{class:"icon-[lucide--x]"}))])},_);if(f>0)u=setTimeout(s,f);return s},ct=(n)=>o("input",{...n,type:"checkbox",class:w("toggle",n.class)}),it=(n,t)=>o("div",{...n,class:w("tooltip",n.class),"data-tip":n.tip},t),mt=(n)=>{let{value:t,class:f}=n,r=null,_=null,s=K(!1),u=K(""),E=K(0),N=K(0),b=K(!1),S=["\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","โœ‰๏ธ","โค๏ธ"],C=()=>{let A=window.getSelection();if(A.getRangeAt&&A.rangeCount)_=A.getRangeAt(0)},e=()=>{if(_){let A=window.getSelection();A.removeAllRanges(),A.addRange(_)}},y=()=>{if(N(N()+1),r)E(r.innerText.length)},O=()=>{if(!r)return;let A=r.innerHTML;if(G(t))t(A);else n.onchange?.(A);y()},T=(A,U=null)=>{if(!r)return;if(r.focus(),_)e();document.execCommand(A,!1,U),_=null,O()},J=(A)=>{let U=document.createElement("div");U.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;";let L=document.createElement("img");L.src=A,L.style="max-width:95%;max-height:95%;box-shadow:0 0 30px rgba(0,0,0,0.5);border-radius:4px;",U.onclick=()=>document.body.removeChild(U),U.appendChild(L),document.body.appendChild(U)},M=(A)=>{if(!A)return;let U=new FileReader;U.onload=(L)=>{if(A.type.startsWith("image/")){let P=`
 `;T("insertHTML",P)}else{let P=`${A.name} `;T("insertHTML",P)}},U.readAsDataURL(A)},Q=(A,U=null)=>{if(N(),!r||s())return!1;try{if(A==="formatBlock"){let L=window.getSelection().getRangeAt(0).commonAncestorContainer;while(L&&L!==r){if(L.nodeType===1&&L.tagName===U)return!0;L=L.parentNode}return!1}return document.queryCommandState(A)}catch(L){return!1}},p=o("div",{class:"flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20"},[o("div",{class:"flex flex-wrap gap-1 flex-1 items-center"},[o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${Q("bold")?"btn-active bg-primary/20":""}`,onclick:()=>T("bold")},o("span",{class:"icon-[lucide--bold]"})),o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${Q("italic")?"btn-active bg-primary/20":""}`,onclick:()=>T("italic")},o("span",{class:"icon-[lucide--italic]"})),o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${Q("underline")?"btn-active bg-primary/20":""}`,onclick:()=>T("underline")},o("span",{class:"icon-[lucide--underline]"})),o("input",{type:"color",class:"w-5 h-5 p-0 border-0 bg-transparent cursor-pointer",oninput:(A)=>T("foreColor",A.target.value)}),o("span",{class:"w-px h-5 bg-base-300 mx-1"}),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>T("justifyLeft")},o("span",{class:"icon-[lucide--align-left]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>T("justifyCenter")},o("span",{class:"icon-[lucide--align-center]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>T("justifyRight")},o("span",{class:"icon-[lucide--align-right]"})),o("span",{class:"w-px h-5 bg-base-300 mx-1"}),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>T("insertUnorderedList")},o("span",{class:"icon-[lucide--list]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>T("insertOrderedList")},o("span",{class:"icon-[lucide--list-ordered]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>T("outdent")},o("span",{class:"icon-[lucide--indent-decrease]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>T("indent")},o("span",{class:"icon-[lucide--indent-increase]"})),o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${Q("formatBlock","BLOCKQUOTE")?"btn-active":""}`,onclick:()=>T("formatBlock",Q("formatBlock","BLOCKQUOTE")?"P":"BLOCKQUOTE")},o("span",{class:"icon-[lucide--quote]"})),o("span",{class:"w-px h-5 bg-base-300 mx-1"}),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>{let A=window.prompt("URL:");if(A)T("createLink",A)}},o("span",{class:"icon-[lucide--link]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>{let A=document.createElement("input");A.type="file",A.onchange=(U)=>M(U.target.files[0]),A.click()}},o("span",{class:"icon-[lucide--paperclip]"})),o("div",{class:"relative"},[o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:(A)=>{A.stopPropagation(),C(),b(!b())}},o("span",{class:"icon-[lucide--smile]"})),o("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:()=>b()?"display:flex":"display:none"},S.map((A)=>o("span",{class:"cursor-pointer hover:bg-base-200 p-1 rounded text-lg",onclick:(U)=>{U.stopPropagation(),T("insertText",A),b(!1)}},A)))]),o("span",{class:"w-px h-5 bg-base-300 mx-1"}),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>T("undo")},o("span",{class:"icon-[lucide--undo-2]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>T("redo")},o("span",{class:"icon-[lucide--redo-2]"}))]),o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${s()?"btn-active":""}`,onclick:()=>{if(!s())u(r?.innerHTML||"");else if(r)r.innerHTML=u(),O();s(!s())}},o("span",{class:"icon-[lucide--code-2]"}))]);if(typeof document<"u"&&!document.getElementById("editor-styles")){let A=document.createElement("style");A.id="editor-styles",A.textContent=` - [contenteditable="true"] div, - [contenteditable="true"] p { - margin: 0; - padding: 0; - } - `,document.head.appendChild(A)}return o("div",{class:w("border border-base-300 rounded-box bg-base-100 overflow-hidden shadow-sm flex flex-col",f)},[p,o("div",{class:"relative flex-1 flex flex-col",onclick:()=>b(!1)},[o("div",{ref:(A)=>{if(!r&&A)r=A,A.innerHTML=W(t)||"",document.execCommand("defaultParagraphSeparator",!1,"br"),A.addEventListener("click",(U)=>{let L=U.target.closest(".resizable-img-container");if(L){let P=L.querySelector("img");if(P)J(P.src)}})},style:()=>`min-height:22rem;${s()?"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:O,onkeydown:(A)=>{if(A.key==="Tab")A.preventDefault(),T("indent")},onkeyup:()=>{y(),C()},onclick:(A)=>{y(),C(),A.stopPropagation()},onmouseup:()=>{O(),C()},onpaste:(A)=>{A.preventDefault();let U=A.clipboardData.getData("text/plain");T("insertText",U)},ondragover:(A)=>A.preventDefault(),ondrop:(A)=>{A.preventDefault(),M(A.dataTransfer.files[0])}}),o("textarea",{class:"w-full flex-1 min-h-[22rem] p-4 outline-none font-mono text-sm bg-base-200 border-0",style:()=>s()?"":"display:none",value:u,oninput:(A)=>{if(u(A.target.value),r)r.innerHTML=A.target.value;n.onchange?.(A.target.value)}})]),o("div",{class:"px-3 py-1 border-t border-base-300 bg-base-100/50 text-[10px] text-right text-base-content/60 italic"},[o("span",()=>`${E()}`)])])};var oo={...wn};if(typeof window<"u")"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((n)=>{window[n]=(t,f)=>o(n,t,f)});export{i as when,d as watch,Cn as t,B as router,Y as onUnmount,m as mount,Tn as lang,$ as isObj,G as isFunc,I as isArr,l as hide,o as h,V as each,Nn as currentLocale,un as batch,it as Tooltip,ct as Toggle,at as Toast,xt as Timeline,gt as Textrotate,Ft as Textarea,Ht as Tabs,Dt as TableItems,$t as Table,Ln as SwapToggle,kn as SwapOn,Pn as SwapOff,Kn as Swap,qt as Steps,Rt as Step,dt as Stats,Bt as Stat,Yt as Stack,Vt as SkeletonText,It as Skeleton,Zt as Select,Mt as RatingItems,zt as Rating,jt as Range,Xt as Radio,Qt as Radial,Jt as Progress,Pt as Navbar,kt as Modal,Lt as Menu,$n as Locale,Kt as Loading,Wt as ListRows,Ut as List,Gt as Kbd,Wn as Input,yt as Indicator,F as Icon,En as Fragment,et as Fileinput,Ct as Fieldset,Tt as Fab,mt as Editor,h as DropdownContent,Un as DropdownButton,v as Dropdown,wt as DrawerToggle,At as DrawerSide,Ot as DrawerOverlay,bt as DrawerContent,Nt as Drawer,St as Divider,Et as Datepicker,oo as Components,st as Colorpicker,Gn as ColorPalette,ut as Checkbox,_t as ChatImage,rt as ChatHeader,ft as ChatFooter,ot as ChatBubble,tt as Chat,nt as CarouselItem,pn as Carousel,ln as CardTitle,vn as CardBody,hn as CardActions,mn as Card,yn as Calendar,en as Button,cn as Breadcrumbs,an as Badge,gn as AvatarGroup,Fn as Avatar,xn as Autocomplete,Hn as Alert,Dn as Accordion,a as $$,K as $}; +import{$ as M,watch as h,h as j,mount as t,when as e,each as V,isFunc as A}from"./sigpro.js";var z=(L)=>typeof L==="function"?L():L,S=(L,k="label")=>L&&typeof L==="object"?L[k]:L,W=(...L)=>L.filter(Boolean).join(" ").trim(),r=(L,k,E="label")=>{let G=String(z(k)||"").toLowerCase(),J=(z(L)||[]).map((Q)=>typeof Q==="object"?Q:{label:Q,value:Q});return!G?J:J.filter((Q)=>String(Q[E]||"").toLowerCase().includes(G))},n=(L)=>`${L}-${Math.random().toString(36).slice(2,9)}`,F=()=>document.activeElement?.blur();var d=$("en"),s={es:{uploadFiles:"Arrastrar y soltar o click para seleccionar..."},en:{uploadFiles:"Drag and drop or click to select"}},_L=(L)=>{if(s[L])d(L)},l=(L)=>()=>s[d()][L]||L;var D=(L,k)=>(E)=>j(L,{...E,class:`${k} ${E?.class||""}`.trim()}),Z=(L,k)=>(E,G)=>j(L,{...E,class:`${k} ${E?.class||""}`.trim()},G),w=(L,k,E)=>(G)=>j(L,{type:E,...G,class:`${k} ${G?.class||""}`.trim()}),OL=Z("div","alert"),AL=(L,k)=>j("div",{class:"avatar"},j("div",{class:L.class},k)),TL=Z("div","avatar-group -space-x-6"),CL=Z("span","badge"),PL=Z("div","breadcrumbs"),p=Z("button","btn"),ML=Z("div","card"),RL=Z("div","card-title"),BL=Z("div","card-body"),SL=Z("div","card-actions"),IL=Z("div","carousel"),bL=Z("div","carousel-item"),VL=Z("div","chat"),$L=Z("div","chat-bubble"),HL=Z("div","chat-footer"),DL=Z("div","chat-header"),FL=(L,k)=>j("div",{...L,class:W("chat-image avatar",L.class)},j("div",{class:"w-10 rounded-full"},typeof k==="string"?j("img",{src:k,alt:"avatar"}):k)),xL=w("input","checkbox","checkbox"),wL=Z("div","drawer"),fL=(L)=>input({...L,type:"checkbox",class:"drawer-toggle",checked:()=>z(L.checked),onchange:(k)=>A(L.checked)&&L.checked(k.target.checked)}),yL=Z("div","drawer-content"),gL=Z("div","drawer-side"),uL=(L)=>label({...L,for:L.for,class:W("drawer-overlay",L.class)}),oL=D("div","divider"),o=Z("div","dropdown"),LL=(L,k)=>j("div",{...L,tabindex:"0",role:"button",class:W("btn",L.class)},k),m=(L,k)=>j("div",{...L,tabindex:"0",class:W("dropdown-content",L.class)},k),mL=(L,k)=>j("div",{class:"fab"},[j("div",{tabindex:"0",role:"button",class:W("btn",L.class)},x({},L.icon)),k]),vL=(L,k)=>j("fieldset",{class:W("fieldset",L.class)},[j("legend",{class:"fieldset-legend"},L.label),k]),x=(L,k)=>j("span",{...L,class:W(k,L.class)}),rL=(L,k)=>j("div",{...L,class:W("indicator",L.class)},[L.value&&j("span",{class:W("indicator-item badge",L.class)},L.value),k]),nL=Z("kbd","kbd"),dL=Z("ul","list"),sL=(L)=>()=>(z(L.items)||[]).map((k,E)=>j("li",{class:W("list-row",L.class,k?.class)},typeof L.render==="function"?L.render(k,E):k)),lL=Z("span","loading loading-spinner"),hL=Z("div","navbar"),aL=D("progress","progress"),cL=(L,k)=>j("div",{class:W("radial-progress",L.class),style:`--value:${z(L.value)??0};`,role:"progressbar","aria-valuenow":L.value},k),iL=w("input","radio","radio"),tL=w("input","range","range"),eL=Z("div","rating"),pL=(L)=>[...Array(L.count)].map((k,E)=>j("input",{class:W("mask",L.class),name:L.name,type:"radio",checked:()=>z(L.value)===E,onchange:()=>A(L.value)?L.value(E):L.onchange?.(E)})),L6=D("div","skeleton"),j6=D("span","skeleton skeleton-text"),k6=Z("div","stack"),E6=Z("div","stats shadow"),G6=Z("ul","steps"),J6=(L,k)=>j("li",{...L,class:W("step",L.class),"data-content":L.dataContent},k),jL=Z("label","swap"),kL=(L)=>j("input",{type:"checkbox",checked:()=>z(L.value),onchange:(k)=>A(L.value)&&L.value(k.target.checked),class:L.class}),EL=Z("div","swap-on"),GL=Z("div","swap-off"),K6=Z("table","table"),Q6=D("textarea","textarea"),U6=(L,k)=>j("span",{...L,class:W("text-rotate",L.class)},j("span",{},k)),W6=Z("ul","timeline"),X6=w("input","toggle","checkbox"),Z6=(L,k)=>j("div",{...L,class:W("tooltip",L.class),"data-tip":L.tip},k),_6=(L)=>{let k=L.name||n("acc");return V(L.items,(E)=>{return j("div",{class:W("collapse",L.class)},[j("input",{type:"radio",name:k,checked:E.open||void 0}),E.title?j("div",{class:W("collapse-title",`${E.classTitle??" font-semibold"}`)},E.title):null,E.content?j("div",{class:W("collapse-content text-sm",`${E.classContent??" font-semibold"}`)},E.content):null])})},q6=({items:L,value:k,onselect:E,placeholder:G="...",...J})=>{let Q=M(z(k)||""),N=M(()=>r(L,Q())),_=(U)=>{let X=S(U),Y=typeof U==="string"?U:U.value;if(Q(X),A(k))k(Y);E?.(U),F()};return o({class:"w-80"},[j("div",{tabindex:"0",role:"button",class:"w-full"},QL({...J,placeholder:G,value:Q,left:x({},"icon-[lucide--search]")})),m({class:"p-2 bg-base-100 rounded-box shadow-xl w-full max-h-60 overflow-y-auto border border-base-300 z-50"},j("ul",{class:"menu flex-col flex-nowrap w-full p-0"},[V(N,(U)=>j("li",{},[j("a",{onmousedown:(X)=>X.preventDefault(),onclick:()=>_(U)},S(U))]),"value"),()=>N().length===0?j("li",{class:"p-4 opacity-50 text-center"},"Sin resultados"):null]))])},JL=(L)=>{let k=M(new Date),E=M(null),G=M(0),J=M(0),Q=new Date,N=`${Q.getFullYear()}-${String(Q.getMonth()+1).padStart(2,"0")}-${String(Q.getDate()).padStart(2,"0")}`,_=(K)=>`${K.getFullYear()}-${String(K.getMonth()+1).padStart(2,"0")}-${String(K.getDate()).padStart(2,"0")}`,U=()=>z(L.range)===!0,X=()=>z(L.value),Y=(K)=>{let q=_(K),P=X();if(U())if(!P?.start||P.start&&P.end)L.onChange?.({start:q,end:null,...L.hour&&{startHour:G()}});else{let b=P.start,H=q{let q=k();k(new Date(q.getFullYear(),q.getMonth()+K,1))},O=(K)=>{let q=k();k(new Date(q.getFullYear()+K,q.getMonth(),1))},C=({value:K,onChange:q})=>j("div",{class:"flex-1"},[j("div",{class:"flex gap-2 items-center"},[j("input",{type:"range",min:0,max:23,value:K,class:"range range-xs flex-1",oninput:(P)=>q(+P.target.value)}),j("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(z(K)).padStart(2,"0")+":00")])]);return j("div",{class:W("p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box w-80 select-none",L.class)},[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:()=>O(-1)},j("span",{class:"icon-[lucide--chevrons-left]"})),j("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>T(-1)},j("span",{class:"icon-[lucide--chevron-left]"}))]),j("span",{class:"font-bold uppercase flex-1 text-center"},()=>k().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:()=>T(1)},j("span",{class:"icon-[lucide--chevron-right]"})),j("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>O(1)},j("span",{class:"icon-[lucide--chevrons-right]"}))])]),j("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>E(null)},[...["L","M","X","J","V","S","D"].map((K)=>j("div",{class:"text-[10px] opacity-40 font-bold text-center"},K)),()=>{let K=k(),q=K.getFullYear(),P=K.getMonth(),b=new Date(q,P,1).getDay(),H=b===0?6:b-1,a=new Date(q,P+1,0).getDate(),f=[];for(let I=0;I{let B=X(),y=E(),c=typeof B==="string"?B.split("T")[0]===R:B?.start===R,i=B?.end===R,g=!1;if(U()&&B?.start){let u=B.start;if(!B.end&&y)g=R>u&&R<=y||R=y;else if(B.end)g=R>u&&RU()&&E(R),onclick:()=>Y(v)},I.toString()))}return f}]),L.hour?j("div",{class:"mt-3 pt-2 border-t border-base-300"},U()?j("div",{class:"flex gap-4"},[C({value:G,onChange:(K)=>G(K)}),C({value:J,onChange:(K)=>J(K)})]):C({value:G,onChange:(K)=>G(K)})):null])},z6=(L)=>{let k=()=>z(L.value)||"#000000";return o({},[LL({class:"btn"},[j("div",{class:"size-5 rounded-sm",style:()=>`background-color: ${k()}`}),L.label&&j("span",{},L.label)]),m({class:"p-0"},KL({value:L.value,onchange:(E)=>{A(L.value)?L.value(E):L.onchange?.(E)}}))])},KL=(L)=>{let k=()=>z(L.value)||"#000000",E=["#000","#1A1A1A","#333","#4D4D4D","#666","#808080","#B3B3B3","#FFF","#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626","#ef4444","#f87171","#fca5a5","#431407","#7c2d12","#9a3412","#c2410c","#ea580c","#f97316","#fb923c","#ffedd5","#713f12","#a16207","#ca8a04","#eab308","#facc15","#fde047","#fef08a","#fff9c4","#064e3b","#065f46","#059669","#10b981","#34d399","#4ade80","#84cc16","#d9f99d","#082f49","#075985","#0284c7","#0ea5e9","#38bdf8","#7dd3fc","#22d3ee","#cffafe","#1e1b4b","#312e81","#4338ca","#4f46e5","#6366f1","#818cf8","#a5b4fc","#e0e7ff","#2e1065","#4c1d95","#6d28d9","#7c3aed","#8b5cf6","#a855f7","#d946ef","#fae8ff"],G=(J)=>{A(L.value)?L.value(J):L.onchange?.(J),F()};return j("div",{class:W("p-3 bg-base-100 rounded-box shadow w-64",L.class)},j("div",{class:"grid grid-cols-8 gap-1"},E.map((J)=>j("button",{type:"button",style:`background-color: ${J}`,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 p-0 min-h-0 ${k().toLowerCase()===J.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{G(J)}}))))},Y6=(L)=>{let k=M(""),E=()=>z(L.range)===!0;h(()=>{let J=z(L.value);if(!J)return k("");let Q="";if(typeof J==="string")Q=L.hour&&J.includes("T")?J.replace("T"," "):J;else if(J.start&&J.end){let N=L.hour&&J.startHour!=null?`${J.start} ${String(J.startHour).padStart(2,"0")}:00`:J.start,_=L.hour&&J.endHour!=null?`${J.end} ${String(J.endHour).padStart(2,"0")}:00`:J.end;Q=`${N} - ${_}`}else if(J.start)Q=`${L.hour&&J.startHour!=null?`${J.start} ${String(J.startHour).padStart(2,"0")}:00`:J.start}...`;k(Q)});let G=(J)=>{if(A(L.value))L.value(J);else L.onChange?.(J);if(!E()||J?.end!=null)F()};return o({class:W("w-full",L.class)},[j("label",{tabindex:"0",role:"button",class:"input input-bordered flex items-center gap-2 cursor-pointer"},[j("span",{class:"icon-[lucide--calendar] shrink-0"}),j("span",{class:()=>`grow text-left truncate ${!k()?"opacity-50":""}`},()=>k()||L.placeholder||(E()?"Seleccionar rango...":"Seleccionar fecha...")),()=>k()?j("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle -mr-2",onmousedown:(J)=>{if(J.preventDefault(),J.stopPropagation(),A(L.value))L.value(null);else L.onChange?.(null);k("")}},j("span",{class:"icon-[lucide--x] opacity-50"})):null]),m({class:"p-0"},JL({value:L.value,range:E(),hour:L.hour,onChange:G}))])},N6=(L)=>{let k=M([]),E=M(!1),G=M(null),J=(L.max||2)*1024*1024,Q=(_)=>{let U=Array.from(_);if(G(null),U.some((Y)=>Y.size>J)){G(`Mรกx ${L.max||2}MB`);return}let X=[...k(),...U];if(k(X),A(L.onselect))L.onselect(X);else if(A(L.value))L.value(X)},N=(_)=>{let U=k().filter((X,Y)=>Y!==_);if(k(U),A(L.onselect))L.onselect(U);else if(A(L.value))L.value(U)};return j("div",{class:W("fieldset w-full p-0",L.class)},[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 ${E()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"}`,ondragover:(_)=>{_.preventDefault(),E(!0)},ondragleave:()=>E(!1),ondrop:(_)=>{_.preventDefault(),E(!1),Q(_.dataTransfer.files)}},[j("div",{class:"flex items-center gap-3 w-full"},[j("span",{class:"icon-[lucide--upload]"}),j("span",{class:"text-sm opacity-70 truncate grow text-left"},l("uploadFiles")),j("span",{class:"text-[10px] opacity-40 shrink-0"},`Mรกx ${L.max||2}MB`)]),j("input",{type:"file",multiple:!0,accept:L.accept||"*",class:"hidden",onchange:(_)=>Q(_.target.files)})]),()=>G()&&j("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},G()),e(()=>k().length>0,()=>j("ul",{class:"mt-2 space-y-1"},V(k,(_,U)=>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]"},_.name),j("span",{class:"text-[9px] opacity-40"},`(${(_.size/1024).toFixed(0)} KB)`)]),j("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(X)=>{X.preventDefault(),N(U)}},j("span",{class:"icon-[lucide--x]"}))]))))])},QL=(L)=>{let{label:k,icon:E,float:G,placeholder:J,value:Q,left:N,right:_,rule:U,hint:X,content:Y,...T}=L,O=M(!1),C=L.type==="password",K=U??null,q=()=>C?z(O)?"text":"password":L.type||"search";return j("label",{class:G?"floating-label":""},[G?j("span",{},k):null,j("label",{pattern:K,class:()=>W("input validator",L.class)},[k&&!G?j("span",{class:"label"},k):null,N??null,j("input",{...T,type:q,class:"grow",pattern:K,placeholder:J||k||" ",value:Q}),_??null,C?jL({class:"ml-2"},[kL({value:O,class:"swap-rotate"}),EL({},x({},"icon-[lucide--eye]")),GL({},x({},"icon-[lucide--eye-off]"))]):null]),X?j("div",{class:"validator-hint"},X):null])},O6=(L)=>{if(L.children!==void 0)return j("ul",{class:W("menu",L.class),...L},L.children);let{items:k}=L,E=(G)=>G.children?j("li",{},j("details",{open:G.open||void 0},[j("summary",{},S(G)),j("ul",{},V(()=>z(G.children)||[],E))])):j("li",{},j("a",{href:G.href,onclick:G.onclick?(J)=>{if(!G.href)J.preventDefault();G.onclick(J)}:null},S(G)));return j("ul",{class:W("menu",L.class)},V(()=>z(k)||[],E))},A6=(L)=>{let k=null;h(()=>{let G=z(L.open);if(!k)return;G?k.showModal():k.hide()});let E=()=>A(L.open)&&L.open(!1);return j("dialog",{...L,ref:(G)=>k=G,class:W("modal",L.class),onclose:E,oncancel:E},[j("div",{class:"modal-box"},[L.title&&j("h3",{class:"text-lg font-bold"},L.title),L.children,j("div",{class:"modal-action"},[L.actions||p({class:"btn",onclick:E},"Cerrar")])]),j("form",{method:"dialog",class:"modal-backdrop"},[j("button",{},"close")])])},T6=(L,k)=>{if(k!==void 0)return j("select",{class:W("select",L.class),...L},k);let{label:E,float:G,placeholder:J,placeholderDisabled:Q=!0,value:N,left:_,right:U,hint:X,items:Y,keyFn:T,...O}=L,C=()=>{let K=z(Y)||[];return[...J?[{disabled:Q,label:J,value:""}]:[],...K]};return j("label",{class:G?"floating-label":""},[G?j("span",{},E):null,j("label",{class:W("select",O.class)},[!G&&E?j("span",{class:"label"},E):null,_??null,j("select",{value:()=>z(N),onchange:(K)=>A(N)?N(K.target.value):O.onchange?.(K)},V(C,(K)=>{let q=S(K,K.value!==void 0?"value":void 0),P=S(K,"label");return j("option",{value:q,disabled:K.disabled||void 0},P)})),U??null]),X?j("div",{class:"validator-hint"},X):null])},C6=(L)=>j("div",{...L,class:W("stat",L.class)},[L.title?j("div",{class:"stat-title"},L.title):null,L.value?j("div",{class:"stat-value"},L.value):null,L.desc?j("div",{class:"stat-desc"},L.desc):null]),P6=({items:L,columns:k=[],header:E=!0})=>{let G=E!==!1&&k.some((Q)=>Q.label)?j("thead",{},j("tr",{},k.map((Q)=>j("th",{class:Q.class},Q.label)))):null,J=j("tbody",{},()=>{return(z(L)||[]).map((N,_)=>j("tr",{},k.map((U)=>{let X=U.render?U.render(N,_):N[U.key];return j("td",{class:U.class},X)})))});return[G,J].filter(Boolean)},M6=(L,k)=>{if(!L.items){let{class:X,...Y}=L;return j("div",{...Y,class:W("tabs",X)},k)}let{items:E,activeIndex:G,onClose:J,class:Q,...N}=L,_=(X)=>A(X)?X():X,U=J||(A(E)?(X,Y)=>{let O=z(E).filter((C,K)=>K!==X);if(E(O),G()>=O.length)G(Math.max(0,O.length-1))}:null);return j("div",{...N,class:W("tabs",Q)},()=>{return(z(E)||[]).flatMap((Y,T)=>{let O=()=>G()===T,C=j("button",{class:()=>`tab ${O()?"tab-active":""} ${Y.class||""}`,onclick:(q)=>{q.preventDefault(),G(T),Y.onclick?.(q)}},[S(Y),Y.closable?j("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:(q)=>{q.stopPropagation(),U?.(T,Y)}},j("span",{class:"icon-[lucide--x] w-3 h-3"})):null]),K=j("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>`display: ${O()?"block":"none"};`},A(Y.content)?Y.content():Y.content);return[C,K]})})},R6=(L,k="alert-success",E=3500)=>{let G=document.getElementById("sigpro-toast-container");if(!G)G=j("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(G);let J=j("div",{style:"display: contents"});G.appendChild(J);let Q,N,_,X=t(()=>{let Y=M(!1),T=M(!1);Q=()=>{if(T())return;clearTimeout(N),clearTimeout(_),T(!0),setTimeout(()=>{if(X.destroy(),J.remove(),!G.hasChildNodes())G.remove()},300)},_=setTimeout(()=>Y(!0),0);let O=typeof L==="function"?z(L):L,C=typeof O==="string"?j("span",{},O):O;return j("div",{class:()=>{let K=`alert alert-soft ${k} shadow-lg transition-all duration-300 inline-flex w-auto whitespace-nowrap pointer-events-auto`;if(T())return`${K} translate-x-full opacity-0`;if(Y())return`${K} translate-x-0 opacity-100`;return`${K} translate-x-10 opacity-0`}},[C,j("button",{class:"btn btn-xs btn-circle btn-ghost",onclick:Q},j("span",{class:"icon-[lucide--x]"}))])},J);if(E>0)N=setTimeout(Q,E);return Q};export{l as t,_L as setLocale,Z6 as Tooltip,X6 as Toggle,R6 as Toast,W6 as Timeline,U6 as Textrotate,Q6 as Textarea,M6 as Tabs,P6 as TableItems,K6 as Table,kL as SwapToggle,EL as SwapOn,GL as SwapOff,jL as Swap,G6 as Steps,J6 as Step,E6 as Stats,C6 as Stat,k6 as Stack,j6 as SkeletonText,L6 as Skeleton,T6 as Select,pL as RatingItems,eL as Rating,tL as Range,iL as Radio,cL as Radial,aL as Progress,hL as Navbar,A6 as Modal,O6 as Menu,lL as Loading,sL as ListRows,dL as List,nL as Kbd,QL as Input,rL as Indicator,x as Icon,N6 as Fileinput,vL as Fieldset,mL as Fab,m as DropdownContent,LL as DropdownButton,o as Dropdown,fL as DrawerToggle,gL as DrawerSide,uL as DrawerOverlay,yL as DrawerContent,wL as Drawer,oL as Divider,Y6 as Datepicker,z6 as Colorpicker,KL as ColorPalette,xL as Checkbox,FL as ChatImage,DL as ChatHeader,HL as ChatFooter,$L as ChatBubble,VL as Chat,bL as CarouselItem,IL as Carousel,RL as CardTitle,BL as CardBody,SL as CardActions,ML as Card,JL as Calendar,p as Button,PL as Breadcrumbs,CL as Badge,TL as AvatarGroup,AL as Avatar,q6 as Autocomplete,OL as Alert,_6 as Accordion}; diff --git a/dist/sigpro-ui.js b/dist/sigpro-ui.js index cdbf876..0437f75 100644 --- a/dist/sigpro-ui.js +++ b/dist/sigpro-ui.js @@ -1,118 +1,89 @@ -(() => { +var spui = (() => { 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) - }); + __defProp(target, name, { get: all[name], enumerable: true }); }; - // sigpro-ui.js - var exports_sigpro_ui = {}; - __export(exports_sigpro_ui, { - when: () => when, - watch: () => watch, - t: () => t, - router: () => router, - onUnmount: () => onUnmount, - mount: () => mount, - lang: () => lang, - isObj: () => isObj, - isFunc: () => isFunc, - isArr: () => isArr, - hide: () => hide, - h: () => h, - each: () => each, - currentLocale: () => currentLocale, - batch: () => batch, - 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, - Locale: () => Locale, - Loading: () => Loading, - ListRows: () => ListRows, - List: () => List, - Kbd: () => Kbd, - Input: () => Input, - Indicator: () => Indicator, - Icon: () => Icon, - Fragment: () => Fragment, - Fileinput: () => Fileinput, - Fieldset: () => Fieldset, - Fab: () => Fab, - Editor: () => Editor, - 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, + // src/sigpro-ui.js + var sigpro_ui_exports = {}; + __export(sigpro_ui_exports, { Accordion: () => Accordion, - $$: () => $$, - $: () => $ + Alert: () => Alert, + Autocomplete: () => Autocomplete, + Avatar: () => Avatar, + AvatarGroup: () => AvatarGroup, + Badge: () => Badge, + Breadcrumbs: () => Breadcrumbs, + Button: () => Button, + Calendar: () => Calendar, + Card: () => Card, + CardActions: () => CardActions, + CardBody: () => CardBody, + CardTitle: () => CardTitle, + Carousel: () => Carousel, + CarouselItem: () => CarouselItem, + Chat: () => Chat, + ChatBubble: () => ChatBubble, + ChatFooter: () => ChatFooter, + ChatHeader: () => ChatHeader, + ChatImage: () => ChatImage, + Checkbox: () => Checkbox, + ColorPalette: () => ColorPalette, + Colorpicker: () => Colorpicker, + Datepicker: () => Datepicker, + Divider: () => Divider, + Drawer: () => Drawer, + DrawerContent: () => DrawerContent, + DrawerOverlay: () => DrawerOverlay, + DrawerSide: () => DrawerSide, + DrawerToggle: () => DrawerToggle, + Dropdown: () => Dropdown, + DropdownButton: () => DropdownButton, + DropdownContent: () => DropdownContent, + Fab: () => Fab, + Fieldset: () => Fieldset, + Fileinput: () => Fileinput, + Icon: () => Icon, + Indicator: () => Indicator, + Input: () => Input, + Kbd: () => Kbd, + List: () => List, + ListRows: () => ListRows, + Loading: () => Loading, + Menu: () => Menu, + Modal: () => Modal, + Navbar: () => Navbar, + Progress: () => Progress, + Radial: () => Radial, + Radio: () => Radio, + Range: () => Range, + Rating: () => Rating, + RatingItems: () => RatingItems, + Select: () => Select, + Skeleton: () => Skeleton, + SkeletonText: () => SkeletonText, + Stack: () => Stack, + Stat: () => Stat, + Stats: () => Stats, + Step: () => Step, + Steps: () => Steps, + Swap: () => Swap, + SwapOff: () => SwapOff, + SwapOn: () => SwapOn, + SwapToggle: () => SwapToggle, + Table: () => Table, + TableItems: () => TableItems, + Tabs: () => Tabs, + Textarea: () => Textarea, + Textrotate: () => Textrotate, + Timeline: () => Timeline, + Toast: () => Toast, + Toggle: () => Toggle, + Tooltip: () => Tooltip }); - // sigpro.js + // src/sigpro.js var isFunc = (f) => typeof f === "function"; var isObj = (o) => o && typeof o === "object"; var isArr = Array.isArray; @@ -122,16 +93,13 @@ var activeOwner = null; var isFlushing = false; var batchDepth = 0; - var effectQueue = new Set; - var proxyCache = new WeakMap; - var ITER = Symbol("iter"); - var MOUNTED_NODES = new WeakMap; + var effectQueue = /* @__PURE__ */ new Set(); + var MOUNTED_NODES = /* @__PURE__ */ new WeakMap(); var SVG_NS = "http://www.w3.org/2000/svg"; var XLINK_NS = "http://www.w3.org/1999/xlink"; var SVG_TAGS = new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(",")); var dispose = (eff) => { - if (!eff || eff._disposed) - return; + if (!eff || eff._disposed) return; eff._disposed = true; const stack = [eff]; while (stack.length) { @@ -151,8 +119,7 @@ } }; var onUnmount = (fn) => { - if (activeOwner) - (activeOwner._cleanups ||= new Set).add(fn); + if (activeOwner) (activeOwner._cleanups ||= /* @__PURE__ */ new Set()).add(fn); }; var untrack = (fn) => { const p = activeEffect; @@ -165,10 +132,8 @@ }; var createEffect = (fn, isComputed = false) => { const effect = () => { - if (effect._disposed) - return; - if (effect._deps) - effect._deps.forEach((s) => s.delete(effect)); + if (effect._disposed) return; + if (effect._deps) effect._deps.forEach((s) => s.delete(effect)); if (effect._cleanups) { effect._cleanups.forEach((c) => c()); effect._cleanups.clear(); @@ -191,64 +156,46 @@ effect._depth = activeEffect ? activeEffect._depth + 1 : 0; effect._mounts = []; effect._parent = activeOwner; - if (activeOwner) - (activeOwner._children ||= new Set).add(effect); + if (activeOwner) (activeOwner._children ||= /* @__PURE__ */ new Set()).add(effect); return effect; }; var flush = () => { - if (isFlushing) - return; + if (isFlushing) return; isFlushing = true; const sorted = Array.from(effectQueue).sort((a, b) => a._depth - b._depth); effectQueue.clear(); - for (const e of sorted) - if (!e._disposed) - e(); + for (const e of sorted) if (!e._disposed) e(); isFlushing = false; }; - var batch = (fn) => { - batchDepth++; - try { - return fn(); - } finally { - batchDepth--; - if (batchDepth === 0 && effectQueue.size > 0 && !isFlushing) { - flush(); - } - } - }; var trackUpdate = (subs, trigger = false) => { if (!trigger && activeEffect && !activeEffect._disposed) { subs.add(activeEffect); - (activeEffect._deps ||= new Set).add(subs); + (activeEffect._deps ||= /* @__PURE__ */ new Set()).add(subs); } else if (trigger && subs.size > 0) { let hasQueue = false; for (const e of subs) { - if (e === activeEffect || e._disposed) - continue; + if (e === activeEffect || e._disposed) continue; if (e._isComputed) { e._dirty = true; - if (e._subs) - trackUpdate(e._subs, true); + if (e._subs) trackUpdate(e._subs, true); } else { effectQueue.add(e); hasQueue = true; } } - if (hasQueue && !isFlushing && batchDepth === 0) - queueMicrotask(flush); + if (hasQueue && !isFlushing && batchDepth === 0) queueMicrotask(flush); } }; - var $ = (val, key = null) => { - const subs = new Set; - if (isFunc(val)) { + var $2 = (val2, key = null) => { + const subs = /* @__PURE__ */ new Set(); + if (isFunc(val2)) { let cache; const computed = () => { if (computed._dirty) { const prev = activeEffect; activeEffect = computed; try { - const next = val(); + const next = val2(); if (!Object.is(cache, next)) { cache = next; trackUpdate(subs, true); @@ -268,109 +215,55 @@ computed._disposed = false; return computed; } - if (key) - try { - val = JSON.parse(localStorage.getItem(key)) ?? val; - } catch (e) {} + if (key) try { + val2 = JSON.parse(localStorage.getItem(key)) ?? val2; + } catch (e) { + } return (...args) => { if (args.length) { - const next = isFunc(args[0]) ? args[0](val) : args[0]; - if (!Object.is(val, next)) { - val = next; - if (key) - localStorage.setItem(key, JSON.stringify(val)); + const next = isFunc(args[0]) ? args[0](val2) : args[0]; + if (!Object.is(val2, next)) { + val2 = next; + if (key) localStorage.setItem(key, JSON.stringify(val2)); trackUpdate(subs, true); } } trackUpdate(subs); - return val; + return val2; }; }; - var $$ = (target) => { - if (!isObj(target)) - return target; - const cached = proxyCache.get(target); - if (cached) - return cached; - const subs = new Map; - const getSubs = (key) => { - let set = subs.get(key); - if (!set) - subs.set(key, set = new Set); - return set; - }; - const proxy = new Proxy(target, { - get(target2, key, receiver) { - if (typeof key !== "symbol") - trackUpdate(getSubs(key)); - return $$(Reflect.get(target2, key, receiver)); - }, - set(target2, key, value, receiver) { - const hadKey = Reflect.has(target2, key); - const oldValue = Reflect.get(target2, key, receiver); - const result = Reflect.set(target2, key, value, receiver); - if (result && !Object.is(oldValue, value)) { - trackUpdate(getSubs(key), true); - if (!hadKey) - trackUpdate(getSubs(ITER), true); - } - return result; - }, - deleteProperty(target2, key) { - const result = Reflect.deleteProperty(target2, key); - if (result) { - trackUpdate(getSubs(key), true); - trackUpdate(getSubs(ITER), true); - } - return result; - }, - ownKeys(target2) { - trackUpdate(getSubs(ITER)); - return Reflect.ownKeys(target2); - } - }); - proxyCache.set(target, proxy); - return proxy; - }; var watch = (sources, cb) => { - if (cb === undefined) { + if (cb === void 0) { const effect2 = createEffect(sources); effect2(); return () => dispose(effect2); } const effect = createEffect(() => { - const vals = Array.isArray(sources) ? sources.map((s) => s()) : sources(); + const vals = isArr(sources) ? sources.map((s) => s()) : sources(); untrack(() => cb(vals)); }); effect(); return () => dispose(effect); }; var cleanupNode = (node) => { - if (!node) - return; + if (!node) return; if (node._cleanups) { node._cleanups.forEach((fn) => fn()); node._cleanups.clear(); } - if (node._ownerEffect) - dispose(node._ownerEffect); - if (node.childNodes) - node.childNodes.forEach((n) => cleanupNode(n)); + if (node._ownerEffect) dispose(node._ownerEffect); + if (node.childNodes) node.childNodes.forEach((n) => cleanupNode(n)); }; var DANGEROUS_PROTOCOL = /^\s*(javascript|data|vbscript):/i; - var DANGEROUS_URI_ATTRS = new Set(["src", "href", "formaction", "action", "background", "code", "archive"]); + var DANGEROUS_URI_ATTRS = /* @__PURE__ */ new Set(["src", "href", "formaction", "action", "background", "code", "archive"]); var isDangerousAttr = (key) => DANGEROUS_URI_ATTRS.has(key) || key.startsWith("on"); - var validateAttr = (key, val) => { - if (val == null || val === false) - return null; + var validateAttr = (key, val2) => { + if (val2 == null || val2 === false) return null; if (isDangerousAttr(key)) { - const sVal = String(val); - if (DANGEROUS_PROTOCOL.test(sVal)) { - console.warn(`[SigPro] Bloqueado protocolo peligroso en ${key}`); - return "#"; - } + const sVal = String(val2); + if (DANGEROUS_PROTOCOL.test(sVal)) return "#"; } - return val; + return val2; }; var h = (tag, props = {}, children = []) => { if (props instanceof Node || isArr(props) || !isObj(props)) { @@ -388,13 +281,12 @@ }); effect(); const result = effect._result; - if (result == null) - return null; + if (result == null) return null; const node = result instanceof Node || isArr(result) && result.every((n) => n instanceof Node) ? result : doc.createTextNode(String(result)); const attach = (n) => { if (isObj(n) && !n._isRuntime) { n._mounts = effect._mounts || []; - n._cleanups = effect._cleanups || new Set; + n._cleanups = effect._cleanups || /* @__PURE__ */ new Set(); n._ownerEffect = effect; } }; @@ -403,7 +295,7 @@ } const isSVG = SVG_TAGS.has(tag); const el = isSVG ? doc.createElementNS(SVG_NS, tag) : doc.createElement(tag); - el._cleanups = new Set; + el._cleanups = /* @__PURE__ */ new Set(); for (const k of Object.keys(props)) { let v = props[k]; if (k === "ref") { @@ -423,17 +315,12 @@ onUnmount(off); } else if (isFunc(v)) { const effect = createEffect(() => { - const val = validateAttr(k, v()); - if (k === "class") - el.className = val || ""; - else if (val == null) - el.removeAttribute(k); - else if (k === "style" && typeof val === "string") - el.setAttribute("style", val); - else if (k in el && !isSVG) - el[k] = val; - else - el.setAttribute(k, val === true ? "" : val); + const val2 = validateAttr(k, v()); + if (k === "class") el.className = val2 || ""; + else if (val2 == null) el.removeAttribute(k); + else if (k === "style" && typeof val2 === "string") el.setAttribute("style", val2); + else if (k in el && !isSVG) el[k] = val2; + else el.setAttribute(k, val2 === true ? "" : val2); }); effect(); el._cleanups.add(() => dispose(effect)); @@ -443,20 +330,16 @@ el.addEventListener(evType, (ev) => v(ev.target[k])); } } else { - const val = validateAttr(k, v); - if (val != null) { - if (k === "style" && typeof val === "string") - el.setAttribute("style", val); - else if (k in el && !isSVG) - el[k] = val; - else - el.setAttribute(k, val === true ? "" : val); + const val2 = validateAttr(k, v); + if (val2 != null) { + if (k === "style" && typeof val2 === "string") el.setAttribute("style", val2); + else if (k in el && !isSVG) el[k] = val2; + else el.setAttribute(k, val2 === true ? "" : val2); } } } const append = (c) => { - if (isArr(c)) - return c.forEach(append); + if (isArr(c)) return c.forEach(append); if (isFunc(c)) { const anchor = doc.createTextNode(""); el.appendChild(anchor); @@ -465,20 +348,15 @@ const res = c(); const next = (isArr(res) ? res : [res]).map(ensureNode); currentNodes.forEach((n) => { - if (n._isRuntime) - n.destroy(); - else - cleanupNode(n); - if (n.parentNode) - n.remove(); + if (n._isRuntime) n.destroy(); + else cleanupNode(n); + if (n.parentNode) n.remove(); }); let ref = anchor; - for (let i = next.length - 1;i >= 0; i--) { + for (let i = next.length - 1; i >= 0; i--) { const node = next[i]; - if (node.parentNode !== ref.parentNode) - ref.parentNode?.insertBefore(node, ref); - if (node._mounts) - node._mounts.forEach((fn) => fn()); + if (node.parentNode !== ref.parentNode) ref.parentNode?.insertBefore(node, ref); + if (node._mounts) node._mounts.forEach((fn) => fn()); ref = node; } currentNodes = next; @@ -489,15 +367,14 @@ } else { const node = ensureNode(c); el.appendChild(node); - if (node._mounts) - node._mounts.forEach((fn) => fn()); + if (node._mounts) node._mounts.forEach((fn) => fn()); } }; append(children); return el; }; var render = (renderFn) => { - const cleanups = new Set; + const cleanups = /* @__PURE__ */ new Set(); const previousOwner = activeOwner; const previousEffect = activeEffect; const container = doc.createElement("div"); @@ -506,8 +383,7 @@ activeOwner = { _cleanups: cleanups }; activeEffect = null; const processResult = (result) => { - if (!result) - return; + if (!result) return; if (result._isRuntime) { cleanups.add(result.destroy); container.appendChild(result.container); @@ -537,46 +413,46 @@ const anchor = doc.createTextNode(""); const root = h("div", { style: "display:contents" }, [anchor]); let currentView = null; - watch(() => !!(isFunc(cond) ? cond() : cond), (show) => { - if (currentView) { - currentView.destroy(); - currentView = null; + watch( + () => !!(isFunc(cond) ? cond() : cond), + (show) => { + if (currentView) { + currentView.destroy(); + currentView = null; + } + const content = show ? SIP : NOP; + if (content) { + currentView = render(() => isFunc(content) ? content() : content); + root.insertBefore(currentView.container, anchor); + } } - const content = show ? SIP : NOP; - if (content) { - currentView = render(() => isFunc(content) ? content() : content); - root.insertBefore(currentView.container, anchor); - } - }); + ); onUnmount(() => currentView?.destroy()); return root; }; var each = (src, itemFn, keyField) => { const anchor = doc.createTextNode(""); const root = h("div", { style: "display:contents" }, [anchor]); - let cache = new Map; + let cache = /* @__PURE__ */ new Map(); watch(() => (isFunc(src) ? src() : src) || [], (items) => { - const nextCache = new Map; + const nextCache = /* @__PURE__ */ new Map(); const nextOrder = []; const newItems = items || []; - for (let i = 0;i < newItems.length; i++) { + for (let i = 0; i < newItems.length; i++) { const item = newItems[i]; const key = keyField ? item?.[keyField] ?? i : item?.id ?? i; let view = cache.get(key); - if (!view) - view = render(() => itemFn(item, i)); - else - cache.delete(key); + if (!view) view = render(() => itemFn(item, i)); + else cache.delete(key); nextCache.set(key, view); nextOrder.push(view); } cache.forEach((view) => view.destroy()); let lastRef = anchor; - for (let i = nextOrder.length - 1;i >= 0; i--) { + for (let i = nextOrder.length - 1; i >= 0; i--) { const view = nextOrder[i]; const node = view.container; - if (node.nextSibling !== lastRef) - root.insertBefore(node, lastRef); + if (node.nextSibling !== lastRef) root.insertBefore(node, lastRef); lastRef = node; } cache = nextCache; @@ -585,7 +461,7 @@ }; var router = (routes) => { const getHash = () => window.location.hash.slice(1) || "/"; - const path = $(getHash()); + const path = $2(getHash()); const handler = () => path(getHash()); window.addEventListener("hashchange", handler); onUnmount(() => window.removeEventListener("hashchange", handler)); @@ -602,8 +478,7 @@ currentView?.destroy(); const params = {}; route.path.split("/").filter(Boolean).forEach((p, i) => { - if (p[0] === ":") - params[p.slice(1)] = cur.split("/").filter(Boolean)[i]; + if (p[0] === ":") params[p.slice(1)] = cur.split("/").filter(Boolean)[i]; }); router.params(params); currentView = render(() => isFunc(route.component) ? route.component(params) : route.component); @@ -612,29 +487,26 @@ }); return hook; }; - router.params = $({}); + router.params = $2({}); router.to = (p) => window.location.hash = p.replace(/^#?\/?/, "#/"); router.back = () => window.history.back(); router.path = () => window.location.hash.replace(/^#/, "") || "/"; - var Fragment = (props) => props.children; var mount = (comp, target) => { - const t = typeof target === "string" ? doc.querySelector(target) : target; - if (!t) - return; - if (MOUNTED_NODES.has(t)) - MOUNTED_NODES.get(t).destroy(); + const t2 = typeof target === "string" ? doc.querySelector(target) : target; + if (!t2) return; + if (MOUNTED_NODES.has(t2)) MOUNTED_NODES.get(t2).destroy(); const inst = render(isFunc(comp) ? comp : () => comp); - t.replaceChildren(inst.container); - MOUNTED_NODES.set(t, inst); + t2.replaceChildren(inst.container); + MOUNTED_NODES.set(t2, inst); return inst; }; - - // sigpro-ui.js if (typeof window !== "undefined") { "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((tag) => { window[tag] = (props, children) => h(tag, props, children); }); } + + // src/helpers.js var val = (val2) => typeof val2 === "function" ? val2() : val2; var getBy = (item, field = "label") => item && typeof item === "object" ? item[field] : item; var cls = (...classes) => classes.filter(Boolean).join(" ").trim(); @@ -645,59 +517,123 @@ }; var rand = (r) => `${r}-${Math.random().toString(36).slice(2, 9)}`; var hide = () => document.activeElement?.blur(); - var lang = { - es: { - uploadFiles: "Arrastrar y soltar o click para seleccionar..." - }, - en: { - uploadFiles: "Drag and drop or click to select" - } - }; + + // src/locale.js + var locale_exports = {}; + __export(locale_exports, { + setLocale: () => setLocale, + t: () => t + }); var currentLocale = $("en"); - var Locale = (t) => currentLocale(t); + var lang = { + es: { uploadFiles: "Arrastrar y soltar o click para seleccionar..." }, + en: { uploadFiles: "Drag and drop or click to select" } + }; + var setLocale = (locale) => { + if (lang[locale]) currentLocale(locale); + }; var t = (t2) => () => lang[currentLocale()][t2] || t2; + + // src/sigpro-ui.js + var c1 = (tag, cls2) => (p) => h(tag, { ...p, class: `${cls2} ${p?.class || ""}`.trim() }); + var c2 = (tag, cls2) => (p, c) => h(tag, { ...p, class: `${cls2} ${p?.class || ""}`.trim() }, c); + var ct = (tag, cls2, type) => (p) => h(tag, { type, ...p, class: `${cls2} ${p?.class || ""}`.trim() }); + var Alert = c2("div", "alert"); + var Avatar = (p, c) => h("div", { class: "avatar" }, h("div", { class: p.class }, c)); + var AvatarGroup = c2("div", "avatar-group -space-x-6"); + var Badge = c2("span", "badge"); + var Breadcrumbs = c2("div", "breadcrumbs"); + var Button = c2("button", "btn"); + var Card = c2("div", "card"); + var CardTitle = c2("div", "card-title"); + var CardBody = c2("div", "card-body"); + var CardActions = c2("div", "card-actions"); + var Carousel = c2("div", "carousel"); + var CarouselItem = c2("div", "carousel-item"); + var Chat = c2("div", "chat"); + var ChatBubble = c2("div", "chat-bubble"); + var ChatFooter = c2("div", "chat-footer"); + var ChatHeader = c2("div", "chat-header"); + var ChatImage = (p, c) => h("div", { ...p, class: cls("chat-image avatar", p.class) }, h("div", { class: "w-10 rounded-full" }, typeof c === "string" ? h("img", { src: c, alt: "avatar" }) : c)); + var Checkbox = ct("input", "checkbox", "checkbox"); + var Drawer = c2("div", "drawer"); + var DrawerToggle = (p) => input({ ...p, type: "checkbox", class: "drawer-toggle", checked: () => val(p.checked), onchange: (e) => isFunc(p.checked) && p.checked(e.target.checked) }); + var DrawerContent = c2("div", "drawer-content"); + var DrawerSide = c2("div", "drawer-side"); + var DrawerOverlay = (p) => label({ ...p, for: p.for, class: cls("drawer-overlay", p.class) }); + var Divider = c1("div", "divider"); + var Dropdown = c2("div", "dropdown"); + var DropdownButton = (p, c) => h("div", { ...p, tabindex: "0", role: "button", class: cls("btn", p.class) }, c); + var DropdownContent = (p, c) => h("div", { ...p, tabindex: "0", class: cls("dropdown-content", p.class) }, c); + var Fab = (p, c) => h("div", { class: "fab" }, [h("div", { tabindex: "0", role: "button", class: cls("btn", p.class) }, Icon({}, p.icon)), c]); + var Fieldset = (p, c) => h("fieldset", { class: cls("fieldset", p.class) }, [h("legend", { class: "fieldset-legend" }, p.label), c]); + var Icon = (p, c) => h("span", { ...p, class: cls(c, p.class) }); + var Indicator = (p, c) => h("div", { ...p, class: cls("indicator", p.class) }, [p.value && h("span", { class: cls("indicator-item badge", p.class) }, p.value), c]); + var Kbd = c2("kbd", "kbd"); + var List = c2("ul", "list"); + var ListRows = (p) => () => (val(p.items) || []).map((item, idx) => h("li", { class: cls("list-row", p.class, item?.class) }, typeof p.render === "function" ? p.render(item, idx) : item)); + var Loading = c2("span", "loading loading-spinner"); + var Navbar = c2("div", "navbar"); + var Progress = c1("progress", "progress"); + var Radial = (p, c) => h("div", { class: cls("radial-progress", p.class), style: `--value:${val(p.value) ?? 0};`, role: "progressbar", "aria-valuenow": p.value }, c); + var Radio = ct("input", "radio", "radio"); + var Range = ct("input", "range", "range"); + var Rating = c2("div", "rating"); + var RatingItems = (p) => [...Array(p.count)].map((_, i) => h("input", { class: cls("mask", p.class), name: p.name, type: "radio", checked: () => val(p.value) === i, onchange: () => isFunc(p.value) ? p.value(i) : p.onchange?.(i) })); + var Skeleton = c1("div", "skeleton"); + var SkeletonText = c1("span", "skeleton skeleton-text"); + var Stack = c2("div", "stack"); + var Stats = c2("div", "stats shadow"); + var Steps = c2("ul", "steps"); + var Step = (p, c) => h("li", { ...p, class: cls("step", p.class), "data-content": p.dataContent }, c); + var Swap = c2("label", "swap"); + var SwapToggle = (p) => h("input", { type: "checkbox", checked: () => val(p.value), onchange: (e) => isFunc(p.value) && p.value(e.target.checked), class: p.class }); + var SwapOn = c2("div", "swap-on"); + var SwapOff = c2("div", "swap-off"); + var Table = c2("table", "table"); + var Textarea = c1("textarea", "textarea"); + var Textrotate = (p, c) => h("span", { ...p, class: cls("text-rotate", p.class) }, h("span", {}, c)); + var Timeline = c2("ul", "timeline"); + var Toggle = ct("input", "toggle", "checkbox"); + var Tooltip = (p, c) => h("div", { ...p, class: cls("tooltip", p.class), "data-tip": p.tip }, c); var Accordion = (p) => { const name = p.name || rand("acc"); return each(p.items, (it) => { return h("div", { class: cls("collapse", p.class) }, [ - h("input", { type: "radio", name, checked: it.open || undefined }), + h("input", { type: "radio", name, checked: it.open || void 0 }), it.title ? h("div", { class: cls("collapse-title", `${it.classTitle ?? " font-semibold"}`) }, it.title) : null, it.content ? h("div", { class: cls("collapse-content text-sm", `${it.classContent ?? " font-semibold"}`) }, it.content) : null ]); }); }; - var Alert = (p, c) => h("div", { ...p, class: cls("alert", p.class) }, c); - var Avatar = (p, c) => h("div", { class: "avatar" }, h("div", { class: p.class }, c)); - var AvatarGroup = (p, c) => h("div", { ...p, class: cls("avatar-group -space-x-6", p.class) }, c); var Autocomplete = ({ items, value, onselect, placeholder = "...", ...props }) => { - const query = $(val(value) || ""); - const filtered = $(() => filterBy(items, query())); + const query = $2(val(value) || ""); + const filtered = $2(() => filterBy(items, query())); const pick = (item) => { const display = getBy(item); const actual = typeof item === "string" ? item : item.value; query(display); - if (isFunc(value)) - value(actual); + if (isFunc(value)) value(actual); onselect?.(item); hide(); }; return Dropdown({ class: "w-80" }, [ - h("div", { tabindex: "0", role: "button", class: "w-full" }, Input({ ...props, placeholder, value: query, left: Icon("icon-[lucide--search]") })), - 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" }, h("ul", { class: "menu flex-col flex-nowrap w-full p-0" }, [ - each(filtered, (item) => h("li", {}, [h("a", { onmousedown: (e) => e.preventDefault(), onclick: () => pick(item) }, getBy(item))]), "value"), - () => filtered().length === 0 ? h("li", { class: "p-4 opacity-50 text-center" }, "Sin resultados") : null - ])) + h("div", { tabindex: "0", role: "button", class: "w-full" }, Input({ ...props, placeholder, value: query, left: Icon({}, "icon-[lucide--search]") })), + 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" }, + h("ul", { class: "menu flex-col flex-nowrap w-full p-0" }, [ + each(filtered, (item) => h("li", {}, [h("a", { onmousedown: (e) => e.preventDefault(), onclick: () => pick(item) }, getBy(item))]), "value"), + () => filtered().length === 0 ? h("li", { class: "p-4 opacity-50 text-center" }, "Sin resultados") : null + ]) + ) ]); }; - var Badge = (p, c) => h("span", { ...p, class: cls("badge", p.class) }, c); - var Breadcrumbs = (p, c) => h("div", { ...p, class: cls("breadcrumbs", p.class) }, c); - var Button = (p, c) => h("button", { ...p, class: cls("btn", p.class) }, c); var Calendar = (p) => { - const internalDate = $(new Date); - const hoverDate = $(null); - const startHour = $(0); - const endHour = $(0); - const now = new Date; + const internalDate = $2(/* @__PURE__ */ new Date()); + const hoverDate = $2(null); + const startHour = $2(0); + const endHour = $2(0); + const now = /* @__PURE__ */ new Date(); const todayStr = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}-${String(now.getDate()).padStart(2, "0")}`; const fmt = (d) => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`; const rangeMode = () => val(p.range) === true; @@ -757,9 +693,8 @@ const offset = firstDay === 0 ? 6 : firstDay - 1; const dim = new Date(y, m + 1, 0).getDate(); const cells = []; - for (let i = 0;i < offset; i++) - cells.push(h("div")); - for (let i = 1;i <= dim; i++) { + for (let i = 0; i < offset; i++) cells.push(h("div")); + for (let i = 1; i <= dim; i++) { const date = new Date(y, m, i), ds = fmt(date); cells.push(h("button", { type: "button", @@ -770,10 +705,8 @@ let inRange = false; if (rangeMode() && v?.start) { const start = v.start; - if (!v.end && h2) - inRange = ds > start && ds <= h2 || ds < start && ds >= h2; - else if (v.end) - inRange = ds > start && ds < v.end; + if (!v.end && h2) inRange = ds > start && ds <= h2 || ds < start && ds >= h2; + else if (v.end) inRange = ds > start && ds < v.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"; @@ -787,21 +720,13 @@ return cells; } ]), - p.hour ? h("div", { class: "mt-3 pt-2 border-t border-base-300" }, rangeMode() ? h("div", { class: "flex gap-4" }, [HourSlider({ value: startHour, onChange: (h2) => startHour(h2) }), HourSlider({ value: endHour, onChange: (h2) => endHour(h2) })]) : HourSlider({ value: startHour, onChange: (h2) => startHour(h2) })) : null + p.hour ? h( + "div", + { class: "mt-3 pt-2 border-t border-base-300" }, + rangeMode() ? h("div", { class: "flex gap-4" }, [HourSlider({ value: startHour, onChange: (h2) => startHour(h2) }), HourSlider({ value: endHour, onChange: (h2) => endHour(h2) })]) : HourSlider({ value: startHour, onChange: (h2) => startHour(h2) }) + ) : null ]); }; - var Card = (p, c) => h("div", { ...p, class: cls("card", p.class) }, c); - var CardTitle = (p, c) => h("div", { ...p, class: cls("card-title", p.class) }, c); - var CardBody = (p, c) => h("div", { ...p, class: cls("card-body", p.class) }, c); - var CardActions = (p, c) => h("div", { ...p, class: cls("card-actions", p.class) }, c); - var Carousel = (p, c) => h("div", { ...p, class: cls("carousel", p.class) }, c); - var CarouselItem = (p, c) => h("div", { ...p, class: cls("carousel-item", p.class) }, c); - var Chat = (p, c) => h("div", { ...p, class: cls("chat", p.class) }, c); - var ChatBubble = (p, c) => h("div", { ...p, class: cls("chat-bubble", p.class) }, c); - var ChatFooter = (p, c) => h("div", { ...p, class: cls("chat-footer", p.class) }, c); - var ChatHeader = (p, c) => h("div", { ...p, class: cls("chat-header", p.class) }, c); - var ChatImage = (p, c) => h("div", { ...p, class: cls("chat-image avatar", p.class) }, h("div", { class: "w-10 rounded-full" }, typeof c === "string" ? h("img", { src: c, alt: "avatar" }) : c)); - var Checkbox = (p) => h("input", { ...p, type: "checkbox", class: cls("checkbox", p.class) }); var Colorpicker = (p) => { const current = () => val(p.value) || "#000000"; return Dropdown({}, [ @@ -809,9 +734,12 @@ h("div", { class: "size-5 rounded-sm", style: () => `background-color: ${current()}` }), p.label && h("span", {}, p.label) ]), - DropdownContent({ class: "p-0" }, ColorPalette({ value: p.value, onchange: (c) => { - isFunc(p.value) ? p.value(c) : p.onchange?.(c); - } })) + DropdownContent( + { class: "p-0" }, + ColorPalette({ value: p.value, onchange: (c) => { + isFunc(p.value) ? p.value(c) : p.onchange?.(c); + } }) + ) ]); }; var ColorPalette = (p) => { @@ -888,25 +816,28 @@ }; return h("div", { class: cls("p-3 bg-base-100 rounded-box shadow w-64", p.class) - }, h("div", { class: "grid grid-cols-8 gap-1" }, palette.map((c) => h("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); - } - })))); + }, h( + "div", + { class: "grid grid-cols-8 gap-1" }, + palette.map((c) => h("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 = $(""); + const displayValue = $2(""); const rangeMode = () => val(p.range) === true; watch(() => { const v = val(p.value); - if (!v) - return displayValue(""); + if (!v) return displayValue(""); let text = ""; if (typeof v === "string") { text = p.hour && v.includes("T") ? v.replace("T", " ") : v; @@ -921,12 +852,9 @@ displayValue(text); }); const handleChange = (val2) => { - if (isFunc(p.value)) - p.value(val2); - else - p.onChange?.(val2); - if (!rangeMode() || val2?.end != null) - hide(); + if (isFunc(p.value)) p.value(val2); + else p.onChange?.(val2); + if (!rangeMode() || val2?.end != null) hide(); }; return Dropdown({ class: cls("w-full", p.class) }, [ h("label", { @@ -944,54 +872,40 @@ onmousedown: (e) => { e.preventDefault(); e.stopPropagation(); - if (isFunc(p.value)) - p.value(null); - else - p.onChange?.(null); + if (isFunc(p.value)) p.value(null); + else p.onChange?.(null); displayValue(""); } }, h("span", { class: "icon-[lucide--x] opacity-50" })) : null ]), - DropdownContent({ class: "p-0" }, Calendar({ value: p.value, range: rangeMode(), hour: p.hour, onChange: handleChange })) + 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: () => val(p.checked), onchange: (e) => isFunc(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) => h("div", { ...p, class: cls("divider", p.class) }); - var Dropdown = (p, c) => h("div", { ...p, class: cls("dropdown", p.class) }, c); - var DropdownButton = (p, c) => h("div", { ...p, tabindex: "0", role: "button", class: cls("btn", p.class) }, c); - var DropdownContent = (p, c) => h("div", { ...p, tabindex: "0", class: cls("dropdown-content", p.class) }, c); - var Fab = (p, c) => h("div", { class: "fab" }, [h("div", { tabindex: "0", role: "button", class: cls("btn", p.class) }, Icon(p.icon)), c]); - var Fieldset = (p, c) => h("fieldset", { class: cls("fieldset", p.class) }, [h("legend", { class: "fieldset-legend" }, p.label), c]); var Fileinput = (p) => { - const files = $([]); - const drag = $(false); - const error = $(null); + const files = $2([]); + const drag = $2(false); + const error = $2(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`); + error(`M\xE1x ${p.max || 2}MB`); return; } const updated = [...files(), ...arr]; files(updated); - if (isFunc(p.onselect)) - p.onselect(updated); - else if (isFunc(p.value)) - p.value(updated); + if (isFunc(p.onselect)) p.onselect(updated); + else if (isFunc(p.value)) p.value(updated); }; const remove = (idx) => { const updated = files().filter((_, i) => i !== idx); files(updated); - if (isFunc(p.onselect)) - p.onselect(updated); - else if (isFunc(p.value)) - p.value(updated); + if (isFunc(p.onselect)) p.onselect(updated); + else if (isFunc(p.value)) p.value(updated); }; return h("div", { class: cls("fieldset w-full p-0", p.class) }, [ h("label", { @@ -1010,7 +924,7 @@ h("div", { class: "flex items-center gap-3 w-full" }, [ h("span", { class: "icon-[lucide--upload]" }), h("span", { class: "text-sm opacity-70 truncate grow text-left" }, t("uploadFiles")), - h("span", { class: "text-[10px] opacity-40 shrink-0" }, `Mรกx ${p.max || 2}MB`) + h("span", { class: "text-[10px] opacity-40 shrink-0" }, `M\xE1x ${p.max || 2}MB`) ]), h("input", { type: "file", @@ -1021,74 +935,83 @@ }) ]), () => error() && h("span", { class: "text-[10px] text-error mt-1 px-1 font-medium" }, error()), - when(() => files().length > 0, () => h("ul", { class: "mt-2 space-y-1" }, each(files, (file, idx) => h("li", { class: "flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300" }, [ - h("div", { class: "flex items-center gap-2 truncate" }, [ - h("span", { class: "opacity-50" }, "\uD83D\uDCC4"), - h("span", { class: "truncate font-medium max-w-[200px]" }, file.name), - h("span", { class: "text-[9px] opacity-40" }, `(${(file.size / 1024).toFixed(0)} KB)`) - ]), - h("button", { - type: "button", - class: "btn btn-ghost btn-xs btn-circle", - onclick: (e) => { - e.preventDefault(); - remove(idx); - } - }, h("span", { class: "icon-[lucide--x]" })) - ])))) + when( + () => files().length > 0, + () => h( + "ul", + { class: "mt-2 space-y-1" }, + each( + files, + (file, idx) => h("li", { class: "flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300" }, [ + h("div", { class: "flex items-center gap-2 truncate" }, [ + h("span", { class: "opacity-50" }, "\u{1F4C4}"), + h("span", { class: "truncate font-medium max-w-[200px]" }, file.name), + h("span", { class: "text-[9px] opacity-40" }, `(${(file.size / 1024).toFixed(0)} KB)`) + ]), + h("button", { + type: "button", + class: "btn btn-ghost btn-xs btn-circle", + onclick: (e) => { + e.preventDefault(); + remove(idx); + } + }, h("span", { class: "icon-[lucide--x]" })) + ]) + ) + ) + ) ]); }; - var Icon = (p) => h("span", { class: p.startsWith("icon-") ? p : "" }, p.startsWith("icon-") ? null : p); - var Indicator = (p, c) => h("div", { ...p, class: cls("indicator", p.class) }, [p.value && h("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 = $(false); + const showPassword = $2(false); const isPassword = p.type === "password"; const pattern = rule ?? null; const inputType = () => isPassword ? val(showPassword) ? "text" : "password" : p.type || "search"; return h("label", { class: float ? "floating-label" : "" }, [ float ? h("span", {}, label2) : null, - h("label", { pattern, class: () => cls("input validator", p.class) }, [ - label2 && !float ? h("span", { class: "label" }, label2) : null, - left ?? null, - h("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 - ]), + h( + "label", + { pattern, class: () => cls("input validator", p.class) }, + [ + label2 && !float ? h("span", { class: "label" }, label2) : null, + left ?? null, + h("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 ? h("div", { class: "validator-hint" }, hint) : null ]); }; - var Kbd = (p, c) => h("kbd", { ...p, class: cls("kbd", p.class) }, c); - var List = (p, c) => h("ul", { ...p, class: cls("list", p.class) }, c); - var ListRows = (p) => () => (val(p.items) || []).map((item, idx) => h("li", { class: cls("list-row", p.class, item?.class) }, typeof p.render === "function" ? p.render(item, idx) : item)); - var Loading = (p, c) => h("span", { ...p, class: cls("loading loading-spinner", p.class) }, c); var Menu = (p) => { - if (p.children !== undefined) - return h("ul", { class: cls("menu", p.class), ...p }, p.children); + if (p.children !== void 0) return h("ul", { class: cls("menu", p.class), ...p }, p.children); const { items } = p; - const render2 = (item) => item.children ? h("li", {}, h("details", { open: item.open || undefined }, [ + const render2 = (item) => item.children ? h("li", {}, h("details", { open: item.open || void 0 }, [ h("summary", {}, getBy(item)), h("ul", {}, each(() => val(item.children) || [], render2)) ])) : h("li", {}, h("a", { href: item.href, onclick: item.onclick ? (e) => { - if (!item.href) - e.preventDefault(); + if (!item.href) e.preventDefault(); item.onclick(e); } : null }, getBy(item))); - return h("ul", { class: cls("menu", p.class) }, each(() => val(items) || [], render2)); + return h( + "ul", + { class: cls("menu", p.class) }, + each(() => val(items) || [], render2) + ); }; var Modal = (p) => { let dialogRef = null; watch(() => { const isOpen = val(p.open); - if (!dialogRef) - return; + if (!dialogRef) return; isOpen ? dialogRef.showModal() : dialogRef.hide(); }); const close = () => isFunc(p.open) && p.open(false); @@ -1105,16 +1028,8 @@ ]) ]); }; - var Navbar = (p, c) => h("div", { ...p, class: cls("navbar", p.class) }, c); - var Progress = (p) => h("progress", { ...p, class: cls("progress", p.class) }); - var Radial = (p, c) => h("div", { class: cls("radial-progress", p.class), style: `--value:${val(p.value) ?? 0};`, role: "progressbar", "aria-valuenow": p.value }, c); - var Radio = (p) => h("input", { ...p, type: "radio", class: cls("radio", p.class) }); - var Range = (p) => h("input", { ...p, type: "range", class: cls("range", p.class) }); - var Rating = (p, c) => h("div", { ...p, class: "rating" }, c); - var RatingItems = (p) => [...Array(p.count)].map((_, i) => h("input", { class: cls("mask", p.class), name: p.name, type: "radio", checked: () => val(p.value) === i, onchange: () => isFunc(p.value) ? p.value(i) : p.onchange?.(i) })); var Select = (p, c) => { - if (c !== undefined) - return h("select", { class: cls("select", p.class), ...p }, c); + if (c !== void 0) return h("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 = val(items) || []; @@ -1126,35 +1041,28 @@ h("label", { class: cls("select", rest.class) }, [ !float && label2 ? h("span", { class: "label" }, label2) : null, left ?? null, - h("select", { - value: () => val(value), - onchange: (e) => isFunc(value) ? value(e.target.value) : rest.onchange?.(e) - }, each(opts, (item) => { - const val2 = getBy(item, item.value !== undefined ? "value" : undefined); - const lab = getBy(item, "label"); - return h("option", { value: val2, disabled: item.disabled || undefined }, lab); - })), + h( + "select", + { + value: () => val(value), + onchange: (e) => isFunc(value) ? value(e.target.value) : rest.onchange?.(e) + }, + each(opts, (item) => { + const val2 = getBy(item, item.value !== void 0 ? "value" : void 0); + const lab = getBy(item, "label"); + return h("option", { value: val2, disabled: item.disabled || void 0 }, lab); + }) + ), right ?? null ]), hint ? h("div", { class: "validator-hint" }, hint) : null ]); }; - var Skeleton = (p) => h("div", { ...p, class: cls("skeleton", p.class) }); - var SkeletonText = (p) => h("span", { ...p, class: cls("skeleton skeleton-text", p.class) }); - var Stack = (p, c) => h("div", { ...p, class: cls("stack", p.class) }, c); - var Stats = (p, c) => h("div", { ...p, class: cls("stats shadow", p.class) }, c); var Stat = (p) => h("div", { ...p, class: cls("stat", p.class) }, [ p.title ? h("div", { class: "stat-title" }, p.title) : null, p.value ? h("div", { class: "stat-value" }, p.value) : null, p.desc ? h("div", { class: "stat-desc" }, p.desc) : null ]); - var Steps = (p, c) => h("ul", { ...p, class: cls("steps", p.class) }, c); - var Step = (p, c) => h("li", { ...p, class: cls("step", p.class), "data-content": p.dataContent }, c); - var Swap = (p, c) => h("label", { ...p, class: cls("swap", p.class) }, c); - var SwapToggle = (p) => h("input", { type: "checkbox", checked: () => val(p.value), onchange: (e) => isFunc(p.value) && p.value(e.target.checked), class: p.class }); - var SwapOn = (p, c) => h("div", { ...p, class: cls("swap-on", p.class) }, c); - var SwapOff = (p, c) => h("div", { ...p, class: cls("swap-off", p.class) }, c); - var Table = (p, c) => h("table", { ...p, class: cls("table", p.class) }, c); var TableItems = ({ items, columns = [], header = true }) => { const head = header !== false && columns.some((c) => c.label) ? h("thead", {}, h("tr", {}, columns.map((c) => h("th", { class: c.class }, c.label)))) : null; const body = h("tbody", {}, () => { @@ -1177,8 +1085,7 @@ const arr = val(items); const newArr = arr.filter((_, i) => i !== idx); items(newArr); - if (activeIndex() >= newArr.length) - activeIndex(Math.max(0, newArr.length - 1)); + if (activeIndex() >= newArr.length) activeIndex(Math.max(0, newArr.length - 1)); } : null); return h("div", { ...rest, class: cls("tabs", className) }, () => { const list = val(items) || []; @@ -1209,9 +1116,6 @@ }); }); }; - var Textarea = (p) => h("textarea", { ...p, class: cls("textarea", p.class) }); - var Textrotate = (p, c) => h("span", { ...p, class: cls("text-rotate", p.class) }, h("span", {}, c)); - var Timeline = (p, c) => h("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) { @@ -1222,19 +1126,17 @@ container.appendChild(host); let closeFn, timer, enterTimer; const ToastComponent = () => { - const visible = $(false); - const leaving = $(false); + const visible = $2(false); + const leaving = $2(false); closeFn = () => { - if (leaving()) - return; + if (leaving()) return; clearTimeout(timer); clearTimeout(enterTimer); leaving(true); setTimeout(() => { instance.destroy(); host.remove(); - if (!container.hasChildNodes()) - container.remove(); + if (!container.hasChildNodes()) container.remove(); }, 300); }; enterTimer = setTimeout(() => visible(true), 0); @@ -1243,10 +1145,8 @@ return h("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`; + 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`; } }, [ @@ -1258,26 +1158,28 @@ ]); }; const instance = mount(ToastComponent, host); - if (duration > 0) - timer = setTimeout(closeFn, duration); + if (duration > 0) timer = setTimeout(closeFn, duration); return closeFn; }; - var Toggle = (p) => h("input", { ...p, type: "checkbox", class: cls("toggle", p.class) }); - var Tooltip = (p, c) => h("div", { ...p, class: cls("tooltip", p.class), "data-tip": p.tip }, c); + + // src/editor.js + var editor_exports = {}; + __export(editor_exports, { + Editor: () => Editor + }); var Editor = (p) => { const { value, class: extraClass } = p; let editorRef = null; let savedRange = null; - const isSource = $(false); - const source = $(""); - const count = $(0); - const refreshTick = $(0); - const showEmojis = $(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 isSource = $2(false); + const source = $2(""); + const count = $2(0); + const refreshTick = $2(0); + const showEmojis = $2(false); + const emojis = ["\u{1F600}", "\u{1F60A}", "\u{1F609}", "\u{1F9D0}", "\u{1F62E}", "\u{1F914}", "\u{1F605}", "\u{1F602}", "\u{1F60D}", "\u{1F618}", "\u{1F970}", "\u{1F44D}", "\u{1F44E}", "\u{1F44C}", "\u{1F91D}", "\u{1F91E}", "\u{1F44B}", "\u{1F44F}", "\u{1F64C}", "\u{1F64F}", "\u{1F4AA}", "\u261D\uFE0F", "\u{1F447}", "\u{1F448}", "\u{1F449}", "\u{1F595}", "\u2705", "\u26A0\uFE0F", "\u{1F680}", "\u{1F4E2}", "\u2709\uFE0F", "\u2764\uFE0F"]; const saveSelection = () => { const sel = window.getSelection(); - if (sel.getRangeAt && sel.rangeCount) - savedRange = sel.getRangeAt(0); + if (sel.getRangeAt && sel.rangeCount) savedRange = sel.getRangeAt(0); }; const restoreSelection = () => { if (savedRange) { @@ -1288,25 +1190,19 @@ }; const triggerRefresh = () => { refreshTick(refreshTick() + 1); - if (editorRef) - count(editorRef.innerText.length); + if (editorRef) count(editorRef.innerText.length); }; const notify = () => { - if (!editorRef) - return; + if (!editorRef) return; const html = editorRef.innerHTML; - if (isFunc(value)) - value(html); - else - p.onchange?.(html); + if (isFunc(value)) value(html); + else p.onchange?.(html); triggerRefresh(); }; const exec = (cmd, val2 = null) => { - if (!editorRef) - return; + if (!editorRef) return; editorRef.focus(); - if (savedRange) - restoreSelection(); + if (savedRange) restoreSelection(); document.execCommand(cmd, false, val2); savedRange = null; notify(); @@ -1322,9 +1218,8 @@ document.body.appendChild(overlay); }; const handleUpload = (file) => { - if (!file) - return; - const reader = new FileReader; + if (!file) return; + const reader = new FileReader(); reader.onload = (re) => { if (file.type.startsWith("image/")) { const imgHtml = `
 `; @@ -1338,14 +1233,12 @@ }; const queryState = (cmd, val2 = null) => { refreshTick(); - if (!editorRef || isSource()) - return false; + 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 === val2) - return true; + if (node.nodeType === 1 && node.tagName === val2) return true; node = node.parentNode; } return false; @@ -1386,8 +1279,7 @@ h("span", { class: "w-px h-5 bg-base-300 mx-1" }), h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => { const url = window.prompt("URL:"); - if (url) - exec("createLink", url); + if (url) exec("createLink", url); } }, h("span", { class: "icon-[lucide--link]" })), h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => { const input2 = document.createElement("input"); @@ -1412,12 +1304,12 @@ h("button", { type: "button", class: "btn btn-ghost btn-xs", onclick: () => exec("redo") }, h("span", { class: "icon-[lucide--redo-2]" })) ]), h("button", { type: "button", class: () => `btn btn-ghost btn-xs ${isSource() ? "btn-active" : ""}`, onclick: () => { - if (!isSource()) - source(editorRef?.innerHTML || ""); + if (!isSource()) source(editorRef?.innerHTML || ""); else if (editorRef) { editorRef.innerHTML = source(); notify(); } + ; isSource(!isSource()); } }, h("span", { class: "icon-[lucide--code-2]" })) ]); @@ -1446,8 +1338,7 @@ const container = e.target.closest(".resizable-img-container"); if (container) { const img = container.querySelector("img"); - if (img) - openLightbox(img.src); + if (img) openLightbox(img.src); } }); } @@ -1492,8 +1383,7 @@ value: source, oninput: (e) => { source(e.target.value); - if (editorRef) - editorRef.innerHTML = e.target.value; + if (editorRef) editorRef.innerHTML = e.target.value; p.onchange?.(e.target.value); } }) @@ -1504,22 +1394,8 @@ ]); }; - // sigpro-ui_IIFE.js + // src/build_umd.js if (typeof window !== "undefined") { - Object.assign(window, { $, $$, watch, h, Fragment, when, each, router, mount, batch, onUnmount, isArr, isFunc, isObj }); - "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((tag) => { - window[tag] = (props, children) => h(tag, props, children); - }); - Object.entries(exports_sigpro_ui).forEach(([name, value]) => { - Object.defineProperty(window, name, { - value, - writable: false, - configurable: true, - enumerable: true - }); - }); - } - if (typeof window !== "undefined") { - window.Components = { ...exports_sigpro_ui }; + Object.assign(window, sigpro_ui_exports, editor_exports, locale_exports); } })(); diff --git a/dist/sigpro-ui.min.js b/dist/sigpro-ui.min.js index c5708de..96ced2e 100644 --- a/dist/sigpro-ui.min.js +++ b/dist/sigpro-ui.min.js @@ -1,7 +1,7 @@ -(()=>{var Jn=Object.defineProperty;var Qn=(n)=>n;function Xn(n,t){this[n]=Qn.bind(null,t)}var zn=(n,t)=>{for(var f in t)Jn(n,f,{get:t[f],enumerable:!0,configurable:!0,set:Xn.bind(t,f)})};var tn={};zn(tn,{when:()=>g,watch:()=>Y,t:()=>Tn,router:()=>B,onUnmount:()=>V,mount:()=>x,lang:()=>Sn,isObj:()=>R,isFunc:()=>G,isArr:()=>X,hide:()=>h,h:()=>o,each:()=>M,currentLocale:()=>Nn,batch:()=>m,Tooltip:()=>ct,Toggle:()=>it,Toast:()=>at,Timeline:()=>xt,Textrotate:()=>gt,Textarea:()=>Ft,Tabs:()=>Ht,TableItems:()=>Dt,Table:()=>$t,SwapToggle:()=>jn,SwapOn:()=>Kn,SwapOff:()=>Ln,Swap:()=>dn,Steps:()=>qt,Step:()=>Rt,Stats:()=>Yt,Stat:()=>Bt,Stack:()=>Vt,SkeletonText:()=>It,Skeleton:()=>Zt,Select:()=>Mt,RatingItems:()=>zt,Rating:()=>Xt,Range:()=>Qt,Radio:()=>Jt,Radial:()=>kt,Progress:()=>Pt,Navbar:()=>Lt,Modal:()=>Kt,Menu:()=>jt,Locale:()=>$n,Loading:()=>dt,ListRows:()=>Wt,List:()=>Ut,Kbd:()=>Gt,Input:()=>Wn,Indicator:()=>yt,Icon:()=>a,Fragment:()=>v,Fileinput:()=>Ct,Fieldset:()=>Tt,Fab:()=>St,Editor:()=>mt,DropdownContent:()=>nn,DropdownButton:()=>Un,Dropdown:()=>p,DrawerToggle:()=>Nt,DrawerSide:()=>et,DrawerOverlay:()=>At,DrawerContent:()=>bt,Drawer:()=>Et,Divider:()=>Ot,Datepicker:()=>wt,Colorpicker:()=>st,ColorPalette:()=>Gn,Checkbox:()=>ut,ChatImage:()=>_t,ChatHeader:()=>rt,ChatFooter:()=>ft,ChatBubble:()=>ot,Chat:()=>tt,CarouselItem:()=>nt,Carousel:()=>pn,CardTitle:()=>ln,CardBody:()=>vn,CardActions:()=>hn,Card:()=>mn,Calendar:()=>yn,Button:()=>Cn,Breadcrumbs:()=>cn,Badge:()=>an,AvatarGroup:()=>gn,Avatar:()=>Fn,Autocomplete:()=>xn,Alert:()=>Hn,Accordion:()=>Dn,$$:()=>F,$:()=>d});var G=(n)=>typeof n==="function",R=(n)=>n&&typeof n==="object",X=Array.isArray,z=typeof document<"u"?document:null,bn=(n)=>n?._isRuntime?n.container:n instanceof Node?n:z.createTextNode(n==null?"":String(n)),K=null,J=null,D=!1,i=0,c=new Set,en=new WeakMap,un=Symbol("iter"),sn=new WeakMap,Mn="http://www.w3.org/2000/svg",An="http://www.w3.org/1999/xlink",Zn=new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(",")),q=(n)=>{if(!n||n._disposed)return;n._disposed=!0;let t=[n];while(t.length){let f=t.pop();if(f._cleanups)f._cleanups.forEach((r)=>r()),f._cleanups.clear();if(f._children)f._children.forEach((r)=>t.push(r)),f._children.clear();if(f._deps)f._deps.forEach((r)=>r.delete(f)),f._deps.clear()}},V=(n)=>{if(J)(J._cleanups||=new Set).add(n)},In=(n)=>{let t=K;K=null;try{return n()}finally{K=t}},H=(n,t=!1)=>{let f=()=>{if(f._disposed)return;if(f._deps)f._deps.forEach((s)=>s.delete(f));if(f._cleanups)f._cleanups.forEach((s)=>s()),f._cleanups.clear();let r=K,_=J;K=J=f;try{return f._result=n()}catch(s){console.error("[SigPro]",s)}finally{K=r,J=_}};if(f._deps=f._cleanups=f._children=null,f._disposed=!1,f._isComputed=t,f._depth=K?K._depth+1:0,f._mounts=[],f._parent=J,J)(J._children||=new Set).add(f);return f},On=()=>{if(D)return;D=!0;let n=Array.from(c).sort((t,f)=>t._depth-f._depth);c.clear();for(let t of n)if(!t._disposed)t();D=!1},m=(n)=>{i++;try{return n()}finally{if(i--,i===0&&c.size>0&&!D)On()}},Q=(n,t=!1)=>{if(!t&&K&&!K._disposed)n.add(K),(K._deps||=new Set).add(n);else if(t&&n.size>0){let f=!1;for(let r of n){if(r===K||r._disposed)continue;if(r._isComputed){if(r._dirty=!0,r._subs)Q(r._subs,!0)}else c.add(r),f=!0}if(f&&!D&&i===0)queueMicrotask(On)}},d=(n,t=null)=>{let f=new Set;if(G(n)){let r,_=()=>{if(_._dirty){let s=K;K=_;try{let u=n();if(!Object.is(r,u))r=u,Q(f,!0)}finally{K=s}_._dirty=!1}return Q(f),r};return _._isComputed=!0,_._subs=f,_._dirty=!0,_._deps=null,_._disposed=!1,_}if(t)try{n=JSON.parse(localStorage.getItem(t))??n}catch(r){}return(...r)=>{if(r.length){let _=G(r[0])?r[0](n):r[0];if(!Object.is(n,_)){if(n=_,t)localStorage.setItem(t,JSON.stringify(n));Q(f,!0)}}return Q(f),n}},F=(n)=>{if(!R(n))return n;let t=en.get(n);if(t)return t;let f=new Map,r=(s)=>{let u=f.get(s);if(!u)f.set(s,u=new Set);return u},_=new Proxy(n,{get(s,u,w){if(typeof u!=="symbol")Q(r(u));return F(Reflect.get(s,u,w))},set(s,u,w,E){let b=Reflect.has(s,u),O=Reflect.get(s,u,E),T=Reflect.set(s,u,w,E);if(T&&!Object.is(O,w)){if(Q(r(u),!0),!b)Q(r(un),!0)}return T},deleteProperty(s,u){let w=Reflect.deleteProperty(s,u);if(w)Q(r(u),!0),Q(r(un),!0);return w},ownKeys(s){return Q(r(un)),Reflect.ownKeys(s)}});return en.set(n,_),_},Y=(n,t)=>{if(t===void 0){let r=H(n);return r(),()=>q(r)}let f=H(()=>{let r=Array.isArray(n)?n.map((_)=>_()):n();In(()=>t(r))});return f(),()=>q(f)},En=(n)=>{if(!n)return;if(n._cleanups)n._cleanups.forEach((t)=>t()),n._cleanups.clear();if(n._ownerEffect)q(n._ownerEffect);if(n.childNodes)n.childNodes.forEach((t)=>En(t))},Vn=/^\s*(javascript|data|vbscript):/i,Yn=new Set(["src","href","formaction","action","background","code","archive"]),Bn=(n)=>Yn.has(n)||n.startsWith("on"),wn=(n,t)=>{if(t==null||t===!1)return null;if(Bn(n)){let f=String(t);if(Vn.test(f))return console.warn(`[SigPro] Bloqueado protocolo peligroso en ${n}`),"#"}return t},o=(n,t={},f=[])=>{if(t instanceof Node||X(t)||!R(t))f=t,t={};if(G(n)){let u=H(()=>{let O=n(t,{children:f,emit:(T,...C)=>t[`on${T[0].toUpperCase()}${T.slice(1)}`]?.(...C)});return u._result=O,O});u();let w=u._result;if(w==null)return null;let E=w instanceof Node||X(w)&&w.every((O)=>O instanceof Node)?w:z.createTextNode(String(w)),b=(O)=>{if(R(O)&&!O._isRuntime)O._mounts=u._mounts||[],O._cleanups=u._cleanups||new Set,O._ownerEffect=u};return X(E)?E.forEach(b):b(E),E}let r=Zn.has(n),_=r?z.createElementNS(Mn,n):z.createElement(n);_._cleanups=new Set;for(let u of Object.keys(t)){let w=t[u];if(u==="ref"){G(w)?w(_):w.current=_;continue}if(r&&u.startsWith("xlink:")){let E=wn(u.slice(6),w);E==null?_.removeAttributeNS(An,u.slice(6)):_.setAttributeNS(An,u.slice(6),E);continue}if(u.startsWith("on")){let E=u.slice(2).toLowerCase();_.addEventListener(E,w);let b=()=>_.removeEventListener(E,w);_._cleanups.add(b),V(b)}else if(G(w)){let E=H(()=>{let b=wn(u,w());if(u==="class")_.className=b||"";else if(b==null)_.removeAttribute(u);else if(u==="style"&&typeof b==="string")_.setAttribute("style",b);else if(u in _&&!r)_[u]=b;else _.setAttribute(u,b===!0?"":b)});if(E(),_._cleanups.add(()=>q(E)),V(()=>q(E)),/^(INPUT|TEXTAREA|SELECT)$/.test(_.tagName)&&(u==="value"||u==="checked")){let b=u==="checked"?"change":"input";_.addEventListener(b,(O)=>w(O.target[u]))}}else{let E=wn(u,w);if(E!=null)if(u==="style"&&typeof E==="string")_.setAttribute("style",E);else if(u in _&&!r)_[u]=E;else _.setAttribute(u,E===!0?"":E)}}let s=(u)=>{if(X(u))return u.forEach(s);if(G(u)){let w=z.createTextNode("");_.appendChild(w);let E=[],b=H(()=>{let O=u(),T=(X(O)?O:[O]).map(bn);E.forEach((y)=>{if(y._isRuntime)y.destroy();else En(y);if(y.parentNode)y.remove()});let C=w;for(let y=T.length-1;y>=0;y--){let A=T[y];if(A.parentNode!==C.parentNode)C.parentNode?.insertBefore(A,C);if(A._mounts)A._mounts.forEach((S)=>S());C=A}E=T});b(),_._cleanups.add(()=>q(b)),V(()=>q(b))}else{let w=bn(u);if(_.appendChild(w),w._mounts)w._mounts.forEach((E)=>E())}};return s(f),_},l=(n)=>{let t=new Set,f=J,r=K,_=z.createElement("div");_.style.display="contents",_.setAttribute("role","presentation"),J={_cleanups:t},K=null;let s=(u)=>{if(!u)return;if(u._isRuntime)t.add(u.destroy),_.appendChild(u.container);else if(X(u))u.forEach(s);else _.appendChild(u instanceof Node?u:z.createTextNode(String(u==null?"":u)))};try{s(n({onCleanup:(u)=>t.add(u)}))}finally{J=f,K=r}return{_isRuntime:!0,container:_,destroy:()=>{t.forEach((u)=>u()),En(_),_.remove()}}},g=(n,t,f=null)=>{let r=z.createTextNode(""),_=o("div",{style:"display:contents"},[r]),s=null;return Y(()=>!!(G(n)?n():n),(u)=>{if(s)s.destroy(),s=null;let w=u?t:f;if(w)s=l(()=>G(w)?w():w),_.insertBefore(s.container,r)}),V(()=>s?.destroy()),_},M=(n,t,f)=>{let r=z.createTextNode(""),_=o("div",{style:"display:contents"},[r]),s=new Map;return Y(()=>(G(n)?n():n)||[],(u)=>{let w=new Map,E=[],b=u||[];for(let T=0;Tt(C,T));else s.delete(y);w.set(y,A),E.push(A)}s.forEach((T)=>T.destroy());let O=r;for(let T=E.length-1;T>=0;T--){let y=E[T].container;if(y.nextSibling!==O)_.insertBefore(y,O);O=y}s=w}),_},B=(n)=>{let t=()=>window.location.hash.slice(1)||"/",f=d(t()),r=()=>f(t());window.addEventListener("hashchange",r),V(()=>window.removeEventListener("hashchange",r));let _=o("div",{class:"router-hook"}),s=null;return Y([f],()=>{let u=f(),w=n.find((E)=>{let b=E.path.split("/").filter(Boolean),O=u.split("/").filter(Boolean);return b.length===O.length&&b.every((T,C)=>T[0]===":"||T===O[C])})||n.find((E)=>E.path==="*");if(w){s?.destroy();let E={};w.path.split("/").filter(Boolean).forEach((b,O)=>{if(b[0]===":")E[b.slice(1)]=u.split("/").filter(Boolean)[O]}),B.params(E),s=l(()=>G(w.component)?w.component(E):w.component),_.replaceChildren(s.container)}}),_};B.params=d({});B.to=(n)=>window.location.hash=n.replace(/^#?\/?/,"#/");B.back=()=>window.history.back();B.path=()=>window.location.hash.replace(/^#/,"")||"/";var v=(n)=>n.children,x=(n,t)=>{let f=typeof t==="string"?z.querySelector(t):t;if(!f)return;if(sn.has(f))sn.get(f).destroy();let r=l(G(n)?n:()=>n);return f.replaceChildren(r.container),sn.set(f,r),r};if(typeof window<"u")"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((n)=>{window[n]=(t,f)=>o(n,t,f)});var W=(n)=>typeof n==="function"?n():n,$=(n,t="label")=>n&&typeof n==="object"?n[t]:n,N=(...n)=>n.filter(Boolean).join(" ").trim(),qn=(n,t,f="label")=>{let r=String(W(t)||"").toLowerCase(),_=(W(n)||[]).map((s)=>typeof s==="object"?s:{label:s,value:s});return!r?_:_.filter((s)=>String(s[f]||"").toLowerCase().includes(r))},Rn=(n)=>`${n}-${Math.random().toString(36).slice(2,9)}`,h=()=>document.activeElement?.blur(),Sn={es:{uploadFiles:"Arrastrar y soltar o click para seleccionar..."},en:{uploadFiles:"Drag and drop or click to select"}},Nn=d("en"),$n=(n)=>Nn(n),Tn=(n)=>()=>Sn[Nn()][n]||n,Dn=(n)=>{let t=n.name||Rn("acc");return M(n.items,(f)=>{return o("div",{class:N("collapse",n.class)},[o("input",{type:"radio",name:t,checked:f.open||void 0}),f.title?o("div",{class:N("collapse-title",`${f.classTitle??" font-semibold"}`)},f.title):null,f.content?o("div",{class:N("collapse-content text-sm",`${f.classContent??" font-semibold"}`)},f.content):null])})},Hn=(n,t)=>o("div",{...n,class:N("alert",n.class)},t),Fn=(n,t)=>o("div",{class:"avatar"},o("div",{class:n.class},t)),gn=(n,t)=>o("div",{...n,class:N("avatar-group -space-x-6",n.class)},t),xn=({items:n,value:t,onselect:f,placeholder:r="...",..._})=>{let s=d(W(t)||""),u=d(()=>qn(n,s())),w=(E)=>{let b=$(E),O=typeof E==="string"?E:E.value;if(s(b),G(t))t(O);f?.(E),h()};return p({class:"w-80"},[o("div",{tabindex:"0",role:"button",class:"w-full"},Wn({..._,placeholder:r,value:s,left:a("icon-[lucide--search]")})),nn({class:"p-2 bg-base-100 rounded-box shadow-xl w-full max-h-60 overflow-y-auto border border-base-300 z-50"},o("ul",{class:"menu flex-col flex-nowrap w-full p-0"},[M(u,(E)=>o("li",{},[o("a",{onmousedown:(b)=>b.preventDefault(),onclick:()=>w(E)},$(E))]),"value"),()=>u().length===0?o("li",{class:"p-4 opacity-50 text-center"},"Sin resultados"):null]))])},an=(n,t)=>o("span",{...n,class:N("badge",n.class)},t),cn=(n,t)=>o("div",{...n,class:N("breadcrumbs",n.class)},t),Cn=(n,t)=>o("button",{...n,class:N("btn",n.class)},t),yn=(n)=>{let t=d(new Date),f=d(null),r=d(0),_=d(0),s=new Date,u=`${s.getFullYear()}-${String(s.getMonth()+1).padStart(2,"0")}-${String(s.getDate()).padStart(2,"0")}`,w=(A)=>`${A.getFullYear()}-${String(A.getMonth()+1).padStart(2,"0")}-${String(A.getDate()).padStart(2,"0")}`,E=()=>W(n.range)===!0,b=()=>W(n.value),O=(A)=>{let S=w(A),P=b();if(E())if(!P?.start||P.start&&P.end)n.onChange?.({start:S,end:null,...n.hour&&{startHour:r()}});else{let Z=P.start,k=S{let S=t();t(new Date(S.getFullYear(),S.getMonth()+A,1))},C=(A)=>{let S=t();t(new Date(S.getFullYear()+A,S.getMonth(),1))},y=({value:A,onChange:S})=>o("div",{class:"flex-1"},[o("div",{class:"flex gap-2 items-center"},[o("input",{type:"range",min:0,max:23,value:A,class:"range range-xs flex-1",oninput:(P)=>S(+P.target.value)}),o("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(W(A)).padStart(2,"0")+":00")])]);return o("div",{class:N("p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box w-80 select-none",n.class)},[o("div",{class:"flex justify-between items-center mb-4 gap-1"},[o("div",{class:"flex gap-0.5"},[o("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>C(-1)},o("span",{class:"icon-[lucide--chevrons-left]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>T(-1)},o("span",{class:"icon-[lucide--chevron-left]"}))]),o("span",{class:"font-bold uppercase flex-1 text-center"},()=>t().toLocaleString("es-ES",{month:"short",year:"numeric"})),o("div",{class:"flex gap-0.5"},[o("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>T(1)},o("span",{class:"icon-[lucide--chevron-right]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>C(1)},o("span",{class:"icon-[lucide--chevrons-right]"}))])]),o("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>f(null)},[...["L","M","X","J","V","S","D"].map((A)=>o("div",{class:"text-[10px] opacity-40 font-bold text-center"},A)),()=>{let A=t(),S=A.getFullYear(),P=A.getMonth(),Z=new Date(S,P,1).getDay(),k=Z===0?6:Z-1,on=new Date(S,P+1,0).getDate(),e=[];for(let U=0;U{let I=b(),fn=f(),Pn=typeof I==="string"?I.split("T")[0]===L:I?.start===L,kn=I?.end===L,rn=!1;if(E()&&I?.start){let _n=I.start;if(!I.end&&fn)rn=L>_n&&L<=fn||L<_n&&L>=fn;else if(I.end)rn=L>_n&&LE()&&f(L),onclick:()=>O(j)},U.toString()))}return e}]),n.hour?o("div",{class:"mt-3 pt-2 border-t border-base-300"},E()?o("div",{class:"flex gap-4"},[y({value:r,onChange:(A)=>r(A)}),y({value:_,onChange:(A)=>_(A)})]):y({value:r,onChange:(A)=>r(A)})):null])},mn=(n,t)=>o("div",{...n,class:N("card",n.class)},t),ln=(n,t)=>o("div",{...n,class:N("card-title",n.class)},t),vn=(n,t)=>o("div",{...n,class:N("card-body",n.class)},t),hn=(n,t)=>o("div",{...n,class:N("card-actions",n.class)},t),pn=(n,t)=>o("div",{...n,class:N("carousel",n.class)},t),nt=(n,t)=>o("div",{...n,class:N("carousel-item",n.class)},t),tt=(n,t)=>o("div",{...n,class:N("chat",n.class)},t),ot=(n,t)=>o("div",{...n,class:N("chat-bubble",n.class)},t),ft=(n,t)=>o("div",{...n,class:N("chat-footer",n.class)},t),rt=(n,t)=>o("div",{...n,class:N("chat-header",n.class)},t),_t=(n,t)=>o("div",{...n,class:N("chat-image avatar",n.class)},o("div",{class:"w-10 rounded-full"},typeof t==="string"?o("img",{src:t,alt:"avatar"}):t)),ut=(n)=>o("input",{...n,type:"checkbox",class:N("checkbox",n.class)}),st=(n)=>{let t=()=>W(n.value)||"#000000";return p({},[Un({class:"btn"},[o("div",{class:"size-5 rounded-sm",style:()=>`background-color: ${t()}`}),n.label&&o("span",{},n.label)]),nn({class:"p-0"},Gn({value:n.value,onchange:(f)=>{G(n.value)?n.value(f):n.onchange?.(f)}}))])},Gn=(n)=>{let t=()=>W(n.value)||"#000000",f=["#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"],r=(_)=>{G(n.value)?n.value(_):n.onchange?.(_),h()};return o("div",{class:N("p-3 bg-base-100 rounded-box shadow w-64",n.class)},o("div",{class:"grid grid-cols-8 gap-1"},f.map((_)=>o("button",{type:"button",style:`background-color: ${_}`,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 p-0 min-h-0 ${t().toLowerCase()===_.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{r(_)}}))))},wt=(n)=>{let t=d(""),f=()=>W(n.range)===!0;Y(()=>{let _=W(n.value);if(!_)return t("");let s="";if(typeof _==="string")s=n.hour&&_.includes("T")?_.replace("T"," "):_;else if(_.start&&_.end){let u=n.hour&&_.startHour!=null?`${_.start} ${String(_.startHour).padStart(2,"0")}:00`:_.start,w=n.hour&&_.endHour!=null?`${_.end} ${String(_.endHour).padStart(2,"0")}:00`:_.end;s=`${u} - ${w}`}else if(_.start)s=`${n.hour&&_.startHour!=null?`${_.start} ${String(_.startHour).padStart(2,"0")}:00`:_.start}...`;t(s)});let r=(_)=>{if(G(n.value))n.value(_);else n.onChange?.(_);if(!f()||_?.end!=null)h()};return p({class:N("w-full",n.class)},[o("label",{tabindex:"0",role:"button",class:"input input-bordered flex items-center gap-2 cursor-pointer"},[o("span",{class:"icon-[lucide--calendar] shrink-0"}),o("span",{class:()=>`grow text-left truncate ${!t()?"opacity-50":""}`},()=>t()||n.placeholder||(f()?"Seleccionar rango...":"Seleccionar fecha...")),()=>t()?o("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle -mr-2",onmousedown:(_)=>{if(_.preventDefault(),_.stopPropagation(),G(n.value))n.value(null);else n.onChange?.(null);t("")}},o("span",{class:"icon-[lucide--x] opacity-50"})):null]),nn({class:"p-0"},yn({value:n.value,range:f(),hour:n.hour,onChange:r}))])},Et=(n,t)=>div({...n,class:N("drawer",n.class)},t),Nt=(n)=>input({...n,type:"checkbox",class:"drawer-toggle",checked:()=>W(n.checked),onchange:(t)=>G(n.checked)&&n.checked(t.target.checked)}),bt=(n,t)=>div({...n,class:N("drawer-content",n.class)},t),et=(n,t)=>div({...n,class:N("drawer-side",n.class)},t),At=(n)=>label({...n,for:n.for,class:N("drawer-overlay",n.class)}),Ot=(n)=>o("div",{...n,class:N("divider",n.class)}),p=(n,t)=>o("div",{...n,class:N("dropdown",n.class)},t),Un=(n,t)=>o("div",{...n,tabindex:"0",role:"button",class:N("btn",n.class)},t),nn=(n,t)=>o("div",{...n,tabindex:"0",class:N("dropdown-content",n.class)},t),St=(n,t)=>o("div",{class:"fab"},[o("div",{tabindex:"0",role:"button",class:N("btn",n.class)},a(n.icon)),t]),Tt=(n,t)=>o("fieldset",{class:N("fieldset",n.class)},[o("legend",{class:"fieldset-legend"},n.label),t]),Ct=(n)=>{let t=d([]),f=d(!1),r=d(null),_=(n.max||2)*1024*1024,s=(w)=>{let E=Array.from(w);if(r(null),E.some((O)=>O.size>_)){r(`Mรกx ${n.max||2}MB`);return}let b=[...t(),...E];if(t(b),G(n.onselect))n.onselect(b);else if(G(n.value))n.value(b)},u=(w)=>{let E=t().filter((b,O)=>O!==w);if(t(E),G(n.onselect))n.onselect(E);else if(G(n.value))n.value(E)};return o("div",{class:N("fieldset w-full p-0",n.class)},[o("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 ${f()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"}`,ondragover:(w)=>{w.preventDefault(),f(!0)},ondragleave:()=>f(!1),ondrop:(w)=>{w.preventDefault(),f(!1),s(w.dataTransfer.files)}},[o("div",{class:"flex items-center gap-3 w-full"},[o("span",{class:"icon-[lucide--upload]"}),o("span",{class:"text-sm opacity-70 truncate grow text-left"},Tn("uploadFiles")),o("span",{class:"text-[10px] opacity-40 shrink-0"},`Mรกx ${n.max||2}MB`)]),o("input",{type:"file",multiple:!0,accept:n.accept||"*",class:"hidden",onchange:(w)=>s(w.target.files)})]),()=>r()&&o("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},r()),g(()=>t().length>0,()=>o("ul",{class:"mt-2 space-y-1"},M(t,(w,E)=>o("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[o("div",{class:"flex items-center gap-2 truncate"},[o("span",{class:"opacity-50"},"\uD83D\uDCC4"),o("span",{class:"truncate font-medium max-w-[200px]"},w.name),o("span",{class:"text-[9px] opacity-40"},`(${(w.size/1024).toFixed(0)} KB)`)]),o("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(b)=>{b.preventDefault(),u(E)}},o("span",{class:"icon-[lucide--x]"}))]))))])},a=(n)=>o("span",{class:n.startsWith("icon-")?n:""},n.startsWith("icon-")?null:n),yt=(n,t)=>o("div",{...n,class:N("indicator",n.class)},[n.value&&o("span",{class:N("indicator-item badge",n.class)},n.value),t]),Wn=(n)=>{let{label:t,icon:f,float:r,placeholder:_,value:s,left:u,right:w,rule:E,hint:b,content:O,...T}=n,C=d(!1),y=n.type==="password",A=E??null,S=()=>y?W(C)?"text":"password":n.type||"search";return o("label",{class:r?"floating-label":""},[r?o("span",{},t):null,o("label",{pattern:A,class:()=>N("input validator",n.class)},[t&&!r?o("span",{class:"label"},t):null,u??null,o("input",{...T,type:S,class:"grow",pattern:A,placeholder:_||t||" ",value:s}),w??null,y?dn({class:"ml-2"},[jn({value:C,class:"swap-rotate"}),Kn({},a("icon-[lucide--eye]")),Ln({},a("icon-[lucide--eye-off]"))]):null]),b?o("div",{class:"validator-hint"},b):null])},Gt=(n,t)=>o("kbd",{...n,class:N("kbd",n.class)},t),Ut=(n,t)=>o("ul",{...n,class:N("list",n.class)},t),Wt=(n)=>()=>(W(n.items)||[]).map((t,f)=>o("li",{class:N("list-row",n.class,t?.class)},typeof n.render==="function"?n.render(t,f):t)),dt=(n,t)=>o("span",{...n,class:N("loading loading-spinner",n.class)},t),jt=(n)=>{if(n.children!==void 0)return o("ul",{class:N("menu",n.class),...n},n.children);let{items:t}=n,f=(r)=>r.children?o("li",{},o("details",{open:r.open||void 0},[o("summary",{},$(r)),o("ul",{},M(()=>W(r.children)||[],f))])):o("li",{},o("a",{href:r.href,onclick:r.onclick?(_)=>{if(!r.href)_.preventDefault();r.onclick(_)}:null},$(r)));return o("ul",{class:N("menu",n.class)},M(()=>W(t)||[],f))},Kt=(n)=>{let t=null;Y(()=>{let r=W(n.open);if(!t)return;r?t.showModal():t.hide()});let f=()=>G(n.open)&&n.open(!1);return o("dialog",{...n,ref:(r)=>t=r,class:N("modal",n.class),onclose:f,oncancel:f},[o("div",{class:"modal-box"},[n.title&&o("h3",{class:"text-lg font-bold"},n.title),n.children,o("div",{class:"modal-action"},[n.actions||Cn({class:"btn",onclick:f},"Cerrar")])]),o("form",{method:"dialog",class:"modal-backdrop"},[o("button",{},"close")])])},Lt=(n,t)=>o("div",{...n,class:N("navbar",n.class)},t),Pt=(n)=>o("progress",{...n,class:N("progress",n.class)}),kt=(n,t)=>o("div",{class:N("radial-progress",n.class),style:`--value:${W(n.value)??0};`,role:"progressbar","aria-valuenow":n.value},t),Jt=(n)=>o("input",{...n,type:"radio",class:N("radio",n.class)}),Qt=(n)=>o("input",{...n,type:"range",class:N("range",n.class)}),Xt=(n,t)=>o("div",{...n,class:"rating"},t),zt=(n)=>[...Array(n.count)].map((t,f)=>o("input",{class:N("mask",n.class),name:n.name,type:"radio",checked:()=>W(n.value)===f,onchange:()=>G(n.value)?n.value(f):n.onchange?.(f)})),Mt=(n,t)=>{if(t!==void 0)return o("select",{class:N("select",n.class),...n},t);let{label:f,float:r,placeholder:_,placeholderDisabled:s=!0,value:u,left:w,right:E,hint:b,items:O,keyFn:T,...C}=n,y=()=>{let A=W(O)||[];return[..._?[{disabled:s,label:_,value:""}]:[],...A]};return o("label",{class:r?"floating-label":""},[r?o("span",{},f):null,o("label",{class:N("select",C.class)},[!r&&f?o("span",{class:"label"},f):null,w??null,o("select",{value:()=>W(u),onchange:(A)=>G(u)?u(A.target.value):C.onchange?.(A)},M(y,(A)=>{let S=$(A,A.value!==void 0?"value":void 0),P=$(A,"label");return o("option",{value:S,disabled:A.disabled||void 0},P)})),E??null]),b?o("div",{class:"validator-hint"},b):null])},Zt=(n)=>o("div",{...n,class:N("skeleton",n.class)}),It=(n)=>o("span",{...n,class:N("skeleton skeleton-text",n.class)}),Vt=(n,t)=>o("div",{...n,class:N("stack",n.class)},t),Yt=(n,t)=>o("div",{...n,class:N("stats shadow",n.class)},t),Bt=(n)=>o("div",{...n,class:N("stat",n.class)},[n.title?o("div",{class:"stat-title"},n.title):null,n.value?o("div",{class:"stat-value"},n.value):null,n.desc?o("div",{class:"stat-desc"},n.desc):null]),qt=(n,t)=>o("ul",{...n,class:N("steps",n.class)},t),Rt=(n,t)=>o("li",{...n,class:N("step",n.class),"data-content":n.dataContent},t),dn=(n,t)=>o("label",{...n,class:N("swap",n.class)},t),jn=(n)=>o("input",{type:"checkbox",checked:()=>W(n.value),onchange:(t)=>G(n.value)&&n.value(t.target.checked),class:n.class}),Kn=(n,t)=>o("div",{...n,class:N("swap-on",n.class)},t),Ln=(n,t)=>o("div",{...n,class:N("swap-off",n.class)},t),$t=(n,t)=>o("table",{...n,class:N("table",n.class)},t),Dt=({items:n,columns:t=[],header:f=!0})=>{let r=f!==!1&&t.some((s)=>s.label)?o("thead",{},o("tr",{},t.map((s)=>o("th",{class:s.class},s.label)))):null,_=o("tbody",{},()=>{return(W(n)||[]).map((u,w)=>o("tr",{},t.map((E)=>{let b=E.render?E.render(u,w):u[E.key];return o("td",{class:E.class},b)})))});return[r,_].filter(Boolean)},Ht=(n,t)=>{if(!n.items){let{class:b,...O}=n;return o("div",{...O,class:N("tabs",b)},t)}let{items:f,activeIndex:r,onClose:_,class:s,...u}=n,w=(b)=>G(b)?b():b,E=_||(G(f)?(b,O)=>{let C=W(f).filter((y,A)=>A!==b);if(f(C),r()>=C.length)r(Math.max(0,C.length-1))}:null);return o("div",{...u,class:N("tabs",s)},()=>{return(W(f)||[]).flatMap((O,T)=>{let C=()=>r()===T,y=o("button",{class:()=>`tab ${C()?"tab-active":""} ${O.class||""}`,onclick:(S)=>{S.preventDefault(),r(T),O.onclick?.(S)}},[$(O),O.closable?o("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:(S)=>{S.stopPropagation(),E?.(T,O)}},o("span",{class:"icon-[lucide--x] w-3 h-3"})):null]),A=o("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>`display: ${C()?"block":"none"};`},G(O.content)?O.content():O.content);return[y,A]})})},Ft=(n)=>o("textarea",{...n,class:N("textarea",n.class)}),gt=(n,t)=>o("span",{...n,class:N("text-rotate",n.class)},o("span",{},t)),xt=(n,t)=>o("ul",{...n,class:N("timeline",n.class)},t),at=(n,t="alert-success",f=3500)=>{let r=document.getElementById("sigpro-toast-container");if(!r)r=o("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(r);let _=o("div",{style:"display: contents"});r.appendChild(_);let s,u,w,b=x(()=>{let O=d(!1),T=d(!1);s=()=>{if(T())return;clearTimeout(u),clearTimeout(w),T(!0),setTimeout(()=>{if(b.destroy(),_.remove(),!r.hasChildNodes())r.remove()},300)},w=setTimeout(()=>O(!0),0);let C=typeof n==="function"?W(n):n,y=typeof C==="string"?o("span",{},C):C;return o("div",{class:()=>{let A=`alert alert-soft ${t} shadow-lg transition-all duration-300 inline-flex w-auto whitespace-nowrap pointer-events-auto`;if(T())return`${A} translate-x-full opacity-0`;if(O())return`${A} translate-x-0 opacity-100`;return`${A} translate-x-10 opacity-0`}},[y,o("button",{class:"btn btn-xs btn-circle btn-ghost",onclick:s},o("span",{class:"icon-[lucide--x]"}))])},_);if(f>0)u=setTimeout(s,f);return s},it=(n)=>o("input",{...n,type:"checkbox",class:N("toggle",n.class)}),ct=(n,t)=>o("div",{...n,class:N("tooltip",n.class),"data-tip":n.tip},t),mt=(n)=>{let{value:t,class:f}=n,r=null,_=null,s=d(!1),u=d(""),w=d(0),E=d(0),b=d(!1),O=["\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","โœ‰๏ธ","โค๏ธ"],T=()=>{let e=window.getSelection();if(e.getRangeAt&&e.rangeCount)_=e.getRangeAt(0)},C=()=>{if(_){let e=window.getSelection();e.removeAllRanges(),e.addRange(_)}},y=()=>{if(E(E()+1),r)w(r.innerText.length)},A=()=>{if(!r)return;let e=r.innerHTML;if(G(t))t(e);else n.onchange?.(e);y()},S=(e,U=null)=>{if(!r)return;if(r.focus(),_)C();document.execCommand(e,!1,U),_=null,A()},P=(e)=>{let U=document.createElement("div");U.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;";let j=document.createElement("img");j.src=e,j.style="max-width:95%;max-height:95%;box-shadow:0 0 30px rgba(0,0,0,0.5);border-radius:4px;",U.onclick=()=>document.body.removeChild(U),U.appendChild(j),document.body.appendChild(U)},Z=(e)=>{if(!e)return;let U=new FileReader;U.onload=(j)=>{if(e.type.startsWith("image/")){let L=`
 `;S("insertHTML",L)}else{let L=`${e.name} `;S("insertHTML",L)}},U.readAsDataURL(e)},k=(e,U=null)=>{if(E(),!r||s())return!1;try{if(e==="formatBlock"){let j=window.getSelection().getRangeAt(0).commonAncestorContainer;while(j&&j!==r){if(j.nodeType===1&&j.tagName===U)return!0;j=j.parentNode}return!1}return document.queryCommandState(e)}catch(j){return!1}},on=o("div",{class:"flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20"},[o("div",{class:"flex flex-wrap gap-1 flex-1 items-center"},[o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${k("bold")?"btn-active bg-primary/20":""}`,onclick:()=>S("bold")},o("span",{class:"icon-[lucide--bold]"})),o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${k("italic")?"btn-active bg-primary/20":""}`,onclick:()=>S("italic")},o("span",{class:"icon-[lucide--italic]"})),o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${k("underline")?"btn-active bg-primary/20":""}`,onclick:()=>S("underline")},o("span",{class:"icon-[lucide--underline]"})),o("input",{type:"color",class:"w-5 h-5 p-0 border-0 bg-transparent cursor-pointer",oninput:(e)=>S("foreColor",e.target.value)}),o("span",{class:"w-px h-5 bg-base-300 mx-1"}),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>S("justifyLeft")},o("span",{class:"icon-[lucide--align-left]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>S("justifyCenter")},o("span",{class:"icon-[lucide--align-center]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>S("justifyRight")},o("span",{class:"icon-[lucide--align-right]"})),o("span",{class:"w-px h-5 bg-base-300 mx-1"}),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>S("insertUnorderedList")},o("span",{class:"icon-[lucide--list]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>S("insertOrderedList")},o("span",{class:"icon-[lucide--list-ordered]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>S("outdent")},o("span",{class:"icon-[lucide--indent-decrease]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>S("indent")},o("span",{class:"icon-[lucide--indent-increase]"})),o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${k("formatBlock","BLOCKQUOTE")?"btn-active":""}`,onclick:()=>S("formatBlock",k("formatBlock","BLOCKQUOTE")?"P":"BLOCKQUOTE")},o("span",{class:"icon-[lucide--quote]"})),o("span",{class:"w-px h-5 bg-base-300 mx-1"}),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>{let e=window.prompt("URL:");if(e)S("createLink",e)}},o("span",{class:"icon-[lucide--link]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>{let e=document.createElement("input");e.type="file",e.onchange=(U)=>Z(U.target.files[0]),e.click()}},o("span",{class:"icon-[lucide--paperclip]"})),o("div",{class:"relative"},[o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:(e)=>{e.stopPropagation(),T(),b(!b())}},o("span",{class:"icon-[lucide--smile]"})),o("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:()=>b()?"display:flex":"display:none"},O.map((e)=>o("span",{class:"cursor-pointer hover:bg-base-200 p-1 rounded text-lg",onclick:(U)=>{U.stopPropagation(),S("insertText",e),b(!1)}},e)))]),o("span",{class:"w-px h-5 bg-base-300 mx-1"}),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>S("undo")},o("span",{class:"icon-[lucide--undo-2]"})),o("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>S("redo")},o("span",{class:"icon-[lucide--redo-2]"}))]),o("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${s()?"btn-active":""}`,onclick:()=>{if(!s())u(r?.innerHTML||"");else if(r)r.innerHTML=u(),A();s(!s())}},o("span",{class:"icon-[lucide--code-2]"}))]);if(typeof document<"u"&&!document.getElementById("editor-styles")){let e=document.createElement("style");e.id="editor-styles",e.textContent=` +var spui=(()=>{var Ne=Object.defineProperty;var te=(e,n)=>{for(var s in n)Ne(e,s,{get:n[s],enumerable:!0})};var re={};te(re,{Accordion:()=>Mt,Alert:()=>ze,Autocomplete:()=>Ot,Avatar:()=>Pe,AvatarGroup:()=>Ie,Badge:()=>Ue,Breadcrumbs:()=>qe,Button:()=>ve,Calendar:()=>Ce,Card:()=>Ke,CardActions:()=>We,CardBody:()=>Ge,CardTitle:()=>Ve,Carousel:()=>Ye,CarouselItem:()=>Qe,Chat:()=>Je,ChatBubble:()=>Xe,ChatFooter:()=>Ze,ChatHeader:()=>et,ChatImage:()=>tt,Checkbox:()=>nt,ColorPalette:()=>$e,Colorpicker:()=>Ht,Datepicker:()=>jt,Divider:()=>rt,Drawer:()=>st,DrawerContent:()=>at,DrawerOverlay:()=>ct,DrawerSide:()=>lt,DrawerToggle:()=>ot,Dropdown:()=>Y,DropdownButton:()=>ye,DropdownContent:()=>Q,Fab:()=>it,Fieldset:()=>dt,Fileinput:()=>Ft,Icon:()=>U,Indicator:()=>ut,Input:()=>Te,Kbd:()=>pt,List:()=>ft,ListRows:()=>bt,Loading:()=>ht,Menu:()=>zt,Modal:()=>Pt,Navbar:()=>gt,Progress:()=>xt,Radial:()=>mt,Radio:()=>vt,Range:()=>yt,Rating:()=>wt,RatingItems:()=>kt,Select:()=>It,Skeleton:()=>St,SkeletonText:()=>_t,Stack:()=>Ct,Stat:()=>Ut,Stats:()=>$t,Step:()=>Et,Steps:()=>Tt,Swap:()=>we,SwapOff:()=>_e,SwapOn:()=>Se,SwapToggle:()=>ke,Table:()=>Dt,TableItems:()=>qt,Tabs:()=>Kt,Textarea:()=>Nt,Textrotate:()=>At,Timeline:()=>Rt,Toast:()=>Vt,Toggle:()=>Lt,Tooltip:()=>Bt});var y=e=>typeof e=="function",de=e=>e&&typeof e=="object",M=Array.isArray,A=typeof document<"u"?document:null,ue=e=>e?._isRuntime?e.container:e instanceof Node?e:A.createTextNode(e==null?"":String(e)),C=null,N=null,K=!1,Ae=0,oe=new Set;var ne=new WeakMap,Re="http://www.w3.org/2000/svg",pe="http://www.w3.org/1999/xlink",Le=new Set("svg,path,circle,rect,line,polyline,polygon,g,defs,text,textPath,tspan,use,symbol,image,marker,ellipse".split(",")),O=e=>{if(!e||e._disposed)return;e._disposed=!0;let n=[e];for(;n.length;){let s=n.pop();s._cleanups&&(s._cleanups.forEach(o=>o()),s._cleanups.clear()),s._children&&(s._children.forEach(o=>n.push(o)),s._children.clear()),s._deps&&(s._deps.forEach(o=>o.delete(s)),s._deps.clear())}},z=e=>{N&&(N._cleanups||=new Set).add(e)},Be=e=>{let n=C;C=null;try{return e()}finally{C=n}},P=(e,n=!1)=>{let s=()=>{if(s._disposed)return;s._deps&&s._deps.forEach(c=>c.delete(s)),s._cleanups&&(s._cleanups.forEach(c=>c()),s._cleanups.clear());let o=C,a=N;C=N=s;try{return s._result=e()}catch(c){console.error("[SigPro]",c)}finally{C=o,N=a}};return s._deps=s._cleanups=s._children=null,s._disposed=!1,s._isComputed=n,s._depth=C?C._depth+1:0,s._mounts=[],s._parent=N,N&&(N._children||=new Set).add(s),s},Me=()=>{if(K)return;K=!0;let e=Array.from(oe).sort((n,s)=>n._depth-s._depth);oe.clear();for(let n of e)n._disposed||n();K=!1};var F=(e,n=!1)=>{if(!n&&C&&!C._disposed)e.add(C),(C._deps||=new Set).add(e);else if(n&&e.size>0){let s=!1;for(let o of e)o===C||o._disposed||(o._isComputed?(o._dirty=!0,o._subs&&F(o._subs,!0)):(oe.add(o),s=!0));s&&!K&&Ae===0&&queueMicrotask(Me)}},S=(e,n=null)=>{let s=new Set;if(y(e)){let o,a=()=>{if(a._dirty){let c=C;C=a;try{let l=e();Object.is(o,l)||(o=l,F(s,!0))}finally{C=c}a._dirty=!1}return F(s),o};return a._isComputed=!0,a._subs=s,a._dirty=!0,a._deps=null,a._disposed=!1,a}if(n)try{e=JSON.parse(localStorage.getItem(n))??e}catch{}return(...o)=>{if(o.length){let a=y(o[0])?o[0](e):o[0];Object.is(e,a)||(e=a,n&&localStorage.setItem(n,JSON.stringify(e)),F(s,!0))}return F(s),e}};var j=(e,n)=>{if(n===void 0){let o=P(e);return o(),()=>O(o)}let s=P(()=>{let o=M(e)?e.map(a=>a()):e();Be(()=>n(o))});return s(),()=>O(s)},ae=e=>{e&&(e._cleanups&&(e._cleanups.forEach(n=>n()),e._cleanups.clear()),e._ownerEffect&&O(e._ownerEffect),e.childNodes&&e.childNodes.forEach(n=>ae(n)))},Oe=/^\s*(javascript|data|vbscript):/i,He=new Set(["src","href","formaction","action","background","code","archive"]),je=e=>He.has(e)||e.startsWith("on"),se=(e,n)=>{if(n==null||n===!1)return null;if(je(e)){let s=String(n);if(Oe.test(s))return"#"}return n},t=(e,n={},s=[])=>{if((n instanceof Node||M(n)||!de(n))&&(s=n,n={}),y(e)){let l=P(()=>{let f=e(n,{children:s,emit:(h,...g)=>n[`on${h[0].toUpperCase()}${h.slice(1)}`]?.(...g)});return l._result=f,f});l();let i=l._result;if(i==null)return null;let r=i instanceof Node||M(i)&&i.every(f=>f instanceof Node)?i:A.createTextNode(String(i)),d=f=>{de(f)&&!f._isRuntime&&(f._mounts=l._mounts||[],f._cleanups=l._cleanups||new Set,f._ownerEffect=l)};return M(r)?r.forEach(d):d(r),r}let o=Le.has(e),a=o?A.createElementNS(Re,e):A.createElement(e);a._cleanups=new Set;for(let l of Object.keys(n)){let i=n[l];if(l==="ref"){y(i)?i(a):i.current=a;continue}if(o&&l.startsWith("xlink:")){let r=se(l.slice(6),i);r==null?a.removeAttributeNS(pe,l.slice(6)):a.setAttributeNS(pe,l.slice(6),r);continue}if(l.startsWith("on")){let r=l.slice(2).toLowerCase();a.addEventListener(r,i);let d=()=>a.removeEventListener(r,i);a._cleanups.add(d),z(d)}else if(y(i)){let r=P(()=>{let d=se(l,i());l==="class"?a.className=d||"":d==null?a.removeAttribute(l):l==="style"&&typeof d=="string"?a.setAttribute("style",d):l in a&&!o?a[l]=d:a.setAttribute(l,d===!0?"":d)});if(r(),a._cleanups.add(()=>O(r)),z(()=>O(r)),/^(INPUT|TEXTAREA|SELECT)$/.test(a.tagName)&&(l==="value"||l==="checked")){let d=l==="checked"?"change":"input";a.addEventListener(d,f=>i(f.target[l]))}}else{let r=se(l,i);r!=null&&(l==="style"&&typeof r=="string"?a.setAttribute("style",r):l in a&&!o?a[l]=r:a.setAttribute(l,r===!0?"":r))}}let c=l=>{if(M(l))return l.forEach(c);if(y(l)){let i=A.createTextNode("");a.appendChild(i);let r=[],d=P(()=>{let f=l(),h=(M(f)?f:[f]).map(ue);r.forEach(x=>{x._isRuntime?x.destroy():ae(x),x.parentNode&&x.remove()});let g=i;for(let x=h.length-1;x>=0;x--){let p=h[x];p.parentNode!==g.parentNode&&g.parentNode?.insertBefore(p,g),p._mounts&&p._mounts.forEach(b=>b()),g=p}r=h});d(),a._cleanups.add(()=>O(d)),z(()=>O(d))}else{let i=ue(l);a.appendChild(i),i._mounts&&i._mounts.forEach(r=>r())}};return c(s),a},V=e=>{let n=new Set,s=N,o=C,a=A.createElement("div");a.style.display="contents",a.setAttribute("role","presentation"),N={_cleanups:n},C=null;let c=l=>{l&&(l._isRuntime?(n.add(l.destroy),a.appendChild(l.container)):M(l)?l.forEach(c):a.appendChild(l instanceof Node?l:A.createTextNode(String(l??""))))};try{c(e({onCleanup:l=>n.add(l)}))}finally{N=s,C=o}return{_isRuntime:!0,container:a,destroy:()=>{n.forEach(l=>l()),ae(a),a.remove()}}},fe=(e,n,s=null)=>{let o=A.createTextNode(""),a=t("div",{style:"display:contents"},[o]),c=null;return j(()=>!!(y(e)?e():e),l=>{c&&(c.destroy(),c=null);let i=l?n:s;i&&(c=V(()=>y(i)?i():i),a.insertBefore(c.container,o))}),z(()=>c?.destroy()),a},H=(e,n,s)=>{let o=A.createTextNode(""),a=t("div",{style:"display:contents"},[o]),c=new Map;return j(()=>(y(e)?e():e)||[],l=>{let i=new Map,r=[],d=l||[];for(let h=0;hn(g,h)),i.set(x,p),r.push(p)}c.forEach(h=>h.destroy());let f=o;for(let h=r.length-1;h>=0;h--){let x=r[h].container;x.nextSibling!==f&&a.insertBefore(x,f),f=x}c=i}),a},I=e=>{let n=()=>window.location.hash.slice(1)||"/",s=S(n()),o=()=>s(n());window.addEventListener("hashchange",o),z(()=>window.removeEventListener("hashchange",o));let a=t("div",{class:"router-hook"}),c=null;return j([s],()=>{let l=s(),i=e.find(r=>{let d=r.path.split("/").filter(Boolean),f=l.split("/").filter(Boolean);return d.length===f.length&&d.every((h,g)=>h[0]===":"||h===f[g])})||e.find(r=>r.path==="*");if(i){c?.destroy();let r={};i.path.split("/").filter(Boolean).forEach((d,f)=>{d[0]===":"&&(r[d.slice(1)]=l.split("/").filter(Boolean)[f])}),I.params(r),c=V(()=>y(i.component)?i.component(r):i.component),a.replaceChildren(c.container)}}),a};I.params=S({});I.to=e=>window.location.hash=e.replace(/^#?\/?/,"#/");I.back=()=>window.history.back();I.path=()=>window.location.hash.replace(/^#/,"")||"/";var be=(e,n)=>{let s=typeof n=="string"?A.querySelector(n):n;if(!s)return;ne.has(s)&&ne.get(s).destroy();let o=V(y(e)?e:()=>e);return s.replaceChildren(o.container),ne.set(s,o),o};typeof window<"u"&&"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]=(n,s)=>t(e,n,s)});var k=e=>typeof e=="function"?e():e,B=(e,n="label")=>e&&typeof e=="object"?e[n]:e,m=(...e)=>e.filter(Boolean).join(" ").trim(),he=(e,n,s="label")=>{let o=String(k(n)||"").toLowerCase(),a=(k(e)||[]).map(c=>typeof c=="object"?c:{label:c,value:c});return o?a.filter(c=>String(c[s]||"").toLowerCase().includes(o)):a},ge=e=>`${e}-${Math.random().toString(36).slice(2,9)}`,G=()=>document.activeElement?.blur();var ce={};te(ce,{setLocale:()=>Fe,t:()=>le});var xe=$("en"),me={es:{uploadFiles:"Arrastrar y soltar o click para seleccionar..."},en:{uploadFiles:"Drag and drop or click to select"}},Fe=e=>{me[e]&&xe(e)},le=e=>()=>me[xe()][e]||e;var q=(e,n)=>s=>t(e,{...s,class:`${n} ${s?.class||""}`.trim()}),v=(e,n)=>(s,o)=>t(e,{...s,class:`${n} ${s?.class||""}`.trim()},o),W=(e,n,s)=>o=>t(e,{type:s,...o,class:`${n} ${o?.class||""}`.trim()}),ze=v("div","alert"),Pe=(e,n)=>t("div",{class:"avatar"},t("div",{class:e.class},n)),Ie=v("div","avatar-group -space-x-6"),Ue=v("span","badge"),qe=v("div","breadcrumbs"),ve=v("button","btn"),Ke=v("div","card"),Ve=v("div","card-title"),Ge=v("div","card-body"),We=v("div","card-actions"),Ye=v("div","carousel"),Qe=v("div","carousel-item"),Je=v("div","chat"),Xe=v("div","chat-bubble"),Ze=v("div","chat-footer"),et=v("div","chat-header"),tt=(e,n)=>t("div",{...e,class:m("chat-image avatar",e.class)},t("div",{class:"w-10 rounded-full"},typeof n=="string"?t("img",{src:n,alt:"avatar"}):n)),nt=W("input","checkbox","checkbox"),st=v("div","drawer"),ot=e=>input({...e,type:"checkbox",class:"drawer-toggle",checked:()=>k(e.checked),onchange:n=>y(e.checked)&&e.checked(n.target.checked)}),at=v("div","drawer-content"),lt=v("div","drawer-side"),ct=e=>label({...e,for:e.for,class:m("drawer-overlay",e.class)}),rt=q("div","divider"),Y=v("div","dropdown"),ye=(e,n)=>t("div",{...e,tabindex:"0",role:"button",class:m("btn",e.class)},n),Q=(e,n)=>t("div",{...e,tabindex:"0",class:m("dropdown-content",e.class)},n),it=(e,n)=>t("div",{class:"fab"},[t("div",{tabindex:"0",role:"button",class:m("btn",e.class)},U({},e.icon)),n]),dt=(e,n)=>t("fieldset",{class:m("fieldset",e.class)},[t("legend",{class:"fieldset-legend"},e.label),n]),U=(e,n)=>t("span",{...e,class:m(n,e.class)}),ut=(e,n)=>t("div",{...e,class:m("indicator",e.class)},[e.value&&t("span",{class:m("indicator-item badge",e.class)},e.value),n]),pt=v("kbd","kbd"),ft=v("ul","list"),bt=e=>()=>(k(e.items)||[]).map((n,s)=>t("li",{class:m("list-row",e.class,n?.class)},typeof e.render=="function"?e.render(n,s):n)),ht=v("span","loading loading-spinner"),gt=v("div","navbar"),xt=q("progress","progress"),mt=(e,n)=>t("div",{class:m("radial-progress",e.class),style:`--value:${k(e.value)??0};`,role:"progressbar","aria-valuenow":e.value},n),vt=W("input","radio","radio"),yt=W("input","range","range"),wt=v("div","rating"),kt=e=>[...Array(e.count)].map((n,s)=>t("input",{class:m("mask",e.class),name:e.name,type:"radio",checked:()=>k(e.value)===s,onchange:()=>y(e.value)?e.value(s):e.onchange?.(s)})),St=q("div","skeleton"),_t=q("span","skeleton skeleton-text"),Ct=v("div","stack"),$t=v("div","stats shadow"),Tt=v("ul","steps"),Et=(e,n)=>t("li",{...e,class:m("step",e.class),"data-content":e.dataContent},n),we=v("label","swap"),ke=e=>t("input",{type:"checkbox",checked:()=>k(e.value),onchange:n=>y(e.value)&&e.value(n.target.checked),class:e.class}),Se=v("div","swap-on"),_e=v("div","swap-off"),Dt=v("table","table"),Nt=q("textarea","textarea"),At=(e,n)=>t("span",{...e,class:m("text-rotate",e.class)},t("span",{},n)),Rt=v("ul","timeline"),Lt=W("input","toggle","checkbox"),Bt=(e,n)=>t("div",{...e,class:m("tooltip",e.class),"data-tip":e.tip},n),Mt=e=>{let n=e.name||ge("acc");return H(e.items,s=>t("div",{class:m("collapse",e.class)},[t("input",{type:"radio",name:n,checked:s.open||void 0}),s.title?t("div",{class:m("collapse-title",`${s.classTitle??" font-semibold"}`)},s.title):null,s.content?t("div",{class:m("collapse-content text-sm",`${s.classContent??" font-semibold"}`)},s.content):null]))},Ot=({items:e,value:n,onselect:s,placeholder:o="...",...a})=>{let c=S(k(n)||""),l=S(()=>he(e,c())),i=r=>{let d=B(r),f=typeof r=="string"?r:r.value;c(d),y(n)&&n(f),s?.(r),G()};return Y({class:"w-80"},[t("div",{tabindex:"0",role:"button",class:"w-full"},Te({...a,placeholder:o,value:c,left:U({},"icon-[lucide--search]")})),Q({class:"p-2 bg-base-100 rounded-box shadow-xl w-full max-h-60 overflow-y-auto border border-base-300 z-50"},t("ul",{class:"menu flex-col flex-nowrap w-full p-0"},[H(l,r=>t("li",{},[t("a",{onmousedown:d=>d.preventDefault(),onclick:()=>i(r)},B(r))]),"value"),()=>l().length===0?t("li",{class:"p-4 opacity-50 text-center"},"Sin resultados"):null]))])},Ce=e=>{let n=S(new Date),s=S(null),o=S(0),a=S(0),c=new Date,l=`${c.getFullYear()}-${String(c.getMonth()+1).padStart(2,"0")}-${String(c.getDate()).padStart(2,"0")}`,i=p=>`${p.getFullYear()}-${String(p.getMonth()+1).padStart(2,"0")}-${String(p.getDate()).padStart(2,"0")}`,r=()=>k(e.range)===!0,d=()=>k(e.value),f=p=>{let b=i(p),E=d();if(r())if(!E?.start||E.start&&E.end)e.onChange?.({start:b,end:null,...e.hour&&{startHour:o()}});else{let R=E.start,D=b{let b=n();n(new Date(b.getFullYear(),b.getMonth()+p,1))},g=p=>{let b=n();n(new Date(b.getFullYear()+p,b.getMonth(),1))},x=({value:p,onChange:b})=>t("div",{class:"flex-1"},[t("div",{class:"flex gap-2 items-center"},[t("input",{type:"range",min:0,max:23,value:p,class:"range range-xs flex-1",oninput:E=>b(+E.target.value)}),t("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(k(p)).padStart(2,"0")+":00")])]);return t("div",{class:m("p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box w-80 select-none",e.class)},[t("div",{class:"flex justify-between items-center mb-4 gap-1"},[t("div",{class:"flex gap-0.5"},[t("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>g(-1)},t("span",{class:"icon-[lucide--chevrons-left]"})),t("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>h(-1)},t("span",{class:"icon-[lucide--chevron-left]"}))]),t("span",{class:"font-bold uppercase flex-1 text-center"},()=>n().toLocaleString("es-ES",{month:"short",year:"numeric"})),t("div",{class:"flex gap-0.5"},[t("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>h(1)},t("span",{class:"icon-[lucide--chevron-right]"})),t("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>g(1)},t("span",{class:"icon-[lucide--chevrons-right]"}))])]),t("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>s(null)},[...["L","M","X","J","V","S","D"].map(p=>t("div",{class:"text-[10px] opacity-40 font-bold text-center"},p)),()=>{let p=n(),b=p.getFullYear(),E=p.getMonth(),R=new Date(b,E,1).getDay(),D=R===0?6:R-1,J=new Date(b,E+1,0).getDate(),u=[];for(let w=0;w{let L=d(),X=s(),Ee=typeof L=="string"?L.split("T")[0]===T:L?.start===T,De=L?.end===T,Z=!1;if(r()&&L?.start){let ee=L.start;!L.end&&X?Z=T>ee&&T<=X||T=X:L.end&&(Z=T>ee&&Tr()&&s(T),onclick:()=>f(_)},w.toString()))}return u}]),e.hour?t("div",{class:"mt-3 pt-2 border-t border-base-300"},r()?t("div",{class:"flex gap-4"},[x({value:o,onChange:p=>o(p)}),x({value:a,onChange:p=>a(p)})]):x({value:o,onChange:p=>o(p)})):null])},Ht=e=>{let n=()=>k(e.value)||"#000000";return Y({},[ye({class:"btn"},[t("div",{class:"size-5 rounded-sm",style:()=>`background-color: ${n()}`}),e.label&&t("span",{},e.label)]),Q({class:"p-0"},$e({value:e.value,onchange:s=>{y(e.value)?e.value(s):e.onchange?.(s)}}))])},$e=e=>{let n=()=>k(e.value)||"#000000",s=["#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"],o=a=>{y(e.value)?e.value(a):e.onchange?.(a),G()};return t("div",{class:m("p-3 bg-base-100 rounded-box shadow w-64",e.class)},t("div",{class:"grid grid-cols-8 gap-1"},s.map(a=>t("button",{type:"button",style:`background-color: ${a}`,class:()=>`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 ${n().toLowerCase()===a.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`,onclick:()=>{o(a)}}))))},jt=e=>{let n=S(""),s=()=>k(e.range)===!0;j(()=>{let a=k(e.value);if(!a)return n("");let c="";if(typeof a=="string")c=e.hour&&a.includes("T")?a.replace("T"," "):a;else if(a.start&&a.end){let l=e.hour&&a.startHour!=null?`${a.start} ${String(a.startHour).padStart(2,"0")}:00`:a.start,i=e.hour&&a.endHour!=null?`${a.end} ${String(a.endHour).padStart(2,"0")}:00`:a.end;c=`${l} - ${i}`}else a.start&&(c=`${e.hour&&a.startHour!=null?`${a.start} ${String(a.startHour).padStart(2,"0")}:00`:a.start}...`);n(c)});let o=a=>{y(e.value)?e.value(a):e.onChange?.(a),(!s()||a?.end!=null)&&G()};return Y({class:m("w-full",e.class)},[t("label",{tabindex:"0",role:"button",class:"input input-bordered flex items-center gap-2 cursor-pointer"},[t("span",{class:"icon-[lucide--calendar] shrink-0"}),t("span",{class:()=>`grow text-left truncate ${n()?"":"opacity-50"}`},()=>n()||e.placeholder||(s()?"Seleccionar rango...":"Seleccionar fecha...")),()=>n()?t("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle -mr-2",onmousedown:a=>{a.preventDefault(),a.stopPropagation(),y(e.value)?e.value(null):e.onChange?.(null),n("")}},t("span",{class:"icon-[lucide--x] opacity-50"})):null]),Q({class:"p-0"},Ce({value:e.value,range:s(),hour:e.hour,onChange:o}))])},Ft=e=>{let n=S([]),s=S(!1),o=S(null),a=(e.max||2)*1024*1024,c=i=>{let r=Array.from(i);if(o(null),r.some(f=>f.size>a)){o(`M\xE1x ${e.max||2}MB`);return}let d=[...n(),...r];n(d),y(e.onselect)?e.onselect(d):y(e.value)&&e.value(d)},l=i=>{let r=n().filter((d,f)=>f!==i);n(r),y(e.onselect)?e.onselect(r):y(e.value)&&e.value(r)};return t("div",{class:m("fieldset w-full p-0",e.class)},[t("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 ${s()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"}`,ondragover:i=>{i.preventDefault(),s(!0)},ondragleave:()=>s(!1),ondrop:i=>{i.preventDefault(),s(!1),c(i.dataTransfer.files)}},[t("div",{class:"flex items-center gap-3 w-full"},[t("span",{class:"icon-[lucide--upload]"}),t("span",{class:"text-sm opacity-70 truncate grow text-left"},le("uploadFiles")),t("span",{class:"text-[10px] opacity-40 shrink-0"},`M\xE1x ${e.max||2}MB`)]),t("input",{type:"file",multiple:!0,accept:e.accept||"*",class:"hidden",onchange:i=>c(i.target.files)})]),()=>o()&&t("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},o()),fe(()=>n().length>0,()=>t("ul",{class:"mt-2 space-y-1"},H(n,(i,r)=>t("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[t("div",{class:"flex items-center gap-2 truncate"},[t("span",{class:"opacity-50"},"\u{1F4C4}"),t("span",{class:"truncate font-medium max-w-[200px]"},i.name),t("span",{class:"text-[9px] opacity-40"},`(${(i.size/1024).toFixed(0)} KB)`)]),t("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:d=>{d.preventDefault(),l(r)}},t("span",{class:"icon-[lucide--x]"}))]))))])},Te=e=>{let{label:n,icon:s,float:o,placeholder:a,value:c,left:l,right:i,rule:r,hint:d,content:f,...h}=e,g=S(!1),x=e.type==="password",p=r??null,b=()=>x?k(g)?"text":"password":e.type||"search";return t("label",{class:o?"floating-label":""},[o?t("span",{},n):null,t("label",{pattern:p,class:()=>m("input validator",e.class)},[n&&!o?t("span",{class:"label"},n):null,l??null,t("input",{...h,type:b,class:"grow",pattern:p,placeholder:a||n||" ",value:c}),i??null,x?we({class:"ml-2"},[ke({value:g,class:"swap-rotate"}),Se({},U({},"icon-[lucide--eye]")),_e({},U({},"icon-[lucide--eye-off]"))]):null]),d?t("div",{class:"validator-hint"},d):null])},zt=e=>{if(e.children!==void 0)return t("ul",{class:m("menu",e.class),...e},e.children);let{items:n}=e,s=o=>o.children?t("li",{},t("details",{open:o.open||void 0},[t("summary",{},B(o)),t("ul",{},H(()=>k(o.children)||[],s))])):t("li",{},t("a",{href:o.href,onclick:o.onclick?a=>{o.href||a.preventDefault(),o.onclick(a)}:null},B(o)));return t("ul",{class:m("menu",e.class)},H(()=>k(n)||[],s))},Pt=e=>{let n=null;j(()=>{let o=k(e.open);n&&(o?n.showModal():n.hide())});let s=()=>y(e.open)&&e.open(!1);return t("dialog",{...e,ref:o=>n=o,class:m("modal",e.class),onclose:s,oncancel:s},[t("div",{class:"modal-box"},[e.title&&t("h3",{class:"text-lg font-bold"},e.title),e.children,t("div",{class:"modal-action"},[e.actions||ve({class:"btn",onclick:s},"Cerrar")])]),t("form",{method:"dialog",class:"modal-backdrop"},[t("button",{},"close")])])},It=(e,n)=>{if(n!==void 0)return t("select",{class:m("select",e.class),...e},n);let{label:s,float:o,placeholder:a,placeholderDisabled:c=!0,value:l,left:i,right:r,hint:d,items:f,keyFn:h,...g}=e,x=()=>{let p=k(f)||[];return[...a?[{disabled:c,label:a,value:""}]:[],...p]};return t("label",{class:o?"floating-label":""},[o?t("span",{},s):null,t("label",{class:m("select",g.class)},[!o&&s?t("span",{class:"label"},s):null,i??null,t("select",{value:()=>k(l),onchange:p=>y(l)?l(p.target.value):g.onchange?.(p)},H(x,p=>{let b=B(p,p.value!==void 0?"value":void 0),E=B(p,"label");return t("option",{value:b,disabled:p.disabled||void 0},E)})),r??null]),d?t("div",{class:"validator-hint"},d):null])},Ut=e=>t("div",{...e,class:m("stat",e.class)},[e.title?t("div",{class:"stat-title"},e.title):null,e.value?t("div",{class:"stat-value"},e.value):null,e.desc?t("div",{class:"stat-desc"},e.desc):null]),qt=({items:e,columns:n=[],header:s=!0})=>{let o=s!==!1&&n.some(c=>c.label)?t("thead",{},t("tr",{},n.map(c=>t("th",{class:c.class},c.label)))):null,a=t("tbody",{},()=>(k(e)||[]).map((l,i)=>t("tr",{},n.map(r=>{let d=r.render?r.render(l,i):l[r.key];return t("td",{class:r.class},d)}))));return[o,a].filter(Boolean)},Kt=(e,n)=>{if(!e.items){let{class:d,...f}=e;return t("div",{...f,class:m("tabs",d)},n)}let{items:s,activeIndex:o,onClose:a,class:c,...l}=e,i=d=>y(d)?d():d,r=a||(y(s)?(d,f)=>{let g=k(s).filter((x,p)=>p!==d);s(g),o()>=g.length&&o(Math.max(0,g.length-1))}:null);return t("div",{...l,class:m("tabs",c)},()=>(k(s)||[]).flatMap((f,h)=>{let g=()=>o()===h,x=t("button",{class:()=>`tab ${g()?"tab-active":""} ${f.class||""}`,onclick:b=>{b.preventDefault(),o(h),f.onclick?.(b)}},[B(f),f.closable?t("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:b=>{b.stopPropagation(),r?.(h,f)}},t("span",{class:"icon-[lucide--x] w-3 h-3"})):null]),p=t("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>`display: ${g()?"block":"none"};`},y(f.content)?f.content():f.content);return[x,p]}))},Vt=(e,n="alert-success",s=3500)=>{let o=document.getElementById("sigpro-toast-container");o||(o=t("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(o));let a=t("div",{style:"display: contents"});o.appendChild(a);let c,l,i,d=be(()=>{let f=S(!1),h=S(!1);c=()=>{h()||(clearTimeout(l),clearTimeout(i),h(!0),setTimeout(()=>{d.destroy(),a.remove(),o.hasChildNodes()||o.remove()},300))},i=setTimeout(()=>f(!0),0);let g=typeof e=="function"?k(e):e,x=typeof g=="string"?t("span",{},g):g;return t("div",{class:()=>{let p=`alert alert-soft ${n} shadow-lg transition-all duration-300 inline-flex w-auto whitespace-nowrap pointer-events-auto`;return h()?`${p} translate-x-full opacity-0`:f()?`${p} translate-x-0 opacity-100`:`${p} translate-x-10 opacity-0`}},[x,t("button",{class:"btn btn-xs btn-circle btn-ghost",onclick:c},t("span",{class:"icon-[lucide--x]"}))])},a);return s>0&&(l=setTimeout(c,s)),c};var ie={};te(ie,{Editor:()=>Gt});var Gt=e=>{let{value:n,class:s}=e,o=null,a=null,c=S(!1),l=S(""),i=S(0),r=S(0),d=S(!1),f=["\u{1F600}","\u{1F60A}","\u{1F609}","\u{1F9D0}","\u{1F62E}","\u{1F914}","\u{1F605}","\u{1F602}","\u{1F60D}","\u{1F618}","\u{1F970}","\u{1F44D}","\u{1F44E}","\u{1F44C}","\u{1F91D}","\u{1F91E}","\u{1F44B}","\u{1F44F}","\u{1F64C}","\u{1F64F}","\u{1F4AA}","\u261D\uFE0F","\u{1F447}","\u{1F448}","\u{1F449}","\u{1F595}","\u2705","\u26A0\uFE0F","\u{1F680}","\u{1F4E2}","\u2709\uFE0F","\u2764\uFE0F"],h=()=>{let u=window.getSelection();u.getRangeAt&&u.rangeCount&&(a=u.getRangeAt(0))},g=()=>{if(a){let u=window.getSelection();u.removeAllRanges(),u.addRange(a)}},x=()=>{r(r()+1),o&&i(o.innerText.length)},p=()=>{if(!o)return;let u=o.innerHTML;y(n)?n(u):e.onchange?.(u),x()},b=(u,w=null)=>{o&&(o.focus(),a&&g(),document.execCommand(u,!1,w),a=null,p())},E=u=>{let w=document.createElement("div");w.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;";let _=document.createElement("img");_.src=u,_.style="max-width:95%;max-height:95%;box-shadow:0 0 30px rgba(0,0,0,0.5);border-radius:4px;",w.onclick=()=>document.body.removeChild(w),w.appendChild(_),document.body.appendChild(w)},R=u=>{if(!u)return;let w=new FileReader;w.onload=_=>{if(u.type.startsWith("image/")){let T=`
 `;b("insertHTML",T)}else{let T=`${u.name} `;b("insertHTML",T)}},w.readAsDataURL(u)},D=(u,w=null)=>{if(r(),!o||c())return!1;try{if(u==="formatBlock"){let _=window.getSelection().getRangeAt(0).commonAncestorContainer;for(;_&&_!==o;){if(_.nodeType===1&&_.tagName===w)return!0;_=_.parentNode}return!1}return document.queryCommandState(u)}catch{return!1}},J=t("div",{class:"flex flex-wrap items-center gap-1 p-2 border-b border-base-300 bg-base-200 sticky top-0 z-20"},[t("div",{class:"flex flex-wrap gap-1 flex-1 items-center"},[t("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${D("bold")?"btn-active bg-primary/20":""}`,onclick:()=>b("bold")},t("span",{class:"icon-[lucide--bold]"})),t("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${D("italic")?"btn-active bg-primary/20":""}`,onclick:()=>b("italic")},t("span",{class:"icon-[lucide--italic]"})),t("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${D("underline")?"btn-active bg-primary/20":""}`,onclick:()=>b("underline")},t("span",{class:"icon-[lucide--underline]"})),t("input",{type:"color",class:"w-5 h-5 p-0 border-0 bg-transparent cursor-pointer",oninput:u=>b("foreColor",u.target.value)}),t("span",{class:"w-px h-5 bg-base-300 mx-1"}),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>b("justifyLeft")},t("span",{class:"icon-[lucide--align-left]"})),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>b("justifyCenter")},t("span",{class:"icon-[lucide--align-center]"})),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>b("justifyRight")},t("span",{class:"icon-[lucide--align-right]"})),t("span",{class:"w-px h-5 bg-base-300 mx-1"}),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>b("insertUnorderedList")},t("span",{class:"icon-[lucide--list]"})),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>b("insertOrderedList")},t("span",{class:"icon-[lucide--list-ordered]"})),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>b("outdent")},t("span",{class:"icon-[lucide--indent-decrease]"})),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>b("indent")},t("span",{class:"icon-[lucide--indent-increase]"})),t("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${D("formatBlock","BLOCKQUOTE")?"btn-active":""}`,onclick:()=>b("formatBlock",D("formatBlock","BLOCKQUOTE")?"P":"BLOCKQUOTE")},t("span",{class:"icon-[lucide--quote]"})),t("span",{class:"w-px h-5 bg-base-300 mx-1"}),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>{let u=window.prompt("URL:");u&&b("createLink",u)}},t("span",{class:"icon-[lucide--link]"})),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>{let u=document.createElement("input");u.type="file",u.onchange=w=>R(w.target.files[0]),u.click()}},t("span",{class:"icon-[lucide--paperclip]"})),t("div",{class:"relative"},[t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:u=>{u.stopPropagation(),h(),d(!d())}},t("span",{class:"icon-[lucide--smile]"})),t("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:()=>d()?"display:flex":"display:none"},f.map(u=>t("span",{class:"cursor-pointer hover:bg-base-200 p-1 rounded text-lg",onclick:w=>{w.stopPropagation(),b("insertText",u),d(!1)}},u)))]),t("span",{class:"w-px h-5 bg-base-300 mx-1"}),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>b("undo")},t("span",{class:"icon-[lucide--undo-2]"})),t("button",{type:"button",class:"btn btn-ghost btn-xs",onclick:()=>b("redo")},t("span",{class:"icon-[lucide--redo-2]"}))]),t("button",{type:"button",class:()=>`btn btn-ghost btn-xs ${c()?"btn-active":""}`,onclick:()=>{c()?o&&(o.innerHTML=l(),p()):l(o?.innerHTML||""),c(!c())}},t("span",{class:"icon-[lucide--code-2]"}))]);if(typeof document<"u"&&!document.getElementById("editor-styles")){let u=document.createElement("style");u.id="editor-styles",u.textContent=` [contenteditable="true"] div, [contenteditable="true"] p { margin: 0; padding: 0; } - `,document.head.appendChild(e)}return o("div",{class:N("border border-base-300 rounded-box bg-base-100 overflow-hidden shadow-sm flex flex-col",f)},[on,o("div",{class:"relative flex-1 flex flex-col",onclick:()=>b(!1)},[o("div",{ref:(e)=>{if(!r&&e)r=e,e.innerHTML=W(t)||"",document.execCommand("defaultParagraphSeparator",!1,"br"),e.addEventListener("click",(U)=>{let j=U.target.closest(".resizable-img-container");if(j){let L=j.querySelector("img");if(L)P(L.src)}})},style:()=>`min-height:22rem;${s()?"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:A,onkeydown:(e)=>{if(e.key==="Tab")e.preventDefault(),S("indent")},onkeyup:()=>{y(),T()},onclick:(e)=>{y(),T(),e.stopPropagation()},onmouseup:()=>{A(),T()},onpaste:(e)=>{e.preventDefault();let U=e.clipboardData.getData("text/plain");S("insertText",U)},ondragover:(e)=>e.preventDefault(),ondrop:(e)=>{e.preventDefault(),Z(e.dataTransfer.files[0])}}),o("textarea",{class:"w-full flex-1 min-h-[22rem] p-4 outline-none font-mono text-sm bg-base-200 border-0",style:()=>s()?"":"display:none",value:u,oninput:(e)=>{if(u(e.target.value),r)r.innerHTML=e.target.value;n.onchange?.(e.target.value)}})]),o("div",{class:"px-3 py-1 border-t border-base-300 bg-base-100/50 text-[10px] text-right text-base-content/60 italic"},[o("span",()=>`${w()}`)])])};if(typeof window<"u")Object.assign(window,{$:d,$$:F,watch:Y,h:o,Fragment:v,when:g,each:M,router:B,mount:x,batch:m,onUnmount:V,isArr:X,isFunc:G,isObj:R}),"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((n)=>{window[n]=(t,f)=>o(n,t,f)}),Object.entries(tn).forEach(([n,t])=>{Object.defineProperty(window,n,{value:t,writable:!1,configurable:!0,enumerable:!0})});if(typeof window<"u")window.Components={...tn};})(); + `,document.head.appendChild(u)}return t("div",{class:m("border border-base-300 rounded-box bg-base-100 overflow-hidden shadow-sm flex flex-col",s)},[J,t("div",{class:"relative flex-1 flex flex-col",onclick:()=>d(!1)},[t("div",{ref:u=>{!o&&u&&(o=u,u.innerHTML=k(n)||"",document.execCommand("defaultParagraphSeparator",!1,"br"),u.addEventListener("click",w=>{let _=w.target.closest(".resizable-img-container");if(_){let T=_.querySelector("img");T&&E(T.src)}}))},style:()=>`min-height:22rem;${c()?"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:p,onkeydown:u=>{u.key==="Tab"&&(u.preventDefault(),b("indent"))},onkeyup:()=>{x(),h()},onclick:u=>{x(),h(),u.stopPropagation()},onmouseup:()=>{p(),h()},onpaste:u=>{u.preventDefault();let w=u.clipboardData.getData("text/plain");b("insertText",w)},ondragover:u=>u.preventDefault(),ondrop:u=>{u.preventDefault(),R(u.dataTransfer.files[0])}}),t("textarea",{class:"w-full flex-1 min-h-[22rem] p-4 outline-none font-mono text-sm bg-base-200 border-0",style:()=>c()?"":"display:none",value:l,oninput:u=>{l(u.target.value),o&&(o.innerHTML=u.target.value),e.onchange?.(u.target.value)}})]),t("div",{class:"px-3 py-1 border-t border-base-300 bg-base-100/50 text-[10px] text-right text-base-content/60 italic"},[t("span",()=>`${i()}`)])])};typeof window<"u"&&Object.assign(window,re,ie,ce);})(); diff --git a/docs/README.md b/docs/README.md index 9ab2465..9b90623 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,12 +6,12 @@ -

SigPro UI beta (W.I.P.)

+

SigPro UI (W.I.P.)

Reactive Design System for SigPro
"Atomic components for high-performance interfaces. Zero-boilerplate, pure reactivity."
View Components โ†’ - +
diff --git a/docs/demo.md b/docs/demo.md index 62280fd..4eb6574 100644 --- a/docs/demo.md +++ b/docs/demo.md @@ -632,9 +632,9 @@ mount( ```js mount( div({ class: "flex gap-4 text-xl" }, [ - Icon("icon-[lucide--home]"), - Icon("icon-[lucide--settings]"), - Icon("โค๏ธ"), // emoji fallback + Icon({},"icon-[lucide--home]"), + Icon({},"icon-[lucide--settings]"), + "โค๏ธ", // emoji fallback ]), "#demo-icon", ); @@ -649,7 +649,7 @@ mount( ```js mount( Indicator({ value: "3" }, [ - Button({ class: "btn-circle" }, Icon("icon-[lucide--bell]")), + Button({ class: "btn-circle" }, Icon({},"icon-[lucide--bell]")), ]), "#demo-indicator", ); @@ -671,14 +671,14 @@ mount( label: "Username", float: true, value: username, - left: Icon("icon-[lucide--user]"), + left: Icon({},"icon-[lucide--user]"), }), Input({ type: "password", label: "Password", float: true, value: password, - left: Icon("icon-[lucide--lock]"), + left: Icon({},"icon-[lucide--lock]"), }), ]), "#demo-input", @@ -813,7 +813,7 @@ mount( div({ class: "flex-1" }, a({ class: "btn btn-ghost text-xl" }, "SigPro")), div( { class: "flex-none" }, - Button({ class: "btn-square btn-ghost" }, Icon("icon-[lucide--menu]")), + Button({ class: "btn-square btn-ghost" }, Icon({},"icon-[lucide--menu]")), ), ]), "#demo-navbar", diff --git a/docs/index.html b/docs/index.html index e38961e..f442c12 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,6 +67,7 @@ + diff --git a/docs/install.md b/docs/install.md index 2d1c4ce..0b2fd81 100644 --- a/docs/install.md +++ b/docs/install.md @@ -5,7 +5,7 @@ Follow these steps to integrate **SigPro-UI** into your project. --- !> **๐Ÿ“˜ Core Concepts** -SigProUI is built on top of the `SigPro` reactive core. To learn how to create signals, manage reactivity, and structure your application logic, check out the [SigPro documentation](https://sigpro.natxocc.com/#/). +SigProUI is based on the `SigPro` reactive core. To learn how to create signals, manage reactivity, and structure your application logic, check out the [SigPro documentation](https://sigpro.natxocc.com/#/). --- @@ -13,10 +13,10 @@ SigProUI is built on top of the `SigPro` reactive core. To learn how to create s ```bash # ESM / Bundler (tree-shaking) -npm install sigpro-ui +npm install sigpro sigpro-ui # Or with bun -bun add sigpro-ui +bun add sigpro sigpro-ui ``` ## 2. Import and use in your app @@ -24,7 +24,8 @@ bun add sigpro-ui ### ESM / Module usage ```javascript -import { $, Input, Button, Alert } from "sigpro-ui"; +import { $ } from "sigpro"; // Core functions +import { Input, Button, Alert } from "sigpro-ui"; // Components import "sigpro-ui/css"; const App = () => { @@ -61,6 +62,7 @@ mount(App, "#app"); SigProUI Demo +