xote 4.6.0 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/xote.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let J={contents:0};function Y(){return J.contents=J.contents+1|0,J.contents}function Pe(e){return e===void 0?{BS_PRIVATE_NESTED_SOME_NONE:0}:e!==null&&e.BS_PRIVATE_NESTED_SOME_NONE!==void 0?{BS_PRIVATE_NESTED_SOME_NONE:e.BS_PRIVATE_NESTED_SOME_NONE+1|0}:e}function xe(e){if(e!=null)return Pe(e)}function ce(e){if(e===null||e.BS_PRIVATE_NESTED_SOME_NONE===void 0)return e;let t=e.BS_PRIVATE_NESTED_SOME_NONE;if(t!==0)return{BS_PRIVATE_NESTED_SOME_NONE:t-1|0}}function Z(e,t){return e!==void 0?ce(e):t}function Ge(e,t,n){return e.reduce(n,t)}function De(e,t){let n=e.length,r=new Array(n),l=0;for(let u=0;u<n;++u){let s=e[u],c=t(s);c!==void 0&&(r[l]=ce(c),l=l+1|0)}return r.length=l,r}function Fe(e,t){let n=0;for(;;){let r=n;if(r===e.length)return;let l=t(e[r]);if(l!==void 0)return l;n=r+1|0}}let h=new Map,I=new Map,L=new Map,p={contents:void 0},j=new Set,O={contents:!1},v={contents:!1};function ee(e){if(I.get(e)===void 0){I.set(e,new Set);return}}function Le(e,t){let n=I.get(e);if(n!==void 0){n.forEach(t);return}}function Be(e,t){let n=I.get(e);if(n!==void 0){n.add(t);return}}function ze(e,t){let n=I.get(e);if(n!==void 0){n.delete(t);return}}function Ve(e){return Array.from(Z(I.get(e),new Set).values())}function de(e,t){let n=p.contents;p.contents=e;try{let r=t();return p.contents=n,r}catch(r){throw p.contents=n,r}}function We(e){let t=p.contents;p.contents=void 0;try{let n=e();return p.contents=t,n}catch(n){throw p.contents=t,n}}function Xe(e){let t=p.contents;return t!==void 0?t===e:!1}function qe(e){if(!O.contents){O.contents=!0;try{e(),O.contents=!1;return}catch(t){throw O.contents=!1,t}}}function Ke(e,t){ee(t);let n=Xe(e),r=h.get(e);if(n&&r!==void 0&&!r.deps.has(t))return r.deps.add(t),Be(t,e)}function P(e){e.deps.forEach(t=>ze(t,e.id)),e.deps.clear()}function He(e){let t=L.get(e);if(t===void 0)return;L.delete(e);let n=h.get(t);if(n!==void 0){P(n),h.delete(t);return}}function ae(e){return Ge(e,0,(t,n)=>n>t?n:t)}function Ue(e){let t=[];return e.deps.forEach(n=>Le(n,r=>{if(r===e.id)return;let l=h.get(r);if(l===void 0)return;if(typeof l.kind=="object"){t.push(l.level);return}})),ae(t)+1|0}function Je(e){let t=[];return e.deps.forEach(n=>{let r=L.get(n);if(r===void 0||r===e.id)return;let l=h.get(r);if(l!==void 0){t.push(l.level);return}}),ae(t)+1|0}function W(e){return typeof e.kind=="object"?Je(e):Ue(e)}function Qe(e,t){let n=h.get(e),r=h.get(t);if(n===void 0)return r!==void 0?1:0;if(r===void 0)return-1;let u=typeof n.kind=="object"?0:1,c=typeof r.kind=="object"?0:1,d=u-c|0;return d!==0?d:n.level-r.level|0}function Ye(e){v.contents=!0,P(e),de(e.id,()=>{e.run(),v.contents=!1}),e.level=W(e)}function se(){for(;j.size>0;){let e=Array.from(j.values());j.clear(),e.sort(Qe),e.forEach(t=>{let n=h.get(t);if(n!==void 0)return Ye(n)})}}function fe(e){if(ee(e),Ve(e).forEach(t=>{let n=h.get(t);if(n===void 0)return;let r=n.kind;if(typeof r=="object")return n.dirty?void 0:(n.dirty=!0,fe(r.VAL));j.add(t)}),j.size>0)return qe(se)}function pe(e){let t=L.get(e);if(t===void 0)return;let n=h.get(t);if(n!==void 0&&n.dirty){v.contents=!0,P(n),de(t,()=>{n.run(),n.dirty=!1,v.contents=!1}),n.level=W(n);return}}function Ze(e){let t=O.contents;O.contents=!0;try{let n=e();return t||(O.contents=!1,j.size>0&&se()),n}catch(n){throw t||(O.contents=!1),n}}let et=We,tt=ee;function me(e,t,n){let r=Y();return tt(r),{id:r,value:{contents:e},version:{contents:0},equals:Z(n,(l,u)=>l===u),name:t}}function nt(e){pe(e.id);let t=p.contents;return t!==void 0&&Ke(t,e.id),e.value.contents}function rt(e){return pe(e.id),e.value.contents}function he(e,t){let n;try{n=!e.equals(e.value.contents,t)}catch{n=!0}if(n)return e.value.contents=t,e.version.contents=e.version.contents+1|0,fe(e.id)}function lt(e,t){he(e,t(e.value.contents))}let ut,it,ot=Ze,ct=et;const dt=Object.freeze(Object.defineProperty({__proto__:null,Id:ut,Scheduler:it,batch:ot,get:nt,make:me,peek:rt,set:he,untrack:ct,update:lt},Symbol.toStringTag,{value:"Module"}));function _e(e,t,n,r){return{id:e,kind:t,run:n,deps:new Set,level:0,dirty:!0,name:r}}function at(e,t){let n=Y(),r={contents:void 0},u=_e(n,"Effect",()=>{let d=r.contents;d!==void 0&&d(),r.contents=e()},t);h.set(n,u),v.contents=!0,P(u);let s=p.contents;p.contents=n;try{u.run(),v.contents=!1}catch(d){throw p.contents=s,v.contents=!1,d}return p.contents=s,u.level=W(u),{dispose:()=>{let d=h.get(n);if(d===void 0)return;let x=r.contents;x!==void 0&&x(),P(d),h.delete(n)}}}let st,ft,pt;const mt=Object.freeze(Object.defineProperty({__proto__:null,Id:st,Observer:ft,Scheduler:pt,run:at},Symbol.toStringTag,{value:"Module"}));function ht(e,t){let n=me(void 0,t,void 0),r=Y(),l=()=>{let c=e();n.value.contents=c},u=_e(r,{NAME:"Computed",VAL:n.id},l,void 0);h.set(r,u),v.contents=!0,P(u);let s=p.contents;p.contents=r;try{u.run(),u.dirty=!1,v.contents=!1}catch(c){throw p.contents=s,v.contents=!1,c}return p.contents=s,u.level=W(u),L.set(n.id,r),n}function _t(e){He(e.id)}let gt,St,Et,bt;const vt=Object.freeze(Object.defineProperty({__proto__:null,Id:gt,Observer:Et,Scheduler:bt,Signal:St,dispose:_t,make:ht},Symbol.toStringTag,{value:"Module"}));let o=dt,S=vt,w=mt;function ge(e){return De(e.split("/"),t=>{if(t!=="")return t.startsWith(":")?{TAG:"Param",_0:t.slice(1)}:{TAG:"Static",_0:t}})}function Se(e,t){let n=t.split("/").filter(u=>u!=="");if(e.length!==n.length)return"NoMatch";let r={};return e.every((u,s)=>{let c=n[s];return u.TAG==="Static"?c===u._0:(r[u._0]=c,!0)})?{TAG:"Match",_0:r}:"NoMatch"}function te(e,t){return Se(ge(e),t)}const yt=Object.freeze(Object.defineProperty({__proto__:null,match:te,matchPath:Se,parsePattern:ge},Symbol.toStringTag,{value:"Module"}));function wt(e,t){delete e[t]}function C(e,t,n){switch(t){case"checked":e.checked=n==="true";return;case"disabled":e.disabled=n==="true";return;case"aria-expanded":case"aria-hidden":case"aria-selected":case"multiple":case"readonly":case"required":break;case"value":e.value=n;return;default:e.setAttribute(t,n);return}n==="true"?e.setAttribute(t,""):e.removeAttribute(t)}let Ot={setAttrOrProp:C},V={contents:void 0};function kt(){return{disposers:[],computeds:[]}}function N(e,t){let n=V.contents;V.contents=e;let r=t();return V.contents=n,r}function M(e,t){e.disposers.push(t)}function Ee(e){e.disposers.forEach(t=>t.dispose()),e.computeds.forEach(t=>S.dispose(t))}function R(e,t){e.__xote_owner__=t}function be(e){return xe(e.__xote_owner__)}let Tt={currentOwner:V,createOwner:kt,runWithOwner:N,addDisposer:M,disposeOwner:Ee,setOwner:R,getOwner:be};function ve(e,t){return[e,{TAG:"Static",_0:t}]}function ye(e,t){return[e,{TAG:"SignalValue",_0:t}]}function we(e,t){return[e,{TAG:"Compute",_0:t}]}let At={$$static:ve,signal:ye,computed:we};function F(e){let t=be(e);t!==void 0&&Ee(t),Array.from(e.childNodes||[]).forEach(F)}function y(e){switch(e.TAG){case"Element":let t=e.children,n=e.events,r=e.attrs,l=document.createElement(e.tag),u={disposers:[],computeds:[]};return R(l,u),N(u,()=>{r.forEach(i=>{let m=i[1],g=i[0];switch(m.TAG){case"Static":return C(l,g,m._0);case"SignalValue":let E=m._0;C(l,g,o.peek(E));let b=w.run(()=>{C(l,g,o.get(E))},void 0);return M(u,b);case"Compute":let D=m._0;C(l,g,D());let $=w.run(()=>{C(l,g,D())},void 0);return M(u,$)}}),n.forEach(i=>{l.addEventListener(i[0],i[1])}),t.forEach(i=>{let m=y(i);l.appendChild(m)})}),l;case"Text":return document.createTextNode(e._0);case"SignalText":let s=e._0,c=document.createTextNode(o.peek(s)),d={disposers:[],computeds:[]};return R(c,d),N(d,()=>{let i=w.run(()=>{c.textContent=o.get(s)},void 0);M(d,i)}),c;case"Fragment":let x=document.createDocumentFragment();return e._0.forEach(i=>{let m=y(i);x.appendChild(m)}),x;case"SignalFragment":let $e=e._0,X={disposers:[],computeds:[]},A=document.createElement("div");return A.setAttribute("style","display: contents"),R(A,X),N(X,()=>{let i=w.run(()=>{let m=o.get($e);Array.from(A.childNodes||[]).forEach(F),A.innerHTML="",m.forEach(E=>{let b=y(E);A.appendChild(b)})},void 0);M(X,i)}),A;case"LazyComponent":let re={disposers:[],computeds:[]},Ce=N(re,e._0),le=y(Ce);return R(le,re),le;case"KeyedList":let q=e.renderItem,K=e.keyFn,ue=e.signal,H={disposers:[],computeds:[]},U=document.createComment(" keyed-list-start "),G=document.createComment(" keyed-list-end ");R(U,H);let k={},Ne=()=>{let i=G.parentNode;if(i==null)return;let m=o.get(ue),g={};m.forEach(a=>{g[K(a)]=a});let E=[];Object.keys(k).forEach(a=>{if(g[a]===void 0){E.push(a);return}}),E.forEach(a=>{let f=k[a];if(f!==void 0){F(f.element),f.element.remove(),wt(k,a);return}});let b=[],D={};m.forEach(a=>{let f=K(a),z=k[f];if(z!==void 0){if(z.item!==a){D[f]=!0;let je=q(a),Ie=y(je),oe={key:f,item:a,element:Ie};b.push(oe),k[f]=oe;return}b.push(z);return}let Me=q(a),Re=y(Me),ie={key:f,item:a,element:Re};b.push(ie),k[f]=ie});let $={contents:U.nextSibling};b.forEach(a=>{let f=$.contents;if(f==null){i.insertBefore(a.element,G);return}if(f===G){i.insertBefore(a.element,G);return}if(f===a.element){$.contents=f.nextSibling;return}Z(D[a.key],!1)?(F(f),i.replaceChild(a.element,f),$.contents=a.element.nextSibling):(i.insertBefore(a.element,f),$.contents=a.element.nextSibling)})},B=document.createDocumentFragment();return B.appendChild(U),o.peek(ue).forEach(i=>{let m=K(i),g=q(i),E=y(g),b={key:m,item:i,element:E};k[m]=b,B.appendChild(E)}),B.appendChild(G),N(H,()=>{let i=w.run(()=>{Ne()},void 0);M(H,i)}),B}}let $t={disposeElement:F,render:y};function Ct(e){return{TAG:"Text",_0:e}}function Nt(e){return{TAG:"SignalText",_0:S.make(e,void 0)}}function Mt(e){return{TAG:"Fragment",_0:e}}function ne(e){return{TAG:"SignalFragment",_0:e}}function Rt(e,t){return{TAG:"SignalFragment",_0:S.make(()=>o.get(e).map(t),void 0)}}function jt(e,t,n){return{TAG:"KeyedList",signal:e,keyFn:t,renderItem:n}}function _(e,t,n,r,l){let u=t!==void 0?t:[].map(d=>d),s=n!==void 0?n:[].map(d=>d),c=r!==void 0?r:[].map(d=>d);return{TAG:"Element",tag:e,attrs:u,events:s,children:c}}function It(e,t,n,r){return _("div",e,t,n)}function Pt(e,t,n,r){return _("span",e,t,n)}function xt(e,t,n,r){return _("button",e,t,n)}function Gt(e,t,n){return _("input",e,t,void 0)}function Dt(e,t,n,r){return _("h1",e,t,n)}function Ft(e,t,n,r){return _("h2",e,t,n)}function Lt(e,t,n,r){return _("h3",e,t,n)}function Bt(e,t,n,r){return _("p",e,t,n)}function zt(e,t,n,r){return _("ul",e,t,n)}function Vt(e,t,n,r){return _("li",e,t,n)}function Oe(e,t,n,r){return _("a",e,t,n)}function Wt(){return{TAG:"Text",_0:""}}function ke(e,t){let n=y(e);t.appendChild(n)}function Xt(e,t){let n=document.getElementById(t);if(n==null){console.error("Container element not found: "+t);return}else return ke(e,n)}let Te=ve,qt=ye,Kt=we;const Ht=Object.freeze(Object.defineProperty({__proto__:null,$$null:Wt,Attributes:At,DOM:Ot,Reactivity:Tt,Render:$t,a:Oe,attr:Te,button:xt,computedAttr:Kt,div:It,element:_,fragment:Mt,h1:Dt,h2:Ft,h3:Lt,input:Gt,keyedList:jt,li:Vt,list:Rt,mount:ke,mountById:Xt,p:Bt,signalAttr:qt,signalFragment:ne,span:Pt,text:Ct,textSignal:Nt,ul:zt},Symbol.toStringTag,{value:"Module"}));let T=o.make({pathname:"/",search:"",hash:""},void 0,void 0);function Q(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash}}function Ut(){o.set(T,Q());let e=t=>o.set(T,Q());window.addEventListener("popstate",e)}function Ae(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",s={pathname:e,search:l,hash:u},c=e+l+u,d={};window.history.pushState(d,"",c),o.set(T,s)}function Jt(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",s={pathname:e,search:l,hash:u},c=e+l+u,d={};window.history.replaceState(d,"",c),o.set(T,s)}function Qt(e,t){return ne(S.make(()=>{let n=o.get(T),r=te(e,n.pathname);return typeof r!="object"?[]:[t(r._0)]},void 0))}function Yt(e){return ne(S.make(()=>{let t=o.get(T),n=Fe(e,r=>{let l=te(r.pattern,t.pathname);if(typeof l=="object")return r.render(l._0)});return n!==void 0?[n]:[]},void 0))}function Zt(e,t,n,r){let l=t!==void 0?t:[],u=n!==void 0?n:[],s=c=>{c.preventDefault(),Ae(e,void 0,void 0)};return Oe(l.concat([Te("href",e)]),[["click",s]],u)}let en,tn;const nn=Object.freeze(Object.defineProperty({__proto__:null,Component:en,Route:tn,getCurrentLocation:Q,init:Ut,link:Zt,location:T,push:Ae,replace:Jt,route:Qt,routes:Yt},Symbol.toStringTag,{value:"Module"}));function rn(e){return e.TAG==="Reactive"?o.get(e._0):e._0}const ln=Object.freeze(Object.defineProperty({__proto__:null,get:rn},Symbol.toStringTag,{value:"Module"}));let un=o.Id,on=o.Scheduler,cn=o.make,dn=o.get,an=o.peek,sn=o.set,fn=o.update,pn=o.batch,mn=o.untrack,hn={Id:un,Scheduler:on,make:cn,get:dn,peek:an,set:sn,update:fn,batch:pn,untrack:mn},_n=S.Id,gn=S.Signal,Sn=S.Observer,En=S.Scheduler,bn=S.make,vn=S.dispose,yn={Id:_n,Signal:gn,Observer:Sn,Scheduler:En,make:bn,dispose:vn},wn=w.Id,On=w.Observer,kn=w.Scheduler,Tn=w.run,An={Id:wn,Observer:On,Scheduler:kn,run:Tn},$n=Ht,Cn=yt,Nn=nn,Mn=ln;exports.Component=$n;exports.Computed=yn;exports.Effect=An;exports.ReactiveProp=Mn;exports.Route=Cn;exports.Router=Nn;exports.Signal=hn;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let J={contents:0};function Y(){return J.contents=J.contents+1|0,J.contents}function Pe(e){return e===void 0?{BS_PRIVATE_NESTED_SOME_NONE:0}:e!==null&&e.BS_PRIVATE_NESTED_SOME_NONE!==void 0?{BS_PRIVATE_NESTED_SOME_NONE:e.BS_PRIVATE_NESTED_SOME_NONE+1|0}:e}function xe(e){if(e!=null)return Pe(e)}function ce(e){if(e===null||e.BS_PRIVATE_NESTED_SOME_NONE===void 0)return e;let t=e.BS_PRIVATE_NESTED_SOME_NONE;if(t!==0)return{BS_PRIVATE_NESTED_SOME_NONE:t-1|0}}function Z(e,t){return e!==void 0?ce(e):t}function Ge(e,t,n){return e.reduce(n,t)}function De(e,t){let n=e.length,r=new Array(n),l=0;for(let u=0;u<n;++u){let s=e[u],c=t(s);c!==void 0&&(r[l]=ce(c),l=l+1|0)}return r.length=l,r}function Fe(e,t){let n=0;for(;;){let r=n;if(r===e.length)return;let l=t(e[r]);if(l!==void 0)return l;n=r+1|0}}let h=new Map,I=new Map,L=new Map,p={contents:void 0},j=new Set,O={contents:!1},b={contents:!1};function ee(e){if(I.get(e)===void 0){I.set(e,new Set);return}}function Le(e,t){let n=I.get(e);if(n!==void 0){n.forEach(t);return}}function Be(e,t){let n=I.get(e);if(n!==void 0){n.add(t);return}}function ze(e,t){let n=I.get(e);if(n!==void 0){n.delete(t);return}}function Ve(e){return Array.from(Z(I.get(e),new Set).values())}function ae(e,t){let n=p.contents;p.contents=e;try{let r=t();return p.contents=n,r}catch(r){throw p.contents=n,r}}function We(e){let t=p.contents;p.contents=void 0;try{let n=e();return p.contents=t,n}catch(n){throw p.contents=t,n}}function Xe(e){let t=p.contents;return t!==void 0?t===e:!1}function qe(e){if(!O.contents){O.contents=!0;try{e(),O.contents=!1;return}catch(t){throw O.contents=!1,t}}}function Ke(e,t){ee(t);let n=Xe(e),r=h.get(e);if(n&&r!==void 0&&!r.deps.has(t))return r.deps.add(t),Be(t,e)}function P(e){e.deps.forEach(t=>ze(t,e.id)),e.deps.clear()}function He(e){let t=L.get(e);if(t===void 0)return;L.delete(e);let n=h.get(t);if(n!==void 0){P(n),h.delete(t);return}}function de(e){return Ge(e,0,(t,n)=>n>t?n:t)}function Ue(e){let t=[];return e.deps.forEach(n=>Le(n,r=>{if(r===e.id)return;let l=h.get(r);if(l===void 0)return;if(typeof l.kind=="object"){t.push(l.level);return}})),de(t)+1|0}function Je(e){let t=[];return e.deps.forEach(n=>{let r=L.get(n);if(r===void 0||r===e.id)return;let l=h.get(r);if(l!==void 0){t.push(l.level);return}}),de(t)+1|0}function W(e){return typeof e.kind=="object"?Je(e):Ue(e)}function Qe(e,t){let n=h.get(e),r=h.get(t);if(n===void 0)return r!==void 0?1:0;if(r===void 0)return-1;let u=typeof n.kind=="object"?0:1,c=typeof r.kind=="object"?0:1,a=u-c|0;return a!==0?a:n.level-r.level|0}function Ye(e){b.contents=!0,P(e),ae(e.id,()=>{e.run(),b.contents=!1}),e.level=W(e)}function se(){for(;j.size>0;){let e=Array.from(j.values());j.clear(),e.sort(Qe),e.forEach(t=>{let n=h.get(t);if(n!==void 0)return Ye(n)})}}function fe(e){if(ee(e),Ve(e).forEach(t=>{let n=h.get(t);if(n===void 0)return;let r=n.kind;if(typeof r=="object")return n.dirty?void 0:(n.dirty=!0,fe(r.VAL));j.add(t)}),j.size>0)return qe(se)}function pe(e){let t=L.get(e);if(t===void 0)return;let n=h.get(t);if(n!==void 0&&n.dirty){b.contents=!0,P(n),ae(t,()=>{n.run(),n.dirty=!1,b.contents=!1}),n.level=W(n);return}}function Ze(e){let t=O.contents;O.contents=!0;try{let n=e();return t||(O.contents=!1,j.size>0&&se()),n}catch(n){throw t||(O.contents=!1),n}}let et=We,tt=ee;function me(e,t,n){let r=Y();return tt(r),{id:r,value:{contents:e},version:{contents:0},equals:Z(n,(l,u)=>l===u),name:t}}function nt(e){pe(e.id);let t=p.contents;return t!==void 0&&Ke(t,e.id),e.value.contents}function rt(e){return pe(e.id),e.value.contents}function he(e,t){let n;try{n=!e.equals(e.value.contents,t)}catch{n=!0}if(n)return e.value.contents=t,e.version.contents=e.version.contents+1|0,fe(e.id)}function lt(e,t){he(e,t(e.value.contents))}let ut,it,ot=Ze,ct=et;const at=Object.freeze(Object.defineProperty({__proto__:null,Id:ut,Scheduler:it,batch:ot,get:nt,make:me,peek:rt,set:he,untrack:ct,update:lt},Symbol.toStringTag,{value:"Module"}));function _e(e,t,n,r){return{id:e,kind:t,run:n,deps:new Set,level:0,dirty:!0,name:r}}function dt(e,t){let n=Y(),r={contents:void 0},u=_e(n,"Effect",()=>{let a=r.contents;a!==void 0&&a(),r.contents=e()},t);h.set(n,u),b.contents=!0,P(u);let s=p.contents;p.contents=n;try{u.run(),b.contents=!1}catch(a){throw p.contents=s,b.contents=!1,a}return p.contents=s,u.level=W(u),{dispose:()=>{let a=h.get(n);if(a===void 0)return;let x=r.contents;x!==void 0&&x(),P(a),h.delete(n)}}}let st,ft,pt;const mt=Object.freeze(Object.defineProperty({__proto__:null,Id:st,Observer:ft,Scheduler:pt,run:dt},Symbol.toStringTag,{value:"Module"}));function ht(e,t){let n=me(void 0,t,void 0),r=Y(),l=()=>{let c=e();n.value.contents=c},u=_e(r,{NAME:"Computed",VAL:n.id},l,void 0);h.set(r,u),b.contents=!0,P(u);let s=p.contents;p.contents=r;try{u.run(),u.dirty=!1,b.contents=!1}catch(c){throw p.contents=s,b.contents=!1,c}return p.contents=s,u.level=W(u),L.set(n.id,r),n}function _t(e){He(e.id)}let gt,St,Et,vt;const bt=Object.freeze(Object.defineProperty({__proto__:null,Id:gt,Observer:Et,Scheduler:vt,Signal:St,dispose:_t,make:ht},Symbol.toStringTag,{value:"Module"}));let o=at,S=bt,w=mt;function ge(e){return De(e.split("/"),t=>{if(t!=="")return t.startsWith(":")?{TAG:"Param",_0:t.slice(1)}:{TAG:"Static",_0:t}})}function Se(e,t){let n=t.split("/").filter(u=>u!=="");if(e.length!==n.length)return"NoMatch";let r={};return e.every((u,s)=>{let c=n[s];return u.TAG==="Static"?c===u._0:(r[u._0]=c,!0)})?{TAG:"Match",_0:r}:"NoMatch"}function te(e,t){return Se(ge(e),t)}const yt=Object.freeze(Object.defineProperty({__proto__:null,match:te,matchPath:Se,parsePattern:ge},Symbol.toStringTag,{value:"Module"}));function wt(e,t){delete e[t]}function C(e,t,n){switch(t){case"checked":e.checked=n==="true";return;case"disabled":e.disabled=n==="true";return;case"aria-expanded":case"aria-hidden":case"aria-selected":case"multiple":case"readonly":case"required":break;case"value":e.value=n;return;default:e.setAttribute(t,n);return}n==="true"?e.setAttribute(t,""):e.removeAttribute(t)}let Ot={setAttrOrProp:C},V={contents:void 0};function Tt(){return{disposers:[],computeds:[]}}function N(e,t){let n=V.contents;V.contents=e;let r=t();return V.contents=n,r}function M(e,t){e.disposers.push(t)}function Ee(e){e.disposers.forEach(t=>t.dispose()),e.computeds.forEach(t=>S.dispose(t))}function R(e,t){e.__xote_owner__=t}function ve(e){return xe(e.__xote_owner__)}let kt={currentOwner:V,createOwner:Tt,runWithOwner:N,addDisposer:M,disposeOwner:Ee,setOwner:R,getOwner:ve};function be(e,t){return[e,{TAG:"Static",_0:t}]}function ye(e,t){return[e,{TAG:"SignalValue",_0:t}]}function we(e,t){return[e,{TAG:"Compute",_0:t}]}let At={$$static:be,signal:ye,computed:we};function F(e){let t=ve(e);t!==void 0&&Ee(t),Array.from(e.childNodes||[]).forEach(F)}function y(e){switch(e.TAG){case"Element":let t=e.children,n=e.events,r=e.attrs,l=document.createElement(e.tag),u={disposers:[],computeds:[]};return R(l,u),N(u,()=>{r.forEach(i=>{let m=i[1],g=i[0];switch(m.TAG){case"Static":return C(l,g,m._0);case"SignalValue":let E=m._0;C(l,g,o.peek(E));let v=w.run(()=>{C(l,g,o.get(E))},void 0);return M(u,v);case"Compute":let D=m._0;C(l,g,D());let $=w.run(()=>{C(l,g,D())},void 0);return M(u,$)}}),n.forEach(i=>{l.addEventListener(i[0],i[1])}),t.forEach(i=>{let m=y(i);l.appendChild(m)})}),l;case"Text":return document.createTextNode(e._0);case"SignalText":let s=e._0,c=document.createTextNode(o.peek(s)),a={disposers:[],computeds:[]};return R(c,a),N(a,()=>{let i=w.run(()=>{c.textContent=o.get(s)},void 0);M(a,i)}),c;case"Fragment":let x=document.createDocumentFragment();return e._0.forEach(i=>{let m=y(i);x.appendChild(m)}),x;case"SignalFragment":let $e=e._0,X={disposers:[],computeds:[]},A=document.createElement("div");return A.setAttribute("style","display: contents"),R(A,X),N(X,()=>{let i=w.run(()=>{let m=o.get($e);Array.from(A.childNodes||[]).forEach(F),A.innerHTML="",m.forEach(E=>{let v=y(E);A.appendChild(v)})},void 0);M(X,i)}),A;case"LazyComponent":let re={disposers:[],computeds:[]},Ce=N(re,e._0),le=y(Ce);return R(le,re),le;case"KeyedList":let q=e.renderItem,K=e.keyFn,ue=e.signal,H={disposers:[],computeds:[]},U=document.createComment(" keyed-list-start "),G=document.createComment(" keyed-list-end ");R(U,H);let T={},Ne=()=>{let i=G.parentNode;if(i==null)return;let m=o.get(ue),g={};m.forEach(d=>{g[K(d)]=d});let E=[];Object.keys(T).forEach(d=>{if(g[d]===void 0){E.push(d);return}}),E.forEach(d=>{let f=T[d];if(f!==void 0){F(f.element),f.element.remove(),wt(T,d);return}});let v=[],D={};m.forEach(d=>{let f=K(d),z=T[f];if(z!==void 0){if(z.item!==d){D[f]=!0;let je=q(d),Ie=y(je),oe={key:f,item:d,element:Ie};v.push(oe),T[f]=oe;return}v.push(z);return}let Me=q(d),Re=y(Me),ie={key:f,item:d,element:Re};v.push(ie),T[f]=ie});let $={contents:U.nextSibling};v.forEach(d=>{let f=$.contents;if(f==null){i.insertBefore(d.element,G);return}if(f===G){i.insertBefore(d.element,G);return}if(f===d.element){$.contents=f.nextSibling;return}Z(D[d.key],!1)?(F(f),i.replaceChild(d.element,f),$.contents=d.element.nextSibling):(i.insertBefore(d.element,f),$.contents=d.element.nextSibling)})},B=document.createDocumentFragment();return B.appendChild(U),o.peek(ue).forEach(i=>{let m=K(i),g=q(i),E=y(g),v={key:m,item:i,element:E};T[m]=v,B.appendChild(E)}),B.appendChild(G),N(H,()=>{let i=w.run(()=>{Ne()},void 0);M(H,i)}),B}}let $t={disposeElement:F,render:y};function Ct(e){return{TAG:"Text",_0:e}}function Nt(e){return{TAG:"SignalText",_0:S.make(e,void 0)}}function Mt(e){return{TAG:"Fragment",_0:e}}function ne(e){return{TAG:"SignalFragment",_0:e}}function Rt(e,t){return{TAG:"SignalFragment",_0:S.make(()=>o.get(e).map(t),void 0)}}function jt(e,t,n){return{TAG:"KeyedList",signal:e,keyFn:t,renderItem:n}}function _(e,t,n,r,l){let u=t!==void 0?t:[].map(a=>a),s=n!==void 0?n:[].map(a=>a),c=r!==void 0?r:[].map(a=>a);return{TAG:"Element",tag:e,attrs:u,events:s,children:c}}function It(e,t,n,r){return _("div",e,t,n)}function Pt(e,t,n,r){return _("span",e,t,n)}function xt(e,t,n,r){return _("button",e,t,n)}function Gt(e,t,n){return _("input",e,t,void 0)}function Dt(e,t,n,r){return _("h1",e,t,n)}function Ft(e,t,n,r){return _("h2",e,t,n)}function Lt(e,t,n,r){return _("h3",e,t,n)}function Bt(e,t,n,r){return _("p",e,t,n)}function zt(e,t,n,r){return _("ul",e,t,n)}function Vt(e,t,n,r){return _("li",e,t,n)}function Oe(e,t,n,r){return _("a",e,t,n)}function Wt(){return{TAG:"Text",_0:""}}function Te(e,t){let n=y(e);t.appendChild(n)}function Xt(e,t){let n=document.getElementById(t);if(n==null){console.error("Container element not found: "+t);return}else return Te(e,n)}let ke=be,qt=ye,Kt=we;const Ht=Object.freeze(Object.defineProperty({__proto__:null,$$null:Wt,Attributes:At,DOM:Ot,Reactivity:kt,Render:$t,a:Oe,attr:ke,button:xt,computedAttr:Kt,div:It,element:_,fragment:Mt,h1:Dt,h2:Ft,h3:Lt,input:Gt,keyedList:jt,li:Vt,list:Rt,mount:Te,mountById:Xt,p:Bt,signalAttr:qt,signalFragment:ne,span:Pt,text:Ct,textSignal:Nt,ul:zt},Symbol.toStringTag,{value:"Module"}));let k=o.make({pathname:"/",search:"",hash:""},void 0,void 0);function Q(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash}}function Ut(){o.set(k,Q());let e=t=>o.set(k,Q());window.addEventListener("popstate",e)}function Ae(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",s={pathname:e,search:l,hash:u},c=e+l+u,a={};window.history.pushState(a,"",c),o.set(k,s)}function Jt(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",s={pathname:e,search:l,hash:u},c=e+l+u,a={};window.history.replaceState(a,"",c),o.set(k,s)}function Qt(e,t){return ne(S.make(()=>{let n=o.get(k),r=te(e,n.pathname);return typeof r!="object"?[]:[t(r._0)]},void 0))}function Yt(e){return ne(S.make(()=>{let t=o.get(k),n=Fe(e,r=>{let l=te(r.pattern,t.pathname);if(typeof l=="object")return r.render(l._0)});return n!==void 0?[n]:[]},void 0))}function Zt(e,t,n,r){let l=t!==void 0?t:[],u=n!==void 0?n:[],s=c=>{c.preventDefault(),Ae(e,void 0,void 0)};return Oe(l.concat([ke("href",e)]),[["click",s]],u)}let en,tn;const nn=Object.freeze(Object.defineProperty({__proto__:null,Component:en,Route:tn,getCurrentLocation:Q,init:Ut,link:Zt,location:k,push:Ae,replace:Jt,route:Qt,routes:Yt},Symbol.toStringTag,{value:"Module"}));function rn(e){return e.TAG==="Reactive"?o.get(e._0):e._0}function ln(e){return{TAG:"Static",_0:e}}function un(e){return{TAG:"Reactive",_0:e}}const on=Object.freeze(Object.defineProperty({__proto__:null,$$static:ln,get:rn,reactive:un},Symbol.toStringTag,{value:"Module"}));let cn=o.Id,an=o.Scheduler,dn=o.make,sn=o.get,fn=o.peek,pn=o.set,mn=o.update,hn=o.batch,_n=o.untrack,gn={Id:cn,Scheduler:an,make:dn,get:sn,peek:fn,set:pn,update:mn,batch:hn,untrack:_n},Sn=S.Id,En=S.Signal,vn=S.Observer,bn=S.Scheduler,yn=S.make,wn=S.dispose,On={Id:Sn,Signal:En,Observer:vn,Scheduler:bn,make:yn,dispose:wn},Tn=w.Id,kn=w.Observer,An=w.Scheduler,$n=w.run,Cn={Id:Tn,Observer:kn,Scheduler:An,run:$n},Nn=Ht,Mn=yt,Rn=nn,jn=on;exports.Component=Nn;exports.Computed=On;exports.Effect=Cn;exports.ReactiveProp=jn;exports.Route=Mn;exports.Router=Rn;exports.Signal=gn;
package/dist/xote.mjs CHANGED
@@ -4,7 +4,7 @@ let J = {
4
4
  function Y() {
5
5
  return J.contents = J.contents + 1 | 0, J.contents;
6
6
  }
7
- function Re(e) {
7
+ function Pe(e) {
8
8
  return e === void 0 ? {
9
9
  BS_PRIVATE_NESTED_SOME_NONE: 0
10
10
  } : e !== null && e.BS_PRIVATE_NESTED_SOME_NONE !== void 0 ? {
@@ -13,7 +13,7 @@ function Re(e) {
13
13
  }
14
14
  function xe(e) {
15
15
  if (e != null)
16
- return Re(e);
16
+ return Pe(e);
17
17
  }
18
18
  function ce(e) {
19
19
  if (e === null || e.BS_PRIVATE_NESTED_SOME_NONE === void 0)
@@ -50,44 +50,44 @@ function Fe(e, t) {
50
50
  n = r + 1 | 0;
51
51
  }
52
52
  }
53
- let h = /* @__PURE__ */ new Map(), P = /* @__PURE__ */ new Map(), L = /* @__PURE__ */ new Map(), p = {
53
+ let h = /* @__PURE__ */ new Map(), R = /* @__PURE__ */ new Map(), L = /* @__PURE__ */ new Map(), p = {
54
54
  contents: void 0
55
55
  }, j = /* @__PURE__ */ new Set(), O = {
56
56
  contents: !1
57
- }, v = {
57
+ }, b = {
58
58
  contents: !1
59
59
  };
60
60
  function ee(e) {
61
- if (P.get(e) === void 0) {
62
- P.set(e, /* @__PURE__ */ new Set());
61
+ if (R.get(e) === void 0) {
62
+ R.set(e, /* @__PURE__ */ new Set());
63
63
  return;
64
64
  }
65
65
  }
66
66
  function Le(e, t) {
67
- let n = P.get(e);
67
+ let n = R.get(e);
68
68
  if (n !== void 0) {
69
69
  n.forEach(t);
70
70
  return;
71
71
  }
72
72
  }
73
73
  function Be(e, t) {
74
- let n = P.get(e);
74
+ let n = R.get(e);
75
75
  if (n !== void 0) {
76
76
  n.add(t);
77
77
  return;
78
78
  }
79
79
  }
80
80
  function ze(e, t) {
81
- let n = P.get(e);
81
+ let n = R.get(e);
82
82
  if (n !== void 0) {
83
83
  n.delete(t);
84
84
  return;
85
85
  }
86
86
  }
87
87
  function Ve(e) {
88
- return Array.from(Z(P.get(e), /* @__PURE__ */ new Set()).values());
88
+ return Array.from(Z(R.get(e), /* @__PURE__ */ new Set()).values());
89
89
  }
90
- function de(e, t) {
90
+ function ae(e, t) {
91
91
  let n = p.contents;
92
92
  p.contents = e;
93
93
  try {
@@ -128,7 +128,7 @@ function Ke(e, t) {
128
128
  if (n && r !== void 0 && !r.deps.has(t))
129
129
  return r.deps.add(t), Be(t, e);
130
130
  }
131
- function R(e) {
131
+ function P(e) {
132
132
  e.deps.forEach((t) => ze(t, e.id)), e.deps.clear();
133
133
  }
134
134
  function He(e) {
@@ -138,11 +138,11 @@ function He(e) {
138
138
  L.delete(e);
139
139
  let n = h.get(t);
140
140
  if (n !== void 0) {
141
- R(n), h.delete(t);
141
+ P(n), h.delete(t);
142
142
  return;
143
143
  }
144
144
  }
145
- function ae(e) {
145
+ function de(e) {
146
146
  return Ge(e, 0, (t, n) => n > t ? n : t);
147
147
  }
148
148
  function Ue(e) {
@@ -157,7 +157,7 @@ function Ue(e) {
157
157
  t.push(l.level);
158
158
  return;
159
159
  }
160
- })), ae(t) + 1 | 0;
160
+ })), de(t) + 1 | 0;
161
161
  }
162
162
  function Je(e) {
163
163
  let t = [];
@@ -170,7 +170,7 @@ function Je(e) {
170
170
  t.push(l.level);
171
171
  return;
172
172
  }
173
- }), ae(t) + 1 | 0;
173
+ }), de(t) + 1 | 0;
174
174
  }
175
175
  function W(e) {
176
176
  return typeof e.kind == "object" ? Je(e) : Ue(e);
@@ -181,12 +181,12 @@ function Qe(e, t) {
181
181
  return r !== void 0 ? 1 : 0;
182
182
  if (r === void 0)
183
183
  return -1;
184
- let u = typeof n.kind == "object" ? 0 : 1, c = typeof r.kind == "object" ? 0 : 1, d = u - c | 0;
185
- return d !== 0 ? d : n.level - r.level | 0;
184
+ let u = typeof n.kind == "object" ? 0 : 1, c = typeof r.kind == "object" ? 0 : 1, a = u - c | 0;
185
+ return a !== 0 ? a : n.level - r.level | 0;
186
186
  }
187
187
  function Ye(e) {
188
- v.contents = !0, R(e), de(e.id, () => {
189
- e.run(), v.contents = !1;
188
+ b.contents = !0, P(e), ae(e.id, () => {
189
+ e.run(), b.contents = !1;
190
190
  }), e.level = W(e);
191
191
  }
192
192
  function se() {
@@ -217,8 +217,8 @@ function pe(e) {
217
217
  return;
218
218
  let n = h.get(t);
219
219
  if (n !== void 0 && n.dirty) {
220
- v.contents = !0, R(n), de(t, () => {
221
- n.run(), n.dirty = !1, v.contents = !1;
220
+ b.contents = !0, P(n), ae(t, () => {
221
+ n.run(), n.dirty = !1, b.contents = !1;
222
222
  }), n.level = W(n);
223
223
  return;
224
224
  }
@@ -270,7 +270,7 @@ function lt(e, t) {
270
270
  he(e, t(e.value.contents));
271
271
  }
272
272
  let ut, it, ot = Ze, ct = et;
273
- const dt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
273
+ const at = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
274
274
  __proto__: null,
275
275
  Id: ut,
276
276
  Scheduler: it,
@@ -293,28 +293,28 @@ function _e(e, t, n, r) {
293
293
  name: r
294
294
  };
295
295
  }
296
- function at(e, t) {
296
+ function dt(e, t) {
297
297
  let n = Y(), r = {
298
298
  contents: void 0
299
299
  }, u = _e(n, "Effect", () => {
300
- let d = r.contents;
301
- d !== void 0 && d(), r.contents = e();
300
+ let a = r.contents;
301
+ a !== void 0 && a(), r.contents = e();
302
302
  }, t);
303
- h.set(n, u), v.contents = !0, R(u);
303
+ h.set(n, u), b.contents = !0, P(u);
304
304
  let s = p.contents;
305
305
  p.contents = n;
306
306
  try {
307
- u.run(), v.contents = !1;
308
- } catch (d) {
309
- throw p.contents = s, v.contents = !1, d;
307
+ u.run(), b.contents = !1;
308
+ } catch (a) {
309
+ throw p.contents = s, b.contents = !1, a;
310
310
  }
311
311
  return p.contents = s, u.level = W(u), {
312
312
  dispose: () => {
313
- let d = h.get(n);
314
- if (d === void 0)
313
+ let a = h.get(n);
314
+ if (a === void 0)
315
315
  return;
316
316
  let x = r.contents;
317
- x !== void 0 && x(), R(d), h.delete(n);
317
+ x !== void 0 && x(), P(a), h.delete(n);
318
318
  }
319
319
  };
320
320
  }
@@ -324,7 +324,7 @@ const mt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
324
324
  Id: st,
325
325
  Observer: ft,
326
326
  Scheduler: pt,
327
- run: at
327
+ run: dt
328
328
  }, Symbol.toStringTag, { value: "Module" }));
329
329
  function ht(e, t) {
330
330
  let n = me(void 0, t, void 0), r = Y(), l = () => {
@@ -334,30 +334,30 @@ function ht(e, t) {
334
334
  NAME: "Computed",
335
335
  VAL: n.id
336
336
  }, l, void 0);
337
- h.set(r, u), v.contents = !0, R(u);
337
+ h.set(r, u), b.contents = !0, P(u);
338
338
  let s = p.contents;
339
339
  p.contents = r;
340
340
  try {
341
- u.run(), u.dirty = !1, v.contents = !1;
341
+ u.run(), u.dirty = !1, b.contents = !1;
342
342
  } catch (c) {
343
- throw p.contents = s, v.contents = !1, c;
343
+ throw p.contents = s, b.contents = !1, c;
344
344
  }
345
345
  return p.contents = s, u.level = W(u), L.set(n.id, r), n;
346
346
  }
347
347
  function _t(e) {
348
348
  He(e.id);
349
349
  }
350
- let gt, St, Et, bt;
351
- const vt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
350
+ let gt, St, Et, vt;
351
+ const bt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
352
352
  __proto__: null,
353
353
  Id: gt,
354
354
  Observer: Et,
355
- Scheduler: bt,
355
+ Scheduler: vt,
356
356
  Signal: St,
357
357
  dispose: _t,
358
358
  make: ht
359
359
  }, Symbol.toStringTag, { value: "Module" }));
360
- let o = dt, S = vt, w = mt;
360
+ let o = at, S = bt, w = mt;
361
361
  function ge(e) {
362
362
  return De(e.split("/"), (t) => {
363
363
  if (t !== "")
@@ -445,7 +445,7 @@ function Ee(e) {
445
445
  function I(e, t) {
446
446
  e.__xote_owner__ = t;
447
447
  }
448
- function be(e) {
448
+ function ve(e) {
449
449
  return xe(e.__xote_owner__);
450
450
  }
451
451
  let Tt = {
@@ -455,9 +455,9 @@ let Tt = {
455
455
  addDisposer: M,
456
456
  disposeOwner: Ee,
457
457
  setOwner: I,
458
- getOwner: be
458
+ getOwner: ve
459
459
  };
460
- function ve(e, t) {
460
+ function be(e, t) {
461
461
  return [
462
462
  e,
463
463
  {
@@ -485,12 +485,12 @@ function we(e, t) {
485
485
  ];
486
486
  }
487
487
  let At = {
488
- $$static: ve,
488
+ $$static: be,
489
489
  signal: ye,
490
490
  computed: we
491
491
  };
492
492
  function F(e) {
493
- let t = be(e);
493
+ let t = ve(e);
494
494
  t !== void 0 && Ee(t), Array.from(e.childNodes || []).forEach(F);
495
495
  }
496
496
  function y(e) {
@@ -509,10 +509,10 @@ function y(e) {
509
509
  case "SignalValue":
510
510
  let E = m._0;
511
511
  C(l, g, o.peek(E));
512
- let b = w.run(() => {
512
+ let v = w.run(() => {
513
513
  C(l, g, o.get(E));
514
514
  }, void 0);
515
- return M(u, b);
515
+ return M(u, v);
516
516
  case "Compute":
517
517
  let D = m._0;
518
518
  C(l, g, D());
@@ -531,15 +531,15 @@ function y(e) {
531
531
  case "Text":
532
532
  return document.createTextNode(e._0);
533
533
  case "SignalText":
534
- let s = e._0, c = document.createTextNode(o.peek(s)), d = {
534
+ let s = e._0, c = document.createTextNode(o.peek(s)), a = {
535
535
  disposers: [],
536
536
  computeds: []
537
537
  };
538
- return I(c, d), N(d, () => {
538
+ return I(c, a), N(a, () => {
539
539
  let i = w.run(() => {
540
540
  c.textContent = o.get(s);
541
541
  }, void 0);
542
- M(d, i);
542
+ M(a, i);
543
543
  }), c;
544
544
  case "Fragment":
545
545
  let x = document.createDocumentFragment();
@@ -556,8 +556,8 @@ function y(e) {
556
556
  let i = w.run(() => {
557
557
  let m = o.get($e);
558
558
  Array.from(A.childNodes || []).forEach(F), A.innerHTML = "", m.forEach((E) => {
559
- let b = y(E);
560
- A.appendChild(b);
559
+ let v = y(E);
560
+ A.appendChild(v);
561
561
  });
562
562
  }, void 0);
563
563
  M(X, i);
@@ -579,73 +579,73 @@ function y(e) {
579
579
  if (i == null)
580
580
  return;
581
581
  let m = o.get(ue), g = {};
582
- m.forEach((a) => {
583
- g[K(a)] = a;
582
+ m.forEach((d) => {
583
+ g[K(d)] = d;
584
584
  });
585
585
  let E = [];
586
- Object.keys(k).forEach((a) => {
587
- if (g[a] === void 0) {
588
- E.push(a);
586
+ Object.keys(k).forEach((d) => {
587
+ if (g[d] === void 0) {
588
+ E.push(d);
589
589
  return;
590
590
  }
591
- }), E.forEach((a) => {
592
- let f = k[a];
591
+ }), E.forEach((d) => {
592
+ let f = k[d];
593
593
  if (f !== void 0) {
594
- F(f.element), f.element.remove(), wt(k, a);
594
+ F(f.element), f.element.remove(), wt(k, d);
595
595
  return;
596
596
  }
597
597
  });
598
- let b = [], D = {};
599
- m.forEach((a) => {
600
- let f = K(a), z = k[f];
598
+ let v = [], D = {};
599
+ m.forEach((d) => {
600
+ let f = K(d), z = k[f];
601
601
  if (z !== void 0) {
602
- if (z.item !== a) {
602
+ if (z.item !== d) {
603
603
  D[f] = !0;
604
- let je = q(a), Pe = y(je), oe = {
604
+ let je = q(d), Re = y(je), oe = {
605
605
  key: f,
606
- item: a,
607
- element: Pe
606
+ item: d,
607
+ element: Re
608
608
  };
609
- b.push(oe), k[f] = oe;
609
+ v.push(oe), k[f] = oe;
610
610
  return;
611
611
  }
612
- b.push(z);
612
+ v.push(z);
613
613
  return;
614
614
  }
615
- let Me = q(a), Ie = y(Me), ie = {
615
+ let Me = q(d), Ie = y(Me), ie = {
616
616
  key: f,
617
- item: a,
617
+ item: d,
618
618
  element: Ie
619
619
  };
620
- b.push(ie), k[f] = ie;
620
+ v.push(ie), k[f] = ie;
621
621
  });
622
622
  let $ = {
623
623
  contents: U.nextSibling
624
624
  };
625
- b.forEach((a) => {
625
+ v.forEach((d) => {
626
626
  let f = $.contents;
627
627
  if (f == null) {
628
- i.insertBefore(a.element, G);
628
+ i.insertBefore(d.element, G);
629
629
  return;
630
630
  }
631
631
  if (f === G) {
632
- i.insertBefore(a.element, G);
632
+ i.insertBefore(d.element, G);
633
633
  return;
634
634
  }
635
- if (f === a.element) {
635
+ if (f === d.element) {
636
636
  $.contents = f.nextSibling;
637
637
  return;
638
638
  }
639
- Z(D[a.key], !1) ? (F(f), i.replaceChild(a.element, f), $.contents = a.element.nextSibling) : (i.insertBefore(a.element, f), $.contents = a.element.nextSibling);
639
+ Z(D[d.key], !1) ? (F(f), i.replaceChild(d.element, f), $.contents = d.element.nextSibling) : (i.insertBefore(d.element, f), $.contents = d.element.nextSibling);
640
640
  });
641
641
  }, B = document.createDocumentFragment();
642
642
  return B.appendChild(U), o.peek(ue).forEach((i) => {
643
- let m = K(i), g = q(i), E = y(g), b = {
643
+ let m = K(i), g = q(i), E = y(g), v = {
644
644
  key: m,
645
645
  item: i,
646
646
  element: E
647
647
  };
648
- k[m] = b, B.appendChild(E);
648
+ k[m] = v, B.appendChild(E);
649
649
  }), B.appendChild(G), N(H, () => {
650
650
  let i = w.run(() => {
651
651
  Ne();
@@ -697,7 +697,7 @@ function jt(e, t, n) {
697
697
  };
698
698
  }
699
699
  function _(e, t, n, r, l) {
700
- let u = t !== void 0 ? t : [].map((d) => d), s = n !== void 0 ? n : [].map((d) => d), c = r !== void 0 ? r : [].map((d) => d);
700
+ let u = t !== void 0 ? t : [].map((a) => a), s = n !== void 0 ? n : [].map((a) => a), c = r !== void 0 ? r : [].map((a) => a);
701
701
  return {
702
702
  TAG: "Element",
703
703
  tag: e,
@@ -706,10 +706,10 @@ function _(e, t, n, r, l) {
706
706
  children: c
707
707
  };
708
708
  }
709
- function Pt(e, t, n, r) {
709
+ function Rt(e, t, n, r) {
710
710
  return _("div", e, t, n);
711
711
  }
712
- function Rt(e, t, n, r) {
712
+ function Pt(e, t, n, r) {
713
713
  return _("span", e, t, n);
714
714
  }
715
715
  function xt(e, t, n, r) {
@@ -757,7 +757,7 @@ function Xt(e, t) {
757
757
  } else
758
758
  return ke(e, n);
759
759
  }
760
- let Te = ve, qt = ye, Kt = we;
760
+ let Te = be, qt = ye, Kt = we;
761
761
  const Ht = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
762
762
  __proto__: null,
763
763
  $$null: Wt,
@@ -769,7 +769,7 @@ const Ht = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
769
769
  attr: Te,
770
770
  button: xt,
771
771
  computedAttr: Kt,
772
- div: Pt,
772
+ div: Rt,
773
773
  element: _,
774
774
  fragment: Mt,
775
775
  h1: Dt,
@@ -784,7 +784,7 @@ const Ht = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
784
784
  p: Bt,
785
785
  signalAttr: qt,
786
786
  signalFragment: ne,
787
- span: Rt,
787
+ span: Pt,
788
788
  text: Ct,
789
789
  textSignal: Nt,
790
790
  ul: zt
@@ -811,16 +811,16 @@ function Ae(e, t, n, r) {
811
811
  pathname: e,
812
812
  search: l,
813
813
  hash: u
814
- }, c = e + l + u, d = {};
815
- window.history.pushState(d, "", c), o.set(T, s);
814
+ }, c = e + l + u, a = {};
815
+ window.history.pushState(a, "", c), o.set(T, s);
816
816
  }
817
817
  function Jt(e, t, n, r) {
818
818
  let l = t !== void 0 ? t : "", u = n !== void 0 ? n : "", s = {
819
819
  pathname: e,
820
820
  search: l,
821
821
  hash: u
822
- }, c = e + l + u, d = {};
823
- window.history.replaceState(d, "", c), o.set(T, s);
822
+ }, c = e + l + u, a = {};
823
+ window.history.replaceState(a, "", c), o.set(T, s);
824
824
  }
825
825
  function Qt(e, t) {
826
826
  return ne(S.make(() => {
@@ -864,39 +864,53 @@ const nn = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
864
864
  function rn(e) {
865
865
  return e.TAG === "Reactive" ? o.get(e._0) : e._0;
866
866
  }
867
- const ln = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
867
+ function ln(e) {
868
+ return {
869
+ TAG: "Static",
870
+ _0: e
871
+ };
872
+ }
873
+ function un(e) {
874
+ return {
875
+ TAG: "Reactive",
876
+ _0: e
877
+ };
878
+ }
879
+ const on = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
868
880
  __proto__: null,
869
- get: rn
881
+ $$static: ln,
882
+ get: rn,
883
+ reactive: un
870
884
  }, Symbol.toStringTag, { value: "Module" }));
871
- let un = o.Id, on = o.Scheduler, cn = o.make, dn = o.get, an = o.peek, sn = o.set, fn = o.update, pn = o.batch, mn = o.untrack, Tn = {
872
- Id: un,
873
- Scheduler: on,
874
- make: cn,
875
- get: dn,
876
- peek: an,
877
- set: sn,
878
- update: fn,
879
- batch: pn,
880
- untrack: mn
881
- }, hn = S.Id, _n = S.Signal, gn = S.Observer, Sn = S.Scheduler, En = S.make, bn = S.dispose, An = {
882
- Id: hn,
883
- Signal: _n,
884
- Observer: gn,
885
- Scheduler: Sn,
886
- make: En,
887
- dispose: bn
888
- }, vn = w.Id, yn = w.Observer, wn = w.Scheduler, On = w.run, $n = {
889
- Id: vn,
890
- Observer: yn,
891
- Scheduler: wn,
892
- run: On
893
- }, Cn = Ht, Nn = yt, Mn = nn, In = ln;
885
+ let cn = o.Id, an = o.Scheduler, dn = o.make, sn = o.get, fn = o.peek, pn = o.set, mn = o.update, hn = o.batch, _n = o.untrack, $n = {
886
+ Id: cn,
887
+ Scheduler: an,
888
+ make: dn,
889
+ get: sn,
890
+ peek: fn,
891
+ set: pn,
892
+ update: mn,
893
+ batch: hn,
894
+ untrack: _n
895
+ }, gn = S.Id, Sn = S.Signal, En = S.Observer, vn = S.Scheduler, bn = S.make, yn = S.dispose, Cn = {
896
+ Id: gn,
897
+ Signal: Sn,
898
+ Observer: En,
899
+ Scheduler: vn,
900
+ make: bn,
901
+ dispose: yn
902
+ }, wn = w.Id, On = w.Observer, kn = w.Scheduler, Tn = w.run, Nn = {
903
+ Id: wn,
904
+ Observer: On,
905
+ Scheduler: kn,
906
+ run: Tn
907
+ }, Mn = Ht, In = yt, jn = nn, Rn = on;
894
908
  export {
895
- Cn as Component,
896
- An as Computed,
897
- $n as Effect,
898
- In as ReactiveProp,
899
- Nn as Route,
900
- Mn as Router,
901
- Tn as Signal
909
+ Mn as Component,
910
+ Cn as Computed,
911
+ Nn as Effect,
912
+ Rn as ReactiveProp,
913
+ In as Route,
914
+ jn as Router,
915
+ $n as Signal
902
916
  };
package/dist/xote.umd.js CHANGED
@@ -1 +1 @@
1
- (function(_,T){typeof exports=="object"&&typeof module<"u"?T(exports):typeof define=="function"&&define.amd?define(["exports"],T):(_=typeof globalThis<"u"?globalThis:_||self,T(_.xote={}))})(this,(function(_){"use strict";let T={contents:0};function K(){return T.contents=T.contents+1|0,T.contents}function Ce(e){return e===void 0?{BS_PRIVATE_NESTED_SOME_NONE:0}:e!==null&&e.BS_PRIVATE_NESTED_SOME_NONE!==void 0?{BS_PRIVATE_NESTED_SOME_NONE:e.BS_PRIVATE_NESTED_SOME_NONE+1|0}:e}function Ne(e){if(e!=null)return Ce(e)}function le(e){if(e===null||e.BS_PRIVATE_NESTED_SOME_NONE===void 0)return e;let t=e.BS_PRIVATE_NESTED_SOME_NONE;if(t!==0)return{BS_PRIVATE_NESTED_SOME_NONE:t-1|0}}function H(e,t){return e!==void 0?le(e):t}function Ie(e,t,n){return e.reduce(n,t)}function Me(e,t){let n=e.length,r=new Array(n),l=0;for(let u=0;u<n;++u){let s=e[u],c=t(s);c!==void 0&&(r[l]=le(c),l=l+1|0)}return r.length=l,r}function Re(e,t){let n=0;for(;;){let r=n;if(r===e.length)return;let l=t(e[r]);if(l!==void 0)return l;n=r+1|0}}let h=new Map,C=new Map,D=new Map,p={contents:void 0},N=new Set,k={contents:!1},b={contents:!1};function U(e){if(C.get(e)===void 0){C.set(e,new Set);return}}function je(e,t){let n=C.get(e);if(n!==void 0){n.forEach(t);return}}function Pe(e,t){let n=C.get(e);if(n!==void 0){n.add(t);return}}function Ge(e,t){let n=C.get(e);if(n!==void 0){n.delete(t);return}}function xe(e){return Array.from(H(C.get(e),new Set).values())}function ue(e,t){let n=p.contents;p.contents=e;try{let r=t();return p.contents=n,r}catch(r){throw p.contents=n,r}}function De(e){let t=p.contents;p.contents=void 0;try{let n=e();return p.contents=t,n}catch(n){throw p.contents=t,n}}function Fe(e){let t=p.contents;return t!==void 0?t===e:!1}function Le(e){if(!k.contents){k.contents=!0;try{e(),k.contents=!1;return}catch(t){throw k.contents=!1,t}}}function Be(e,t){U(t);let n=Fe(e),r=h.get(e);if(n&&r!==void 0&&!r.deps.has(t))return r.deps.add(t),Pe(t,e)}function I(e){e.deps.forEach(t=>Ge(t,e.id)),e.deps.clear()}function ze(e){let t=D.get(e);if(t===void 0)return;D.delete(e);let n=h.get(t);if(n!==void 0){I(n),h.delete(t);return}}function ie(e){return Ie(e,0,(t,n)=>n>t?n:t)}function Ve(e){let t=[];return e.deps.forEach(n=>je(n,r=>{if(r===e.id)return;let l=h.get(r);if(l===void 0)return;if(typeof l.kind=="object"){t.push(l.level);return}})),ie(t)+1|0}function We(e){let t=[];return e.deps.forEach(n=>{let r=D.get(n);if(r===void 0||r===e.id)return;let l=h.get(r);if(l!==void 0){t.push(l.level);return}}),ie(t)+1|0}function V(e){return typeof e.kind=="object"?We(e):Ve(e)}function Xe(e,t){let n=h.get(e),r=h.get(t);if(n===void 0)return r!==void 0?1:0;if(r===void 0)return-1;let u=typeof n.kind=="object"?0:1,c=typeof r.kind=="object"?0:1,d=u-c|0;return d!==0?d:n.level-r.level|0}function qe(e){b.contents=!0,I(e),ue(e.id,()=>{e.run(),b.contents=!1}),e.level=V(e)}function oe(){for(;N.size>0;){let e=Array.from(N.values());N.clear(),e.sort(Xe),e.forEach(t=>{let n=h.get(t);if(n!==void 0)return qe(n)})}}function ce(e){if(U(e),xe(e).forEach(t=>{let n=h.get(t);if(n===void 0)return;let r=n.kind;if(typeof r=="object")return n.dirty?void 0:(n.dirty=!0,ce(r.VAL));N.add(t)}),N.size>0)return Le(oe)}function de(e){let t=D.get(e);if(t===void 0)return;let n=h.get(t);if(n!==void 0&&n.dirty){b.contents=!0,I(n),ue(t,()=>{n.run(),n.dirty=!1,b.contents=!1}),n.level=V(n);return}}function Ke(e){let t=k.contents;k.contents=!0;try{let n=e();return t||(k.contents=!1,N.size>0&&oe()),n}catch(n){throw t||(k.contents=!1),n}}let He=De,Ue=U;function ae(e,t,n){let r=K();return Ue(r),{id:r,value:{contents:e},version:{contents:0},equals:H(n,(l,u)=>l===u),name:t}}function Je(e){de(e.id);let t=p.contents;return t!==void 0&&Be(t,e.id),e.value.contents}function Qe(e){return de(e.id),e.value.contents}function se(e,t){let n;try{n=!e.equals(e.value.contents,t)}catch{n=!0}if(n)return e.value.contents=t,e.version.contents=e.version.contents+1|0,ce(e.id)}function Ye(e,t){se(e,t(e.value.contents))}const Ze=Object.freeze(Object.defineProperty({__proto__:null,Id:void 0,Scheduler:void 0,batch:Ke,get:Je,make:ae,peek:Qe,set:se,untrack:He,update:Ye},Symbol.toStringTag,{value:"Module"}));function fe(e,t,n,r){return{id:e,kind:t,run:n,deps:new Set,level:0,dirty:!0,name:r}}function et(e,t){let n=K(),r={contents:void 0},u=fe(n,"Effect",()=>{let d=r.contents;d!==void 0&&d(),r.contents=e()},t);h.set(n,u),b.contents=!0,I(u);let s=p.contents;p.contents=n;try{u.run(),b.contents=!1}catch(d){throw p.contents=s,b.contents=!1,d}return p.contents=s,u.level=V(u),{dispose:()=>{let d=h.get(n);if(d===void 0)return;let L=r.contents;L!==void 0&&L(),I(d),h.delete(n)}}}const tt=Object.freeze(Object.defineProperty({__proto__:null,Id:void 0,Observer:void 0,Scheduler:void 0,run:et},Symbol.toStringTag,{value:"Module"}));function nt(e,t){let n=ae(void 0,t,void 0),r=K(),l=()=>{let c=e();n.value.contents=c},u=fe(r,{NAME:"Computed",VAL:n.id},l,void 0);h.set(r,u),b.contents=!0,I(u);let s=p.contents;p.contents=r;try{u.run(),u.dirty=!1,b.contents=!1}catch(c){throw p.contents=s,b.contents=!1,c}return p.contents=s,u.level=V(u),D.set(n.id,r),n}function rt(e){ze(e.id)}const lt=Object.freeze(Object.defineProperty({__proto__:null,Id:void 0,Observer:void 0,Scheduler:void 0,Signal:void 0,dispose:rt,make:nt},Symbol.toStringTag,{value:"Module"}));let i=Ze,S=lt,w=tt;function pe(e){return Me(e.split("/"),t=>{if(t!=="")return t.startsWith(":")?{TAG:"Param",_0:t.slice(1)}:{TAG:"Static",_0:t}})}function me(e,t){let n=t.split("/").filter(u=>u!=="");if(e.length!==n.length)return"NoMatch";let r={};return e.every((u,s)=>{let c=n[s];return u.TAG==="Static"?c===u._0:(r[u._0]=c,!0)})?{TAG:"Match",_0:r}:"NoMatch"}function J(e,t){return me(pe(e),t)}const ut=Object.freeze(Object.defineProperty({__proto__:null,match:J,matchPath:me,parsePattern:pe},Symbol.toStringTag,{value:"Module"}));function it(e,t){delete e[t]}function M(e,t,n){switch(t){case"checked":e.checked=n==="true";return;case"disabled":e.disabled=n==="true";return;case"aria-expanded":case"aria-hidden":case"aria-selected":case"multiple":case"readonly":case"required":break;case"value":e.value=n;return;default:e.setAttribute(t,n);return}n==="true"?e.setAttribute(t,""):e.removeAttribute(t)}let ot={setAttrOrProp:M},W={contents:void 0};function ct(){return{disposers:[],computeds:[]}}function R(e,t){let n=W.contents;W.contents=e;let r=t();return W.contents=n,r}function j(e,t){e.disposers.push(t)}function he(e){e.disposers.forEach(t=>t.dispose()),e.computeds.forEach(t=>S.dispose(t))}function P(e,t){e.__xote_owner__=t}function _e(e){return Ne(e.__xote_owner__)}let dt={currentOwner:W,createOwner:ct,runWithOwner:R,addDisposer:j,disposeOwner:he,setOwner:P,getOwner:_e};function ge(e,t){return[e,{TAG:"Static",_0:t}]}function Se(e,t){return[e,{TAG:"SignalValue",_0:t}]}function Ee(e,t){return[e,{TAG:"Compute",_0:t}]}let at={$$static:ge,signal:Se,computed:Ee};function F(e){let t=_e(e);t!==void 0&&he(t),Array.from(e.childNodes||[]).forEach(F)}function O(e){switch(e.TAG){case"Element":let t=e.children,n=e.events,r=e.attrs,l=document.createElement(e.tag),u={disposers:[],computeds:[]};return P(l,u),R(u,()=>{r.forEach(o=>{let m=o[1],E=o[0];switch(m.TAG){case"Static":return M(l,E,m._0);case"SignalValue":let v=m._0;M(l,E,i.peek(v));let y=w.run(()=>{M(l,E,i.get(v))},void 0);return j(u,y);case"Compute":let z=m._0;M(l,E,z());let x=w.run(()=>{M(l,E,z())},void 0);return j(u,x)}}),n.forEach(o=>{l.addEventListener(o[0],o[1])}),t.forEach(o=>{let m=O(o);l.appendChild(m)})}),l;case"Text":return document.createTextNode(e._0);case"SignalText":let s=e._0,c=document.createTextNode(i.peek(s)),d={disposers:[],computeds:[]};return P(c,d),R(d,()=>{let o=w.run(()=>{c.textContent=i.get(s)},void 0);j(d,o)}),c;case"Fragment":let L=document.createDocumentFragment();return e._0.forEach(o=>{let m=O(o);L.appendChild(m)}),L;case"SignalFragment":let sn=e._0,Z={disposers:[],computeds:[]},G=document.createElement("div");return G.setAttribute("style","display: contents"),P(G,Z),R(Z,()=>{let o=w.run(()=>{let m=i.get(sn);Array.from(G.childNodes||[]).forEach(F),G.innerHTML="",m.forEach(v=>{let y=O(v);G.appendChild(y)})},void 0);j(Z,o)}),G;case"LazyComponent":let Oe={disposers:[],computeds:[]},fn=R(Oe,e._0),ke=O(fn);return P(ke,Oe),ke;case"KeyedList":let ee=e.renderItem,te=e.keyFn,Te=e.signal,ne={disposers:[],computeds:[]},re=document.createComment(" keyed-list-start "),B=document.createComment(" keyed-list-end ");P(re,ne);let A={},pn=()=>{let o=B.parentNode;if(o==null)return;let m=i.get(Te),E={};m.forEach(a=>{E[te(a)]=a});let v=[];Object.keys(A).forEach(a=>{if(E[a]===void 0){v.push(a);return}}),v.forEach(a=>{let f=A[a];if(f!==void 0){F(f.element),f.element.remove(),it(A,a);return}});let y=[],z={};m.forEach(a=>{let f=te(a),q=A[f];if(q!==void 0){if(q.item!==a){z[f]=!0;let _n=ee(a),gn=O(_n),Ae={key:f,item:a,element:gn};y.push(Ae),A[f]=Ae;return}y.push(q);return}let mn=ee(a),hn=O(mn),$e={key:f,item:a,element:hn};y.push($e),A[f]=$e});let x={contents:re.nextSibling};y.forEach(a=>{let f=x.contents;if(f==null){o.insertBefore(a.element,B);return}if(f===B){o.insertBefore(a.element,B);return}if(f===a.element){x.contents=f.nextSibling;return}H(z[a.key],!1)?(F(f),o.replaceChild(a.element,f),x.contents=a.element.nextSibling):(o.insertBefore(a.element,f),x.contents=a.element.nextSibling)})},X=document.createDocumentFragment();return X.appendChild(re),i.peek(Te).forEach(o=>{let m=te(o),E=ee(o),v=O(E),y={key:m,item:o,element:v};A[m]=y,X.appendChild(v)}),X.appendChild(B),R(ne,()=>{let o=w.run(()=>{pn()},void 0);j(ne,o)}),X}}let st={disposeElement:F,render:O};function ft(e){return{TAG:"Text",_0:e}}function pt(e){return{TAG:"SignalText",_0:S.make(e,void 0)}}function mt(e){return{TAG:"Fragment",_0:e}}function Q(e){return{TAG:"SignalFragment",_0:e}}function ht(e,t){return{TAG:"SignalFragment",_0:S.make(()=>i.get(e).map(t),void 0)}}function _t(e,t,n){return{TAG:"KeyedList",signal:e,keyFn:t,renderItem:n}}function g(e,t,n,r,l){let u=t!==void 0?t:[].map(d=>d),s=n!==void 0?n:[].map(d=>d),c=r!==void 0?r:[].map(d=>d);return{TAG:"Element",tag:e,attrs:u,events:s,children:c}}function gt(e,t,n,r){return g("div",e,t,n)}function St(e,t,n,r){return g("span",e,t,n)}function Et(e,t,n,r){return g("button",e,t,n)}function bt(e,t,n){return g("input",e,t,void 0)}function vt(e,t,n,r){return g("h1",e,t,n)}function yt(e,t,n,r){return g("h2",e,t,n)}function wt(e,t,n,r){return g("h3",e,t,n)}function Ot(e,t,n,r){return g("p",e,t,n)}function kt(e,t,n,r){return g("ul",e,t,n)}function Tt(e,t,n,r){return g("li",e,t,n)}function be(e,t,n,r){return g("a",e,t,n)}function $t(){return{TAG:"Text",_0:""}}function ve(e,t){let n=O(e);t.appendChild(n)}function At(e,t){let n=document.getElementById(t);if(n==null){console.error("Container element not found: "+t);return}else return ve(e,n)}let ye=ge;const Ct=Object.freeze(Object.defineProperty({__proto__:null,$$null:$t,Attributes:at,DOM:ot,Reactivity:dt,Render:st,a:be,attr:ye,button:Et,computedAttr:Ee,div:gt,element:g,fragment:mt,h1:vt,h2:yt,h3:wt,input:bt,keyedList:_t,li:Tt,list:ht,mount:ve,mountById:At,p:Ot,signalAttr:Se,signalFragment:Q,span:St,text:ft,textSignal:pt,ul:kt},Symbol.toStringTag,{value:"Module"}));let $=i.make({pathname:"/",search:"",hash:""},void 0,void 0);function Y(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash}}function Nt(){i.set($,Y());let e=t=>i.set($,Y());window.addEventListener("popstate",e)}function we(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",s={pathname:e,search:l,hash:u},c=e+l+u,d={};window.history.pushState(d,"",c),i.set($,s)}function It(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",s={pathname:e,search:l,hash:u},c=e+l+u,d={};window.history.replaceState(d,"",c),i.set($,s)}function Mt(e,t){return Q(S.make(()=>{let n=i.get($),r=J(e,n.pathname);return typeof r!="object"?[]:[t(r._0)]},void 0))}function Rt(e){return Q(S.make(()=>{let t=i.get($),n=Re(e,r=>{let l=J(r.pattern,t.pathname);if(typeof l=="object")return r.render(l._0)});return n!==void 0?[n]:[]},void 0))}function jt(e,t,n,r){let l=t!==void 0?t:[],u=n!==void 0?n:[],s=c=>{c.preventDefault(),we(e,void 0,void 0)};return be(l.concat([ye("href",e)]),[["click",s]],u)}const Pt=Object.freeze(Object.defineProperty({__proto__:null,Component:void 0,Route:void 0,getCurrentLocation:Y,init:Nt,link:jt,location:$,push:we,replace:It,route:Mt,routes:Rt},Symbol.toStringTag,{value:"Module"}));function Gt(e){return e.TAG==="Reactive"?i.get(e._0):e._0}const xt=Object.freeze(Object.defineProperty({__proto__:null,get:Gt},Symbol.toStringTag,{value:"Module"}));let Dt=i.Id,Ft=i.Scheduler,Lt=i.make,Bt=i.get,zt=i.peek,Vt=i.set,Wt=i.update,Xt=i.batch,qt=i.untrack,Kt={Id:Dt,Scheduler:Ft,make:Lt,get:Bt,peek:zt,set:Vt,update:Wt,batch:Xt,untrack:qt},Ht=S.Id,Ut=S.Signal,Jt=S.Observer,Qt=S.Scheduler,Yt=S.make,Zt=S.dispose,en={Id:Ht,Signal:Ut,Observer:Jt,Scheduler:Qt,make:Yt,dispose:Zt},tn=w.Id,nn=w.Observer,rn=w.Scheduler,ln=w.run,un={Id:tn,Observer:nn,Scheduler:rn,run:ln},on=Ct,cn=ut,dn=Pt,an=xt;_.Component=on,_.Computed=en,_.Effect=un,_.ReactiveProp=an,_.Route=cn,_.Router=dn,_.Signal=Kt,Object.defineProperty(_,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(_,$){typeof exports=="object"&&typeof module<"u"?$(exports):typeof define=="function"&&define.amd?define(["exports"],$):(_=typeof globalThis<"u"?globalThis:_||self,$(_.xote={}))})(this,(function(_){"use strict";let $={contents:0};function K(){return $.contents=$.contents+1|0,$.contents}function Ce(e){return e===void 0?{BS_PRIVATE_NESTED_SOME_NONE:0}:e!==null&&e.BS_PRIVATE_NESTED_SOME_NONE!==void 0?{BS_PRIVATE_NESTED_SOME_NONE:e.BS_PRIVATE_NESTED_SOME_NONE+1|0}:e}function Ne(e){if(e!=null)return Ce(e)}function le(e){if(e===null||e.BS_PRIVATE_NESTED_SOME_NONE===void 0)return e;let t=e.BS_PRIVATE_NESTED_SOME_NONE;if(t!==0)return{BS_PRIVATE_NESTED_SOME_NONE:t-1|0}}function H(e,t){return e!==void 0?le(e):t}function Ie(e,t,n){return e.reduce(n,t)}function Me(e,t){let n=e.length,r=new Array(n),l=0;for(let u=0;u<n;++u){let s=e[u],c=t(s);c!==void 0&&(r[l]=le(c),l=l+1|0)}return r.length=l,r}function Re(e,t){let n=0;for(;;){let r=n;if(r===e.length)return;let l=t(e[r]);if(l!==void 0)return l;n=r+1|0}}let h=new Map,C=new Map,D=new Map,p={contents:void 0},N=new Set,T={contents:!1},b={contents:!1};function U(e){if(C.get(e)===void 0){C.set(e,new Set);return}}function je(e,t){let n=C.get(e);if(n!==void 0){n.forEach(t);return}}function Pe(e,t){let n=C.get(e);if(n!==void 0){n.add(t);return}}function Ge(e,t){let n=C.get(e);if(n!==void 0){n.delete(t);return}}function xe(e){return Array.from(H(C.get(e),new Set).values())}function ue(e,t){let n=p.contents;p.contents=e;try{let r=t();return p.contents=n,r}catch(r){throw p.contents=n,r}}function De(e){let t=p.contents;p.contents=void 0;try{let n=e();return p.contents=t,n}catch(n){throw p.contents=t,n}}function Fe(e){let t=p.contents;return t!==void 0?t===e:!1}function Le(e){if(!T.contents){T.contents=!0;try{e(),T.contents=!1;return}catch(t){throw T.contents=!1,t}}}function Be(e,t){U(t);let n=Fe(e),r=h.get(e);if(n&&r!==void 0&&!r.deps.has(t))return r.deps.add(t),Pe(t,e)}function I(e){e.deps.forEach(t=>Ge(t,e.id)),e.deps.clear()}function ze(e){let t=D.get(e);if(t===void 0)return;D.delete(e);let n=h.get(t);if(n!==void 0){I(n),h.delete(t);return}}function ie(e){return Ie(e,0,(t,n)=>n>t?n:t)}function Ve(e){let t=[];return e.deps.forEach(n=>je(n,r=>{if(r===e.id)return;let l=h.get(r);if(l===void 0)return;if(typeof l.kind=="object"){t.push(l.level);return}})),ie(t)+1|0}function We(e){let t=[];return e.deps.forEach(n=>{let r=D.get(n);if(r===void 0||r===e.id)return;let l=h.get(r);if(l!==void 0){t.push(l.level);return}}),ie(t)+1|0}function V(e){return typeof e.kind=="object"?We(e):Ve(e)}function Xe(e,t){let n=h.get(e),r=h.get(t);if(n===void 0)return r!==void 0?1:0;if(r===void 0)return-1;let u=typeof n.kind=="object"?0:1,c=typeof r.kind=="object"?0:1,d=u-c|0;return d!==0?d:n.level-r.level|0}function qe(e){b.contents=!0,I(e),ue(e.id,()=>{e.run(),b.contents=!1}),e.level=V(e)}function oe(){for(;N.size>0;){let e=Array.from(N.values());N.clear(),e.sort(Xe),e.forEach(t=>{let n=h.get(t);if(n!==void 0)return qe(n)})}}function ce(e){if(U(e),xe(e).forEach(t=>{let n=h.get(t);if(n===void 0)return;let r=n.kind;if(typeof r=="object")return n.dirty?void 0:(n.dirty=!0,ce(r.VAL));N.add(t)}),N.size>0)return Le(oe)}function de(e){let t=D.get(e);if(t===void 0)return;let n=h.get(t);if(n!==void 0&&n.dirty){b.contents=!0,I(n),ue(t,()=>{n.run(),n.dirty=!1,b.contents=!1}),n.level=V(n);return}}function Ke(e){let t=T.contents;T.contents=!0;try{let n=e();return t||(T.contents=!1,N.size>0&&oe()),n}catch(n){throw t||(T.contents=!1),n}}let He=De,Ue=U;function ae(e,t,n){let r=K();return Ue(r),{id:r,value:{contents:e},version:{contents:0},equals:H(n,(l,u)=>l===u),name:t}}function Je(e){de(e.id);let t=p.contents;return t!==void 0&&Be(t,e.id),e.value.contents}function Qe(e){return de(e.id),e.value.contents}function se(e,t){let n;try{n=!e.equals(e.value.contents,t)}catch{n=!0}if(n)return e.value.contents=t,e.version.contents=e.version.contents+1|0,ce(e.id)}function Ye(e,t){se(e,t(e.value.contents))}const Ze=Object.freeze(Object.defineProperty({__proto__:null,Id:void 0,Scheduler:void 0,batch:Ke,get:Je,make:ae,peek:Qe,set:se,untrack:He,update:Ye},Symbol.toStringTag,{value:"Module"}));function fe(e,t,n,r){return{id:e,kind:t,run:n,deps:new Set,level:0,dirty:!0,name:r}}function et(e,t){let n=K(),r={contents:void 0},u=fe(n,"Effect",()=>{let d=r.contents;d!==void 0&&d(),r.contents=e()},t);h.set(n,u),b.contents=!0,I(u);let s=p.contents;p.contents=n;try{u.run(),b.contents=!1}catch(d){throw p.contents=s,b.contents=!1,d}return p.contents=s,u.level=V(u),{dispose:()=>{let d=h.get(n);if(d===void 0)return;let L=r.contents;L!==void 0&&L(),I(d),h.delete(n)}}}const tt=Object.freeze(Object.defineProperty({__proto__:null,Id:void 0,Observer:void 0,Scheduler:void 0,run:et},Symbol.toStringTag,{value:"Module"}));function nt(e,t){let n=ae(void 0,t,void 0),r=K(),l=()=>{let c=e();n.value.contents=c},u=fe(r,{NAME:"Computed",VAL:n.id},l,void 0);h.set(r,u),b.contents=!0,I(u);let s=p.contents;p.contents=r;try{u.run(),u.dirty=!1,b.contents=!1}catch(c){throw p.contents=s,b.contents=!1,c}return p.contents=s,u.level=V(u),D.set(n.id,r),n}function rt(e){ze(e.id)}const lt=Object.freeze(Object.defineProperty({__proto__:null,Id:void 0,Observer:void 0,Scheduler:void 0,Signal:void 0,dispose:rt,make:nt},Symbol.toStringTag,{value:"Module"}));let i=Ze,S=lt,w=tt;function pe(e){return Me(e.split("/"),t=>{if(t!=="")return t.startsWith(":")?{TAG:"Param",_0:t.slice(1)}:{TAG:"Static",_0:t}})}function me(e,t){let n=t.split("/").filter(u=>u!=="");if(e.length!==n.length)return"NoMatch";let r={};return e.every((u,s)=>{let c=n[s];return u.TAG==="Static"?c===u._0:(r[u._0]=c,!0)})?{TAG:"Match",_0:r}:"NoMatch"}function J(e,t){return me(pe(e),t)}const ut=Object.freeze(Object.defineProperty({__proto__:null,match:J,matchPath:me,parsePattern:pe},Symbol.toStringTag,{value:"Module"}));function it(e,t){delete e[t]}function M(e,t,n){switch(t){case"checked":e.checked=n==="true";return;case"disabled":e.disabled=n==="true";return;case"aria-expanded":case"aria-hidden":case"aria-selected":case"multiple":case"readonly":case"required":break;case"value":e.value=n;return;default:e.setAttribute(t,n);return}n==="true"?e.setAttribute(t,""):e.removeAttribute(t)}let ot={setAttrOrProp:M},W={contents:void 0};function ct(){return{disposers:[],computeds:[]}}function R(e,t){let n=W.contents;W.contents=e;let r=t();return W.contents=n,r}function j(e,t){e.disposers.push(t)}function he(e){e.disposers.forEach(t=>t.dispose()),e.computeds.forEach(t=>S.dispose(t))}function P(e,t){e.__xote_owner__=t}function _e(e){return Ne(e.__xote_owner__)}let dt={currentOwner:W,createOwner:ct,runWithOwner:R,addDisposer:j,disposeOwner:he,setOwner:P,getOwner:_e};function ge(e,t){return[e,{TAG:"Static",_0:t}]}function Se(e,t){return[e,{TAG:"SignalValue",_0:t}]}function Ee(e,t){return[e,{TAG:"Compute",_0:t}]}let at={$$static:ge,signal:Se,computed:Ee};function F(e){let t=_e(e);t!==void 0&&he(t),Array.from(e.childNodes||[]).forEach(F)}function O(e){switch(e.TAG){case"Element":let t=e.children,n=e.events,r=e.attrs,l=document.createElement(e.tag),u={disposers:[],computeds:[]};return P(l,u),R(u,()=>{r.forEach(o=>{let m=o[1],E=o[0];switch(m.TAG){case"Static":return M(l,E,m._0);case"SignalValue":let v=m._0;M(l,E,i.peek(v));let y=w.run(()=>{M(l,E,i.get(v))},void 0);return j(u,y);case"Compute":let z=m._0;M(l,E,z());let x=w.run(()=>{M(l,E,z())},void 0);return j(u,x)}}),n.forEach(o=>{l.addEventListener(o[0],o[1])}),t.forEach(o=>{let m=O(o);l.appendChild(m)})}),l;case"Text":return document.createTextNode(e._0);case"SignalText":let s=e._0,c=document.createTextNode(i.peek(s)),d={disposers:[],computeds:[]};return P(c,d),R(d,()=>{let o=w.run(()=>{c.textContent=i.get(s)},void 0);j(d,o)}),c;case"Fragment":let L=document.createDocumentFragment();return e._0.forEach(o=>{let m=O(o);L.appendChild(m)}),L;case"SignalFragment":let pn=e._0,Z={disposers:[],computeds:[]},G=document.createElement("div");return G.setAttribute("style","display: contents"),P(G,Z),R(Z,()=>{let o=w.run(()=>{let m=i.get(pn);Array.from(G.childNodes||[]).forEach(F),G.innerHTML="",m.forEach(v=>{let y=O(v);G.appendChild(y)})},void 0);j(Z,o)}),G;case"LazyComponent":let Oe={disposers:[],computeds:[]},mn=R(Oe,e._0),Te=O(mn);return P(Te,Oe),Te;case"KeyedList":let ee=e.renderItem,te=e.keyFn,$e=e.signal,ne={disposers:[],computeds:[]},re=document.createComment(" keyed-list-start "),B=document.createComment(" keyed-list-end ");P(re,ne);let A={},hn=()=>{let o=B.parentNode;if(o==null)return;let m=i.get($e),E={};m.forEach(a=>{E[te(a)]=a});let v=[];Object.keys(A).forEach(a=>{if(E[a]===void 0){v.push(a);return}}),v.forEach(a=>{let f=A[a];if(f!==void 0){F(f.element),f.element.remove(),it(A,a);return}});let y=[],z={};m.forEach(a=>{let f=te(a),q=A[f];if(q!==void 0){if(q.item!==a){z[f]=!0;let Sn=ee(a),En=O(Sn),Ae={key:f,item:a,element:En};y.push(Ae),A[f]=Ae;return}y.push(q);return}let _n=ee(a),gn=O(_n),ke={key:f,item:a,element:gn};y.push(ke),A[f]=ke});let x={contents:re.nextSibling};y.forEach(a=>{let f=x.contents;if(f==null){o.insertBefore(a.element,B);return}if(f===B){o.insertBefore(a.element,B);return}if(f===a.element){x.contents=f.nextSibling;return}H(z[a.key],!1)?(F(f),o.replaceChild(a.element,f),x.contents=a.element.nextSibling):(o.insertBefore(a.element,f),x.contents=a.element.nextSibling)})},X=document.createDocumentFragment();return X.appendChild(re),i.peek($e).forEach(o=>{let m=te(o),E=ee(o),v=O(E),y={key:m,item:o,element:v};A[m]=y,X.appendChild(v)}),X.appendChild(B),R(ne,()=>{let o=w.run(()=>{hn()},void 0);j(ne,o)}),X}}let st={disposeElement:F,render:O};function ft(e){return{TAG:"Text",_0:e}}function pt(e){return{TAG:"SignalText",_0:S.make(e,void 0)}}function mt(e){return{TAG:"Fragment",_0:e}}function Q(e){return{TAG:"SignalFragment",_0:e}}function ht(e,t){return{TAG:"SignalFragment",_0:S.make(()=>i.get(e).map(t),void 0)}}function _t(e,t,n){return{TAG:"KeyedList",signal:e,keyFn:t,renderItem:n}}function g(e,t,n,r,l){let u=t!==void 0?t:[].map(d=>d),s=n!==void 0?n:[].map(d=>d),c=r!==void 0?r:[].map(d=>d);return{TAG:"Element",tag:e,attrs:u,events:s,children:c}}function gt(e,t,n,r){return g("div",e,t,n)}function St(e,t,n,r){return g("span",e,t,n)}function Et(e,t,n,r){return g("button",e,t,n)}function bt(e,t,n){return g("input",e,t,void 0)}function vt(e,t,n,r){return g("h1",e,t,n)}function yt(e,t,n,r){return g("h2",e,t,n)}function wt(e,t,n,r){return g("h3",e,t,n)}function Ot(e,t,n,r){return g("p",e,t,n)}function Tt(e,t,n,r){return g("ul",e,t,n)}function $t(e,t,n,r){return g("li",e,t,n)}function be(e,t,n,r){return g("a",e,t,n)}function kt(){return{TAG:"Text",_0:""}}function ve(e,t){let n=O(e);t.appendChild(n)}function At(e,t){let n=document.getElementById(t);if(n==null){console.error("Container element not found: "+t);return}else return ve(e,n)}let ye=ge;const Ct=Object.freeze(Object.defineProperty({__proto__:null,$$null:kt,Attributes:at,DOM:ot,Reactivity:dt,Render:st,a:be,attr:ye,button:Et,computedAttr:Ee,div:gt,element:g,fragment:mt,h1:vt,h2:yt,h3:wt,input:bt,keyedList:_t,li:$t,list:ht,mount:ve,mountById:At,p:Ot,signalAttr:Se,signalFragment:Q,span:St,text:ft,textSignal:pt,ul:Tt},Symbol.toStringTag,{value:"Module"}));let k=i.make({pathname:"/",search:"",hash:""},void 0,void 0);function Y(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash}}function Nt(){i.set(k,Y());let e=t=>i.set(k,Y());window.addEventListener("popstate",e)}function we(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",s={pathname:e,search:l,hash:u},c=e+l+u,d={};window.history.pushState(d,"",c),i.set(k,s)}function It(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",s={pathname:e,search:l,hash:u},c=e+l+u,d={};window.history.replaceState(d,"",c),i.set(k,s)}function Mt(e,t){return Q(S.make(()=>{let n=i.get(k),r=J(e,n.pathname);return typeof r!="object"?[]:[t(r._0)]},void 0))}function Rt(e){return Q(S.make(()=>{let t=i.get(k),n=Re(e,r=>{let l=J(r.pattern,t.pathname);if(typeof l=="object")return r.render(l._0)});return n!==void 0?[n]:[]},void 0))}function jt(e,t,n,r){let l=t!==void 0?t:[],u=n!==void 0?n:[],s=c=>{c.preventDefault(),we(e,void 0,void 0)};return be(l.concat([ye("href",e)]),[["click",s]],u)}const Pt=Object.freeze(Object.defineProperty({__proto__:null,Component:void 0,Route:void 0,getCurrentLocation:Y,init:Nt,link:jt,location:k,push:we,replace:It,route:Mt,routes:Rt},Symbol.toStringTag,{value:"Module"}));function Gt(e){return e.TAG==="Reactive"?i.get(e._0):e._0}function xt(e){return{TAG:"Static",_0:e}}function Dt(e){return{TAG:"Reactive",_0:e}}const Ft=Object.freeze(Object.defineProperty({__proto__:null,$$static:xt,get:Gt,reactive:Dt},Symbol.toStringTag,{value:"Module"}));let Lt=i.Id,Bt=i.Scheduler,zt=i.make,Vt=i.get,Wt=i.peek,Xt=i.set,qt=i.update,Kt=i.batch,Ht=i.untrack,Ut={Id:Lt,Scheduler:Bt,make:zt,get:Vt,peek:Wt,set:Xt,update:qt,batch:Kt,untrack:Ht},Jt=S.Id,Qt=S.Signal,Yt=S.Observer,Zt=S.Scheduler,en=S.make,tn=S.dispose,nn={Id:Jt,Signal:Qt,Observer:Yt,Scheduler:Zt,make:en,dispose:tn},rn=w.Id,ln=w.Observer,un=w.Scheduler,on=w.run,cn={Id:rn,Observer:ln,Scheduler:un,run:on},dn=Ct,an=ut,sn=Pt,fn=Ft;_.Component=dn,_.Computed=nn,_.Effect=cn,_.ReactiveProp=fn,_.Route=an,_.Router=sn,_.Signal=Ut,Object.defineProperty(_,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xote",
3
- "version": "4.6.0",
3
+ "version": "4.7.0",
4
4
  "repository": {
5
5
  "url": "https://github.com/brnrdog/xote"
6
6
  },
package/src/Xote__JSX.res CHANGED
@@ -1,5 +1,6 @@
1
1
  open Signals
2
2
  module Component = Xote__Component
3
+ module ReactiveProp = Xote__ReactiveProp
3
4
 
4
5
  /* ReScript JSX transform type aliases */
5
6
  type element = Component.node
@@ -42,22 +43,8 @@ let null = (): element => Component.text("")
42
43
 
43
44
  /* Elements module for lowercase HTML tags */
44
45
  module Elements = {
45
- /* Attribute value type that can be static, signal, or computed */
46
- @unboxed
47
- type rec attributeValue = Any('a): attributeValue
48
-
49
- /* Automatic conversion from string to attributeValue */
50
- external fromString: string => attributeValue = "%identity"
51
-
52
- /* Helper to convert a signal to an attributeValue */
53
- let signal = (s: Signals.Signal.t<string>): attributeValue => Any(s)
54
-
55
- /* Helper to convert a computed function to an attributeValue */
56
- let computed = (f: unit => string): attributeValue => Any(f)
57
-
58
- /* Props type for HTML elements - supports common attributes and events
59
- * String-like attributes use polymorphic types to accept strings, signals, or computed functions
60
- * Boolean attributes also use polymorphic types to accept bools, signals, or computed functions
46
+ /* Props type for HTML elements - accepts both raw values and ReactiveProp.t for flexibility
47
+ * This allows ergonomic JSX like class="foo" while also supporting class={ReactiveProp.reactive(signal)}
61
48
  */
62
49
  type props<
63
50
  'id,
@@ -91,7 +78,7 @@ module Elements = {
91
78
  'ariaExpanded,
92
79
  'ariaSelected,
93
80
  > = {
94
- /* Standard attributes - can be static strings, signals, or computed values */
81
+ /* Standard attributes - accept raw strings or ReactiveProp.t<string> */
95
82
  id?: 'id,
96
83
  class?: 'class,
97
84
  style?: 'style,
@@ -149,42 +136,58 @@ module Elements = {
149
136
  children?: element,
150
137
  }
151
138
 
152
- /* Helper to detect if a value is a signal (has an id property) */
153
- @get external hasId: 'a => option<int> = "id"
139
+ /* Helper to detect if a value is a ReactiveProp variant (checks for Static/Reactive tags) */
140
+ let isReactiveProp = (value: 'a): bool => {
141
+ %raw(`value && typeof value === 'object' && ('TAG' in value) && (value.TAG === 'Static' || value.TAG === 'Reactive')`)
142
+ }
154
143
 
155
- /* Helper to convert any value to Component.attrValue */
144
+ /* Helper to convert string attribute value (supports raw string, ReactiveProp, Signal, or computed function) */
156
145
  let convertAttrValue = (key: string, value: 'a): (string, Component.attrValue) => {
157
- // Check if it's a function (computed)
158
- if typeof(value) == #function {
159
- // It's a computed function
146
+ if isReactiveProp(value) {
147
+ // It's a ReactiveProp variant - pattern match on it
148
+ let rp: ReactiveProp.t<string> = Obj.magic(value)
149
+ switch rp {
150
+ | Static(s) => Component.attr(key, s)
151
+ | Reactive(signal) => Component.signalAttr(key, signal)
152
+ }
153
+ } else if typeof(value) == #function {
154
+ // It's a computed function (for backward compatibility)
160
155
  let f: unit => string = Obj.magic(value)
161
156
  Component.computedAttr(key, f)
162
- } else if typeof(value) == #object && hasId(value)->Option.isSome {
163
- // It's a signal (has an id property)
157
+ } else if typeof(value) == #object {
158
+ // It's a raw signal (for backward compatibility)
164
159
  let sig: Signal.t<string> = Obj.magic(value)
165
160
  Component.signalAttr(key, sig)
166
161
  } else {
167
- // It's a static string
162
+ // It's a raw string
168
163
  let s: string = Obj.magic(value)
169
164
  Component.attr(key, s)
170
165
  }
171
166
  }
172
167
 
173
- /* Helper to convert boolean attribute values (static bool, signal, or computed) to Component.attrValue */
168
+ /* Helper to convert boolean attribute value (supports raw bool, ReactiveProp, Signal, or computed function) */
174
169
  let convertBoolAttrValue = (key: string, value: 'a): (string, Component.attrValue) => {
175
- // Check if it's a function (computed)
176
- if typeof(value) == #function {
177
- // It's a computed function that returns bool
170
+ if isReactiveProp(value) {
171
+ // It's a ReactiveProp variant - pattern match on it
172
+ let rp: ReactiveProp.t<bool> = Obj.magic(value)
173
+ switch rp {
174
+ | Static(b) => Component.attr(key, b ? "true" : "false")
175
+ | Reactive(signal) => {
176
+ let strSignal = Computed.make(() => Signal.get(signal) ? "true" : "false")
177
+ Component.signalAttr(key, strSignal)
178
+ }
179
+ }
180
+ } else if typeof(value) == #function {
181
+ // It's a computed function that returns bool (for backward compatibility)
178
182
  let f: unit => bool = Obj.magic(value)
179
183
  Component.computedAttr(key, () => f() ? "true" : "false")
180
- } else if typeof(value) == #object && hasId(value)->Option.isSome {
181
- // It's a signal of bool
184
+ } else if typeof(value) == #object {
185
+ // It's a raw signal (for backward compatibility)
182
186
  let sig: Signal.t<bool> = Obj.magic(value)
183
- // Create a computed signal that converts bool to string
184
187
  let strSignal = Computed.make(() => Signal.get(sig) ? "true" : "false")
185
188
  Component.signalAttr(key, strSignal)
186
189
  } else {
187
- // It's a static bool
190
+ // It's a raw bool
188
191
  let b: bool = Obj.magic(value)
189
192
  Component.attr(key, b ? "true" : "false")
190
193
  }
@@ -206,7 +209,7 @@ module Elements = {
206
209
  }
207
210
  }
208
211
 
209
- /* Convert props to attrs array - uses wildcard types to accept any prop types */
212
+ /* Convert props to attrs array */
210
213
  let propsToAttrs = (props: props<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>): array<(string, Component.attrValue)> => {
211
214
  let attrs = []
212
215
 
@@ -280,7 +283,7 @@ module Elements = {
280
283
  }
281
284
  }
282
285
 
283
- /* Convert props to events array - uses wildcard types to accept any prop types */
286
+ /* Convert props to events array */
284
287
  let propsToEvents = (props: props<_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _>): array<(string, Dom.event => unit)> => {
285
288
  let events = []
286
289
 
@@ -1,7 +1,6 @@
1
1
  // Generated by ReScript, PLEASE EDIT WITH CARE
2
2
 
3
3
  import * as Signals from "rescript-signals/src/Signals.res.mjs";
4
- import * as Core__Option from "@rescript/core/src/Core__Option.res.mjs";
5
4
  import * as Xote__Component from "./Xote__Component.res.mjs";
6
5
  import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js";
7
6
 
@@ -28,18 +27,20 @@ function $$null() {
28
27
  return Xote__Component.text("");
29
28
  }
30
29
 
31
- function signal(s) {
32
- return s;
33
- }
34
-
35
- function computed(f) {
36
- return f;
30
+ function isReactiveProp(value) {
31
+ return (value && typeof value === 'object' && ('TAG' in value) && (value.TAG === 'Static' || value.TAG === 'Reactive'));
37
32
  }
38
33
 
39
34
  function convertAttrValue(key, value) {
40
- if (typeof value === "function") {
35
+ if (isReactiveProp(value)) {
36
+ if (value.TAG === "Reactive") {
37
+ return Xote__Component.signalAttr(key, value._0);
38
+ } else {
39
+ return Xote__Component.attr(key, value._0);
40
+ }
41
+ } else if (typeof value === "function") {
41
42
  return Xote__Component.computedAttr(key, value);
42
- } else if (typeof value === "object" && Core__Option.isSome(value.id)) {
43
+ } else if (typeof value === "object") {
43
44
  return Xote__Component.signalAttr(key, value);
44
45
  } else {
45
46
  return Xote__Component.attr(key, value);
@@ -47,6 +48,20 @@ function convertAttrValue(key, value) {
47
48
  }
48
49
 
49
50
  function convertBoolAttrValue(key, value) {
51
+ if (isReactiveProp(value)) {
52
+ if (value.TAG !== "Reactive") {
53
+ return Xote__Component.attr(key, value._0 ? "true" : "false");
54
+ }
55
+ let signal = value._0;
56
+ let strSignal = Signals.Computed.make(() => {
57
+ if (Signals.Signal.get(signal)) {
58
+ return "true";
59
+ } else {
60
+ return "false";
61
+ }
62
+ }, undefined);
63
+ return Xote__Component.signalAttr(key, strSignal);
64
+ }
50
65
  if (typeof value === "function") {
51
66
  return Xote__Component.computedAttr(key, () => {
52
67
  if (value()) {
@@ -56,17 +71,17 @@ function convertBoolAttrValue(key, value) {
56
71
  }
57
72
  });
58
73
  }
59
- if (!(typeof value === "object" && Core__Option.isSome(value.id))) {
74
+ if (typeof value !== "object") {
60
75
  return Xote__Component.attr(key, value ? "true" : "false");
61
76
  }
62
- let strSignal = Signals.Computed.make(() => {
77
+ let strSignal$1 = Signals.Computed.make(() => {
63
78
  if (Signals.Signal.get(value)) {
64
79
  return "true";
65
80
  } else {
66
81
  return "false";
67
82
  }
68
83
  }, undefined);
69
- return Xote__Component.signalAttr(key, strSignal);
84
+ return Xote__Component.signalAttr(key, strSignal$1);
70
85
  }
71
86
 
72
87
  function addAttr(attrs, opt, key, converter) {
@@ -184,8 +199,7 @@ function jsxKeyed$1(tag, props, key, param) {
184
199
  }
185
200
 
186
201
  let Elements = {
187
- signal: signal,
188
- computed: computed,
202
+ isReactiveProp: isReactiveProp,
189
203
  convertAttrValue: convertAttrValue,
190
204
  convertBoolAttrValue: convertBoolAttrValue,
191
205
  addAttr: addAttr,
@@ -203,12 +217,15 @@ let Elements = {
203
217
 
204
218
  let Component;
205
219
 
220
+ let ReactiveProp;
221
+
206
222
  let jsxs = jsx;
207
223
 
208
224
  let jsxsKeyed = jsxKeyed;
209
225
 
210
226
  export {
211
227
  Component,
228
+ ReactiveProp,
212
229
  jsx,
213
230
  jsxs,
214
231
  jsxKeyed,
@@ -9,3 +9,8 @@ let get = value =>
9
9
  | Reactive(signal) => Signal.get(signal)
10
10
  | Static(value) => value
11
11
  }
12
+
13
+ /* Helper functions for creating reactive props */
14
+ let static = value => Static(value)
15
+
16
+ let reactive = signal => Reactive(signal)
@@ -10,7 +10,23 @@ function get(value) {
10
10
  }
11
11
  }
12
12
 
13
+ function $$static(value) {
14
+ return {
15
+ TAG: "Static",
16
+ _0: value
17
+ };
18
+ }
19
+
20
+ function reactive(signal) {
21
+ return {
22
+ TAG: "Reactive",
23
+ _0: signal
24
+ };
25
+ }
26
+
13
27
  export {
14
28
  get,
29
+ $$static,
30
+ reactive,
15
31
  }
16
32
  /* Signals Not a pure module */