From 3c1f14415ef7a76547e4d45243f41b7d0cf09a42 Mon Sep 17 00:00:00 2001 From: natxocc Date: Mon, 13 Apr 2026 10:49:46 +0200 Subject: [PATCH] upt --- dist/sigpro-ui.esm.js | 57 ++-- dist/sigpro-ui.esm.min.js | 6 +- dist/sigpro-ui.js | 57 ++-- dist/sigpro-ui.min.js | 6 +- docs/sigpro-ui.min.js | 57 ++-- index.js | 4 +- src/sigpro.js | 662 +++++++++++++++++++++----------------- 7 files changed, 441 insertions(+), 408 deletions(-) diff --git a/dist/sigpro-ui.esm.js b/dist/sigpro-ui.esm.js index 21370bb..1251b0d 100644 --- a/dist/sigpro-ui.esm.js +++ b/dist/sigpro-ui.esm.js @@ -10,10 +10,10 @@ var __export = (target, all) => { }; // src/sigpro.js -var doc = typeof document !== "undefined" ? document : null; -var isArr = Array.isArray; var isFunc = (f) => typeof f === "function"; var isObj = (o) => o && typeof o === "object"; +var isArr = Array.isArray; +var doc = typeof document !== "undefined" ? document : null; var ensureNode = (n) => n?._isRuntime ? n.container : n instanceof Node ? n : doc.createTextNode(n == null ? "" : String(n)); var activeEffect = null; var activeOwner = null; @@ -55,7 +55,8 @@ var createEffect = (fn, isComputed = false) => { effect._cleanups.forEach((cl) => cl()); effect._cleanups.clear(); } - const prevEffect = activeEffect, prevOwner = activeOwner; + const prevEffect = activeEffect; + const prevOwner = activeOwner; activeEffect = activeOwner = effect; try { const res = isComputed ? fn() : (fn(), undefined); @@ -183,29 +184,6 @@ var $2 = (val, key = null) => { return val; }; }; -var $$ = (obj, cache = new WeakMap) => { - if (!isObj(obj)) - return obj; - if (cache.has(obj)) - return cache.get(obj); - const subs = {}; - const proxy = new Proxy(obj, { - get: (t, k) => { - trackUpdate(subs[k] ??= new Set); - return isObj(t[k]) ? $$(t[k], cache) : t[k]; - }, - set: (t, k, v) => { - if (!Object.is(t[k], v)) { - t[k] = v; - if (subs[k]) - trackUpdate(subs[k], true); - } - return true; - } - }); - cache.set(obj, proxy); - return proxy; -}; var Watch2 = (sources, cb) => { if (cb === undefined) { const effect2 = createEffect(sources); @@ -251,7 +229,10 @@ var Tag2 = (tag, props = {}, children = []) => { if (isFunc(tag)) { const ctx = { _mounts: [], _cleanups: new Set }; const effect = createEffect(() => { - const result2 = tag(props, { children, emit: (ev, ...args) => props[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...args) }); + const result2 = tag(props, { + children, + emit: (ev, ...args) => props[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...args) + }); effect._result = result2; return result2; }); @@ -361,6 +342,7 @@ var Render = (renderFn) => { const previousOwner = activeOwner; const container = doc.createElement("div"); container.style.display = "contents"; + container.setAttribute("role", "presentation"); activeOwner = { _cleanups: cleanups, _mounts: mounts }; const processResult = (result) => { if (!result) @@ -393,7 +375,9 @@ var Render = (renderFn) => { var If2 = (cond, ifYes, ifNot = null, trans = null) => { const anchor = doc.createTextNode(""); const root = Tag2("div", { style: "display:contents" }, [anchor]); - let currentView = null, last = null; + let currentView = null; + let last = null; + let exitPromise = null; Watch2(() => !!(isFunc(cond) ? cond() : cond), (show) => { if (show === last) return; @@ -404,10 +388,18 @@ var If2 = (cond, ifYes, ifNot = null, trans = null) => { currentView = null; } }; - if (currentView && !show && trans?.out) - trans.out(currentView.container, disposeView); - else + 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(); + } const content = show ? ifYes : ifNot; if (content) { currentView = Render(() => isFunc(content) ? content() : content); @@ -494,7 +486,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 }); +var SigPro = Object.freeze({ $: $2, Watch: Watch2, Tag: Tag2, Render, If: If2, For: For2, Router, Mount: Mount2, onMount, onUnmount }); 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)); @@ -1995,6 +1987,5 @@ export { Autocomplete, Alert, Accordion, - $$, $2 as $ }; diff --git a/dist/sigpro-ui.esm.min.js b/dist/sigpro-ui.esm.min.js index fffc235..a07dbdd 100644 --- a/dist/sigpro-ui.esm.min.js +++ b/dist/sigpro-ui.esm.min.js @@ -1,7 +1,7 @@ -var w_=Object.defineProperty;var q=(f,M)=>{for(var _ in M)w_(f,_,{get:M[_],enumerable:!0,configurable:!0,set:(E)=>M[_]=()=>E})};var H=typeof document<"u"?document:null,g=Array.isArray,h=(f)=>typeof f==="function",Wf=(f)=>f&&typeof f==="object",rf=(f)=>f?._isRuntime?f.container:f instanceof Node?f:H.createTextNode(f==null?"":String(f)),O=null,F=null,s=!1,Bf=new Set,Lf=new WeakMap,u=(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()}},c=(f)=>{if(F)(F._cleanups||=new Set).add(f)},r=(f,M=!1)=>{let _=()=>{if(_._disposed)return;if(_._deps)_._deps.forEach((L)=>L.delete(_));if(_._cleanups)_._cleanups.forEach((L)=>L()),_._cleanups.clear();let E=O,A=F;O=F=_;try{let L=M?f():(f(),void 0);if(!M)_._result=L;return L}finally{O=E,F=A}};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 _},j_=()=>{if(s)return;s=!0;let f=Array.from(Bf).sort((M,_)=>M._depth-_._depth);Bf.clear();for(let M of f)if(!M._disposed)M();s=!1},m=(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)m(E._subs,!0)}else Bf.add(E),_=!0}),_&&!s)queueMicrotask(j_)}},x_=(f)=>{let M=O;O=null;try{return f()}finally{O=M}},y_=(f)=>{if(F)(F._mounts||=[]).push(f)},a=(f,M=null)=>{let _=new Set;if(h(f)){let E,A=!0,L=()=>{if(A){let T=O;O=L;try{let W=f();if(!Object.is(E,W))E=W,A=!1,m(_,!0)}finally{O=T}}return m(_),E};if(L._isComputed=!0,L._subs=_,L._dirty=!0,L._deps=null,L._disposed=!1,L.markDirty=()=>{A=!0},L.stop=()=>{if(L._disposed=!0,L._deps)L._deps.forEach((T)=>T.delete(L)),L._deps.clear();_.clear()},F)c(L.stop);return L}if(M)try{f=JSON.parse(localStorage.getItem(M))??f}catch(E){}return(...E)=>{if(E.length){let A=h(E[0])?E[0](f):E[0];if(!Object.is(f,A)){if(f=A,M)localStorage.setItem(M,JSON.stringify(f));m(_,!0)}}return m(_),f}},Jf=(f,M=new WeakMap)=>{if(!Wf(f))return f;if(M.has(f))return M.get(f);let _={},E=new Proxy(f,{get:(A,L)=>{return m(_[L]??=new Set),Wf(A[L])?Jf(A[L],M):A[L]},set:(A,L,T)=>{if(!Object.is(A[L],T)){if(A[L]=T,_[L])m(_[L],!0)}return!0}});return M.set(f,E),E},o=(f,M)=>{if(M===void 0){let E=r(f);return E(),()=>u(E)}let _=r(()=>{let E=Array.isArray(f)?f.map((A)=>A()):f();x_(()=>M(E))});return _(),()=>u(_)},Pf=(f)=>{if(f._cleanups)f._cleanups.forEach((M)=>M()),f._cleanups.clear();if(f._ownerEffect)u(f._ownerEffect);if(f.childNodes)f.childNodes.forEach(Pf)},I_=/^\s*(javascript|data|vbscript):/i,u_=(f)=>f==="src"||f==="href"||f.startsWith("on"),of=(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},i=(f,M={},_=[])=>{if(M instanceof Node||g(M)||!Wf(M))_=M,M={};if(h(f)){let T={_mounts:[],_cleanups:new Set},W=r(()=>{let P=f(M,{children:_,emit:(G,...K)=>M[`on${G[0].toUpperCase()}${G.slice(1)}`]?.(...K)});return W._result=P,P});W(),T._mounts=W._mounts||[],T._cleanups=W._cleanups||new Set;let B=W._result,J=(P)=>P&&typeof P==="object"&&!P._isRuntime&&(P._mounts=T._mounts,P._cleanups=T._cleanups,P._ownerEffect=W);if(g(B)?B.forEach(J):J(B),B==null)return null;if(B instanceof Node||g(B)&&B.every((P)=>P instanceof Node))return B;return H.createTextNode(String(B))}let E=/^(svg|path|circle|rect|line|polyline|polygon|g|defs|text|tspan|use)$/.test(f),A=E?H.createElementNS("http://www.w3.org/2000/svg",f):H.createElement(f);A._cleanups=new Set;for(let T in M){if(!M.hasOwnProperty(T))continue;let W=M[T];if(T==="ref"){h(W)?W(A):W.current=A;continue}if(T.startsWith("on")){let B=T.slice(2).toLowerCase();A.addEventListener(B,W);let J=()=>A.removeEventListener(B,W);A._cleanups.add(J),c(J)}else if(h(W)){let B=r(()=>{let J=of(T,W());if(T==="class")A.className=J||"";else if(J==null)A.removeAttribute(T);else if(T in A&&!E)A[T]=J;else A.setAttribute(T,J===!0?"":J)});if(B(),A._cleanups.add(()=>u(B)),c(()=>u(B)),/^(INPUT|TEXTAREA|SELECT)$/.test(A.tagName)&&(T==="value"||T==="checked")){let J=T==="checked"?"change":"input";A.addEventListener(J,(P)=>W(P.target[T]))}}else{let B=of(T,W);if(B!=null)if(T in A&&!E)A[T]=B;else A.setAttribute(T,B===!0?"":B)}}let L=(T)=>{if(g(T))return T.forEach(L);if(h(T)){let W=H.createTextNode("");A.appendChild(W);let B=[],J=r(()=>{let P=T(),G=(g(P)?P:[P]).map(rf);B.forEach((Z)=>{if(Z._isRuntime)Z.destroy();else Pf(Z);if(Z.parentNode)Z.remove()});let K=W;for(let Z=G.length-1;Z>=0;Z--){let C=G[Z];if(C.parentNode!==K.parentNode)K.parentNode?.insertBefore(C,K);if(C._mounts)C._mounts.forEach((R)=>R());K=C}B=G});J(),A._cleanups.add(()=>u(J)),c(()=>u(J))}else{let W=rf(T);if(A.appendChild(W),W._mounts)W._mounts.forEach((B)=>B())}};return L(_),A},b=(f)=>{let M=new Set,_=[],E=F,A=H.createElement("div");A.style.display="contents",F={_cleanups:M,_mounts:_};let L=(T)=>{if(!T)return;if(T._isRuntime)M.add(T.destroy),A.appendChild(T.container);else if(g(T))T.forEach(L);else A.appendChild(T instanceof Node?T:H.createTextNode(String(T==null?"":T)))};try{L(f({onCleanup:(T)=>M.add(T)}))}finally{F=E}return _.forEach((T)=>T()),{_isRuntime:!0,container:A,destroy:()=>{M.forEach((T)=>T()),Pf(A),A.remove()}}},tf=(f,M,_=null,E=null)=>{let A=H.createTextNode(""),L=i("div",{style:"display:contents"},[A]),T=null,W=null;return o(()=>!!(h(f)?f():f),(B)=>{if(B===W)return;W=B;let J=()=>{if(T)T.destroy(),T=null};if(T&&!B&&E?.out)E.out(T.container,J);else J();let P=B?M:_;if(P){if(T=b(()=>h(P)?P():P),L.insertBefore(T.container,A),E?.in)E.in(T.container)}}),L},sf=(f,M,_)=>{let E=H.createTextNode(""),A=i("div",{style:"display:contents"},[E]),L=new Map;return o(()=>(h(f)?f():f)||[],(T)=>{let W=new Map,B=[],J=T||[];for(let G=0;GM(K,G));else L.delete(Z);W.set(Z,C),B.push(C)}L.forEach((G)=>G.destroy());let P=E;for(let G=B.length-1;G>=0;G--){let Z=B[G].container;if(Z.nextSibling!==P)A.insertBefore(Z,P);P=Z}L=W}),A},v=(f)=>{let M=()=>window.location.hash.slice(1)||"/",_=a(M()),E=()=>_(M());window.addEventListener("hashchange",E),c(()=>window.removeEventListener("hashchange",E));let A=i("div",{class:"router-outlet"}),L=null;return o([_],()=>{let T=_(),W=f.find((B)=>{let J=B.path.split("/").filter(Boolean),P=T.split("/").filter(Boolean);return J.length===P.length&&J.every((G,K)=>G[0]===":"||G===P[K])})||f.find((B)=>B.path==="*");if(W){L?.destroy();let B={};W.path.split("/").filter(Boolean).forEach((J,P)=>{if(J[0]===":")B[J.slice(1)]=T.split("/").filter(Boolean)[P]}),v.params(B),L=b(()=>h(W.component)?W.component(B):W.component),A.replaceChildren(L.container)}}),A};v.params=a({});v.to=(f)=>window.location.hash=f.replace(/^#?\/?/,"#/");v.back=()=>window.history.back();v.path=()=>window.location.hash.replace(/^#/,"")||"/";var af=(f,M)=>{let _=typeof M==="string"?H.querySelector(M):M;if(!_)return;if(Lf.has(_))Lf.get(_).destroy();let E=b(h(f)?f:()=>f);return _.replaceChildren(E.container),Lf.set(_,E),E},lf=Object.freeze({$:a,$$:Jf,Watch:o,Tag:i,Render:b,If:tf,For:sf,Router:v,Mount:af,onMount:y_,onUnmount:c});if(typeof window<"u")Object.assign(window,lf),"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,_)=>lf.Tag(f,M,_));var ff={};q(ff,{default:()=>g_,Tooltip:()=>U_,Toast:()=>F_,Timeline:()=>O_,Tabs:()=>V_,Table:()=>D_,Swap:()=>z_,Stat:()=>N_,Stack:()=>q_,Select:()=>R_,Rating:()=>Y_,Range:()=>K_,Radio:()=>S_,Navbar:()=>Z_,Modal:()=>X_,Menu:()=>C_,List:()=>G_,Label:()=>Q_,Input:()=>p,Indicator:()=>P_,Fileinput:()=>J_,Fieldset:()=>B_,Fab:()=>W_,Dropdown:()=>L_,Drawer:()=>A_,Datepicker:()=>$_,Colorpicker:()=>T_,Checkbox:()=>E_,Button:()=>d,Badge:()=>M_,Autocomplete:()=>__,Alert:()=>f_,Accordion:()=>ef});var Qf={};q(Qf,{Accordion:()=>ef});var e={};q(e,{val:()=>Q,ui:()=>X,getIcon:()=>N});var Q=(f)=>typeof f==="function"?f():f,X=(f,M)=>typeof M==="function"?()=>`${f} ${M()||""}`.trim():`${f} ${M||""}`.trim(),N=(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,A=_?"ml-1":"mr-1";if(E&&!E.startsWith("icon-[")&&!E.includes("--"))return Tag("span",{class:A},E);return Tag("span",{class:`${E} ${A}`.trim()})}return null};var ef=(f,M)=>{let{class:_,title:E,name:A,open:L,...T}=f;return Tag("div",{...T,class:X("collapse collapse-arrow bg-base-200 mb-2",_)},[Tag("input",{type:A?"radio":"checkbox",name:A,checked:Q(L)}),Tag("div",{class:"collapse-title text-xl font-medium"},E),Tag("div",{class:"collapse-content"},M)])};var Gf={};q(Gf,{Alert:()=>f_});var f_=(f,M)=>{let{class:_,actions:E,type:A="info",soft:L=!0,...T}=f,W={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},P=[`alert-${A}`,L?"alert-soft":"",_].filter(Boolean).join(" "),G=M||f.message;return Tag("div",{...T,role:"alert",class:X("alert",P)},()=>[N(W[A]),Tag("div",{class:"flex-1"},[Tag("span",{},[typeof G==="function"?G():G])]),E?Tag("div",{class:"flex-none"},[typeof E==="function"?E():E]):null].filter(Boolean))};var Xf={};q(Xf,{Autocomplete:()=>__});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 k=(f)=>()=>m_[v_()][f]||f;var Cf={};q(Cf,{Input:()=>p});var p=(f)=>{let{class:M,value:_,type:E="text",icon:A,oninput:L,placeholder:T,disabled:W,validate:B,label:J,...P}=f,G=E==="password",K=$(!1),Z=$(null),C={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]"},R=A?N(A):C[E]?N(C[E]):null,z=()=>N(K()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),n=R?"pl-10":"",_f=G?"pr-10":"",l=()=>{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"},t=(V)=>{let y=V.target.value;if(B){let Mf=B(y);Z(Mf||null)}L?.(V)},x=()=>Z()&&Z()!=="",S=()=>{let V=`input w-full ${n} ${_f}`;if(M)V+=` ${M}`;if(x())V+=" input-error";return V.trim()},Y=Tag("input",{...P,type:()=>G?K()?"text":"password":E,placeholder:T||(J?" ":T),class:S,value:_,oninput:t,disabled:()=>Q(W),"aria-invalid":()=>x()?"true":"false"}),D=()=>[Y,R?Tag("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},R):null,G?Tag("button",{type:"button",class:X("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",l()),onclick:(V)=>{V.preventDefault(),K(!K())}},()=>z()):null,Tag("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>x()?Z():null)];if(J)return Tag("label",{class:X("floating-label w-full",M)},()=>[Tag("div",{class:"relative w-full"},D),Tag("span",{},Q(J))]);return Tag("div",{class:"relative w-full"},D)};var __=(f)=>{let{class:M,items:_=[],value:E,onselect:A,label:L,placeholder:T,...W}=f,B=$(Q(E)||""),J=$(!1),P=$(-1),G=$(()=>{let C=B().toLowerCase(),R=Q(_)||[];return C?R.filter((z)=>(typeof z==="string"?z:z.label).toLowerCase().includes(C)):R}),K=(C)=>{let R=typeof C==="string"?C:C.value,z=typeof C==="string"?C:C.label;if(B(z),typeof E==="function")E(R);A?.(C),J(!1),P(-1)},Z=(C)=>{let R=G();if(C.key==="ArrowDown")C.preventDefault(),J(!0),P(Math.min(P()+1,R.length-1));else if(C.key==="ArrowUp")C.preventDefault(),P(Math.max(P()-1,0));else if(C.key==="Enter"&&P()>=0)C.preventDefault(),K(R[P()]);else if(C.key==="Escape")J(!1)};return Tag("div",{class:"relative w-full"},[p({label:L,class:M,placeholder:T||k("search")(),value:B,onfocus:()=>J(!0),onblur:()=>setTimeout(()=>J(!1),150),onkeydown:Z,oninput:(C)=>{let R=C.target.value;if(B(R),typeof E==="function")E(R);J(!0),P(-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:()=>J()&&G().length?"display:block":"display:none"},[For(G,(C,R)=>Tag("li",{},[Tag("a",{class:()=>`block w-full ${P()===R?"active bg-primary text-primary-content":""}`,onclick:()=>K(C),onmouseenter:()=>P(R)},typeof C==="string"?C:C.label)]),(C,R)=>(typeof C==="string"?C:C.value)+R),()=>G().length?null:Tag("li",{class:"p-2 text-center opacity-50"},k("nodata")())])])};var Zf={};q(Zf,{Badge:()=>M_});var M_=(f,M)=>{let{class:_,...E}=f;return Tag("span",{...E,class:X("badge",_)},M)};var Sf={};q(Sf,{Button:()=>d});var d=(f,M)=>{let{class:_,loading:E,icon:A,...L}=f,T=N(A);return Tag("button",{...L,class:X("btn",_),disabled:()=>Q(E)||Q(f.disabled)},()=>[Q(E)&&Tag("span",{class:"loading loading-spinner"}),T,M].filter(Boolean))};var Kf={};q(Kf,{Checkbox:()=>E_});var E_=(f)=>{let{class:M,value:_,toggle:E,label:A,...L}=f,T=Tag("input",{...L,type:"checkbox",class:()=>X(Q(E)?"toggle":"checkbox",M),checked:_});return Tag("label",{class:"label cursor-pointer justify-start gap-3"},[T,A?Tag("span",{class:"label-text"},A):null])};var Yf={};q(Yf,{Colorpicker:()=>T_});var T_=(f)=>{let{class:M,value:_,label:E,...A}=f,L=$(!1),T=["#000","#1A1A1A","#333","#4D4D4D","#666","#808080","#B3B3B3","#FFF","#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626","#ef4444","#f87171","#fca5a5","#431407","#7c2d12","#9a3412","#c2410c","#ea580c","#f97316","#fb923c","#ffedd5","#713f12","#a16207","#ca8a04","#eab308","#facc15","#fde047","#fef08a","#fff9c4","#064e3b","#065f46","#059669","#10b981","#34d399","#4ade80","#84cc16","#d9f99d","#082f49","#075985","#0284c7","#0ea5e9","#38bdf8","#7dd3fc","#22d3ee","#cffafe","#1e1b4b","#312e81","#4338ca","#4f46e5","#6366f1","#818cf8","#a5b4fc","#e0e7ff","#2e1065","#4c1d95","#6d28d9","#7c3aed","#8b5cf6","#a855f7","#d946ef","#fae8ff"],W=()=>Q(_)||"#000000";return Tag("div",{class:X("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:(B)=>{B.stopPropagation(),L(!L())},...A},[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(L,()=>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:(B)=>B.stopPropagation()},[Tag("div",{class:"grid grid-cols-8 gap-1"},T.map((B)=>Tag("button",{type:"button",style:`background-color: ${B}`,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()===B.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof _==="function")_(B);L(!1)}})))])),If(L,()=>Tag("div",{class:"fixed inset-0 z-[100]",onclick:()=>L(!1)}))])};var Rf={};q(Rf,{Datepicker:()=>$_});var $_=(f)=>{let{class:M,value:_,range:E,label:A,placeholder:L,hour:T=!1,...W}=f,B=$(!1),J=$(new Date),P=$(null),G=$(0),K=$(0),Z=()=>Q(E)===!0,C=new Date,R=`${C.getFullYear()}-${String(C.getMonth()+1).padStart(2,"0")}-${String(C.getDate()).padStart(2,"0")}`,z=(S)=>{let Y=S.getFullYear(),D=String(S.getMonth()+1).padStart(2,"0"),V=String(S.getDate()).padStart(2,"0");return`${Y}-${D}-${V}`},n=(S)=>{let Y=z(S),D=Q(_);if(Z())if(!D?.start||D.start&&D.end){if(typeof _==="function")_({start:Y,end:null,...T&&{startHour:G()}})}else{let V=D.start;if(typeof _==="function"){let y=Y{let S=Q(_);if(!S)return"";if(typeof S==="string"){if(T&&S.includes("T"))return S.replace("T"," ");return S}if(S.start&&S.end){let Y=T&&S.startHour?`${S.start} ${String(S.startHour).padStart(2,"0")}:00`:S.start,D=T&&S.endHour?`${S.end} ${String(S.endHour).padStart(2,"0")}:00`:S.end;return`${Y} - ${D}`}if(S.start)return`${T&&S.startHour?`${S.start} ${String(S.startHour).padStart(2,"0")}:00`:S.start}...`;return""}),l=(S)=>{let Y=J();J(new Date(Y.getFullYear(),Y.getMonth()+S,1))},t=(S)=>{let Y=J();J(new Date(Y.getFullYear()+S,Y.getMonth(),1))},x=({value:S,onChange:Y})=>{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:(D)=>{let V=parseInt(D.target.value);Y(V)}}),Tag("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(Q(S)).padStart(2,"0")+":00")])])};return Tag("div",{class:X("relative w-full",M)},[p({label:A,placeholder:L||(Z()?"Seleccionar rango...":"Seleccionar fecha..."),value:_f,readonly:!0,icon:N("icon-[lucide--calendar]"),onclick:(S)=>{S.stopPropagation(),B(!B())},...W}),If(B,()=>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:()=>t(-1)},N("icon-[lucide--chevrons-left]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>l(-1)},N("icon-[lucide--chevron-left]"))]),Tag("span",{class:"font-bold uppercase flex-1 text-center"},[()=>J().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:()=>l(1)},N("icon-[lucide--chevron-right]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>t(1)},N("icon-[lucide--chevrons-right]"))])]),Tag("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>P(null)},[...["L","M","X","J","V","S","D"].map((S)=>Tag("div",{class:"text-[10px] opacity-40 font-bold text-center"},S)),()=>{let S=J(),Y=S.getFullYear(),D=S.getMonth(),V=new Date(Y,D,1).getDay(),y=V===0?6:V-1,Mf=new Date(Y,D+1,0).getDate(),Ef=[];for(let I=0;I{let j=Q(_),Tf=P(),H_=typeof j==="string"?j.split("T")[0]===U:j?.start===U,k_=j?.end===U,$f=!1;if(Z()&&j?.start){let Af=j.start;if(!j.end&&Tf)$f=U>Af&&U<=Tf||U=Tf;else if(j.end)$f=U>Af&&U{if(Z())P(U)},onclick:()=>n(nf)},[I.toString()]))}return Ef}]),T?Tag("div",{class:"mt-3 pt-2 border-t border-base-300"},[Z()?Tag("div",{class:"flex gap-4"},[x({value:G,onChange:(S)=>{G(S);let Y=Q(_);if(Y?.start)_({...Y,startHour:S})}}),x({value:K,onChange:(S)=>{K(S);let Y=Q(_);if(Y?.end)_({...Y,endHour:S})}})]):x({value:G,onChange:(S)=>{G(S);let Y=Q(_);if(Y&&typeof Y==="string"&&Y.includes("-"))_(Y.split("T")[0]+"T"+String(S).padStart(2,"0")+":00:00")}})]):null])),If(B,()=>Tag("div",{class:"fixed inset-0 z-[90]",onclick:()=>B(!1)}))])};var qf={};q(qf,{Drawer:()=>A_});var A_=(f,M)=>{let{class:_,id:E,open:A,side:L,content:T,...W}=f,B=E||`drawer-${Math.random().toString(36).slice(2,9)}`;return Tag("div",{...W,class:X("drawer",_)},[Tag("input",{id:B,type:"checkbox",class:"drawer-toggle",checked:()=>typeof A==="function"?A():A,onchange:(J)=>{if(typeof A==="function")A(J.target.checked)}}),Tag("div",{class:"drawer-content"},[typeof T==="function"?T():T]),Tag("div",{class:"drawer-side"},[Tag("label",{for:B,class:"drawer-overlay",onclick:()=>{if(typeof A==="function")A(!1)}}),Tag("div",{class:"min-h-full bg-base-200 w-80"},[typeof L==="function"?L():L])])])};var Nf={};q(Nf,{Dropdown:()=>L_});var w=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(f)=>{if(w&&!w.contains(f.target))w.open=!1,w=null}),window.__dropdownHandlerRegistered=!0;var L_=(f)=>{let{class:M,label:_,icon:E,items:A,...L}=f;return Tag("details",{...L,class:X("dropdown",M)},[Tag("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(T)=>{let W=T.currentTarget.closest("details");if(w&&w!==W)w.open=!1;setTimeout(()=>{w=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 A==="function"?A():A||[]).map((W)=>Tag("li",{},[Tag("a",{class:W.class||"",onclick:(B)=>{if(W.onclick)W.onclick(B);let J=B.currentTarget.closest("details");if(J){if(J.open=!1,w===J)w=null}}},[W.icon?Tag("span",{},W.icon):null,Tag("span",{},W.label)])]))}])])};var zf={};q(zf,{Fab:()=>W_});var W_=(f)=>{let{class:M,icon:_,label:E,actions:A=[],position:L="bottom-6 right-6",...T}=f;return Tag("div",{...T,class:X(`fab absolute ${L} 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"},[_?N(_):null,!_&&E?E:null]),...Q(A).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:(B)=>{B.stopPropagation(),W.onclick?.(B)}},[W.icon?N(W.icon):W.text||""])]))])};var Df={};q(Df,{Fieldset:()=>B_});var B_=(f,M)=>{let{class:_,legend:E,...A}=f;return Tag("fieldset",{...A,class:X("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",_)},[()=>{let L=Q(E);return L?Tag("legend",{class:"fieldset-legend font-bold"},[L]):null},M])};var Vf={};q(Vf,{Fileinput:()=>J_});var J_=(f)=>{let{class:M,tooltip:_,max:E=2,accept:A="*",onselect:L,...T}=f,W=$([]),B=$(!1),J=$(null),P=E*1024*1024,G=(Z)=>{let C=Array.from(Z);if(J(null),C.find((z)=>z.size>P)){J(`Máx ${E}MB`);return}W([...W(),...C]),L?.(W())},K=(Z)=>{let C=W().filter((R,z)=>z!==Z);W(C),L?.(C)};return Tag("fieldset",{...T,class:X("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 k_=Object.defineProperty;var q=(f,M)=>{for(var _ in M)k_(f,_,{get:M[_],enumerable:!0,configurable:!0,set:(E)=>M[_]=()=>E})};var U=(f)=>typeof f==="function",H_=(f)=>f&&typeof f==="object",v=Array.isArray,k=typeof document<"u"?document:null,df=(f)=>f?._isRuntime?f.container:f instanceof Node?f:k.createTextNode(f==null?"":String(f)),h=null,O=null,s=!1,Wf=new Set,Lf=new WeakMap,m=(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()}},g=(f)=>{if(O)(O._cleanups||=new Set).add(f)},r=(f,M=!1)=>{let _=()=>{if(_._disposed)return;if(_._deps)_._deps.forEach((W)=>W.delete(_));if(_._cleanups)_._cleanups.forEach((W)=>W()),_._cleanups.clear();let E=h,A=O;h=O=_;try{let W=M?f():(f(),void 0);if(!M)_._result=W;return W}finally{h=E,O=A}};if(_._deps=_._cleanups=_._children=null,_._disposed=!1,_._isComputed=M,_._depth=h?h._depth+1:0,_._mounts=[],_._parent=O,O)(O._children||=new Set).add(_);return _},j_=()=>{if(s)return;s=!0;let f=Array.from(Wf).sort((M,_)=>M._depth-_._depth);Wf.clear();for(let M of f)if(!M._disposed)M();s=!1},n=(f,M=!1)=>{if(!M&&h&&!h._disposed)f.add(h),(h._deps||=new Set).add(f);else if(M){let _=!1;if(f.forEach((E)=>{if(E===h||E._disposed)return;if(E._isComputed){if(E._dirty=!0,E._subs)n(E._subs,!0)}else Wf.add(E),_=!0}),_&&!s)queueMicrotask(j_)}},w_=(f)=>{let M=h;h=null;try{return f()}finally{h=M}},x_=(f)=>{if(O)(O._mounts||=[]).push(f)},a=(f,M=null)=>{let _=new Set;if(U(f)){let E,A=!0,W=()=>{if(A){let T=h;h=W;try{let L=f();if(!Object.is(E,L))E=L,A=!1,n(_,!0)}finally{h=T}}return n(_),E};if(W._isComputed=!0,W._subs=_,W._dirty=!0,W._deps=null,W._disposed=!1,W.markDirty=()=>{A=!0},W.stop=()=>{if(W._disposed=!0,W._deps)W._deps.forEach((T)=>T.delete(W)),W._deps.clear();_.clear()},O)g(W.stop);return W}if(M)try{f=JSON.parse(localStorage.getItem(M))??f}catch(E){}return(...E)=>{if(E.length){let A=U(E[0])?E[0](f):E[0];if(!Object.is(f,A)){if(f=A,M)localStorage.setItem(M,JSON.stringify(f));n(_,!0)}}return n(_),f}},o=(f,M)=>{if(M===void 0){let E=r(f);return E(),()=>m(E)}let _=r(()=>{let E=Array.isArray(f)?f.map((A)=>A()):f();w_(()=>M(E))});return _(),()=>m(_)},Bf=(f)=>{if(f._cleanups)f._cleanups.forEach((M)=>M()),f._cleanups.clear();if(f._ownerEffect)m(f._ownerEffect);if(f.childNodes)f.childNodes.forEach(Bf)},y_=/^\s*(javascript|data|vbscript):/i,I_=(f)=>f==="src"||f==="href"||f.startsWith("on"),nf=(f,M)=>{if(M==null||M===!1)return null;if(I_(f)){let _=String(M);if(y_.test(_))return console.warn(`[SigPro] Bloqueado protocolo peligroso en ${f}`),"#"}return M},i=(f,M={},_=[])=>{if(M instanceof Node||v(M)||!H_(M))_=M,M={};if(U(f)){let T={_mounts:[],_cleanups:new Set},L=r(()=>{let Q=f(M,{children:_,emit:(G,...Y)=>M[`on${G[0].toUpperCase()}${G.slice(1)}`]?.(...Y)});return L._result=Q,Q});L(),T._mounts=L._mounts||[],T._cleanups=L._cleanups||new Set;let B=L._result,J=(Q)=>Q&&typeof Q==="object"&&!Q._isRuntime&&(Q._mounts=T._mounts,Q._cleanups=T._cleanups,Q._ownerEffect=L);if(v(B)?B.forEach(J):J(B),B==null)return null;if(B instanceof Node||v(B)&&B.every((Q)=>Q instanceof Node))return B;return k.createTextNode(String(B))}let E=/^(svg|path|circle|rect|line|polyline|polygon|g|defs|text|tspan|use)$/.test(f),A=E?k.createElementNS("http://www.w3.org/2000/svg",f):k.createElement(f);A._cleanups=new Set;for(let T in M){if(!M.hasOwnProperty(T))continue;let L=M[T];if(T==="ref"){U(L)?L(A):L.current=A;continue}if(T.startsWith("on")){let B=T.slice(2).toLowerCase();A.addEventListener(B,L);let J=()=>A.removeEventListener(B,L);A._cleanups.add(J),g(J)}else if(U(L)){let B=r(()=>{let J=nf(T,L());if(T==="class")A.className=J||"";else if(J==null)A.removeAttribute(T);else if(T in A&&!E)A[T]=J;else A.setAttribute(T,J===!0?"":J)});if(B(),A._cleanups.add(()=>m(B)),g(()=>m(B)),/^(INPUT|TEXTAREA|SELECT)$/.test(A.tagName)&&(T==="value"||T==="checked")){let J=T==="checked"?"change":"input";A.addEventListener(J,(Q)=>L(Q.target[T]))}}else{let B=nf(T,L);if(B!=null)if(T in A&&!E)A[T]=B;else A.setAttribute(T,B===!0?"":B)}}let W=(T)=>{if(v(T))return T.forEach(W);if(U(T)){let L=k.createTextNode("");A.appendChild(L);let B=[],J=r(()=>{let Q=T(),G=(v(Q)?Q:[Q]).map(df);B.forEach((Z)=>{if(Z._isRuntime)Z.destroy();else Bf(Z);if(Z.parentNode)Z.remove()});let Y=L;for(let Z=G.length-1;Z>=0;Z--){let P=G[Z];if(P.parentNode!==Y.parentNode)Y.parentNode?.insertBefore(P,Y);if(P._mounts)P._mounts.forEach((S)=>S());Y=P}B=G});J(),A._cleanups.add(()=>m(J)),g(()=>m(J))}else{let L=df(T);if(A.appendChild(L),L._mounts)L._mounts.forEach((B)=>B())}};return W(_),A},c=(f)=>{let M=new Set,_=[],E=O,A=k.createElement("div");A.style.display="contents",A.setAttribute("role","presentation"),O={_cleanups:M,_mounts:_};let W=(T)=>{if(!T)return;if(T._isRuntime)M.add(T.destroy),A.appendChild(T.container);else if(v(T))T.forEach(W);else A.appendChild(T instanceof Node?T:k.createTextNode(String(T==null?"":T)))};try{W(f({onCleanup:(T)=>M.add(T)}))}finally{O=E}return _.forEach((T)=>T()),{_isRuntime:!0,container:A,destroy:()=>{M.forEach((T)=>T()),Bf(A),A.remove()}}},of=(f,M,_=null,E=null)=>{let A=k.createTextNode(""),W=i("div",{style:"display:contents"},[A]),T=null,L=null,B=null;return o(()=>!!(U(f)?f():f),(J)=>{if(J===L)return;L=J;let Q=()=>{if(T)T.destroy(),T=null};if(T&&!J&&E?.out){if(B&&B.cancel)B.cancel();let Y=E.out(T.container,Q);if(B=Y,Y&&Y.finished)Y.finished.then(Q);else Q()}else Q();let G=J?M:_;if(G){if(T=c(()=>U(G)?G():G),W.insertBefore(T.container,A),E?.in)E.in(T.container)}}),W},lf=(f,M,_)=>{let E=k.createTextNode(""),A=i("div",{style:"display:contents"},[E]),W=new Map;return o(()=>(U(f)?f():f)||[],(T)=>{let L=new Map,B=[],J=T||[];for(let G=0;GM(Y,G));else W.delete(Z);L.set(Z,P),B.push(P)}W.forEach((G)=>G.destroy());let Q=E;for(let G=B.length-1;G>=0;G--){let Z=B[G].container;if(Z.nextSibling!==Q)A.insertBefore(Z,Q);Q=Z}W=L}),A},u=(f)=>{let M=()=>window.location.hash.slice(1)||"/",_=a(M()),E=()=>_(M());window.addEventListener("hashchange",E),g(()=>window.removeEventListener("hashchange",E));let A=i("div",{class:"router-outlet"}),W=null;return o([_],()=>{let T=_(),L=f.find((B)=>{let J=B.path.split("/").filter(Boolean),Q=T.split("/").filter(Boolean);return J.length===Q.length&&J.every((G,Y)=>G[0]===":"||G===Q[Y])})||f.find((B)=>B.path==="*");if(L){W?.destroy();let B={};L.path.split("/").filter(Boolean).forEach((J,Q)=>{if(J[0]===":")B[J.slice(1)]=T.split("/").filter(Boolean)[Q]}),u.params(B),W=c(()=>U(L.component)?L.component(B):L.component),A.replaceChildren(W.container)}}),A};u.params=a({});u.to=(f)=>window.location.hash=f.replace(/^#?\/?/,"#/");u.back=()=>window.history.back();u.path=()=>window.location.hash.replace(/^#/,"")||"/";var tf=(f,M)=>{let _=typeof M==="string"?k.querySelector(M):M;if(!_)return;if(Lf.has(_))Lf.get(_).destroy();let E=c(U(f)?f:()=>f);return _.replaceChildren(E.container),Lf.set(_,E),E},rf=Object.freeze({$:a,Watch:o,Tag:i,Render:c,If:of,For:lf,Router:u,Mount:tf,onMount:x_,onUnmount:g});if(typeof window<"u")Object.assign(window,rf),"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,_)=>rf.Tag(f,M,_));var ff={};q(ff,{default:()=>v_,Tooltip:()=>h_,Toast:()=>V_,Timeline:()=>D_,Tabs:()=>z_,Table:()=>N_,Swap:()=>q_,Stat:()=>S_,Stack:()=>R_,Select:()=>Y_,Rating:()=>K_,Range:()=>Z_,Radio:()=>X_,Navbar:()=>P_,Modal:()=>C_,Menu:()=>G_,List:()=>Q_,Label:()=>J_,Input:()=>b,Indicator:()=>B_,Fileinput:()=>W_,Fieldset:()=>L_,Fab:()=>A_,Dropdown:()=>$_,Drawer:()=>T_,Datepicker:()=>E_,Colorpicker:()=>M_,Checkbox:()=>__,Button:()=>p,Badge:()=>f_,Autocomplete:()=>ef,Alert:()=>af,Accordion:()=>sf});var Jf={};q(Jf,{Accordion:()=>sf});var e={};q(e,{val:()=>C,ui:()=>X,getIcon:()=>N});var C=(f)=>typeof f==="function"?f():f,X=(f,M)=>typeof M==="function"?()=>`${f} ${M()||""}`.trim():`${f} ${M||""}`.trim(),N=(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,A=_?"ml-1":"mr-1";if(E&&!E.startsWith("icon-[")&&!E.includes("--"))return Tag("span",{class:A},E);return Tag("span",{class:`${E} ${A}`.trim()})}return null};var sf=(f,M)=>{let{class:_,title:E,name:A,open:W,...T}=f;return Tag("div",{...T,class:X("collapse collapse-arrow bg-base-200 mb-2",_)},[Tag("input",{type:A?"radio":"checkbox",name:A,checked:C(W)}),Tag("div",{class:"collapse-title text-xl font-medium"},E),Tag("div",{class:"collapse-content"},M)])};var Qf={};q(Qf,{Alert:()=>af});var af=(f,M)=>{let{class:_,actions:E,type:A="info",soft:W=!0,...T}=f,L={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},Q=[`alert-${A}`,W?"alert-soft":"",_].filter(Boolean).join(" "),G=M||f.message;return Tag("div",{...T,role:"alert",class:X("alert",Q)},()=>[N(L[A]),Tag("div",{class:"flex-1"},[Tag("span",{},[typeof G==="function"?G():G])]),E?Tag("div",{class:"flex-none"},[typeof E==="function"?E():E]):null].filter(Boolean))};var Cf={};q(Cf,{Autocomplete:()=>ef});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"}},u_=$("es");var H=(f)=>()=>m_[u_()][f]||f;var Gf={};q(Gf,{Input:()=>b});var b=(f)=>{let{class:M,value:_,type:E="text",icon:A,oninput:W,placeholder:T,disabled:L,validate:B,label:J,...Q}=f,G=E==="password",Y=$(!1),Z=$(null),P={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]"},S=A?N(A):P[E]?N(P[E]):null,z=()=>N(Y()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),d=S?"pl-10":"",_f=G?"pr-10":"",l=()=>{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"},t=(V)=>{let y=V.target.value;if(B){let Mf=B(y);Z(Mf||null)}W?.(V)},x=()=>Z()&&Z()!=="",K=()=>{let V=`input w-full ${d} ${_f}`;if(M)V+=` ${M}`;if(x())V+=" input-error";return V.trim()},R=Tag("input",{...Q,type:()=>G?Y()?"text":"password":E,placeholder:T||(J?" ":T),class:K,value:_,oninput:t,disabled:()=>C(L),"aria-invalid":()=>x()?"true":"false"}),D=()=>[R,S?Tag("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},S):null,G?Tag("button",{type:"button",class:X("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",l()),onclick:(V)=>{V.preventDefault(),Y(!Y())}},()=>z()):null,Tag("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>x()?Z():null)];if(J)return Tag("label",{class:X("floating-label w-full",M)},()=>[Tag("div",{class:"relative w-full"},D),Tag("span",{},C(J))]);return Tag("div",{class:"relative w-full"},D)};var ef=(f)=>{let{class:M,items:_=[],value:E,onselect:A,label:W,placeholder:T,...L}=f,B=$(C(E)||""),J=$(!1),Q=$(-1),G=$(()=>{let P=B().toLowerCase(),S=C(_)||[];return P?S.filter((z)=>(typeof z==="string"?z:z.label).toLowerCase().includes(P)):S}),Y=(P)=>{let S=typeof P==="string"?P:P.value,z=typeof P==="string"?P:P.label;if(B(z),typeof E==="function")E(S);A?.(P),J(!1),Q(-1)},Z=(P)=>{let S=G();if(P.key==="ArrowDown")P.preventDefault(),J(!0),Q(Math.min(Q()+1,S.length-1));else if(P.key==="ArrowUp")P.preventDefault(),Q(Math.max(Q()-1,0));else if(P.key==="Enter"&&Q()>=0)P.preventDefault(),Y(S[Q()]);else if(P.key==="Escape")J(!1)};return Tag("div",{class:"relative w-full"},[b({label:W,class:M,placeholder:T||H("search")(),value:B,onfocus:()=>J(!0),onblur:()=>setTimeout(()=>J(!1),150),onkeydown:Z,oninput:(P)=>{let S=P.target.value;if(B(S),typeof E==="function")E(S);J(!0),Q(-1)},...L}),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:()=>J()&&G().length?"display:block":"display:none"},[For(G,(P,S)=>Tag("li",{},[Tag("a",{class:()=>`block w-full ${Q()===S?"active bg-primary text-primary-content":""}`,onclick:()=>Y(P),onmouseenter:()=>Q(S)},typeof P==="string"?P:P.label)]),(P,S)=>(typeof P==="string"?P:P.value)+S),()=>G().length?null:Tag("li",{class:"p-2 text-center opacity-50"},H("nodata")())])])};var Pf={};q(Pf,{Badge:()=>f_});var f_=(f,M)=>{let{class:_,...E}=f;return Tag("span",{...E,class:X("badge",_)},M)};var Xf={};q(Xf,{Button:()=>p});var p=(f,M)=>{let{class:_,loading:E,icon:A,...W}=f,T=N(A);return Tag("button",{...W,class:X("btn",_),disabled:()=>C(E)||C(f.disabled)},()=>[C(E)&&Tag("span",{class:"loading loading-spinner"}),T,M].filter(Boolean))};var Zf={};q(Zf,{Checkbox:()=>__});var __=(f)=>{let{class:M,value:_,toggle:E,label:A,...W}=f,T=Tag("input",{...W,type:"checkbox",class:()=>X(C(E)?"toggle":"checkbox",M),checked:_});return Tag("label",{class:"label cursor-pointer justify-start gap-3"},[T,A?Tag("span",{class:"label-text"},A):null])};var Kf={};q(Kf,{Colorpicker:()=>M_});var M_=(f)=>{let{class:M,value:_,label:E,...A}=f,W=$(!1),T=["#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"],L=()=>C(_)||"#000000";return Tag("div",{class:X("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:(B)=>{B.stopPropagation(),W(!W())},...A},[Tag("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${L()}`}),E?Tag("span",{class:"opacity-80"},E):null]),If(W,()=>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:(B)=>B.stopPropagation()},[Tag("div",{class:"grid grid-cols-8 gap-1"},T.map((B)=>Tag("button",{type:"button",style:`background-color: ${B}`,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 + ${L().toLowerCase()===B.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof _==="function")_(B);W(!1)}})))])),If(W,()=>Tag("div",{class:"fixed inset-0 z-[100]",onclick:()=>W(!1)}))])};var Yf={};q(Yf,{Datepicker:()=>E_});var E_=(f)=>{let{class:M,value:_,range:E,label:A,placeholder:W,hour:T=!1,...L}=f,B=$(!1),J=$(new Date),Q=$(null),G=$(0),Y=$(0),Z=()=>C(E)===!0,P=new Date,S=`${P.getFullYear()}-${String(P.getMonth()+1).padStart(2,"0")}-${String(P.getDate()).padStart(2,"0")}`,z=(K)=>{let R=K.getFullYear(),D=String(K.getMonth()+1).padStart(2,"0"),V=String(K.getDate()).padStart(2,"0");return`${R}-${D}-${V}`},d=(K)=>{let R=z(K),D=C(_);if(Z())if(!D?.start||D.start&&D.end){if(typeof _==="function")_({start:R,end:null,...T&&{startHour:G()}})}else{let V=D.start;if(typeof _==="function"){let y=R{let K=C(_);if(!K)return"";if(typeof K==="string"){if(T&&K.includes("T"))return K.replace("T"," ");return K}if(K.start&&K.end){let R=T&&K.startHour?`${K.start} ${String(K.startHour).padStart(2,"0")}:00`:K.start,D=T&&K.endHour?`${K.end} ${String(K.endHour).padStart(2,"0")}:00`:K.end;return`${R} - ${D}`}if(K.start)return`${T&&K.startHour?`${K.start} ${String(K.startHour).padStart(2,"0")}:00`:K.start}...`;return""}),l=(K)=>{let R=J();J(new Date(R.getFullYear(),R.getMonth()+K,1))},t=(K)=>{let R=J();J(new Date(R.getFullYear()+K,R.getMonth(),1))},x=({value:K,onChange:R})=>{return Tag("div",{class:"flex-1"},[Tag("div",{class:"flex gap-2 items-center"},[Tag("input",{type:"range",min:0,max:23,value:K,class:"range range-xs flex-1",oninput:(D)=>{let V=parseInt(D.target.value);R(V)}}),Tag("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(C(K)).padStart(2,"0")+":00")])])};return Tag("div",{class:X("relative w-full",M)},[b({label:A,placeholder:W||(Z()?"Seleccionar rango...":"Seleccionar fecha..."),value:_f,readonly:!0,icon:N("icon-[lucide--calendar]"),onclick:(K)=>{K.stopPropagation(),B(!B())},...L}),If(B,()=>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:(K)=>K.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:()=>t(-1)},N("icon-[lucide--chevrons-left]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>l(-1)},N("icon-[lucide--chevron-left]"))]),Tag("span",{class:"font-bold uppercase flex-1 text-center"},[()=>J().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:()=>l(1)},N("icon-[lucide--chevron-right]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>t(1)},N("icon-[lucide--chevrons-right]"))])]),Tag("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>Q(null)},[...["L","M","X","J","V","S","D"].map((K)=>Tag("div",{class:"text-[10px] opacity-40 font-bold text-center"},K)),()=>{let K=J(),R=K.getFullYear(),D=K.getMonth(),V=new Date(R,D,1).getDay(),y=V===0?6:V-1,Mf=new Date(R,D+1,0).getDate(),Ef=[];for(let I=0;I{let w=C(_),Tf=Q(),F_=typeof w==="string"?w.split("T")[0]===F:w?.start===F,U_=w?.end===F,$f=!1;if(Z()&&w?.start){let Af=w.start;if(!w.end&&Tf)$f=F>Af&&F<=Tf||F=Tf;else if(w.end)$f=F>Af&&F{if(Z())Q(F)},onclick:()=>d(pf)},[I.toString()]))}return Ef}]),T?Tag("div",{class:"mt-3 pt-2 border-t border-base-300"},[Z()?Tag("div",{class:"flex gap-4"},[x({value:G,onChange:(K)=>{G(K);let R=C(_);if(R?.start)_({...R,startHour:K})}}),x({value:Y,onChange:(K)=>{Y(K);let R=C(_);if(R?.end)_({...R,endHour:K})}})]):x({value:G,onChange:(K)=>{G(K);let R=C(_);if(R&&typeof R==="string"&&R.includes("-"))_(R.split("T")[0]+"T"+String(K).padStart(2,"0")+":00:00")}})]):null])),If(B,()=>Tag("div",{class:"fixed inset-0 z-[90]",onclick:()=>B(!1)}))])};var Rf={};q(Rf,{Drawer:()=>T_});var T_=(f,M)=>{let{class:_,id:E,open:A,side:W,content:T,...L}=f,B=E||`drawer-${Math.random().toString(36).slice(2,9)}`;return Tag("div",{...L,class:X("drawer",_)},[Tag("input",{id:B,type:"checkbox",class:"drawer-toggle",checked:()=>typeof A==="function"?A():A,onchange:(J)=>{if(typeof A==="function")A(J.target.checked)}}),Tag("div",{class:"drawer-content"},[typeof T==="function"?T():T]),Tag("div",{class:"drawer-side"},[Tag("label",{for:B,class:"drawer-overlay",onclick:()=>{if(typeof A==="function")A(!1)}}),Tag("div",{class:"min-h-full bg-base-200 w-80"},[typeof W==="function"?W():W])])])};var Sf={};q(Sf,{Dropdown:()=>$_});var j=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(f)=>{if(j&&!j.contains(f.target))j.open=!1,j=null}),window.__dropdownHandlerRegistered=!0;var $_=(f)=>{let{class:M,label:_,icon:E,items:A,...W}=f;return Tag("details",{...W,class:X("dropdown",M)},[Tag("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(T)=>{let L=T.currentTarget.closest("details");if(j&&j!==L)j.open=!1;setTimeout(()=>{j=L.open?L: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 A==="function"?A():A||[]).map((L)=>Tag("li",{},[Tag("a",{class:L.class||"",onclick:(B)=>{if(L.onclick)L.onclick(B);let J=B.currentTarget.closest("details");if(J){if(J.open=!1,j===J)j=null}}},[L.icon?Tag("span",{},L.icon):null,Tag("span",{},L.label)])]))}])])};var qf={};q(qf,{Fab:()=>A_});var A_=(f)=>{let{class:M,icon:_,label:E,actions:A=[],position:W="bottom-6 right-6",...T}=f;return Tag("div",{...T,class:X(`fab absolute ${W} 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"},[_?N(_):null,!_&&E?E:null]),...C(A).map((L)=>Tag("div",{class:"flex items-center gap-3 transition-all duration-300"},[L.label?Tag("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},L.label):null,Tag("button",{type:"button",class:`btn btn-circle shadow-lg ${L.class||""}`,onclick:(B)=>{B.stopPropagation(),L.onclick?.(B)}},[L.icon?N(L.icon):L.text||""])]))])};var Nf={};q(Nf,{Fieldset:()=>L_});var L_=(f,M)=>{let{class:_,legend:E,...A}=f;return Tag("fieldset",{...A,class:X("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",_)},[()=>{let W=C(E);return W?Tag("legend",{class:"fieldset-legend font-bold"},[W]):null},M])};var zf={};q(zf,{Fileinput:()=>W_});var W_=(f)=>{let{class:M,tooltip:_,max:E=2,accept:A="*",onselect:W,...T}=f,L=$([]),B=$(!1),J=$(null),Q=E*1024*1024,G=(Z)=>{let P=Array.from(Z);if(J(null),P.find((z)=>z.size>Q)){J(`Máx ${E}MB`);return}L([...L(),...P]),W?.(L())},Y=(Z)=>{let P=L().filter((S,z)=>z!==Z);L(P),W?.(P)};return Tag("fieldset",{...T,class:X("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 ${B()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} - `,ondragover:(Z)=>{Z.preventDefault(),B(!0)},ondragleave:()=>B(!1),ondrop:(Z)=>{Z.preventDefault(),B(!1),G(Z.dataTransfer.files)}},[Tag("div",{class:"flex items-center gap-3 w-full"},[N("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:A,class:"hidden",onchange:(Z)=>G(Z.target.files)})])]),()=>J()?Tag("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},J()):null,If(()=>W().length>0,()=>Tag("ul",{class:"mt-2 space-y-1"},[For(W,(Z,C)=>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]"},Z.name),Tag("span",{class:"text-[9px] opacity-40"},`(${(Z.size/1024).toFixed(0)} KB)`)]),Tag("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(R)=>{R.preventDefault(),R.stopPropagation(),K(C)}},[N("icon-[lucide--x]")])]),(Z)=>Z.name+Z.lastModified)]))])};var Of={};q(Of,{Indicator:()=>P_});var P_=(f,M)=>{let{value:_,class:E,...A}=f;return Tag("div",{...A,class:"indicator"},()=>[_?Tag("span",{class:X("indicator-item badge",E)},()=>typeof _==="function"?_():_):null,M].filter(Boolean))};var Ff={};q(Ff,{Label:()=>Q_});var Q_=(f)=>{let{children:M,value:_,floating:E=!1,class:A,...L}=f;if(E)return Tag("label",{class:X("floating-label",A),...L},()=>[typeof M==="function"?M():M,_?Tag("span",{},Q(_)):null]);return Tag("label",{class:X("label",A),...L},()=>[_?Tag("span",{class:"label-text"},Q(_)):null,typeof M==="function"?M():M])};var Uf={};q(Uf,{List:()=>G_});var G_=(f)=>{let{class:M,items:_,header:E,render:A=(B)=>B,keyFn:L=(B,J)=>B.id??J,...T}=f,W=For(_,(B,J)=>Tag("li",{class:"list-row",style:"width: 100%; display: block;"},[Tag("div",{style:"width: 100%;"},[A(B,J)])]),L);return Tag("ul",{...T,style:"display: block; width: 100%;",class:X("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%;"},[Q(E)])),W]:W)};var hf={};q(hf,{Menu:()=>C_});var C_=(f)=>{let{class:M,items:_,...E}=f,A=(L)=>For(()=>L||[],(T)=>Tag("li",{},[T.children?Tag("details",{open:T.open},[Tag("summary",{},[T.icon&&Tag("span",{class:"mr-2"},T.icon),T.label]),Tag("ul",{},A(T.children))]):Tag("a",{class:()=>Q(T.active)?"active":"",onclick:T.onclick},[T.icon&&Tag("span",{class:"mr-2"},T.icon),T.label])]),(T,W)=>T.label||W);return Tag("ul",{...E,class:X("menu bg-base-200 rounded-box",M)},A(_))};var Hf={};q(Hf,{Modal:()=>X_});var X_=(f,M)=>{let{class:_,title:E,buttons:A,open:L,...T}=f,W=null,B=()=>{let P=typeof L==="function"?L():L;if(!W)return;if(P){if(!W.open)W.showModal()}else if(W.open)W.close()};Watch(()=>B());let J=()=>{if(typeof L==="function")L(!1)};return Tag("dialog",{...T,ref:(P)=>{if(W=P,P)B()},class:X("modal",_),onclose:J,oncancel:J},[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(A)?A:[A]).filter(Boolean),d({type:"submit"},k("close")())])])]),Tag("form",{method:"dialog",class:"modal-backdrop"},[Tag("button",{},"close")])])};var kf={};q(kf,{Navbar:()=>Z_});var Z_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:X("navbar bg-base-100 shadow-sm px-4",_)},M)};var wf={};q(wf,{Radio:()=>S_});var S_=(f)=>{let{class:M,label:_,tooltip:E,value:A,inputValue:L,name:T,...W}=f,B=Tag("input",{...W,type:"radio",name:T,class:X("radio",M),checked:()=>Q(A)===L,onclick:()=>{if(typeof A==="function")A(L)}});if(!_&&!E)return B;let J=Tag("label",{class:"label cursor-pointer justify-start gap-3"},[B,_?Tag("span",{class:"label-text"},_):null]);return E?Tag("div",{class:"tooltip","data-tip":E},J):J};var jf={};q(jf,{Range:()=>K_});var K_=(f)=>{let{class:M,label:_,tooltip:E,value:A,...L}=f,T=Tag("input",{...L,type:"range",class:X("range",M),value:A,disabled:()=>Q(f.disabled)});if(!_&&!E)return T;let W=Tag("div",{class:"flex flex-col gap-2"},[_?Tag("span",{class:"label-text"},_):null,T]);return E?Tag("div",{class:"tooltip","data-tip":E},W):W};var xf={};q(xf,{Rating:()=>Y_});var Y_=(f)=>{let{class:M,value:_,count:E=5,mask:A="mask-star",readonly:L=!1,onchange:T,...W}=f,B=`rating-${Math.random().toString(36).slice(2,7)}`;return Tag("div",{...W,class:()=>X(`rating ${Q(L)?"pointer-events-none":""}`,M)},Array.from({length:Q(E)},(J,P)=>{let G=P+1;return Tag("input",{type:"radio",name:B,class:`mask ${A}`,checked:()=>Math.round(Q(_))===G,onchange:()=>{if(!Q(L)){if(typeof T==="function")T(G);else if(typeof _==="function")_(G)}}})}))};var yf={};q(yf,{Select:()=>R_});var R_=(f)=>{let{class:M,label:_,items:E,value:A,...L}=f,T=Tag("select",{...L,class:X("select select-bordered w-full",M),value:A},For(()=>Q(E)||[],(W)=>Tag("option",{value:W.value,$selected:()=>String(Q(A))===String(W.value)},W.label),(W)=>W.value));if(!_)return T;return Tag("label",{class:"fieldset-label flex flex-col gap-1"},[Tag("span",{},_),T])};var uf={};q(uf,{Stack:()=>q_});var q_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:X("stack",_)},M)};var mf={};q(mf,{Stat:()=>N_});var N_=(f)=>{let{class:M,icon:_,label:E,value:A,desc:L,...T}=f;return Tag("div",{...T,class:X("stat",M)},[_&&Tag("div",{class:"stat-figure text-secondary"},_),E&&Tag("div",{class:"stat-title"},E),Tag("div",{class:"stat-value"},()=>Q(A)??A),L&&Tag("div",{class:"stat-desc"},L)])};var vf={};q(vf,{Swap:()=>z_});var z_=(f)=>{let{class:M,value:_,on:E,off:A,...L}=f;return Tag("label",{...L,class:X("swap",M)},[Tag("input",{type:"checkbox",checked:()=>Q(_),onclick:(T)=>{if(typeof _==="function")_(T.target.checked)}}),Tag("div",{class:"swap-on"},E),Tag("div",{class:"swap-off"},A)])};var gf={};q(gf,{Table:()=>D_});var D_=(f)=>{let{class:M,items:_=[],columns:E=[],keyFn:A,zebra:L=!1,pinRows:T=!1,empty:W=k("nodata")(),...B}=f,J=()=>{let G=Q(L)?"table-zebra":"",K=Q(T)?"table-pin-rows":"";return X("table",M,G,K)},P=A||((G,K)=>G.id||K);return Tag("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[Tag("table",{...B,class:J},[Tag("thead",{},[Tag("tr",{},E.map((G)=>Tag("th",{class:G.class||""},G.label)))]),Tag("tbody",{},[For(_,(G,K)=>{let Z=()=>{let C=Q(_),R=P(G,K);return C.find((z,n)=>P(z,n)===R)||G};return Tag("tr",{class:"hover"},E.map((C)=>{let R=()=>{let z=Z();if(C.render)return C.render(z,K);return Q(z[C.key])};return Tag("td",{class:C.class||""},[R])}))},P),If(()=>Q(_).length===0,()=>Tag("tr",{},[Tag("td",{colspan:E.length,class:"text-center p-10 opacity-50"},[Q(W)])]))])])])};var cf={};q(cf,{Tabs:()=>V_});var V_=(f)=>{let{items:M,class:_,...E}=f,A=typeof M==="function"?M:()=>M||[],L=$(0);return Watch(()=>{let T=A().findIndex((W)=>Q(W.active)===!0);if(T!==-1&&T!==L())L(T)}),Tag("div",{...E,class:X("tabs",_)},()=>{let T=A(),W=[];for(let B=0;BL()===B,G=Tag("button",{class:()=>X("tab",P()?"tab-active":""),onclick:(C)=>{if(C.preventDefault(),!Q(J.disabled)){if(J.onclick)J.onclick();L(B)}}}),K=Q(J.label);if(K instanceof Node)G.replaceChildren(K);else G.textContent=String(K);W.push(G);let Z=Tag("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>P()?"display: block":"display: none"},()=>Q(J.content));W.push(Z)}return W})};var bf={};q(bf,{Timeline:()=>O_});var O_=(f)=>{let{class:M,items:_=[],vertical:E=!0,compact:A=!1,...L}=f,T={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return Tag("ul",{...L,class:()=>X(`timeline ${Q(E)?"timeline-vertical":"timeline-horizontal"} ${Q(A)?"timeline-compact":""}`,M)},()=>{let W=(typeof _==="function"?_():_)||[];return W.map((B,J)=>{let P=J===0,G=J===W.length-1,K=B.type||"success",Z=()=>Q(B.completed),C=()=>J>0&&Q(W[J-1].completed),R=(z)=>typeof z==="function"?z():z;return Tag("li",{class:"flex-1"},[!P?Tag("hr",{class:()=>C()?"bg-primary":""}):null,Tag("div",{class:"timeline-start"},[()=>R(B.title)]),Tag("div",{class:"timeline-middle"},[()=>B.icon?N(B.icon):N(T[K]||T.success)]),Tag("div",{class:"timeline-end timeline-box shadow-sm"},[()=>R(B.detail)]),!G?Tag("hr",{class:()=>Z()?"bg-primary":""}):null])})})};var pf={};q(pf,{Toast:()=>F_});var F_=(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 A=Tag("div",{style:"display: contents"});E.appendChild(A);let L,T=()=>{clearTimeout(L);let J=A.firstElementChild;if(J&&!J.classList.contains("opacity-0"))J.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(B.destroy(),A.remove(),!E.hasChildNodes())E.remove()},300);else B.destroy(),A.remove()},W=()=>{let J=N("icon-[lucide--x]"),P=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]),d({class:"btn-xs btn-circle btn-ghost",onclick:T},J)]);return requestAnimationFrame(()=>P.classList.remove("translate-x-10","opacity-0")),P},B=Mount(W,A);if(_>0)L=setTimeout(T,_);return T};var df={};q(df,{Tooltip:()=>U_});var U_=(f,M)=>Tag("div",{...f,class:()=>X("tooltip w-full",f.class),"data-tip":f.tip},M);var h_={...Qf,...Gf,...Xf,...Zf,...Sf,...Kf,...Yf,...Rf,...qf,...Nf,...zf,...Df,...Vf,...Of,...Cf,...Ff,...Uf,...hf,...Hf,...kf,...wf,...jf,...xf,...yf,...uf,...mf,...vf,...gf,...cf,...bf,...pf,...df},g_={...h_,install:(f=window)=>{Object.entries(h_).forEach(([M,_])=>{f[M]=_}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(ff).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.entries(e).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.defineProperty(window,"tt",{value:k,writable:!1,configurable:!0,enumerable:!0}),Object.defineProperty(window,"SigProUI",{value:{...ff,Utils:e,tt:k},writable:!1,configurable:!0,enumerable:!0}),console.log("\uD83C\uDFA8 SigProUI ready");export{Q as val,X as ui,k as tt,N as getIcon,o as Watch,U_ as Tooltip,F_ as Toast,O_ as Timeline,i as Tag,V_ as Tabs,D_ as Table,z_ as Swap,N_ as Stat,q_ as Stack,R_ as Select,v as Router,b as Render,Y_ as Rating,K_ as Range,S_ as Radio,Z_ as Navbar,af as Mount,X_ as Modal,C_ as Menu,G_ as List,Q_ as Label,p as Input,P_ as Indicator,tf as If,sf as For,J_ as Fileinput,B_ as Fieldset,W_ as Fab,L_ as Dropdown,A_ as Drawer,$_ as Datepicker,T_ as Colorpicker,E_ as Checkbox,d as Button,M_ as Badge,__ as Autocomplete,f_ as Alert,ef as Accordion,Jf as $$,a as $}; + `,ondragover:(Z)=>{Z.preventDefault(),B(!0)},ondragleave:()=>B(!1),ondrop:(Z)=>{Z.preventDefault(),B(!1),G(Z.dataTransfer.files)}},[Tag("div",{class:"flex items-center gap-3 w-full"},[N("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:A,class:"hidden",onchange:(Z)=>G(Z.target.files)})])]),()=>J()?Tag("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},J()):null,If(()=>L().length>0,()=>Tag("ul",{class:"mt-2 space-y-1"},[For(L,(Z,P)=>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]"},Z.name),Tag("span",{class:"text-[9px] opacity-40"},`(${(Z.size/1024).toFixed(0)} KB)`)]),Tag("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(S)=>{S.preventDefault(),S.stopPropagation(),Y(P)}},[N("icon-[lucide--x]")])]),(Z)=>Z.name+Z.lastModified)]))])};var Df={};q(Df,{Indicator:()=>B_});var B_=(f,M)=>{let{value:_,class:E,...A}=f;return Tag("div",{...A,class:"indicator"},()=>[_?Tag("span",{class:X("indicator-item badge",E)},()=>typeof _==="function"?_():_):null,M].filter(Boolean))};var Vf={};q(Vf,{Label:()=>J_});var J_=(f)=>{let{children:M,value:_,floating:E=!1,class:A,...W}=f;if(E)return Tag("label",{class:X("floating-label",A),...W},()=>[typeof M==="function"?M():M,_?Tag("span",{},C(_)):null]);return Tag("label",{class:X("label",A),...W},()=>[_?Tag("span",{class:"label-text"},C(_)):null,typeof M==="function"?M():M])};var hf={};q(hf,{List:()=>Q_});var Q_=(f)=>{let{class:M,items:_,header:E,render:A=(B)=>B,keyFn:W=(B,J)=>B.id??J,...T}=f,L=For(_,(B,J)=>Tag("li",{class:"list-row",style:"width: 100%; display: block;"},[Tag("div",{style:"width: 100%;"},[A(B,J)])]),W);return Tag("ul",{...T,style:"display: block; width: 100%;",class:X("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%;"},[C(E)])),L]:L)};var Of={};q(Of,{Menu:()=>G_});var G_=(f)=>{let{class:M,items:_,...E}=f,A=(W)=>For(()=>W||[],(T)=>Tag("li",{},[T.children?Tag("details",{open:T.open},[Tag("summary",{},[T.icon&&Tag("span",{class:"mr-2"},T.icon),T.label]),Tag("ul",{},A(T.children))]):Tag("a",{class:()=>C(T.active)?"active":"",onclick:T.onclick},[T.icon&&Tag("span",{class:"mr-2"},T.icon),T.label])]),(T,L)=>T.label||L);return Tag("ul",{...E,class:X("menu bg-base-200 rounded-box",M)},A(_))};var Ff={};q(Ff,{Modal:()=>C_});var C_=(f,M)=>{let{class:_,title:E,buttons:A,open:W,...T}=f,L=null,B=()=>{let Q=typeof W==="function"?W():W;if(!L)return;if(Q){if(!L.open)L.showModal()}else if(L.open)L.close()};Watch(()=>B());let J=()=>{if(typeof W==="function")W(!1)};return Tag("dialog",{...T,ref:(Q)=>{if(L=Q,Q)B()},class:X("modal",_),onclose:J,oncancel:J},[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(A)?A:[A]).filter(Boolean),p({type:"submit"},H("close")())])])]),Tag("form",{method:"dialog",class:"modal-backdrop"},[Tag("button",{},"close")])])};var Uf={};q(Uf,{Navbar:()=>P_});var P_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:X("navbar bg-base-100 shadow-sm px-4",_)},M)};var kf={};q(kf,{Radio:()=>X_});var X_=(f)=>{let{class:M,label:_,tooltip:E,value:A,inputValue:W,name:T,...L}=f,B=Tag("input",{...L,type:"radio",name:T,class:X("radio",M),checked:()=>C(A)===W,onclick:()=>{if(typeof A==="function")A(W)}});if(!_&&!E)return B;let J=Tag("label",{class:"label cursor-pointer justify-start gap-3"},[B,_?Tag("span",{class:"label-text"},_):null]);return E?Tag("div",{class:"tooltip","data-tip":E},J):J};var Hf={};q(Hf,{Range:()=>Z_});var Z_=(f)=>{let{class:M,label:_,tooltip:E,value:A,...W}=f,T=Tag("input",{...W,type:"range",class:X("range",M),value:A,disabled:()=>C(f.disabled)});if(!_&&!E)return T;let L=Tag("div",{class:"flex flex-col gap-2"},[_?Tag("span",{class:"label-text"},_):null,T]);return E?Tag("div",{class:"tooltip","data-tip":E},L):L};var jf={};q(jf,{Rating:()=>K_});var K_=(f)=>{let{class:M,value:_,count:E=5,mask:A="mask-star",readonly:W=!1,onchange:T,...L}=f,B=`rating-${Math.random().toString(36).slice(2,7)}`;return Tag("div",{...L,class:()=>X(`rating ${C(W)?"pointer-events-none":""}`,M)},Array.from({length:C(E)},(J,Q)=>{let G=Q+1;return Tag("input",{type:"radio",name:B,class:`mask ${A}`,checked:()=>Math.round(C(_))===G,onchange:()=>{if(!C(W)){if(typeof T==="function")T(G);else if(typeof _==="function")_(G)}}})}))};var wf={};q(wf,{Select:()=>Y_});var Y_=(f)=>{let{class:M,label:_,items:E,value:A,...W}=f,T=Tag("select",{...W,class:X("select select-bordered w-full",M),value:A},For(()=>C(E)||[],(L)=>Tag("option",{value:L.value,$selected:()=>String(C(A))===String(L.value)},L.label),(L)=>L.value));if(!_)return T;return Tag("label",{class:"fieldset-label flex flex-col gap-1"},[Tag("span",{},_),T])};var xf={};q(xf,{Stack:()=>R_});var R_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:X("stack",_)},M)};var yf={};q(yf,{Stat:()=>S_});var S_=(f)=>{let{class:M,icon:_,label:E,value:A,desc:W,...T}=f;return Tag("div",{...T,class:X("stat",M)},[_&&Tag("div",{class:"stat-figure text-secondary"},_),E&&Tag("div",{class:"stat-title"},E),Tag("div",{class:"stat-value"},()=>C(A)??A),W&&Tag("div",{class:"stat-desc"},W)])};var mf={};q(mf,{Swap:()=>q_});var q_=(f)=>{let{class:M,value:_,on:E,off:A,...W}=f;return Tag("label",{...W,class:X("swap",M)},[Tag("input",{type:"checkbox",checked:()=>C(_),onclick:(T)=>{if(typeof _==="function")_(T.target.checked)}}),Tag("div",{class:"swap-on"},E),Tag("div",{class:"swap-off"},A)])};var uf={};q(uf,{Table:()=>N_});var N_=(f)=>{let{class:M,items:_=[],columns:E=[],keyFn:A,zebra:W=!1,pinRows:T=!1,empty:L=H("nodata")(),...B}=f,J=()=>{let G=C(W)?"table-zebra":"",Y=C(T)?"table-pin-rows":"";return X("table",M,G,Y)},Q=A||((G,Y)=>G.id||Y);return Tag("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[Tag("table",{...B,class:J},[Tag("thead",{},[Tag("tr",{},E.map((G)=>Tag("th",{class:G.class||""},G.label)))]),Tag("tbody",{},[For(_,(G,Y)=>{let Z=()=>{let P=C(_),S=Q(G,Y);return P.find((z,d)=>Q(z,d)===S)||G};return Tag("tr",{class:"hover"},E.map((P)=>{let S=()=>{let z=Z();if(P.render)return P.render(z,Y);return C(z[P.key])};return Tag("td",{class:P.class||""},[S])}))},Q),If(()=>C(_).length===0,()=>Tag("tr",{},[Tag("td",{colspan:E.length,class:"text-center p-10 opacity-50"},[C(L)])]))])])])};var vf={};q(vf,{Tabs:()=>z_});var z_=(f)=>{let{items:M,class:_,...E}=f,A=typeof M==="function"?M:()=>M||[],W=$(0);return Watch(()=>{let T=A().findIndex((L)=>C(L.active)===!0);if(T!==-1&&T!==W())W(T)}),Tag("div",{...E,class:X("tabs",_)},()=>{let T=A(),L=[];for(let B=0;BW()===B,G=Tag("button",{class:()=>X("tab",Q()?"tab-active":""),onclick:(P)=>{if(P.preventDefault(),!C(J.disabled)){if(J.onclick)J.onclick();W(B)}}}),Y=C(J.label);if(Y instanceof Node)G.replaceChildren(Y);else G.textContent=String(Y);L.push(G);let Z=Tag("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>Q()?"display: block":"display: none"},()=>C(J.content));L.push(Z)}return L})};var gf={};q(gf,{Timeline:()=>D_});var D_=(f)=>{let{class:M,items:_=[],vertical:E=!0,compact:A=!1,...W}=f,T={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return Tag("ul",{...W,class:()=>X(`timeline ${C(E)?"timeline-vertical":"timeline-horizontal"} ${C(A)?"timeline-compact":""}`,M)},()=>{let L=(typeof _==="function"?_():_)||[];return L.map((B,J)=>{let Q=J===0,G=J===L.length-1,Y=B.type||"success",Z=()=>C(B.completed),P=()=>J>0&&C(L[J-1].completed),S=(z)=>typeof z==="function"?z():z;return Tag("li",{class:"flex-1"},[!Q?Tag("hr",{class:()=>P()?"bg-primary":""}):null,Tag("div",{class:"timeline-start"},[()=>S(B.title)]),Tag("div",{class:"timeline-middle"},[()=>B.icon?N(B.icon):N(T[Y]||T.success)]),Tag("div",{class:"timeline-end timeline-box shadow-sm"},[()=>S(B.detail)]),!G?Tag("hr",{class:()=>Z()?"bg-primary":""}):null])})})};var cf={};q(cf,{Toast:()=>V_});var V_=(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 A=Tag("div",{style:"display: contents"});E.appendChild(A);let W,T=()=>{clearTimeout(W);let J=A.firstElementChild;if(J&&!J.classList.contains("opacity-0"))J.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(B.destroy(),A.remove(),!E.hasChildNodes())E.remove()},300);else B.destroy(),A.remove()},L=()=>{let J=N("icon-[lucide--x]"),Q=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]),p({class:"btn-xs btn-circle btn-ghost",onclick:T},J)]);return requestAnimationFrame(()=>Q.classList.remove("translate-x-10","opacity-0")),Q},B=Mount(L,A);if(_>0)W=setTimeout(T,_);return T};var bf={};q(bf,{Tooltip:()=>h_});var h_=(f,M)=>Tag("div",{...f,class:()=>X("tooltip w-full",f.class),"data-tip":f.tip},M);var O_={...Jf,...Qf,...Cf,...Pf,...Xf,...Zf,...Kf,...Yf,...Rf,...Sf,...qf,...Nf,...zf,...Df,...Gf,...Vf,...hf,...Of,...Ff,...Uf,...kf,...Hf,...jf,...wf,...xf,...yf,...mf,...uf,...vf,...gf,...cf,...bf},v_={...O_,install:(f=window)=>{Object.entries(O_).forEach(([M,_])=>{f[M]=_}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(ff).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.entries(e).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.defineProperty(window,"tt",{value:H,writable:!1,configurable:!0,enumerable:!0}),Object.defineProperty(window,"SigProUI",{value:{...ff,Utils:e,tt:H},writable:!1,configurable:!0,enumerable:!0}),console.log("\uD83C\uDFA8 SigProUI ready");export{C as val,X as ui,H as tt,N as getIcon,o as Watch,h_ as Tooltip,V_ as Toast,D_ as Timeline,i as Tag,z_ as Tabs,N_ as Table,q_ as Swap,S_ as Stat,R_ as Stack,Y_ as Select,u as Router,c as Render,K_ as Rating,Z_ as Range,X_ as Radio,P_ as Navbar,tf as Mount,C_ as Modal,G_ as Menu,Q_ as List,J_ as Label,b as Input,B_ as Indicator,of as If,lf as For,W_ as Fileinput,L_ as Fieldset,A_ as Fab,$_ as Dropdown,T_ as Drawer,E_ as Datepicker,M_ as Colorpicker,__ as Checkbox,p as Button,f_ as Badge,ef as Autocomplete,af as Alert,sf as Accordion,a as $}; diff --git a/dist/sigpro-ui.js b/dist/sigpro-ui.js index 045a667..78cfa5a 100644 --- a/dist/sigpro-ui.js +++ b/dist/sigpro-ui.js @@ -73,15 +73,14 @@ Autocomplete: () => Autocomplete, Alert: () => Alert, Accordion: () => Accordion, - $$: () => $$, $: () => $2 }); // src/sigpro.js - var doc = typeof document !== "undefined" ? document : null; - var isArr = Array.isArray; var isFunc = (f) => typeof f === "function"; var isObj = (o) => o && typeof o === "object"; + var isArr = Array.isArray; + var doc = typeof document !== "undefined" ? document : null; var ensureNode = (n) => n?._isRuntime ? n.container : n instanceof Node ? n : doc.createTextNode(n == null ? "" : String(n)); var activeEffect = null; var activeOwner = null; @@ -123,7 +122,8 @@ effect._cleanups.forEach((cl) => cl()); effect._cleanups.clear(); } - const prevEffect = activeEffect, prevOwner = activeOwner; + const prevEffect = activeEffect; + const prevOwner = activeOwner; activeEffect = activeOwner = effect; try { const res = isComputed ? fn() : (fn(), undefined); @@ -251,29 +251,6 @@ return val; }; }; - var $$ = (obj, cache = new WeakMap) => { - if (!isObj(obj)) - return obj; - if (cache.has(obj)) - return cache.get(obj); - const subs = {}; - const proxy = new Proxy(obj, { - get: (t, k) => { - trackUpdate(subs[k] ??= new Set); - return isObj(t[k]) ? $$(t[k], cache) : t[k]; - }, - set: (t, k, v) => { - if (!Object.is(t[k], v)) { - t[k] = v; - if (subs[k]) - trackUpdate(subs[k], true); - } - return true; - } - }); - cache.set(obj, proxy); - return proxy; - }; var Watch2 = (sources, cb) => { if (cb === undefined) { const effect2 = createEffect(sources); @@ -319,7 +296,10 @@ if (isFunc(tag)) { const ctx = { _mounts: [], _cleanups: new Set }; const effect = createEffect(() => { - const result2 = tag(props, { children, emit: (ev, ...args) => props[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...args) }); + const result2 = tag(props, { + children, + emit: (ev, ...args) => props[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...args) + }); effect._result = result2; return result2; }); @@ -429,6 +409,7 @@ const previousOwner = activeOwner; const container = doc.createElement("div"); container.style.display = "contents"; + container.setAttribute("role", "presentation"); activeOwner = { _cleanups: cleanups, _mounts: mounts }; const processResult = (result) => { if (!result) @@ -461,7 +442,9 @@ var If2 = (cond, ifYes, ifNot = null, trans = null) => { const anchor = doc.createTextNode(""); const root = Tag2("div", { style: "display:contents" }, [anchor]); - let currentView = null, last = null; + let currentView = null; + let last = null; + let exitPromise = null; Watch2(() => !!(isFunc(cond) ? cond() : cond), (show) => { if (show === last) return; @@ -472,10 +455,18 @@ currentView = null; } }; - if (currentView && !show && trans?.out) - trans.out(currentView.container, disposeView); - else + 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(); + } const content = show ? ifYes : ifNot; if (content) { currentView = Render(() => isFunc(content) ? content() : content); @@ -562,7 +553,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 }); + var SigPro = Object.freeze({ $: $2, Watch: Watch2, Tag: Tag2, Render, If: If2, For: For2, Router, Mount: Mount2, onMount, onUnmount }); 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 7e39cd5..e6e4a05 100644 --- a/dist/sigpro-ui.min.js +++ b/dist/sigpro-ui.min.js @@ -1,7 +1,7 @@ -(()=>{var{defineProperty:Wf,getOwnPropertyNames:x_,getOwnPropertyDescriptor:y_}=Object,I_=Object.prototype.hasOwnProperty;var F_=new WeakMap,u_=(f)=>{var M=F_.get(f),_;if(M)return M;if(M=Wf({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function")x_(f).map((E)=>!I_.call(M,E)&&Wf(M,E,{get:()=>f[E],enumerable:!(_=y_(f,E))||_.enumerable}));return F_.set(f,M),M};var q=(f,M)=>{for(var _ in M)Wf(f,_,{get:M[_],enumerable:!0,configurable:!0,set:(E)=>M[_]=()=>E})};var r_={};q(r_,{val:()=>Q,ui:()=>X,tt:()=>H,getIcon:()=>N,Watch:()=>n,Tooltip:()=>D_,Toast:()=>N_,Timeline:()=>R_,Tag:()=>r,Tabs:()=>K_,Table:()=>Z_,Swap:()=>C_,Stat:()=>Q_,Stack:()=>J_,Select:()=>W_,Router:()=>x,Render:()=>g,Rating:()=>A_,Range:()=>T_,Radio:()=>M_,Navbar:()=>f_,Mount:()=>Xf,Modal:()=>af,Menu:()=>tf,List:()=>of,Label:()=>nf,Input:()=>c,Indicator:()=>pf,If:()=>Gf,For:()=>Cf,Fileinput:()=>cf,Fieldset:()=>vf,Fab:()=>uf,Dropdown:()=>xf,Drawer:()=>wf,Datepicker:()=>Hf,Colorpicker:()=>Uf,Checkbox:()=>Of,Button:()=>b,Badge:()=>zf,Autocomplete:()=>qf,Alert:()=>Kf,Accordion:()=>Zf,$$:()=>e,$:()=>l});var k=typeof document<"u"?document:null,p=Array.isArray,h=(f)=>typeof f==="function",Jf=(f)=>f&&typeof f==="object",U_=(f)=>f?._isRuntime?f.container:f instanceof Node?f:k.createTextNode(f==null?"":String(f)),O=null,F=null,a=!1,Pf=new Set,Bf=new WeakMap,m=(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()}},d=(f)=>{if(F)(F._cleanups||=new Set).add(f)},i=(f,M=!1)=>{let _=()=>{if(_._disposed)return;if(_._deps)_._deps.forEach((L)=>L.delete(_));if(_._cleanups)_._cleanups.forEach((L)=>L()),_._cleanups.clear();let E=O,A=F;O=F=_;try{let L=M?f():(f(),void 0);if(!M)_._result=L;return L}finally{O=E,F=A}};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 _},m_=()=>{if(a)return;a=!0;let f=Array.from(Pf).sort((M,_)=>M._depth-_._depth);Pf.clear();for(let M of f)if(!M._disposed)M();a=!1},v=(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)v(E._subs,!0)}else Pf.add(E),_=!0}),_&&!a)queueMicrotask(m_)}},v_=(f)=>{let M=O;O=null;try{return f()}finally{O=M}},g_=(f)=>{if(F)(F._mounts||=[]).push(f)},l=(f,M=null)=>{let _=new Set;if(h(f)){let E,A=!0,L=()=>{if(A){let T=O;O=L;try{let W=f();if(!Object.is(E,W))E=W,A=!1,v(_,!0)}finally{O=T}}return v(_),E};if(L._isComputed=!0,L._subs=_,L._dirty=!0,L._deps=null,L._disposed=!1,L.markDirty=()=>{A=!0},L.stop=()=>{if(L._disposed=!0,L._deps)L._deps.forEach((T)=>T.delete(L)),L._deps.clear();_.clear()},F)d(L.stop);return L}if(M)try{f=JSON.parse(localStorage.getItem(M))??f}catch(E){}return(...E)=>{if(E.length){let A=h(E[0])?E[0](f):E[0];if(!Object.is(f,A)){if(f=A,M)localStorage.setItem(M,JSON.stringify(f));v(_,!0)}}return v(_),f}},e=(f,M=new WeakMap)=>{if(!Jf(f))return f;if(M.has(f))return M.get(f);let _={},E=new Proxy(f,{get:(A,L)=>{return v(_[L]??=new Set),Jf(A[L])?e(A[L],M):A[L]},set:(A,L,T)=>{if(!Object.is(A[L],T)){if(A[L]=T,_[L])v(_[L],!0)}return!0}});return M.set(f,E),E},n=(f,M)=>{if(M===void 0){let E=i(f);return E(),()=>m(E)}let _=i(()=>{let E=Array.isArray(f)?f.map((A)=>A()):f();v_(()=>M(E))});return _(),()=>m(_)},Qf=(f)=>{if(f._cleanups)f._cleanups.forEach((M)=>M()),f._cleanups.clear();if(f._ownerEffect)m(f._ownerEffect);if(f.childNodes)f.childNodes.forEach(Qf)},c_=/^\s*(javascript|data|vbscript):/i,b_=(f)=>f==="src"||f==="href"||f.startsWith("on"),h_=(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},r=(f,M={},_=[])=>{if(M instanceof Node||p(M)||!Jf(M))_=M,M={};if(h(f)){let T={_mounts:[],_cleanups:new Set},W=i(()=>{let P=f(M,{children:_,emit:(G,...K)=>M[`on${G[0].toUpperCase()}${G.slice(1)}`]?.(...K)});return W._result=P,P});W(),T._mounts=W._mounts||[],T._cleanups=W._cleanups||new Set;let B=W._result,J=(P)=>P&&typeof P==="object"&&!P._isRuntime&&(P._mounts=T._mounts,P._cleanups=T._cleanups,P._ownerEffect=W);if(p(B)?B.forEach(J):J(B),B==null)return null;if(B instanceof Node||p(B)&&B.every((P)=>P instanceof Node))return B;return k.createTextNode(String(B))}let E=/^(svg|path|circle|rect|line|polyline|polygon|g|defs|text|tspan|use)$/.test(f),A=E?k.createElementNS("http://www.w3.org/2000/svg",f):k.createElement(f);A._cleanups=new Set;for(let T in M){if(!M.hasOwnProperty(T))continue;let W=M[T];if(T==="ref"){h(W)?W(A):W.current=A;continue}if(T.startsWith("on")){let B=T.slice(2).toLowerCase();A.addEventListener(B,W);let J=()=>A.removeEventListener(B,W);A._cleanups.add(J),d(J)}else if(h(W)){let B=i(()=>{let J=h_(T,W());if(T==="class")A.className=J||"";else if(J==null)A.removeAttribute(T);else if(T in A&&!E)A[T]=J;else A.setAttribute(T,J===!0?"":J)});if(B(),A._cleanups.add(()=>m(B)),d(()=>m(B)),/^(INPUT|TEXTAREA|SELECT)$/.test(A.tagName)&&(T==="value"||T==="checked")){let J=T==="checked"?"change":"input";A.addEventListener(J,(P)=>W(P.target[T]))}}else{let B=h_(T,W);if(B!=null)if(T in A&&!E)A[T]=B;else A.setAttribute(T,B===!0?"":B)}}let L=(T)=>{if(p(T))return T.forEach(L);if(h(T)){let W=k.createTextNode("");A.appendChild(W);let B=[],J=i(()=>{let P=T(),G=(p(P)?P:[P]).map(U_);B.forEach((Z)=>{if(Z._isRuntime)Z.destroy();else Qf(Z);if(Z.parentNode)Z.remove()});let K=W;for(let Z=G.length-1;Z>=0;Z--){let C=G[Z];if(C.parentNode!==K.parentNode)K.parentNode?.insertBefore(C,K);if(C._mounts)C._mounts.forEach((R)=>R());K=C}B=G});J(),A._cleanups.add(()=>m(J)),d(()=>m(J))}else{let W=U_(T);if(A.appendChild(W),W._mounts)W._mounts.forEach((B)=>B())}};return L(_),A},g=(f)=>{let M=new Set,_=[],E=F,A=k.createElement("div");A.style.display="contents",F={_cleanups:M,_mounts:_};let L=(T)=>{if(!T)return;if(T._isRuntime)M.add(T.destroy),A.appendChild(T.container);else if(p(T))T.forEach(L);else A.appendChild(T instanceof Node?T:k.createTextNode(String(T==null?"":T)))};try{L(f({onCleanup:(T)=>M.add(T)}))}finally{F=E}return _.forEach((T)=>T()),{_isRuntime:!0,container:A,destroy:()=>{M.forEach((T)=>T()),Qf(A),A.remove()}}},Gf=(f,M,_=null,E=null)=>{let A=k.createTextNode(""),L=r("div",{style:"display:contents"},[A]),T=null,W=null;return n(()=>!!(h(f)?f():f),(B)=>{if(B===W)return;W=B;let J=()=>{if(T)T.destroy(),T=null};if(T&&!B&&E?.out)E.out(T.container,J);else J();let P=B?M:_;if(P){if(T=g(()=>h(P)?P():P),L.insertBefore(T.container,A),E?.in)E.in(T.container)}}),L},Cf=(f,M,_)=>{let E=k.createTextNode(""),A=r("div",{style:"display:contents"},[E]),L=new Map;return n(()=>(h(f)?f():f)||[],(T)=>{let W=new Map,B=[],J=T||[];for(let G=0;GM(K,G));else L.delete(Z);W.set(Z,C),B.push(C)}L.forEach((G)=>G.destroy());let P=E;for(let G=B.length-1;G>=0;G--){let Z=B[G].container;if(Z.nextSibling!==P)A.insertBefore(Z,P);P=Z}L=W}),A},x=(f)=>{let M=()=>window.location.hash.slice(1)||"/",_=l(M()),E=()=>_(M());window.addEventListener("hashchange",E),d(()=>window.removeEventListener("hashchange",E));let A=r("div",{class:"router-outlet"}),L=null;return n([_],()=>{let T=_(),W=f.find((B)=>{let J=B.path.split("/").filter(Boolean),P=T.split("/").filter(Boolean);return J.length===P.length&&J.every((G,K)=>G[0]===":"||G===P[K])})||f.find((B)=>B.path==="*");if(W){L?.destroy();let B={};W.path.split("/").filter(Boolean).forEach((J,P)=>{if(J[0]===":")B[J.slice(1)]=T.split("/").filter(Boolean)[P]}),x.params(B),L=g(()=>h(W.component)?W.component(B):W.component),A.replaceChildren(L.container)}}),A};x.params=l({});x.to=(f)=>window.location.hash=f.replace(/^#?\/?/,"#/");x.back=()=>window.history.back();x.path=()=>window.location.hash.replace(/^#/,"")||"/";var Xf=(f,M)=>{let _=typeof M==="string"?k.querySelector(M):M;if(!_)return;if(Bf.has(_))Bf.get(_).destroy();let E=g(h(f)?f:()=>f);return _.replaceChildren(E.container),Bf.set(_,E),E},H_=Object.freeze({$:l,$$:e,Watch:n,Tag:r,Render:g,If:Gf,For:Cf,Router:x,Mount:Xf,onMount:g_,onUnmount:d});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={};q(_f,{default:()=>n_,Tooltip:()=>D_,Toast:()=>N_,Timeline:()=>R_,Tabs:()=>K_,Table:()=>Z_,Swap:()=>C_,Stat:()=>Q_,Stack:()=>J_,Select:()=>W_,Rating:()=>A_,Range:()=>T_,Radio:()=>M_,Navbar:()=>f_,Modal:()=>af,Menu:()=>tf,List:()=>of,Label:()=>nf,Input:()=>c,Indicator:()=>pf,Fileinput:()=>cf,Fieldset:()=>vf,Fab:()=>uf,Dropdown:()=>xf,Drawer:()=>wf,Datepicker:()=>Hf,Colorpicker:()=>Uf,Checkbox:()=>Of,Button:()=>b,Badge:()=>zf,Autocomplete:()=>qf,Alert:()=>Kf,Accordion:()=>Zf});var Sf={};q(Sf,{Accordion:()=>Zf});var ff={};q(ff,{val:()=>Q,ui:()=>X,getIcon:()=>N});var Q=(f)=>typeof f==="function"?f():f,X=(f,M)=>typeof M==="function"?()=>`${f} ${M()||""}`.trim():`${f} ${M||""}`.trim(),N=(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,A=_?"ml-1":"mr-1";if(E&&!E.startsWith("icon-[")&&!E.includes("--"))return Tag("span",{class:A},E);return Tag("span",{class:`${E} ${A}`.trim()})}return null};var Zf=(f,M)=>{let{class:_,title:E,name:A,open:L,...T}=f;return Tag("div",{...T,class:X("collapse collapse-arrow bg-base-200 mb-2",_)},[Tag("input",{type:A?"radio":"checkbox",name:A,checked:Q(L)}),Tag("div",{class:"collapse-title text-xl font-medium"},E),Tag("div",{class:"collapse-content"},M)])};var Yf={};q(Yf,{Alert:()=>Kf});var Kf=(f,M)=>{let{class:_,actions:E,type:A="info",soft:L=!0,...T}=f,W={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},P=[`alert-${A}`,L?"alert-soft":"",_].filter(Boolean).join(" "),G=M||f.message;return Tag("div",{...T,role:"alert",class:X("alert",P)},()=>[N(W[A]),Tag("div",{class:"flex-1"},[Tag("span",{},[typeof G==="function"?G():G])]),E?Tag("div",{class:"flex-none"},[typeof E==="function"?E():E]):null].filter(Boolean))};var Nf={};q(Nf,{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 H=(f)=>()=>p_[d_()][f]||f;var Rf={};q(Rf,{Input:()=>c});var c=(f)=>{let{class:M,value:_,type:E="text",icon:A,oninput:L,placeholder:T,disabled:W,validate:B,label:J,...P}=f,G=E==="password",K=$(!1),Z=$(null),C={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]"},R=A?N(A):C[E]?N(C[E]):null,z=()=>N(K()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),o=R?"pl-10":"",Mf=G?"pr-10":"",t=()=>{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"},s=(V)=>{let I=V.target.value;if(B){let Ef=B(I);Z(Ef||null)}L?.(V)},y=()=>Z()&&Z()!=="",S=()=>{let V=`input w-full ${o} ${Mf}`;if(M)V+=` ${M}`;if(y())V+=" input-error";return V.trim()},Y=Tag("input",{...P,type:()=>G?K()?"text":"password":E,placeholder:T||(J?" ":T),class:S,value:_,oninput:s,disabled:()=>Q(W),"aria-invalid":()=>y()?"true":"false"}),D=()=>[Y,R?Tag("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},R):null,G?Tag("button",{type:"button",class:X("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",t()),onclick:(V)=>{V.preventDefault(),K(!K())}},()=>z()):null,Tag("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>y()?Z():null)];if(J)return Tag("label",{class:X("floating-label w-full",M)},()=>[Tag("div",{class:"relative w-full"},D),Tag("span",{},Q(J))]);return Tag("div",{class:"relative w-full"},D)};var qf=(f)=>{let{class:M,items:_=[],value:E,onselect:A,label:L,placeholder:T,...W}=f,B=$(Q(E)||""),J=$(!1),P=$(-1),G=$(()=>{let C=B().toLowerCase(),R=Q(_)||[];return C?R.filter((z)=>(typeof z==="string"?z:z.label).toLowerCase().includes(C)):R}),K=(C)=>{let R=typeof C==="string"?C:C.value,z=typeof C==="string"?C:C.label;if(B(z),typeof E==="function")E(R);A?.(C),J(!1),P(-1)},Z=(C)=>{let R=G();if(C.key==="ArrowDown")C.preventDefault(),J(!0),P(Math.min(P()+1,R.length-1));else if(C.key==="ArrowUp")C.preventDefault(),P(Math.max(P()-1,0));else if(C.key==="Enter"&&P()>=0)C.preventDefault(),K(R[P()]);else if(C.key==="Escape")J(!1)};return Tag("div",{class:"relative w-full"},[c({label:L,class:M,placeholder:T||H("search")(),value:B,onfocus:()=>J(!0),onblur:()=>setTimeout(()=>J(!1),150),onkeydown:Z,oninput:(C)=>{let R=C.target.value;if(B(R),typeof E==="function")E(R);J(!0),P(-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:()=>J()&&G().length?"display:block":"display:none"},[For(G,(C,R)=>Tag("li",{},[Tag("a",{class:()=>`block w-full ${P()===R?"active bg-primary text-primary-content":""}`,onclick:()=>K(C),onmouseenter:()=>P(R)},typeof C==="string"?C:C.label)]),(C,R)=>(typeof C==="string"?C:C.value)+R),()=>G().length?null:Tag("li",{class:"p-2 text-center opacity-50"},H("nodata")())])])};var Df={};q(Df,{Badge:()=>zf});var zf=(f,M)=>{let{class:_,...E}=f;return Tag("span",{...E,class:X("badge",_)},M)};var Vf={};q(Vf,{Button:()=>b});var b=(f,M)=>{let{class:_,loading:E,icon:A,...L}=f,T=N(A);return Tag("button",{...L,class:X("btn",_),disabled:()=>Q(E)||Q(f.disabled)},()=>[Q(E)&&Tag("span",{class:"loading loading-spinner"}),T,M].filter(Boolean))};var Ff={};q(Ff,{Checkbox:()=>Of});var Of=(f)=>{let{class:M,value:_,toggle:E,label:A,...L}=f,T=Tag("input",{...L,type:"checkbox",class:()=>X(Q(E)?"toggle":"checkbox",M),checked:_});return Tag("label",{class:"label cursor-pointer justify-start gap-3"},[T,A?Tag("span",{class:"label-text"},A):null])};var hf={};q(hf,{Colorpicker:()=>Uf});var Uf=(f)=>{let{class:M,value:_,label:E,...A}=f,L=$(!1),T=["#000","#1A1A1A","#333","#4D4D4D","#666","#808080","#B3B3B3","#FFF","#450a0a","#7f1d1d","#991b1b","#b91c1c","#dc2626","#ef4444","#f87171","#fca5a5","#431407","#7c2d12","#9a3412","#c2410c","#ea580c","#f97316","#fb923c","#ffedd5","#713f12","#a16207","#ca8a04","#eab308","#facc15","#fde047","#fef08a","#fff9c4","#064e3b","#065f46","#059669","#10b981","#34d399","#4ade80","#84cc16","#d9f99d","#082f49","#075985","#0284c7","#0ea5e9","#38bdf8","#7dd3fc","#22d3ee","#cffafe","#1e1b4b","#312e81","#4338ca","#4f46e5","#6366f1","#818cf8","#a5b4fc","#e0e7ff","#2e1065","#4c1d95","#6d28d9","#7c3aed","#8b5cf6","#a855f7","#d946ef","#fae8ff"],W=()=>Q(_)||"#000000";return Tag("div",{class:X("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:(B)=>{B.stopPropagation(),L(!L())},...A},[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(L,()=>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:(B)=>B.stopPropagation()},[Tag("div",{class:"grid grid-cols-8 gap-1"},T.map((B)=>Tag("button",{type:"button",style:`background-color: ${B}`,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()===B.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof _==="function")_(B);L(!1)}})))])),If(L,()=>Tag("div",{class:"fixed inset-0 z-[100]",onclick:()=>L(!1)}))])};var kf={};q(kf,{Datepicker:()=>Hf});var Hf=(f)=>{let{class:M,value:_,range:E,label:A,placeholder:L,hour:T=!1,...W}=f,B=$(!1),J=$(new Date),P=$(null),G=$(0),K=$(0),Z=()=>Q(E)===!0,C=new Date,R=`${C.getFullYear()}-${String(C.getMonth()+1).padStart(2,"0")}-${String(C.getDate()).padStart(2,"0")}`,z=(S)=>{let Y=S.getFullYear(),D=String(S.getMonth()+1).padStart(2,"0"),V=String(S.getDate()).padStart(2,"0");return`${Y}-${D}-${V}`},o=(S)=>{let Y=z(S),D=Q(_);if(Z())if(!D?.start||D.start&&D.end){if(typeof _==="function")_({start:Y,end:null,...T&&{startHour:G()}})}else{let V=D.start;if(typeof _==="function"){let I=Y{let S=Q(_);if(!S)return"";if(typeof S==="string"){if(T&&S.includes("T"))return S.replace("T"," ");return S}if(S.start&&S.end){let Y=T&&S.startHour?`${S.start} ${String(S.startHour).padStart(2,"0")}:00`:S.start,D=T&&S.endHour?`${S.end} ${String(S.endHour).padStart(2,"0")}:00`:S.end;return`${Y} - ${D}`}if(S.start)return`${T&&S.startHour?`${S.start} ${String(S.startHour).padStart(2,"0")}:00`:S.start}...`;return""}),t=(S)=>{let Y=J();J(new Date(Y.getFullYear(),Y.getMonth()+S,1))},s=(S)=>{let Y=J();J(new Date(Y.getFullYear()+S,Y.getMonth(),1))},y=({value:S,onChange:Y})=>{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:(D)=>{let V=parseInt(D.target.value);Y(V)}}),Tag("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(Q(S)).padStart(2,"0")+":00")])])};return Tag("div",{class:X("relative w-full",M)},[c({label:A,placeholder:L||(Z()?"Seleccionar rango...":"Seleccionar fecha..."),value:Mf,readonly:!0,icon:N("icon-[lucide--calendar]"),onclick:(S)=>{S.stopPropagation(),B(!B())},...W}),If(B,()=>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:()=>s(-1)},N("icon-[lucide--chevrons-left]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>t(-1)},N("icon-[lucide--chevron-left]"))]),Tag("span",{class:"font-bold uppercase flex-1 text-center"},[()=>J().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:()=>t(1)},N("icon-[lucide--chevron-right]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>s(1)},N("icon-[lucide--chevrons-right]"))])]),Tag("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>P(null)},[...["L","M","X","J","V","S","D"].map((S)=>Tag("div",{class:"text-[10px] opacity-40 font-bold text-center"},S)),()=>{let S=J(),Y=S.getFullYear(),D=S.getMonth(),V=new Date(Y,D,1).getDay(),I=V===0?6:V-1,Ef=new Date(Y,D+1,0).getDate(),Tf=[];for(let u=0;u{let j=Q(_),$f=P(),w_=typeof j==="string"?j.split("T")[0]===U:j?.start===U,j_=j?.end===U,Af=!1;if(Z()&&j?.start){let Lf=j.start;if(!j.end&&$f)Af=U>Lf&&U<=$f||U=$f;else if(j.end)Af=U>Lf&&U{if(Z())P(U)},onclick:()=>o(O_)},[u.toString()]))}return Tf}]),T?Tag("div",{class:"mt-3 pt-2 border-t border-base-300"},[Z()?Tag("div",{class:"flex gap-4"},[y({value:G,onChange:(S)=>{G(S);let Y=Q(_);if(Y?.start)_({...Y,startHour:S})}}),y({value:K,onChange:(S)=>{K(S);let Y=Q(_);if(Y?.end)_({...Y,endHour:S})}})]):y({value:G,onChange:(S)=>{G(S);let Y=Q(_);if(Y&&typeof Y==="string"&&Y.includes("-"))_(Y.split("T")[0]+"T"+String(S).padStart(2,"0")+":00:00")}})]):null])),If(B,()=>Tag("div",{class:"fixed inset-0 z-[90]",onclick:()=>B(!1)}))])};var jf={};q(jf,{Drawer:()=>wf});var wf=(f,M)=>{let{class:_,id:E,open:A,side:L,content:T,...W}=f,B=E||`drawer-${Math.random().toString(36).slice(2,9)}`;return Tag("div",{...W,class:X("drawer",_)},[Tag("input",{id:B,type:"checkbox",class:"drawer-toggle",checked:()=>typeof A==="function"?A():A,onchange:(J)=>{if(typeof A==="function")A(J.target.checked)}}),Tag("div",{class:"drawer-content"},[typeof T==="function"?T():T]),Tag("div",{class:"drawer-side"},[Tag("label",{for:B,class:"drawer-overlay",onclick:()=>{if(typeof A==="function")A(!1)}}),Tag("div",{class:"min-h-full bg-base-200 w-80"},[typeof L==="function"?L():L])])])};var yf={};q(yf,{Dropdown:()=>xf});var w=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(f)=>{if(w&&!w.contains(f.target))w.open=!1,w=null}),window.__dropdownHandlerRegistered=!0;var xf=(f)=>{let{class:M,label:_,icon:E,items:A,...L}=f;return Tag("details",{...L,class:X("dropdown",M)},[Tag("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(T)=>{let W=T.currentTarget.closest("details");if(w&&w!==W)w.open=!1;setTimeout(()=>{w=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 A==="function"?A():A||[]).map((W)=>Tag("li",{},[Tag("a",{class:W.class||"",onclick:(B)=>{if(W.onclick)W.onclick(B);let J=B.currentTarget.closest("details");if(J){if(J.open=!1,w===J)w=null}}},[W.icon?Tag("span",{},W.icon):null,Tag("span",{},W.label)])]))}])])};var mf={};q(mf,{Fab:()=>uf});var uf=(f)=>{let{class:M,icon:_,label:E,actions:A=[],position:L="bottom-6 right-6",...T}=f;return Tag("div",{...T,class:X(`fab absolute ${L} 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"},[_?N(_):null,!_&&E?E:null]),...Q(A).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:(B)=>{B.stopPropagation(),W.onclick?.(B)}},[W.icon?N(W.icon):W.text||""])]))])};var gf={};q(gf,{Fieldset:()=>vf});var vf=(f,M)=>{let{class:_,legend:E,...A}=f;return Tag("fieldset",{...A,class:X("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",_)},[()=>{let L=Q(E);return L?Tag("legend",{class:"fieldset-legend font-bold"},[L]):null},M])};var bf={};q(bf,{Fileinput:()=>cf});var cf=(f)=>{let{class:M,tooltip:_,max:E=2,accept:A="*",onselect:L,...T}=f,W=$([]),B=$(!1),J=$(null),P=E*1024*1024,G=(Z)=>{let C=Array.from(Z);if(J(null),C.find((z)=>z.size>P)){J(`Máx ${E}MB`);return}W([...W(),...C]),L?.(W())},K=(Z)=>{let C=W().filter((R,z)=>z!==Z);W(C),L?.(C)};return Tag("fieldset",{...T,class:X("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:Lf,getOwnPropertyNames:j_,getOwnPropertyDescriptor:w_}=Object,x_=Object.prototype.hasOwnProperty;var V_=new WeakMap,y_=(f)=>{var M=V_.get(f),_;if(M)return M;if(M=Lf({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function")j_(f).map((E)=>!x_.call(M,E)&&Lf(M,E,{get:()=>f[E],enumerable:!(_=w_(f,E))||_.enumerable}));return V_.set(f,M),M};var q=(f,M)=>{for(var _ in M)Lf(f,_,{get:M[_],enumerable:!0,configurable:!0,set:(E)=>M[_]=()=>E})};var n_={};q(n_,{val:()=>C,ui:()=>X,tt:()=>k,getIcon:()=>N,Watch:()=>d,Tooltip:()=>N_,Toast:()=>S_,Timeline:()=>Y_,Tag:()=>n,Tabs:()=>Z_,Table:()=>P_,Swap:()=>G_,Stat:()=>J_,Stack:()=>W_,Select:()=>A_,Router:()=>x,Render:()=>v,Rating:()=>T_,Range:()=>M_,Radio:()=>f_,Navbar:()=>af,Mount:()=>Cf,Modal:()=>tf,Menu:()=>of,List:()=>nf,Label:()=>pf,Input:()=>g,Indicator:()=>cf,If:()=>Qf,For:()=>Gf,Fileinput:()=>vf,Fieldset:()=>mf,Fab:()=>xf,Dropdown:()=>jf,Drawer:()=>kf,Datepicker:()=>Ff,Colorpicker:()=>hf,Checkbox:()=>Df,Button:()=>c,Badge:()=>qf,Autocomplete:()=>Rf,Alert:()=>Zf,Accordion:()=>Pf,$:()=>l});var U=(f)=>typeof f==="function",I_=(f)=>f&&typeof f==="object",b=Array.isArray,H=typeof document<"u"?document:null,h_=(f)=>f?._isRuntime?f.container:f instanceof Node?f:H.createTextNode(f==null?"":String(f)),h=null,O=null,a=!1,Bf=new Set,Wf=new WeakMap,u=(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(O)(O._cleanups||=new Set).add(f)},i=(f,M=!1)=>{let _=()=>{if(_._disposed)return;if(_._deps)_._deps.forEach((W)=>W.delete(_));if(_._cleanups)_._cleanups.forEach((W)=>W()),_._cleanups.clear();let E=h,A=O;h=O=_;try{let W=M?f():(f(),void 0);if(!M)_._result=W;return W}finally{h=E,O=A}};if(_._deps=_._cleanups=_._children=null,_._disposed=!1,_._isComputed=M,_._depth=h?h._depth+1:0,_._mounts=[],_._parent=O,O)(O._children||=new Set).add(_);return _},m_=()=>{if(a)return;a=!0;let f=Array.from(Bf).sort((M,_)=>M._depth-_._depth);Bf.clear();for(let M of f)if(!M._disposed)M();a=!1},o=(f,M=!1)=>{if(!M&&h&&!h._disposed)f.add(h),(h._deps||=new Set).add(f);else if(M){let _=!1;if(f.forEach((E)=>{if(E===h||E._disposed)return;if(E._isComputed){if(E._dirty=!0,E._subs)o(E._subs,!0)}else Bf.add(E),_=!0}),_&&!a)queueMicrotask(m_)}},u_=(f)=>{let M=h;h=null;try{return f()}finally{h=M}},v_=(f)=>{if(O)(O._mounts||=[]).push(f)},l=(f,M=null)=>{let _=new Set;if(U(f)){let E,A=!0,W=()=>{if(A){let T=h;h=W;try{let L=f();if(!Object.is(E,L))E=L,A=!1,o(_,!0)}finally{h=T}}return o(_),E};if(W._isComputed=!0,W._subs=_,W._dirty=!0,W._deps=null,W._disposed=!1,W.markDirty=()=>{A=!0},W.stop=()=>{if(W._disposed=!0,W._deps)W._deps.forEach((T)=>T.delete(W)),W._deps.clear();_.clear()},O)p(W.stop);return W}if(M)try{f=JSON.parse(localStorage.getItem(M))??f}catch(E){}return(...E)=>{if(E.length){let A=U(E[0])?E[0](f):E[0];if(!Object.is(f,A)){if(f=A,M)localStorage.setItem(M,JSON.stringify(f));o(_,!0)}}return o(_),f}},d=(f,M)=>{if(M===void 0){let E=i(f);return E(),()=>u(E)}let _=i(()=>{let E=Array.isArray(f)?f.map((A)=>A()):f();u_(()=>M(E))});return _(),()=>u(_)},Jf=(f)=>{if(f._cleanups)f._cleanups.forEach((M)=>M()),f._cleanups.clear();if(f._ownerEffect)u(f._ownerEffect);if(f.childNodes)f.childNodes.forEach(Jf)},g_=/^\s*(javascript|data|vbscript):/i,c_=(f)=>f==="src"||f==="href"||f.startsWith("on"),O_=(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},n=(f,M={},_=[])=>{if(M instanceof Node||b(M)||!I_(M))_=M,M={};if(U(f)){let T={_mounts:[],_cleanups:new Set},L=i(()=>{let Q=f(M,{children:_,emit:(G,...Y)=>M[`on${G[0].toUpperCase()}${G.slice(1)}`]?.(...Y)});return L._result=Q,Q});L(),T._mounts=L._mounts||[],T._cleanups=L._cleanups||new Set;let B=L._result,J=(Q)=>Q&&typeof Q==="object"&&!Q._isRuntime&&(Q._mounts=T._mounts,Q._cleanups=T._cleanups,Q._ownerEffect=L);if(b(B)?B.forEach(J):J(B),B==null)return null;if(B instanceof Node||b(B)&&B.every((Q)=>Q instanceof Node))return B;return H.createTextNode(String(B))}let E=/^(svg|path|circle|rect|line|polyline|polygon|g|defs|text|tspan|use)$/.test(f),A=E?H.createElementNS("http://www.w3.org/2000/svg",f):H.createElement(f);A._cleanups=new Set;for(let T in M){if(!M.hasOwnProperty(T))continue;let L=M[T];if(T==="ref"){U(L)?L(A):L.current=A;continue}if(T.startsWith("on")){let B=T.slice(2).toLowerCase();A.addEventListener(B,L);let J=()=>A.removeEventListener(B,L);A._cleanups.add(J),p(J)}else if(U(L)){let B=i(()=>{let J=O_(T,L());if(T==="class")A.className=J||"";else if(J==null)A.removeAttribute(T);else if(T in A&&!E)A[T]=J;else A.setAttribute(T,J===!0?"":J)});if(B(),A._cleanups.add(()=>u(B)),p(()=>u(B)),/^(INPUT|TEXTAREA|SELECT)$/.test(A.tagName)&&(T==="value"||T==="checked")){let J=T==="checked"?"change":"input";A.addEventListener(J,(Q)=>L(Q.target[T]))}}else{let B=O_(T,L);if(B!=null)if(T in A&&!E)A[T]=B;else A.setAttribute(T,B===!0?"":B)}}let W=(T)=>{if(b(T))return T.forEach(W);if(U(T)){let L=H.createTextNode("");A.appendChild(L);let B=[],J=i(()=>{let Q=T(),G=(b(Q)?Q:[Q]).map(h_);B.forEach((Z)=>{if(Z._isRuntime)Z.destroy();else Jf(Z);if(Z.parentNode)Z.remove()});let Y=L;for(let Z=G.length-1;Z>=0;Z--){let P=G[Z];if(P.parentNode!==Y.parentNode)Y.parentNode?.insertBefore(P,Y);if(P._mounts)P._mounts.forEach((S)=>S());Y=P}B=G});J(),A._cleanups.add(()=>u(J)),p(()=>u(J))}else{let L=h_(T);if(A.appendChild(L),L._mounts)L._mounts.forEach((B)=>B())}};return W(_),A},v=(f)=>{let M=new Set,_=[],E=O,A=H.createElement("div");A.style.display="contents",A.setAttribute("role","presentation"),O={_cleanups:M,_mounts:_};let W=(T)=>{if(!T)return;if(T._isRuntime)M.add(T.destroy),A.appendChild(T.container);else if(b(T))T.forEach(W);else A.appendChild(T instanceof Node?T:H.createTextNode(String(T==null?"":T)))};try{W(f({onCleanup:(T)=>M.add(T)}))}finally{O=E}return _.forEach((T)=>T()),{_isRuntime:!0,container:A,destroy:()=>{M.forEach((T)=>T()),Jf(A),A.remove()}}},Qf=(f,M,_=null,E=null)=>{let A=H.createTextNode(""),W=n("div",{style:"display:contents"},[A]),T=null,L=null,B=null;return d(()=>!!(U(f)?f():f),(J)=>{if(J===L)return;L=J;let Q=()=>{if(T)T.destroy(),T=null};if(T&&!J&&E?.out){if(B&&B.cancel)B.cancel();let Y=E.out(T.container,Q);if(B=Y,Y&&Y.finished)Y.finished.then(Q);else Q()}else Q();let G=J?M:_;if(G){if(T=v(()=>U(G)?G():G),W.insertBefore(T.container,A),E?.in)E.in(T.container)}}),W},Gf=(f,M,_)=>{let E=H.createTextNode(""),A=n("div",{style:"display:contents"},[E]),W=new Map;return d(()=>(U(f)?f():f)||[],(T)=>{let L=new Map,B=[],J=T||[];for(let G=0;GM(Y,G));else W.delete(Z);L.set(Z,P),B.push(P)}W.forEach((G)=>G.destroy());let Q=E;for(let G=B.length-1;G>=0;G--){let Z=B[G].container;if(Z.nextSibling!==Q)A.insertBefore(Z,Q);Q=Z}W=L}),A},x=(f)=>{let M=()=>window.location.hash.slice(1)||"/",_=l(M()),E=()=>_(M());window.addEventListener("hashchange",E),p(()=>window.removeEventListener("hashchange",E));let A=n("div",{class:"router-outlet"}),W=null;return d([_],()=>{let T=_(),L=f.find((B)=>{let J=B.path.split("/").filter(Boolean),Q=T.split("/").filter(Boolean);return J.length===Q.length&&J.every((G,Y)=>G[0]===":"||G===Q[Y])})||f.find((B)=>B.path==="*");if(L){W?.destroy();let B={};L.path.split("/").filter(Boolean).forEach((J,Q)=>{if(J[0]===":")B[J.slice(1)]=T.split("/").filter(Boolean)[Q]}),x.params(B),W=v(()=>U(L.component)?L.component(B):L.component),A.replaceChildren(W.container)}}),A};x.params=l({});x.to=(f)=>window.location.hash=f.replace(/^#?\/?/,"#/");x.back=()=>window.history.back();x.path=()=>window.location.hash.replace(/^#/,"")||"/";var Cf=(f,M)=>{let _=typeof M==="string"?H.querySelector(M):M;if(!_)return;if(Wf.has(_))Wf.get(_).destroy();let E=v(U(f)?f:()=>f);return _.replaceChildren(E.container),Wf.set(_,E),E},F_=Object.freeze({$:l,Watch:d,Tag:n,Render:v,If:Qf,For:Gf,Router:x,Mount:Cf,onMount:v_,onUnmount:p});if(typeof window<"u")Object.assign(window,F_),"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,_)=>F_.Tag(f,M,_));var ff={};q(ff,{default:()=>d_,Tooltip:()=>N_,Toast:()=>S_,Timeline:()=>Y_,Tabs:()=>Z_,Table:()=>P_,Swap:()=>G_,Stat:()=>J_,Stack:()=>W_,Select:()=>A_,Rating:()=>T_,Range:()=>M_,Radio:()=>f_,Navbar:()=>af,Modal:()=>tf,Menu:()=>of,List:()=>nf,Label:()=>pf,Input:()=>g,Indicator:()=>cf,Fileinput:()=>vf,Fieldset:()=>mf,Fab:()=>xf,Dropdown:()=>jf,Drawer:()=>kf,Datepicker:()=>Ff,Colorpicker:()=>hf,Checkbox:()=>Df,Button:()=>c,Badge:()=>qf,Autocomplete:()=>Rf,Alert:()=>Zf,Accordion:()=>Pf});var Xf={};q(Xf,{Accordion:()=>Pf});var e={};q(e,{val:()=>C,ui:()=>X,getIcon:()=>N});var C=(f)=>typeof f==="function"?f():f,X=(f,M)=>typeof M==="function"?()=>`${f} ${M()||""}`.trim():`${f} ${M||""}`.trim(),N=(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,A=_?"ml-1":"mr-1";if(E&&!E.startsWith("icon-[")&&!E.includes("--"))return Tag("span",{class:A},E);return Tag("span",{class:`${E} ${A}`.trim()})}return null};var Pf=(f,M)=>{let{class:_,title:E,name:A,open:W,...T}=f;return Tag("div",{...T,class:X("collapse collapse-arrow bg-base-200 mb-2",_)},[Tag("input",{type:A?"radio":"checkbox",name:A,checked:C(W)}),Tag("div",{class:"collapse-title text-xl font-medium"},E),Tag("div",{class:"collapse-content"},M)])};var Kf={};q(Kf,{Alert:()=>Zf});var Zf=(f,M)=>{let{class:_,actions:E,type:A="info",soft:W=!0,...T}=f,L={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"},Q=[`alert-${A}`,W?"alert-soft":"",_].filter(Boolean).join(" "),G=M||f.message;return Tag("div",{...T,role:"alert",class:X("alert",Q)},()=>[N(L[A]),Tag("div",{class:"flex-1"},[Tag("span",{},[typeof G==="function"?G():G])]),E?Tag("div",{class:"flex-none"},[typeof E==="function"?E():E]):null].filter(Boolean))};var Sf={};q(Sf,{Autocomplete:()=>Rf});var b_={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"}},p_=$("es");var k=(f)=>()=>b_[p_()][f]||f;var Yf={};q(Yf,{Input:()=>g});var g=(f)=>{let{class:M,value:_,type:E="text",icon:A,oninput:W,placeholder:T,disabled:L,validate:B,label:J,...Q}=f,G=E==="password",Y=$(!1),Z=$(null),P={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]"},S=A?N(A):P[E]?N(P[E]):null,z=()=>N(Y()?"icon-[lucide--eye-off]":"icon-[lucide--eye]"),r=S?"pl-10":"",_f=G?"pr-10":"",t=()=>{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"},s=(V)=>{let I=V.target.value;if(B){let Mf=B(I);Z(Mf||null)}W?.(V)},y=()=>Z()&&Z()!=="",K=()=>{let V=`input w-full ${r} ${_f}`;if(M)V+=` ${M}`;if(y())V+=" input-error";return V.trim()},R=Tag("input",{...Q,type:()=>G?Y()?"text":"password":E,placeholder:T||(J?" ":T),class:K,value:_,oninput:s,disabled:()=>C(L),"aria-invalid":()=>y()?"true":"false"}),D=()=>[R,S?Tag("div",{class:"absolute left-3 inset-y-0 flex items-center pointer-events-none text-base-content/60"},S):null,G?Tag("button",{type:"button",class:X("absolute right-3 inset-y-0 flex items-center","btn btn-ghost btn-circle opacity-50 hover:opacity-100",t()),onclick:(V)=>{V.preventDefault(),Y(!Y())}},()=>z()):null,Tag("div",{class:"text-error text-xs mt-1 px-3 absolute -bottom-5 left-0"},()=>y()?Z():null)];if(J)return Tag("label",{class:X("floating-label w-full",M)},()=>[Tag("div",{class:"relative w-full"},D),Tag("span",{},C(J))]);return Tag("div",{class:"relative w-full"},D)};var Rf=(f)=>{let{class:M,items:_=[],value:E,onselect:A,label:W,placeholder:T,...L}=f,B=$(C(E)||""),J=$(!1),Q=$(-1),G=$(()=>{let P=B().toLowerCase(),S=C(_)||[];return P?S.filter((z)=>(typeof z==="string"?z:z.label).toLowerCase().includes(P)):S}),Y=(P)=>{let S=typeof P==="string"?P:P.value,z=typeof P==="string"?P:P.label;if(B(z),typeof E==="function")E(S);A?.(P),J(!1),Q(-1)},Z=(P)=>{let S=G();if(P.key==="ArrowDown")P.preventDefault(),J(!0),Q(Math.min(Q()+1,S.length-1));else if(P.key==="ArrowUp")P.preventDefault(),Q(Math.max(Q()-1,0));else if(P.key==="Enter"&&Q()>=0)P.preventDefault(),Y(S[Q()]);else if(P.key==="Escape")J(!1)};return Tag("div",{class:"relative w-full"},[g({label:W,class:M,placeholder:T||k("search")(),value:B,onfocus:()=>J(!0),onblur:()=>setTimeout(()=>J(!1),150),onkeydown:Z,oninput:(P)=>{let S=P.target.value;if(B(S),typeof E==="function")E(S);J(!0),Q(-1)},...L}),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:()=>J()&&G().length?"display:block":"display:none"},[For(G,(P,S)=>Tag("li",{},[Tag("a",{class:()=>`block w-full ${Q()===S?"active bg-primary text-primary-content":""}`,onclick:()=>Y(P),onmouseenter:()=>Q(S)},typeof P==="string"?P:P.label)]),(P,S)=>(typeof P==="string"?P:P.value)+S),()=>G().length?null:Tag("li",{class:"p-2 text-center opacity-50"},k("nodata")())])])};var Nf={};q(Nf,{Badge:()=>qf});var qf=(f,M)=>{let{class:_,...E}=f;return Tag("span",{...E,class:X("badge",_)},M)};var zf={};q(zf,{Button:()=>c});var c=(f,M)=>{let{class:_,loading:E,icon:A,...W}=f,T=N(A);return Tag("button",{...W,class:X("btn",_),disabled:()=>C(E)||C(f.disabled)},()=>[C(E)&&Tag("span",{class:"loading loading-spinner"}),T,M].filter(Boolean))};var Vf={};q(Vf,{Checkbox:()=>Df});var Df=(f)=>{let{class:M,value:_,toggle:E,label:A,...W}=f,T=Tag("input",{...W,type:"checkbox",class:()=>X(C(E)?"toggle":"checkbox",M),checked:_});return Tag("label",{class:"label cursor-pointer justify-start gap-3"},[T,A?Tag("span",{class:"label-text"},A):null])};var Of={};q(Of,{Colorpicker:()=>hf});var hf=(f)=>{let{class:M,value:_,label:E,...A}=f,W=$(!1),T=["#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"],L=()=>C(_)||"#000000";return Tag("div",{class:X("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:(B)=>{B.stopPropagation(),W(!W())},...A},[Tag("div",{class:"size-5 rounded-sm shadow-inner border border-black/10 shrink-0",style:()=>`background-color: ${L()}`}),E?Tag("span",{class:"opacity-80"},E):null]),If(W,()=>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:(B)=>B.stopPropagation()},[Tag("div",{class:"grid grid-cols-8 gap-1"},T.map((B)=>Tag("button",{type:"button",style:`background-color: ${B}`,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 + ${L().toLowerCase()===B.toLowerCase()?"ring-2 ring-offset-1 ring-primary z-10 scale-110":""}`},onclick:()=>{if(typeof _==="function")_(B);W(!1)}})))])),If(W,()=>Tag("div",{class:"fixed inset-0 z-[100]",onclick:()=>W(!1)}))])};var Uf={};q(Uf,{Datepicker:()=>Ff});var Ff=(f)=>{let{class:M,value:_,range:E,label:A,placeholder:W,hour:T=!1,...L}=f,B=$(!1),J=$(new Date),Q=$(null),G=$(0),Y=$(0),Z=()=>C(E)===!0,P=new Date,S=`${P.getFullYear()}-${String(P.getMonth()+1).padStart(2,"0")}-${String(P.getDate()).padStart(2,"0")}`,z=(K)=>{let R=K.getFullYear(),D=String(K.getMonth()+1).padStart(2,"0"),V=String(K.getDate()).padStart(2,"0");return`${R}-${D}-${V}`},r=(K)=>{let R=z(K),D=C(_);if(Z())if(!D?.start||D.start&&D.end){if(typeof _==="function")_({start:R,end:null,...T&&{startHour:G()}})}else{let V=D.start;if(typeof _==="function"){let I=R{let K=C(_);if(!K)return"";if(typeof K==="string"){if(T&&K.includes("T"))return K.replace("T"," ");return K}if(K.start&&K.end){let R=T&&K.startHour?`${K.start} ${String(K.startHour).padStart(2,"0")}:00`:K.start,D=T&&K.endHour?`${K.end} ${String(K.endHour).padStart(2,"0")}:00`:K.end;return`${R} - ${D}`}if(K.start)return`${T&&K.startHour?`${K.start} ${String(K.startHour).padStart(2,"0")}:00`:K.start}...`;return""}),t=(K)=>{let R=J();J(new Date(R.getFullYear(),R.getMonth()+K,1))},s=(K)=>{let R=J();J(new Date(R.getFullYear()+K,R.getMonth(),1))},y=({value:K,onChange:R})=>{return Tag("div",{class:"flex-1"},[Tag("div",{class:"flex gap-2 items-center"},[Tag("input",{type:"range",min:0,max:23,value:K,class:"range range-xs flex-1",oninput:(D)=>{let V=parseInt(D.target.value);R(V)}}),Tag("span",{class:"text-sm font-mono min-w-[48px] text-center"},()=>String(C(K)).padStart(2,"0")+":00")])])};return Tag("div",{class:X("relative w-full",M)},[g({label:A,placeholder:W||(Z()?"Seleccionar rango...":"Seleccionar fecha..."),value:_f,readonly:!0,icon:N("icon-[lucide--calendar]"),onclick:(K)=>{K.stopPropagation(),B(!B())},...L}),If(B,()=>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:(K)=>K.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:()=>s(-1)},N("icon-[lucide--chevrons-left]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>t(-1)},N("icon-[lucide--chevron-left]"))]),Tag("span",{class:"font-bold uppercase flex-1 text-center"},[()=>J().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:()=>t(1)},N("icon-[lucide--chevron-right]")),Tag("button",{type:"button",class:"btn btn-ghost btn-xs px-1",onclick:()=>s(1)},N("icon-[lucide--chevrons-right]"))])]),Tag("div",{class:"grid grid-cols-7 gap-1",onmouseleave:()=>Q(null)},[...["L","M","X","J","V","S","D"].map((K)=>Tag("div",{class:"text-[10px] opacity-40 font-bold text-center"},K)),()=>{let K=J(),R=K.getFullYear(),D=K.getMonth(),V=new Date(R,D,1).getDay(),I=V===0?6:V-1,Mf=new Date(R,D+1,0).getDate(),Ef=[];for(let m=0;m{let w=C(_),Tf=Q(),k_=typeof w==="string"?w.split("T")[0]===F:w?.start===F,H_=w?.end===F,$f=!1;if(Z()&&w?.start){let Af=w.start;if(!w.end&&Tf)$f=F>Af&&F<=Tf||F=Tf;else if(w.end)$f=F>Af&&F{if(Z())Q(F)},onclick:()=>r(D_)},[m.toString()]))}return Ef}]),T?Tag("div",{class:"mt-3 pt-2 border-t border-base-300"},[Z()?Tag("div",{class:"flex gap-4"},[y({value:G,onChange:(K)=>{G(K);let R=C(_);if(R?.start)_({...R,startHour:K})}}),y({value:Y,onChange:(K)=>{Y(K);let R=C(_);if(R?.end)_({...R,endHour:K})}})]):y({value:G,onChange:(K)=>{G(K);let R=C(_);if(R&&typeof R==="string"&&R.includes("-"))_(R.split("T")[0]+"T"+String(K).padStart(2,"0")+":00:00")}})]):null])),If(B,()=>Tag("div",{class:"fixed inset-0 z-[90]",onclick:()=>B(!1)}))])};var Hf={};q(Hf,{Drawer:()=>kf});var kf=(f,M)=>{let{class:_,id:E,open:A,side:W,content:T,...L}=f,B=E||`drawer-${Math.random().toString(36).slice(2,9)}`;return Tag("div",{...L,class:X("drawer",_)},[Tag("input",{id:B,type:"checkbox",class:"drawer-toggle",checked:()=>typeof A==="function"?A():A,onchange:(J)=>{if(typeof A==="function")A(J.target.checked)}}),Tag("div",{class:"drawer-content"},[typeof T==="function"?T():T]),Tag("div",{class:"drawer-side"},[Tag("label",{for:B,class:"drawer-overlay",onclick:()=>{if(typeof A==="function")A(!1)}}),Tag("div",{class:"min-h-full bg-base-200 w-80"},[typeof W==="function"?W():W])])])};var wf={};q(wf,{Dropdown:()=>jf});var j=null;if(typeof window<"u"&&!window.__dropdownHandlerRegistered)window.addEventListener("click",(f)=>{if(j&&!j.contains(f.target))j.open=!1,j=null}),window.__dropdownHandlerRegistered=!0;var jf=(f)=>{let{class:M,label:_,icon:E,items:A,...W}=f;return Tag("details",{...W,class:X("dropdown",M)},[Tag("summary",{class:"btn m-1 flex items-center gap-2 list-none cursor-pointer",style:"display: inline-flex;",onclick:(T)=>{let L=T.currentTarget.closest("details");if(j&&j!==L)j.open=!1;setTimeout(()=>{j=L.open?L: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 A==="function"?A():A||[]).map((L)=>Tag("li",{},[Tag("a",{class:L.class||"",onclick:(B)=>{if(L.onclick)L.onclick(B);let J=B.currentTarget.closest("details");if(J){if(J.open=!1,j===J)j=null}}},[L.icon?Tag("span",{},L.icon):null,Tag("span",{},L.label)])]))}])])};var yf={};q(yf,{Fab:()=>xf});var xf=(f)=>{let{class:M,icon:_,label:E,actions:A=[],position:W="bottom-6 right-6",...T}=f;return Tag("div",{...T,class:X(`fab absolute ${W} 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"},[_?N(_):null,!_&&E?E:null]),...C(A).map((L)=>Tag("div",{class:"flex items-center gap-3 transition-all duration-300"},[L.label?Tag("span",{class:"badge badge-ghost shadow-sm whitespace-nowrap"},L.label):null,Tag("button",{type:"button",class:`btn btn-circle shadow-lg ${L.class||""}`,onclick:(B)=>{B.stopPropagation(),L.onclick?.(B)}},[L.icon?N(L.icon):L.text||""])]))])};var uf={};q(uf,{Fieldset:()=>mf});var mf=(f,M)=>{let{class:_,legend:E,...A}=f;return Tag("fieldset",{...A,class:X("fieldset bg-base-200 border border-base-300 p-4 rounded-lg",_)},[()=>{let W=C(E);return W?Tag("legend",{class:"fieldset-legend font-bold"},[W]):null},M])};var gf={};q(gf,{Fileinput:()=>vf});var vf=(f)=>{let{class:M,tooltip:_,max:E=2,accept:A="*",onselect:W,...T}=f,L=$([]),B=$(!1),J=$(null),Q=E*1024*1024,G=(Z)=>{let P=Array.from(Z);if(J(null),P.find((z)=>z.size>Q)){J(`Máx ${E}MB`);return}L([...L(),...P]),W?.(L())},Y=(Z)=>{let P=L().filter((S,z)=>z!==Z);L(P),W?.(P)};return Tag("fieldset",{...T,class:X("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 ${B()?"border-primary bg-primary/10":"border-base-content/20 bg-base-100 hover:bg-base-200"} - `,ondragover:(Z)=>{Z.preventDefault(),B(!0)},ondragleave:()=>B(!1),ondrop:(Z)=>{Z.preventDefault(),B(!1),G(Z.dataTransfer.files)}},[Tag("div",{class:"flex items-center gap-3 w-full"},[N("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:A,class:"hidden",onchange:(Z)=>G(Z.target.files)})])]),()=>J()?Tag("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},J()):null,If(()=>W().length>0,()=>Tag("ul",{class:"mt-2 space-y-1"},[For(W,(Z,C)=>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]"},Z.name),Tag("span",{class:"text-[9px] opacity-40"},`(${(Z.size/1024).toFixed(0)} KB)`)]),Tag("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(R)=>{R.preventDefault(),R.stopPropagation(),K(C)}},[N("icon-[lucide--x]")])]),(Z)=>Z.name+Z.lastModified)]))])};var df={};q(df,{Indicator:()=>pf});var pf=(f,M)=>{let{value:_,class:E,...A}=f;return Tag("div",{...A,class:"indicator"},()=>[_?Tag("span",{class:X("indicator-item badge",E)},()=>typeof _==="function"?_():_):null,M].filter(Boolean))};var rf={};q(rf,{Label:()=>nf});var nf=(f)=>{let{children:M,value:_,floating:E=!1,class:A,...L}=f;if(E)return Tag("label",{class:X("floating-label",A),...L},()=>[typeof M==="function"?M():M,_?Tag("span",{},Q(_)):null]);return Tag("label",{class:X("label",A),...L},()=>[_?Tag("span",{class:"label-text"},Q(_)):null,typeof M==="function"?M():M])};var lf={};q(lf,{List:()=>of});var of=(f)=>{let{class:M,items:_,header:E,render:A=(B)=>B,keyFn:L=(B,J)=>B.id??J,...T}=f,W=For(_,(B,J)=>Tag("li",{class:"list-row",style:"width: 100%; display: block;"},[Tag("div",{style:"width: 100%;"},[A(B,J)])]),L);return Tag("ul",{...T,style:"display: block; width: 100%;",class:X("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%;"},[Q(E)])),W]:W)};var sf={};q(sf,{Menu:()=>tf});var tf=(f)=>{let{class:M,items:_,...E}=f,A=(L)=>For(()=>L||[],(T)=>Tag("li",{},[T.children?Tag("details",{open:T.open},[Tag("summary",{},[T.icon&&Tag("span",{class:"mr-2"},T.icon),T.label]),Tag("ul",{},A(T.children))]):Tag("a",{class:()=>Q(T.active)?"active":"",onclick:T.onclick},[T.icon&&Tag("span",{class:"mr-2"},T.icon),T.label])]),(T,W)=>T.label||W);return Tag("ul",{...E,class:X("menu bg-base-200 rounded-box",M)},A(_))};var ef={};q(ef,{Modal:()=>af});var af=(f,M)=>{let{class:_,title:E,buttons:A,open:L,...T}=f,W=null,B=()=>{let P=typeof L==="function"?L():L;if(!W)return;if(P){if(!W.open)W.showModal()}else if(W.open)W.close()};Watch(()=>B());let J=()=>{if(typeof L==="function")L(!1)};return Tag("dialog",{...T,ref:(P)=>{if(W=P,P)B()},class:X("modal",_),onclose:J,oncancel:J},[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(A)?A:[A]).filter(Boolean),b({type:"submit"},H("close")())])])]),Tag("form",{method:"dialog",class:"modal-backdrop"},[Tag("button",{},"close")])])};var __={};q(__,{Navbar:()=>f_});var f_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:X("navbar bg-base-100 shadow-sm px-4",_)},M)};var E_={};q(E_,{Radio:()=>M_});var M_=(f)=>{let{class:M,label:_,tooltip:E,value:A,inputValue:L,name:T,...W}=f,B=Tag("input",{...W,type:"radio",name:T,class:X("radio",M),checked:()=>Q(A)===L,onclick:()=>{if(typeof A==="function")A(L)}});if(!_&&!E)return B;let J=Tag("label",{class:"label cursor-pointer justify-start gap-3"},[B,_?Tag("span",{class:"label-text"},_):null]);return E?Tag("div",{class:"tooltip","data-tip":E},J):J};var $_={};q($_,{Range:()=>T_});var T_=(f)=>{let{class:M,label:_,tooltip:E,value:A,...L}=f,T=Tag("input",{...L,type:"range",class:X("range",M),value:A,disabled:()=>Q(f.disabled)});if(!_&&!E)return T;let W=Tag("div",{class:"flex flex-col gap-2"},[_?Tag("span",{class:"label-text"},_):null,T]);return E?Tag("div",{class:"tooltip","data-tip":E},W):W};var L_={};q(L_,{Rating:()=>A_});var A_=(f)=>{let{class:M,value:_,count:E=5,mask:A="mask-star",readonly:L=!1,onchange:T,...W}=f,B=`rating-${Math.random().toString(36).slice(2,7)}`;return Tag("div",{...W,class:()=>X(`rating ${Q(L)?"pointer-events-none":""}`,M)},Array.from({length:Q(E)},(J,P)=>{let G=P+1;return Tag("input",{type:"radio",name:B,class:`mask ${A}`,checked:()=>Math.round(Q(_))===G,onchange:()=>{if(!Q(L)){if(typeof T==="function")T(G);else if(typeof _==="function")_(G)}}})}))};var B_={};q(B_,{Select:()=>W_});var W_=(f)=>{let{class:M,label:_,items:E,value:A,...L}=f,T=Tag("select",{...L,class:X("select select-bordered w-full",M),value:A},For(()=>Q(E)||[],(W)=>Tag("option",{value:W.value,$selected:()=>String(Q(A))===String(W.value)},W.label),(W)=>W.value));if(!_)return T;return Tag("label",{class:"fieldset-label flex flex-col gap-1"},[Tag("span",{},_),T])};var P_={};q(P_,{Stack:()=>J_});var J_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:X("stack",_)},M)};var G_={};q(G_,{Stat:()=>Q_});var Q_=(f)=>{let{class:M,icon:_,label:E,value:A,desc:L,...T}=f;return Tag("div",{...T,class:X("stat",M)},[_&&Tag("div",{class:"stat-figure text-secondary"},_),E&&Tag("div",{class:"stat-title"},E),Tag("div",{class:"stat-value"},()=>Q(A)??A),L&&Tag("div",{class:"stat-desc"},L)])};var X_={};q(X_,{Swap:()=>C_});var C_=(f)=>{let{class:M,value:_,on:E,off:A,...L}=f;return Tag("label",{...L,class:X("swap",M)},[Tag("input",{type:"checkbox",checked:()=>Q(_),onclick:(T)=>{if(typeof _==="function")_(T.target.checked)}}),Tag("div",{class:"swap-on"},E),Tag("div",{class:"swap-off"},A)])};var S_={};q(S_,{Table:()=>Z_});var Z_=(f)=>{let{class:M,items:_=[],columns:E=[],keyFn:A,zebra:L=!1,pinRows:T=!1,empty:W=H("nodata")(),...B}=f,J=()=>{let G=Q(L)?"table-zebra":"",K=Q(T)?"table-pin-rows":"";return X("table",M,G,K)},P=A||((G,K)=>G.id||K);return Tag("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[Tag("table",{...B,class:J},[Tag("thead",{},[Tag("tr",{},E.map((G)=>Tag("th",{class:G.class||""},G.label)))]),Tag("tbody",{},[For(_,(G,K)=>{let Z=()=>{let C=Q(_),R=P(G,K);return C.find((z,o)=>P(z,o)===R)||G};return Tag("tr",{class:"hover"},E.map((C)=>{let R=()=>{let z=Z();if(C.render)return C.render(z,K);return Q(z[C.key])};return Tag("td",{class:C.class||""},[R])}))},P),If(()=>Q(_).length===0,()=>Tag("tr",{},[Tag("td",{colspan:E.length,class:"text-center p-10 opacity-50"},[Q(W)])]))])])])};var Y_={};q(Y_,{Tabs:()=>K_});var K_=(f)=>{let{items:M,class:_,...E}=f,A=typeof M==="function"?M:()=>M||[],L=$(0);return Watch(()=>{let T=A().findIndex((W)=>Q(W.active)===!0);if(T!==-1&&T!==L())L(T)}),Tag("div",{...E,class:X("tabs",_)},()=>{let T=A(),W=[];for(let B=0;BL()===B,G=Tag("button",{class:()=>X("tab",P()?"tab-active":""),onclick:(C)=>{if(C.preventDefault(),!Q(J.disabled)){if(J.onclick)J.onclick();L(B)}}}),K=Q(J.label);if(K instanceof Node)G.replaceChildren(K);else G.textContent=String(K);W.push(G);let Z=Tag("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>P()?"display: block":"display: none"},()=>Q(J.content));W.push(Z)}return W})};var q_={};q(q_,{Timeline:()=>R_});var R_=(f)=>{let{class:M,items:_=[],vertical:E=!0,compact:A=!1,...L}=f,T={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return Tag("ul",{...L,class:()=>X(`timeline ${Q(E)?"timeline-vertical":"timeline-horizontal"} ${Q(A)?"timeline-compact":""}`,M)},()=>{let W=(typeof _==="function"?_():_)||[];return W.map((B,J)=>{let P=J===0,G=J===W.length-1,K=B.type||"success",Z=()=>Q(B.completed),C=()=>J>0&&Q(W[J-1].completed),R=(z)=>typeof z==="function"?z():z;return Tag("li",{class:"flex-1"},[!P?Tag("hr",{class:()=>C()?"bg-primary":""}):null,Tag("div",{class:"timeline-start"},[()=>R(B.title)]),Tag("div",{class:"timeline-middle"},[()=>B.icon?N(B.icon):N(T[K]||T.success)]),Tag("div",{class:"timeline-end timeline-box shadow-sm"},[()=>R(B.detail)]),!G?Tag("hr",{class:()=>Z()?"bg-primary":""}):null])})})};var z_={};q(z_,{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 A=Tag("div",{style:"display: contents"});E.appendChild(A);let L,T=()=>{clearTimeout(L);let J=A.firstElementChild;if(J&&!J.classList.contains("opacity-0"))J.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(B.destroy(),A.remove(),!E.hasChildNodes())E.remove()},300);else B.destroy(),A.remove()},W=()=>{let J=N("icon-[lucide--x]"),P=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]),b({class:"btn-xs btn-circle btn-ghost",onclick:T},J)]);return requestAnimationFrame(()=>P.classList.remove("translate-x-10","opacity-0")),P},B=Mount(W,A);if(_>0)L=setTimeout(T,_);return T};var V_={};q(V_,{Tooltip:()=>D_});var D_=(f,M)=>Tag("div",{...f,class:()=>X("tooltip w-full",f.class),"data-tip":f.tip},M);var k_={...Sf,...Yf,...Nf,...Df,...Vf,...Ff,...hf,...kf,...jf,...yf,...mf,...gf,...bf,...df,...Rf,...rf,...lf,...sf,...ef,...__,...E_,...$_,...L_,...B_,...P_,...G_,...X_,...S_,...Y_,...q_,...z_,...V_},n_={...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:H,writable:!1,configurable:!0,enumerable:!0}),Object.defineProperty(window,"SigProUI",{value:{..._f,Utils:ff,tt:H},writable:!1,configurable:!0,enumerable:!0}),console.log("\uD83C\uDFA8 SigProUI ready");})(); + `,ondragover:(Z)=>{Z.preventDefault(),B(!0)},ondragleave:()=>B(!1),ondrop:(Z)=>{Z.preventDefault(),B(!1),G(Z.dataTransfer.files)}},[Tag("div",{class:"flex items-center gap-3 w-full"},[N("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:A,class:"hidden",onchange:(Z)=>G(Z.target.files)})])]),()=>J()?Tag("span",{class:"text-[10px] text-error mt-1 px-1 font-medium"},J()):null,If(()=>L().length>0,()=>Tag("ul",{class:"mt-2 space-y-1"},[For(L,(Z,P)=>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]"},Z.name),Tag("span",{class:"text-[9px] opacity-40"},`(${(Z.size/1024).toFixed(0)} KB)`)]),Tag("button",{type:"button",class:"btn btn-ghost btn-xs btn-circle",onclick:(S)=>{S.preventDefault(),S.stopPropagation(),Y(P)}},[N("icon-[lucide--x]")])]),(Z)=>Z.name+Z.lastModified)]))])};var bf={};q(bf,{Indicator:()=>cf});var cf=(f,M)=>{let{value:_,class:E,...A}=f;return Tag("div",{...A,class:"indicator"},()=>[_?Tag("span",{class:X("indicator-item badge",E)},()=>typeof _==="function"?_():_):null,M].filter(Boolean))};var df={};q(df,{Label:()=>pf});var pf=(f)=>{let{children:M,value:_,floating:E=!1,class:A,...W}=f;if(E)return Tag("label",{class:X("floating-label",A),...W},()=>[typeof M==="function"?M():M,_?Tag("span",{},C(_)):null]);return Tag("label",{class:X("label",A),...W},()=>[_?Tag("span",{class:"label-text"},C(_)):null,typeof M==="function"?M():M])};var rf={};q(rf,{List:()=>nf});var nf=(f)=>{let{class:M,items:_,header:E,render:A=(B)=>B,keyFn:W=(B,J)=>B.id??J,...T}=f,L=For(_,(B,J)=>Tag("li",{class:"list-row",style:"width: 100%; display: block;"},[Tag("div",{style:"width: 100%;"},[A(B,J)])]),W);return Tag("ul",{...T,style:"display: block; width: 100%;",class:X("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%;"},[C(E)])),L]:L)};var lf={};q(lf,{Menu:()=>of});var of=(f)=>{let{class:M,items:_,...E}=f,A=(W)=>For(()=>W||[],(T)=>Tag("li",{},[T.children?Tag("details",{open:T.open},[Tag("summary",{},[T.icon&&Tag("span",{class:"mr-2"},T.icon),T.label]),Tag("ul",{},A(T.children))]):Tag("a",{class:()=>C(T.active)?"active":"",onclick:T.onclick},[T.icon&&Tag("span",{class:"mr-2"},T.icon),T.label])]),(T,L)=>T.label||L);return Tag("ul",{...E,class:X("menu bg-base-200 rounded-box",M)},A(_))};var sf={};q(sf,{Modal:()=>tf});var tf=(f,M)=>{let{class:_,title:E,buttons:A,open:W,...T}=f,L=null,B=()=>{let Q=typeof W==="function"?W():W;if(!L)return;if(Q){if(!L.open)L.showModal()}else if(L.open)L.close()};Watch(()=>B());let J=()=>{if(typeof W==="function")W(!1)};return Tag("dialog",{...T,ref:(Q)=>{if(L=Q,Q)B()},class:X("modal",_),onclose:J,oncancel:J},[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(A)?A:[A]).filter(Boolean),c({type:"submit"},k("close")())])])]),Tag("form",{method:"dialog",class:"modal-backdrop"},[Tag("button",{},"close")])])};var ef={};q(ef,{Navbar:()=>af});var af=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:X("navbar bg-base-100 shadow-sm px-4",_)},M)};var __={};q(__,{Radio:()=>f_});var f_=(f)=>{let{class:M,label:_,tooltip:E,value:A,inputValue:W,name:T,...L}=f,B=Tag("input",{...L,type:"radio",name:T,class:X("radio",M),checked:()=>C(A)===W,onclick:()=>{if(typeof A==="function")A(W)}});if(!_&&!E)return B;let J=Tag("label",{class:"label cursor-pointer justify-start gap-3"},[B,_?Tag("span",{class:"label-text"},_):null]);return E?Tag("div",{class:"tooltip","data-tip":E},J):J};var E_={};q(E_,{Range:()=>M_});var M_=(f)=>{let{class:M,label:_,tooltip:E,value:A,...W}=f,T=Tag("input",{...W,type:"range",class:X("range",M),value:A,disabled:()=>C(f.disabled)});if(!_&&!E)return T;let L=Tag("div",{class:"flex flex-col gap-2"},[_?Tag("span",{class:"label-text"},_):null,T]);return E?Tag("div",{class:"tooltip","data-tip":E},L):L};var $_={};q($_,{Rating:()=>T_});var T_=(f)=>{let{class:M,value:_,count:E=5,mask:A="mask-star",readonly:W=!1,onchange:T,...L}=f,B=`rating-${Math.random().toString(36).slice(2,7)}`;return Tag("div",{...L,class:()=>X(`rating ${C(W)?"pointer-events-none":""}`,M)},Array.from({length:C(E)},(J,Q)=>{let G=Q+1;return Tag("input",{type:"radio",name:B,class:`mask ${A}`,checked:()=>Math.round(C(_))===G,onchange:()=>{if(!C(W)){if(typeof T==="function")T(G);else if(typeof _==="function")_(G)}}})}))};var L_={};q(L_,{Select:()=>A_});var A_=(f)=>{let{class:M,label:_,items:E,value:A,...W}=f,T=Tag("select",{...W,class:X("select select-bordered w-full",M),value:A},For(()=>C(E)||[],(L)=>Tag("option",{value:L.value,$selected:()=>String(C(A))===String(L.value)},L.label),(L)=>L.value));if(!_)return T;return Tag("label",{class:"fieldset-label flex flex-col gap-1"},[Tag("span",{},_),T])};var B_={};q(B_,{Stack:()=>W_});var W_=(f,M)=>{let{class:_,...E}=f;return Tag("div",{...E,class:X("stack",_)},M)};var Q_={};q(Q_,{Stat:()=>J_});var J_=(f)=>{let{class:M,icon:_,label:E,value:A,desc:W,...T}=f;return Tag("div",{...T,class:X("stat",M)},[_&&Tag("div",{class:"stat-figure text-secondary"},_),E&&Tag("div",{class:"stat-title"},E),Tag("div",{class:"stat-value"},()=>C(A)??A),W&&Tag("div",{class:"stat-desc"},W)])};var C_={};q(C_,{Swap:()=>G_});var G_=(f)=>{let{class:M,value:_,on:E,off:A,...W}=f;return Tag("label",{...W,class:X("swap",M)},[Tag("input",{type:"checkbox",checked:()=>C(_),onclick:(T)=>{if(typeof _==="function")_(T.target.checked)}}),Tag("div",{class:"swap-on"},E),Tag("div",{class:"swap-off"},A)])};var X_={};q(X_,{Table:()=>P_});var P_=(f)=>{let{class:M,items:_=[],columns:E=[],keyFn:A,zebra:W=!1,pinRows:T=!1,empty:L=k("nodata")(),...B}=f,J=()=>{let G=C(W)?"table-zebra":"",Y=C(T)?"table-pin-rows":"";return X("table",M,G,Y)},Q=A||((G,Y)=>G.id||Y);return Tag("div",{class:"overflow-x-auto w-full bg-base-100 rounded-box border border-base-300"},[Tag("table",{...B,class:J},[Tag("thead",{},[Tag("tr",{},E.map((G)=>Tag("th",{class:G.class||""},G.label)))]),Tag("tbody",{},[For(_,(G,Y)=>{let Z=()=>{let P=C(_),S=Q(G,Y);return P.find((z,r)=>Q(z,r)===S)||G};return Tag("tr",{class:"hover"},E.map((P)=>{let S=()=>{let z=Z();if(P.render)return P.render(z,Y);return C(z[P.key])};return Tag("td",{class:P.class||""},[S])}))},Q),If(()=>C(_).length===0,()=>Tag("tr",{},[Tag("td",{colspan:E.length,class:"text-center p-10 opacity-50"},[C(L)])]))])])])};var K_={};q(K_,{Tabs:()=>Z_});var Z_=(f)=>{let{items:M,class:_,...E}=f,A=typeof M==="function"?M:()=>M||[],W=$(0);return Watch(()=>{let T=A().findIndex((L)=>C(L.active)===!0);if(T!==-1&&T!==W())W(T)}),Tag("div",{...E,class:X("tabs",_)},()=>{let T=A(),L=[];for(let B=0;BW()===B,G=Tag("button",{class:()=>X("tab",Q()?"tab-active":""),onclick:(P)=>{if(P.preventDefault(),!C(J.disabled)){if(J.onclick)J.onclick();W(B)}}}),Y=C(J.label);if(Y instanceof Node)G.replaceChildren(Y);else G.textContent=String(Y);L.push(G);let Z=Tag("div",{class:"tab-content bg-base-100 border-base-300 p-6",style:()=>Q()?"display: block":"display: none"},()=>C(J.content));L.push(Z)}return L})};var R_={};q(R_,{Timeline:()=>Y_});var Y_=(f)=>{let{class:M,items:_=[],vertical:E=!0,compact:A=!1,...W}=f,T={info:"icon-[lucide--info]",success:"icon-[lucide--check-circle]",warning:"icon-[lucide--alert-triangle]",error:"icon-[lucide--alert-circle]"};return Tag("ul",{...W,class:()=>X(`timeline ${C(E)?"timeline-vertical":"timeline-horizontal"} ${C(A)?"timeline-compact":""}`,M)},()=>{let L=(typeof _==="function"?_():_)||[];return L.map((B,J)=>{let Q=J===0,G=J===L.length-1,Y=B.type||"success",Z=()=>C(B.completed),P=()=>J>0&&C(L[J-1].completed),S=(z)=>typeof z==="function"?z():z;return Tag("li",{class:"flex-1"},[!Q?Tag("hr",{class:()=>P()?"bg-primary":""}):null,Tag("div",{class:"timeline-start"},[()=>S(B.title)]),Tag("div",{class:"timeline-middle"},[()=>B.icon?N(B.icon):N(T[Y]||T.success)]),Tag("div",{class:"timeline-end timeline-box shadow-sm"},[()=>S(B.detail)]),!G?Tag("hr",{class:()=>Z()?"bg-primary":""}):null])})})};var q_={};q(q_,{Toast:()=>S_});var S_=(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 A=Tag("div",{style:"display: contents"});E.appendChild(A);let W,T=()=>{clearTimeout(W);let J=A.firstElementChild;if(J&&!J.classList.contains("opacity-0"))J.classList.add("translate-x-full","opacity-0"),setTimeout(()=>{if(B.destroy(),A.remove(),!E.hasChildNodes())E.remove()},300);else B.destroy(),A.remove()},L=()=>{let J=N("icon-[lucide--x]"),Q=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]),c({class:"btn-xs btn-circle btn-ghost",onclick:T},J)]);return requestAnimationFrame(()=>Q.classList.remove("translate-x-10","opacity-0")),Q},B=Mount(L,A);if(_>0)W=setTimeout(T,_);return T};var z_={};q(z_,{Tooltip:()=>N_});var N_=(f,M)=>Tag("div",{...f,class:()=>X("tooltip w-full",f.class),"data-tip":f.tip},M);var U_={...Xf,...Kf,...Sf,...Nf,...zf,...Vf,...Of,...Uf,...Hf,...wf,...yf,...uf,...gf,...bf,...Yf,...df,...rf,...lf,...sf,...ef,...__,...E_,...$_,...L_,...B_,...Q_,...C_,...X_,...K_,...R_,...q_,...z_},d_={...U_,install:(f=window)=>{Object.entries(U_).forEach(([M,_])=>{f[M]=_}),console.log("\uD83D\uDE80 SigproUI")}};if(typeof window<"u")Object.entries(ff).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.entries(e).forEach(([f,M])=>{Object.defineProperty(window,f,{value:M,writable:!1,configurable:!0,enumerable:!0})}),Object.defineProperty(window,"tt",{value:k,writable:!1,configurable:!0,enumerable:!0}),Object.defineProperty(window,"SigProUI",{value:{...ff,Utils:e,tt:k},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 045a667..78cfa5a 100644 --- a/docs/sigpro-ui.min.js +++ b/docs/sigpro-ui.min.js @@ -73,15 +73,14 @@ Autocomplete: () => Autocomplete, Alert: () => Alert, Accordion: () => Accordion, - $$: () => $$, $: () => $2 }); // src/sigpro.js - var doc = typeof document !== "undefined" ? document : null; - var isArr = Array.isArray; var isFunc = (f) => typeof f === "function"; var isObj = (o) => o && typeof o === "object"; + var isArr = Array.isArray; + var doc = typeof document !== "undefined" ? document : null; var ensureNode = (n) => n?._isRuntime ? n.container : n instanceof Node ? n : doc.createTextNode(n == null ? "" : String(n)); var activeEffect = null; var activeOwner = null; @@ -123,7 +122,8 @@ effect._cleanups.forEach((cl) => cl()); effect._cleanups.clear(); } - const prevEffect = activeEffect, prevOwner = activeOwner; + const prevEffect = activeEffect; + const prevOwner = activeOwner; activeEffect = activeOwner = effect; try { const res = isComputed ? fn() : (fn(), undefined); @@ -251,29 +251,6 @@ return val; }; }; - var $$ = (obj, cache = new WeakMap) => { - if (!isObj(obj)) - return obj; - if (cache.has(obj)) - return cache.get(obj); - const subs = {}; - const proxy = new Proxy(obj, { - get: (t, k) => { - trackUpdate(subs[k] ??= new Set); - return isObj(t[k]) ? $$(t[k], cache) : t[k]; - }, - set: (t, k, v) => { - if (!Object.is(t[k], v)) { - t[k] = v; - if (subs[k]) - trackUpdate(subs[k], true); - } - return true; - } - }); - cache.set(obj, proxy); - return proxy; - }; var Watch2 = (sources, cb) => { if (cb === undefined) { const effect2 = createEffect(sources); @@ -319,7 +296,10 @@ if (isFunc(tag)) { const ctx = { _mounts: [], _cleanups: new Set }; const effect = createEffect(() => { - const result2 = tag(props, { children, emit: (ev, ...args) => props[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...args) }); + const result2 = tag(props, { + children, + emit: (ev, ...args) => props[`on${ev[0].toUpperCase()}${ev.slice(1)}`]?.(...args) + }); effect._result = result2; return result2; }); @@ -429,6 +409,7 @@ const previousOwner = activeOwner; const container = doc.createElement("div"); container.style.display = "contents"; + container.setAttribute("role", "presentation"); activeOwner = { _cleanups: cleanups, _mounts: mounts }; const processResult = (result) => { if (!result) @@ -461,7 +442,9 @@ var If2 = (cond, ifYes, ifNot = null, trans = null) => { const anchor = doc.createTextNode(""); const root = Tag2("div", { style: "display:contents" }, [anchor]); - let currentView = null, last = null; + let currentView = null; + let last = null; + let exitPromise = null; Watch2(() => !!(isFunc(cond) ? cond() : cond), (show) => { if (show === last) return; @@ -472,10 +455,18 @@ currentView = null; } }; - if (currentView && !show && trans?.out) - trans.out(currentView.container, disposeView); - else + 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(); + } const content = show ? ifYes : ifNot; if (content) { currentView = Render(() => isFunc(content) ? content() : content); @@ -562,7 +553,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 }); + var SigPro = Object.freeze({ $: $2, Watch: Watch2, Tag: Tag2, Render, If: If2, For: For2, Router, Mount: Mount2, onMount, onUnmount }); 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/index.js b/index.js index d40221f..0c092f0 100644 --- a/index.js +++ b/index.js @@ -1,12 +1,12 @@ // import './src/sigpro.js'; -import { $, $$, Render, Watch, Tag, If, For, Router, Mount } from './src/sigpro.js'; +import { $, Render, Watch, Tag, If, For, Router, Mount } from './src/sigpro.js'; import * as Components from './src/components/index.js'; import * as Utils from './src/core/utils.js'; import { tt } from './src/core/i18n.js'; export * from './src/components/index.js'; export * from './src/core/utils.js'; -export { $, $$, Render, Watch, Tag, If, For, Router, Mount, tt }; +export { $, Render, Watch, Tag, If, For, Router, Mount, tt }; if (typeof window !== 'undefined') { // const CoreAPI = { $, $$, Render, Watch, Tag, If, For, Router, Mount } = SigPro; diff --git a/src/sigpro.js b/src/sigpro.js index ee9acde..e420017 100644 --- a/src/sigpro.js +++ b/src/sigpro.js @@ -1,416 +1,476 @@ -/** SigPro - Signals & Proxies */ +const isFunc = f => typeof f === "function" +const isObj = o => o && typeof o === "object" +const isArr = Array.isArray +const doc = typeof document !== "undefined" ? document : null +const ensureNode = n => n?._isRuntime ? n.container : (n instanceof Node ? n : doc.createTextNode(n == null ? "" : String(n))) -// Helpers -const doc = typeof document !== "undefined" ? document : null; -const isArr = Array.isArray, isFunc = f => typeof f === "function", isObj = o => o && typeof o === "object"; -const ensureNode = n => n?._isRuntime ? n.container : (n instanceof Node ? n : doc.createTextNode(n == null ? "" : String(n))); - -let activeEffect = null, activeOwner = null, isFlushing = false; -const effectQueue = new Set(), MOUNTED_NODES = new WeakMap(); +let activeEffect = null +let activeOwner = null +let isFlushing = false +const effectQueue = new Set() +const MOUNTED_NODES = new WeakMap() const dispose = eff => { - if (!eff || eff._disposed) return; - eff._disposed = true; - const stack = [eff]; + if (!eff || eff._disposed) return + eff._disposed = true + const stack = [eff] while (stack.length) { - const e = stack.pop(); - if (e._cleanups) { e._cleanups.forEach(fn => fn()); e._cleanups.clear(); } - if (e._children) { e._children.forEach(child => stack.push(child)); e._children.clear(); } - if (e._deps) { e._deps.forEach(depSet => depSet.delete(e)); e._deps.clear(); } + const e = stack.pop() + if (e._cleanups) { + e._cleanups.forEach(fn => fn()) + e._cleanups.clear() + } + if (e._children) { + e._children.forEach(child => stack.push(child)) + e._children.clear() + } + if (e._deps) { + e._deps.forEach(depSet => depSet.delete(e)) + e._deps.clear() + } } -}; +} const onUnmount = fn => { - if (activeOwner) (activeOwner._cleanups ||= new Set()).add(fn); -}; + if (activeOwner) (activeOwner._cleanups ||= new Set()).add(fn) +} -// Effect creation const createEffect = (fn, isComputed = false) => { const effect = () => { - if (effect._disposed) return; - if (effect._deps) effect._deps.forEach(depSet => depSet.delete(effect)); - if (effect._cleanups) { effect._cleanups.forEach(cl => cl()); effect._cleanups.clear(); } - const prevEffect = activeEffect, prevOwner = activeOwner; - activeEffect = activeOwner = effect; - try { - const res = isComputed ? fn() : (fn(), undefined); - if (!isComputed) effect._result = res; - return res; - } finally { - activeEffect = prevEffect; - activeOwner = prevOwner; + if (effect._disposed) return + if (effect._deps) effect._deps.forEach(depSet => depSet.delete(effect)) + if (effect._cleanups) { + effect._cleanups.forEach(cl => cl()) + effect._cleanups.clear() } - }; - effect._deps = effect._cleanups = effect._children = null; - effect._disposed = false; - effect._isComputed = isComputed; - effect._depth = activeEffect ? activeEffect._depth + 1 : 0; - effect._mounts = []; - effect._parent = activeOwner; - if (activeOwner) (activeOwner._children ||= new Set()).add(effect); - return effect; -}; + const prevEffect = activeEffect + const prevOwner = activeOwner + activeEffect = activeOwner = effect + try { + const res = isComputed ? fn() : (fn(), undefined) + if (!isComputed) effect._result = res + return res + } finally { + activeEffect = prevEffect + activeOwner = prevOwner + } + } + effect._deps = effect._cleanups = effect._children = null + effect._disposed = false + effect._isComputed = isComputed + effect._depth = activeEffect ? activeEffect._depth + 1 : 0 + effect._mounts = [] + effect._parent = activeOwner + if (activeOwner) (activeOwner._children ||= new Set()).add(effect) + return effect +} const flush = () => { - if (isFlushing) return; - isFlushing = true; - const sorted = Array.from(effectQueue).sort((a, b) => a._depth - b._depth); - effectQueue.clear(); - for (const e of sorted) if (!e._disposed) e(); - isFlushing = false; -}; + if (isFlushing) return + isFlushing = true + const sorted = Array.from(effectQueue).sort((a, b) => a._depth - b._depth) + effectQueue.clear() + for (const e of sorted) if (!e._disposed) e() + isFlushing = false +} const trackUpdate = (subs, trigger = false) => { if (!trigger && activeEffect && !activeEffect._disposed) { - subs.add(activeEffect); - (activeEffect._deps ||= new Set()).add(subs); + subs.add(activeEffect) + ;(activeEffect._deps ||= new Set()).add(subs) } else if (trigger) { - let hasQueue = false; + let hasQueue = false subs.forEach(e => { - if (e === activeEffect || e._disposed) return; + if (e === activeEffect || e._disposed) return if (e._isComputed) { - e._dirty = true; - if (e._subs) trackUpdate(e._subs, true); + e._dirty = true + if (e._subs) trackUpdate(e._subs, true) } else { - effectQueue.add(e); - hasQueue = true; + effectQueue.add(e) + hasQueue = true } - }); - if (hasQueue && !isFlushing) queueMicrotask(flush); + }) + if (hasQueue && !isFlushing) queueMicrotask(flush) } -}; +} -const untrack = fn => { const p = activeEffect; activeEffect = null; try { return fn(); } finally { activeEffect = p; } }; +const untrack = fn => { + const p = activeEffect + activeEffect = null + try { return fn() } finally { activeEffect = p } +} const onMount = fn => { - if (activeOwner) (activeOwner._mounts ||= []).push(fn); -}; + if (activeOwner) (activeOwner._mounts ||= []).push(fn) +} -// Reactive state const $ = (val, key = null) => { - const subs = new Set(); + const subs = new Set() if (isFunc(val)) { - let cache, dirty = true; + let cache, dirty = true const computed = () => { if (dirty) { - const prev = activeEffect; - activeEffect = computed; + const prev = activeEffect + activeEffect = computed try { - const next = val(); - if (!Object.is(cache, next)) { cache = next; dirty = false; trackUpdate(subs, true); } - } finally { activeEffect = prev; } + const next = val() + if (!Object.is(cache, next)) { + cache = next + dirty = false + trackUpdate(subs, true) + } + } finally { activeEffect = prev } } - trackUpdate(subs); - return cache; - }; - computed._isComputed = true; - computed._subs = subs; - computed._dirty = true; - computed._deps = null; - computed._disposed = false; - computed.markDirty = () => { dirty = true; }; + trackUpdate(subs) + return cache + } + computed._isComputed = true + computed._subs = subs + computed._dirty = true + computed._deps = null + computed._disposed = false + computed.markDirty = () => { dirty = true } computed.stop = () => { - computed._disposed = true; - if (computed._deps) { computed._deps.forEach(depSet => depSet.delete(computed)); computed._deps.clear(); } - subs.clear(); - }; - if (activeOwner) onUnmount(computed.stop); - return computed; + computed._disposed = true + if (computed._deps) { + computed._deps.forEach(depSet => depSet.delete(computed)) + computed._deps.clear() + } + subs.clear() + } + if (activeOwner) onUnmount(computed.stop) + return computed } - if (key) try { val = JSON.parse(localStorage.getItem(key)) ?? val; } catch (e) { } + if (key) try { val = JSON.parse(localStorage.getItem(key)) ?? val } catch (e) {} return (...args) => { if (args.length) { - const next = isFunc(args[0]) ? args[0](val) : args[0]; - if (!Object.is(val, next)) { val = next; if (key) localStorage.setItem(key, JSON.stringify(val)); trackUpdate(subs, true); } + const next = isFunc(args[0]) ? args[0](val) : args[0] + if (!Object.is(val, next)) { + val = next + if (key) localStorage.setItem(key, JSON.stringify(val)) + trackUpdate(subs, true) + } } - trackUpdate(subs); - return val; - }; -}; + trackUpdate(subs) + return val + } +} -const $$ = (obj, cache = new WeakMap()) => { - if (!isObj(obj)) return obj; - if (cache.has(obj)) return cache.get(obj); - const subs = {}; - const proxy = new Proxy(obj, { - get: (t, k) => { trackUpdate(subs[k] ??= new Set()); return isObj(t[k]) ? $$(t[k], cache) : t[k]; }, - set: (t, k, v) => { if (!Object.is(t[k], v)) { t[k] = v; if (subs[k]) trackUpdate(subs[k], true); } return true; } - }); - cache.set(obj, proxy); - return proxy; -}; - -// Watchers const Watch = (sources, cb) => { if (cb === undefined) { - const effect = createEffect(sources); - effect(); - return () => dispose(effect); + const effect = createEffect(sources) + effect() + return () => dispose(effect) } const effect = createEffect(() => { - const vals = Array.isArray(sources) ? sources.map(s => s()) : sources(); - untrack(() => cb(vals)); - }); - effect(); - return () => dispose(effect); -}; + const vals = Array.isArray(sources) ? sources.map(s => s()) : sources() + untrack(() => cb(vals)) + }) + effect() + return () => dispose(effect) +} const cleanupNode = node => { - if (node._cleanups) { node._cleanups.forEach(fn => fn()); node._cleanups.clear(); } - if (node._ownerEffect) dispose(node._ownerEffect); - if (node.childNodes) node.childNodes.forEach(cleanupNode); -}; + if (node._cleanups) { + node._cleanups.forEach(fn => fn()) + node._cleanups.clear() + } + if (node._ownerEffect) dispose(node._ownerEffect) + if (node.childNodes) node.childNodes.forEach(cleanupNode) +} -// --- Seguridad optimizada --- -const DANGEROUS_PROTOCOL = /^\s*(javascript|data|vbscript):/i; -const isDangerousAttr = key => key === 'src' || key === 'href' || key.startsWith('on'); +const DANGEROUS_PROTOCOL = /^\s*(javascript|data|vbscript):/i +const isDangerousAttr = key => key === 'src' || key === 'href' || key.startsWith('on') const validateAttr = (key, val) => { - if (val == null || val === false) return null; + if (val == null || val === false) return null if (isDangerousAttr(key)) { - const sVal = String(val); + const sVal = String(val) if (DANGEROUS_PROTOCOL.test(sVal)) { - console.warn(`[SigPro] Bloqueado protocolo peligroso en ${key}`); - return '#'; + console.warn(`[SigPro] Bloqueado protocolo peligroso en ${key}`) + return '#' } } - return val; -}; + return val +} -// CreateElement 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) }); - effect._result = result; - return result; - }); - effect(); - ctx._mounts = effect._mounts || []; - ctx._cleanups = effect._cleanups || new Set(); - const result = effect._result; - const attachLifecycle = node => node && typeof node === 'object' && !node._isRuntime && (node._mounts = ctx._mounts, node._cleanups = ctx._cleanups, node._ownerEffect = effect); - isArr(result) ? result.forEach(attachLifecycle) : attachLifecycle(result); - if (result == null) return null; - if (result instanceof Node || (isArr(result) && result.every(n => n instanceof Node))) return result; - return doc.createTextNode(String(result)); + if (props instanceof Node || isArr(props) || !isObj(props)) { + children = props + props = {} } - 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(); + 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) + }) + effect._result = result + return result + }) + effect() + ctx._mounts = effect._mounts || [] + ctx._cleanups = effect._cleanups || new Set() + const result = effect._result + const attachLifecycle = node => node && typeof node === 'object' && !node._isRuntime && ( + node._mounts = ctx._mounts, + node._cleanups = ctx._cleanups, + node._ownerEffect = effect + ) + isArr(result) ? result.forEach(attachLifecycle) : attachLifecycle(result) + if (result == null) return null + if (result instanceof Node || (isArr(result) && result.every(n => n instanceof Node))) return result + return doc.createTextNode(String(result)) + } + 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() for (let k in props) { - if (!props.hasOwnProperty(k)) continue; - let v = props[k]; - if (k === "ref") { isFunc(v) ? v(el) : (v.current = el); continue; } + if (!props.hasOwnProperty(k)) continue + let v = props[k] + if (k === "ref") { + isFunc(v) ? v(el) : (v.current = el) + continue + } if (k.startsWith("on")) { - const ev = k.slice(2).toLowerCase(); - el.addEventListener(ev, v); - const off = () => el.removeEventListener(ev, v); - el._cleanups.add(off); - onUnmount(off); + const ev = k.slice(2).toLowerCase() + el.addEventListener(ev, v) + const off = () => el.removeEventListener(ev, v) + el._cleanups.add(off) + onUnmount(off) } else if (isFunc(v)) { const effect = createEffect(() => { - const val = validateAttr(k, v()); - if (k === "class") el.className = val || ""; - else if (val == null) el.removeAttribute(k); - else if (k in el && !isSVG) el[k] = val; - else el.setAttribute(k, val === true ? "" : val); - }); - effect(); - el._cleanups.add(() => dispose(effect)); - onUnmount(() => dispose(effect)); + const val = validateAttr(k, v()) + if (k === "class") el.className = val || "" + else if (val == null) el.removeAttribute(k) + else if (k in el && !isSVG) el[k] = val + else el.setAttribute(k, val === true ? "" : val) + }) + effect() + el._cleanups.add(() => dispose(effect)) + onUnmount(() => dispose(effect)) if (/^(INPUT|TEXTAREA|SELECT)$/.test(el.tagName) && (k === "value" || k === "checked")) { - const evType = k === "checked" ? "change" : "input"; - el.addEventListener(evType, ev => v(ev.target[k])); + const evType = k === "checked" ? "change" : "input" + el.addEventListener(evType, ev => v(ev.target[k])) } } else { - const val = validateAttr(k, v); + const val = validateAttr(k, v) if (val != null) { - if (k in el && !isSVG) el[k] = val; - else el.setAttribute(k, val === true ? "" : val); + if (k in el && !isSVG) el[k] = val + else el.setAttribute(k, val === true ? "" : val) } } } const append = c => { - if (isArr(c)) return c.forEach(append); + if (isArr(c)) return c.forEach(append) if (isFunc(c)) { - const anchor = doc.createTextNode(""); - el.appendChild(anchor); - let currentNodes = []; + const anchor = doc.createTextNode("") + el.appendChild(anchor) + let currentNodes = [] const effect = createEffect(() => { - const res = c(); - const next = (isArr(res) ? res : [res]).map(ensureNode); + const res = c() + const next = (isArr(res) ? res : [res]).map(ensureNode) currentNodes.forEach(n => { - if (n._isRuntime) n.destroy(); - else cleanupNode(n); - if (n.parentNode) n.remove(); - }); - let ref = anchor; + if (n._isRuntime) n.destroy() + else cleanupNode(n) + if (n.parentNode) n.remove() + }) + let ref = anchor for (let i = next.length - 1; i >= 0; i--) { - const node = next[i]; - if (node.parentNode !== ref.parentNode) ref.parentNode?.insertBefore(node, ref); - if (node._mounts) node._mounts.forEach(fn => fn()); - ref = node; + const node = next[i] + if (node.parentNode !== ref.parentNode) ref.parentNode?.insertBefore(node, ref) + if (node._mounts) node._mounts.forEach(fn => fn()) + ref = node } - currentNodes = next; - }); - effect(); - el._cleanups.add(() => dispose(effect)); - onUnmount(() => dispose(effect)); + currentNodes = next + }) + effect() + el._cleanups.add(() => dispose(effect)) + onUnmount(() => dispose(effect)) } else { - const node = ensureNode(c); - el.appendChild(node); - if (node._mounts) node._mounts.forEach(fn => fn()); + const node = ensureNode(c) + el.appendChild(node) + if (node._mounts) node._mounts.forEach(fn => fn()) } - }; - append(children); - return el; -}; + } + append(children) + return el +} -// Render -const Render = (renderFn) => { - const cleanups = new Set(); - const mounts = []; - const previousOwner = activeOwner; - const container = doc.createElement("div"); - container.style.display = "contents"; - activeOwner = { _cleanups: cleanups, _mounts: mounts }; +const Render = renderFn => { + const cleanups = new Set() + const mounts = [] + const previousOwner = activeOwner + const container = doc.createElement("div") + container.style.display = "contents" + container.setAttribute("role", "presentation") // ← único cambio real + activeOwner = { _cleanups: cleanups, _mounts: mounts } - const processResult = (result) => { - if (!result) return; + const processResult = result => { + if (!result) return if (result._isRuntime) { - cleanups.add(result.destroy); - container.appendChild(result.container); + cleanups.add(result.destroy) + container.appendChild(result.container) } else if (isArr(result)) { - result.forEach(processResult); + result.forEach(processResult) } else { - container.appendChild(result instanceof Node ? result : doc.createTextNode(String(result == null ? "" : result))); + container.appendChild(result instanceof Node ? result : doc.createTextNode(String(result == null ? "" : result))) } - }; + } try { - processResult(renderFn({ onCleanup: (fn) => cleanups.add(fn) })); - } finally { activeOwner = previousOwner; } + processResult(renderFn({ onCleanup: fn => cleanups.add(fn) })) + } finally { activeOwner = previousOwner } - mounts.forEach(fn => fn()); + mounts.forEach(fn => fn()) return { _isRuntime: true, container, destroy: () => { - cleanups.forEach((fn) => fn()); - cleanupNode(container); - container.remove(); - }, - }; -}; + cleanups.forEach(fn => fn()) + cleanupNode(container) + container.remove() + } + } +} -// If const If = (cond, ifYes, ifNot = null, trans = null) => { - const anchor = doc.createTextNode(""); - const root = Tag("div", { style: "display:contents" }, [anchor]); - let currentView = null, last = 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) trans.out(currentView.container, disposeView); - else disposeView(); - const content = show ? ifYes : ifNot; + 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() + } + + 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); + currentView = Render(() => isFunc(content) ? content() : content) + root.insertBefore(currentView.container, anchor) + if (trans?.in) trans.in(currentView.container) } } - ); - return root; -}; + ) + return root +} -// For const For = (src, itemFn, keyFn) => { - const anchor = doc.createTextNode(""); - const root = Tag("div", { style: "display:contents" }, [anchor]); - let cache = new Map(); - Watch(() => (isFunc(src) ? src() : src) || [], (items) => { - const nextCache = new Map(); - const nextOrder = []; - const newItems = items || []; + const anchor = doc.createTextNode("") + const root = Tag("div", { style: "display:contents" }, [anchor]) + let cache = new Map() + Watch(() => (isFunc(src) ? src() : src) || [], items => { + const nextCache = new Map() + const nextOrder = [] + const newItems = items || [] for (let i = 0; i < newItems.length; i++) { - const item = newItems[i]; - const key = keyFn ? keyFn(item, i) : (item?.id ?? i); - let view = cache.get(key); - if (!view) view = Render(() => itemFn(item, i)); else cache.delete(key); - nextCache.set(key, view); - nextOrder.push(view); + const item = newItems[i] + const key = keyFn ? keyFn(item, i) : (item?.id ?? i) + let view = cache.get(key) + if (!view) view = Render(() => itemFn(item, i)) + else cache.delete(key) + nextCache.set(key, view) + nextOrder.push(view) } - cache.forEach(view => view.destroy()); - let lastRef = anchor; + cache.forEach(view => view.destroy()) + let lastRef = anchor for (let i = nextOrder.length - 1; i >= 0; i--) { - const view = nextOrder[i]; - const node = view.container; - if (node.nextSibling !== lastRef) root.insertBefore(node, lastRef); - lastRef = node; + const view = nextOrder[i] + const node = view.container + if (node.nextSibling !== lastRef) root.insertBefore(node, lastRef) + lastRef = node } - cache = nextCache; - }); - return root; -}; + cache = nextCache + }) + return root +} -// Router const Router = routes => { - const getHash = () => window.location.hash.slice(1) || "/"; - const path = $(getHash()); - const handler = () => path(getHash()); - window.addEventListener("hashchange", handler); - onUnmount(() => window.removeEventListener("hashchange", handler)); - const outlet = Tag("div", { class: "router-outlet" }); - let currentView = null; + const getHash = () => window.location.hash.slice(1) || "/" + const path = $(getHash()) + const handler = () => path(getHash()) + window.addEventListener("hashchange", handler) + onUnmount(() => window.removeEventListener("hashchange", handler)) + const outlet = Tag("div", { class: "router-outlet" }) + let currentView = null Watch([path], () => { - const cur = path(); + const cur = path() const route = routes.find(r => { - const p1 = r.path.split("/").filter(Boolean); - const p2 = cur.split("/").filter(Boolean); - return p1.length === p2.length && p1.every((p, i) => p[0] === ":" || p === p2[i]); - }) || routes.find(r => r.path === "*"); + const p1 = r.path.split("/").filter(Boolean) + const p2 = cur.split("/").filter(Boolean) + return p1.length === p2.length && p1.every((p, i) => p[0] === ":" || p === p2[i]) + }) || routes.find(r => r.path === "*") if (route) { - currentView?.destroy(); - const params = {}; - route.path.split("/").filter(Boolean).forEach((p, i) => { if (p[0] === ":") params[p.slice(1)] = cur.split("/").filter(Boolean)[i]; }); - Router.params(params); - currentView = Render(() => isFunc(route.component) ? route.component(params) : route.component); - outlet.replaceChildren(currentView.container); + currentView?.destroy() + const params = {} + route.path.split("/").filter(Boolean).forEach((p, i) => { + if (p[0] === ":") params[p.slice(1)] = cur.split("/").filter(Boolean)[i] + }) + Router.params(params) + currentView = Render(() => isFunc(route.component) ? route.component(params) : route.component) + outlet.replaceChildren(currentView.container) } - }); - return outlet; -}; -Router.params = $({}); -Router.to = p => window.location.hash = p.replace(/^#?\/?/, "#/"); -Router.back = () => window.history.back(); -Router.path = () => window.location.hash.replace(/^#/, "") || "/"; + }) + return outlet +} +Router.params = $({}) +Router.to = p => window.location.hash = p.replace(/^#?\/?/, "#/") +Router.back = () => window.history.back() +Router.path = () => window.location.hash.replace(/^#/, "") || "/" -// Mount const Mount = (comp, target) => { - const t = typeof target === "string" ? doc.querySelector(target) : target; - if (!t) return; - if (MOUNTED_NODES.has(t)) MOUNTED_NODES.get(t).destroy(); - const inst = Render(isFunc(comp) ? comp : () => comp); - t.replaceChildren(inst.container); - MOUNTED_NODES.set(t, inst); - return inst; + const t = typeof target === "string" ? doc.querySelector(target) : target + if (!t) return + if (MOUNTED_NODES.has(t)) MOUNTED_NODES.get(t).destroy() + const inst = Render(isFunc(comp) ? comp : () => comp) + t.replaceChildren(inst.container) + MOUNTED_NODES.set(t, inst) + return inst +} + +const set = (signal, path, value) => { + if (value === undefined) { + signal(isFunc(path) ? path(signal()) : path); + } else { + const keys = path.split('.'); + const last = keys.pop(); + const current = signal(); + const obj = keys.reduce((o, k) => ({ ...o, [k]: { ...o[k] } }), { ...current }); + obj[last] = value; + signal(obj); + } }; -const SigPro = Object.freeze({ $, $$, Watch, Tag, Render, If, For, Router, Mount, onMount, onUnmount }); +const SigPro = Object.freeze({ $, Watch, Tag, Render, If, For, Router, Mount, onMount, onUnmount, set }) if (typeof window !== "undefined") { - Object.assign(window, SigPro); + 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)); + .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 }; -export default SigPro; + +export { $, Watch, Tag, Render, If, For, Router, Mount, onMount, onUnmount, set } +export default SigPro \ No newline at end of file