xote 4.13.0 → 4.15.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/README.md +89 -0
- package/dist/xote.cjs +9 -8
- package/dist/xote.mjs +1063 -825
- package/dist/xote.umd.js +8 -7
- package/package.json +1 -1
- package/rescript.json +4 -0
- package/src/Xote.res +4 -0
- package/src/Xote.res.mjs +5 -1
- package/src/Xote__Hydration.res +10 -6
- package/src/Xote__Hydration.res.mjs +10 -4
- package/src/Xote__JSX.res +6 -0
- package/src/Xote__JSX.res.mjs +3 -0
- package/src/Xote__SSR.res +2 -0
- package/src/Xote__SSR.res.mjs +3 -1
- package/src/Xote__SSRState.res +247 -0
- package/src/Xote__SSRState.res.mjs +286 -0
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@ Xote is a lightweight UI library for ReScript that combines fine-grained reactiv
|
|
|
11
11
|
- **Signal-based Reactivity**: Powered by [rescript-signals](https://github.com/brnrdog/rescript-signals) for automatic dependency tracking
|
|
12
12
|
- **Fine-grained Updates**: Direct DOM manipulation without virtual DOM diffing
|
|
13
13
|
- **Signal-based Router**: SPA navigation with pattern matching and dynamic parameters
|
|
14
|
+
- **Server-Side Rendering**: SSR with hydration and automatic state transfer
|
|
14
15
|
- **Lightweight**: Minimal runtime footprint
|
|
15
16
|
- **Type-safe**: Full ReScript type safety throughout
|
|
16
17
|
|
|
@@ -110,6 +111,94 @@ All reactive primitives feature automatic dependency tracking - no manual subscr
|
|
|
110
111
|
- **Navigation links**: Use `Router.link()` for SPA navigation without page reload
|
|
111
112
|
- **Reactive location**: Access current route via `Router.location` signal
|
|
112
113
|
|
|
114
|
+
## Server-Side Rendering (SSR)
|
|
115
|
+
|
|
116
|
+
Xote supports server-side rendering with hydration. The same component code runs on both server and client, with the server rendering HTML and the client attaching reactivity to the existing DOM.
|
|
117
|
+
|
|
118
|
+
### Basic SSR Setup
|
|
119
|
+
|
|
120
|
+
**Shared component** (`App.res`):
|
|
121
|
+
```rescript
|
|
122
|
+
open Xote
|
|
123
|
+
|
|
124
|
+
let makeAppState = () => {
|
|
125
|
+
// SSRState.make creates a signal that syncs between server and client
|
|
126
|
+
let count = SSRState.make("count", 0, SSRState.Codec.int)
|
|
127
|
+
let items = SSRState.make("items", ["Apple", "Banana"], SSRState.Codec.array(SSRState.Codec.string))
|
|
128
|
+
(count, items)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
let app = (count, items) => () => {
|
|
132
|
+
<div>
|
|
133
|
+
<p> {Component.textSignal(() => `Count: ${Signal.get(count)->Int.toString}`)} </p>
|
|
134
|
+
<button onClick={_ => Signal.update(count, n => n + 1)}>
|
|
135
|
+
{Component.text("+")}
|
|
136
|
+
</button>
|
|
137
|
+
</div>
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Server entry** (`server.res`):
|
|
142
|
+
```rescript
|
|
143
|
+
open Xote
|
|
144
|
+
|
|
145
|
+
let (count, items) = App.makeAppState()
|
|
146
|
+
let appComponent = App.app(count, items)
|
|
147
|
+
|
|
148
|
+
let html = SSR.renderDocument(
|
|
149
|
+
~head="<title>My App</title>",
|
|
150
|
+
~scripts=["./client.res.mjs"],
|
|
151
|
+
~stateScript=SSRState.generateScript(),
|
|
152
|
+
appComponent,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
Console.log(html)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Client entry** (`client.res`):
|
|
159
|
+
```rescript
|
|
160
|
+
open Xote
|
|
161
|
+
|
|
162
|
+
let (count, items) = App.makeAppState()
|
|
163
|
+
let appComponent = App.app(count, items)
|
|
164
|
+
|
|
165
|
+
Hydration.hydrateById(appComponent, "root")
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Running the SSR Example
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
# Generate HTML
|
|
172
|
+
node server.res.mjs > index.html
|
|
173
|
+
|
|
174
|
+
# Serve with Vite (or any static server)
|
|
175
|
+
npx vite
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### SSR Features
|
|
179
|
+
|
|
180
|
+
- **`SSR.renderToString`**: Render component to HTML string
|
|
181
|
+
- **`SSR.renderDocument`**: Render full HTML document with head, scripts, styles
|
|
182
|
+
- **`SSRState.make`**: Create signals that automatically sync between server and client
|
|
183
|
+
- **`SSRState.generateScript`**: Generate `<script>` tag with serialized state
|
|
184
|
+
- **`Hydration.hydrate`**: Attach reactivity to server-rendered DOM
|
|
185
|
+
- **`SSRContext.isServer` / `isClient`**: Environment detection for conditional logic
|
|
186
|
+
|
|
187
|
+
### Built-in Codecs for State Serialization
|
|
188
|
+
|
|
189
|
+
```rescript
|
|
190
|
+
SSRState.Codec.int
|
|
191
|
+
SSRState.Codec.float
|
|
192
|
+
SSRState.Codec.string
|
|
193
|
+
SSRState.Codec.bool
|
|
194
|
+
SSRState.Codec.array(itemCodec)
|
|
195
|
+
SSRState.Codec.option(itemCodec)
|
|
196
|
+
SSRState.Codec.dict(valueCodec)
|
|
197
|
+
SSRState.Codec.tuple2(codec1, codec2)
|
|
198
|
+
SSRState.Codec.tuple3(codec1, codec2, codec3)
|
|
199
|
+
SSRState.Codec.make(~encode, ~decode) // Custom codec
|
|
200
|
+
```
|
|
201
|
+
|
|
113
202
|
## Examples
|
|
114
203
|
|
|
115
204
|
Check some examples of applications built with Xote at https://brnrdog.github.io/xote/demos/.
|
package/dist/xote.cjs
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let
|
|
2
|
-
`),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let Re={contents:0};function $e(){return Re.contents=Re.contents+1|0,Re.contents}function tt(){return{first:void 0,last:void 0,version:0,compute:void 0,firstDep:void 0,lastDep:void 0,flags:0,level:0}}function Qt(e){return{first:void 0,last:void 0,version:0,compute:e,firstDep:void 0,lastDep:void 0,flags:1,level:0}}function Zt(e,t,n,r,l){return{id:e,kind:t,run:n,firstDep:void 0,lastDep:void 0,flags:1,level:0,name:r,backingSubs:l}}function nt(e){e.flags=e.flags&-2}function en(e){return(e.flags&2)!==0}function tn(e){e.flags=e.flags|2}function nn(e){e.flags=e.flags&-3}function rt(e){return(e.flags&1)!==0}function rn(e){e.flags=e.flags|1}function Ie(e){e.flags=e.flags&-2}function ln(e){e.flags=e.flags&-3}function Ae(e){return e.compute!==void 0}function Ue(e,t){return{subs:e,observer:t,nextDep:void 0,prevDep:void 0,nextSub:void 0,prevSub:void 0}}function Te(e,t){t.prevSub=e.last,t.nextSub=void 0;let n=e.last;n!==void 0?n.nextSub=t:e.first=t,e.last=t}function Je(e,t){t.prevDep=e.lastDep,t.nextDep=void 0;let n=e.lastDep;n!==void 0?n.nextDep=t:e.firstDep=t,e.lastDep=t}function lt(e){let t=e.subs,n=e.prevSub;n!==void 0?n.nextSub=e.nextSub:t.first=e.nextSub;let r=e.nextSub;r!==void 0?r.prevSub=e.prevSub:t.last=e.prevSub,e.prevSub=void 0,e.nextSub=void 0}function it(e){let t=e.firstDep;for(;t!==void 0;){let n=t;if(n!==void 0){let r=n.nextDep;lt(n),t=r}}e.firstDep=void 0,e.lastDep=void 0}function Ne(e){let t=e.firstDep;for(;t!==void 0;){let n=t;if(n!==void 0){let r=n.nextDep;lt(n),t=r}}e.firstDep=void 0,e.lastDep=void 0}function Qe(e,t){t.prevDep=e.lastDep,t.nextDep=void 0;let n=e.lastDep;n!==void 0?n.nextDep=t:e.firstDep=t,e.lastDep=t}function ee(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 Ge(e){if(e!=null)return ee(e)}function g(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 un(e,t){return e!==void 0?g(e):t}let C={contents:void 0},F={contents:void 0},V=[],Z=[],q={contents:!1},Ee=[],Ze=(function(e){e.length=0});function on(e){if(!en(e)){tn(e),V.push(e);return}}function dn(e,t){if(e.firstDep===void 0){let i={subs:t,observer:e,nextDep:void 0,prevDep:void 0,nextSub:void 0,prevSub:void 0};return Qe(e,i),Te(t,i)}let n=!1,r=e.firstDep;for(;r!==void 0&&!n;){let i=r;i!==void 0&&(i.subs===t?n=!0:r=i.nextDep)}if(n)return;let l={subs:t,observer:e,nextDep:void 0,prevDep:void 0,nextSub:void 0,prevSub:void 0};Qe(e,l),Te(t,l)}function cn(e,t){if(e.firstDep===void 0){let i=Ue(t,e);return Je(e,i),Te(t,i)}let n=!1,r=e.firstDep;for(;r!==void 0&&!n;){let i=r;i!==void 0&&(i.subs===t?n=!0:r=i.nextDep)}if(n)return;let l=Ue(t,e);Je(e,l),Te(t,l)}function an(e){let t=C.contents;if(t!==void 0)return dn(t,e);let n=F.contents;if(n!==void 0)return cn(n,e)}function sn(e,t){return e.level-t.level|0}function fn(e,t){return e.level-t.level|0}function ut(e){let t=0,n=e.firstDep;for(;n!==void 0;){let r=n;r!==void 0&&(Ae(r.subs)&&r.subs.level>t&&(t=r.subs.level),n=r.nextDep)}return t+1|0}function ot(e){let t=0,n=e.firstDep;for(;n!==void 0;){let r=n;r!==void 0&&(Ae(r.subs)&&r.subs.level>t&&(t=r.subs.level),n=r.nextDep)}return t+1|0}function pn(e){let t=e.level;Ne(e),ln(e);let n=C.contents;C.contents=e;try{let r=e.compute;r!==void 0&&r(),Ie(e),C.contents=n}catch(r){throw C.contents=n,r}if(t===0){e.level=ut(e);return}}function mn(e){let t=e.level;it(e),nn(e);let n=F.contents;F.contents=e;try{e.run(),nt(e),F.contents=n}catch(r){throw F.contents=n,r}if(t===0){e.level=ot(e);return}}function dt(){q.contents=!0;try{for(;V.length!==0||Z.length!==0;){if(Z.length!==0){Z.sort(fn);let e=Z.slice();Ze(Z),e.forEach(pn)}if(V.length!==0){V.sort(sn);let e=V.slice();Ze(V),e.forEach(mn)}}q.contents=!1;return}catch(e){throw q.contents=!1,e}}function hn(e){for(Ee.push(e);Ee.length!==0;){let t=Ee.pop();if(t!==void 0){let n=t.first;for(;n!==void 0;){let r=n;if(r!==void 0){let l=r.observer;Ae(l)?rt(l)||(rn(l),Ee.push(l)):on(r.observer),n=r.nextSub}}}}if((V.length!==0||Z.length!==0)&&!q.contents)return dt()}function ct(e){if(!(Ae(e)&&rt(e)))return;let t=e.level;Ne(e);let n=C.contents;C.contents=e;try{let r=e.compute;r!==void 0&&r(),Ie(e),C.contents=n}catch(r){throw C.contents=n,r}if(t===0){e.level=ut(e);return}}function gn(e){let t=q.contents;q.contents=!0;try{let n=e();return t||(q.contents=!1,(V.length!==0||Z.length!==0)&&dt()),n}catch(n){throw t||(q.contents=!1),n}}function Sn(e){let t=C.contents,n=F.contents;C.contents=void 0,F.contents=void 0;try{let r=e();return C.contents=t,F.contents=n,r}catch(r){throw C.contents=t,F.contents=n,r}}function _n(e,t,n){return{id:$e(),value:e,equals:un(n,(l,i)=>l===i),name:t,subs:tt()}}function yn(e,t){return{id:$e(),value:e,equals:(r,l)=>!1,name:t,subs:tt()}}function bn(e){return ct(e.subs),an(e.subs),e.value}function En(e){return ct(e.subs),e.value}function at(e,t){let n;try{n=!e.equals(e.value,t)}catch{n=!0}if(n)return e.value=t,e.subs.version=e.subs.version+1|0,hn(e.subs)}function wn(e,t){at(e,t(e.value))}let kn,Tn,vn,$n=gn,An=Sn;const xn=Object.freeze(Object.defineProperty({__proto__:null,Core:vn,Id:kn,Scheduler:Tn,batch:$n,get:bn,make:_n,makeForComputed:yn,peek:En,set:at,untrack:An,update:wn},Symbol.toStringTag,{value:"Module"}));function Cn(e,t){let n=$e(),r={contents:void 0},i=Zt(n,"Effect",()=>{let E=r.contents;E!==void 0&&E(),r.contents=e()},t,void 0),u=F.contents;F.contents=i;try{i.run(),nt(i),F.contents=u}catch(E){throw F.contents=u,E}i.level=ot(i);let c={contents:!1};return{dispose:()=>{if(c.contents)return;c.contents=!0;let E=r.contents;E!==void 0&&E(),it(i)}}}let On,Dn,Pn;const Rn=Object.freeze(Object.defineProperty({__proto__:null,Core:Dn,Id:On,Scheduler:Pn,run:Cn},Symbol.toStringTag,{value:"Module"}));function Mn(e,t){let n=$e(),r={contents:void 0},i=Qt(()=>{r.contents.value=e()}),u=C.contents;C.contents=i;let c=e();C.contents=u;let f={id:n,value:c,equals:(E,R)=>!1,name:t,subs:i};return r.contents=f,Ie(i),f}function jn(e){Ne(e.subs)}let Fn,Ln,In,Nn;const Gn=Object.freeze(Object.defineProperty({__proto__:null,Core:In,Id:Fn,Scheduler:Nn,Signal:Ln,dispose:jn,make:Mn},Symbol.toStringTag,{value:"Module"}));let d=xn,P=Gn,T=Rn;function J(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}let ze=["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"];function zn(e){return ze.includes(e)}let st={escape:J,voidElements:ze,isVoidElement:zn},ft="<!--$-->",pt="<!--/$-->",mt="<!--#-->",ht="<!--/#-->",gt="<!--kl-->",St="<!--/kl-->";function _t(e){return"<!--k:"+e+"-->"}let yt="<!--/k-->",bt="<!--lc-->",Et="<!--/lc-->",Bn={signalTextStart:ft,signalTextEnd:pt,signalFragmentStart:mt,signalFragmentEnd:ht,keyedListStart:gt,keyedListEnd:St,keyedItemStart:_t,keyedItemEnd:yt,lazyComponentStart:bt,lazyComponentEnd:Et};function wt(e){let t=e[1],n=e[0],r;switch(t.TAG){case"Static":r=t._0;break;case"SignalValue":r=d.peek(t._0);break;case"Compute":r=t._0();break}switch(n){case"aria-expanded":case"aria-hidden":case"aria-selected":case"checked":case"disabled":case"multiple":case"readonly":case"required":break;default:return n+'="'+J(r)+'"'}return r==="true"?n:""}function kt(e){let t=e.map(wt).filter(n=>n!=="");return t.length>0?" "+t.join(" "):""}let Wn={renderAttr:wt,renderAttrs:kt};function K(e){switch(e.TAG){case"Element":let t=e.tag,n=kt(e.attrs);if(ze.includes(t))return"<"+t+n+" />";let r=e.children.map(K).join("");return"<"+t+n+">"+r+"</"+t+">";case"Text":return J(e._0);case"SignalText":let l=d.peek(e._0);return ft+J(l)+pt;case"Fragment":return e._0.map(K).join("");case"SignalFragment":let u=d.peek(e._0).map(K).join("");return mt+u+ht;case"LazyComponent":let c=e._0();return bt+K(c)+Et;case"KeyedList":let f=e.renderItem,E=e.keyFn,O=d.peek(e.signal).map(x=>{let G=E(x),v=K(f(x));return _t(G)+v+yt}).join("");return gt+O+St}}function Tt(e,t){return K(e())}function Hn(e,t,n){let r=t!==void 0?t:"root",l=e(),i=K(l);return"<!--xote-root:"+r+"-->"+i+"<!--/xote-root-->"}function vt(e){return"<script"+(e!==void 0?' nonce="'+J(e)+'"':"")+">window.__XOTE_HYDRATED__=false;<\/script>"}function Xn(e,t,n,r,l,i,u){let c=e!==void 0?e:"",f=t!==void 0?t:"",E=n!==void 0?n:[],R=r!==void 0?r:[],O=l!==void 0?l:"",x=Tt(u),G=vt(i),v=R.map(M=>'<link rel="stylesheet" href="'+J(M)+'" />').join(`
|
|
2
|
+
`),z=E.map(M=>{let L=i!==void 0?' nonce="'+J(i)+'"':"";return'<script type="module" src="'+J(M)+'"'+L+"><\/script>"}).join(`
|
|
3
3
|
`);return`<!DOCTYPE html>
|
|
4
4
|
<html>
|
|
5
5
|
<head>
|
|
6
6
|
<meta charset="UTF-8" />
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
|
-
`+
|
|
9
|
-
`+
|
|
8
|
+
`+v+`
|
|
9
|
+
`+c+`
|
|
10
10
|
</head>
|
|
11
|
-
<body`+(
|
|
12
|
-
<div id="root">`+
|
|
13
|
-
`+
|
|
11
|
+
<body`+(f!==""?" "+f:"")+`>
|
|
12
|
+
<div id="root">`+x+`</div>
|
|
13
|
+
`+O+`
|
|
14
14
|
`+G+`
|
|
15
|
+
`+z+`
|
|
15
16
|
</body>
|
|
16
|
-
</html>`}let In;const jn=Object.freeze(Object.defineProperty({__proto__:null,Attributes:Mn,Component:In,Html:Pn,Markers:Rn,generateHydrationScript:Et,renderDocument:Ln,renderNodeToString:K,renderToString:yt,renderToStringWithRoot:Fn},Symbol.toStringTag,{value:"Module"}));function Nn(e,t){let n=e.length,r=new Array(n),l=0;for(let i=0;i<n;++i){let o=e[i],c=t(o);c!==void 0&&(r[l]=w(c),l=l+1|0)}return r.length=l,r}function Gn(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 bt(e){return Nn(e.split("/"),t=>{if(t!=="")return t.startsWith(":")?{TAG:"Param",_0:t.slice(1)}:{TAG:"Static",_0:t}})}function wt(e,t){let n=t.split("/").filter(i=>i!=="");if(e.length!==n.length)return"NoMatch";let r={};return e.every((i,o)=>{let c=n[o];return i.TAG==="Static"?c===i._0:(r[i._0]=c,!0)})?{TAG:"Match",_0:r}:"NoMatch"}function Ne(e,t){return wt(bt(e),t)}const zn=Object.freeze(Object.defineProperty({__proto__:null,match:Ne,matchPath:wt,parsePattern:bt},Symbol.toStringTag,{value:"Module"}));function kt(e,t){delete e[t]}function Z(e,t){return e!==void 0?w(e):t}function ne(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 de={setAttrOrProp:ne},_e={contents:void 0};function Bn(){return{disposers:[],computeds:[]}}function re(e,t){let n=_e.contents;_e.contents=e;let r=t();return _e.contents=n,r}function le(e,t){e.disposers.push(t)}function vt(e){e.disposers.forEach(t=>t.dispose()),e.computeds.forEach(t=>$.dispose(t))}function ie(e,t){e.__xote_owner__=t}function Tt(e){return Ie(e.__xote_owner__)}let f={currentOwner:_e,createOwner:Bn,runWithOwner:re,addDisposer:le,disposeOwner:vt,setOwner:ie,getOwner:Tt};function xt(e,t){return[e,{TAG:"Static",_0:t}]}function Ct(e,t){return[e,{TAG:"SignalValue",_0:t}]}function At(e,t){return[e,{TAG:"Compute",_0:t}]}let Wn={$$static:xt,signal:Ct,computed:At};function se(e){let t=Tt(e);t!==void 0&&vt(t),Array.from(e.childNodes||[]).forEach(se)}function H(e){switch(e.TAG){case"Element":let t=e.children,n=e.events,r=e.attrs,l=document.createElement(e.tag),i={disposers:[],computeds:[]};return ie(l,i),re(i,()=>{r.forEach(s=>{let g=s[1],_=s[0];switch(g.TAG){case"Static":return ne(l,_,g._0);case"SignalValue":let D=g._0;ne(l,_,d.peek(D));let O=v.run(()=>{ne(l,_,d.get(D))},void 0);return le(i,O);case"Compute":let B=g._0;ne(l,_,B());let h=v.run(()=>{ne(l,_,B())},void 0);return le(i,h)}}),n.forEach(s=>{l.addEventListener(s[0],s[1])}),t.forEach(s=>{let g=H(s);l.appendChild(g)})}),l;case"Text":return document.createTextNode(e._0);case"SignalText":let o=e._0,c=document.createTextNode(d.peek(o)),m={disposers:[],computeds:[]};return ie(c,m),re(m,()=>{let s=v.run(()=>{c.textContent=d.get(o)},void 0);le(m,s)}),c;case"Fragment":let E=document.createDocumentFragment();return e._0.forEach(s=>{let g=H(s);E.appendChild(g)}),E;case"SignalFragment":let N=e._0,A={disposers:[],computeds:[]},T=document.createElement("div");return T.setAttribute("style","display: contents"),ie(T,A),re(A,()=>{let s=v.run(()=>{let g=d.get(N);Array.from(T.childNodes||[]).forEach(se),T.innerHTML="",g.forEach(D=>{let O=H(D);T.appendChild(O)})},void 0);le(A,s)}),T;case"LazyComponent":let G={disposers:[],computeds:[]},k=re(G,e._0),M=H(k);return ie(M,G),M;case"KeyedList":let z=e.renderItem,W=e.keyFn,F=e.signal,j={disposers:[],computeds:[]},ae=document.createComment(" keyed-list-start "),p=document.createComment(" keyed-list-end ");ie(ae,j);let a={},y=()=>{let s=p.parentNode;if(s==null)return;let g=d.get(F),_={};g.forEach(u=>{_[W(u)]=u});let D=[];Object.keys(a).forEach(u=>{if(_[u]===void 0){D.push(u);return}}),D.forEach(u=>{let S=a[u];if(S!==void 0){se(S.element),S.element.remove(),kt(a,u);return}});let O=[],B={};g.forEach(u=>{let S=W(u),te=a[S];if(te!==void 0){if(te.item!==u){B[S]=!0;let De=z(u),ge=H(De),Ve={key:S,item:u,element:ge};O.push(Ve),a[S]=Ve;return}O.push(te);return}let Ae=z(u),me=H(Ae),he={key:S,item:u,element:me};O.push(he),a[S]=he});let h={contents:ae.nextSibling};O.forEach(u=>{let S=h.contents;if(S==null){s.insertBefore(u.element,p);return}if(S===p){s.insertBefore(u.element,p);return}if(S===u.element){h.contents=S.nextSibling;return}Z(B[u.key],!1)?(se(S),s.replaceChild(u.element,S),h.contents=u.element.nextSibling):(s.insertBefore(u.element,S),h.contents=u.element.nextSibling)})},b=document.createDocumentFragment();return b.appendChild(ae),d.peek(F).forEach(s=>{let g=W(s),_=z(s),D=H(_),O={key:g,item:s,element:D};a[g]=O,b.appendChild(D)}),b.appendChild(p),re(j,()=>{let s=v.run(()=>{y()},void 0);le(j,s)}),b}}let Y={disposeElement:se,render:H};function Hn(e){return{TAG:"Text",_0:e}}function Vn(e){return{TAG:"SignalText",_0:$.make(e,void 0)}}function Xn(e){return{TAG:"SignalText",_0:$.make(e,void 0)}}function Kn(e){return{TAG:"SignalText",_0:$.make(()=>e().toString(),void 0)}}function Yn(e){return{TAG:"SignalText",_0:$.make(()=>e().toString(),void 0)}}function qn(e){return{TAG:"Text",_0:e.toString()}}function Un(e){return{TAG:"Text",_0:e.toString()}}function Qn(e){return{TAG:"Fragment",_0:e}}function Ge(e){return{TAG:"SignalFragment",_0:e}}function Jn(e,t){return{TAG:"SignalFragment",_0:$.make(()=>d.get(e).map(t),void 0)}}function Zn(e,t,n){return{TAG:"KeyedList",signal:e,keyFn:t,renderItem:n}}function I(e,t,n,r,l){let i=t!==void 0?t:[].map(m=>m),o=n!==void 0?n:[].map(m=>m),c=r!==void 0?r:[].map(m=>m);return{TAG:"Element",tag:e,attrs:i,events:o,children:c}}function er(e,t,n,r){return I("div",e,t,n)}function tr(e,t,n,r){return I("span",e,t,n)}function nr(e,t,n,r){return I("button",e,t,n)}function rr(e,t,n){return I("input",e,t,void 0)}function lr(e,t,n,r){return I("h1",e,t,n)}function ir(e,t,n,r){return I("h2",e,t,n)}function ur(e,t,n,r){return I("h3",e,t,n)}function or(e,t,n,r){return I("p",e,t,n)}function ar(e,t,n,r){return I("ul",e,t,n)}function sr(e,t,n,r){return I("li",e,t,n)}function ze(e,t,n,r){return I("a",e,t,n)}function dr(){return{TAG:"Text",_0:""}}function Dt(e,t){let n=H(e);t.appendChild(n)}function cr(e,t){let n=document.getElementById(t);if(n==null){console.error("Container element not found: "+t);return}else return Dt(e,n)}let ce=xt,Pe=Ct,$t=At;const fr=Object.freeze(Object.defineProperty({__proto__:null,$$null:dr,Attributes:Wn,DOM:de,Reactivity:f,Render:Y,a:ze,attr:ce,button:nr,computedAttr:$t,div:er,element:I,float:Un,fragment:Qn,h1:lr,h2:ir,h3:ur,input:rr,int:qn,keyedList:Zn,li:sr,list:Jn,mount:Dt,mountById:cr,p:or,reactiveFloat:Yn,reactiveInt:Kn,reactiveString:Xn,signalAttr:Pe,signalFragment:Ge,span:tr,text:Hn,textSignal:Vn,ul:ar},Symbol.toStringTag,{value:"Module"}));function pr(){return Symbol.for("xote.router.state")}function L(){let e=globalThis[Symbol.for("xote.router.state")];if(e!==void 0)return e;let t={location:d.make({pathname:"/",search:"",hash:""},void 0,void 0),basePath:{contents:"/"},initialized:!1,popStateHandler:void 0};return globalThis[Symbol.for("xote.router.state")]=t,t}function mr(){return L().location}function hr(){return L().basePath}function ee(e){if(!L().initialized)return console.warn("[Xote Router] "+e+" called before Router.init(). Make sure to call Router.init() at your app entry point. This may cause incorrect routing behavior.")}function Ot(e){if(e===""||e==="/")return"/";let t=e.startsWith("/")?e:"/"+e;return t.endsWith("/")?t.slice(0,t.length-1|0):t}function Pt(e){let t=L().basePath.contents;return t==="/"?e:e===t?"/":e.startsWith(t+"/")?e.slice(t.length):e}function fe(e){let t=L().basePath.contents;return t==="/"?e:e==="/"?t:t+e}function Rt(){let e=window.scrollX||window.pageXOffset||0,t=window.scrollY||window.pageYOffset||0;return[e,t]}function Te(e,t){window.scrollTo(e,t)}function Mt(e,t){return{scrollX:e,scrollY:t}}function Be(){return{}}function Ft(e){let t=e&&e.scrollX,n=e&&e.scrollY;if(t!=null&&n!=null)return[t,n]}function Lt(){let e=Rt(),t=Mt(e[0],e[1]),n=window.location.href;window.history.replaceState(t,"",n)}function Re(){let e=window.location.pathname;return{pathname:Pt(e),search:window.location.search,hash:window.location.hash}}function gr(e,t){let n=e!==void 0?e:"/",r=L(),l=Ot(n);if(r.basePath.contents=l,d.set(r.location,Re()),r.initialized)return;let i=o=>{d.set(L().location,Re());let c=window["history.state"];if(c==null)return;let m=Ft(c);if(m!==void 0)return Te(m[0],m[1])};r.popStateHandler=i,window.addEventListener("popstate",i),r.initialized=!0}function We(e,t,n,r){let l=t!==void 0?t:"",i=n!==void 0?n:"";ee("Router.push()"),Lt();let o={pathname:e,search:l,hash:i},m=fe(e)+l+i;window.history.pushState(Be(),"",m),d.set(L().location,o),Te(0,0)}function Sr(e,t,n,r){let l=t!==void 0?t:"",i=n!==void 0?n:"";ee("Router.replace()");let o={pathname:e,search:l,hash:i},m=fe(e)+l+i;window.history.replaceState(Be(),"",m),d.set(L().location,o),Te(0,0)}function _r(e,t){return ee("Router.route()"),Ge($.make(()=>{let n=d.get(L().location),r=Ne(e,n.pathname);return typeof r!="object"?[]:[t(r._0)]},void 0))}function yr(e){return ee("Router.routes()"),Ge($.make(()=>{let t=d.get(L().location),n=Gn(e,r=>{let l=Ne(r.pattern,t.pathname);if(typeof l=="object")return r.render(l._0)});return n!==void 0?[n]:[]},void 0))}function Er(e,t,n,r){let l=t!==void 0?t:[],i=n!==void 0?n:[];ee("Router.link()");let o=c=>{c.preventDefault(),We(e,void 0,void 0)};return ze(l.concat([ce("href",fe(e))]),[["click",o]],i)}function It(e){return e&&typeof e=="object"&&"TAG"in e&&(e.TAG==="Static"||e.TAG==="Reactive")}function ue(e,t){return It(t)?t.TAG==="Reactive"?Pe(e,t._0):ce(e,t._0):typeof t=="function"?$t(e,t):typeof t=="object"?Pe(e,t):ce(e,t)}function jt(e){let t=[],n=e.class;n!==void 0&&t.push(ue("class",w(n)));let r=e.id;r!==void 0&&t.push(ue("id",w(r)));let l=e.style;l!==void 0&&t.push(ue("style",w(l)));let i=e.target;i!==void 0&&t.push(ue("target",w(i)));let o=e["aria-label"];return o!==void 0&&t.push(ue("aria-label",w(o))),t}function Nt(e){let t=e.children;return t!==void 0?t.TAG==="Fragment"?t._0:[t]:[]}function ye(e){ee("Router.Link");let t=n=>{n.preventDefault(),We(e.to,void 0,void 0);let r=e.onClick;if(r!==void 0)return r(n)};return ze(jt(e).concat([ce("href",fe(e.to))]),[["click",t]],Nt(e))}function Ue(e,t,n){return ye(e)}let br={ReactiveProp:void 0,isReactiveProp:It,convertAttrValue:ue,propsToAttrs:jt,getChildren:Nt,make:ye,jsx:ye,jsxs:ye,jsxKeyed:Ue,jsxsKeyed:Ue},wr,kr;const vr=Object.freeze(Object.defineProperty({__proto__:null,Component:wr,Link:br,Route:kr,addBasePath:fe,basePath:hr,emptyHistoryState:Be,getCurrentLocation:Re,getGlobalState:L,getScrollFromState:Ft,getScrollPosition:Rt,getSymbolKey:pr,init:gr,link:Er,location:mr,makeHistoryState:Mt,normalizeBasePath:Ot,push:We,replace:Sr,route:_r,routes:yr,saveScrollPosition:Lt,scrollTo:Te,stripBasePath:Pt,warnIfNotInitialized:ee},Symbol.toStringTag,{value:"Module"}));let Oe={};function Tr(e){let t=Oe[e];if(t!==void 0){let n=t+1|0;return Oe[e]=n,e+("/"+n)}return Oe[e]=1,e}function xr(e){return Array.from(e.childNodes||[])}function pe(e,t){if(e.nodeType!==8)return!1;let n=e.nodeValue;return n==null?!1:n===t}function xe(e,t){if(e.nodeType!==8)return!1;let n=e.nodeValue;return n==null?!1:n.startsWith(t)}function He(e){if(e.nodeType!==8)return;let t=e.nodeValue;if(t!=null&&t.startsWith("k:"))return t.slice(2)}function oe(e){return{current:Ie(e.firstChild),parent:e}}function Cr(e){return e.current}function P(e){let t=e.current;return t!==void 0&&(e.current=Ie(w(t).nextSibling)),t}function V(e,t){return(()=>{for(;;){let r=e.current;if(r===void 0)return;let l=w(r);if(pe(l,t))return P(e),ve(l);P(e)}})()}function be(e,t){let n=[];return(()=>{for(;;){let l=e.current;if(l===void 0)return;let i=w(l);if(pe(i,t)){P(e);return}n.push(i),P(e)}})(),n}let Ar={elementNode:1,textNode:3,commentNode:8,getChildNodes:xr,isMarker:pe,isMarkerPrefix:xe,extractKey:He,make:oe,peek:Cr,next:P,skipUntilMarker:V,collectUntilMarker:be},Dr=Tr("Xote__Hydration.HydrationMismatch");function Me(e){console.warn("[Xote Hydration] "+e)}function $r(e,t){for(;;){let n=e;switch(n.TAG){case"Element":let r=n.children,l=n.events,i=n.attrs,o=f.createOwner();return f.setOwner(t,o),f.runWithOwner(o,()=>{i.forEach(a=>{let y=a[1],b=a[0];switch(y.TAG){case"Static":return;case"SignalValue":let x=y._0,s=v.run(()=>{de.setAttrOrProp(t,b,d.get(x))},void 0);return f.addDisposer(o,s);case"Compute":let g=y._0,_=v.run(()=>{de.setAttrOrProp(t,b,g())},void 0);return f.addDisposer(o,_)}}),l.forEach(a=>{t.addEventListener(a[0],a[1])});let p=oe(t);r.forEach(a=>Q(a,p))});case"Text":return;case"SignalText":let c=n._0,m=f.createOwner();return f.setOwner(t,m),f.runWithOwner(m,()=>{let p=v.run(()=>{t.textContent=d.get(c)},void 0);f.addDisposer(m,p)});case"Fragment":let E=oe(t);n._0.forEach(p=>Q(p,E));return;case"SignalFragment":let N=n._0,A=f.createOwner();return f.setOwner(t,A),f.runWithOwner(A,()=>{let p=v.run(()=>{let a=d.get(N);Array.from(t.childNodes||[]).forEach(b=>f.disposeOwner(Z(f.getOwner(b),f.createOwner()))),t.innerHTML="",a.forEach(b=>{let x=Y.render(b);t.appendChild(x)})},void 0);f.addDisposer(A,p)});case"LazyComponent":let T=f.createOwner(),G=f.runWithOwner(T,n._0);f.setOwner(t,T),e=G;continue;case"KeyedList":let k=n.renderItem,M=n.keyFn,z=n.signal,W=f.createOwner();f.setOwner(t,W);let F={},j=oe(t);return V(j,"kl"),(()=>{for(;;){let p=j.current;if(p===void 0)return;let a=w(p);if(!xe(a,"k:"))if(pe(a,"/kl")){P(j);return}else return;let y=Z(He(a),"");P(j);let x=be(j,"/k").find(s=>s.nodeType===1);if(x!==void 0){let s=d.peek(z),g=Z(s.find(_=>M(_)===y),{});F[y]={key:y,item:g,element:w(x)}}}})(),f.runWithOwner(W,()=>{let p=document.createComment(" keyed-list-start "),a=document.createComment(" keyed-list-end "),y=t.firstChild;y==null?t.appendChild(p):t.insertBefore(p,y),t.appendChild(a);let b=()=>{let s=d.get(z),g={};s.forEach(h=>{g[M(h)]=h});let _=[];Object.keys(F).forEach(h=>{if(g[h]===void 0){_.push(h);return}}),_.forEach(h=>{let u=F[h];if(u!==void 0){Y.disposeElement(u.element),u.element.remove(),kt(F,h);return}});let D=[],O={};s.forEach(h=>{let u=M(h),S=F[u];if(S!==void 0){if(S.item!==h){O[u]=!0;let he=k(h),De=Y.render(he),ge={key:u,item:h,element:De};D.push(ge),F[u]=ge;return}D.push(S);return}let te=k(h),Ae=Y.render(te),me={key:u,item:h,element:Ae};D.push(me),F[u]=me});let B={contents:p.nextSibling};D.forEach(h=>{let u=B.contents;if(u==null){t.insertBefore(h.element,a);return}if(u===a){t.insertBefore(h.element,a);return}if(u===h.element){B.contents=u.nextSibling;return}Z(O[h.key],!1)?(Y.disposeElement(u),t.replaceChild(h.element,u),B.contents=h.element.nextSibling):(t.insertBefore(h.element,u),B.contents=h.element.nextSibling)})},x=v.run(()=>{b()},void 0);f.addDisposer(W,x)})}}}function Q(e,t){switch(e.TAG){case"Element":let n=e.children,r=e.events,l=e.attrs,i=P(t);if(i===void 0)return Me("Missing DOM element for Element node");let o=w(i),c=f.createOwner();return f.setOwner(o,c),f.runWithOwner(c,()=>{l.forEach(a=>{let y=a[1],b=a[0];switch(y.TAG){case"Static":return;case"SignalValue":let x=y._0,s=v.run(()=>{de.setAttrOrProp(o,b,d.get(x))},void 0);return f.addDisposer(c,s);case"Compute":let g=y._0,_=v.run(()=>{de.setAttrOrProp(o,b,g())},void 0);return f.addDisposer(c,_)}}),r.forEach(a=>{o.addEventListener(a[0],a[1])});let p=oe(o);n.forEach(a=>Q(a,p))});case"Text":P(t);return;case"SignalText":let m=e._0;V(t,"$");let E=P(t);if(E===void 0)return Me("Missing text node for SignalText");let N=w(E),A=f.createOwner();f.setOwner(N,A),f.runWithOwner(A,()=>{let p=v.run(()=>{N.textContent=d.get(m)},void 0);f.addDisposer(A,p)}),V(t,"/$");return;case"Fragment":e._0.forEach(p=>Q(p,t));return;case"SignalFragment":let T=e._0;V(t,"#");let G=be(t,"/#"),k=document.createElement("div");k.setAttribute("style","display: contents"),G.forEach(p=>{k.appendChild(p)});let M=t.current;M!==void 0&&M.parentNode.insertBefore(k,w(M));let z=f.createOwner();return f.setOwner(k,z),f.runWithOwner(z,()=>{let p=v.run(()=>{let a=d.get(T);Array.from(k.childNodes||[]).forEach(Y.disposeElement),k.innerHTML="",a.forEach(b=>{let x=Y.render(b);k.appendChild(x)})},void 0);f.addDisposer(z,p)});case"LazyComponent":V(t,"lc");let W=e._0();Q(W,t),V(t,"/lc");return;case"KeyedList":let F=e.keyFn,j=e.signal;return V(t,"kl"),(()=>{for(;;){let p=t.current;if(p===void 0)return;let a=w(p);if(!xe(a,"k:"))if(pe(a,"/kl")){P(t);return}else return;let y=Z(He(a),"");P(t);let x=be(t,"/k").find(s=>s.nodeType===1);if(x!==void 0){let s=d.peek(j),g=Z(s.find(_=>F(_)===y),{});w(x)}}})()}}function Gt(e,t,n){let r=n!==void 0?n:{},l=e(),i=oe(t),o=i.current;o!==void 0&&xe(w(o),"xote-root:")&&P(i),Q(l,i),window.__XOTE_HYDRATED__=!0;let c=r.onHydrated;if(c!==void 0)return c()}function Or(e,t,n){let r=n!==void 0?n:{},l=document.getElementById(t);if(l==null){console.error("[Xote Hydration] Container element not found: "+t);return}else return Gt(e,l,r)}let Pr,Rr,Mr;const Fr=Object.freeze(Object.defineProperty({__proto__:null,Component:Pr,DOM:Rr,DOMWalker:Ar,HydrationMismatch:Dr,Reactivity:Mr,hydrate:Gt,hydrateById:Or,hydrateNode:$r,hydrateNodeWithWalker:Q,logHydrationWarning:Me},Symbol.toStringTag,{value:"Module"}));let Ce=typeof document>"u",zt=!Ce;function Lr(e){if(Ce)return ve(e())}function Ir(e){if(zt)return ve(e())}function jr(e,t){return Ce?e():t()}const Nr=Object.freeze(Object.defineProperty({__proto__:null,isClient:zt,isServer:Ce,match:jr,onClient:Ir,onServer:Lr},Symbol.toStringTag,{value:"Module"}));function Gr(e){return e.TAG==="Reactive"?d.get(e._0):e._0}function zr(e){return{TAG:"Static",_0:e}}function Br(e){return{TAG:"Reactive",_0:e}}const Wr=Object.freeze(Object.defineProperty({__proto__:null,$$static:zr,get:Gr,reactive:Br},Symbol.toStringTag,{value:"Module"}));let Hr=d.Id,Vr=d.Scheduler,Xr=d.Core,Kr=d.make,Yr=d.makeForComputed,qr=d.get,Ur=d.peek,Qr=d.set,Jr=d.update,Zr=d.batch,el=d.untrack,tl={Id:Hr,Scheduler:Vr,Core:Xr,make:Kr,makeForComputed:Yr,get:qr,peek:Ur,set:Qr,update:Jr,batch:Zr,untrack:el},nl=$.Id,rl=$.Signal,ll=$.Core,il=$.Scheduler,ul=$.make,ol=$.dispose,al={Id:nl,Signal:rl,Core:ll,Scheduler:il,make:ul,dispose:ol},sl=v.Id,dl=v.Core,cl=v.Scheduler,fl=v.run,pl={Id:sl,Core:dl,Scheduler:cl,run:fl},ml=fr,hl=zn,gl=vr,Sl=Wr,_l=jn,yl=Nr,El=Fr;exports.Component=ml;exports.Computed=al;exports.Effect=pl;exports.Hydration=El;exports.ReactiveProp=Sl;exports.Route=hl;exports.Router=gl;exports.SSR=_l;exports.SSRContext=yl;exports.Signal=tl;
|
|
17
|
+
</html>`}let Vn;const Kn=Object.freeze(Object.defineProperty({__proto__:null,Attributes:Wn,Component:Vn,Html:st,Markers:Bn,generateHydrationScript:vt,renderDocument:Xn,renderNodeToString:K,renderToString:Tt,renderToStringWithRoot:Hn},Symbol.toStringTag,{value:"Module"}));function $t(e,t){let n=e.length,r=new Array(n),l=0;for(let i=0;i<n;++i){let u=e[i],c=t(u);c!==void 0&&(r[l]=g(c),l=l+1|0)}return r.length=l,r}function Yn(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 At(e){return $t(e.split("/"),t=>{if(t!=="")return t.startsWith(":")?{TAG:"Param",_0:t.slice(1)}:{TAG:"Static",_0:t}})}function xt(e,t){let n=t.split("/").filter(i=>i!=="");if(e.length!==n.length)return"NoMatch";let r={};return e.every((i,u)=>{let c=n[u];return i.TAG==="Static"?c===i._0:(r[i._0]=c,!0)})?{TAG:"Match",_0:r}:"NoMatch"}function Be(e,t){return xt(At(e),t)}const qn=Object.freeze(Object.defineProperty({__proto__:null,match:Be,matchPath:xt,parsePattern:At},Symbol.toStringTag,{value:"Module"}));function We(e,t){delete e[t]}function Un(e,t){if(e!==void 0)return ee(t(g(e)))}function U(e,t){return e!==void 0?g(e):t}function Jn(e){return e!==void 0}function ie(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 fe={setAttrOrProp:ie},we={contents:void 0};function Qn(){return{disposers:[],computeds:[]}}function ue(e,t){let n=we.contents;we.contents=e;let r=t();return we.contents=n,r}function oe(e,t){e.disposers.push(t)}function Ct(e){e.disposers.forEach(t=>t.dispose()),e.computeds.forEach(t=>P.dispose(t))}function de(e,t){e.__xote_owner__=t}function Ot(e){return Ge(e.__xote_owner__)}let s={currentOwner:we,createOwner:Qn,runWithOwner:ue,addDisposer:oe,disposeOwner:Ct,setOwner:de,getOwner:Ot};function Dt(e,t){return[e,{TAG:"Static",_0:t}]}function Pt(e,t){return[e,{TAG:"SignalValue",_0:t}]}function Rt(e,t){return[e,{TAG:"Compute",_0:t}]}let Zn={$$static:Dt,signal:Pt,computed:Rt};function se(e){let t=Ot(e);t!==void 0&&Ct(t),Array.from(e.childNodes||[]).forEach(se)}function H(e){switch(e.TAG){case"Element":let t=e.children,n=e.events,r=e.attrs,l=document.createElement(e.tag),i={disposers:[],computeds:[]};return de(l,i),ue(i,()=>{r.forEach(a=>{let m=a[1],y=a[0];switch(m.TAG){case"Static":return ie(l,y,m._0);case"SignalValue":let k=m._0;ie(l,y,d.peek(k));let A=T.run(()=>{ie(l,y,d.get(k))},void 0);return oe(i,A);case"Compute":let W=m._0;ie(l,y,W());let p=T.run(()=>{ie(l,y,W())},void 0);return oe(i,p)}}),n.forEach(a=>{l.addEventListener(a[0],a[1])}),t.forEach(a=>{let m=H(a);l.appendChild(m)})}),l;case"Text":return document.createTextNode(e._0);case"SignalText":let u=e._0,c=document.createTextNode(d.peek(u)),f={disposers:[],computeds:[]};return de(c,f),ue(f,()=>{let a=T.run(()=>{c.textContent=d.get(u)},void 0);oe(f,a)}),c;case"Fragment":let E=document.createDocumentFragment();return e._0.forEach(a=>{let m=H(a);E.appendChild(m)}),E;case"SignalFragment":let R=e._0,O={disposers:[],computeds:[]},x=document.createElement("div");return x.setAttribute("style","display: contents"),de(x,O),ue(O,()=>{let a=T.run(()=>{let m=d.get(R);Array.from(x.childNodes||[]).forEach(se),x.innerHTML="",m.forEach(k=>{let A=H(k);x.appendChild(A)})},void 0);oe(O,a)}),x;case"LazyComponent":let G={disposers:[],computeds:[]},v=ue(G,e._0),z=H(v);return de(z,G),z;case"KeyedList":let M=e.renderItem,L=e.keyFn,D=e.signal,B={disposers:[],computeds:[]},re=document.createComment(" keyed-list-start "),w=document.createComment(" keyed-list-end ");de(re,B);let _={},h=()=>{let a=w.parentNode;if(a==null)return;let m=d.get(D),y={};m.forEach(o=>{y[L(o)]=o});let k=[];Object.keys(_).forEach(o=>{if(y[o]===void 0){k.push(o);return}}),k.forEach(o=>{let b=_[o];if(b!==void 0){se(b.element),b.element.remove(),We(_,o);return}});let A=[],W={};m.forEach(o=>{let b=L(o),le=_[b];if(le!==void 0){if(le.item!==o){W[b]=!0;let Pe=M(o),be=H(Pe),qe={key:b,item:o,element:be};A.push(qe),_[b]=qe;return}A.push(le);return}let De=M(o),_e=H(De),ye={key:b,item:o,element:_e};A.push(ye),_[b]=ye});let p={contents:re.nextSibling};A.forEach(o=>{let b=p.contents;if(b==null){a.insertBefore(o.element,w);return}if(b===w){a.insertBefore(o.element,w);return}if(b===o.element){p.contents=b.nextSibling;return}U(W[o.key],!1)?(se(b),a.replaceChild(o.element,b),p.contents=o.element.nextSibling):(a.insertBefore(o.element,b),p.contents=o.element.nextSibling)})},S=document.createDocumentFragment();return S.appendChild(re),d.peek(D).forEach(a=>{let m=L(a),y=M(a),k=H(y),A={key:m,item:a,element:k};_[m]=A,S.appendChild(k)}),S.appendChild(w),ue(B,()=>{let a=T.run(()=>{h()},void 0);oe(B,a)}),S}}let Y={disposeElement:se,render:H};function er(e){return{TAG:"Text",_0:e}}function tr(e){return{TAG:"SignalText",_0:P.make(e,void 0)}}function nr(e){return{TAG:"SignalText",_0:P.make(e,void 0)}}function rr(e){return{TAG:"SignalText",_0:P.make(()=>e().toString(),void 0)}}function lr(e){return{TAG:"SignalText",_0:P.make(()=>e().toString(),void 0)}}function ir(e){return{TAG:"Text",_0:e.toString()}}function ur(e){return{TAG:"Text",_0:e.toString()}}function or(e){return{TAG:"Fragment",_0:e}}function He(e){return{TAG:"SignalFragment",_0:e}}function dr(e,t){return{TAG:"SignalFragment",_0:P.make(()=>d.get(e).map(t),void 0)}}function cr(e,t,n){return{TAG:"KeyedList",signal:e,keyFn:t,renderItem:n}}function N(e,t,n,r,l){let i=t!==void 0?t:[].map(f=>f),u=n!==void 0?n:[].map(f=>f),c=r!==void 0?r:[].map(f=>f);return{TAG:"Element",tag:e,attrs:i,events:u,children:c}}function ar(e,t,n,r){return N("div",e,t,n)}function sr(e,t,n,r){return N("span",e,t,n)}function fr(e,t,n,r){return N("button",e,t,n)}function pr(e,t,n){return N("input",e,t,void 0)}function mr(e,t,n,r){return N("h1",e,t,n)}function hr(e,t,n,r){return N("h2",e,t,n)}function gr(e,t,n,r){return N("h3",e,t,n)}function Sr(e,t,n,r){return N("p",e,t,n)}function _r(e,t,n,r){return N("ul",e,t,n)}function yr(e,t,n,r){return N("li",e,t,n)}function Xe(e,t,n,r){return N("a",e,t,n)}function br(){return{TAG:"Text",_0:""}}function Mt(e,t){let n=H(e);t.appendChild(n)}function Er(e,t){let n=document.getElementById(t);if(n==null){console.error("Container element not found: "+t);return}else return Mt(e,n)}let pe=Dt,je=Pt,jt=Rt;const wr=Object.freeze(Object.defineProperty({__proto__:null,$$null:br,Attributes:Zn,DOM:fe,Reactivity:s,Render:Y,a:Xe,attr:pe,button:fr,computedAttr:jt,div:ar,element:N,float:ur,fragment:or,h1:mr,h2:hr,h3:gr,input:pr,int:ir,keyedList:cr,li:yr,list:dr,mount:Mt,mountById:Er,p:Sr,reactiveFloat:lr,reactiveInt:rr,reactiveString:nr,signalAttr:je,signalFragment:He,span:sr,text:er,textSignal:tr,ul:_r},Symbol.toStringTag,{value:"Module"}));function kr(){return Symbol.for("xote.router.state")}function I(){let e=globalThis[Symbol.for("xote.router.state")];if(e!==void 0)return e;let t={location:d.make({pathname:"/",search:"",hash:""},void 0,void 0),basePath:{contents:"/"},initialized:!1,popStateHandler:void 0};return globalThis[Symbol.for("xote.router.state")]=t,t}function Tr(){return I().location}function vr(){return I().basePath}function te(e){if(!I().initialized)return console.warn("[Xote Router] "+e+" called before Router.init(). Make sure to call Router.init() at your app entry point. This may cause incorrect routing behavior.")}function Ft(e){if(e===""||e==="/")return"/";let t=e.startsWith("/")?e:"/"+e;return t.endsWith("/")?t.slice(0,t.length-1|0):t}function Lt(e){let t=I().basePath.contents;return t==="/"?e:e===t?"/":e.startsWith(t+"/")?e.slice(t.length):e}function he(e){let t=I().basePath.contents;return t==="/"?e:e==="/"?t:t+e}function It(){let e=window.scrollX||window.pageXOffset||0,t=window.scrollY||window.pageYOffset||0;return[e,t]}function xe(e,t){window.scrollTo(e,t)}function Nt(e,t){return{scrollX:e,scrollY:t}}function Ve(){return{}}function Gt(e){let t=e&&e.scrollX,n=e&&e.scrollY;if(t!=null&&n!=null)return[t,n]}function zt(){let e=It(),t=Nt(e[0],e[1]),n=window.location.href;window.history.replaceState(t,"",n)}function Fe(){let e=window.location.pathname;return{pathname:Lt(e),search:window.location.search,hash:window.location.hash}}function $r(e,t){let n=e!==void 0?e:"/",r=I(),l=Ft(n);if(r.basePath.contents=l,d.set(r.location,Fe()),r.initialized)return;let i=u=>{d.set(I().location,Fe());let c=window["history.state"];if(c==null)return;let f=Gt(c);if(f!==void 0)return xe(f[0],f[1])};r.popStateHandler=i,window.addEventListener("popstate",i),r.initialized=!0}function Ke(e,t,n,r){let l=t!==void 0?t:"",i=n!==void 0?n:"";te("Router.push()"),zt();let u={pathname:e,search:l,hash:i},f=he(e)+l+i;window.history.pushState(Ve(),"",f),d.set(I().location,u),xe(0,0)}function Ar(e,t,n,r){let l=t!==void 0?t:"",i=n!==void 0?n:"";te("Router.replace()");let u={pathname:e,search:l,hash:i},f=he(e)+l+i;window.history.replaceState(Ve(),"",f),d.set(I().location,u),xe(0,0)}function xr(e,t){return te("Router.route()"),He(P.make(()=>{let n=d.get(I().location),r=Be(e,n.pathname);return typeof r!="object"?[]:[t(r._0)]},void 0))}function Cr(e){return te("Router.routes()"),He(P.make(()=>{let t=d.get(I().location),n=Yn(e,r=>{let l=Be(r.pattern,t.pathname);if(typeof l=="object")return r.render(l._0)});return n!==void 0?[n]:[]},void 0))}function Or(e,t,n,r){let l=t!==void 0?t:[],i=n!==void 0?n:[];te("Router.link()");let u=c=>{c.preventDefault(),Ke(e,void 0,void 0)};return Xe(l.concat([pe("href",he(e))]),[["click",u]],i)}function Bt(e){return e&&typeof e=="object"&&"TAG"in e&&(e.TAG==="Static"||e.TAG==="Reactive")}function ce(e,t){return Bt(t)?t.TAG==="Reactive"?je(e,t._0):pe(e,t._0):typeof t=="function"?jt(e,t):typeof t=="object"?je(e,t):pe(e,t)}function Wt(e){let t=[],n=e.class;n!==void 0&&t.push(ce("class",g(n)));let r=e.id;r!==void 0&&t.push(ce("id",g(r)));let l=e.style;l!==void 0&&t.push(ce("style",g(l)));let i=e.target;i!==void 0&&t.push(ce("target",g(i)));let u=e["aria-label"];return u!==void 0&&t.push(ce("aria-label",g(u))),t}function Ht(e){let t=e.children;return t!==void 0?t.TAG==="Fragment"?t._0:[t]:[]}function ke(e){te("Router.Link");let t=n=>{n.preventDefault(),Ke(e.to,void 0,void 0);let r=e.onClick;if(r!==void 0)return r(n)};return Xe(Wt(e).concat([pe("href",he(e.to))]),[["click",t]],Ht(e))}function et(e,t,n){return ke(e)}let Dr={ReactiveProp:void 0,isReactiveProp:Bt,convertAttrValue:ce,propsToAttrs:Wt,getChildren:Ht,make:ke,jsx:ke,jsxs:ke,jsxKeyed:et,jsxsKeyed:et},Pr,Rr;const Mr=Object.freeze(Object.defineProperty({__proto__:null,Component:Pr,Link:Dr,Route:Rr,addBasePath:he,basePath:vr,emptyHistoryState:Ve,getCurrentLocation:Fe,getGlobalState:I,getScrollFromState:Gt,getScrollPosition:It,getSymbolKey:kr,init:$r,link:Or,location:Tr,makeHistoryState:Nt,normalizeBasePath:Ft,push:Ke,replace:Ar,route:xr,routes:Cr,saveScrollPosition:zt,scrollTo:xe,stripBasePath:Lt,warnIfNotInitialized:te},Symbol.toStringTag,{value:"Module"}));function jr(e){if(typeof e=="boolean")return e}function Fr(e){if(e===null)return null}function Lr(e){if(typeof e=="string")return e}function Ir(e){if(typeof e=="number")return e}function Nr(e){if(typeof e=="object"&&!Array.isArray(e)&&e!==null)return e}function Gr(e){if(Array.isArray(e))return e}let ne={bool:jr,$$null:Fr,string:Lr,float:Ir,object:Nr,array:Gr},ge=typeof document>"u",Ce=!ge;function zr(e){if(ge)return ee(e())}function Br(e){if(Ce)return ee(e())}function Xt(e,t){return ge?e():t()}const Wr=Object.freeze(Object.defineProperty({__proto__:null,isClient:Ce,isServer:ge,match:Xt,onClient:Br,onServer:zr},Symbol.toStringTag,{value:"Module"}));function Hr(e){return e}function Xr(e){let t=ne.float(e);if(t!==void 0)return t|0}let Vr={encode:Hr,decode:Xr};function Kr(e){return e}function Yr(e){return ne.float(e)}let qr={encode:Kr,decode:Yr};function Ur(e){return e}function Jr(e){return ne.string(e)}let Qr={encode:Ur,decode:Jr};function Zr(e){return e}function el(e){return ne.bool(e)}let tl={encode:Zr,decode:el};function nl(e){return{encode:t=>t.map(e.encode),decode:t=>{let n=ne.array(t);if(n===void 0)return;let r=$t(n,e.decode);if(r.length===n.length)return r}}}function rl(e){return{encode:t=>t!==void 0?e.encode(g(t)):null,decode:t=>Jn(ne.$$null(t))?ee(void 0):Un(e.decode(t),n=>ee(n))}}function ll(e,t){return{encode:n=>[e.encode(n[0]),t.encode(n[1])],decode:n=>{let r=Array.isArray(n)?n:void 0;if(r===void 0||r.length!==2)return;let l=r[0],i=r[1],u=e.decode(l),c=t.decode(i);if(u!==void 0&&c!==void 0)return[g(u),g(c)]}}}function il(e,t,n){return{encode:r=>[e.encode(r[0]),t.encode(r[1]),n.encode(r[2])],decode:r=>{let l=Array.isArray(r)?r:void 0;if(l===void 0||l.length!==3)return;let i=l[0],u=l[1],c=l[2],f=e.decode(i),E=t.decode(u),R=n.decode(c);if(f!==void 0&&E!==void 0&&R!==void 0)return[g(f),g(E),g(R)]}}}function ul(e){return{encode:t=>{let n={};return Object.entries(t).forEach(r=>{n[r[0]]=e.encode(r[1])}),n},decode:t=>{let n=ne.object(t);if(n===void 0)return;let r={},l={contents:!0};if(Object.entries(n).forEach(i=>{let u=e.decode(i[1]);u!==void 0?r[i[0]]=g(u):l.contents=!1}),l.contents)return r}}}function ol(e,t){return{encode:e,decode:t}}let dl={int:Vr,float:qr,string:Qr,bool:tl,array:nl,option:rl,tuple2:ll,tuple3:il,dict:ul,make:ol},me={};function Vt(e,t,n){if(ge){me[e]=n.encode(d.peek(t));return}}function cl(){Object.keys(me).forEach(e=>{We(me,e)})}function Kt(e){return e.replaceAll("<\/script>","<\\/script>").replaceAll("<!--","<\\!--")}function al(e){let t=U(JSON.stringify(me),"{}"),n=Kt(t);return"<script"+(e!==void 0?' nonce="'+st.escape(e)+'"':"")+">window.__XOTE_STATE__="+n+";<\/script>"}function Yt(){return Ce?window.__XOTE_STATE__||{}:{}}function qt(e,t,n){if(!Ce)return;let l=Yt()[e];if(l===void 0)return;let i=n.decode(l);if(i!==void 0)return d.set(t,g(i))}function Ut(e,t,n){Xt(()=>Vt(e,t,n),()=>qt(e,t,n))}function sl(e,t,n){let r=d.make(t,void 0,void 0);return Ut(e,r,n),r}const fl=Object.freeze(Object.defineProperty({__proto__:null,Codec:dl,clear:cl,escapeForScript:Kt,generateScript:al,getClientState:Yt,make:sl,register:Vt,registry:me,restore:qt,sync:Ut},Symbol.toStringTag,{value:"Module"}));let Me={};function pl(e){let t=Me[e];if(t!==void 0){let n=t+1|0;return Me[e]=n,e+("/"+n)}return Me[e]=1,e}function ml(e){return Array.from(e.childNodes||[])}function Se(e,t){if(e.nodeType!==8)return!1;let n=e.nodeValue;return n==null?!1:n===t}function Oe(e,t){if(e.nodeType!==8)return!1;let n=e.nodeValue;return n==null?!1:n.startsWith(t)}function Ye(e){if(e.nodeType!==8)return;let t=e.nodeValue;if(t!=null&&t.startsWith("k:"))return t.slice(2)}function ae(e){return{current:Ge(e.firstChild),parent:e}}function hl(e){return e.current}function j(e){let t=e.current;return t!==void 0&&(e.current=Ge(g(t).nextSibling)),t}function X(e,t){return(()=>{for(;;){let r=e.current;if(r===void 0)return;let l=g(r);if(Se(l,t))return j(e),ee(l);j(e)}})()}function ve(e,t){let n=[];return(()=>{for(;;){let l=e.current;if(l===void 0)return;let i=g(l);if(Se(i,t)){j(e);return}n.push(i),j(e)}})(),n}let gl={elementNode:1,textNode:3,commentNode:8,getChildNodes:ml,isMarker:Se,isMarkerPrefix:Oe,extractKey:Ye,make:ae,peek:hl,next:j,skipUntilMarker:X,collectUntilMarker:ve},Sl=pl("Xote__Hydration.HydrationMismatch");function Le(e){console.warn("[Xote Hydration] "+e)}function _l(e,t){for(;;){let n=e;switch(n.TAG){case"Element":let r=n.children,l=n.events,i=n.attrs,u=s.createOwner();return s.setOwner(t,u),s.runWithOwner(u,()=>{i.forEach(_=>{let h=_[1],S=_[0];switch(h.TAG){case"Static":return;case"SignalValue":let $=h._0,a=T.run(()=>{fe.setAttrOrProp(t,S,d.get($))},void 0);return s.addDisposer(u,a);case"Compute":let m=h._0,y=T.run(()=>{fe.setAttrOrProp(t,S,m())},void 0);return s.addDisposer(u,y)}}),l.forEach(_=>{t.addEventListener(_[0],_[1])});let w=ae(t);r.forEach(_=>Q(_,w))});case"Text":return;case"SignalText":let c=n._0,f=s.createOwner();return s.setOwner(t,f),s.runWithOwner(f,()=>{let w=T.run(()=>{t.textContent=d.get(c)},void 0);s.addDisposer(f,w)});case"Fragment":let E=ae(t);n._0.forEach(w=>Q(w,E));return;case"SignalFragment":let R=n._0,O=s.createOwner();return s.setOwner(t,O),s.runWithOwner(O,()=>{let w=T.run(()=>{let _=d.get(R);Array.from(t.childNodes||[]).forEach(S=>s.disposeOwner(U(s.getOwner(S),s.createOwner()))),t.innerHTML="",_.forEach(S=>{let $=Y.render(S);t.appendChild($)})},void 0);s.addDisposer(O,w)});case"LazyComponent":let x=s.createOwner(),G=s.runWithOwner(x,n._0);s.setOwner(t,x),e=G;continue;case"KeyedList":let v=n.renderItem,z=n.keyFn,M=n.signal,L=s.createOwner();s.setOwner(t,L);let D={},B=ae(t);return X(B,"kl"),(()=>{for(;;){let w=B.current;if(w===void 0)return;let _=g(w);if(!Oe(_,"k:"))if(Se(_,"/kl")){j(B);return}else return;let h=U(Ye(_),"");j(B);let $=ve(B,"/k").find(a=>a.nodeType===1);if($!==void 0){let a=d.peek(M),m=U(a.find(y=>z(y)===h),{});D[h]={key:h,item:m,element:g($)}}}})(),s.runWithOwner(L,()=>{let w=document.createComment(" keyed-list-start "),_=document.createComment(" keyed-list-end "),h=t.firstChild;h==null?t.appendChild(w):t.insertBefore(w,h),t.appendChild(_);let S=()=>{let a=d.get(M),m={};a.forEach(p=>{m[z(p)]=p});let y=[];Object.keys(D).forEach(p=>{if(m[p]===void 0){y.push(p);return}}),y.forEach(p=>{let o=D[p];if(o!==void 0){Y.disposeElement(o.element),o.element.remove(),We(D,p);return}});let k=[],A={};a.forEach(p=>{let o=z(p),b=D[o];if(b!==void 0){if(b.item!==p){A[o]=!0;let ye=v(p),Pe=Y.render(ye),be={key:o,item:p,element:Pe};k.push(be),D[o]=be;return}k.push(b);return}let le=v(p),De=Y.render(le),_e={key:o,item:p,element:De};k.push(_e),D[o]=_e});let W={contents:w.nextSibling};k.forEach(p=>{let o=W.contents;if(o==null){t.insertBefore(p.element,_);return}if(o===_){t.insertBefore(p.element,_);return}if(o===p.element){W.contents=o.nextSibling;return}U(A[p.key],!1)?(Y.disposeElement(o),t.replaceChild(p.element,o),W.contents=p.element.nextSibling):(t.insertBefore(p.element,o),W.contents=p.element.nextSibling)})},$=T.run(()=>{S()},void 0);s.addDisposer(L,$)})}}}function Q(e,t){switch(e.TAG){case"Element":let n=e.children,r=e.events,l=e.attrs,i=j(t);if(i===void 0)return Le("Missing DOM element for Element node");let u=g(i),c=s.createOwner();return s.setOwner(u,c),s.runWithOwner(c,()=>{l.forEach(S=>{let $=S[1],a=S[0];switch($.TAG){case"Static":return;case"SignalValue":let m=$._0,y=T.run(()=>{fe.setAttrOrProp(u,a,d.get(m))},void 0);return s.addDisposer(c,y);case"Compute":let k=$._0,A=T.run(()=>{fe.setAttrOrProp(u,a,k())},void 0);return s.addDisposer(c,A)}}),r.forEach(S=>{u.addEventListener(S[0],S[1])});let h=ae(u);n.forEach(S=>Q(S,h))});case"Text":j(t);return;case"SignalText":let f=e._0;X(t,"$");let E=j(t);if(E===void 0)return Le("Missing text node for SignalText");let R=g(E),O=s.createOwner();s.setOwner(R,O),s.runWithOwner(O,()=>{let h=T.run(()=>{R.textContent=d.get(f)},void 0);s.addDisposer(O,h)}),X(t,"/$");return;case"Fragment":e._0.forEach(h=>Q(h,t));return;case"SignalFragment":let x=e._0;X(t,"#");let G=ve(t,"/#"),v=document.createElement("div");v.setAttribute("style","display: contents");let z=G[0],M=z!==void 0?z.parentNode:void 0;G.forEach(h=>{v.appendChild(h)});let L=t.current;if(M!==void 0){let h=g(M);L!==void 0?h.insertBefore(v,g(L)):h.appendChild(v)}let D=s.createOwner();return s.setOwner(v,D),s.runWithOwner(D,()=>{let h=T.run(()=>{let S=d.get(x);Array.from(v.childNodes||[]).forEach(Y.disposeElement),v.innerHTML="",S.forEach(a=>{let m=Y.render(a);v.appendChild(m)})},void 0);s.addDisposer(D,h)});case"LazyComponent":X(t,"lc");let B=e._0();Q(B,t),X(t,"/lc");return;case"KeyedList":let re=e.keyFn,w=e.signal;return X(t,"kl"),(()=>{for(;;){let h=t.current;if(h===void 0)return;let S=g(h);if(!Oe(S,"k:"))if(Se(S,"/kl")){j(t);return}else return;let $=U(Ye(S),"");j(t);let m=ve(t,"/k").find(y=>y.nodeType===1);if(m!==void 0){let y=d.peek(w),k=U(y.find(A=>re(A)===$),{});g(m)}}})()}}function Jt(e,t,n){let r=n!==void 0?n:{},l=e(),i=ae(t),u=i.current;u!==void 0&&Oe(g(u),"xote-root:")&&j(i),Q(l,i),window.__XOTE_HYDRATED__=!0;let c=r.onHydrated;if(c!==void 0)return c()}function yl(e,t,n){let r=n!==void 0?n:{},l=document.getElementById(t);if(l==null){console.error("[Xote Hydration] Container element not found: "+t);return}else return Jt(e,l,r)}let bl,El,wl;const kl=Object.freeze(Object.defineProperty({__proto__:null,Component:bl,DOM:El,DOMWalker:gl,HydrationMismatch:Sl,Reactivity:wl,hydrate:Jt,hydrateById:yl,hydrateNode:_l,hydrateNodeWithWalker:Q,logHydrationWarning:Le},Symbol.toStringTag,{value:"Module"}));function Tl(e){return e.TAG==="Reactive"?d.get(e._0):e._0}function vl(e){return{TAG:"Static",_0:e}}function $l(e){return{TAG:"Reactive",_0:e}}const Al=Object.freeze(Object.defineProperty({__proto__:null,$$static:vl,get:Tl,reactive:$l},Symbol.toStringTag,{value:"Module"}));let xl=d.Id,Cl=d.Scheduler,Ol=d.Core,Dl=d.make,Pl=d.makeForComputed,Rl=d.get,Ml=d.peek,jl=d.set,Fl=d.update,Ll=d.batch,Il=d.untrack,Nl={Id:xl,Scheduler:Cl,Core:Ol,make:Dl,makeForComputed:Pl,get:Rl,peek:Ml,set:jl,update:Fl,batch:Ll,untrack:Il},Gl=P.Id,zl=P.Signal,Bl=P.Core,Wl=P.Scheduler,Hl=P.make,Xl=P.dispose,Vl={Id:Gl,Signal:zl,Core:Bl,Scheduler:Wl,make:Hl,dispose:Xl},Kl=T.Id,Yl=T.Core,ql=T.Scheduler,Ul=T.run,Jl={Id:Kl,Core:Yl,Scheduler:ql,run:Ul},Ql=wr,Zl=qn,ei=Mr,ti=Al,ni=Kn,ri=Wr,li=fl,ii=kl;exports.Component=Ql;exports.Computed=Vl;exports.Effect=Jl;exports.Hydration=ii;exports.ReactiveProp=ti;exports.Route=Zl;exports.Router=ei;exports.SSR=ni;exports.SSRContext=ri;exports.SSRState=li;exports.Signal=Nl;
|