diff --git a/dist/sigpro-ui.esm.js b/dist/sigpro-ui.esm.js index 3abe88e..3c8d31d 100644 --- a/dist/sigpro-ui.esm.js +++ b/dist/sigpro-ui.esm.js @@ -18,7 +18,10 @@ var ensureNode = (n) => n?._isRuntime ? n.container : n instanceof Node ? n : do 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 dispose = (eff) => { if (!eff || eff._disposed) @@ -49,16 +52,6 @@ var onUnmount = (fn) => { if (activeOwner) (activeOwner._cleanups ||= new Set).add(fn); }; -var set = (signal, path, value) => { - if (value === undefined) - return signal(isFunc(path) ? path(signal()) : path); - const keys = path.split("."), root = { ...signal() }; - let acc = root, k; - for (k of keys.slice(0, -1)) - acc = acc[k] = { ...acc[k] || {} }; - acc[keys.at(-1)] = value; - signal(root); -}; var untrack = (fn) => { const p = activeEffect; activeEffect = null; @@ -111,6 +104,17 @@ var flush = () => { 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); @@ -129,7 +133,7 @@ var trackUpdate = (subs, trigger = false) => { hasQueue = true; } }); - if (hasQueue && !isFlushing) + if (hasQueue && !isFlushing && batchDepth === 0) queueMicrotask(flush); } }; @@ -193,6 +197,49 @@ var $2 = (val, key = null) => { return val; }; }; +var $$ = (target) => { + if (!isObj(target)) + return target; + if (proxyCache.has(target)) + return proxyCache.get(target); + const subsMap = new Map; + const getSubs = (k) => { + let s = subsMap.get(k); + if (!s) + subsMap.set(k, s = new Set); + return s; + }; + const proxy = new Proxy(target, { + get(t, k) { + trackUpdate(getSubs(k)); + return $$(t[k]); + }, + set(t, k, v) { + const isNew = !(k in t); + if (!Object.is(t[k], v)) { + t[k] = v; + trackUpdate(getSubs(k), true); + if (isNew) + trackUpdate(getSubs(ITER), true); + } + return true; + }, + deleteProperty(t, k) { + const res = Reflect.deleteProperty(t, k); + if (res) { + trackUpdate(getSubs(k), true); + trackUpdate(getSubs(ITER), true); + } + return res; + }, + ownKeys(t) { + trackUpdate(getSubs(ITER)); + return Reflect.ownKeys(t); + } + }); + proxyCache.set(target, proxy); + return proxy; +}; var Watch2 = (sources, cb) => { if (cb === undefined) { const effect2 = createEffect(sources); @@ -387,42 +434,22 @@ var Render = (renderFn) => { } }; }; -var If2 = (cond, ifYes, ifNot = null, trans = null) => { +var If2 = (cond, ifYes, ifNot = null) => { const anchor = doc.createTextNode(""); const root = Tag2("div", { style: "display:contents" }, [anchor]); let currentView = null; - let last = null; - let exitPromise = null; Watch2(() => !!(isFunc(cond) ? cond() : cond), (show) => { - if (show === last) - return; - last = show; - const disposeView = () => { - if (currentView) { - currentView.destroy(); - currentView = null; - } - }; - if (currentView && !show && trans?.out) { - if (exitPromise && exitPromise.cancel) - exitPromise.cancel(); - const anim = trans.out(currentView.container, disposeView); - exitPromise = anim; - if (anim && anim.finished) - anim.finished.then(disposeView); - else - disposeView(); - } else { - disposeView(); + if (currentView) { + currentView.destroy(); + currentView = null; } const content = show ? ifYes : ifNot; if (content) { currentView = Render(() => isFunc(content) ? content() : content); root.insertBefore(currentView.container, anchor); - if (trans?.in) - trans.in(currentView.container); } }); + onUnmount(() => currentView?.destroy()); return root; }; var For2 = (src, itemFn, keyFn) => { @@ -501,7 +528,7 @@ var Mount2 = (comp, target) => { MOUNTED_NODES.set(t, inst); return inst; }; -var SigPro = Object.freeze({ $: $2, Watch: Watch2, Tag: Tag2, Render, If: If2, For: For2, Router, Mount: Mount2, onMount, onUnmount, set }); +var SigPro = Object.freeze({ $: $2, $$, Watch: Watch2, Tag: Tag2, Render, If: If2, For: For2, Router, Mount: Mount2, onMount, onUnmount, Batch }); if (typeof window !== "undefined") { Object.assign(window, SigPro); "div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer ul ol li a em strong pre code form label input textarea select button img svg".split(" ").forEach((t) => window[t[0].toUpperCase() + t.slice(1)] = (p, c) => SigPro.Tag(t, p, c)); diff --git a/dist/sigpro-ui.esm.min.js b/dist/sigpro-ui.esm.min.js index 3039e50..f55f4ff 100644 --- a/dist/sigpro-ui.esm.min.js +++ b/dist/sigpro-ui.esm.min.js @@ -1,7 +1,7 @@ -var H_=Object.defineProperty;var R=(f,M)=>{for(var _ in M)H_(f,_,{get:M[_],enumerable:!0,configurable:!0,set:(E)=>M[_]=()=>E})};var h=(f)=>typeof f==="function",df=(f)=>f&&typeof f==="object",r=Array.isArray,w=typeof document<"u"?document:null,rf=(f)=>f?._isRuntime?f.container:f instanceof Node?f:w.createTextNode(f==null?"":String(f)),O=null,F=null,e=!1,Jf=new Set,Wf=new WeakMap,g=(f)=>{if(!f||f._disposed)return;f._disposed=!0;let M=[f];while(M.length){let _=M.pop();if(_._cleanups)_._cleanups.forEach((E)=>E()),_._cleanups.clear();if(_._children)_._children.forEach((E)=>M.push(E)),_._children.clear();if(_._deps)_._deps.forEach((E)=>E.delete(_)),_._deps.clear()}},j_=(f)=>{if(F)(F._mounts||=[]).push(f)},n=(f)=>{if(F)(F._cleanups||=new Set).add(f)},w_=(f,M,_)=>{if(_===void 0)return f(h(M)?M(f()):M);let E=M.split("."),W={...f()},J=W,L;for(L of E.slice(0,-1))J=J[L]={...J[L]||{}};J[E.at(-1)]=_,f(W)},x_=(f)=>{let M=O;O=null;try{return f()}finally{O=M}},t=(f,M=!1)=>{let _=()=>{if(_._disposed)return;if(_._deps)_._deps.forEach((J)=>J.delete(_));if(_._cleanups)_._cleanups.forEach((J)=>J()),_._cleanups.clear();let E=O,W=F;O=F=_;try{return _._result=f()}catch(J){console.error("[SigPro]",J)}finally{O=E,F=W}};if(_._deps=_._cleanups=_._children=null,_._disposed=!1,_._isComputed=M,_._depth=O?O._depth+1:0,_._mounts=[],_._parent=F,F)(F._children||=new Set).add(_);return _},y_=()=>{if(e)return;e=!0;let f=Array.from(Jf).sort((M,_)=>M._depth-_._depth);Jf.clear();for(let M of f)if(!M._disposed)M();e=!1},s=(f,M=!1)=>{if(!M&&O&&!O._disposed)f.add(O),(O._deps||=new Set).add(f);else if(M){let _=!1;if(f.forEach((E)=>{if(E===O||E._disposed)return;if(E._isComputed){if(E._dirty=!0,E._subs)s(E._subs,!0)}else Jf.add(E),_=!0}),_&&!e)queueMicrotask(y_)}},o=(f,M=null)=>{let _=new Set;if(h(f)){let E,W=!0,J=()=>{if(W){let L=O;O=J;try{let A=f();if(!Object.is(E,A))E=A,W=!1,s(_,!0)}finally{O=L}}return s(_),E};if(J._isComputed=!0,J._subs=_,J._dirty=!0,J._deps=null,J._disposed=!1,J.markDirty=()=>{W=!0},J.stop=()=>{if(J._disposed=!0,J._deps)J._deps.forEach((L)=>L.delete(J)),J._deps.clear();_.clear()},F)n(J.stop);return J}if(M)try{f=JSON.parse(localStorage.getItem(M))??f}catch(E){}return(...E)=>{if(E.length){let W=h(E[0])?E[0](f):E[0];if(!Object.is(f,W)){if(f=W,M)localStorage.setItem(M,JSON.stringify(f));s(_,!0)}}return s(_),f}},c=(f,M)=>{if(M===void 0){let E=t(f);return E(),()=>g(E)}let _=t(()=>{let E=Array.isArray(f)?f.map((W)=>W()):f();x_(()=>M(E))});return _(),()=>g(_)},Qf=(f)=>{if(f._cleanups)f._cleanups.forEach((M)=>M()),f._cleanups.clear();if(f._ownerEffect)g(f._ownerEffect);if(f.childNodes)f.childNodes.forEach(Qf)},I_=/^\s*(javascript|data|vbscript):/i,u_=(f)=>f==="src"||f==="href"||f.startsWith("on"),nf=(f,M)=>{if(M==null||M===!1)return null;if(u_(f)){let _=String(M);if(I_.test(_))return console.warn(`[SigPro] Bloqueado protocolo peligroso en ${f}`),"#"}return M},k=(f,M={},_=[])=>{if(M instanceof Node||r(M)||!df(M))_=M,M={};if(h(f)){let L={_mounts:[],_cleanups:new Set},A=t(()=>{let P=f(M,{children:_,emit:(S,...K)=>M[`on${S[0].toUpperCase()}${S.slice(1)}`]?.(...K)});return A._result=P,P});A();let Q=A._result;if(Q==null)return null;let G=Q instanceof Node||r(Q)&&Q.every((P)=>P instanceof Node)?Q:w.createTextNode(String(Q)),T=(P)=>{if(df(P)&&!P._isRuntime)P._mounts=A._mounts||[],P._cleanups=A._cleanups||new Set,P._ownerEffect=A};return r(G)?G.forEach(T):T(G),G}let E=/^(svg|path|circle|rect|line|polyline|polygon|g|defs|text|tspan|use)$/.test(f),W=E?w.createElementNS("http://www.w3.org/2000/svg",f):w.createElement(f);W._cleanups=new Set;for(let L in M){if(!M.hasOwnProperty(L))continue;let A=M[L];if(L==="ref"){h(A)?A(W):A.current=W;continue}if(L.startsWith("on")){let Q=L.slice(2).toLowerCase();W.addEventListener(Q,A);let G=()=>W.removeEventListener(Q,A);W._cleanups.add(G),n(G)}else if(h(A)){let Q=t(()=>{let G=nf(L,A());if(L==="class")W.className=G||"";else if(G==null)W.removeAttribute(L);else if(L in W&&!E)W[L]=G;else W.setAttribute(L,G===!0?"":G)});if(Q(),W._cleanups.add(()=>g(Q)),n(()=>g(Q)),/^(INPUT|TEXTAREA|SELECT)$/.test(W.tagName)&&(L==="value"||L==="checked")){let G=L==="checked"?"change":"input";W.addEventListener(G,(T)=>A(T.target[L]))}}else{let Q=nf(L,A);if(Q!=null)if(L in W&&!E)W[L]=Q;else W.setAttribute(L,Q===!0?"":Q)}}let J=(L)=>{if(r(L))return L.forEach(J);if(h(L)){let A=w.createTextNode("");W.appendChild(A);let Q=[],G=t(()=>{let T=L(),P=(r(T)?T:[T]).map(rf);Q.forEach((K)=>{if(K._isRuntime)K.destroy();else Qf(K);if(K.parentNode)K.remove()});let S=A;for(let K=P.length-1;K>=0;K--){let X=P[K];if(X.parentNode!==S.parentNode)S.parentNode?.insertBefore(X,S);if(X._mounts)X._mounts.forEach((q)=>q());S=X}Q=P});G(),W._cleanups.add(()=>g(G)),n(()=>g(G))}else{let A=rf(L);if(W.appendChild(A),A._mounts)A._mounts.forEach((Q)=>Q())}};return J(_),W},a=(f)=>{let M=new Set,_=[],E=F,W=O,J=w.createElement("div");J.style.display="contents",J.setAttribute("role","presentation"),F={_cleanups:M,_mounts:_},O=null;let L=(A)=>{if(!A)return;if(A._isRuntime)M.add(A.destroy),J.appendChild(A.container);else if(r(A))A.forEach(L);else J.appendChild(A instanceof Node?A:w.createTextNode(String(A==null?"":A)))};try{L(f({onCleanup:(A)=>M.add(A)}))}finally{F=E,O=W}return _.forEach((A)=>A()),{_isRuntime:!0,container:J,destroy:()=>{M.forEach((A)=>A()),Qf(J),J.remove()}}},lf=(f,M,_=null,E=null)=>{let W=w.createTextNode(""),J=k("div",{style:"display:contents"},[W]),L=null,A=null,Q=null;return c(()=>!!(h(f)?f():f),(G)=>{if(G===A)return;A=G;let T=()=>{if(L)L.destroy(),L=null};if(L&&!G&&E?.out){if(Q&&Q.cancel)Q.cancel();let S=E.out(L.container,T);if(Q=S,S&&S.finished)S.finished.then(T);else T()}else T();let P=G?M:_;if(P){if(L=a(()=>h(P)?P():P),J.insertBefore(L.container,W),E?.in)E.in(L.container)}}),J},sf=(f,M,_)=>{let E=w.createTextNode(""),W=k("div",{style:"display:contents"},[E]),J=new Map;return c(()=>(h(f)?f():f)||[],(L)=>{let A=new Map,Q=[],G=L||[];for(let P=0;PM(S,P));else J.delete(K);A.set(K,X),Q.push(X)}J.forEach((P)=>P.destroy());let T=E;for(let P=Q.length-1;P>=0;P--){let K=Q[P].container;if(K.nextSibling!==T)W.insertBefore(K,T);T=K}J=A}),W},b=(f)=>{let M=()=>window.location.hash.slice(1)||"/",_=o(M()),E=()=>_(M());window.addEventListener("hashchange",E),n(()=>window.removeEventListener("hashchange",E));let W=k("div",{class:"router-hook"}),J=null;return c([_],()=>{let L=_(),A=f.find((Q)=>{let G=Q.path.split("/").filter(Boolean),T=L.split("/").filter(Boolean);return G.length===T.length&&G.every((P,S)=>P[0]===":"||P===T[S])})||f.find((Q)=>Q.path==="*");if(A){J?.destroy();let Q={};A.path.split("/").filter(Boolean).forEach((G,T)=>{if(G[0]===":")Q[G.slice(1)]=L.split("/").filter(Boolean)[T]}),b.params(Q),J=a(()=>h(A.component)?A.component(Q):A.component),W.replaceChildren(J.container)}}),W};b.params=o({});b.to=(f)=>window.location.hash=f.replace(/^#?\/?/,"#/");b.back=()=>window.history.back();b.path=()=>window.location.hash.replace(/^#/,"")||"/";var tf=(f,M)=>{let _=typeof M==="string"?w.querySelector(M):M;if(!_)return;if(Wf.has(_))Wf.get(_).destroy();let E=a(h(f)?f:()=>f);return _.replaceChildren(E.container),Wf.set(_,E),E},of=Object.freeze({$:o,Watch:c,Tag:k,Render:a,If:lf,For:sf,Router:b,Mount:tf,onMount:j_,onUnmount:n,set:w_});if(typeof window<"u")Object.assign(window,of),"div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer ul ol li a em strong pre code form label input textarea select button img svg".split(" ").forEach((f)=>window[f[0].toUpperCase()+f.slice(1)]=(M,_)=>of.Tag(f,M,_));var _f={};R(_f,{default:()=>g_,Tooltip:()=>F_,Toast:()=>O_,Timeline:()=>V_,Tabs:()=>N_,Table:()=>D_,Swap:()=>z_,Stat:()=>R_,Stack:()=>C_,Select:()=>q_,Rating:()=>S_,Range:()=>Y_,Radio:()=>K_,Navbar:()=>Z_,Modal:()=>X_,Menu:()=>B_,List:()=>T_,Label:()=>P_,Input:()=>i,Indicator:()=>G_,Fileinput:()=>Q_,Fieldset:()=>J_,Fab:()=>W_,Dropdown:()=>A_,Drawer:()=>L_,Datepicker:()=>$_,Colorpicker:()=>E_,Checkbox:()=>M_,Button:()=>l,Badge:()=>__,Autocomplete:()=>f_,Alert:()=>ef,Accordion:()=>af});var Gf={};R(Gf,{Accordion:()=>af});var ff={};R(ff,{val:()=>B,ui:()=>Z,getIcon:()=>z});var B=(f)=>typeof f==="function"?f():f,Z=(f,M)=>typeof M==="function"?()=>`${f} ${M()||""}`.trim():`${f} ${M||""}`.trim(),z=(f)=>{if(!f)return null;if(typeof f==="function")return Tag("span",{class:"mr-1"},f());if(typeof f==="object")return Tag("span",{class:"mr-1"},f);if(typeof f==="string"){let M=f.trim().split(/\s+/),_=M[M.length-1]==="right",E=_?M.slice(0,-1).join(" "):f,W=_?"ml-1":"mr-1";if(E&&!E.startsWith("icon-[")&&!E.includes("--"))return Tag("span",{class:W},E);return Tag("span",{class:`${E} ${W}`.trim()})}return null};var af=(f,M)=>{let{class:_,title:E,name:W,open:J,...L}=f;return Tag("div",{...L,class:Z("collapse collapse-arrow bg-base-200 mb-2",_)},[Tag("input",{type:W?"radio":"checkbox",name:W,checked:B(J)}),Tag("div",{class:"collapse-title text-xl font-medium"},E),Tag("div",{class:"collapse-content"},M)])};var Pf={};R(Pf,{Alert:()=>ef});var ef=(f,M)=>{let{class:_,actions:E,type:W="info",soft:J=!0,...L}=f,A={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},T=[`alert-${W}`,J?"alert-soft":"",_].filter(Boolean).join(" "),P=M||f.message;return Tag("div",{...L,role:"alert",class:Z("alert",T)},()=>[z(A[W]),Tag("div",{class:"flex-1"},[Tag("span",{},[typeof P==="function"?P():P])]),E?Tag("div",{class:"flex-none"},[typeof E==="function"?E():E]):null].filter(Boolean))};var Bf={};R(Bf,{Autocomplete:()=>f_});var m_={es:{close:"Cerrar",confirm:"Confirmar",cancel:"Cancelar",search:"Buscar...",loading:"Cargando...",nodata:"Sin datos"},en:{close:"Close",confirm:"Confirm",cancel:"Cancel",search:"Search...",loading:"Loading...",nodata:"No data"}},v_=$("es");var x=(f)=>()=>m_[v_()][f]||f;var Tf={};R(Tf,{Input:()=>i});var i=(f)=>{let{class:M,value:_,type:E="text",icon:W,oninput:J,placeholder:L,disabled:A,validate:Q,label:G,...T}=f,P=E==="password",S=$(!1),K=$(null),X={text:"icon-[lucide--text]",password:"icon-[lucide--lock]",date:"icon-[lucide--calendar]",number:"icon-[lucide--hash]",email:"icon-[lucide--mail]",search:"icon-[lucide--search]",tel:"icon-[lucide--phone]",url:"icon-[lucide--link]"},q=W?z(W):X[E]?z(X[E]):null,D=()=>z(S()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),j=q?"pl-10":"",I=P?"pr-10":"",p=()=>{if(M?.includes("input-xs"))return"btn-xs";if(M?.includes("input-sm"))return"btn-sm";if(M?.includes("input-lg"))return"btn-lg";return"btn-md"},d=(V)=>{let m=V.target.value;if(Q){let Mf=Q(m);K(Mf||null)}J?.(V)},U=()=>K()&&K()!=="",Y=()=>{let V=`input w-full ${j} ${I}`;if(M)V+=` ${M}`;if(U())V+=" input-error";return V.trim()},C=Tag("input",{...T,type:()=>P?S()?"text":"password":E,placeholder:L||(G?" ":L),class:Y,value:_,oninput:d,disabled:()=>B(A),"aria-invalid":()=>U()?"true":"false"}),N=()=>[C,q?Tag("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},q):null,P?Tag("button",{type:"button",class:Z("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",p()),onclick:(V)=>{V.preventDefault(),S(!S())}},()=>D()):null,Tag("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>U()?K():null)];if(G)return Tag("label",{class:Z("floating-label w-full",M)},()=>[Tag("div",{class:"relative w-full"},N),Tag("span",{},B(G))]);return Tag("div",{class:"relative w-full"},N)};var f_=(f)=>{let{class:M,items:_=[],value:E,onselect:W,label:J,placeholder:L,...A}=f,Q=$(B(E)||""),G=$(!1),T=$(-1),P=$(()=>{let X=Q().toLowerCase(),q=B(_)||[];return X?q.filter((D)=>(typeof D==="string"?D:D.label).toLowerCase().includes(X)):q}),S=(X)=>{let q=typeof X==="string"?X:X.value,D=typeof X==="string"?X:X.label;if(Q(D),typeof E==="function")E(q);W?.(X),G(!1),T(-1)},K=(X)=>{let q=P();if(X.key==="ArrowDown")X.preventDefault(),G(!0),T(Math.min(T()+1,q.length-1));else if(X.key==="ArrowUp")X.preventDefault(),T(Math.max(T()-1,0));else if(X.key==="Enter"&&T()>=0)X.preventDefault(),S(q[T()]);else if(X.key==="Escape")G(!1)};return Tag("div",{class:"relative w-full"},[i({label:J,class:M,placeholder:L||x("search")(),value:Q,onfocus:()=>G(!0),onblur:()=>setTimeout(()=>G(!1),150),onkeydown:K,oninput:(X)=>{let q=X.target.value;if(Q(q),typeof E==="function")E(q);G(!0),T(-1)},...A}),Tag("ul",{class:"absolute dropdown-menu left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50",style:()=>G()&&P().length?"display:block":"display:none"},[For(P,(X,q)=>Tag("li",{},[Tag("a",{class:()=>`block w-full ${T()===q?"active bg-primary text-primary-content":""}`,onclick:()=>S(X),onmouseenter:()=>T(q)},typeof X==="string"?X:X.label)]),(X,q)=>(typeof X==="string"?X:X.value)+q),()=>P().length?null:Tag("li",{class:"p-2 text-center opacity-50"},x("nodata")())])])};var Xf={};R(Xf,{Badge:()=>__});var __=(f,M)=>{let{class:_,...E}=f;return Tag("span",{...E,class:Z("badge",_)},M)};var Zf={};R(Zf,{Button:()=>l});var l=(f,M)=>{let{class:_,loading:E,icon:W,...J}=f,L=z(W);return Tag("button",{...J,class:Z("btn",_),disabled:()=>B(E)||B(f.disabled)},()=>[B(E)&&Tag("span",{class:"loading loading-spinner"}),L,M].filter(Boolean))};var Kf={};R(Kf,{Checkbox:()=>M_});var M_=(f)=>{let{class:M,value:_,toggle:E,label:W,...J}=f,L=Tag("input",{...J,type:"checkbox",class:()=>Z(B(E)?"toggle":"checkbox",M),checked:_});return Tag("label",{class:"label cursor-pointer justify-start gap-3"},[L,W?Tag("span",{class:"label-text"},W):null])};var Yf={};R(Yf,{Colorpicker:()=>E_});var E_=(f)=>{let{class:M,value:_,label:E,...W}=f,J=$(!1),L=["#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"],A=()=>B(_)||"#000000";return Tag("div",{class:Z("relative w-fit",M)},[Tag("button",{type:"button",class:"btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case",onclick:(Q)=>{Q.stopPropagation(),J(!J())},...W},[Tag("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${A()}`}),E?Tag("span",{class:"opacity-80"},E):null]),If(J,()=>Tag("div",{class:"absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none",onclick:(Q)=>Q.stopPropagation()},[Tag("div",{class:"grid grid-cols-8 gap-1"},L.map((Q)=>Tag("button",{type:"button",style:`background-color: ${Q}`,class:()=>{return`size-6 rounded-sm cursor-pointer transition-all hover:scale-125 hover:z-10 active:scale-95 outline-none border border-black/5 - ${A().toLowerCase()===Q.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof _==="function")_(Q);J(!1)}})))])),If(J,()=>Tag("div",{class:"fixed inset-0 z-[100]",onclick:()=>J(!1)}))])};var Sf={};R(Sf,{Datepicker:()=>$_});var $_=(f)=>{let{class:M,value:_,range:E,label:W,placeholder:J,hour:L=!1,...A}=f,Q=$(!1),G=$(new Date),T=$(null),P=$(0),S=$(0),K=()=>B(E)===!0,X=new Date,q=`${X.getFullYear()}-${String(X.getMonth()+1).padStart(2,"0")}-${String(X.getDate()).padStart(2,"0")}`,D=(Y)=>{let C=Y.getFullYear(),N=String(Y.getMonth()+1).padStart(2,"0"),V=String(Y.getDate()).padStart(2,"0");return`${C}-${N}-${V}`},j=(Y)=>{let C=D(Y),N=B(_);if(K())if(!N?.start||N.start&&N.end){if(typeof _==="function")_({start:C,end:null,...L&&{startHour:P()}})}else{let V=N.start;if(typeof _==="function"){let m=C{let Y=B(_);if(!Y)return"";if(typeof Y==="string"){if(L&&Y.includes("T"))return Y.replace("T"," ");return Y}if(Y.start&&Y.end){let C=L&&Y.startHour?`${Y.start} ${String(Y.startHour).padStart(2,"0")}:00`:Y.start,N=L&&Y.endHour?`${Y.end} ${String(Y.endHour).padStart(2,"0")}:00`:Y.end;return`${C} - ${N}`}if(Y.start)return`${L&&Y.startHour?`${Y.start} ${String(Y.startHour).padStart(2,"0")}:00`:Y.start}...`;return""}),p=(Y)=>{let C=G();G(new Date(C.getFullYear(),C.getMonth()+Y,1))},d=(Y)=>{let C=G();G(new Date(C.getFullYear()+Y,C.getMonth(),1))},U=({value:Y,onChange:C})=>{return Tag("div",{class:"flex-1"},[Tag("div",{class:"flex gap-2 items-center"},[Tag("input",{type:"range",min:0,max:23,value:Y,class:"range range-xs flex-1",oninput:(N)=>{let V=parseInt(N.target.value);C(V)}}),Tag("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(B(Y)).padStart(2,"0")+":00")])])};return Tag("div",{class:Z("relative w-full",M)},[i({label:W,placeholder:J||(K()?"Seleccionar rango...":"Seleccionar fecha..."),value:I,readonly:!0,icon:z("icon-[lucide--calendar]"),onclick:(Y)=>{Y.stopPropagation(),Q(!Q())},...A}),If(Q,()=>Tag("div",{class:"absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none",onclick:(Y)=>Y.stopPropagation()},[Tag("div",{class:"flex justify-between items-center mb-4 gap-1"},[Tag("div",{class:"flex gap-0.5"},[Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>d(-1)},z("icon-[lucide--chevrons-left]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>p(-1)},z("icon-[lucide--chevron-left]"))]),Tag("span",{class:"font-bold uppercase flex-1 text-center"},[()=>G().toLocaleString("es-ES",{month:"short",year:"numeric"})]),Tag("div",{class:"flex gap-0.5"},[Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>p(1)},z("icon-[lucide--chevron-right]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>d(1)},z("icon-[lucide--chevrons-right]"))])]),Tag("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>T(null)},[...["L","M","X","J","V","S","D"].map((Y)=>Tag("div",{class:"text-[10px] opacity-40 font-bold text-center"},Y)),()=>{let Y=G(),C=Y.getFullYear(),N=Y.getMonth(),V=new Date(C,N,1).getDay(),m=V===0?6:V-1,Mf=new Date(C,N+1,0).getDate(),Ef=[];for(let v=0;v{let u=B(_),$f=T(),h_=typeof u==="string"?u.split("T")[0]===H:u?.start===H,k_=u?.end===H,Lf=!1;if(K()&&u?.start){let Af=u.start;if(!u.end&&$f)Lf=H>Af&&H<=$f||H=$f;else if(u.end)Lf=H>Af&&H{if(K())T(H)},onclick:()=>j(pf)},[v.toString()]))}return Ef}]),L?Tag("div",{class:"mt-3 pt-2 border-t border-base-300"},[K()?Tag("div",{class:"flex gap-4"},[U({value:P,onChange:(Y)=>{P(Y);let C=B(_);if(C?.start)_({...C,startHour:Y})}}),U({value:S,onChange:(Y)=>{S(Y);let C=B(_);if(C?.end)_({...C,endHour:Y})}})]):U({value:P,onChange:(Y)=>{P(Y);let C=B(_);if(C&&typeof C==="string"&&C.includes("-"))_(C.split("T")[0]+"T"+String(Y).padStart(2,"0")+":00:00")}})]):null])),If(Q,()=>Tag("div",{class:"fixed inset-0 z-[90]",onclick:()=>Q(!1)}))])};var qf={};R(qf,{Drawer:()=>L_});var L_=(f,M)=>{let{class:_,id:E,open:W,side:J,content:L,...A}=f,Q=E||`drawer-${Math.random().toString(36).slice(2,9)}`;return Tag("div",{...A,class:Z("drawer",_)},[Tag("input",{id:Q,type:"checkbox",class:"drawer-toggle",checked:()=>typeof W==="function"?W():W,onchange:(G)=>{if(typeof W==="function")W(G.target.checked)}}),Tag("div",{class:"drawer-content"},[typeof L==="function"?L():L]),Tag("div",{class:"drawer-side"},[Tag("label",{for:Q,class:"drawer-overlay",onclick:()=>{if(typeof W==="function")W(!1)}}),Tag("div",{class:"min-h-full bg-base-200 w-80"},[typeof J==="function"?J():J])])])};var Cf={};R(Cf,{Dropdown:()=>A_});var y=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(f)=>{if(y&&!y.contains(f.target))y.open=!1,y=null}),window.__dropdownHandlerRegistered=!0;var A_=(f)=>{let{class:M,label:_,icon:E,items:W,...J}=f;return Tag("details",{...J,class:Z("dropdown",M)},[Tag("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(L)=>{let A=L.currentTarget.closest("details");if(y&&y!==A)y.open=!1;setTimeout(()=>{y=A.open?A:null},0)}},[()=>E?typeof E==="function"?E():E:null,()=>_?typeof _==="function"?_():_:null]),Tag("ul",{tabindex:"-1",class:"dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300"},[()=>{return(typeof W==="function"?W():W||[]).map((A)=>Tag("li",{},[Tag("a",{class:A.class||"",onclick:(Q)=>{if(A.onclick)A.onclick(Q);let G=Q.currentTarget.closest("details");if(G){if(G.open=!1,y===G)y=null}}},[A.icon?Tag("span",{},A.icon):null,Tag("span",{},A.label)])]))}])])};var Rf={};R(Rf,{Fab:()=>W_});var W_=(f)=>{let{class:M,icon:_,label:E,actions:W=[],position:J="bottom-6 right-6",...L}=f;return Tag("div",{...L,class:Z(`fab absolute ${J} flex flex-col-reverse items-end gap-3 z-[100]`,M)},[Tag("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[_?z(_):null,!_&&E?E:null]),...B(W).map((A)=>Tag("div",{class:"flex items-center gap-3 transition-all duration-300"},[A.label?Tag("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},A.label):null,Tag("button",{type:"button",class:`btn btn-circle shadow-lg ${A.class||""}`,onclick:(Q)=>{Q.stopPropagation(),A.onclick?.(Q)}},[A.icon?z(A.icon):A.text||""])]))])};var zf={};R(zf,{Fieldset:()=>J_});var J_=(f,M)=>{let{class:_,legend:E,...W}=f;return Tag("fieldset",{...W,class:Z("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",_)},[()=>{let J=B(E);return J?Tag("legend",{class:"fieldset-legend font-bold"},[J]):null},M])};var Df={};R(Df,{Fileinput:()=>Q_});var Q_=(f)=>{let{class:M,tooltip:_,max:E=2,accept:W="*",onselect:J,...L}=f,A=$([]),Q=$(!1),G=$(null),T=E*1024*1024,P=(K)=>{let X=Array.from(K);if(G(null),X.find((D)=>D.size>T)){G(`Máx ${E}MB`);return}A([...A(),...X]),J?.(A())},S=(K)=>{let X=A().filter((q,D)=>D!==K);A(X),J?.(X)};return Tag("fieldset",{...L,class:Z("fieldset w-full p-0",M)},[Tag("div",{class:()=>`w-full ${_?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":_},[Tag("label",{class:()=>` +var I_=Object.defineProperty;var R=(f,M)=>{for(var _ in M)I_(f,_,{get:M[_],enumerable:!0,configurable:!0,set:(E)=>M[_]=()=>E})};var j=(f)=>typeof f==="function",Bf=(f)=>f&&typeof f==="object",o=Array.isArray,y=typeof document<"u"?document:null,lf=(f)=>f?._isRuntime?f.container:f instanceof Node?f:y.createTextNode(f==null?"":String(f)),O=null,V=null,t=!1,ff=0,_f=new Set,Jf=new WeakMap,Qf=Symbol("iter"),Tf=new WeakMap,c=(f)=>{if(!f||f._disposed)return;f._disposed=!0;let M=[f];while(M.length){let _=M.pop();if(_._cleanups)_._cleanups.forEach((E)=>E()),_._cleanups.clear();if(_._children)_._children.forEach((E)=>M.push(E)),_._children.clear();if(_._deps)_._deps.forEach((E)=>E.delete(_)),_._deps.clear()}},u_=(f)=>{if(V)(V._mounts||=[]).push(f)},p=(f)=>{if(V)(V._cleanups||=new Set).add(f)},m_=(f)=>{let M=O;O=null;try{return f()}finally{O=M}},a=(f,M=!1)=>{let _=()=>{if(_._disposed)return;if(_._deps)_._deps.forEach((A)=>A.delete(_));if(_._cleanups)_._cleanups.forEach((A)=>A()),_._cleanups.clear();let E=O,L=V;O=V=_;try{return _._result=f()}catch(A){console.error("[SigPro]",A)}finally{O=E,V=L}};if(_._deps=_._cleanups=_._children=null,_._disposed=!1,_._isComputed=M,_._depth=O?O._depth+1:0,_._mounts=[],_._parent=V,V)(V._children||=new Set).add(_);return _},af=()=>{if(t)return;t=!0;let f=Array.from(_f).sort((M,_)=>M._depth-_._depth);_f.clear();for(let M of f)if(!M._disposed)M();t=!1},v_=(f)=>{ff++;try{return f()}finally{if(ff--,ff===0&&_f.size>0&&!t)af()}},k=(f,M=!1)=>{if(!M&&O&&!O._disposed)f.add(O),(O._deps||=new Set).add(f);else if(M){let _=!1;if(f.forEach((E)=>{if(E===O||E._disposed)return;if(E._isComputed){if(E._dirty=!0,E._subs)k(E._subs,!0)}else _f.add(E),_=!0}),_&&!t&&ff===0)queueMicrotask(af)}},i=(f,M=null)=>{let _=new Set;if(j(f)){let E,L=!0,A=()=>{if(L){let P=O;O=A;try{let W=f();if(!Object.is(E,W))E=W,L=!1,k(_,!0)}finally{O=P}}return k(_),E};if(A._isComputed=!0,A._subs=_,A._dirty=!0,A._deps=null,A._disposed=!1,A.markDirty=()=>{L=!0},A.stop=()=>{if(A._disposed=!0,A._deps)A._deps.forEach((P)=>P.delete(A)),A._deps.clear();_.clear()},V)p(A.stop);return A}if(M)try{f=JSON.parse(localStorage.getItem(M))??f}catch(E){}return(...E)=>{if(E.length){let L=j(E[0])?E[0](f):E[0];if(!Object.is(f,L)){if(f=L,M)localStorage.setItem(M,JSON.stringify(f));k(_,!0)}}return k(_),f}},ef=(f)=>{if(!Bf(f))return f;if(Jf.has(f))return Jf.get(f);let M=new Map,_=(L)=>{let A=M.get(L);if(!A)M.set(L,A=new Set);return A},E=new Proxy(f,{get(L,A){return k(_(A)),ef(L[A])},set(L,A,P){let W=!(A in L);if(!Object.is(L[A],P)){if(L[A]=P,k(_(A),!0),W)k(_(Qf),!0)}return!0},deleteProperty(L,A){let P=Reflect.deleteProperty(L,A);if(P)k(_(A),!0),k(_(Qf),!0);return P},ownKeys(L){return k(_(Qf)),Reflect.ownKeys(L)}});return Jf.set(f,E),E},b=(f,M)=>{if(M===void 0){let E=a(f);return E(),()=>c(E)}let _=a(()=>{let E=Array.isArray(f)?f.map((L)=>L()):f();m_(()=>M(E))});return _(),()=>c(_)},Gf=(f)=>{if(f._cleanups)f._cleanups.forEach((M)=>M()),f._cleanups.clear();if(f._ownerEffect)c(f._ownerEffect);if(f.childNodes)f.childNodes.forEach(Gf)},g_=/^\s*(javascript|data|vbscript):/i,c_=(f)=>f==="src"||f==="href"||f.startsWith("on"),sf=(f,M)=>{if(M==null||M===!1)return null;if(c_(f)){let _=String(M);if(g_.test(_))return console.warn(`[SigPro] Bloqueado protocolo peligroso en ${f}`),"#"}return M},U=(f,M={},_=[])=>{if(M instanceof Node||o(M)||!Bf(M))_=M,M={};if(j(f)){let P={_mounts:[],_cleanups:new Set},W=a(()=>{let T=f(M,{children:_,emit:(Y,...K)=>M[`on${Y[0].toUpperCase()}${Y.slice(1)}`]?.(...K)});return W._result=T,T});W();let J=W._result;if(J==null)return null;let Q=J instanceof Node||o(J)&&J.every((T)=>T instanceof Node)?J:y.createTextNode(String(J)),X=(T)=>{if(Bf(T)&&!T._isRuntime)T._mounts=W._mounts||[],T._cleanups=W._cleanups||new Set,T._ownerEffect=W};return o(Q)?Q.forEach(X):X(Q),Q}let E=/^(svg|path|circle|rect|line|polyline|polygon|g|defs|text|tspan|use)$/.test(f),L=E?y.createElementNS("http://www.w3.org/2000/svg",f):y.createElement(f);L._cleanups=new Set;for(let P in M){if(!M.hasOwnProperty(P))continue;let W=M[P];if(P==="ref"){j(W)?W(L):W.current=L;continue}if(P.startsWith("on")){let J=P.slice(2).toLowerCase();L.addEventListener(J,W);let Q=()=>L.removeEventListener(J,W);L._cleanups.add(Q),p(Q)}else if(j(W)){let J=a(()=>{let Q=sf(P,W());if(P==="class")L.className=Q||"";else if(Q==null)L.removeAttribute(P);else if(P in L&&!E)L[P]=Q;else L.setAttribute(P,Q===!0?"":Q)});if(J(),L._cleanups.add(()=>c(J)),p(()=>c(J)),/^(INPUT|TEXTAREA|SELECT)$/.test(L.tagName)&&(P==="value"||P==="checked")){let Q=P==="checked"?"change":"input";L.addEventListener(Q,(X)=>W(X.target[P]))}}else{let J=sf(P,W);if(J!=null)if(P in L&&!E)L[P]=J;else L.setAttribute(P,J===!0?"":J)}}let A=(P)=>{if(o(P))return P.forEach(A);if(j(P)){let W=y.createTextNode("");L.appendChild(W);let J=[],Q=a(()=>{let X=P(),T=(o(X)?X:[X]).map(lf);J.forEach((K)=>{if(K._isRuntime)K.destroy();else Gf(K);if(K.parentNode)K.remove()});let Y=W;for(let K=T.length-1;K>=0;K--){let G=T[K];if(G.parentNode!==Y.parentNode)Y.parentNode?.insertBefore(G,Y);if(G._mounts)G._mounts.forEach((q)=>q());Y=G}J=T});Q(),L._cleanups.add(()=>c(Q)),p(()=>c(Q))}else{let W=lf(P);if(L.appendChild(W),W._mounts)W._mounts.forEach((J)=>J())}};return A(_),L},e=(f)=>{let M=new Set,_=[],E=V,L=O,A=y.createElement("div");A.style.display="contents",A.setAttribute("role","presentation"),V={_cleanups:M,_mounts:_},O=null;let P=(W)=>{if(!W)return;if(W._isRuntime)M.add(W.destroy),A.appendChild(W.container);else if(o(W))W.forEach(P);else A.appendChild(W instanceof Node?W:y.createTextNode(String(W==null?"":W)))};try{P(f({onCleanup:(W)=>M.add(W)}))}finally{V=E,O=L}return _.forEach((W)=>W()),{_isRuntime:!0,container:A,destroy:()=>{M.forEach((W)=>W()),Gf(A),A.remove()}}},f_=(f,M,_=null)=>{let E=y.createTextNode(""),L=U("div",{style:"display:contents"},[E]),A=null;return b(()=>!!(j(f)?f():f),(P)=>{if(A)A.destroy(),A=null;let W=P?M:_;if(W)A=e(()=>j(W)?W():W),L.insertBefore(A.container,E)}),p(()=>A?.destroy()),L},__=(f,M,_)=>{let E=y.createTextNode(""),L=U("div",{style:"display:contents"},[E]),A=new Map;return b(()=>(j(f)?f():f)||[],(P)=>{let W=new Map,J=[],Q=P||[];for(let T=0;TM(Y,T));else A.delete(K);W.set(K,G),J.push(G)}A.forEach((T)=>T.destroy());let X=E;for(let T=J.length-1;T>=0;T--){let K=J[T].container;if(K.nextSibling!==X)L.insertBefore(K,X);X=K}A=W}),L},r=(f)=>{let M=()=>window.location.hash.slice(1)||"/",_=i(M()),E=()=>_(M());window.addEventListener("hashchange",E),p(()=>window.removeEventListener("hashchange",E));let L=U("div",{class:"router-hook"}),A=null;return b([_],()=>{let P=_(),W=f.find((J)=>{let Q=J.path.split("/").filter(Boolean),X=P.split("/").filter(Boolean);return Q.length===X.length&&Q.every((T,Y)=>T[0]===":"||T===X[Y])})||f.find((J)=>J.path==="*");if(W){A?.destroy();let J={};W.path.split("/").filter(Boolean).forEach((Q,X)=>{if(Q[0]===":")J[Q.slice(1)]=P.split("/").filter(Boolean)[X]}),r.params(J),A=e(()=>j(W.component)?W.component(J):W.component),L.replaceChildren(A.container)}}),L};r.params=i({});r.to=(f)=>window.location.hash=f.replace(/^#?\/?/,"#/");r.back=()=>window.history.back();r.path=()=>window.location.hash.replace(/^#/,"")||"/";var M_=(f,M)=>{let _=typeof M==="string"?y.querySelector(M):M;if(!_)return;if(Tf.has(_))Tf.get(_).destroy();let E=e(j(f)?f:()=>f);return _.replaceChildren(E.container),Tf.set(_,E),E},tf=Object.freeze({$:i,$$:ef,Watch:b,Tag:U,Render:e,If:f_,For:__,Router:r,Mount:M_,onMount:u_,onUnmount:p,Batch:v_});if(typeof window<"u")Object.assign(window,tf),"div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer ul ol li a em strong pre code form label input textarea select button img svg".split(" ").forEach((f)=>window[f[0].toUpperCase()+f.slice(1)]=(M,_)=>tf.Tag(f,M,_));var Ef={};R(Ef,{default:()=>r_,Tooltip:()=>j_,Toast:()=>k_,Timeline:()=>H_,Tabs:()=>U_,Table:()=>F_,Swap:()=>V_,Stat:()=>O_,Stack:()=>h_,Select:()=>N_,Rating:()=>D_,Range:()=>z_,Radio:()=>R_,Navbar:()=>C_,Modal:()=>q_,Menu:()=>Y_,List:()=>S_,Label:()=>K_,Input:()=>l,Indicator:()=>Z_,Fileinput:()=>X_,Fieldset:()=>G_,Fab:()=>B_,Dropdown:()=>T_,Drawer:()=>Q_,Datepicker:()=>J_,Colorpicker:()=>P_,Checkbox:()=>W_,Button:()=>s,Badge:()=>A_,Autocomplete:()=>L_,Alert:()=>$_,Accordion:()=>E_});var Xf={};R(Xf,{Accordion:()=>E_});var Mf={};R(Mf,{val:()=>B,ui:()=>Z,getIcon:()=>z});var B=(f)=>typeof f==="function"?f():f,Z=(f,M)=>typeof M==="function"?()=>`${f} ${M()||""}`.trim():`${f} ${M||""}`.trim(),z=(f)=>{if(!f)return null;if(typeof f==="function")return Tag("span",{class:"mr-1"},f());if(typeof f==="object")return Tag("span",{class:"mr-1"},f);if(typeof f==="string"){let M=f.trim().split(/\s+/),_=M[M.length-1]==="right",E=_?M.slice(0,-1).join(" "):f,L=_?"ml-1":"mr-1";if(E&&!E.startsWith("icon-[")&&!E.includes("--"))return Tag("span",{class:L},E);return Tag("span",{class:`${E} ${L}`.trim()})}return null};var E_=(f,M)=>{let{class:_,title:E,name:L,open:A,...P}=f;return Tag("div",{...P,class:Z("collapse collapse-arrow bg-base-200 mb-2",_)},[Tag("input",{type:L?"radio":"checkbox",name:L,checked:B(A)}),Tag("div",{class:"collapse-title text-xl font-medium"},E),Tag("div",{class:"collapse-content"},M)])};var Zf={};R(Zf,{Alert:()=>$_});var $_=(f,M)=>{let{class:_,actions:E,type:L="info",soft:A=!0,...P}=f,W={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},X=[`alert-${L}`,A?"alert-soft":"",_].filter(Boolean).join(" "),T=M||f.message;return Tag("div",{...P,role:"alert",class:Z("alert",X)},()=>[z(W[L]),Tag("div",{class:"flex-1"},[Tag("span",{},[typeof T==="function"?T():T])]),E?Tag("div",{class:"flex-none"},[typeof E==="function"?E():E]):null].filter(Boolean))};var Sf={};R(Sf,{Autocomplete:()=>L_});var p_={es:{close:"Cerrar",confirm:"Confirmar",cancel:"Cancelar",search:"Buscar...",loading:"Cargando...",nodata:"Sin datos"},en:{close:"Close",confirm:"Confirm",cancel:"Cancel",search:"Search...",loading:"Loading...",nodata:"No data"}},b_=$("es");var x=(f)=>()=>p_[b_()][f]||f;var Kf={};R(Kf,{Input:()=>l});var l=(f)=>{let{class:M,value:_,type:E="text",icon:L,oninput:A,placeholder:P,disabled:W,validate:J,label:Q,...X}=f,T=E==="password",Y=$(!1),K=$(null),G={text:"icon-[lucide--text]",password:"icon-[lucide--lock]",date:"icon-[lucide--calendar]",number:"icon-[lucide--hash]",email:"icon-[lucide--mail]",search:"icon-[lucide--search]",tel:"icon-[lucide--phone]",url:"icon-[lucide--link]"},q=L?z(L):G[E]?z(G[E]):null,D=()=>z(Y()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),w=q?"pl-10":"",u=T?"pr-10":"",d=()=>{if(M?.includes("input-xs"))return"btn-xs";if(M?.includes("input-sm"))return"btn-sm";if(M?.includes("input-lg"))return"btn-lg";return"btn-md"},n=(h)=>{let v=h.target.value;if(J){let $f=J(v);K($f||null)}A?.(h)},F=()=>K()&&K()!=="",S=()=>{let h=`input w-full ${w} ${u}`;if(M)h+=` ${M}`;if(F())h+=" input-error";return h.trim()},C=Tag("input",{...X,type:()=>T?Y()?"text":"password":E,placeholder:P||(Q?" ":P),class:S,value:_,oninput:n,disabled:()=>B(W),"aria-invalid":()=>F()?"true":"false"}),N=()=>[C,q?Tag("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},q):null,T?Tag("button",{type:"button",class:Z("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",d()),onclick:(h)=>{h.preventDefault(),Y(!Y())}},()=>D()):null,Tag("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>F()?K():null)];if(Q)return Tag("label",{class:Z("floating-label w-full",M)},()=>[Tag("div",{class:"relative w-full"},N),Tag("span",{},B(Q))]);return Tag("div",{class:"relative w-full"},N)};var L_=(f)=>{let{class:M,items:_=[],value:E,onselect:L,label:A,placeholder:P,...W}=f,J=$(B(E)||""),Q=$(!1),X=$(-1),T=$(()=>{let G=J().toLowerCase(),q=B(_)||[];return G?q.filter((D)=>(typeof D==="string"?D:D.label).toLowerCase().includes(G)):q}),Y=(G)=>{let q=typeof G==="string"?G:G.value,D=typeof G==="string"?G:G.label;if(J(D),typeof E==="function")E(q);L?.(G),Q(!1),X(-1)},K=(G)=>{let q=T();if(G.key==="ArrowDown")G.preventDefault(),Q(!0),X(Math.min(X()+1,q.length-1));else if(G.key==="ArrowUp")G.preventDefault(),X(Math.max(X()-1,0));else if(G.key==="Enter"&&X()>=0)G.preventDefault(),Y(q[X()]);else if(G.key==="Escape")Q(!1)};return Tag("div",{class:"relative w-full"},[l({label:A,class:M,placeholder:P||x("search")(),value:J,onfocus:()=>Q(!0),onblur:()=>setTimeout(()=>Q(!1),150),onkeydown:K,oninput:(G)=>{let q=G.target.value;if(J(q),typeof E==="function")E(q);Q(!0),X(-1)},...W}),Tag("ul",{class:"absolute dropdown-menu left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50",style:()=>Q()&&T().length?"display:block":"display:none"},[For(T,(G,q)=>Tag("li",{},[Tag("a",{class:()=>`block w-full ${X()===q?"active bg-primary text-primary-content":""}`,onclick:()=>Y(G),onmouseenter:()=>X(q)},typeof G==="string"?G:G.label)]),(G,q)=>(typeof G==="string"?G:G.value)+q),()=>T().length?null:Tag("li",{class:"p-2 text-center opacity-50"},x("nodata")())])])};var Yf={};R(Yf,{Badge:()=>A_});var A_=(f,M)=>{let{class:_,...E}=f;return Tag("span",{...E,class:Z("badge",_)},M)};var qf={};R(qf,{Button:()=>s});var s=(f,M)=>{let{class:_,loading:E,icon:L,...A}=f,P=z(L);return Tag("button",{...A,class:Z("btn",_),disabled:()=>B(E)||B(f.disabled)},()=>[B(E)&&Tag("span",{class:"loading loading-spinner"}),P,M].filter(Boolean))};var Cf={};R(Cf,{Checkbox:()=>W_});var W_=(f)=>{let{class:M,value:_,toggle:E,label:L,...A}=f,P=Tag("input",{...A,type:"checkbox",class:()=>Z(B(E)?"toggle":"checkbox",M),checked:_});return Tag("label",{class:"label cursor-pointer justify-start gap-3"},[P,L?Tag("span",{class:"label-text"},L):null])};var Rf={};R(Rf,{Colorpicker:()=>P_});var P_=(f)=>{let{class:M,value:_,label:E,...L}=f,A=$(!1),P=["#000","#1A1A1A","#333","#4D4D4D","#666","#808080","#B3B3B3","#FFF","#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626","#ef4444","#f87171","#fca5a5","#431407","#7c2d12","#9a3412","#c2410c","#ea580c","#f97316","#fb923c","#ffedd5","#713f12","#a16207","#ca8a04","#eab308","#facc15","#fde047","#fef08a","#fff9c4","#064e3b","#065f46","#059669","#10b981","#34d399","#4ade80","#84cc16","#d9f99d","#082f49","#075985","#0284c7","#0ea5e9","#38bdf8","#7dd3fc","#22d3ee","#cffafe","#1e1b4b","#312e81","#4338ca","#4f46e5","#6366f1","#818cf8","#a5b4fc","#e0e7ff","#2e1065","#4c1d95","#6d28d9","#7c3aed","#8b5cf6","#a855f7","#d946ef","#fae8ff"],W=()=>B(_)||"#000000";return Tag("div",{class:Z("relative w-fit",M)},[Tag("button",{type:"button",class:"btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case",onclick:(J)=>{J.stopPropagation(),A(!A())},...L},[Tag("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${W()}`}),E?Tag("span",{class:"opacity-80"},E):null]),If(A,()=>Tag("div",{class:"absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none",onclick:(J)=>J.stopPropagation()},[Tag("div",{class:"grid grid-cols-8 gap-1"},P.map((J)=>Tag("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 + ${W().toLowerCase()===J.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof _==="function")_(J);A(!1)}})))])),If(A,()=>Tag("div",{class:"fixed inset-0 z-[100]",onclick:()=>A(!1)}))])};var zf={};R(zf,{Datepicker:()=>J_});var J_=(f)=>{let{class:M,value:_,range:E,label:L,placeholder:A,hour:P=!1,...W}=f,J=$(!1),Q=$(new Date),X=$(null),T=$(0),Y=$(0),K=()=>B(E)===!0,G=new Date,q=`${G.getFullYear()}-${String(G.getMonth()+1).padStart(2,"0")}-${String(G.getDate()).padStart(2,"0")}`,D=(S)=>{let C=S.getFullYear(),N=String(S.getMonth()+1).padStart(2,"0"),h=String(S.getDate()).padStart(2,"0");return`${C}-${N}-${h}`},w=(S)=>{let C=D(S),N=B(_);if(K())if(!N?.start||N.start&&N.end){if(typeof _==="function")_({start:C,end:null,...P&&{startHour:T()}})}else{let h=N.start;if(typeof _==="function"){let v=C{let S=B(_);if(!S)return"";if(typeof S==="string"){if(P&&S.includes("T"))return S.replace("T"," ");return S}if(S.start&&S.end){let C=P&&S.startHour?`${S.start} ${String(S.startHour).padStart(2,"0")}:00`:S.start,N=P&&S.endHour?`${S.end} ${String(S.endHour).padStart(2,"0")}:00`:S.end;return`${C} - ${N}`}if(S.start)return`${P&&S.startHour?`${S.start} ${String(S.startHour).padStart(2,"0")}:00`:S.start}...`;return""}),d=(S)=>{let C=Q();Q(new Date(C.getFullYear(),C.getMonth()+S,1))},n=(S)=>{let C=Q();Q(new Date(C.getFullYear()+S,C.getMonth(),1))},F=({value:S,onChange:C})=>{return Tag("div",{class:"flex-1"},[Tag("div",{class:"flex gap-2 items-center"},[Tag("input",{type:"range",min:0,max:23,value:S,class:"range range-xs flex-1",oninput:(N)=>{let h=parseInt(N.target.value);C(h)}}),Tag("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(B(S)).padStart(2,"0")+":00")])])};return Tag("div",{class:Z("relative w-full",M)},[l({label:L,placeholder:A||(K()?"Seleccionar rango...":"Seleccionar fecha..."),value:u,readonly:!0,icon:z("icon-[lucide--calendar]"),onclick:(S)=>{S.stopPropagation(),J(!J())},...W}),If(J,()=>Tag("div",{class:"absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none",onclick:(S)=>S.stopPropagation()},[Tag("div",{class:"flex justify-between items-center mb-4 gap-1"},[Tag("div",{class:"flex gap-0.5"},[Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>n(-1)},z("icon-[lucide--chevrons-left]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>d(-1)},z("icon-[lucide--chevron-left]"))]),Tag("span",{class:"font-bold uppercase flex-1 text-center"},[()=>Q().toLocaleString("es-ES",{month:"short",year:"numeric"})]),Tag("div",{class:"flex gap-0.5"},[Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>d(1)},z("icon-[lucide--chevron-right]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>n(1)},z("icon-[lucide--chevrons-right]"))])]),Tag("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>X(null)},[...["L","M","X","J","V","S","D"].map((S)=>Tag("div",{class:"text-[10px] opacity-40 font-bold text-center"},S)),()=>{let S=Q(),C=S.getFullYear(),N=S.getMonth(),h=new Date(C,N,1).getDay(),v=h===0?6:h-1,$f=new Date(C,N+1,0).getDate(),Lf=[];for(let g=0;g{let m=B(_),Af=X(),y_=typeof m==="string"?m.split("T")[0]===H:m?.start===H,x_=m?.end===H,Wf=!1;if(K()&&m?.start){let Pf=m.start;if(!m.end&&Af)Wf=H>Pf&&H<=Af||H=Af;else if(m.end)Wf=H>Pf&&H{if(K())X(H)},onclick:()=>w(of)},[g.toString()]))}return Lf}]),P?Tag("div",{class:"mt-3 pt-2 border-t border-base-300"},[K()?Tag("div",{class:"flex gap-4"},[F({value:T,onChange:(S)=>{T(S);let C=B(_);if(C?.start)_({...C,startHour:S})}}),F({value:Y,onChange:(S)=>{Y(S);let C=B(_);if(C?.end)_({...C,endHour:S})}})]):F({value:T,onChange:(S)=>{T(S);let C=B(_);if(C&&typeof C==="string"&&C.includes("-"))_(C.split("T")[0]+"T"+String(S).padStart(2,"0")+":00:00")}})]):null])),If(J,()=>Tag("div",{class:"fixed inset-0 z-[90]",onclick:()=>J(!1)}))])};var Df={};R(Df,{Drawer:()=>Q_});var Q_=(f,M)=>{let{class:_,id:E,open:L,side:A,content:P,...W}=f,J=E||`drawer-${Math.random().toString(36).slice(2,9)}`;return Tag("div",{...W,class:Z("drawer",_)},[Tag("input",{id:J,type:"checkbox",class:"drawer-toggle",checked:()=>typeof L==="function"?L():L,onchange:(Q)=>{if(typeof L==="function")L(Q.target.checked)}}),Tag("div",{class:"drawer-content"},[typeof P==="function"?P():P]),Tag("div",{class:"drawer-side"},[Tag("label",{for:J,class:"drawer-overlay",onclick:()=>{if(typeof L==="function")L(!1)}}),Tag("div",{class:"min-h-full bg-base-200 w-80"},[typeof A==="function"?A():A])])])};var Nf={};R(Nf,{Dropdown:()=>T_});var I=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(f)=>{if(I&&!I.contains(f.target))I.open=!1,I=null}),window.__dropdownHandlerRegistered=!0;var T_=(f)=>{let{class:M,label:_,icon:E,items:L,...A}=f;return Tag("details",{...A,class:Z("dropdown",M)},[Tag("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(P)=>{let W=P.currentTarget.closest("details");if(I&&I!==W)I.open=!1;setTimeout(()=>{I=W.open?W:null},0)}},[()=>E?typeof E==="function"?E():E:null,()=>_?typeof _==="function"?_():_:null]),Tag("ul",{tabindex:"-1",class:"dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300"},[()=>{return(typeof L==="function"?L():L||[]).map((W)=>Tag("li",{},[Tag("a",{class:W.class||"",onclick:(J)=>{if(W.onclick)W.onclick(J);let Q=J.currentTarget.closest("details");if(Q){if(Q.open=!1,I===Q)I=null}}},[W.icon?Tag("span",{},W.icon):null,Tag("span",{},W.label)])]))}])])};var hf={};R(hf,{Fab:()=>B_});var B_=(f)=>{let{class:M,icon:_,label:E,actions:L=[],position:A="bottom-6 right-6",...P}=f;return Tag("div",{...P,class:Z(`fab absolute ${A} flex flex-col-reverse items-end gap-3 z-[100]`,M)},[Tag("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[_?z(_):null,!_&&E?E:null]),...B(L).map((W)=>Tag("div",{class:"flex items-center gap-3 transition-all duration-300"},[W.label?Tag("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},W.label):null,Tag("button",{type:"button",class:`btn btn-circle shadow-lg ${W.class||""}`,onclick:(J)=>{J.stopPropagation(),W.onclick?.(J)}},[W.icon?z(W.icon):W.text||""])]))])};var Of={};R(Of,{Fieldset:()=>G_});var G_=(f,M)=>{let{class:_,legend:E,...L}=f;return Tag("fieldset",{...L,class:Z("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",_)},[()=>{let A=B(E);return A?Tag("legend",{class:"fieldset-legend font-bold"},[A]):null},M])};var Vf={};R(Vf,{Fileinput:()=>X_});var X_=(f)=>{let{class:M,tooltip:_,max:E=2,accept:L="*",onselect:A,...P}=f,W=$([]),J=$(!1),Q=$(null),X=E*1024*1024,T=(K)=>{let G=Array.from(K);if(Q(null),G.find((D)=>D.size>X)){Q(`Máx ${E}MB`);return}W([...W(),...G]),A?.(W())},Y=(K)=>{let G=W().filter((q,D)=>D!==K);W(G),A?.(G)};return Tag("fieldset",{...P,class:Z("fieldset w-full p-0",M)},[Tag("div",{class:()=>`w-full ${_?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":_},[Tag("label",{class:()=>` relative flex items-center justify-between w-full h-12 px-4 border-2 border-dashed rounded-lg cursor-pointer transition-all duration-200 - ${Q()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} - `,ondragover:(K)=>{K.preventDefault(),Q(!0)},ondragleave:()=>Q(!1),ondrop:(K)=>{K.preventDefault(),Q(!1),P(K.dataTransfer.files)}},[Tag("div",{class:"flex items-center gap-3 w-full"},[z("icon-[lucide--upload]"),Tag("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),Tag("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${E}MB`)]),Tag("input",{type:"file",multiple:!0,accept:W,class:"hidden",onchange:(K)=>P(K.target.files)})])]),()=>G()?Tag("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},G()):null,If(()=>A().length>0,()=>Tag("ul",{class:"mt-2 space-y-1"},[For(A,(K,X)=>Tag("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[Tag("div",{class:"flex items-center gap-2 truncate"},[Tag("span",{class:"opacity-50"},"\uD83D\uDCC4"),Tag("span",{class:"truncate font-medium max-w-[200px]"},K.name),Tag("span",{class:"text-[9px] opacity-40"},`(${(K.size/1024).toFixed(0)} KB)`)]),Tag("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(q)=>{q.preventDefault(),q.stopPropagation(),S(X)}},[z("icon-[lucide--x]")])]),(K)=>K.name+K.lastModified)]))])};var Nf={};R(Nf,{Indicator:()=>G_});var G_=(f,M)=>{let{value:_,class:E,...W}=f;return Tag("div",{...W,class:"indicator"},()=>[_?Tag("span",{class:Z("indicator-item badge",E)},()=>typeof _==="function"?_():_):null,M].filter(Boolean))};var Vf={};R(Vf,{Label:()=>P_});var P_=(f)=>{let{children:M,value:_,floating:E=!1,class:W,...J}=f;if(E)return Tag("label",{class:Z("floating-label",W),...J},()=>[typeof M==="function"?M():M,_?Tag("span",{},B(_)):null]);return Tag("label",{class:Z("label",W),...J},()=>[_?Tag("span",{class:"label-text"},B(_)):null,typeof M==="function"?M():M])};var Of={};R(Of,{List:()=>T_});var T_=(f)=>{let{class:M,items:_,header:E,render:W=(Q)=>Q,keyFn:J=(Q,G)=>Q.id??G,...L}=f,A=For(_,(Q,G)=>Tag("li",{class:"list-row",style:"width: 100%; display: block;"},[Tag("div",{style:"width: 100%;"},[W(Q,G)])]),J);return Tag("ul",{...L,style:"display: block; width: 100%;",class:Z("list bg-base-100 rounded-box shadow-md",M)},E?[If(E,()=>Tag("li",{class:"p-4 pb-2 text-xs opacity-60",style:"width: 100%;"},[B(E)])),A]:A)};var Ff={};R(Ff,{Menu:()=>B_});var B_=(f)=>{let{class:M,items:_,...E}=f,W=(J)=>For(()=>J||[],(L)=>Tag("li",{},[L.children?Tag("details",{open:L.open},[Tag("summary",{},[L.icon&&Tag("span",{class:"mr-2"},L.icon),L.label]),Tag("ul",{},W(L.children))]):Tag("a",{class:()=>B(L.active)?"active":"",onclick:L.onclick},[L.icon&&Tag("span",{class:"mr-2"},L.icon),L.label])]),(L,A)=>L.label||A);return Tag("ul",{...E,class:Z("menu bg-base-200 rounded-box",M)},W(_))};var Uf={};R(Uf,{Modal:()=>X_});var X_=(f,M)=>{let{class:_,title:E,buttons:W,open:J,...L}=f,A=null,Q=()=>{let T=typeof J==="function"?J():J;if(!A)return;if(T){if(!A.open)A.showModal()}else if(A.open)A.close()};Watch(()=>Q());let G=()=>{if(typeof J==="function")J(!1)};return Tag("dialog",{...L,ref:(T)=>{if(A=T,T)Q()},class:Z("modal",_),onclose:G,oncancel:G},[Tag("div",{class:"modal-box"},[E?Tag("h3",{class:"text-lg font-bold mb-4"},()=>typeof E==="function"?E():E):null,Tag("div",{class:"py-2"},[typeof M==="function"?M():M]),Tag("div",{class:"modal-action"},[Tag("form",{method:"dialog",class:"flex gap-2"},[...(Array.isArray(W)?W:[W]).filter(Boolean),l({type:"submit"},x("close")())])])]),Tag("form",{method:"dialog",class:"modal-backdrop"},[Tag("button",{},"close")])])};var hf={};R(hf,{Navbar:()=>Z_});var Z_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:Z("navbar bg-base-100 shadow-sm px-4",_)},M)};var kf={};R(kf,{Radio:()=>K_});var K_=(f)=>{let{class:M,label:_,tooltip:E,value:W,inputValue:J,name:L,...A}=f,Q=Tag("input",{...A,type:"radio",name:L,class:Z("radio",M),checked:()=>B(W)===J,onclick:()=>{if(typeof W==="function")W(J)}});if(!_&&!E)return Q;let G=Tag("label",{class:"label cursor-pointer justify-start gap-3"},[Q,_?Tag("span",{class:"label-text"},_):null]);return E?Tag("div",{class:"tooltip","data-tip":E},G):G};var Hf={};R(Hf,{Range:()=>Y_});var Y_=(f)=>{let{class:M,label:_,tooltip:E,value:W,...J}=f,L=Tag("input",{...J,type:"range",class:Z("range",M),value:W,disabled:()=>B(f.disabled)});if(!_&&!E)return L;let A=Tag("div",{class:"flex flex-col gap-2"},[_?Tag("span",{class:"label-text"},_):null,L]);return E?Tag("div",{class:"tooltip","data-tip":E},A):A};var jf={};R(jf,{Rating:()=>S_});var S_=(f)=>{let{class:M,value:_,count:E=5,mask:W="mask-star",readonly:J=!1,onchange:L,...A}=f,Q=`rating-${Math.random().toString(36).slice(2,7)}`;return Tag("div",{...A,class:()=>Z(`rating ${B(J)?"pointer-events-none":""}`,M)},Array.from({length:B(E)},(G,T)=>{let P=T+1;return Tag("input",{type:"radio",name:Q,class:`mask ${W}`,checked:()=>Math.round(B(_))===P,onchange:()=>{if(!B(J)){if(typeof L==="function")L(P);else if(typeof _==="function")_(P)}}})}))};var wf={};R(wf,{Select:()=>q_});var q_=(f)=>{let{class:M,label:_,items:E,value:W,...J}=f,L=Tag("select",{...J,class:Z("select select-bordered w-full",M),value:W},For(()=>B(E)||[],(A)=>Tag("option",{value:A.value,$selected:()=>String(B(W))===String(A.value)},A.label),(A)=>A.value));if(!_)return L;return Tag("label",{class:"fieldset-label flex flex-col gap-1"},[Tag("span",{},_),L])};var xf={};R(xf,{Stack:()=>C_});var C_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:Z("stack",_)},M)};var yf={};R(yf,{Stat:()=>R_});var R_=(f)=>{let{class:M,icon:_,label:E,value:W,desc:J,...L}=f;return Tag("div",{...L,class:Z("stat",M)},[_&&Tag("div",{class:"stat-figure text-secondary"},_),E&&Tag("div",{class:"stat-title"},E),Tag("div",{class:"stat-value"},()=>B(W)??W),J&&Tag("div",{class:"stat-desc"},J)])};var uf={};R(uf,{Swap:()=>z_});var z_=(f)=>{let{class:M,value:_,on:E,off:W,...J}=f;return Tag("label",{...J,class:Z("swap",M)},[Tag("input",{type:"checkbox",checked:()=>B(_),onclick:(L)=>{if(typeof _==="function")_(L.target.checked)}}),Tag("div",{class:"swap-on"},E),Tag("div",{class:"swap-off"},W)])};var mf={};R(mf,{Table:()=>D_});var D_=(f)=>{let{class:M,items:_=[],columns:E=[],keyFn:W,zebra:J=!1,pinRows:L=!1,empty:A=x("nodata")(),...Q}=f,G=()=>{let P=B(J)?"table-zebra":"",S=B(L)?"table-pin-rows":"";return Z("table",M,P,S)},T=W||((P,S)=>P.id||S);return Tag("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[Tag("table",{...Q,class:G},[Tag("thead",{},[Tag("tr",{},E.map((P)=>Tag("th",{class:P.class||""},P.label)))]),Tag("tbody",{},[For(_,(P,S)=>{let K=()=>{let X=B(_),q=T(P,S);return X.find((D,j)=>T(D,j)===q)||P};return Tag("tr",{class:"hover"},E.map((X)=>{let q=()=>{let D=K();if(X.render)return X.render(D,S);return B(D[X.key])};return Tag("td",{class:X.class||""},[q])}))},T),If(()=>B(_).length===0,()=>Tag("tr",{},[Tag("td",{colspan:E.length,class:"text-center p-10 opacity-50"},[B(A)])]))])])])};var vf={};R(vf,{Tabs:()=>N_});var N_=(f)=>{let{items:M,class:_,onTabClose:E,...W}=f,J=typeof M==="function"?M:()=>M||[],L=o(0);c(()=>{let G=J().findIndex((T)=>B(T.active)===!0);if(G!==-1&&L()!==G)L(G)});let A=(Q,G)=>{if(G.onClose)G.onClose(G);if(E)E(G,Q);let P=J().filter((X,q)=>q!==Q);if(!(typeof M==="function"&&!M._isComputed)){console.warn("Tabs: items must be a writable signal to support closable tabs");return}if(M(P),P.length===0)return;let K=L();if(Q{let Q=J(),G=[];for(let T=0;T{C.stopPropagation(),A(T,P)};let Y=k("span",{class:"flex items-center"},[K,U]);X.push(Y)}else X.push(K);let q=k("button",{class:()=>Z("tab",L()===T?"tab-active":""),onclick:(U)=>{if(U.preventDefault(),!B(P.disabled)){if(P.onclick)P.onclick();L(T)}}},X),D=P.tip?k("div",{class:"tooltip","data-tip":P.tip},q):q;G.push(D);let j,I=B(P.content);if(typeof I==="function")j=I();else if(I instanceof Node)j=I;else j=document.createTextNode(String(I));let p=k("div",{class:"tab-content-inner"},j),d=k("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>L()===T?"display: block":"display: none"},p);G.push(d)}return G})};var gf={};R(gf,{Timeline:()=>V_});var V_=(f)=>{let{class:M,items:_=[],vertical:E=!0,compact:W=!1,...J}=f,L={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return Tag("ul",{...J,class:()=>Z(`timeline ${B(E)?"timeline-vertical":"timeline-horizontal"} ${B(W)?"timeline-compact":""}`,M)},()=>{let A=(typeof _==="function"?_():_)||[];return A.map((Q,G)=>{let T=G===0,P=G===A.length-1,S=Q.type||"success",K=()=>B(Q.completed),X=()=>G>0&&B(A[G-1].completed),q=(D)=>typeof D==="function"?D():D;return Tag("li",{class:"flex-1"},[!T?Tag("hr",{class:()=>X()?"bg-primary":""}):null,Tag("div",{class:"timeline-start"},[()=>q(Q.title)]),Tag("div",{class:"timeline-middle"},[()=>Q.icon?z(Q.icon):z(L[S]||L.success)]),Tag("div",{class:"timeline-end timeline-box shadow-sm"},[()=>q(Q.detail)]),!P?Tag("hr",{class:()=>K()?"bg-primary":""}):null])})})};var cf={};R(cf,{Toast:()=>O_});var O_=(f,M="alert-success",_=3500)=>{let E=document.getElementById("sigpro-toast-container");if(!E)E=Tag("div",{id:"sigpro-toast-container",class:"fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none"}),document.body.appendChild(E);let W=Tag("div",{style:"display: contents"});E.appendChild(W);let J,L=()=>{clearTimeout(J);let G=W.firstElementChild;if(G&&!G.classList.contains("opacity-0"))G.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(Q.destroy(),W.remove(),!E.hasChildNodes())E.remove()},300);else Q.destroy(),W.remove()},A=()=>{let G=z("icon-[lucide--x]"),T=Tag("div",{class:`alert alert-soft ${M} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[Tag("span",{},[typeof f==="function"?f():f]),l({class:"btn-xs btn-circle btn-ghost",onclick:L},G)]);return requestAnimationFrame(()=>T.classList.remove("translate-x-10","opacity-0")),T},Q=Mount(A,W);if(_>0)J=setTimeout(L,_);return L};var bf={};R(bf,{Tooltip:()=>F_});var F_=(f,M)=>Tag("div",{...f,class:()=>Z("tooltip w-full",f.class),"data-tip":f.tip},M);var U_={...Gf,...Pf,...Bf,...Xf,...Zf,...Kf,...Yf,...Sf,...qf,...Cf,...Rf,...zf,...Df,...Nf,...Tf,...Vf,...Of,...Ff,...Uf,...hf,...kf,...Hf,...jf,...wf,...xf,...yf,...uf,...mf,...vf,...gf,...cf,...bf},g_={...U_,install:(f=window)=>{Object.entries(U_).forEach(([M,_])=>{f[M]=_}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(_f).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.entries(ff).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.defineProperty(window,"tt",{value:x,writable:!1,configurable:!0,enumerable:!0}),Object.defineProperty(window,"SigProUI",{value:{..._f,Utils:ff,tt:x},writable:!1,configurable:!0,enumerable:!0}),console.log("\uD83C\uDFA8 SigProUI ready");export{B as val,Z as ui,x as tt,z as getIcon,c as Watch,F_ as Tooltip,O_ as Toast,V_ as Timeline,k as Tag,N_ as Tabs,D_ as Table,z_ as Swap,R_ as Stat,C_ as Stack,q_ as Select,b as Router,S_ as Rating,Y_ as Range,K_ as Radio,Z_ as Navbar,tf as Mount,X_ as Modal,B_ as Menu,T_ as List,P_ as Label,i as Input,G_ as Indicator,lf as If,sf as For,Q_ as Fileinput,J_ as Fieldset,W_ as Fab,A_ as Dropdown,L_ as Drawer,$_ as Datepicker,E_ as Colorpicker,M_ as Checkbox,l as Button,__ as Badge,f_ as Autocomplete,ef as Alert,af as Accordion,o as $}; + ${J()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} + `,ondragover:(K)=>{K.preventDefault(),J(!0)},ondragleave:()=>J(!1),ondrop:(K)=>{K.preventDefault(),J(!1),T(K.dataTransfer.files)}},[Tag("div",{class:"flex items-center gap-3 w-full"},[z("icon-[lucide--upload]"),Tag("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),Tag("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${E}MB`)]),Tag("input",{type:"file",multiple:!0,accept:L,class:"hidden",onchange:(K)=>T(K.target.files)})])]),()=>Q()?Tag("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},Q()):null,If(()=>W().length>0,()=>Tag("ul",{class:"mt-2 space-y-1"},[For(W,(K,G)=>Tag("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[Tag("div",{class:"flex items-center gap-2 truncate"},[Tag("span",{class:"opacity-50"},"\uD83D\uDCC4"),Tag("span",{class:"truncate font-medium max-w-[200px]"},K.name),Tag("span",{class:"text-[9px] opacity-40"},`(${(K.size/1024).toFixed(0)} KB)`)]),Tag("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(q)=>{q.preventDefault(),q.stopPropagation(),Y(G)}},[z("icon-[lucide--x]")])]),(K)=>K.name+K.lastModified)]))])};var Ff={};R(Ff,{Indicator:()=>Z_});var Z_=(f,M)=>{let{value:_,class:E,...L}=f;return Tag("div",{...L,class:"indicator"},()=>[_?Tag("span",{class:Z("indicator-item badge",E)},()=>typeof _==="function"?_():_):null,M].filter(Boolean))};var Uf={};R(Uf,{Label:()=>K_});var K_=(f)=>{let{children:M,value:_,floating:E=!1,class:L,...A}=f;if(E)return Tag("label",{class:Z("floating-label",L),...A},()=>[typeof M==="function"?M():M,_?Tag("span",{},B(_)):null]);return Tag("label",{class:Z("label",L),...A},()=>[_?Tag("span",{class:"label-text"},B(_)):null,typeof M==="function"?M():M])};var Hf={};R(Hf,{List:()=>S_});var S_=(f)=>{let{class:M,items:_,header:E,render:L=(J)=>J,keyFn:A=(J,Q)=>J.id??Q,...P}=f,W=For(_,(J,Q)=>Tag("li",{class:"list-row",style:"width: 100%; display: block;"},[Tag("div",{style:"width: 100%;"},[L(J,Q)])]),A);return Tag("ul",{...P,style:"display: block; width: 100%;",class:Z("list bg-base-100 rounded-box shadow-md",M)},E?[If(E,()=>Tag("li",{class:"p-4 pb-2 text-xs opacity-60",style:"width: 100%;"},[B(E)])),W]:W)};var kf={};R(kf,{Menu:()=>Y_});var Y_=(f)=>{let{class:M,items:_,...E}=f,L=(A)=>For(()=>A||[],(P)=>Tag("li",{},[P.children?Tag("details",{open:P.open},[Tag("summary",{},[P.icon&&Tag("span",{class:"mr-2"},P.icon),P.label]),Tag("ul",{},L(P.children))]):Tag("a",{class:()=>B(P.active)?"active":"",onclick:P.onclick},[P.icon&&Tag("span",{class:"mr-2"},P.icon),P.label])]),(P,W)=>P.label||W);return Tag("ul",{...E,class:Z("menu bg-base-200 rounded-box",M)},L(_))};var jf={};R(jf,{Modal:()=>q_});var q_=(f,M)=>{let{class:_,title:E,buttons:L,open:A,...P}=f,W=null,J=()=>{let X=typeof A==="function"?A():A;if(!W)return;if(X){if(!W.open)W.showModal()}else if(W.open)W.close()};Watch(()=>J());let Q=()=>{if(typeof A==="function")A(!1)};return Tag("dialog",{...P,ref:(X)=>{if(W=X,X)J()},class:Z("modal",_),onclose:Q,oncancel:Q},[Tag("div",{class:"modal-box"},[E?Tag("h3",{class:"text-lg font-bold mb-4"},()=>typeof E==="function"?E():E):null,Tag("div",{class:"py-2"},[typeof M==="function"?M():M]),Tag("div",{class:"modal-action"},[Tag("form",{method:"dialog",class:"flex gap-2"},[...(Array.isArray(L)?L:[L]).filter(Boolean),s({type:"submit"},x("close")())])])]),Tag("form",{method:"dialog",class:"modal-backdrop"},[Tag("button",{},"close")])])};var wf={};R(wf,{Navbar:()=>C_});var C_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:Z("navbar bg-base-100 shadow-sm px-4",_)},M)};var yf={};R(yf,{Radio:()=>R_});var R_=(f)=>{let{class:M,label:_,tooltip:E,value:L,inputValue:A,name:P,...W}=f,J=Tag("input",{...W,type:"radio",name:P,class:Z("radio",M),checked:()=>B(L)===A,onclick:()=>{if(typeof L==="function")L(A)}});if(!_&&!E)return J;let Q=Tag("label",{class:"label cursor-pointer justify-start gap-3"},[J,_?Tag("span",{class:"label-text"},_):null]);return E?Tag("div",{class:"tooltip","data-tip":E},Q):Q};var xf={};R(xf,{Range:()=>z_});var z_=(f)=>{let{class:M,label:_,tooltip:E,value:L,...A}=f,P=Tag("input",{...A,type:"range",class:Z("range",M),value:L,disabled:()=>B(f.disabled)});if(!_&&!E)return P;let W=Tag("div",{class:"flex flex-col gap-2"},[_?Tag("span",{class:"label-text"},_):null,P]);return E?Tag("div",{class:"tooltip","data-tip":E},W):W};var uf={};R(uf,{Rating:()=>D_});var D_=(f)=>{let{class:M,value:_,count:E=5,mask:L="mask-star",readonly:A=!1,onchange:P,...W}=f,J=`rating-${Math.random().toString(36).slice(2,7)}`;return Tag("div",{...W,class:()=>Z(`rating ${B(A)?"pointer-events-none":""}`,M)},Array.from({length:B(E)},(Q,X)=>{let T=X+1;return Tag("input",{type:"radio",name:J,class:`mask ${L}`,checked:()=>Math.round(B(_))===T,onchange:()=>{if(!B(A)){if(typeof P==="function")P(T);else if(typeof _==="function")_(T)}}})}))};var mf={};R(mf,{Select:()=>N_});var N_=(f)=>{let{class:M,label:_,items:E,value:L,...A}=f,P=Tag("select",{...A,class:Z("select select-bordered w-full",M),value:L},For(()=>B(E)||[],(W)=>Tag("option",{value:W.value,$selected:()=>String(B(L))===String(W.value)},W.label),(W)=>W.value));if(!_)return P;return Tag("label",{class:"fieldset-label flex flex-col gap-1"},[Tag("span",{},_),P])};var vf={};R(vf,{Stack:()=>h_});var h_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:Z("stack",_)},M)};var gf={};R(gf,{Stat:()=>O_});var O_=(f)=>{let{class:M,icon:_,label:E,value:L,desc:A,...P}=f;return Tag("div",{...P,class:Z("stat",M)},[_&&Tag("div",{class:"stat-figure text-secondary"},_),E&&Tag("div",{class:"stat-title"},E),Tag("div",{class:"stat-value"},()=>B(L)??L),A&&Tag("div",{class:"stat-desc"},A)])};var cf={};R(cf,{Swap:()=>V_});var V_=(f)=>{let{class:M,value:_,on:E,off:L,...A}=f;return Tag("label",{...A,class:Z("swap",M)},[Tag("input",{type:"checkbox",checked:()=>B(_),onclick:(P)=>{if(typeof _==="function")_(P.target.checked)}}),Tag("div",{class:"swap-on"},E),Tag("div",{class:"swap-off"},L)])};var pf={};R(pf,{Table:()=>F_});var F_=(f)=>{let{class:M,items:_=[],columns:E=[],keyFn:L,zebra:A=!1,pinRows:P=!1,empty:W=x("nodata")(),...J}=f,Q=()=>{let T=B(A)?"table-zebra":"",Y=B(P)?"table-pin-rows":"";return Z("table",M,T,Y)},X=L||((T,Y)=>T.id||Y);return Tag("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[Tag("table",{...J,class:Q},[Tag("thead",{},[Tag("tr",{},E.map((T)=>Tag("th",{class:T.class||""},T.label)))]),Tag("tbody",{},[For(_,(T,Y)=>{let K=()=>{let G=B(_),q=X(T,Y);return G.find((D,w)=>X(D,w)===q)||T};return Tag("tr",{class:"hover"},E.map((G)=>{let q=()=>{let D=K();if(G.render)return G.render(D,Y);return B(D[G.key])};return Tag("td",{class:G.class||""},[q])}))},X),If(()=>B(_).length===0,()=>Tag("tr",{},[Tag("td",{colspan:E.length,class:"text-center p-10 opacity-50"},[B(W)])]))])])])};var bf={};R(bf,{Tabs:()=>U_});var U_=(f)=>{let{items:M,class:_,onTabClose:E,...L}=f,A=typeof M==="function"?M:()=>M||[],P=i(0);b(()=>{let Q=A().findIndex((X)=>B(X.active)===!0);if(Q!==-1&&P()!==Q)P(Q)});let W=(J,Q)=>{if(Q.onClose)Q.onClose(Q);if(E)E(Q,J);let T=A().filter((G,q)=>q!==J);if(!(typeof M==="function"&&!M._isComputed)){console.warn("Tabs: items must be a writable signal to support closable tabs");return}if(M(T),T.length===0)return;let K=P();if(J{let J=A(),Q=[];for(let X=0;X{C.stopPropagation(),W(X,T)};let S=U("span",{class:"flex items-center"},[K,F]);G.push(S)}else G.push(K);let q=U("button",{class:()=>Z("tab",P()===X?"tab-active":""),onclick:(F)=>{if(F.preventDefault(),!B(T.disabled)){if(T.onclick)T.onclick();P(X)}}},G),D=T.tip?U("div",{class:"tooltip","data-tip":T.tip},q):q;Q.push(D);let w,u=B(T.content);if(typeof u==="function")w=u();else if(u instanceof Node)w=u;else w=document.createTextNode(String(u));let d=U("div",{class:"tab-content-inner"},w),n=U("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>P()===X?"display: block":"display: none"},d);Q.push(n)}return Q})};var rf={};R(rf,{Timeline:()=>H_});var H_=(f)=>{let{class:M,items:_=[],vertical:E=!0,compact:L=!1,...A}=f,P={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return Tag("ul",{...A,class:()=>Z(`timeline ${B(E)?"timeline-vertical":"timeline-horizontal"} ${B(L)?"timeline-compact":""}`,M)},()=>{let W=(typeof _==="function"?_():_)||[];return W.map((J,Q)=>{let X=Q===0,T=Q===W.length-1,Y=J.type||"success",K=()=>B(J.completed),G=()=>Q>0&&B(W[Q-1].completed),q=(D)=>typeof D==="function"?D():D;return Tag("li",{class:"flex-1"},[!X?Tag("hr",{class:()=>G()?"bg-primary":""}):null,Tag("div",{class:"timeline-start"},[()=>q(J.title)]),Tag("div",{class:"timeline-middle"},[()=>J.icon?z(J.icon):z(P[Y]||P.success)]),Tag("div",{class:"timeline-end timeline-box shadow-sm"},[()=>q(J.detail)]),!T?Tag("hr",{class:()=>K()?"bg-primary":""}):null])})})};var df={};R(df,{Toast:()=>k_});var k_=(f,M="alert-success",_=3500)=>{let E=document.getElementById("sigpro-toast-container");if(!E)E=Tag("div",{id:"sigpro-toast-container",class:"fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none"}),document.body.appendChild(E);let L=Tag("div",{style:"display: contents"});E.appendChild(L);let A,P=()=>{clearTimeout(A);let Q=L.firstElementChild;if(Q&&!Q.classList.contains("opacity-0"))Q.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(J.destroy(),L.remove(),!E.hasChildNodes())E.remove()},300);else J.destroy(),L.remove()},W=()=>{let Q=z("icon-[lucide--x]"),X=Tag("div",{class:`alert alert-soft ${M} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[Tag("span",{},[typeof f==="function"?f():f]),s({class:"btn-xs btn-circle btn-ghost",onclick:P},Q)]);return requestAnimationFrame(()=>X.classList.remove("translate-x-10","opacity-0")),X},J=Mount(W,L);if(_>0)A=setTimeout(P,_);return P};var nf={};R(nf,{Tooltip:()=>j_});var j_=(f,M)=>Tag("div",{...f,class:()=>Z("tooltip w-full",f.class),"data-tip":f.tip},M);var w_={...Xf,...Zf,...Sf,...Yf,...qf,...Cf,...Rf,...zf,...Df,...Nf,...hf,...Of,...Vf,...Ff,...Kf,...Uf,...Hf,...kf,...jf,...wf,...yf,...xf,...uf,...mf,...vf,...gf,...cf,...pf,...bf,...rf,...df,...nf},r_={...w_,install:(f=window)=>{Object.entries(w_).forEach(([M,_])=>{f[M]=_}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(Ef).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.entries(Mf).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.defineProperty(window,"tt",{value:x,writable:!1,configurable:!0,enumerable:!0}),Object.defineProperty(window,"SigProUI",{value:{...Ef,Utils:Mf,tt:x},writable:!1,configurable:!0,enumerable:!0}),console.log("\uD83C\uDFA8 SigProUI ready");export{B as val,Z as ui,x as tt,z as getIcon,b as Watch,j_ as Tooltip,k_ as Toast,H_ as Timeline,U as Tag,U_ as Tabs,F_ as Table,V_ as Swap,O_ as Stat,h_ as Stack,N_ as Select,r as Router,D_ as Rating,z_ as Range,R_ as Radio,C_ as Navbar,M_ as Mount,q_ as Modal,Y_ as Menu,S_ as List,K_ as Label,l as Input,Z_ as Indicator,f_ as If,__ as For,X_ as Fileinput,G_ as Fieldset,B_ as Fab,T_ as Dropdown,Q_ as Drawer,J_ as Datepicker,P_ as Colorpicker,W_ as Checkbox,s as Button,A_ as Badge,L_ as Autocomplete,$_ as Alert,E_ as Accordion,i as $}; diff --git a/dist/sigpro-ui.js b/dist/sigpro-ui.js index 037428d..d5fc49b 100644 --- a/dist/sigpro-ui.js +++ b/dist/sigpro-ui.js @@ -84,7 +84,10 @@ 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 dispose = (eff) => { if (!eff || eff._disposed) @@ -115,16 +118,6 @@ if (activeOwner) (activeOwner._cleanups ||= new Set).add(fn); }; - var set = (signal, path, value) => { - if (value === undefined) - return signal(isFunc(path) ? path(signal()) : path); - const keys = path.split("."), root = { ...signal() }; - let acc = root, k; - for (k of keys.slice(0, -1)) - acc = acc[k] = { ...acc[k] || {} }; - acc[keys.at(-1)] = value; - signal(root); - }; var untrack = (fn) => { const p = activeEffect; activeEffect = null; @@ -177,6 +170,17 @@ 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); @@ -195,7 +199,7 @@ hasQueue = true; } }); - if (hasQueue && !isFlushing) + if (hasQueue && !isFlushing && batchDepth === 0) queueMicrotask(flush); } }; @@ -259,6 +263,49 @@ return val; }; }; + var $$ = (target) => { + if (!isObj(target)) + return target; + if (proxyCache.has(target)) + return proxyCache.get(target); + const subsMap = new Map; + const getSubs = (k) => { + let s = subsMap.get(k); + if (!s) + subsMap.set(k, s = new Set); + return s; + }; + const proxy = new Proxy(target, { + get(t, k) { + trackUpdate(getSubs(k)); + return $$(t[k]); + }, + set(t, k, v) { + const isNew = !(k in t); + if (!Object.is(t[k], v)) { + t[k] = v; + trackUpdate(getSubs(k), true); + if (isNew) + trackUpdate(getSubs(ITER), true); + } + return true; + }, + deleteProperty(t, k) { + const res = Reflect.deleteProperty(t, k); + if (res) { + trackUpdate(getSubs(k), true); + trackUpdate(getSubs(ITER), true); + } + return res; + }, + ownKeys(t) { + trackUpdate(getSubs(ITER)); + return Reflect.ownKeys(t); + } + }); + proxyCache.set(target, proxy); + return proxy; + }; var Watch2 = (sources, cb) => { if (cb === undefined) { const effect2 = createEffect(sources); @@ -453,42 +500,22 @@ } }; }; - var If2 = (cond, ifYes, ifNot = null, trans = null) => { + var If2 = (cond, ifYes, ifNot = null) => { const anchor = doc.createTextNode(""); const root = Tag2("div", { style: "display:contents" }, [anchor]); let currentView = null; - let last = null; - let exitPromise = null; Watch2(() => !!(isFunc(cond) ? cond() : cond), (show) => { - if (show === last) - return; - last = show; - const disposeView = () => { - if (currentView) { - currentView.destroy(); - currentView = null; - } - }; - if (currentView && !show && trans?.out) { - if (exitPromise && exitPromise.cancel) - exitPromise.cancel(); - const anim = trans.out(currentView.container, disposeView); - exitPromise = anim; - if (anim && anim.finished) - anim.finished.then(disposeView); - else - disposeView(); - } else { - disposeView(); + if (currentView) { + currentView.destroy(); + currentView = null; } const content = show ? ifYes : ifNot; if (content) { currentView = Render(() => isFunc(content) ? content() : content); root.insertBefore(currentView.container, anchor); - if (trans?.in) - trans.in(currentView.container); } }); + onUnmount(() => currentView?.destroy()); return root; }; var For2 = (src, itemFn, keyFn) => { @@ -567,7 +594,7 @@ MOUNTED_NODES.set(t, inst); return inst; }; - var SigPro = Object.freeze({ $: $2, Watch: Watch2, Tag: Tag2, Render, If: If2, For: For2, Router, Mount: Mount2, onMount, onUnmount, set }); + var SigPro = Object.freeze({ $: $2, $$, Watch: Watch2, Tag: Tag2, Render, If: If2, For: For2, Router, Mount: Mount2, onMount, onUnmount, Batch }); if (typeof window !== "undefined") { Object.assign(window, SigPro); "div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer ul ol li a em strong pre code form label input textarea select button img svg".split(" ").forEach((t) => window[t[0].toUpperCase() + t.slice(1)] = (p, c) => SigPro.Tag(t, p, c)); diff --git a/dist/sigpro-ui.min.js b/dist/sigpro-ui.min.js index a6ce436..f03056b 100644 --- a/dist/sigpro-ui.min.js +++ b/dist/sigpro-ui.min.js @@ -1,7 +1,7 @@ -(()=>{var{defineProperty:Wf,getOwnPropertyNames:w_,getOwnPropertyDescriptor:x_}=Object,y_=Object.prototype.hasOwnProperty;var V_=new WeakMap,I_=(f)=>{var M=V_.get(f),_;if(M)return M;if(M=Wf({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function")w_(f).map((E)=>!y_.call(M,E)&&Wf(M,E,{get:()=>f[E],enumerable:!(_=x_(f,E))||_.enumerable}));return V_.set(f,M),M};var R=(f,M)=>{for(var _ in M)Wf(f,_,{get:M[_],enumerable:!0,configurable:!0,set:(E)=>M[_]=()=>E})};var n_={};R(n_,{val:()=>T,ui:()=>Z,tt:()=>j,getIcon:()=>z,Watch:()=>m,Tooltip:()=>z_,Toast:()=>C_,Timeline:()=>S_,Tag:()=>h,Tabs:()=>K_,Table:()=>X_,Swap:()=>T_,Stat:()=>G_,Stack:()=>J_,Select:()=>A_,Router:()=>v,Rating:()=>$_,Range:()=>M_,Radio:()=>f_,Navbar:()=>af,Mount:()=>Bf,Modal:()=>sf,Menu:()=>of,List:()=>rf,Label:()=>pf,Input:()=>d,Indicator:()=>cf,If:()=>Pf,For:()=>Tf,Fileinput:()=>vf,Fieldset:()=>uf,Fab:()=>xf,Dropdown:()=>jf,Drawer:()=>kf,Datepicker:()=>Uf,Colorpicker:()=>Of,Checkbox:()=>Nf,Button:()=>r,Badge:()=>Rf,Autocomplete:()=>qf,Alert:()=>Kf,Accordion:()=>Xf,$:()=>p});var k=(f)=>typeof f==="function",O_=(f)=>f&&typeof f==="object",i=Array.isArray,x=typeof document<"u"?document:null,F_=(f)=>f?._isRuntime?f.container:f instanceof Node?f:x.createTextNode(f==null?"":String(f)),O=null,F=null,e=!1,Qf=new Set,Jf=new WeakMap,b=(f)=>{if(!f||f._disposed)return;f._disposed=!0;let M=[f];while(M.length){let _=M.pop();if(_._cleanups)_._cleanups.forEach((E)=>E()),_._cleanups.clear();if(_._children)_._children.forEach((E)=>M.push(E)),_._children.clear();if(_._deps)_._deps.forEach((E)=>E.delete(_)),_._deps.clear()}},u_=(f)=>{if(F)(F._mounts||=[]).push(f)},l=(f)=>{if(F)(F._cleanups||=new Set).add(f)},m_=(f,M,_)=>{if(_===void 0)return f(k(M)?M(f()):M);let E=M.split("."),W={...f()},J=W,L;for(L of E.slice(0,-1))J=J[L]={...J[L]||{}};J[E.at(-1)]=_,f(W)},v_=(f)=>{let M=O;O=null;try{return f()}finally{O=M}},t=(f,M=!1)=>{let _=()=>{if(_._disposed)return;if(_._deps)_._deps.forEach((J)=>J.delete(_));if(_._cleanups)_._cleanups.forEach((J)=>J()),_._cleanups.clear();let E=O,W=F;O=F=_;try{return _._result=f()}catch(J){console.error("[SigPro]",J)}finally{O=E,F=W}};if(_._deps=_._cleanups=_._children=null,_._disposed=!1,_._isComputed=M,_._depth=O?O._depth+1:0,_._mounts=[],_._parent=F,F)(F._children||=new Set).add(_);return _},g_=()=>{if(e)return;e=!0;let f=Array.from(Qf).sort((M,_)=>M._depth-_._depth);Qf.clear();for(let M of f)if(!M._disposed)M();e=!1},s=(f,M=!1)=>{if(!M&&O&&!O._disposed)f.add(O),(O._deps||=new Set).add(f);else if(M){let _=!1;if(f.forEach((E)=>{if(E===O||E._disposed)return;if(E._isComputed){if(E._dirty=!0,E._subs)s(E._subs,!0)}else Qf.add(E),_=!0}),_&&!e)queueMicrotask(g_)}},p=(f,M=null)=>{let _=new Set;if(k(f)){let E,W=!0,J=()=>{if(W){let L=O;O=J;try{let A=f();if(!Object.is(E,A))E=A,W=!1,s(_,!0)}finally{O=L}}return s(_),E};if(J._isComputed=!0,J._subs=_,J._dirty=!0,J._deps=null,J._disposed=!1,J.markDirty=()=>{W=!0},J.stop=()=>{if(J._disposed=!0,J._deps)J._deps.forEach((L)=>L.delete(J)),J._deps.clear();_.clear()},F)l(J.stop);return J}if(M)try{f=JSON.parse(localStorage.getItem(M))??f}catch(E){}return(...E)=>{if(E.length){let W=k(E[0])?E[0](f):E[0];if(!Object.is(f,W)){if(f=W,M)localStorage.setItem(M,JSON.stringify(f));s(_,!0)}}return s(_),f}},m=(f,M)=>{if(M===void 0){let E=t(f);return E(),()=>b(E)}let _=t(()=>{let E=Array.isArray(f)?f.map((W)=>W()):f();v_(()=>M(E))});return _(),()=>b(_)},Gf=(f)=>{if(f._cleanups)f._cleanups.forEach((M)=>M()),f._cleanups.clear();if(f._ownerEffect)b(f._ownerEffect);if(f.childNodes)f.childNodes.forEach(Gf)},c_=/^\s*(javascript|data|vbscript):/i,b_=(f)=>f==="src"||f==="href"||f.startsWith("on"),U_=(f,M)=>{if(M==null||M===!1)return null;if(b_(f)){let _=String(M);if(c_.test(_))return console.warn(`[SigPro] Bloqueado protocolo peligroso en ${f}`),"#"}return M},h=(f,M={},_=[])=>{if(M instanceof Node||i(M)||!O_(M))_=M,M={};if(k(f)){let L={_mounts:[],_cleanups:new Set},A=t(()=>{let P=f(M,{children:_,emit:(S,...K)=>M[`on${S[0].toUpperCase()}${S.slice(1)}`]?.(...K)});return A._result=P,P});A();let Q=A._result;if(Q==null)return null;let G=Q instanceof Node||i(Q)&&Q.every((P)=>P instanceof Node)?Q:x.createTextNode(String(Q)),B=(P)=>{if(O_(P)&&!P._isRuntime)P._mounts=A._mounts||[],P._cleanups=A._cleanups||new Set,P._ownerEffect=A};return i(G)?G.forEach(B):B(G),G}let E=/^(svg|path|circle|rect|line|polyline|polygon|g|defs|text|tspan|use)$/.test(f),W=E?x.createElementNS("http://www.w3.org/2000/svg",f):x.createElement(f);W._cleanups=new Set;for(let L in M){if(!M.hasOwnProperty(L))continue;let A=M[L];if(L==="ref"){k(A)?A(W):A.current=W;continue}if(L.startsWith("on")){let Q=L.slice(2).toLowerCase();W.addEventListener(Q,A);let G=()=>W.removeEventListener(Q,A);W._cleanups.add(G),l(G)}else if(k(A)){let Q=t(()=>{let G=U_(L,A());if(L==="class")W.className=G||"";else if(G==null)W.removeAttribute(L);else if(L in W&&!E)W[L]=G;else W.setAttribute(L,G===!0?"":G)});if(Q(),W._cleanups.add(()=>b(Q)),l(()=>b(Q)),/^(INPUT|TEXTAREA|SELECT)$/.test(W.tagName)&&(L==="value"||L==="checked")){let G=L==="checked"?"change":"input";W.addEventListener(G,(B)=>A(B.target[L]))}}else{let Q=U_(L,A);if(Q!=null)if(L in W&&!E)W[L]=Q;else W.setAttribute(L,Q===!0?"":Q)}}let J=(L)=>{if(i(L))return L.forEach(J);if(k(L)){let A=x.createTextNode("");W.appendChild(A);let Q=[],G=t(()=>{let B=L(),P=(i(B)?B:[B]).map(F_);Q.forEach((K)=>{if(K._isRuntime)K.destroy();else Gf(K);if(K.parentNode)K.remove()});let S=A;for(let K=P.length-1;K>=0;K--){let X=P[K];if(X.parentNode!==S.parentNode)S.parentNode?.insertBefore(X,S);if(X._mounts)X._mounts.forEach((q)=>q());S=X}Q=P});G(),W._cleanups.add(()=>b(G)),l(()=>b(G))}else{let A=F_(L);if(W.appendChild(A),A._mounts)A._mounts.forEach((Q)=>Q())}};return J(_),W},a=(f)=>{let M=new Set,_=[],E=F,W=O,J=x.createElement("div");J.style.display="contents",J.setAttribute("role","presentation"),F={_cleanups:M,_mounts:_},O=null;let L=(A)=>{if(!A)return;if(A._isRuntime)M.add(A.destroy),J.appendChild(A.container);else if(i(A))A.forEach(L);else J.appendChild(A instanceof Node?A:x.createTextNode(String(A==null?"":A)))};try{L(f({onCleanup:(A)=>M.add(A)}))}finally{F=E,O=W}return _.forEach((A)=>A()),{_isRuntime:!0,container:J,destroy:()=>{M.forEach((A)=>A()),Gf(J),J.remove()}}},Pf=(f,M,_=null,E=null)=>{let W=x.createTextNode(""),J=h("div",{style:"display:contents"},[W]),L=null,A=null,Q=null;return m(()=>!!(k(f)?f():f),(G)=>{if(G===A)return;A=G;let B=()=>{if(L)L.destroy(),L=null};if(L&&!G&&E?.out){if(Q&&Q.cancel)Q.cancel();let S=E.out(L.container,B);if(Q=S,S&&S.finished)S.finished.then(B);else B()}else B();let P=G?M:_;if(P){if(L=a(()=>k(P)?P():P),J.insertBefore(L.container,W),E?.in)E.in(L.container)}}),J},Tf=(f,M,_)=>{let E=x.createTextNode(""),W=h("div",{style:"display:contents"},[E]),J=new Map;return m(()=>(k(f)?f():f)||[],(L)=>{let A=new Map,Q=[],G=L||[];for(let P=0;PM(S,P));else J.delete(K);A.set(K,X),Q.push(X)}J.forEach((P)=>P.destroy());let B=E;for(let P=Q.length-1;P>=0;P--){let K=Q[P].container;if(K.nextSibling!==B)W.insertBefore(K,B);B=K}J=A}),W},v=(f)=>{let M=()=>window.location.hash.slice(1)||"/",_=p(M()),E=()=>_(M());window.addEventListener("hashchange",E),l(()=>window.removeEventListener("hashchange",E));let W=h("div",{class:"router-hook"}),J=null;return m([_],()=>{let L=_(),A=f.find((Q)=>{let G=Q.path.split("/").filter(Boolean),B=L.split("/").filter(Boolean);return G.length===B.length&&G.every((P,S)=>P[0]===":"||P===B[S])})||f.find((Q)=>Q.path==="*");if(A){J?.destroy();let Q={};A.path.split("/").filter(Boolean).forEach((G,B)=>{if(G[0]===":")Q[G.slice(1)]=L.split("/").filter(Boolean)[B]}),v.params(Q),J=a(()=>k(A.component)?A.component(Q):A.component),W.replaceChildren(J.container)}}),W};v.params=p({});v.to=(f)=>window.location.hash=f.replace(/^#?\/?/,"#/");v.back=()=>window.history.back();v.path=()=>window.location.hash.replace(/^#/,"")||"/";var Bf=(f,M)=>{let _=typeof M==="string"?x.querySelector(M):M;if(!_)return;if(Jf.has(_))Jf.get(_).destroy();let E=a(k(f)?f:()=>f);return _.replaceChildren(E.container),Jf.set(_,E),E},h_=Object.freeze({$:p,Watch:m,Tag:h,Render:a,If:Pf,For:Tf,Router:v,Mount:Bf,onMount:u_,onUnmount:l,set:m_});if(typeof window<"u")Object.assign(window,h_),"div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer ul ol li a em strong pre code form label input textarea select button img svg".split(" ").forEach((f)=>window[f[0].toUpperCase()+f.slice(1)]=(M,_)=>h_.Tag(f,M,_));var _f={};R(_f,{default:()=>r_,Tooltip:()=>z_,Toast:()=>C_,Timeline:()=>S_,Tabs:()=>K_,Table:()=>X_,Swap:()=>T_,Stat:()=>G_,Stack:()=>J_,Select:()=>A_,Rating:()=>$_,Range:()=>M_,Radio:()=>f_,Navbar:()=>af,Modal:()=>sf,Menu:()=>of,List:()=>rf,Label:()=>pf,Input:()=>d,Indicator:()=>cf,Fileinput:()=>vf,Fieldset:()=>uf,Fab:()=>xf,Dropdown:()=>jf,Drawer:()=>kf,Datepicker:()=>Uf,Colorpicker:()=>Of,Checkbox:()=>Nf,Button:()=>r,Badge:()=>Rf,Autocomplete:()=>qf,Alert:()=>Kf,Accordion:()=>Xf});var Zf={};R(Zf,{Accordion:()=>Xf});var ff={};R(ff,{val:()=>T,ui:()=>Z,getIcon:()=>z});var T=(f)=>typeof f==="function"?f():f,Z=(f,M)=>typeof M==="function"?()=>`${f} ${M()||""}`.trim():`${f} ${M||""}`.trim(),z=(f)=>{if(!f)return null;if(typeof f==="function")return Tag("span",{class:"mr-1"},f());if(typeof f==="object")return Tag("span",{class:"mr-1"},f);if(typeof f==="string"){let M=f.trim().split(/\s+/),_=M[M.length-1]==="right",E=_?M.slice(0,-1).join(" "):f,W=_?"ml-1":"mr-1";if(E&&!E.startsWith("icon-[")&&!E.includes("--"))return Tag("span",{class:W},E);return Tag("span",{class:`${E} ${W}`.trim()})}return null};var Xf=(f,M)=>{let{class:_,title:E,name:W,open:J,...L}=f;return Tag("div",{...L,class:Z("collapse collapse-arrow bg-base-200 mb-2",_)},[Tag("input",{type:W?"radio":"checkbox",name:W,checked:T(J)}),Tag("div",{class:"collapse-title text-xl font-medium"},E),Tag("div",{class:"collapse-content"},M)])};var Yf={};R(Yf,{Alert:()=>Kf});var Kf=(f,M)=>{let{class:_,actions:E,type:W="info",soft:J=!0,...L}=f,A={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},B=[`alert-${W}`,J?"alert-soft":"",_].filter(Boolean).join(" "),P=M||f.message;return Tag("div",{...L,role:"alert",class:Z("alert",B)},()=>[z(A[W]),Tag("div",{class:"flex-1"},[Tag("span",{},[typeof P==="function"?P():P])]),E?Tag("div",{class:"flex-none"},[typeof E==="function"?E():E]):null].filter(Boolean))};var Cf={};R(Cf,{Autocomplete:()=>qf});var p_={es:{close:"Cerrar",confirm:"Confirmar",cancel:"Cancelar",search:"Buscar...",loading:"Cargando...",nodata:"Sin datos"},en:{close:"Close",confirm:"Confirm",cancel:"Cancel",search:"Search...",loading:"Loading...",nodata:"No data"}},d_=$("es");var j=(f)=>()=>p_[d_()][f]||f;var Sf={};R(Sf,{Input:()=>d});var d=(f)=>{let{class:M,value:_,type:E="text",icon:W,oninput:J,placeholder:L,disabled:A,validate:Q,label:G,...B}=f,P=E==="password",S=$(!1),K=$(null),X={text:"icon-[lucide--text]",password:"icon-[lucide--lock]",date:"icon-[lucide--calendar]",number:"icon-[lucide--hash]",email:"icon-[lucide--mail]",search:"icon-[lucide--search]",tel:"icon-[lucide--phone]",url:"icon-[lucide--link]"},q=W?z(W):X[E]?z(X[E]):null,D=()=>z(S()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),w=q?"pl-10":"",I=P?"pr-10":"",n=()=>{if(M?.includes("input-xs"))return"btn-xs";if(M?.includes("input-sm"))return"btn-sm";if(M?.includes("input-lg"))return"btn-lg";return"btn-md"},o=(V)=>{let g=V.target.value;if(Q){let Mf=Q(g);K(Mf||null)}J?.(V)},U=()=>K()&&K()!=="",Y=()=>{let V=`input w-full ${w} ${I}`;if(M)V+=` ${M}`;if(U())V+=" input-error";return V.trim()},C=Tag("input",{...B,type:()=>P?S()?"text":"password":E,placeholder:L||(G?" ":L),class:Y,value:_,oninput:o,disabled:()=>T(A),"aria-invalid":()=>U()?"true":"false"}),N=()=>[C,q?Tag("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},q):null,P?Tag("button",{type:"button",class:Z("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",n()),onclick:(V)=>{V.preventDefault(),S(!S())}},()=>D()):null,Tag("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>U()?K():null)];if(G)return Tag("label",{class:Z("floating-label w-full",M)},()=>[Tag("div",{class:"relative w-full"},N),Tag("span",{},T(G))]);return Tag("div",{class:"relative w-full"},N)};var qf=(f)=>{let{class:M,items:_=[],value:E,onselect:W,label:J,placeholder:L,...A}=f,Q=$(T(E)||""),G=$(!1),B=$(-1),P=$(()=>{let X=Q().toLowerCase(),q=T(_)||[];return X?q.filter((D)=>(typeof D==="string"?D:D.label).toLowerCase().includes(X)):q}),S=(X)=>{let q=typeof X==="string"?X:X.value,D=typeof X==="string"?X:X.label;if(Q(D),typeof E==="function")E(q);W?.(X),G(!1),B(-1)},K=(X)=>{let q=P();if(X.key==="ArrowDown")X.preventDefault(),G(!0),B(Math.min(B()+1,q.length-1));else if(X.key==="ArrowUp")X.preventDefault(),B(Math.max(B()-1,0));else if(X.key==="Enter"&&B()>=0)X.preventDefault(),S(q[B()]);else if(X.key==="Escape")G(!1)};return Tag("div",{class:"relative w-full"},[d({label:J,class:M,placeholder:L||j("search")(),value:Q,onfocus:()=>G(!0),onblur:()=>setTimeout(()=>G(!1),150),onkeydown:K,oninput:(X)=>{let q=X.target.value;if(Q(q),typeof E==="function")E(q);G(!0),B(-1)},...A}),Tag("ul",{class:"absolute dropdown-menu left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50",style:()=>G()&&P().length?"display:block":"display:none"},[For(P,(X,q)=>Tag("li",{},[Tag("a",{class:()=>`block w-full ${B()===q?"active bg-primary text-primary-content":""}`,onclick:()=>S(X),onmouseenter:()=>B(q)},typeof X==="string"?X:X.label)]),(X,q)=>(typeof X==="string"?X:X.value)+q),()=>P().length?null:Tag("li",{class:"p-2 text-center opacity-50"},j("nodata")())])])};var zf={};R(zf,{Badge:()=>Rf});var Rf=(f,M)=>{let{class:_,...E}=f;return Tag("span",{...E,class:Z("badge",_)},M)};var Df={};R(Df,{Button:()=>r});var r=(f,M)=>{let{class:_,loading:E,icon:W,...J}=f,L=z(W);return Tag("button",{...J,class:Z("btn",_),disabled:()=>T(E)||T(f.disabled)},()=>[T(E)&&Tag("span",{class:"loading loading-spinner"}),L,M].filter(Boolean))};var Vf={};R(Vf,{Checkbox:()=>Nf});var Nf=(f)=>{let{class:M,value:_,toggle:E,label:W,...J}=f,L=Tag("input",{...J,type:"checkbox",class:()=>Z(T(E)?"toggle":"checkbox",M),checked:_});return Tag("label",{class:"label cursor-pointer justify-start gap-3"},[L,W?Tag("span",{class:"label-text"},W):null])};var Ff={};R(Ff,{Colorpicker:()=>Of});var Of=(f)=>{let{class:M,value:_,label:E,...W}=f,J=$(!1),L=["#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"],A=()=>T(_)||"#000000";return Tag("div",{class:Z("relative w-fit",M)},[Tag("button",{type:"button",class:"btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case",onclick:(Q)=>{Q.stopPropagation(),J(!J())},...W},[Tag("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${A()}`}),E?Tag("span",{class:"opacity-80"},E):null]),If(J,()=>Tag("div",{class:"absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none",onclick:(Q)=>Q.stopPropagation()},[Tag("div",{class:"grid grid-cols-8 gap-1"},L.map((Q)=>Tag("button",{type:"button",style:`background-color: ${Q}`,class:()=>{return`size-6 rounded-sm cursor-pointer transition-all hover:scale-125 hover:z-10 active:scale-95 outline-none border border-black/5 - ${A().toLowerCase()===Q.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof _==="function")_(Q);J(!1)}})))])),If(J,()=>Tag("div",{class:"fixed inset-0 z-[100]",onclick:()=>J(!1)}))])};var hf={};R(hf,{Datepicker:()=>Uf});var Uf=(f)=>{let{class:M,value:_,range:E,label:W,placeholder:J,hour:L=!1,...A}=f,Q=$(!1),G=$(new Date),B=$(null),P=$(0),S=$(0),K=()=>T(E)===!0,X=new Date,q=`${X.getFullYear()}-${String(X.getMonth()+1).padStart(2,"0")}-${String(X.getDate()).padStart(2,"0")}`,D=(Y)=>{let C=Y.getFullYear(),N=String(Y.getMonth()+1).padStart(2,"0"),V=String(Y.getDate()).padStart(2,"0");return`${C}-${N}-${V}`},w=(Y)=>{let C=D(Y),N=T(_);if(K())if(!N?.start||N.start&&N.end){if(typeof _==="function")_({start:C,end:null,...L&&{startHour:P()}})}else{let V=N.start;if(typeof _==="function"){let g=C{let Y=T(_);if(!Y)return"";if(typeof Y==="string"){if(L&&Y.includes("T"))return Y.replace("T"," ");return Y}if(Y.start&&Y.end){let C=L&&Y.startHour?`${Y.start} ${String(Y.startHour).padStart(2,"0")}:00`:Y.start,N=L&&Y.endHour?`${Y.end} ${String(Y.endHour).padStart(2,"0")}:00`:Y.end;return`${C} - ${N}`}if(Y.start)return`${L&&Y.startHour?`${Y.start} ${String(Y.startHour).padStart(2,"0")}:00`:Y.start}...`;return""}),n=(Y)=>{let C=G();G(new Date(C.getFullYear(),C.getMonth()+Y,1))},o=(Y)=>{let C=G();G(new Date(C.getFullYear()+Y,C.getMonth(),1))},U=({value:Y,onChange:C})=>{return Tag("div",{class:"flex-1"},[Tag("div",{class:"flex gap-2 items-center"},[Tag("input",{type:"range",min:0,max:23,value:Y,class:"range range-xs flex-1",oninput:(N)=>{let V=parseInt(N.target.value);C(V)}}),Tag("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(T(Y)).padStart(2,"0")+":00")])])};return Tag("div",{class:Z("relative w-full",M)},[d({label:W,placeholder:J||(K()?"Seleccionar rango...":"Seleccionar fecha..."),value:I,readonly:!0,icon:z("icon-[lucide--calendar]"),onclick:(Y)=>{Y.stopPropagation(),Q(!Q())},...A}),If(Q,()=>Tag("div",{class:"absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none",onclick:(Y)=>Y.stopPropagation()},[Tag("div",{class:"flex justify-between items-center mb-4 gap-1"},[Tag("div",{class:"flex gap-0.5"},[Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>o(-1)},z("icon-[lucide--chevrons-left]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>n(-1)},z("icon-[lucide--chevron-left]"))]),Tag("span",{class:"font-bold uppercase flex-1 text-center"},[()=>G().toLocaleString("es-ES",{month:"short",year:"numeric"})]),Tag("div",{class:"flex gap-0.5"},[Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>n(1)},z("icon-[lucide--chevron-right]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>o(1)},z("icon-[lucide--chevrons-right]"))])]),Tag("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>B(null)},[...["L","M","X","J","V","S","D"].map((Y)=>Tag("div",{class:"text-[10px] opacity-40 font-bold text-center"},Y)),()=>{let Y=G(),C=Y.getFullYear(),N=Y.getMonth(),V=new Date(C,N,1).getDay(),g=V===0?6:V-1,Mf=new Date(C,N+1,0).getDate(),Ef=[];for(let c=0;c{let u=T(_),$f=B(),H_=typeof u==="string"?u.split("T")[0]===H:u?.start===H,j_=u?.end===H,Lf=!1;if(K()&&u?.start){let Af=u.start;if(!u.end&&$f)Lf=H>Af&&H<=$f||H=$f;else if(u.end)Lf=H>Af&&H{if(K())B(H)},onclick:()=>w(N_)},[c.toString()]))}return Ef}]),L?Tag("div",{class:"mt-3 pt-2 border-t border-base-300"},[K()?Tag("div",{class:"flex gap-4"},[U({value:P,onChange:(Y)=>{P(Y);let C=T(_);if(C?.start)_({...C,startHour:Y})}}),U({value:S,onChange:(Y)=>{S(Y);let C=T(_);if(C?.end)_({...C,endHour:Y})}})]):U({value:P,onChange:(Y)=>{P(Y);let C=T(_);if(C&&typeof C==="string"&&C.includes("-"))_(C.split("T")[0]+"T"+String(Y).padStart(2,"0")+":00:00")}})]):null])),If(Q,()=>Tag("div",{class:"fixed inset-0 z-[90]",onclick:()=>Q(!1)}))])};var Hf={};R(Hf,{Drawer:()=>kf});var kf=(f,M)=>{let{class:_,id:E,open:W,side:J,content:L,...A}=f,Q=E||`drawer-${Math.random().toString(36).slice(2,9)}`;return Tag("div",{...A,class:Z("drawer",_)},[Tag("input",{id:Q,type:"checkbox",class:"drawer-toggle",checked:()=>typeof W==="function"?W():W,onchange:(G)=>{if(typeof W==="function")W(G.target.checked)}}),Tag("div",{class:"drawer-content"},[typeof L==="function"?L():L]),Tag("div",{class:"drawer-side"},[Tag("label",{for:Q,class:"drawer-overlay",onclick:()=>{if(typeof W==="function")W(!1)}}),Tag("div",{class:"min-h-full bg-base-200 w-80"},[typeof J==="function"?J():J])])])};var wf={};R(wf,{Dropdown:()=>jf});var y=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(f)=>{if(y&&!y.contains(f.target))y.open=!1,y=null}),window.__dropdownHandlerRegistered=!0;var jf=(f)=>{let{class:M,label:_,icon:E,items:W,...J}=f;return Tag("details",{...J,class:Z("dropdown",M)},[Tag("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(L)=>{let A=L.currentTarget.closest("details");if(y&&y!==A)y.open=!1;setTimeout(()=>{y=A.open?A:null},0)}},[()=>E?typeof E==="function"?E():E:null,()=>_?typeof _==="function"?_():_:null]),Tag("ul",{tabindex:"-1",class:"dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300"},[()=>{return(typeof W==="function"?W():W||[]).map((A)=>Tag("li",{},[Tag("a",{class:A.class||"",onclick:(Q)=>{if(A.onclick)A.onclick(Q);let G=Q.currentTarget.closest("details");if(G){if(G.open=!1,y===G)y=null}}},[A.icon?Tag("span",{},A.icon):null,Tag("span",{},A.label)])]))}])])};var yf={};R(yf,{Fab:()=>xf});var xf=(f)=>{let{class:M,icon:_,label:E,actions:W=[],position:J="bottom-6 right-6",...L}=f;return Tag("div",{...L,class:Z(`fab absolute ${J} flex flex-col-reverse items-end gap-3 z-[100]`,M)},[Tag("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[_?z(_):null,!_&&E?E:null]),...T(W).map((A)=>Tag("div",{class:"flex items-center gap-3 transition-all duration-300"},[A.label?Tag("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},A.label):null,Tag("button",{type:"button",class:`btn btn-circle shadow-lg ${A.class||""}`,onclick:(Q)=>{Q.stopPropagation(),A.onclick?.(Q)}},[A.icon?z(A.icon):A.text||""])]))])};var mf={};R(mf,{Fieldset:()=>uf});var uf=(f,M)=>{let{class:_,legend:E,...W}=f;return Tag("fieldset",{...W,class:Z("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",_)},[()=>{let J=T(E);return J?Tag("legend",{class:"fieldset-legend font-bold"},[J]):null},M])};var gf={};R(gf,{Fileinput:()=>vf});var vf=(f)=>{let{class:M,tooltip:_,max:E=2,accept:W="*",onselect:J,...L}=f,A=$([]),Q=$(!1),G=$(null),B=E*1024*1024,P=(K)=>{let X=Array.from(K);if(G(null),X.find((D)=>D.size>B)){G(`Máx ${E}MB`);return}A([...A(),...X]),J?.(A())},S=(K)=>{let X=A().filter((q,D)=>D!==K);A(X),J?.(X)};return Tag("fieldset",{...L,class:Z("fieldset w-full p-0",M)},[Tag("div",{class:()=>`w-full ${_?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":_},[Tag("label",{class:()=>` +(()=>{var{defineProperty:Jf,getOwnPropertyNames:m_,getOwnPropertyDescriptor:v_}=Object,g_=Object.prototype.hasOwnProperty;var U_=new WeakMap,c_=(f)=>{var M=U_.get(f),_;if(M)return M;if(M=Jf({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function")m_(f).map((E)=>!g_.call(M,E)&&Jf(M,E,{get:()=>f[E],enumerable:!(_=v_(f,E))||_.enumerable}));return U_.set(f,M),M};var R=(f,M)=>{for(var _ in M)Jf(f,_,{get:M[_],enumerable:!0,configurable:!0,set:(E)=>M[_]=()=>E})};var s_={};R(s_,{val:()=>B,ui:()=>Z,tt:()=>w,getIcon:()=>z,Watch:()=>v,Tooltip:()=>O_,Toast:()=>N_,Timeline:()=>z_,Tag:()=>U,Tabs:()=>C_,Table:()=>Y_,Swap:()=>K_,Stat:()=>X_,Stack:()=>B_,Select:()=>Q_,Router:()=>g,Rating:()=>P_,Range:()=>A_,Radio:()=>$_,Navbar:()=>M_,Mount:()=>Sf,Modal:()=>f_,Menu:()=>af,List:()=>sf,Label:()=>of,Input:()=>n,Indicator:()=>df,If:()=>Zf,For:()=>Kf,Fileinput:()=>bf,Fieldset:()=>cf,Fab:()=>vf,Dropdown:()=>uf,Drawer:()=>yf,Datepicker:()=>jf,Colorpicker:()=>Hf,Checkbox:()=>Ff,Button:()=>o,Badge:()=>hf,Autocomplete:()=>Df,Alert:()=>Cf,Accordion:()=>Yf,$:()=>d});var j=(f)=>typeof f==="function",Gf=(f)=>f&&typeof f==="object",s=Array.isArray,x=typeof document<"u"?document:null,H_=(f)=>f?._isRuntime?f.container:f instanceof Node?f:x.createTextNode(f==null?"":String(f)),O=null,V=null,t=!1,ff=0,_f=new Set,Qf=new WeakMap,Tf=Symbol("iter"),Bf=new WeakMap,b=(f)=>{if(!f||f._disposed)return;f._disposed=!0;let M=[f];while(M.length){let _=M.pop();if(_._cleanups)_._cleanups.forEach((E)=>E()),_._cleanups.clear();if(_._children)_._children.forEach((E)=>M.push(E)),_._children.clear();if(_._deps)_._deps.forEach((E)=>E.delete(_)),_._deps.clear()}},p_=(f)=>{if(V)(V._mounts||=[]).push(f)},r=(f)=>{if(V)(V._cleanups||=new Set).add(f)},b_=(f)=>{let M=O;O=null;try{return f()}finally{O=M}},a=(f,M=!1)=>{let _=()=>{if(_._disposed)return;if(_._deps)_._deps.forEach((A)=>A.delete(_));if(_._cleanups)_._cleanups.forEach((A)=>A()),_._cleanups.clear();let E=O,L=V;O=V=_;try{return _._result=f()}catch(A){console.error("[SigPro]",A)}finally{O=E,V=L}};if(_._deps=_._cleanups=_._children=null,_._disposed=!1,_._isComputed=M,_._depth=O?O._depth+1:0,_._mounts=[],_._parent=V,V)(V._children||=new Set).add(_);return _},w_=()=>{if(t)return;t=!0;let f=Array.from(_f).sort((M,_)=>M._depth-_._depth);_f.clear();for(let M of f)if(!M._disposed)M();t=!1},r_=(f)=>{ff++;try{return f()}finally{if(ff--,ff===0&&_f.size>0&&!t)w_()}},k=(f,M=!1)=>{if(!M&&O&&!O._disposed)f.add(O),(O._deps||=new Set).add(f);else if(M){let _=!1;if(f.forEach((E)=>{if(E===O||E._disposed)return;if(E._isComputed){if(E._dirty=!0,E._subs)k(E._subs,!0)}else _f.add(E),_=!0}),_&&!t&&ff===0)queueMicrotask(w_)}},d=(f,M=null)=>{let _=new Set;if(j(f)){let E,L=!0,A=()=>{if(L){let P=O;O=A;try{let W=f();if(!Object.is(E,W))E=W,L=!1,k(_,!0)}finally{O=P}}return k(_),E};if(A._isComputed=!0,A._subs=_,A._dirty=!0,A._deps=null,A._disposed=!1,A.markDirty=()=>{L=!0},A.stop=()=>{if(A._disposed=!0,A._deps)A._deps.forEach((P)=>P.delete(A)),A._deps.clear();_.clear()},V)r(A.stop);return A}if(M)try{f=JSON.parse(localStorage.getItem(M))??f}catch(E){}return(...E)=>{if(E.length){let L=j(E[0])?E[0](f):E[0];if(!Object.is(f,L)){if(f=L,M)localStorage.setItem(M,JSON.stringify(f));k(_,!0)}}return k(_),f}},y_=(f)=>{if(!Gf(f))return f;if(Qf.has(f))return Qf.get(f);let M=new Map,_=(L)=>{let A=M.get(L);if(!A)M.set(L,A=new Set);return A},E=new Proxy(f,{get(L,A){return k(_(A)),y_(L[A])},set(L,A,P){let W=!(A in L);if(!Object.is(L[A],P)){if(L[A]=P,k(_(A),!0),W)k(_(Tf),!0)}return!0},deleteProperty(L,A){let P=Reflect.deleteProperty(L,A);if(P)k(_(A),!0),k(_(Tf),!0);return P},ownKeys(L){return k(_(Tf)),Reflect.ownKeys(L)}});return Qf.set(f,E),E},v=(f,M)=>{if(M===void 0){let E=a(f);return E(),()=>b(E)}let _=a(()=>{let E=Array.isArray(f)?f.map((L)=>L()):f();b_(()=>M(E))});return _(),()=>b(_)},Xf=(f)=>{if(f._cleanups)f._cleanups.forEach((M)=>M()),f._cleanups.clear();if(f._ownerEffect)b(f._ownerEffect);if(f.childNodes)f.childNodes.forEach(Xf)},d_=/^\s*(javascript|data|vbscript):/i,n_=(f)=>f==="src"||f==="href"||f.startsWith("on"),k_=(f,M)=>{if(M==null||M===!1)return null;if(n_(f)){let _=String(M);if(d_.test(_))return console.warn(`[SigPro] Bloqueado protocolo peligroso en ${f}`),"#"}return M},U=(f,M={},_=[])=>{if(M instanceof Node||s(M)||!Gf(M))_=M,M={};if(j(f)){let P={_mounts:[],_cleanups:new Set},W=a(()=>{let T=f(M,{children:_,emit:(Y,...K)=>M[`on${Y[0].toUpperCase()}${Y.slice(1)}`]?.(...K)});return W._result=T,T});W();let J=W._result;if(J==null)return null;let Q=J instanceof Node||s(J)&&J.every((T)=>T instanceof Node)?J:x.createTextNode(String(J)),X=(T)=>{if(Gf(T)&&!T._isRuntime)T._mounts=W._mounts||[],T._cleanups=W._cleanups||new Set,T._ownerEffect=W};return s(Q)?Q.forEach(X):X(Q),Q}let E=/^(svg|path|circle|rect|line|polyline|polygon|g|defs|text|tspan|use)$/.test(f),L=E?x.createElementNS("http://www.w3.org/2000/svg",f):x.createElement(f);L._cleanups=new Set;for(let P in M){if(!M.hasOwnProperty(P))continue;let W=M[P];if(P==="ref"){j(W)?W(L):W.current=L;continue}if(P.startsWith("on")){let J=P.slice(2).toLowerCase();L.addEventListener(J,W);let Q=()=>L.removeEventListener(J,W);L._cleanups.add(Q),r(Q)}else if(j(W)){let J=a(()=>{let Q=k_(P,W());if(P==="class")L.className=Q||"";else if(Q==null)L.removeAttribute(P);else if(P in L&&!E)L[P]=Q;else L.setAttribute(P,Q===!0?"":Q)});if(J(),L._cleanups.add(()=>b(J)),r(()=>b(J)),/^(INPUT|TEXTAREA|SELECT)$/.test(L.tagName)&&(P==="value"||P==="checked")){let Q=P==="checked"?"change":"input";L.addEventListener(Q,(X)=>W(X.target[P]))}}else{let J=k_(P,W);if(J!=null)if(P in L&&!E)L[P]=J;else L.setAttribute(P,J===!0?"":J)}}let A=(P)=>{if(s(P))return P.forEach(A);if(j(P)){let W=x.createTextNode("");L.appendChild(W);let J=[],Q=a(()=>{let X=P(),T=(s(X)?X:[X]).map(H_);J.forEach((K)=>{if(K._isRuntime)K.destroy();else Xf(K);if(K.parentNode)K.remove()});let Y=W;for(let K=T.length-1;K>=0;K--){let G=T[K];if(G.parentNode!==Y.parentNode)Y.parentNode?.insertBefore(G,Y);if(G._mounts)G._mounts.forEach((q)=>q());Y=G}J=T});Q(),L._cleanups.add(()=>b(Q)),r(()=>b(Q))}else{let W=H_(P);if(L.appendChild(W),W._mounts)W._mounts.forEach((J)=>J())}};return A(_),L},e=(f)=>{let M=new Set,_=[],E=V,L=O,A=x.createElement("div");A.style.display="contents",A.setAttribute("role","presentation"),V={_cleanups:M,_mounts:_},O=null;let P=(W)=>{if(!W)return;if(W._isRuntime)M.add(W.destroy),A.appendChild(W.container);else if(s(W))W.forEach(P);else A.appendChild(W instanceof Node?W:x.createTextNode(String(W==null?"":W)))};try{P(f({onCleanup:(W)=>M.add(W)}))}finally{V=E,O=L}return _.forEach((W)=>W()),{_isRuntime:!0,container:A,destroy:()=>{M.forEach((W)=>W()),Xf(A),A.remove()}}},Zf=(f,M,_=null)=>{let E=x.createTextNode(""),L=U("div",{style:"display:contents"},[E]),A=null;return v(()=>!!(j(f)?f():f),(P)=>{if(A)A.destroy(),A=null;let W=P?M:_;if(W)A=e(()=>j(W)?W():W),L.insertBefore(A.container,E)}),r(()=>A?.destroy()),L},Kf=(f,M,_)=>{let E=x.createTextNode(""),L=U("div",{style:"display:contents"},[E]),A=new Map;return v(()=>(j(f)?f():f)||[],(P)=>{let W=new Map,J=[],Q=P||[];for(let T=0;TM(Y,T));else A.delete(K);W.set(K,G),J.push(G)}A.forEach((T)=>T.destroy());let X=E;for(let T=J.length-1;T>=0;T--){let K=J[T].container;if(K.nextSibling!==X)L.insertBefore(K,X);X=K}A=W}),L},g=(f)=>{let M=()=>window.location.hash.slice(1)||"/",_=d(M()),E=()=>_(M());window.addEventListener("hashchange",E),r(()=>window.removeEventListener("hashchange",E));let L=U("div",{class:"router-hook"}),A=null;return v([_],()=>{let P=_(),W=f.find((J)=>{let Q=J.path.split("/").filter(Boolean),X=P.split("/").filter(Boolean);return Q.length===X.length&&Q.every((T,Y)=>T[0]===":"||T===X[Y])})||f.find((J)=>J.path==="*");if(W){A?.destroy();let J={};W.path.split("/").filter(Boolean).forEach((Q,X)=>{if(Q[0]===":")J[Q.slice(1)]=P.split("/").filter(Boolean)[X]}),g.params(J),A=e(()=>j(W.component)?W.component(J):W.component),L.replaceChildren(A.container)}}),L};g.params=d({});g.to=(f)=>window.location.hash=f.replace(/^#?\/?/,"#/");g.back=()=>window.history.back();g.path=()=>window.location.hash.replace(/^#/,"")||"/";var Sf=(f,M)=>{let _=typeof M==="string"?x.querySelector(M):M;if(!_)return;if(Bf.has(_))Bf.get(_).destroy();let E=e(j(f)?f:()=>f);return _.replaceChildren(E.container),Bf.set(_,E),E},j_=Object.freeze({$:d,$$:y_,Watch:v,Tag:U,Render:e,If:Zf,For:Kf,Router:g,Mount:Sf,onMount:p_,onUnmount:r,Batch:r_});if(typeof window<"u")Object.assign(window,j_),"div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer ul ol li a em strong pre code form label input textarea select button img svg".split(" ").forEach((f)=>window[f[0].toUpperCase()+f.slice(1)]=(M,_)=>j_.Tag(f,M,_));var Ef={};R(Ef,{default:()=>l_,Tooltip:()=>O_,Toast:()=>N_,Timeline:()=>z_,Tabs:()=>C_,Table:()=>Y_,Swap:()=>K_,Stat:()=>X_,Stack:()=>B_,Select:()=>Q_,Rating:()=>P_,Range:()=>A_,Radio:()=>$_,Navbar:()=>M_,Modal:()=>f_,Menu:()=>af,List:()=>sf,Label:()=>of,Input:()=>n,Indicator:()=>df,Fileinput:()=>bf,Fieldset:()=>cf,Fab:()=>vf,Dropdown:()=>uf,Drawer:()=>yf,Datepicker:()=>jf,Colorpicker:()=>Hf,Checkbox:()=>Ff,Button:()=>o,Badge:()=>hf,Autocomplete:()=>Df,Alert:()=>Cf,Accordion:()=>Yf});var qf={};R(qf,{Accordion:()=>Yf});var Mf={};R(Mf,{val:()=>B,ui:()=>Z,getIcon:()=>z});var B=(f)=>typeof f==="function"?f():f,Z=(f,M)=>typeof M==="function"?()=>`${f} ${M()||""}`.trim():`${f} ${M||""}`.trim(),z=(f)=>{if(!f)return null;if(typeof f==="function")return Tag("span",{class:"mr-1"},f());if(typeof f==="object")return Tag("span",{class:"mr-1"},f);if(typeof f==="string"){let M=f.trim().split(/\s+/),_=M[M.length-1]==="right",E=_?M.slice(0,-1).join(" "):f,L=_?"ml-1":"mr-1";if(E&&!E.startsWith("icon-[")&&!E.includes("--"))return Tag("span",{class:L},E);return Tag("span",{class:`${E} ${L}`.trim()})}return null};var Yf=(f,M)=>{let{class:_,title:E,name:L,open:A,...P}=f;return Tag("div",{...P,class:Z("collapse collapse-arrow bg-base-200 mb-2",_)},[Tag("input",{type:L?"radio":"checkbox",name:L,checked:B(A)}),Tag("div",{class:"collapse-title text-xl font-medium"},E),Tag("div",{class:"collapse-content"},M)])};var Rf={};R(Rf,{Alert:()=>Cf});var Cf=(f,M)=>{let{class:_,actions:E,type:L="info",soft:A=!0,...P}=f,W={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},X=[`alert-${L}`,A?"alert-soft":"",_].filter(Boolean).join(" "),T=M||f.message;return Tag("div",{...P,role:"alert",class:Z("alert",X)},()=>[z(W[L]),Tag("div",{class:"flex-1"},[Tag("span",{},[typeof T==="function"?T():T])]),E?Tag("div",{class:"flex-none"},[typeof E==="function"?E():E]):null].filter(Boolean))};var Nf={};R(Nf,{Autocomplete:()=>Df});var o_={es:{close:"Cerrar",confirm:"Confirmar",cancel:"Cancelar",search:"Buscar...",loading:"Cargando...",nodata:"Sin datos"},en:{close:"Close",confirm:"Confirm",cancel:"Cancel",search:"Search...",loading:"Loading...",nodata:"No data"}},i_=$("es");var w=(f)=>()=>o_[i_()][f]||f;var zf={};R(zf,{Input:()=>n});var n=(f)=>{let{class:M,value:_,type:E="text",icon:L,oninput:A,placeholder:P,disabled:W,validate:J,label:Q,...X}=f,T=E==="password",Y=$(!1),K=$(null),G={text:"icon-[lucide--text]",password:"icon-[lucide--lock]",date:"icon-[lucide--calendar]",number:"icon-[lucide--hash]",email:"icon-[lucide--mail]",search:"icon-[lucide--search]",tel:"icon-[lucide--phone]",url:"icon-[lucide--link]"},q=L?z(L):G[E]?z(G[E]):null,D=()=>z(Y()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),y=q?"pl-10":"",u=T?"pr-10":"",i=()=>{if(M?.includes("input-xs"))return"btn-xs";if(M?.includes("input-sm"))return"btn-sm";if(M?.includes("input-lg"))return"btn-lg";return"btn-md"},l=(h)=>{let c=h.target.value;if(J){let $f=J(c);K($f||null)}A?.(h)},F=()=>K()&&K()!=="",S=()=>{let h=`input w-full ${y} ${u}`;if(M)h+=` ${M}`;if(F())h+=" input-error";return h.trim()},C=Tag("input",{...X,type:()=>T?Y()?"text":"password":E,placeholder:P||(Q?" ":P),class:S,value:_,oninput:l,disabled:()=>B(W),"aria-invalid":()=>F()?"true":"false"}),N=()=>[C,q?Tag("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},q):null,T?Tag("button",{type:"button",class:Z("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",i()),onclick:(h)=>{h.preventDefault(),Y(!Y())}},()=>D()):null,Tag("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>F()?K():null)];if(Q)return Tag("label",{class:Z("floating-label w-full",M)},()=>[Tag("div",{class:"relative w-full"},N),Tag("span",{},B(Q))]);return Tag("div",{class:"relative w-full"},N)};var Df=(f)=>{let{class:M,items:_=[],value:E,onselect:L,label:A,placeholder:P,...W}=f,J=$(B(E)||""),Q=$(!1),X=$(-1),T=$(()=>{let G=J().toLowerCase(),q=B(_)||[];return G?q.filter((D)=>(typeof D==="string"?D:D.label).toLowerCase().includes(G)):q}),Y=(G)=>{let q=typeof G==="string"?G:G.value,D=typeof G==="string"?G:G.label;if(J(D),typeof E==="function")E(q);L?.(G),Q(!1),X(-1)},K=(G)=>{let q=T();if(G.key==="ArrowDown")G.preventDefault(),Q(!0),X(Math.min(X()+1,q.length-1));else if(G.key==="ArrowUp")G.preventDefault(),X(Math.max(X()-1,0));else if(G.key==="Enter"&&X()>=0)G.preventDefault(),Y(q[X()]);else if(G.key==="Escape")Q(!1)};return Tag("div",{class:"relative w-full"},[n({label:A,class:M,placeholder:P||w("search")(),value:J,onfocus:()=>Q(!0),onblur:()=>setTimeout(()=>Q(!1),150),onkeydown:K,oninput:(G)=>{let q=G.target.value;if(J(q),typeof E==="function")E(q);Q(!0),X(-1)},...W}),Tag("ul",{class:"absolute dropdown-menu left-0 w-full menu bg-base-100 rounded-box mt-1 p-2 shadow-xl max-h-60 overflow-y-auto border border-base-300 z-50",style:()=>Q()&&T().length?"display:block":"display:none"},[For(T,(G,q)=>Tag("li",{},[Tag("a",{class:()=>`block w-full ${X()===q?"active bg-primary text-primary-content":""}`,onclick:()=>Y(G),onmouseenter:()=>X(q)},typeof G==="string"?G:G.label)]),(G,q)=>(typeof G==="string"?G:G.value)+q),()=>T().length?null:Tag("li",{class:"p-2 text-center opacity-50"},w("nodata")())])])};var Of={};R(Of,{Badge:()=>hf});var hf=(f,M)=>{let{class:_,...E}=f;return Tag("span",{...E,class:Z("badge",_)},M)};var Vf={};R(Vf,{Button:()=>o});var o=(f,M)=>{let{class:_,loading:E,icon:L,...A}=f,P=z(L);return Tag("button",{...A,class:Z("btn",_),disabled:()=>B(E)||B(f.disabled)},()=>[B(E)&&Tag("span",{class:"loading loading-spinner"}),P,M].filter(Boolean))};var Uf={};R(Uf,{Checkbox:()=>Ff});var Ff=(f)=>{let{class:M,value:_,toggle:E,label:L,...A}=f,P=Tag("input",{...A,type:"checkbox",class:()=>Z(B(E)?"toggle":"checkbox",M),checked:_});return Tag("label",{class:"label cursor-pointer justify-start gap-3"},[P,L?Tag("span",{class:"label-text"},L):null])};var kf={};R(kf,{Colorpicker:()=>Hf});var Hf=(f)=>{let{class:M,value:_,label:E,...L}=f,A=$(!1),P=["#000","#1A1A1A","#333","#4D4D4D","#666","#808080","#B3B3B3","#FFF","#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626","#ef4444","#f87171","#fca5a5","#431407","#7c2d12","#9a3412","#c2410c","#ea580c","#f97316","#fb923c","#ffedd5","#713f12","#a16207","#ca8a04","#eab308","#facc15","#fde047","#fef08a","#fff9c4","#064e3b","#065f46","#059669","#10b981","#34d399","#4ade80","#84cc16","#d9f99d","#082f49","#075985","#0284c7","#0ea5e9","#38bdf8","#7dd3fc","#22d3ee","#cffafe","#1e1b4b","#312e81","#4338ca","#4f46e5","#6366f1","#818cf8","#a5b4fc","#e0e7ff","#2e1065","#4c1d95","#6d28d9","#7c3aed","#8b5cf6","#a855f7","#d946ef","#fae8ff"],W=()=>B(_)||"#000000";return Tag("div",{class:Z("relative w-fit",M)},[Tag("button",{type:"button",class:"btn px-3 bg-base-100 border-base-300 hover:border-primary/50 flex items-center gap-2 shadow-sm font-normal normal-case",onclick:(J)=>{J.stopPropagation(),A(!A())},...L},[Tag("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${W()}`}),E?Tag("span",{class:"opacity-80"},E):null]),If(A,()=>Tag("div",{class:"absolute left-0 mt-2 p-3 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[110] w-64 select-none",onclick:(J)=>J.stopPropagation()},[Tag("div",{class:"grid grid-cols-8 gap-1"},P.map((J)=>Tag("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 + ${W().toLowerCase()===J.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof _==="function")_(J);A(!1)}})))])),If(A,()=>Tag("div",{class:"fixed inset-0 z-[100]",onclick:()=>A(!1)}))])};var wf={};R(wf,{Datepicker:()=>jf});var jf=(f)=>{let{class:M,value:_,range:E,label:L,placeholder:A,hour:P=!1,...W}=f,J=$(!1),Q=$(new Date),X=$(null),T=$(0),Y=$(0),K=()=>B(E)===!0,G=new Date,q=`${G.getFullYear()}-${String(G.getMonth()+1).padStart(2,"0")}-${String(G.getDate()).padStart(2,"0")}`,D=(S)=>{let C=S.getFullYear(),N=String(S.getMonth()+1).padStart(2,"0"),h=String(S.getDate()).padStart(2,"0");return`${C}-${N}-${h}`},y=(S)=>{let C=D(S),N=B(_);if(K())if(!N?.start||N.start&&N.end){if(typeof _==="function")_({start:C,end:null,...P&&{startHour:T()}})}else{let h=N.start;if(typeof _==="function"){let c=C{let S=B(_);if(!S)return"";if(typeof S==="string"){if(P&&S.includes("T"))return S.replace("T"," ");return S}if(S.start&&S.end){let C=P&&S.startHour?`${S.start} ${String(S.startHour).padStart(2,"0")}:00`:S.start,N=P&&S.endHour?`${S.end} ${String(S.endHour).padStart(2,"0")}:00`:S.end;return`${C} - ${N}`}if(S.start)return`${P&&S.startHour?`${S.start} ${String(S.startHour).padStart(2,"0")}:00`:S.start}...`;return""}),i=(S)=>{let C=Q();Q(new Date(C.getFullYear(),C.getMonth()+S,1))},l=(S)=>{let C=Q();Q(new Date(C.getFullYear()+S,C.getMonth(),1))},F=({value:S,onChange:C})=>{return Tag("div",{class:"flex-1"},[Tag("div",{class:"flex gap-2 items-center"},[Tag("input",{type:"range",min:0,max:23,value:S,class:"range range-xs flex-1",oninput:(N)=>{let h=parseInt(N.target.value);C(h)}}),Tag("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(B(S)).padStart(2,"0")+":00")])])};return Tag("div",{class:Z("relative w-full",M)},[n({label:L,placeholder:A||(K()?"Seleccionar rango...":"Seleccionar fecha..."),value:u,readonly:!0,icon:z("icon-[lucide--calendar]"),onclick:(S)=>{S.stopPropagation(),J(!J())},...W}),If(J,()=>Tag("div",{class:"absolute left-0 mt-2 p-4 bg-base-100 border border-base-300 shadow-2xl rounded-box z-[100] w-80 select-none",onclick:(S)=>S.stopPropagation()},[Tag("div",{class:"flex justify-between items-center mb-4 gap-1"},[Tag("div",{class:"flex gap-0.5"},[Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>l(-1)},z("icon-[lucide--chevrons-left]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>i(-1)},z("icon-[lucide--chevron-left]"))]),Tag("span",{class:"font-bold uppercase flex-1 text-center"},[()=>Q().toLocaleString("es-ES",{month:"short",year:"numeric"})]),Tag("div",{class:"flex gap-0.5"},[Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>i(1)},z("icon-[lucide--chevron-right]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>l(1)},z("icon-[lucide--chevrons-right]"))])]),Tag("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>X(null)},[...["L","M","X","J","V","S","D"].map((S)=>Tag("div",{class:"text-[10px] opacity-40 font-bold text-center"},S)),()=>{let S=Q(),C=S.getFullYear(),N=S.getMonth(),h=new Date(C,N,1).getDay(),c=h===0?6:h-1,$f=new Date(C,N+1,0).getDate(),Lf=[];for(let p=0;p{let m=B(_),Af=X(),I_=typeof m==="string"?m.split("T")[0]===H:m?.start===H,u_=m?.end===H,Wf=!1;if(K()&&m?.start){let Pf=m.start;if(!m.end&&Af)Wf=H>Pf&&H<=Af||H=Af;else if(m.end)Wf=H>Pf&&H{if(K())X(H)},onclick:()=>y(F_)},[p.toString()]))}return Lf}]),P?Tag("div",{class:"mt-3 pt-2 border-t border-base-300"},[K()?Tag("div",{class:"flex gap-4"},[F({value:T,onChange:(S)=>{T(S);let C=B(_);if(C?.start)_({...C,startHour:S})}}),F({value:Y,onChange:(S)=>{Y(S);let C=B(_);if(C?.end)_({...C,endHour:S})}})]):F({value:T,onChange:(S)=>{T(S);let C=B(_);if(C&&typeof C==="string"&&C.includes("-"))_(C.split("T")[0]+"T"+String(S).padStart(2,"0")+":00:00")}})]):null])),If(J,()=>Tag("div",{class:"fixed inset-0 z-[90]",onclick:()=>J(!1)}))])};var xf={};R(xf,{Drawer:()=>yf});var yf=(f,M)=>{let{class:_,id:E,open:L,side:A,content:P,...W}=f,J=E||`drawer-${Math.random().toString(36).slice(2,9)}`;return Tag("div",{...W,class:Z("drawer",_)},[Tag("input",{id:J,type:"checkbox",class:"drawer-toggle",checked:()=>typeof L==="function"?L():L,onchange:(Q)=>{if(typeof L==="function")L(Q.target.checked)}}),Tag("div",{class:"drawer-content"},[typeof P==="function"?P():P]),Tag("div",{class:"drawer-side"},[Tag("label",{for:J,class:"drawer-overlay",onclick:()=>{if(typeof L==="function")L(!1)}}),Tag("div",{class:"min-h-full bg-base-200 w-80"},[typeof A==="function"?A():A])])])};var mf={};R(mf,{Dropdown:()=>uf});var I=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(f)=>{if(I&&!I.contains(f.target))I.open=!1,I=null}),window.__dropdownHandlerRegistered=!0;var uf=(f)=>{let{class:M,label:_,icon:E,items:L,...A}=f;return Tag("details",{...A,class:Z("dropdown",M)},[Tag("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(P)=>{let W=P.currentTarget.closest("details");if(I&&I!==W)I.open=!1;setTimeout(()=>{I=W.open?W:null},0)}},[()=>E?typeof E==="function"?E():E:null,()=>_?typeof _==="function"?_():_:null]),Tag("ul",{tabindex:"-1",class:"dropdown-content z-[50] menu p-2 shadow bg-base-100 rounded-box w-52 border border-base-300"},[()=>{return(typeof L==="function"?L():L||[]).map((W)=>Tag("li",{},[Tag("a",{class:W.class||"",onclick:(J)=>{if(W.onclick)W.onclick(J);let Q=J.currentTarget.closest("details");if(Q){if(Q.open=!1,I===Q)I=null}}},[W.icon?Tag("span",{},W.icon):null,Tag("span",{},W.label)])]))}])])};var gf={};R(gf,{Fab:()=>vf});var vf=(f)=>{let{class:M,icon:_,label:E,actions:L=[],position:A="bottom-6 right-6",...P}=f;return Tag("div",{...P,class:Z(`fab absolute ${A} flex flex-col-reverse items-end gap-3 z-[100]`,M)},[Tag("div",{tabindex:0,role:"button",class:"btn btn-lg btn-circle btn-primary shadow-2xl"},[_?z(_):null,!_&&E?E:null]),...B(L).map((W)=>Tag("div",{class:"flex items-center gap-3 transition-all duration-300"},[W.label?Tag("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},W.label):null,Tag("button",{type:"button",class:`btn btn-circle shadow-lg ${W.class||""}`,onclick:(J)=>{J.stopPropagation(),W.onclick?.(J)}},[W.icon?z(W.icon):W.text||""])]))])};var pf={};R(pf,{Fieldset:()=>cf});var cf=(f,M)=>{let{class:_,legend:E,...L}=f;return Tag("fieldset",{...L,class:Z("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",_)},[()=>{let A=B(E);return A?Tag("legend",{class:"fieldset-legend font-bold"},[A]):null},M])};var rf={};R(rf,{Fileinput:()=>bf});var bf=(f)=>{let{class:M,tooltip:_,max:E=2,accept:L="*",onselect:A,...P}=f,W=$([]),J=$(!1),Q=$(null),X=E*1024*1024,T=(K)=>{let G=Array.from(K);if(Q(null),G.find((D)=>D.size>X)){Q(`Máx ${E}MB`);return}W([...W(),...G]),A?.(W())},Y=(K)=>{let G=W().filter((q,D)=>D!==K);W(G),A?.(G)};return Tag("fieldset",{...P,class:Z("fieldset w-full p-0",M)},[Tag("div",{class:()=>`w-full ${_?"tooltip tooltip-top before:z-50 after:z-50":""}`,"data-tip":_},[Tag("label",{class:()=>` relative flex items-center justify-between w-full h-12 px-4 border-2 border-dashed rounded-lg cursor-pointer transition-all duration-200 - ${Q()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} - `,ondragover:(K)=>{K.preventDefault(),Q(!0)},ondragleave:()=>Q(!1),ondrop:(K)=>{K.preventDefault(),Q(!1),P(K.dataTransfer.files)}},[Tag("div",{class:"flex items-center gap-3 w-full"},[z("icon-[lucide--upload]"),Tag("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),Tag("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${E}MB`)]),Tag("input",{type:"file",multiple:!0,accept:W,class:"hidden",onchange:(K)=>P(K.target.files)})])]),()=>G()?Tag("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},G()):null,If(()=>A().length>0,()=>Tag("ul",{class:"mt-2 space-y-1"},[For(A,(K,X)=>Tag("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[Tag("div",{class:"flex items-center gap-2 truncate"},[Tag("span",{class:"opacity-50"},"\uD83D\uDCC4"),Tag("span",{class:"truncate font-medium max-w-[200px]"},K.name),Tag("span",{class:"text-[9px] opacity-40"},`(${(K.size/1024).toFixed(0)} KB)`)]),Tag("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(q)=>{q.preventDefault(),q.stopPropagation(),S(X)}},[z("icon-[lucide--x]")])]),(K)=>K.name+K.lastModified)]))])};var bf={};R(bf,{Indicator:()=>cf});var cf=(f,M)=>{let{value:_,class:E,...W}=f;return Tag("div",{...W,class:"indicator"},()=>[_?Tag("span",{class:Z("indicator-item badge",E)},()=>typeof _==="function"?_():_):null,M].filter(Boolean))};var df={};R(df,{Label:()=>pf});var pf=(f)=>{let{children:M,value:_,floating:E=!1,class:W,...J}=f;if(E)return Tag("label",{class:Z("floating-label",W),...J},()=>[typeof M==="function"?M():M,_?Tag("span",{},T(_)):null]);return Tag("label",{class:Z("label",W),...J},()=>[_?Tag("span",{class:"label-text"},T(_)):null,typeof M==="function"?M():M])};var nf={};R(nf,{List:()=>rf});var rf=(f)=>{let{class:M,items:_,header:E,render:W=(Q)=>Q,keyFn:J=(Q,G)=>Q.id??G,...L}=f,A=For(_,(Q,G)=>Tag("li",{class:"list-row",style:"width: 100%; display: block;"},[Tag("div",{style:"width: 100%;"},[W(Q,G)])]),J);return Tag("ul",{...L,style:"display: block; width: 100%;",class:Z("list bg-base-100 rounded-box shadow-md",M)},E?[If(E,()=>Tag("li",{class:"p-4 pb-2 text-xs opacity-60",style:"width: 100%;"},[T(E)])),A]:A)};var lf={};R(lf,{Menu:()=>of});var of=(f)=>{let{class:M,items:_,...E}=f,W=(J)=>For(()=>J||[],(L)=>Tag("li",{},[L.children?Tag("details",{open:L.open},[Tag("summary",{},[L.icon&&Tag("span",{class:"mr-2"},L.icon),L.label]),Tag("ul",{},W(L.children))]):Tag("a",{class:()=>T(L.active)?"active":"",onclick:L.onclick},[L.icon&&Tag("span",{class:"mr-2"},L.icon),L.label])]),(L,A)=>L.label||A);return Tag("ul",{...E,class:Z("menu bg-base-200 rounded-box",M)},W(_))};var tf={};R(tf,{Modal:()=>sf});var sf=(f,M)=>{let{class:_,title:E,buttons:W,open:J,...L}=f,A=null,Q=()=>{let B=typeof J==="function"?J():J;if(!A)return;if(B){if(!A.open)A.showModal()}else if(A.open)A.close()};Watch(()=>Q());let G=()=>{if(typeof J==="function")J(!1)};return Tag("dialog",{...L,ref:(B)=>{if(A=B,B)Q()},class:Z("modal",_),onclose:G,oncancel:G},[Tag("div",{class:"modal-box"},[E?Tag("h3",{class:"text-lg font-bold mb-4"},()=>typeof E==="function"?E():E):null,Tag("div",{class:"py-2"},[typeof M==="function"?M():M]),Tag("div",{class:"modal-action"},[Tag("form",{method:"dialog",class:"flex gap-2"},[...(Array.isArray(W)?W:[W]).filter(Boolean),r({type:"submit"},j("close")())])])]),Tag("form",{method:"dialog",class:"modal-backdrop"},[Tag("button",{},"close")])])};var ef={};R(ef,{Navbar:()=>af});var af=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:Z("navbar bg-base-100 shadow-sm px-4",_)},M)};var __={};R(__,{Radio:()=>f_});var f_=(f)=>{let{class:M,label:_,tooltip:E,value:W,inputValue:J,name:L,...A}=f,Q=Tag("input",{...A,type:"radio",name:L,class:Z("radio",M),checked:()=>T(W)===J,onclick:()=>{if(typeof W==="function")W(J)}});if(!_&&!E)return Q;let G=Tag("label",{class:"label cursor-pointer justify-start gap-3"},[Q,_?Tag("span",{class:"label-text"},_):null]);return E?Tag("div",{class:"tooltip","data-tip":E},G):G};var E_={};R(E_,{Range:()=>M_});var M_=(f)=>{let{class:M,label:_,tooltip:E,value:W,...J}=f,L=Tag("input",{...J,type:"range",class:Z("range",M),value:W,disabled:()=>T(f.disabled)});if(!_&&!E)return L;let A=Tag("div",{class:"flex flex-col gap-2"},[_?Tag("span",{class:"label-text"},_):null,L]);return E?Tag("div",{class:"tooltip","data-tip":E},A):A};var L_={};R(L_,{Rating:()=>$_});var $_=(f)=>{let{class:M,value:_,count:E=5,mask:W="mask-star",readonly:J=!1,onchange:L,...A}=f,Q=`rating-${Math.random().toString(36).slice(2,7)}`;return Tag("div",{...A,class:()=>Z(`rating ${T(J)?"pointer-events-none":""}`,M)},Array.from({length:T(E)},(G,B)=>{let P=B+1;return Tag("input",{type:"radio",name:Q,class:`mask ${W}`,checked:()=>Math.round(T(_))===P,onchange:()=>{if(!T(J)){if(typeof L==="function")L(P);else if(typeof _==="function")_(P)}}})}))};var W_={};R(W_,{Select:()=>A_});var A_=(f)=>{let{class:M,label:_,items:E,value:W,...J}=f,L=Tag("select",{...J,class:Z("select select-bordered w-full",M),value:W},For(()=>T(E)||[],(A)=>Tag("option",{value:A.value,$selected:()=>String(T(W))===String(A.value)},A.label),(A)=>A.value));if(!_)return L;return Tag("label",{class:"fieldset-label flex flex-col gap-1"},[Tag("span",{},_),L])};var Q_={};R(Q_,{Stack:()=>J_});var J_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:Z("stack",_)},M)};var P_={};R(P_,{Stat:()=>G_});var G_=(f)=>{let{class:M,icon:_,label:E,value:W,desc:J,...L}=f;return Tag("div",{...L,class:Z("stat",M)},[_&&Tag("div",{class:"stat-figure text-secondary"},_),E&&Tag("div",{class:"stat-title"},E),Tag("div",{class:"stat-value"},()=>T(W)??W),J&&Tag("div",{class:"stat-desc"},J)])};var B_={};R(B_,{Swap:()=>T_});var T_=(f)=>{let{class:M,value:_,on:E,off:W,...J}=f;return Tag("label",{...J,class:Z("swap",M)},[Tag("input",{type:"checkbox",checked:()=>T(_),onclick:(L)=>{if(typeof _==="function")_(L.target.checked)}}),Tag("div",{class:"swap-on"},E),Tag("div",{class:"swap-off"},W)])};var Z_={};R(Z_,{Table:()=>X_});var X_=(f)=>{let{class:M,items:_=[],columns:E=[],keyFn:W,zebra:J=!1,pinRows:L=!1,empty:A=j("nodata")(),...Q}=f,G=()=>{let P=T(J)?"table-zebra":"",S=T(L)?"table-pin-rows":"";return Z("table",M,P,S)},B=W||((P,S)=>P.id||S);return Tag("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[Tag("table",{...Q,class:G},[Tag("thead",{},[Tag("tr",{},E.map((P)=>Tag("th",{class:P.class||""},P.label)))]),Tag("tbody",{},[For(_,(P,S)=>{let K=()=>{let X=T(_),q=B(P,S);return X.find((D,w)=>B(D,w)===q)||P};return Tag("tr",{class:"hover"},E.map((X)=>{let q=()=>{let D=K();if(X.render)return X.render(D,S);return T(D[X.key])};return Tag("td",{class:X.class||""},[q])}))},B),If(()=>T(_).length===0,()=>Tag("tr",{},[Tag("td",{colspan:E.length,class:"text-center p-10 opacity-50"},[T(A)])]))])])])};var Y_={};R(Y_,{Tabs:()=>K_});var K_=(f)=>{let{items:M,class:_,onTabClose:E,...W}=f,J=typeof M==="function"?M:()=>M||[],L=p(0);m(()=>{let G=J().findIndex((B)=>T(B.active)===!0);if(G!==-1&&L()!==G)L(G)});let A=(Q,G)=>{if(G.onClose)G.onClose(G);if(E)E(G,Q);let P=J().filter((X,q)=>q!==Q);if(!(typeof M==="function"&&!M._isComputed)){console.warn("Tabs: items must be a writable signal to support closable tabs");return}if(M(P),P.length===0)return;let K=L();if(Q{let Q=J(),G=[];for(let B=0;B{C.stopPropagation(),A(B,P)};let Y=h("span",{class:"flex items-center"},[K,U]);X.push(Y)}else X.push(K);let q=h("button",{class:()=>Z("tab",L()===B?"tab-active":""),onclick:(U)=>{if(U.preventDefault(),!T(P.disabled)){if(P.onclick)P.onclick();L(B)}}},X),D=P.tip?h("div",{class:"tooltip","data-tip":P.tip},q):q;G.push(D);let w,I=T(P.content);if(typeof I==="function")w=I();else if(I instanceof Node)w=I;else w=document.createTextNode(String(I));let n=h("div",{class:"tab-content-inner"},w),o=h("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>L()===B?"display: block":"display: none"},n);G.push(o)}return G})};var q_={};R(q_,{Timeline:()=>S_});var S_=(f)=>{let{class:M,items:_=[],vertical:E=!0,compact:W=!1,...J}=f,L={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return Tag("ul",{...J,class:()=>Z(`timeline ${T(E)?"timeline-vertical":"timeline-horizontal"} ${T(W)?"timeline-compact":""}`,M)},()=>{let A=(typeof _==="function"?_():_)||[];return A.map((Q,G)=>{let B=G===0,P=G===A.length-1,S=Q.type||"success",K=()=>T(Q.completed),X=()=>G>0&&T(A[G-1].completed),q=(D)=>typeof D==="function"?D():D;return Tag("li",{class:"flex-1"},[!B?Tag("hr",{class:()=>X()?"bg-primary":""}):null,Tag("div",{class:"timeline-start"},[()=>q(Q.title)]),Tag("div",{class:"timeline-middle"},[()=>Q.icon?z(Q.icon):z(L[S]||L.success)]),Tag("div",{class:"timeline-end timeline-box shadow-sm"},[()=>q(Q.detail)]),!P?Tag("hr",{class:()=>K()?"bg-primary":""}):null])})})};var R_={};R(R_,{Toast:()=>C_});var C_=(f,M="alert-success",_=3500)=>{let E=document.getElementById("sigpro-toast-container");if(!E)E=Tag("div",{id:"sigpro-toast-container",class:"fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none"}),document.body.appendChild(E);let W=Tag("div",{style:"display: contents"});E.appendChild(W);let J,L=()=>{clearTimeout(J);let G=W.firstElementChild;if(G&&!G.classList.contains("opacity-0"))G.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(Q.destroy(),W.remove(),!E.hasChildNodes())E.remove()},300);else Q.destroy(),W.remove()},A=()=>{let G=z("icon-[lucide--x]"),B=Tag("div",{class:`alert alert-soft ${M} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[Tag("span",{},[typeof f==="function"?f():f]),r({class:"btn-xs btn-circle btn-ghost",onclick:L},G)]);return requestAnimationFrame(()=>B.classList.remove("translate-x-10","opacity-0")),B},Q=Mount(A,W);if(_>0)J=setTimeout(L,_);return L};var D_={};R(D_,{Tooltip:()=>z_});var z_=(f,M)=>Tag("div",{...f,class:()=>Z("tooltip w-full",f.class),"data-tip":f.tip},M);var k_={...Zf,...Yf,...Cf,...zf,...Df,...Vf,...Ff,...hf,...Hf,...wf,...yf,...mf,...gf,...bf,...Sf,...df,...nf,...lf,...tf,...ef,...__,...E_,...L_,...W_,...Q_,...P_,...B_,...Z_,...Y_,...q_,...R_,...D_},r_={...k_,install:(f=window)=>{Object.entries(k_).forEach(([M,_])=>{f[M]=_}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(_f).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.entries(ff).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.defineProperty(window,"tt",{value:j,writable:!1,configurable:!0,enumerable:!0}),Object.defineProperty(window,"SigProUI",{value:{..._f,Utils:ff,tt:j},writable:!1,configurable:!0,enumerable:!0}),console.log("\uD83C\uDFA8 SigProUI ready");})(); + ${J()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} + `,ondragover:(K)=>{K.preventDefault(),J(!0)},ondragleave:()=>J(!1),ondrop:(K)=>{K.preventDefault(),J(!1),T(K.dataTransfer.files)}},[Tag("div",{class:"flex items-center gap-3 w-full"},[z("icon-[lucide--upload]"),Tag("span",{class:"text-sm opacity-70 truncate grow text-left"},"Arrastra o selecciona archivos..."),Tag("span",{class:"text-[10px] opacity-40 shrink-0"},`Máx ${E}MB`)]),Tag("input",{type:"file",multiple:!0,accept:L,class:"hidden",onchange:(K)=>T(K.target.files)})])]),()=>Q()?Tag("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},Q()):null,If(()=>W().length>0,()=>Tag("ul",{class:"mt-2 space-y-1"},[For(W,(K,G)=>Tag("li",{class:"flex items-center justify-between p-1.5 pl-3 text-xs bg-base-200/50 rounded-md border border-base-300"},[Tag("div",{class:"flex items-center gap-2 truncate"},[Tag("span",{class:"opacity-50"},"\uD83D\uDCC4"),Tag("span",{class:"truncate font-medium max-w-[200px]"},K.name),Tag("span",{class:"text-[9px] opacity-40"},`(${(K.size/1024).toFixed(0)} KB)`)]),Tag("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(q)=>{q.preventDefault(),q.stopPropagation(),Y(G)}},[z("icon-[lucide--x]")])]),(K)=>K.name+K.lastModified)]))])};var nf={};R(nf,{Indicator:()=>df});var df=(f,M)=>{let{value:_,class:E,...L}=f;return Tag("div",{...L,class:"indicator"},()=>[_?Tag("span",{class:Z("indicator-item badge",E)},()=>typeof _==="function"?_():_):null,M].filter(Boolean))};var lf={};R(lf,{Label:()=>of});var of=(f)=>{let{children:M,value:_,floating:E=!1,class:L,...A}=f;if(E)return Tag("label",{class:Z("floating-label",L),...A},()=>[typeof M==="function"?M():M,_?Tag("span",{},B(_)):null]);return Tag("label",{class:Z("label",L),...A},()=>[_?Tag("span",{class:"label-text"},B(_)):null,typeof M==="function"?M():M])};var tf={};R(tf,{List:()=>sf});var sf=(f)=>{let{class:M,items:_,header:E,render:L=(J)=>J,keyFn:A=(J,Q)=>J.id??Q,...P}=f,W=For(_,(J,Q)=>Tag("li",{class:"list-row",style:"width: 100%; display: block;"},[Tag("div",{style:"width: 100%;"},[L(J,Q)])]),A);return Tag("ul",{...P,style:"display: block; width: 100%;",class:Z("list bg-base-100 rounded-box shadow-md",M)},E?[If(E,()=>Tag("li",{class:"p-4 pb-2 text-xs opacity-60",style:"width: 100%;"},[B(E)])),W]:W)};var ef={};R(ef,{Menu:()=>af});var af=(f)=>{let{class:M,items:_,...E}=f,L=(A)=>For(()=>A||[],(P)=>Tag("li",{},[P.children?Tag("details",{open:P.open},[Tag("summary",{},[P.icon&&Tag("span",{class:"mr-2"},P.icon),P.label]),Tag("ul",{},L(P.children))]):Tag("a",{class:()=>B(P.active)?"active":"",onclick:P.onclick},[P.icon&&Tag("span",{class:"mr-2"},P.icon),P.label])]),(P,W)=>P.label||W);return Tag("ul",{...E,class:Z("menu bg-base-200 rounded-box",M)},L(_))};var __={};R(__,{Modal:()=>f_});var f_=(f,M)=>{let{class:_,title:E,buttons:L,open:A,...P}=f,W=null,J=()=>{let X=typeof A==="function"?A():A;if(!W)return;if(X){if(!W.open)W.showModal()}else if(W.open)W.close()};Watch(()=>J());let Q=()=>{if(typeof A==="function")A(!1)};return Tag("dialog",{...P,ref:(X)=>{if(W=X,X)J()},class:Z("modal",_),onclose:Q,oncancel:Q},[Tag("div",{class:"modal-box"},[E?Tag("h3",{class:"text-lg font-bold mb-4"},()=>typeof E==="function"?E():E):null,Tag("div",{class:"py-2"},[typeof M==="function"?M():M]),Tag("div",{class:"modal-action"},[Tag("form",{method:"dialog",class:"flex gap-2"},[...(Array.isArray(L)?L:[L]).filter(Boolean),o({type:"submit"},w("close")())])])]),Tag("form",{method:"dialog",class:"modal-backdrop"},[Tag("button",{},"close")])])};var E_={};R(E_,{Navbar:()=>M_});var M_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:Z("navbar bg-base-100 shadow-sm px-4",_)},M)};var L_={};R(L_,{Radio:()=>$_});var $_=(f)=>{let{class:M,label:_,tooltip:E,value:L,inputValue:A,name:P,...W}=f,J=Tag("input",{...W,type:"radio",name:P,class:Z("radio",M),checked:()=>B(L)===A,onclick:()=>{if(typeof L==="function")L(A)}});if(!_&&!E)return J;let Q=Tag("label",{class:"label cursor-pointer justify-start gap-3"},[J,_?Tag("span",{class:"label-text"},_):null]);return E?Tag("div",{class:"tooltip","data-tip":E},Q):Q};var W_={};R(W_,{Range:()=>A_});var A_=(f)=>{let{class:M,label:_,tooltip:E,value:L,...A}=f,P=Tag("input",{...A,type:"range",class:Z("range",M),value:L,disabled:()=>B(f.disabled)});if(!_&&!E)return P;let W=Tag("div",{class:"flex flex-col gap-2"},[_?Tag("span",{class:"label-text"},_):null,P]);return E?Tag("div",{class:"tooltip","data-tip":E},W):W};var J_={};R(J_,{Rating:()=>P_});var P_=(f)=>{let{class:M,value:_,count:E=5,mask:L="mask-star",readonly:A=!1,onchange:P,...W}=f,J=`rating-${Math.random().toString(36).slice(2,7)}`;return Tag("div",{...W,class:()=>Z(`rating ${B(A)?"pointer-events-none":""}`,M)},Array.from({length:B(E)},(Q,X)=>{let T=X+1;return Tag("input",{type:"radio",name:J,class:`mask ${L}`,checked:()=>Math.round(B(_))===T,onchange:()=>{if(!B(A)){if(typeof P==="function")P(T);else if(typeof _==="function")_(T)}}})}))};var T_={};R(T_,{Select:()=>Q_});var Q_=(f)=>{let{class:M,label:_,items:E,value:L,...A}=f,P=Tag("select",{...A,class:Z("select select-bordered w-full",M),value:L},For(()=>B(E)||[],(W)=>Tag("option",{value:W.value,$selected:()=>String(B(L))===String(W.value)},W.label),(W)=>W.value));if(!_)return P;return Tag("label",{class:"fieldset-label flex flex-col gap-1"},[Tag("span",{},_),P])};var G_={};R(G_,{Stack:()=>B_});var B_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:Z("stack",_)},M)};var Z_={};R(Z_,{Stat:()=>X_});var X_=(f)=>{let{class:M,icon:_,label:E,value:L,desc:A,...P}=f;return Tag("div",{...P,class:Z("stat",M)},[_&&Tag("div",{class:"stat-figure text-secondary"},_),E&&Tag("div",{class:"stat-title"},E),Tag("div",{class:"stat-value"},()=>B(L)??L),A&&Tag("div",{class:"stat-desc"},A)])};var S_={};R(S_,{Swap:()=>K_});var K_=(f)=>{let{class:M,value:_,on:E,off:L,...A}=f;return Tag("label",{...A,class:Z("swap",M)},[Tag("input",{type:"checkbox",checked:()=>B(_),onclick:(P)=>{if(typeof _==="function")_(P.target.checked)}}),Tag("div",{class:"swap-on"},E),Tag("div",{class:"swap-off"},L)])};var q_={};R(q_,{Table:()=>Y_});var Y_=(f)=>{let{class:M,items:_=[],columns:E=[],keyFn:L,zebra:A=!1,pinRows:P=!1,empty:W=w("nodata")(),...J}=f,Q=()=>{let T=B(A)?"table-zebra":"",Y=B(P)?"table-pin-rows":"";return Z("table",M,T,Y)},X=L||((T,Y)=>T.id||Y);return Tag("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[Tag("table",{...J,class:Q},[Tag("thead",{},[Tag("tr",{},E.map((T)=>Tag("th",{class:T.class||""},T.label)))]),Tag("tbody",{},[For(_,(T,Y)=>{let K=()=>{let G=B(_),q=X(T,Y);return G.find((D,y)=>X(D,y)===q)||T};return Tag("tr",{class:"hover"},E.map((G)=>{let q=()=>{let D=K();if(G.render)return G.render(D,Y);return B(D[G.key])};return Tag("td",{class:G.class||""},[q])}))},X),If(()=>B(_).length===0,()=>Tag("tr",{},[Tag("td",{colspan:E.length,class:"text-center p-10 opacity-50"},[B(W)])]))])])])};var R_={};R(R_,{Tabs:()=>C_});var C_=(f)=>{let{items:M,class:_,onTabClose:E,...L}=f,A=typeof M==="function"?M:()=>M||[],P=d(0);v(()=>{let Q=A().findIndex((X)=>B(X.active)===!0);if(Q!==-1&&P()!==Q)P(Q)});let W=(J,Q)=>{if(Q.onClose)Q.onClose(Q);if(E)E(Q,J);let T=A().filter((G,q)=>q!==J);if(!(typeof M==="function"&&!M._isComputed)){console.warn("Tabs: items must be a writable signal to support closable tabs");return}if(M(T),T.length===0)return;let K=P();if(J{let J=A(),Q=[];for(let X=0;X{C.stopPropagation(),W(X,T)};let S=U("span",{class:"flex items-center"},[K,F]);G.push(S)}else G.push(K);let q=U("button",{class:()=>Z("tab",P()===X?"tab-active":""),onclick:(F)=>{if(F.preventDefault(),!B(T.disabled)){if(T.onclick)T.onclick();P(X)}}},G),D=T.tip?U("div",{class:"tooltip","data-tip":T.tip},q):q;Q.push(D);let y,u=B(T.content);if(typeof u==="function")y=u();else if(u instanceof Node)y=u;else y=document.createTextNode(String(u));let i=U("div",{class:"tab-content-inner"},y),l=U("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>P()===X?"display: block":"display: none"},i);Q.push(l)}return Q})};var D_={};R(D_,{Timeline:()=>z_});var z_=(f)=>{let{class:M,items:_=[],vertical:E=!0,compact:L=!1,...A}=f,P={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return Tag("ul",{...A,class:()=>Z(`timeline ${B(E)?"timeline-vertical":"timeline-horizontal"} ${B(L)?"timeline-compact":""}`,M)},()=>{let W=(typeof _==="function"?_():_)||[];return W.map((J,Q)=>{let X=Q===0,T=Q===W.length-1,Y=J.type||"success",K=()=>B(J.completed),G=()=>Q>0&&B(W[Q-1].completed),q=(D)=>typeof D==="function"?D():D;return Tag("li",{class:"flex-1"},[!X?Tag("hr",{class:()=>G()?"bg-primary":""}):null,Tag("div",{class:"timeline-start"},[()=>q(J.title)]),Tag("div",{class:"timeline-middle"},[()=>J.icon?z(J.icon):z(P[Y]||P.success)]),Tag("div",{class:"timeline-end timeline-box shadow-sm"},[()=>q(J.detail)]),!T?Tag("hr",{class:()=>K()?"bg-primary":""}):null])})})};var h_={};R(h_,{Toast:()=>N_});var N_=(f,M="alert-success",_=3500)=>{let E=document.getElementById("sigpro-toast-container");if(!E)E=Tag("div",{id:"sigpro-toast-container",class:"fixed top-0 right-0 z-[9999] p-4 flex flex-col gap-2 pointer-events-none"}),document.body.appendChild(E);let L=Tag("div",{style:"display: contents"});E.appendChild(L);let A,P=()=>{clearTimeout(A);let Q=L.firstElementChild;if(Q&&!Q.classList.contains("opacity-0"))Q.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(J.destroy(),L.remove(),!E.hasChildNodes())E.remove()},300);else J.destroy(),L.remove()},W=()=>{let Q=z("icon-[lucide--x]"),X=Tag("div",{class:`alert alert-soft ${M} shadow-lg transition-all duration-300 translate-x-10 opacity-0 pointer-events-auto`},[Tag("span",{},[typeof f==="function"?f():f]),o({class:"btn-xs btn-circle btn-ghost",onclick:P},Q)]);return requestAnimationFrame(()=>X.classList.remove("translate-x-10","opacity-0")),X},J=Mount(W,L);if(_>0)A=setTimeout(P,_);return P};var V_={};R(V_,{Tooltip:()=>O_});var O_=(f,M)=>Tag("div",{...f,class:()=>Z("tooltip w-full",f.class),"data-tip":f.tip},M);var x_={...qf,...Rf,...Nf,...Of,...Vf,...Uf,...kf,...wf,...xf,...mf,...gf,...pf,...rf,...nf,...zf,...lf,...tf,...ef,...__,...E_,...L_,...W_,...J_,...T_,...G_,...Z_,...S_,...q_,...R_,...D_,...h_,...V_},l_={...x_,install:(f=window)=>{Object.entries(x_).forEach(([M,_])=>{f[M]=_}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(Ef).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.entries(Mf).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.defineProperty(window,"tt",{value:w,writable:!1,configurable:!0,enumerable:!0}),Object.defineProperty(window,"SigProUI",{value:{...Ef,Utils:Mf,tt:w},writable:!1,configurable:!0,enumerable:!0}),console.log("\uD83C\uDFA8 SigProUI ready");})(); diff --git a/docs/sigpro-ui.min.js b/docs/sigpro-ui.min.js index 037428d..d5fc49b 100644 --- a/docs/sigpro-ui.min.js +++ b/docs/sigpro-ui.min.js @@ -84,7 +84,10 @@ 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 dispose = (eff) => { if (!eff || eff._disposed) @@ -115,16 +118,6 @@ if (activeOwner) (activeOwner._cleanups ||= new Set).add(fn); }; - var set = (signal, path, value) => { - if (value === undefined) - return signal(isFunc(path) ? path(signal()) : path); - const keys = path.split("."), root = { ...signal() }; - let acc = root, k; - for (k of keys.slice(0, -1)) - acc = acc[k] = { ...acc[k] || {} }; - acc[keys.at(-1)] = value; - signal(root); - }; var untrack = (fn) => { const p = activeEffect; activeEffect = null; @@ -177,6 +170,17 @@ 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); @@ -195,7 +199,7 @@ hasQueue = true; } }); - if (hasQueue && !isFlushing) + if (hasQueue && !isFlushing && batchDepth === 0) queueMicrotask(flush); } }; @@ -259,6 +263,49 @@ return val; }; }; + var $$ = (target) => { + if (!isObj(target)) + return target; + if (proxyCache.has(target)) + return proxyCache.get(target); + const subsMap = new Map; + const getSubs = (k) => { + let s = subsMap.get(k); + if (!s) + subsMap.set(k, s = new Set); + return s; + }; + const proxy = new Proxy(target, { + get(t, k) { + trackUpdate(getSubs(k)); + return $$(t[k]); + }, + set(t, k, v) { + const isNew = !(k in t); + if (!Object.is(t[k], v)) { + t[k] = v; + trackUpdate(getSubs(k), true); + if (isNew) + trackUpdate(getSubs(ITER), true); + } + return true; + }, + deleteProperty(t, k) { + const res = Reflect.deleteProperty(t, k); + if (res) { + trackUpdate(getSubs(k), true); + trackUpdate(getSubs(ITER), true); + } + return res; + }, + ownKeys(t) { + trackUpdate(getSubs(ITER)); + return Reflect.ownKeys(t); + } + }); + proxyCache.set(target, proxy); + return proxy; + }; var Watch2 = (sources, cb) => { if (cb === undefined) { const effect2 = createEffect(sources); @@ -453,42 +500,22 @@ } }; }; - var If2 = (cond, ifYes, ifNot = null, trans = null) => { + var If2 = (cond, ifYes, ifNot = null) => { const anchor = doc.createTextNode(""); const root = Tag2("div", { style: "display:contents" }, [anchor]); let currentView = null; - let last = null; - let exitPromise = null; Watch2(() => !!(isFunc(cond) ? cond() : cond), (show) => { - if (show === last) - return; - last = show; - const disposeView = () => { - if (currentView) { - currentView.destroy(); - currentView = null; - } - }; - if (currentView && !show && trans?.out) { - if (exitPromise && exitPromise.cancel) - exitPromise.cancel(); - const anim = trans.out(currentView.container, disposeView); - exitPromise = anim; - if (anim && anim.finished) - anim.finished.then(disposeView); - else - disposeView(); - } else { - disposeView(); + if (currentView) { + currentView.destroy(); + currentView = null; } const content = show ? ifYes : ifNot; if (content) { currentView = Render(() => isFunc(content) ? content() : content); root.insertBefore(currentView.container, anchor); - if (trans?.in) - trans.in(currentView.container); } }); + onUnmount(() => currentView?.destroy()); return root; }; var For2 = (src, itemFn, keyFn) => { @@ -567,7 +594,7 @@ MOUNTED_NODES.set(t, inst); return inst; }; - var SigPro = Object.freeze({ $: $2, Watch: Watch2, Tag: Tag2, Render, If: If2, For: For2, Router, Mount: Mount2, onMount, onUnmount, set }); + var SigPro = Object.freeze({ $: $2, $$, Watch: Watch2, Tag: Tag2, Render, If: If2, For: For2, Router, Mount: Mount2, onMount, onUnmount, Batch }); if (typeof window !== "undefined") { Object.assign(window, SigPro); "div span p h1 h2 h3 h4 h5 h6 br hr section article aside nav main header footer ul ol li a em strong pre code form label input textarea select button img svg".split(" ").forEach((t) => window[t[0].toUpperCase() + t.slice(1)] = (p, c) => SigPro.Tag(t, p, c)); diff --git a/src/sigpro.js b/src/sigpro.js index dbf9a79..74ce884 100644 --- a/src/sigpro.js +++ b/src/sigpro.js @@ -8,10 +8,12 @@ const ensureNode = n => n?._isRuntime ? n.container : (n instanceof Node ? n : d let activeEffect = null let activeOwner = null let isFlushing = false +let batchDepth = 0 const effectQueue = new Set() +const proxyCache = new WeakMap() +const ITER = Symbol('iter') const MOUNTED_NODES = new WeakMap() -// effect cleanup const dispose = eff => { if (!eff || eff._disposed) return eff._disposed = true @@ -33,7 +35,6 @@ const dispose = eff => { } } -// helpers const onMount = fn => { if (activeOwner) (activeOwner._mounts ||= []).push(fn) } @@ -42,42 +43,32 @@ const onUnmount = fn => { if (activeOwner) (activeOwner._cleanups ||= new Set()).add(fn) } -const set = (signal, path, value) => { - if (value === undefined) return signal(isFunc(path) ? path(signal()) : path) - const keys = path.split('.'), root = { ...signal() } - let acc = root, k - for (k of keys.slice(0, -1)) acc = acc[k] = { ...(acc[k] || {}) } - acc[keys.at(-1)] = value - signal(root) -} - const untrack = fn => { const p = activeEffect activeEffect = null try { return fn() } finally { activeEffect = p } } -// effect creation const 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() + 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 + } } - 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 @@ -97,6 +88,18 @@ const flush = () => { isFlushing = false } +const Batch = fn => { + batchDepth++ + try { + return fn() + } finally { + batchDepth-- + if (batchDepth === 0 && effectQueue.size > 0 && !isFlushing) { + flush() + } + } +} + const trackUpdate = (subs, trigger = false) => { if (!trigger && activeEffect && !activeEffect._disposed) { subs.add(activeEffect) @@ -113,11 +116,10 @@ const trackUpdate = (subs, trigger = false) => { hasQueue = true } }) - if (hasQueue && !isFlushing) queueMicrotask(flush) + if (hasQueue && !isFlushing && batchDepth === 0) queueMicrotask(flush) } } -// signal creation const $ = (val, key = null) => { const subs = new Set() if (isFunc(val)) { @@ -170,7 +172,50 @@ const $ = (val, key = null) => { } } -// create Watch +const $$ = (target) => { + if (!isObj(target)) return target + + if (proxyCache.has(target)) return proxyCache.get(target) + + const subsMap = new Map() + const getSubs = (k) => { + let s = subsMap.get(k) + if (!s) subsMap.set(k, s = new Set()) + return s + } + + const proxy = new Proxy(target, { + get(t, k) { + trackUpdate(getSubs(k)) + return $$(t[k]) + }, + set(t, k, v) { + const isNew = !(k in t) + if (!Object.is(t[k], v)) { + t[k] = v + trackUpdate(getSubs(k), true) + if (isNew) trackUpdate(getSubs(ITER), true) + } + return true + }, + deleteProperty(t, k) { + const res = Reflect.deleteProperty(t, k) + if (res) { + trackUpdate(getSubs(k), true) + trackUpdate(getSubs(ITER), true) + } + return res + }, + ownKeys(t) { + trackUpdate(getSubs(ITER)) + return Reflect.ownKeys(t) + } + }) + + proxyCache.set(target, proxy) + return proxy +} + const Watch = (sources, cb) => { if (cb === undefined) { const effect = createEffect(sources) @@ -209,42 +254,41 @@ const validateAttr = (key, val) => { return val } -// create Tag const Tag = (tag, props = {}, children = []) => { if (props instanceof Node || isArr(props) || !isObj(props)) { children = props props = {} } if (isFunc(tag)) { - const ctx = { _mounts: [], _cleanups: new Set() } - const effect = createEffect(() => { - const result = tag(props, { - children, - emit: (ev, ...args) => props[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...args) + const ctx = { _mounts: [], _cleanups: new Set() } + const effect = createEffect(() => { + const result = tag(props, { + children, + emit: (ev, ...args) => props[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...args) + }) + effect._result = result + return result }) - effect._result = result - return result - }) - effect() - - const result = effect._result - if (result == null) return null + effect() - 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 + 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 } - - isArr(node) ? node.forEach(attach) : attach(node) - return node -} const isSVG = /^(svg|path|circle|rect|line|polyline|polygon|g|defs|text|tspan|use)$/.test(tag) const el = isSVG ? doc.createElementNS("http://www.w3.org/2000/svg", tag) : doc.createElement(tag) el._cleanups = new Set() @@ -322,7 +366,6 @@ const Tag = (tag, props = {}, children = []) => { return el } -// create Render const Render = renderFn => { const cleanups = new Set() const mounts = [] @@ -330,7 +373,7 @@ const Render = renderFn => { const previousEffect = activeEffect const container = doc.createElement("div") container.style.display = "contents" - container.setAttribute("role", "presentation") // ← único cambio real + container.setAttribute("role", "presentation") activeOwner = { _cleanups: cleanups, _mounts: mounts } activeEffect = null @@ -365,49 +408,31 @@ const Render = renderFn => { } } -// create If -const If = (cond, ifYes, ifNot = null, trans = null) => { +const If = (cond, ifYes, ifNot = null) => { const anchor = doc.createTextNode("") const root = Tag("div", { style: "display:contents" }, [anchor]) let currentView = null - let last = null - let exitPromise = null Watch( () => !!(isFunc(cond) ? cond() : cond), show => { - if (show === last) return - last = show - - const disposeView = () => { - if (currentView) { - currentView.destroy() - currentView = null - } - } - - if (currentView && !show && trans?.out) { - if (exitPromise && exitPromise.cancel) exitPromise.cancel() - const anim = trans.out(currentView.container, disposeView) - exitPromise = anim - if (anim && anim.finished) anim.finished.then(disposeView) - else disposeView() - } else { - disposeView() + if (currentView) { + currentView.destroy() + currentView = null } const content = show ? ifYes : ifNot if (content) { currentView = Render(() => isFunc(content) ? content() : content) root.insertBefore(currentView.container, anchor) - if (trans?.in) trans.in(currentView.container) } } ) + + onUnmount(() => currentView?.destroy()) return root } -// create For const For = (src, itemFn, keyFn) => { const anchor = doc.createTextNode("") const root = Tag("div", { style: "display:contents" }, [anchor]) @@ -438,7 +463,6 @@ const For = (src, itemFn, keyFn) => { return root } -// create Router const Router = routes => { const getHash = () => window.location.hash.slice(1) || "/" const path = $(getHash()) @@ -482,7 +506,7 @@ const Mount = (comp, target) => { return inst } -const SigPro = Object.freeze({ $, Watch, Tag, Render, If, For, Router, Mount, onMount, onUnmount, set }) +const SigPro = Object.freeze({ $, $$, Watch, Tag, Render, If, For, Router, Mount, onMount, onUnmount, Batch }) if (typeof window !== "undefined") { Object.assign(window, SigPro) @@ -490,5 +514,5 @@ if (typeof window !== "undefined") { .split(" ").forEach(t => window[t[0].toUpperCase() + t.slice(1)] = (p, c) => SigPro.Tag(t, p, c)) } -export { $, Watch, Tag, Render, If, For, Router, Mount, onMount, onUnmount, set } +export { $, $$, Watch, Tag, Render, If, For, Router, Mount, onMount, onUnmount, Batch } export default SigPro \ No newline at end of file