xote 4.0.0 → 4.1.1

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/README.md CHANGED
@@ -1,19 +1,18 @@
1
- # xote
1
+ # xote
2
2
  ![NPM Version](https://img.shields.io/npm/v/xote)
3
3
  ![npm bundle size](https://img.shields.io/bundlephobia/min/xote)
4
4
  ![npm bundle size](https://img.shields.io/bundlephobia/minzip/xote)
5
5
 
6
- Xote is a lightweight, zero-dependency library for ReScript with fine-grained reactivity based on the [TC39 Signals proposal](https://github.com/tc39/proposal-signals). With Xote, you can build reactive web applications with automatic dependency tracking and efficient updates.
6
+ Xote is a lightweight UI library for ReScript that combines fine-grained reactivity with a minimal component system. Built on [rescript-signals](https://github.com/brnrdog/rescript-signals), it provides declarative components, JSX support, and signal-based routing for building reactive web applications.
7
7
 
8
8
  ## Features
9
9
 
10
- - Zero dependencies: pure ReScript implementation
11
- - Lightweight and efficient runtime (~12kb minified)
12
- - Declarative components for building reactive UIs with JSX support
13
- - Reactive primitives: signals, computed values, and effects
14
- - Automatic dependency tracking: no manual subscription management
15
- - Fine-grained updates: direct DOM updates without a virtual DOM
16
- - Signal-based router: SPA navigation with pattern matching and dynamic parameters
10
+ - **Reactive Components**: Declarative UI building with JSX support and direct DOM updates
11
+ - **Signal-based Reactivity**: Powered by [rescript-signals](https://github.com/brnrdog/rescript-signals) for automatic dependency tracking
12
+ - **Fine-grained Updates**: Direct DOM manipulation without virtual DOM diffing
13
+ - **Signal-based Router**: SPA navigation with pattern matching and dynamic parameters
14
+ - **Lightweight**: Minimal runtime footprint (~18kb minified)
15
+ - **Type-safe**: Full ReScript type safety throughout
17
16
 
18
17
  ## Getting Started
19
18
 
@@ -35,9 +34,17 @@ Then, add it to your ReScript project’s dependencies in `rescript.json`:
35
34
  }
36
35
  ```
37
36
 
38
- ## Philosophy
37
+ ## What Makes Xote Unique?
39
38
 
40
- Xote focuses on clarity, control, and performance. It brings reactive programming to ReScript with minimal abstractions and no runtime dependencies. The goal is to offer precise, fine-grained updates and predictable behavior without a virtual DOM.
39
+ While Xote uses **rescript-signals** for reactive primitives (Signal, Computed, Effect), it adds:
40
+
41
+ - **Component System**: A minimal but powerful component model with JSX support
42
+ - **Direct DOM Updates**: Fine-grained reactivity that updates DOM elements directly, no virtual DOM
43
+ - **Signal-based Router**: Client-side routing with pattern matching and reactive location state
44
+ - **Reactive Attributes**: Support for static, signal-based, and computed attributes on elements
45
+ - **Automatic Cleanup**: Effect disposal and memory management built into the component lifecycle
46
+
47
+ Xote focuses on clarity, control, and performance. The goal is to offer precise, fine-grained updates and predictable behavior with minimal abstractions.
41
48
 
42
49
  ### Quick Example
43
50
 
@@ -73,11 +80,18 @@ Component.mountById(<App />, "app")
73
80
 
74
81
  ## Core Concepts
75
82
 
76
- - **Signal**: Reactive state container
77
- - **Computed**: Derived reactive value that updates automatically
78
- - **Effect**: Side-effect functions that re-runs when dependencies change. Dependencies are automatically tracked, unlike React.
79
- - **Component**: Declarative UI builder using ReScript functions
80
- - **Router**: Signal-based navigation for single-page applications
83
+ ### Reactive Primitives (from rescript-signals)
84
+
85
+ - **Signal**: Reactive state container - `Signal.make(value)`
86
+ - **Computed**: Derived reactive value that updates automatically - `Computed.make(() => ...)`
87
+ - **Effect**: Side-effect functions that re-run when dependencies change - `Effect.run(() => ...)`
88
+
89
+ All reactive primitives feature automatic dependency tracking - no manual subscriptions needed.
90
+
91
+ ### Xote Features
92
+
93
+ - **Component**: Declarative UI builder with JSX syntax and function-based APIs
94
+ - **Router**: Signal-based navigation for SPAs with pattern matching and dynamic routes
81
95
 
82
96
  ### Component Features
83
97
 
package/dist/xote.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let w={contents:0};function j(){return w.contents=w.contents+1|0,w.contents}function te(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 te(e)}function L(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 V(e,t){return e!==void 0?L(e):t}let F=(function(e,t){for(var n in e)t(n)});function C(e,t){if(e===t)return!0;let n=typeof e;if(n==="string"||n==="number"||n==="bigint"||n==="boolean"||n==="undefined"||e===null)return!1;let r=typeof t;if(n==="function"||r==="function")throw{RE_EXN_ID:"Invalid_argument",_1:"equal: functional value",Error:new Error};if(r==="number"||r==="bigint"||r==="undefined"||t===null)return!1;let l=e.TAG,o=t.TAG;if(l!==o)return!1;let i=e.length|0,u=t.length|0;if(i===u)if(Array.isArray(e)){let c=0;for(;;){let s=c;if(s===i)return!0;if(!C(e[s],t[s]))return!1;c=s+1|0}}else{if(e instanceof Date&&t instanceof Date)return!(e>t||e<t);{let c={contents:!0},s=f=>{if(!Object.prototype.hasOwnProperty.call(t,f)){c.contents=!1;return}},h=f=>{if(!Object.prototype.hasOwnProperty.call(e,f)||!C(t[f],e[f])){c.contents=!1;return}};return F(e,s),c.contents&&F(t,h),c.contents}}else return!1}let p=new Map,E=new Map,M=new Map,d={contents:void 0},O=new Set,N={contents:!1},S={contents:!1};function P(e){if(E.get(e)===void 0){E.set(e,new Set);return}}function re(e,t){P(t);let n=d.contents,r=p.get(e);if(n===void 0||r===void 0||n!==e||r.deps.has(t))return;r.deps.add(t);let l=E.get(t);if(l!==void 0){l.add(e);return}}function z(e){let t=M.get(e);if(t===void 0)return;M.delete(e);let n=p.get(t);if(n!==void 0){y(n),p.delete(t);return}}function y(e){e.deps.forEach(t=>{let n=E.get(t);if(n!==void 0)return n.delete(e.id),n.size===0&&!S.contents?z(t):void 0}),e.deps.clear()}function D(e){if(typeof e.kind=="object"){let r={contents:0};return e.deps.forEach(l=>{let o=E.get(l);if(o!==void 0){o.forEach(i=>{if(i===e.id)return;let u=p.get(i);if(u===void 0)return;if(typeof u.kind=="object"&&u.level>r.contents){r.contents=u.level;return}});return}}),r.contents+1|0}let n={contents:0};return e.deps.forEach(r=>{let l=E.get(r);if(l!==void 0){l.forEach(o=>{let i=p.get(o);if(i!==void 0&&i.level>n.contents){n.contents=i.level;return}});return}}),n.contents+1e3|0}function le(){for(;O.size>0;){let e=Array.from(O.values());O.clear(),e.sort((t,n)=>{let r=p.get(t),l=p.get(n);return r!==void 0?l!==void 0?r.level-l.level|0:-1:l!==void 0?1:0}),e.forEach(t=>{let n=p.get(t);if(n===void 0)return;S.contents=!0,y(n);let r=d.contents;d.contents=t;try{n.run(),S.contents=!1}catch(l){throw d.contents=r,S.contents=!1,l}d.contents=r,n.level=D(n)})}}function ue(e){P(e);let t=E.get(e);if(t!==void 0){if(t.forEach(n=>{O.add(n)}),N.contents)return;N.contents=!0,le(),N.contents=!1;return}}function q(e,t,n){let r=j();return P(r),{id:r,value:{contents:e},version:{contents:0},equals:V(n,C),name:t}}function oe(e){let t=d.contents;return t!==void 0&&re(t,e.id),e.value.contents}function ie(e){return e.value.contents}function I(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,ue(e.id)}function ce(e,t){I(e,t(e.value.contents))}let ae,se;const de=Object.freeze(Object.defineProperty({__proto__:null,Id:ae,Scheduler:se,get:oe,make:q,peek:ie,set:I,update:ce},Symbol.toStringTag,{value:"Module"}));function X(e,t,n){return{id:e,kind:t,run:n,deps:new Set,level:0}}function fe(e){let t=j(),n={contents:void 0},l=X(t,"Effect",()=>{let u=n.contents;u!==void 0&&u(),n.contents=e()});p.set(t,l),S.contents=!0,y(l);let o=d.contents;d.contents=t;try{l.run(),S.contents=!1}catch(u){throw d.contents=o,S.contents=!1,u}return d.contents=o,l.level=D(l),{dispose:()=>{let u=p.get(t);if(u===void 0)return;let c=n.contents;c!==void 0&&c(),y(u),p.delete(t)}}}let pe,_e,he;const me=Object.freeze(Object.defineProperty({__proto__:null,Id:pe,Observer:_e,Scheduler:he,run:fe},Symbol.toStringTag,{value:"Module"}));function Se(e){let t=q(void 0,void 0,void 0),n=j(),r=()=>{let i=e();I(t,i)},l=X(n,{NAME:"Computed",VAL:t.id},r);p.set(n,l),S.contents=!0,y(l);let o=d.contents;d.contents=n;try{l.run(),S.contents=!1}catch(i){throw d.contents=o,S.contents=!1,i}return d.contents=o,l.level=D(l),M.set(t.id,n),t}function ge(e){z(e.id)}let Ee,ve,be,Te;const ye=Object.freeze(Object.defineProperty({__proto__:null,Id:Ee,Observer:be,Scheduler:Te,Signal:ve,dispose:ge,make:Se},Symbol.toStringTag,{value:"Module"}));let a=de,m=ye,g=me;function Ae(e,t){let n=e.length,r=new Array(n),l=0;for(let o=0;o<n;++o){let i=e[o],u=t(i);u!==void 0&&(r[l]=L(u),l=l+1|0)}return r.length=l,r}function Oe(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}}function W(e){return Ae(e.split("/"),t=>{if(t!=="")return t.startsWith(":")?{TAG:"Param",_0:t.slice(1)}:{TAG:"Static",_0:t}})}function H(e,t){let n=t.split("/").filter(o=>o!=="");if(e.length!==n.length)return"NoMatch";let r={};return e.every((o,i)=>{let u=n[i];return o.TAG==="Static"?u===o._0:(r[o._0]=u,!0)})?{TAG:"Match",_0:r}:"NoMatch"}function G(e,t){return H(W(e),t)}const ke=Object.freeze(Object.defineProperty({__proto__:null,match:G,matchPath:H,parsePattern:W},Symbol.toStringTag,{value:"Module"}));function U(e,t){return[e,{TAG:"Static",_0:t}]}function we(e,t){return[e,{TAG:"SignalValue",_0:t}]}function Ne(e,t){return[e,{TAG:"Compute",_0:t}]}function Ce(e){return{TAG:"Text",_0:e}}function Me(e){return{TAG:"SignalText",_0:m.make(e)}}function $e(e){return{TAG:"Fragment",_0:e}}function R(e){return{TAG:"SignalFragment",_0:e}}function je(e,t){return{TAG:"SignalFragment",_0:m.make(()=>a.get(e).map(t))}}function _(e,t,n,r,l){let o=t!==void 0?t:[].map(c=>c),i=n!==void 0?n:[].map(c=>c),u=r!==void 0?r:[].map(c=>c);return{TAG:"Element",tag:e,attrs:o,events:i,children:u}}function Pe(e,t,n,r){return _("div",e,t,n)}function De(e,t,n,r){return _("span",e,t,n)}function Ie(e,t,n,r){return _("button",e,t,n)}function Ge(e,t,n){return _("input",e,t,void 0)}function Re(e,t,n,r){return _("h1",e,t,n)}function xe(e,t,n,r){return _("h2",e,t,n)}function Be(e,t,n,r){return _("h3",e,t,n)}function Fe(e,t,n,r){return _("p",e,t,n)}function Le(e,t,n,r){return _("ul",e,t,n)}function Ve(e,t,n,r){return _("li",e,t,n)}function J(e,t,n,r){return _("a",e,t,n)}function b(e,t){let n=V(ne(e.__xote_disposers),[]);e.__xote_disposers=n.concat([t])}function x(e){let t=e.__xote_disposers;t!=null&&(t.forEach(r=>r.dispose()),e.__xote_disposers=[]),Array.from(e.childNodes||[]).forEach(x)}function T(e){switch(e.TAG){case"Element":let t=document.createElement(e.tag);return e.attrs.forEach(s=>{let h=s[1],f=s[0];switch(h.TAG){case"Static":t.setAttribute(f,h._0);return;case"SignalValue":let A=h._0;t.setAttribute(f,a.peek(A));let Y=g.run(()=>{let k=a.get(A);t.setAttribute(f,k)});return b(t,Y);case"Compute":let Z=h._0,B=m.make(()=>Z());t.setAttribute(f,a.peek(B));let ee=g.run(()=>{let k=a.get(B);t.setAttribute(f,k)});return b(t,ee)}}),e.events.forEach(s=>{t.addEventListener(s[0],s[1])}),e.children.forEach(s=>{let h=T(s);t.appendChild(h)}),t;case"Text":return document.createTextNode(e._0);case"SignalText":let n=e._0,r=document.createTextNode(a.peek(n)),l=g.run(()=>{let s=a.get(n);r.textContent=s});return b(r,l),r;case"Fragment":let o=document.createDocumentFragment();return e._0.forEach(s=>{let h=T(s);o.appendChild(h)}),o;case"SignalFragment":let i=e._0,u=document.createElement("div");u.setAttribute("data-signal-fragment","true"),u.setAttribute("style","display: contents");let c=g.run(()=>{let s=a.get(i);Array.from(u.childNodes||[]).forEach(x),u.innerHTML="",s.forEach(f=>{let A=T(f);u.appendChild(A)})});return b(u,c),u}}function K(e,t){let n=T(e);t.appendChild(n)}function ze(e,t){let n=document.getElementById(t);if(n==null){console.error("Container element not found: "+t);return}else return K(e,n)}const qe=Object.freeze(Object.defineProperty({__proto__:null,a:J,addDisposer:b,attr:U,button:Ie,computedAttr:Ne,disposeElement:x,div:Pe,element:_,fragment:$e,h1:Re,h2:xe,h3:Be,input:Ge,li:Ve,list:je,mount:K,mountById:ze,p:Fe,render:T,signalAttr:we,signalFragment:R,span:De,text:Ce,textSignal:Me,ul:Le},Symbol.toStringTag,{value:"Module"}));let v=a.make({pathname:"/",search:"",hash:""},void 0,void 0);function $(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash}}function Xe(){a.set(v,$());let e=t=>a.set(v,$());window.addEventListener("popstate",e)}function Q(e,t,n,r){let l=t!==void 0?t:"",o=n!==void 0?n:"",i={pathname:e,search:l,hash:o},u=e+l+o,c={};window.history.pushState(c,"",u),a.set(v,i)}function We(e,t,n,r){let l=t!==void 0?t:"",o=n!==void 0?n:"",i={pathname:e,search:l,hash:o},u=e+l+o,c={};window.history.replaceState(c,"",u),a.set(v,i)}function He(e,t){return R(m.make(()=>{let n=a.get(v),r=G(e,n.pathname);return typeof r!="object"?[]:[t(r._0)]}))}function Ue(e){return R(m.make(()=>{let t=a.get(v),n=Oe(e,r=>{let l=G(r.pattern,t.pathname);if(typeof l=="object")return r.render(l._0)});return n!==void 0?[n]:[]}))}function Je(e,t,n,r){let l=t!==void 0?t:[],o=n!==void 0?n:[],i=u=>{u.preventDefault(),Q(e,void 0,void 0)};return J(l.concat([U("href",e)]),[["click",i]],o)}let Ke,Qe;const Ye=Object.freeze(Object.defineProperty({__proto__:null,Component:Ke,Route:Qe,getCurrentLocation:$,init:Xe,link:Je,location:v,push:Q,replace:We,route:He,routes:Ue},Symbol.toStringTag,{value:"Module"}));let Ze=a.Id,et=a.Scheduler,tt=a.make,nt=a.get,rt=a.peek,lt=a.set,ut=a.update,ot={Id:Ze,Scheduler:et,make:tt,get:nt,peek:rt,set:lt,update:ut},it=m.Id,ct=m.Signal,at=m.Observer,st=m.Scheduler,dt=m.make,ft=m.dispose,pt={Id:it,Signal:ct,Observer:at,Scheduler:st,make:dt,dispose:ft},_t=g.Id,ht=g.Observer,mt=g.Scheduler,St=g.run,gt={Id:_t,Observer:ht,Scheduler:mt,run:St},Et=qe,vt=ke,bt=Ye;exports.Component=Et;exports.Computed=pt;exports.Effect=gt;exports.Route=vt;exports.Router=bt;exports.Signal=ot;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let R={contents:0};function z(){return R.contents=R.contents+1|0,R.contents}function ge(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 Se(e){if(e!=null)return ge(e)}function Q(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 V(e,t){return e!==void 0?Q(e):t}function ve(e,t,n){return e.reduce(n,t)}function Ee(e,t){let n=e.length,r=new Array(n),l=0;for(let o=0;o<n;++o){let u=e[o],s=t(u);s!==void 0&&(r[l]=Q(s),l=l+1|0)}return r.length=l,r}function we(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 d=new Map,N=new Map,M=new Map,a={contents:void 0},C=new Set,E={contents:!1},g={contents:!1};function B(e){if(N.get(e)===void 0){N.set(e,new Set);return}}function be(e,t){let n=N.get(e);if(n!==void 0){n.forEach(t);return}}function ye(e,t){let n=N.get(e);if(n!==void 0){n.add(t);return}}function ke(e,t){let n=N.get(e);if(n!==void 0){n.delete(t);return}}function Te(e){return Array.from(V(N.get(e),new Set).values())}function Y(e,t){let n=a.contents;a.contents=e;try{let r=t();return a.contents=n,r}catch(r){throw a.contents=n,r}}function Ae(e){let t=a.contents;a.contents=void 0;try{let n=e();return a.contents=t,n}catch(n){throw a.contents=t,n}}function Oe(e){let t=a.contents;return t!==void 0?t===e:!1}function Ce(e){if(!E.contents){E.contents=!0;try{e(),E.contents=!1;return}catch(t){throw E.contents=!1,t}}}function Ne(e,t){B(t);let n=Oe(e),r=d.get(e);if(n&&r!==void 0&&!r.deps.has(t))return r.deps.add(t),ye(t,e)}function $(e){e.deps.forEach(t=>ke(t,e.id)),e.deps.clear()}function $e(e){let t=M.get(e);if(t===void 0)return;M.delete(e);let n=d.get(t);if(n!==void 0){$(n),d.delete(t);return}}function Z(e){return ve(e,0,(t,n)=>n>t?n:t)}function Me(e){let t=[];return e.deps.forEach(n=>be(n,r=>{if(r===e.id)return;let l=d.get(r);if(l===void 0)return;if(typeof l.kind=="object"){t.push(l.level);return}})),Z(t)+1|0}function xe(e){let t=[];return e.deps.forEach(n=>{let r=M.get(n);if(r===void 0||r===e.id)return;let l=d.get(r);if(l!==void 0){t.push(l.level);return}}),Z(t)+1|0}function P(e){return typeof e.kind=="object"?xe(e):Me(e)}function Ie(e,t){let n=d.get(e),r=d.get(t);if(n===void 0)return r!==void 0?1:0;if(r===void 0)return-1;let o=typeof n.kind=="object"?0:1,s=typeof r.kind=="object"?0:1,c=o-s|0;return c!==0?c:n.level-r.level|0}function je(e){g.contents=!0,$(e),Y(e.id,()=>{e.run(),g.contents=!1}),e.level=P(e)}function ee(){for(;C.size>0;){let e=Array.from(C.values());C.clear(),e.sort(Ie),e.forEach(t=>{let n=d.get(t);if(n!==void 0)return je(n)})}}function te(e){if(B(e),Te(e).forEach(t=>{let n=d.get(t);if(n===void 0)return;let r=n.kind;if(typeof r=="object")return n.dirty?void 0:(n.dirty=!0,te(r.VAL));C.add(t)}),C.size>0)return Ce(ee)}function ne(e){let t=M.get(e);if(t===void 0)return;let n=d.get(t);if(n!==void 0&&n.dirty){g.contents=!0,$(n),Y(t,()=>{n.run(),n.dirty=!1,g.contents=!1}),n.level=P(n);return}}function De(e){let t=E.contents;E.contents=!0;try{let n=e();return t||(E.contents=!1,C.size>0&&ee()),n}catch(n){throw t||(E.contents=!1),n}}let Pe=Ae,Ge=B;function re(e,t,n){let r=z();return Ge(r),{id:r,value:{contents:e},version:{contents:0},equals:V(n,(l,o)=>l===o),name:t}}function Re(e){ne(e.id);let t=a.contents;return t!==void 0&&Ne(t,e.id),e.value.contents}function Le(e){return ne(e.id),e.value.contents}function le(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,te(e.id)}function Fe(e,t){le(e,t(e.value.contents))}let ze,Ve,Be=De,We=Pe;const Xe=Object.freeze(Object.defineProperty({__proto__:null,Id:ze,Scheduler:Ve,batch:Be,get:Re,make:re,peek:Le,set:le,untrack:We,update:Fe},Symbol.toStringTag,{value:"Module"}));function ue(e,t,n){return{id:e,kind:t,run:n,deps:new Set,level:0,dirty:!0}}function qe(e){let t=z(),n={contents:void 0},l=ue(t,"Effect",()=>{let s=n.contents;s!==void 0&&s(),n.contents=e()});d.set(t,l),g.contents=!0,$(l);let o=a.contents;a.contents=t;try{l.run(),g.contents=!1}catch(s){throw a.contents=o,g.contents=!1,s}return a.contents=o,l.level=P(l),{dispose:()=>{let s=d.get(t);if(s===void 0)return;let c=n.contents;c!==void 0&&c(),$(s),d.delete(t)}}}let He,Ue,Je;const Ke=Object.freeze(Object.defineProperty({__proto__:null,Id:He,Observer:Ue,Scheduler:Je,run:qe},Symbol.toStringTag,{value:"Module"}));function Qe(e){let t=re(void 0,void 0,void 0),n=z(),r=()=>{let u=e();t.value.contents=u},l=ue(n,{NAME:"Computed",VAL:t.id},r);d.set(n,l),g.contents=!0,$(l);let o=a.contents;a.contents=n;try{l.run(),l.dirty=!1,g.contents=!1}catch(u){throw a.contents=o,g.contents=!1,u}return a.contents=o,l.level=P(l),M.set(t.id,n),t}function Ye(e){$e(e.id)}let Ze,et,tt,nt;const rt=Object.freeze(Object.defineProperty({__proto__:null,Id:Ze,Observer:tt,Scheduler:nt,Signal:et,dispose:Ye,make:Qe},Symbol.toStringTag,{value:"Module"}));let i=Xe,h=rt,_=Ke;function oe(e){return Ee(e.split("/"),t=>{if(t!=="")return t.startsWith(":")?{TAG:"Param",_0:t.slice(1)}:{TAG:"Static",_0:t}})}function ie(e,t){let n=t.split("/").filter(o=>o!=="");if(e.length!==n.length)return"NoMatch";let r={};return e.every((o,u)=>{let s=n[u];return o.TAG==="Static"?s===o._0:(r[o._0]=s,!0)})?{TAG:"Match",_0:r}:"NoMatch"}function W(e,t){return ie(oe(e),t)}const lt=Object.freeze(Object.defineProperty({__proto__:null,match:W,matchPath:ie,parsePattern:oe},Symbol.toStringTag,{value:"Module"}));function se(e,t){return[e,{TAG:"Static",_0:t}]}function ut(e,t){return[e,{TAG:"SignalValue",_0:t}]}function ot(e,t){return[e,{TAG:"Compute",_0:t}]}function it(e){return{TAG:"Text",_0:e}}function st(e){return{TAG:"SignalText",_0:h.make(e)}}function ct(e){return{TAG:"Fragment",_0:e}}function X(e){return{TAG:"SignalFragment",_0:e}}function at(e,t){return{TAG:"SignalFragment",_0:h.make(()=>i.get(e).map(t))}}function m(e,t,n,r,l){let o=t!==void 0?t:[].map(c=>c),u=n!==void 0?n:[].map(c=>c),s=r!==void 0?r:[].map(c=>c);return{TAG:"Element",tag:e,attrs:o,events:u,children:s}}function dt(e,t,n,r){return m("div",e,t,n)}function ft(e,t,n,r){return m("span",e,t,n)}function pt(e,t,n,r){return m("button",e,t,n)}function ht(e,t,n){return m("input",e,t,void 0)}function mt(e,t,n,r){return m("h1",e,t,n)}function _t(e,t,n,r){return m("h2",e,t,n)}function gt(e,t,n,r){return m("h3",e,t,n)}function St(e,t,n,r){return m("p",e,t,n)}function vt(e,t,n,r){return m("ul",e,t,n)}function Et(e,t,n,r){return m("li",e,t,n)}function ce(e,t,n,r){return m("a",e,t,n)}let w={contents:void 0};function wt(){return{disposers:[],signals:[],computeds:[]}}function A(e,t){let n=w.contents;w.contents=e;let r=t();return w.contents=n,r}function bt(e){let t=w.contents;if(t!==void 0){t.signals.push(e);return}}function yt(e){let t=w.contents;if(t!==void 0){t.computeds.push(e);return}}function kt(e){let t=w.contents;if(t!==void 0){t.disposers.push(e);return}}function y(e,t){let n=V(Se(e.__xote_disposers),[]);e.__xote_disposers=n.concat([t]);let r=w.contents;if(r!==void 0){r.disposers.push(t);return}}let L=(function(e){e.__devtoolsId&&window.__xoteDevToolsMarkAsDisposed&&window.__xoteDevToolsMarkAsDisposed(e.__devtoolsId)});function D(e){e.disposers.forEach(t=>t.dispose()),e.computeds.forEach(t=>{h.dispose(t),L(t)}),e.signals.forEach(t=>L(t))}function Tt(e){let t={disposers:[],signals:[],computeds:[]};return A(t,()=>e(()=>D(t))),()=>D(t)}function At(e){return{TAG:"LazyComponent",_0:e}}function q(e){let t=e.__xote_owner;t!=null&&(D(t),e.__xote_owner={disposers:[],signals:[],computeds:[]});let n=e.__xote_disposers;n!=null&&(n.forEach(l=>l.dispose()),e.__xote_disposers=[]),Array.from(e.childNodes||[]).forEach(q)}function O(e){switch(e.TAG){case"Element":let t=e.children,n=e.events,r=e.attrs,l=e.tag,o={disposers:[],signals:[],computeds:[]},u;switch(l){case"circle":case"clipPath":case"defs":case"ellipse":case"g":case"line":case"linearGradient":case"marker":case"mask":case"path":case"pattern":case"polygon":case"polyline":case"radialGradient":case"rect":case"stop":case"svg":case"symbol":case"text":case"textPath":case"tspan":case"use":u=document.createElementNS("http://www.w3.org/2000/svg",l);break;default:u=document.createElement(l)}return u.__xote_owner=o,A(o,()=>{r.forEach(f=>{let p=f[1],S=f[0];switch(p.TAG){case"Static":let I=p._0;S==="value"&&l==="input"?u.value=I:u.setAttribute(S,I);return;case"SignalValue":let T=p._0;if(S==="value"&&l==="input"){u.value=i.peek(T);let b=_.run(()=>{let G=i.get(T);u.value=G});return y(u,b)}u.setAttribute(S,i.peek(T));let he=_.run(()=>{let b=i.get(T);u.setAttribute(S,b)});return y(u,he);case"Compute":let me=p._0,j=h.make(()=>me());if(S==="value"&&l==="input"){u.value=i.peek(j);let b=_.run(()=>{let G=i.get(j);u.value=G});return y(u,b)}u.setAttribute(S,i.peek(j));let _e=_.run(()=>{let b=i.get(j);u.setAttribute(S,b)});return y(u,_e)}}),n.forEach(f=>{u.addEventListener(f[0],f[1])}),t.forEach(f=>{let p=O(f);u.appendChild(p)})}),u;case"Text":return document.createTextNode(e._0);case"SignalText":let s=e._0,c={disposers:[],signals:[],computeds:[]},x=document.createTextNode(i.peek(s));return x.__xote_owner=c,A(c,()=>{let f=_.run(()=>{let p=i.get(s);x.textContent=p});y(x,f)}),x;case"Fragment":let H=document.createDocumentFragment();return e._0.forEach(f=>{let p=O(f);H.appendChild(p)}),H;case"SignalFragment":let fe=e._0,U={disposers:[],signals:[],computeds:[]},v=document.createElement("div");return v.setAttribute("data-signal-fragment","true"),v.setAttribute("style","display: contents"),v.__xote_owner=U,A(U,()=>{let f=_.run(()=>{let p=i.get(fe);Array.from(v.childNodes||[]).forEach(q),v.innerHTML="",p.forEach(I=>{let T=O(I);v.appendChild(T)})});y(v,f)}),v;case"LazyComponent":let J={disposers:[],signals:[],computeds:[]},pe=A(J,e._0),K=O(pe);return K.__xote_owner=J,K}}function ae(e,t){let n=O(e);t.appendChild(n)}function Ot(e,t){let n=document.getElementById(t);if(n==null){console.error("Container element not found: "+t);return}else return ae(e,n)}const Ct=Object.freeze(Object.defineProperty({__proto__:null,a:ce,addDisposer:y,attr:se,button:pt,component:At,computedAttr:ot,createOwner:wt,createRoot:Tt,currentOwner:w,disposeElement:q,disposeOwner:D,div:dt,element:m,fragment:ct,h1:mt,h2:_t,h3:gt,input:ht,li:Et,list:at,markAsDisposedInDevTools:L,mount:ae,mountById:Ot,p:St,registerComputed:yt,registerEffectDisposer:kt,registerSignal:bt,render:O,runWithOwner:A,signalAttr:ut,signalFragment:X,span:ft,text:it,textSignal:st,ul:vt},Symbol.toStringTag,{value:"Module"}));let k=i.make({pathname:"/",search:"",hash:""},void 0,void 0);function F(){return{pathname:window.location.pathname,search:window.location.search,hash:window.location.hash}}function Nt(){i.set(k,F());let e=t=>i.set(k,F());window.addEventListener("popstate",e)}function de(e,t,n,r){let l=t!==void 0?t:"",o=n!==void 0?n:"",u={pathname:e,search:l,hash:o},s=e+l+o,c={};window.history.pushState(c,"",s),i.set(k,u)}function $t(e,t,n,r){let l=t!==void 0?t:"",o=n!==void 0?n:"",u={pathname:e,search:l,hash:o},s=e+l+o,c={};window.history.replaceState(c,"",s),i.set(k,u)}function Mt(e,t){return X(h.make(()=>{let n=i.get(k),r=W(e,n.pathname);return typeof r!="object"?[]:[t(r._0)]}))}function xt(e){return X(h.make(()=>{let t=i.get(k),n=we(e,r=>{let l=W(r.pattern,t.pathname);if(typeof l=="object")return r.render(l._0)});return n!==void 0?[n]:[]}))}function It(e,t,n,r){let l=t!==void 0?t:[],o=n!==void 0?n:[],u=s=>{s.preventDefault(),de(e,void 0,void 0)};return ce(l.concat([se("href",e)]),[["click",u]],o)}let jt,Dt;const Pt=Object.freeze(Object.defineProperty({__proto__:null,Component:jt,Route:Dt,getCurrentLocation:F,init:Nt,link:It,location:k,push:de,replace:$t,route:Mt,routes:xt},Symbol.toStringTag,{value:"Module"}));let Gt=i.Id,Rt=i.Scheduler,Lt=i.make,Ft=i.get,zt=i.peek,Vt=i.set,Bt=i.update,Wt=i.batch,Xt=i.untrack,qt={Id:Gt,Scheduler:Rt,make:Lt,get:Ft,peek:zt,set:Vt,update:Bt,batch:Wt,untrack:Xt},Ht=h.Id,Ut=h.Signal,Jt=h.Observer,Kt=h.Scheduler,Qt=h.make,Yt=h.dispose,Zt={Id:Ht,Signal:Ut,Observer:Jt,Scheduler:Kt,make:Qt,dispose:Yt},en=_.Id,tn=_.Observer,nn=_.Scheduler,rn=_.run,ln={Id:en,Observer:tn,Scheduler:nn,run:rn},un=Ct,on=lt,sn=Pt;exports.Component=un;exports.Computed=Zt;exports.Effect=ln;exports.Route=on;exports.Router=sn;exports.Signal=qt;