xote 4.4.2 → 4.5.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.umd.js CHANGED
@@ -1 +1 @@
1
- (function(g,T){typeof exports=="object"&&typeof module<"u"?T(exports):typeof define=="function"&&define.amd?define(["exports"],T):(g=typeof globalThis<"u"?globalThis:g||self,T(g.xote={}))})(this,(function(g){"use strict";let T={contents:0};function q(){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 a=e[u],c=t(a);c!==void 0&&(r[l]=le(c),l=l+1|0)}return r.length=l,r}function je(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,L=new Map,p={contents:void 0},N=new Set,k={contents:!1},v={contents:!1};function U(e){if(C.get(e)===void 0){C.set(e,new Set);return}}function Re(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 De(e,t){let n=C.get(e);if(n!==void 0){n.delete(t);return}}function Fe(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 Le(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 Ge(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=xe(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=>De(t,e.id)),e.deps.clear()}function Ve(e){let t=L.get(e);if(t===void 0)return;L.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 ze(e){let t=[];return e.deps.forEach(n=>Re(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=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}}),ie(t)+1|0}function z(e){return typeof e.kind=="object"?We(e):ze(e)}function Ke(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 Xe(e){v.contents=!0,I(e),ue(e.id,()=>{e.run(),v.contents=!1}),e.level=z(e)}function oe(){for(;N.size>0;){let e=Array.from(N.values());N.clear(),e.sort(Ke),e.forEach(t=>{let n=h.get(t);if(n!==void 0)return Xe(n)})}}function ce(e){if(U(e),Fe(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 Ge(oe)}function de(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,I(n),ue(t,()=>{n.run(),n.dirty=!1,v.contents=!1}),n.level=z(n);return}}function qe(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=Le,Ue=U;function se(e,t,n){let r=q();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 ae(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){ae(e,t(e.value.contents))}const Ze=Object.freeze(Object.defineProperty({__proto__:null,Id:void 0,Scheduler:void 0,batch:qe,get:Je,make:se,peek:Qe,set:ae,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=q(),r={contents:void 0},u=fe(n,"Effect",()=>{let d=r.contents;d!==void 0&&d(),r.contents=e()},t);h.set(n,u),v.contents=!0,I(u);let a=p.contents;p.contents=n;try{u.run(),v.contents=!1}catch(d){throw p.contents=a,v.contents=!1,d}return p.contents=a,u.level=z(u),{dispose:()=>{let d=h.get(n);if(d===void 0)return;let G=r.contents;G!==void 0&&G(),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=se(void 0,t,void 0),r=q(),l=()=>{let c=e();n.value.contents=c},u=fe(r,{NAME:"Computed",VAL:n.id},l,void 0);h.set(r,u),v.contents=!0,I(u);let a=p.contents;p.contents=r;try{u.run(),u.dirty=!1,v.contents=!1}catch(c){throw p.contents=a,v.contents=!1,c}return p.contents=a,u.level=z(u),L.set(n.id,r),n}function rt(e){Ve(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 o=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,a)=>{let c=n[a];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"value":e.value=n;return;default:e.setAttribute(t,n);return}}let ot={setAttrOrProp:M},W={contents:void 0};function ct(){return{disposers:[],computeds:[]}}function j(e,t){let n=W.contents;W.contents=e;let r=t();return W.contents=n,r}function R(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:j,addDisposer:R,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 st={$$static:ge,signal:Se,computed:Ee};function x(e){let t=_e(e);t!==void 0&&he(t),Array.from(e.childNodes||[]).forEach(x)}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),j(u,()=>{r.forEach(i=>{let m=i[1],E=i[0];switch(m.TAG){case"Static":return M(l,E,m._0);case"SignalValue":let y=m._0;M(l,E,o.peek(y));let b=w.run(()=>{M(l,E,o.get(y))},void 0);return R(u,b);case"Compute":let V=m._0;M(l,E,V());let F=w.run(()=>{M(l,E,V())},void 0);return R(u,F)}}),n.forEach(i=>{l.addEventListener(i[0],i[1])}),t.forEach(i=>{let m=O(i);l.appendChild(m)})}),l;case"Text":return document.createTextNode(e._0);case"SignalText":let a=e._0,c=document.createTextNode(o.peek(a)),d={disposers:[],computeds:[]};return P(c,d),j(d,()=>{let i=w.run(()=>{c.textContent=o.get(a)},void 0);R(d,i)}),c;case"Fragment":let G=document.createDocumentFragment();return e._0.forEach(i=>{let m=O(i);G.appendChild(m)}),G;case"SignalFragment":let on=e._0,Z={disposers:[],computeds:[]},D=document.createElement("div");return D.setAttribute("style","display: contents"),P(D,Z),j(Z,()=>{let i=w.run(()=>{let m=o.get(on);Array.from(D.childNodes||[]).forEach(x),D.innerHTML="",m.forEach(y=>{let b=O(y);D.appendChild(b)})},void 0);R(Z,i)}),D;case"LazyComponent":let Oe={disposers:[],computeds:[]},cn=j(Oe,e._0),ke=O(cn);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={},dn=()=>{let i=B.parentNode;if(i==null)return;let m=o.get(Te),E={};m.forEach(s=>{E[te(s)]=s});let y=[];Object.keys(A).forEach(s=>{if(E[s]===void 0){y.push(s);return}}),y.forEach(s=>{let f=A[s];if(f!==void 0){x(f.element),f.element.remove(),it(A,s);return}});let b=[],V={};m.forEach(s=>{let f=te(s),X=A[f];if(X!==void 0){if(X.item!==s){V[f]=!0;let fn=ee(s),pn=O(fn),Ae={key:f,item:s,element:pn};b.push(Ae),A[f]=Ae;return}b.push(X);return}let sn=ee(s),an=O(sn),$e={key:f,item:s,element:an};b.push($e),A[f]=$e});let F={contents:re.nextSibling};b.forEach(s=>{let f=F.contents;if(f==null){i.insertBefore(s.element,B);return}if(f===B){i.insertBefore(s.element,B);return}if(f===s.element){F.contents=f.nextSibling;return}H(V[s.key],!1)?(x(f),i.replaceChild(s.element,f),F.contents=s.element.nextSibling):(i.insertBefore(s.element,f),F.contents=s.element.nextSibling)})},K=document.createDocumentFragment();return K.appendChild(re),o.peek(Te).forEach(i=>{let m=te(i),E=ee(i),y=O(E),b={key:m,item:i,element:y};A[m]=b,K.appendChild(y)}),K.appendChild(B),j(ne,()=>{let i=w.run(()=>{dn()},void 0);R(ne,i)}),K}}let at={disposeElement:x,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(()=>o.get(e).map(t),void 0)}}function _t(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),a=n!==void 0?n:[].map(d=>d),c=r!==void 0?r:[].map(d=>d);return{TAG:"Element",tag:e,attrs:u,events:a,children:c}}function gt(e,t,n,r){return _("div",e,t,n)}function St(e,t,n,r){return _("span",e,t,n)}function Et(e,t,n,r){return _("button",e,t,n)}function vt(e,t,n){return _("input",e,t,void 0)}function yt(e,t,n,r){return _("h1",e,t,n)}function bt(e,t,n,r){return _("h2",e,t,n)}function wt(e,t,n,r){return _("h3",e,t,n)}function Ot(e,t,n,r){return _("p",e,t,n)}function kt(e,t,n,r){return _("ul",e,t,n)}function Tt(e,t,n,r){return _("li",e,t,n)}function ve(e,t,n,r){return _("a",e,t,n)}function ye(e,t){let n=O(e);t.appendChild(n)}function $t(e,t){let n=document.getElementById(t);if(n==null){console.error("Container element not found: "+t);return}else return ye(e,n)}let be=ge;const At=Object.freeze(Object.defineProperty({__proto__:null,Attributes:st,DOM:ot,Reactivity:dt,Render:at,a:ve,attr:be,button:Et,computedAttr:Ee,div:gt,element:_,fragment:mt,h1:yt,h2:bt,h3:wt,input:vt,keyedList:_t,li:Tt,list:ht,mount:ye,mountById:$t,p:Ot,signalAttr:Se,signalFragment:Q,span:St,text:ft,textSignal:pt,ul:kt},Symbol.toStringTag,{value:"Module"}));let $=o.make({pathname:"/",search:"",hash:""},void 0,void 0);function Y(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash}}function Ct(){o.set($,Y());let e=t=>o.set($,Y());window.addEventListener("popstate",e)}function we(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",a={pathname:e,search:l,hash:u},c=e+l+u,d={};window.history.pushState(d,"",c),o.set($,a)}function Nt(e,t,n,r){let l=t!==void 0?t:"",u=n!==void 0?n:"",a={pathname:e,search:l,hash:u},c=e+l+u,d={};window.history.replaceState(d,"",c),o.set($,a)}function It(e,t){return Q(S.make(()=>{let n=o.get($),r=J(e,n.pathname);return typeof r!="object"?[]:[t(r._0)]},void 0))}function Mt(e){return Q(S.make(()=>{let t=o.get($),n=je(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:[],a=c=>{c.preventDefault(),we(e,void 0,void 0)};return ve(l.concat([be("href",e)]),[["click",a]],u)}const Rt=Object.freeze(Object.defineProperty({__proto__:null,Component:void 0,Route:void 0,getCurrentLocation:Y,init:Ct,link:jt,location:$,push:we,replace:Nt,route:It,routes:Mt},Symbol.toStringTag,{value:"Module"}));let Pt=o.Id,Dt=o.Scheduler,Ft=o.make,Lt=o.get,xt=o.peek,Gt=o.set,Bt=o.update,Vt=o.batch,zt=o.untrack,Wt={Id:Pt,Scheduler:Dt,make:Ft,get:Lt,peek:xt,set:Gt,update:Bt,batch:Vt,untrack:zt},Kt=S.Id,Xt=S.Signal,qt=S.Observer,Ht=S.Scheduler,Ut=S.make,Jt=S.dispose,Qt={Id:Kt,Signal:Xt,Observer:qt,Scheduler:Ht,make:Ut,dispose:Jt},Yt=w.Id,Zt=w.Observer,en=w.Scheduler,tn=w.run,nn={Id:Yt,Observer:Zt,Scheduler:en,run:tn},rn=At,ln=ut,un=Rt;g.Component=rn,g.Computed=Qt,g.Effect=nn,g.Route=ln,g.Router=un,g.Signal=Wt,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(g,T){typeof exports=="object"&&typeof module<"u"?T(exports):typeof define=="function"&&define.amd?define(["exports"],T):(g=typeof globalThis<"u"?globalThis:g||self,T(g.xote={}))})(this,(function(g){"use strict";let T={contents:0};function X(){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,F=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 xe(e,t){let n=C.get(e);if(n!==void 0){n.delete(t);return}}function De(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 Fe(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 Ge(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=Ge(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=>xe(t,e.id)),e.deps.clear()}function Ve(e){let t=F.get(e);if(t===void 0)return;F.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 ze(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=F.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 z(e){return typeof e.kind=="object"?We(e):ze(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 Ke(e){b.contents=!0,I(e),ue(e.id,()=>{e.run(),b.contents=!1}),e.level=z(e)}function oe(){for(;N.size>0;){let e=Array.from(N.values());N.clear(),e.sort(qe),e.forEach(t=>{let n=h.get(t);if(n!==void 0)return Ke(n)})}}function ce(e){if(U(e),De(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=F.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=z(n);return}}function Xe(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=Fe,Ue=U;function ae(e,t,n){let r=X();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:Xe,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=X(),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=z(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=X(),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=z(u),F.set(n.id,r),n}function rt(e){Ve(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 G(e){let t=_e(e);t!==void 0&&he(t),Array.from(e.childNodes||[]).forEach(G)}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 V=m._0;M(l,E,V());let D=w.run(()=>{M(l,E,V())},void 0);return j(u,D)}}),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 dn=e._0,Z={disposers:[],computeds:[]},x=document.createElement("div");return x.setAttribute("style","display: contents"),P(x,Z),R(Z,()=>{let o=w.run(()=>{let m=i.get(dn);Array.from(x.childNodes||[]).forEach(G),x.innerHTML="",m.forEach(v=>{let y=O(v);x.appendChild(y)})},void 0);j(Z,o)}),x;case"LazyComponent":let Oe={disposers:[],computeds:[]},an=R(Oe,e._0),ke=O(an);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={},sn=()=>{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){G(f.element),f.element.remove(),it(A,a);return}});let y=[],V={};m.forEach(a=>{let f=te(a),K=A[f];if(K!==void 0){if(K.item!==a){V[f]=!0;let mn=ee(a),hn=O(mn),Ae={key:f,item:a,element:hn};y.push(Ae),A[f]=Ae;return}y.push(K);return}let fn=ee(a),pn=O(fn),$e={key:f,item:a,element:pn};y.push($e),A[f]=$e});let D={contents:re.nextSibling};y.forEach(a=>{let f=D.contents;if(f==null){o.insertBefore(a.element,B);return}if(f===B){o.insertBefore(a.element,B);return}if(f===a.element){D.contents=f.nextSibling;return}H(V[a.key],!1)?(G(f),o.replaceChild(a.element,f),D.contents=a.element.nextSibling):(o.insertBefore(a.element,f),D.contents=a.element.nextSibling)})},q=document.createDocumentFragment();return q.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,q.appendChild(v)}),q.appendChild(B),R(ne,()=>{let o=w.run(()=>{sn()},void 0);j(ne,o)}),q}}let st={disposeElement:G,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 _(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 _("div",e,t,n)}function St(e,t,n,r){return _("span",e,t,n)}function Et(e,t,n,r){return _("button",e,t,n)}function bt(e,t,n){return _("input",e,t,void 0)}function vt(e,t,n,r){return _("h1",e,t,n)}function yt(e,t,n,r){return _("h2",e,t,n)}function wt(e,t,n,r){return _("h3",e,t,n)}function Ot(e,t,n,r){return _("p",e,t,n)}function kt(e,t,n,r){return _("ul",e,t,n)}function Tt(e,t,n,r){return _("li",e,t,n)}function be(e,t,n,r){return _("a",e,t,n)}function $t(e){return e.TAG==="Reactive"?i.get(e._0):e._0}let At={get:$t};function ve(e,t){let n=O(e);t.appendChild(n)}function Ct(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 Nt=Object.freeze(Object.defineProperty({__proto__:null,Attributes:at,DOM:ot,ReactiveProp:At,Reactivity:dt,Render:st,a:be,attr:ye,button:Et,computedAttr:Ee,div:gt,element:_,fragment:mt,h1:vt,h2:yt,h3:wt,input:bt,keyedList:_t,li:Tt,list:ht,mount:ve,mountById:Ct,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 It(){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 Mt(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 Rt(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 jt(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 Pt(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 xt=Object.freeze(Object.defineProperty({__proto__:null,Component:void 0,Route:void 0,getCurrentLocation:Y,init:It,link:Pt,location:$,push:we,replace:Mt,route:Rt,routes:jt},Symbol.toStringTag,{value:"Module"}));let Dt=i.Id,Ft=i.Scheduler,Gt=i.make,Lt=i.get,Bt=i.peek,Vt=i.set,zt=i.update,Wt=i.batch,qt=i.untrack,Kt={Id:Dt,Scheduler:Ft,make:Gt,get:Lt,peek:Bt,set:Vt,update:zt,batch:Wt,untrack:qt},Xt=S.Id,Ht=S.Signal,Ut=S.Observer,Jt=S.Scheduler,Qt=S.make,Yt=S.dispose,Zt={Id:Xt,Signal:Ht,Observer:Ut,Scheduler:Jt,make:Qt,dispose:Yt},en=w.Id,tn=w.Observer,nn=w.Scheduler,rn=w.run,ln={Id:en,Observer:tn,Scheduler:nn,run:rn},un=Nt,on=ut,cn=xt;g.Component=un,g.Computed=Zt,g.Effect=ln,g.Route=on,g.Router=cn,g.Signal=Kt,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xote",
3
- "version": "4.4.2",
3
+ "version": "4.5.0",
4
4
  "repository": {
5
5
  "url": "https://github.com/brnrdog/xote"
6
6
  },
@@ -25,17 +25,27 @@ module DOM = {
25
25
  external addEventListener: (Dom.element, string, Dom.event => unit) => unit = "addEventListener"
26
26
  @send external appendChild: (Dom.element, Dom.element) => unit = "appendChild"
27
27
  @send external setAttribute: (Dom.element, string, string) => unit = "setAttribute"
28
+ @send external removeAttribute: (Dom.element, string) => unit = "removeAttribute"
28
29
  @send external replaceChild: (Dom.element, Dom.element, Dom.element) => unit = "replaceChild"
29
30
  @send external insertBefore: (Dom.element, Dom.element, Dom.element) => unit = "insertBefore"
30
31
  @set external setTextContent: (Dom.element, string) => unit = "textContent"
31
32
  @set external setValue: (Dom.element, string) => unit = "value"
32
33
  @set external setChecked: (Dom.element, bool) => unit = "checked"
34
+ @set external setDisabled: (Dom.element, bool) => unit = "disabled"
33
35
 
34
36
  /* Set attribute or property depending on attribute name */
35
37
  let setAttrOrProp = (el: Dom.element, key: string, value: string): unit => {
36
38
  switch key {
37
39
  | "value" => setValue(el, value)
38
40
  | "checked" => setChecked(el, value == "true")
41
+ | "disabled" => setDisabled(el, value == "true")
42
+ /* Boolean attributes that should be added/removed based on value */
43
+ | "required" | "readonly" | "multiple" | "aria-hidden" | "aria-expanded" | "aria-selected" =>
44
+ if value == "true" {
45
+ setAttribute(el, key, "")
46
+ } else {
47
+ removeAttribute(el, key)
48
+ }
39
49
  | _ => setAttribute(el, key, value)
40
50
  }
41
51
  }
@@ -491,6 +501,18 @@ let ul = (~attrs=?, ~events=?, ~children=?, ()) => element("ul", ~attrs?, ~event
491
501
  let li = (~attrs=?, ~events=?, ~children=?, ()) => element("li", ~attrs?, ~events?, ~children?, ())
492
502
  let a = (~attrs=?, ~events=?, ~children=?, ()) => element("a", ~attrs?, ~events?, ~children?, ())
493
503
 
504
+ /* Defines a property that can either be a signal (Reactive) or a static value
505
+ (Static) */
506
+ module ReactiveProp = {
507
+ type t<'a> = Reactive(Signal.t<'a>) | Static('a)
508
+
509
+ let get = value =>
510
+ switch value {
511
+ | Reactive(signal) => Signal.get(signal)
512
+ | Static(value) => value
513
+ }
514
+ }
515
+
494
516
  /* Mounting */
495
517
  let mount = (node: node, container: Dom.element): unit => {
496
518
  let el = Render.render(node)
@@ -10,6 +10,16 @@ function setAttrOrProp(el, key, value) {
10
10
  case "checked" :
11
11
  el.checked = value === "true";
12
12
  return;
13
+ case "disabled" :
14
+ el.disabled = value === "true";
15
+ return;
16
+ case "aria-expanded" :
17
+ case "aria-hidden" :
18
+ case "aria-selected" :
19
+ case "multiple" :
20
+ case "readonly" :
21
+ case "required" :
22
+ break;
13
23
  case "value" :
14
24
  el.value = value;
15
25
  return;
@@ -17,6 +27,11 @@ function setAttrOrProp(el, key, value) {
17
27
  el.setAttribute(key, value);
18
28
  return;
19
29
  }
30
+ if (value === "true") {
31
+ el.setAttribute(key, "");
32
+ } else {
33
+ el.removeAttribute(key);
34
+ }
20
35
  }
21
36
 
22
37
  let DOM = {
@@ -449,6 +464,18 @@ function a(attrs, events, children, param) {
449
464
  return element("a", attrs, events, children, undefined);
450
465
  }
451
466
 
467
+ function get(value) {
468
+ if (value.TAG === "Reactive") {
469
+ return Signals.Signal.get(value._0);
470
+ } else {
471
+ return value._0;
472
+ }
473
+ }
474
+
475
+ let ReactiveProp = {
476
+ get: get
477
+ };
478
+
452
479
  function mount(node, container) {
453
480
  let el = render(node);
454
481
  container.appendChild(el);
@@ -496,6 +523,7 @@ export {
496
523
  ul,
497
524
  li,
498
525
  a,
526
+ ReactiveProp,
499
527
  mount,
500
528
  mountById,
501
529
  }