sinwan 1.1.1 → 1.1.2

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.
Files changed (38) hide show
  1. package/README.md +34 -3
  2. package/dist/cjs/index.development.js +296 -192
  3. package/dist/cjs/index.development.js.map +9 -9
  4. package/dist/cjs/index.production.min.js +2 -2
  5. package/dist/cjs/index.production.min.js.map +9 -9
  6. package/dist/cjs/renderer/index.development.js +239 -87
  7. package/dist/cjs/renderer/index.development.js.map +8 -8
  8. package/dist/cjs/renderer/index.production.min.js +2 -2
  9. package/dist/cjs/renderer/index.production.min.js.map +8 -8
  10. package/dist/cjs/server/index.development.js +132 -67
  11. package/dist/cjs/server/index.development.js.map +6 -6
  12. package/dist/cjs/server/index.production.min.js +2 -2
  13. package/dist/cjs/server/index.production.min.js.map +6 -6
  14. package/dist/component/control-flow.d.ts +6 -1
  15. package/dist/component/control-flow.d.ts.map +1 -1
  16. package/dist/component/instance.d.ts.map +1 -1
  17. package/dist/esm/index.development.js +296 -192
  18. package/dist/esm/index.development.js.map +9 -9
  19. package/dist/esm/index.production.min.js +2 -2
  20. package/dist/esm/index.production.min.js.map +9 -9
  21. package/dist/esm/renderer/index.development.js +239 -87
  22. package/dist/esm/renderer/index.development.js.map +8 -8
  23. package/dist/esm/renderer/index.production.min.js +2 -2
  24. package/dist/esm/renderer/index.production.min.js.map +8 -8
  25. package/dist/esm/server/index.development.js +132 -67
  26. package/dist/esm/server/index.development.js.map +6 -6
  27. package/dist/esm/server/index.production.min.js +2 -2
  28. package/dist/esm/server/index.production.min.js.map +6 -6
  29. package/dist/reactivity/index.d.ts +1 -1
  30. package/dist/reactivity/index.d.ts.map +1 -1
  31. package/dist/renderer/attributes.d.ts.map +1 -1
  32. package/dist/renderer/events.d.ts.map +1 -1
  33. package/dist/renderer/render-control-flow.d.ts.map +1 -1
  34. package/dist/renderer/render-element.d.ts.map +1 -1
  35. package/dist/renderer/types.d.ts +2 -0
  36. package/dist/renderer/types.d.ts.map +1 -1
  37. package/dist/server/renderer.d.ts.map +1 -1
  38. package/package.json +5 -2
@@ -1,4 +1,4 @@
1
1
  // @bun
2
- var WP=Symbol("Fragment");class z extends String{value;constructor(w){super(w);this.value=w}toString(){return this.value}}var Dw=(w)=>new z(w);function e(w){if(w==null||typeof w==="boolean")return[];if(Array.isArray(w))return w.flat(1/0);return[w]}function Zw(w,P,j){if(w===WP)return{tag:"",props:{},children:j};if(typeof w==="function"||typeof w==="string"){let Y=P??{};if(j.length>0&&Y.children===void 0)Y.children=j.length===1?j[0]:j;return{tag:w,props:Y,children:j}}return{tag:"",props:{},children:j}}function Aj(w,P,j){return Zw(w,P,e(P?.children))}function Fj(w,P,j){let Y=P?.children;return Zw(w,P,Array.isArray(Y)?Y.flat(1/0):e(Y))}function Uj(w,P,j,Y,$,S){let W=Y?Array.isArray(P?.children)?P.children.flat(1/0):e(P?.children):e(P?.children),J=Zw(w,P,W);if($)J.__source=$;return J}var Qw=globalThis.Bun,Vw=typeof Qw?.escapeHTML==="function"?Qw.escapeHTML.bind(Qw):void 0,Bw=/[&<>"']/g,JP={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function KP(w){if(Bw.lastIndex=0,!Bw.test(w))return w;return w.replace(Bw,(P)=>JP[P])}function F(w){if(w==null||typeof w==="boolean")return"";if(typeof w==="number")return String(w);if(w instanceof z)return w.value;let P=String(w);return Vw?Vw(P):KP(P)}function Lj(w){return Dw(w)}function Tj(w){return w instanceof z}var XP={className:"class",htmlFor:"for",tabIndex:"tabindex",crossOrigin:"crossorigin"};function D(w,P){let j=XP[w]??w;if(P==null||P===!1)return"";if(P===!0)return` ${j}`;let Y=j==="class"&&typeof P==="object"?ZP(P):j==="style"&&typeof P==="object"?QP(P):String(P);return` ${j}="${F(Y)}"`}function ZP(w){if(Array.isArray(w))return w.filter(Boolean).join(" ");return Object.entries(w).filter(([,P])=>Boolean(P)).map(([P])=>P).join(" ")}function QP(w){return Object.entries(w).filter(([,P])=>P!=null&&P!==!1).map(([P,j])=>`${BP(P)}:${String(j)}`).join(";")}function BP(w){return w.includes("-")?w:w.replace(/[A-Z]/g,(P)=>`-${P.toLowerCase()}`)}var V=new Set,a=!1,Gw=!1,Nw=[];function Iw(w){if(!w.active)return;V.add(w),GP()}function Mw(w){V.delete(w)}function GP(){if(!a)a=!0,queueMicrotask(fw)}function fw(){Gw=!0;let w=[...V].sort((Y,$)=>Y.id-$.id);V.clear();for(let Y of w)if(Y.active)Y.run();let P=10;while(V.size>0&&P-- >0){let Y=[...V].sort(($,S)=>$.id-S.id);V.clear();for(let $ of Y)if($.active)$.run()}a=!1,Gw=!1;let j=Nw.splice(0);for(let Y of j)Y()}function bw(w){return new Promise((P)=>{let j=()=>{w?.(),P()};if(a||Gw)Nw.push(j);else queueMicrotask(j)})}function kw(){if(a)a=!1,fw()}var c=null,Aw=[],bP=0;class ww{id;active=!0;fn;cleanup=void 0;deps=new Set;constructor(w){this.id=bP++,this.fn=w}run(){if(!this.active)return;if(Aw.includes(this))return;if(this.cleanupDeps(),this.cleanup)this.cleanup(),this.cleanup=void 0;Aw.push(this);let w=c;c=this;try{let P=this.fn();if(typeof P==="function")this.cleanup=P}finally{c=w,Aw.pop()}}cleanupDeps(){for(let w of this.deps)w.subscribers.delete(this);this.deps.clear()}notify(){Iw(this)}dispose(){if(!this.active)return;if(this.active=!1,this.cleanup)this.cleanup(),this.cleanup=void 0;this.cleanupDeps(),Mw(this)}}function AP(w){let P=new ww(w);return P.run(),()=>P.dispose()}function Pw(w){if(c)w.subscribers.add(c),c.deps.add(w)}function jw(w){let P=[...w.subscribers];for(let j of P)j.notify()}var Hw=Symbol("Sinwan:signal");class Rw{[Hw]=!0;subscribers=new Set;_value;_manualSubs=new Set;constructor(w){this._value=w}get value(){return Pw(this),this._value}set value(w){if(Object.is(this._value,w))return;this._value=w,jw(this);for(let P of this._manualSubs)P(w)}peek(){return this._value}subscribe(w){return this._manualSubs.add(w),()=>{this._manualSubs.delete(w)}}toString(){return String(this.value)}valueOf(){return this.value}}function FP(w){return new Rw(w)}function B(w){return w!=null&&typeof w==="object"&&Hw in w}var yw=Symbol("Sinwan:computed");class Ew{[yw]=!0;subscribers=new Set;_value;_dirty=!0;_effect;constructor(w){let P=this;this._effect=new ww(()=>{P._value=w()}),this._effect.notify=function(){if(!P._dirty)P._dirty=!0,jw(P)},this._effect.run(),this._dirty=!1}get value(){if(Pw(this),this._dirty)this._effect.run(),this._dirty=!1;return this._value}peek(){if(this._dirty)this._effect.run(),this._dirty=!1;return this._value}toString(){return String(this.value)}valueOf(){return this.value}}function Fw(w){return new Ew(w)}function G(w){return w!=null&&typeof w==="object"&&yw in w}function UP(){return{createElement(w){return document.createElement(w)},createElementNS(w,P){return document.createElementNS(w,P)},createTextNode(w){return document.createTextNode(w)},createComment(w){return document.createComment(w)},setAttribute(w,P,j){w.setAttribute(P,j)},removeAttribute(w,P){w.removeAttribute(P)},setProperty(w,P,j){w[P]=j},insertBefore(w,P,j){w.insertBefore(P,j)},appendChild(w,P){w.appendChild(P)},remove(w){w.parentNode?.removeChild(w)},setTextContent(w,P){w.data=P},addEventListener(w,P,j){w.addEventListener(P,j)},removeEventListener(w,P,j){w.removeEventListener(P,j)},parentNode(w){return w.parentNode},nextSibling(w){return w.nextSibling}}}var xw=UP(),N={...xw};function Rj(w){Object.assign(N,w)}function yj(){for(let w of Object.keys(N))delete N[w];Object.assign(N,xw)}function O(w){return w.length>2&&w[0]==="o"&&w[1]==="n"&&w[2]>="A"&&w[2]<="Z"}function r(w){return w.slice(2).toLowerCase()}function zP(w,P,j){return N.addEventListener(w,P,j),()=>{N.removeEventListener(w,P,j)}}function Cj(w,P){let j=[];for(let Y of Object.keys(P))if(O(Y)){let $=P[Y];if(typeof $==="function"){let S=r(Y);j.push(zP(w,S,$))}}return j}var Uw=0;function qP(w){Uw++;try{w()}finally{if(Uw--,Uw===0)kw()}}function LP(w){return B(w)||G(w)||typeof w==="function"}function zw(w){if(B(w)||G(w))return w.value;if(typeof w==="function")return w();return w}var gw=Symbol.for("Sinwan.Show"),uw=Symbol.for("Sinwan.For"),hw=Symbol.for("Sinwan.Switch"),vw=Symbol.for("Sinwan.Match"),iw=Symbol.for("Sinwan.Index"),mw=Symbol.for("Sinwan.Key"),pw=Symbol.for("Sinwan.Dynamic"),sw=Symbol.for("Sinwan.Portal");function I(w){return{tag:gw,props:w,children:[]}}function M(w){return{tag:uw,props:w,children:[]}}function f(w){return{tag:hw,props:w,children:[]}}function T(w){return{tag:vw,props:w,children:[]}}function k(w){return{tag:iw,props:w,children:[]}}function H(w){return{tag:mw,props:w,children:[]}}function R(w){return{tag:pw,props:w,children:[]}}function y(w){let{when:P,as:j="span",style:Y,children:$,...S}=w,W=Fw(()=>{let J=Cw(Y),K=Boolean(Cw(P));if(typeof J==="string")return K?J:OP(J);let X=J&&typeof J==="object"?{...J}:{};return X.display=K?X.display:"none",X});return{tag:j,props:{...S,style:W,children:$},children:TP($)}}function E(w){return{tag:sw,props:w,children:[]}}function x(w){return w.tag===gw}function C(w){return w.tag===uw}function g(w){return w.tag===hw}function q(w){return w.tag===vw}function u(w){return w.tag===iw}function h(w){return w.tag===mw}function v(w){return w.tag===pw}function i(w){return w.tag===sw}function TP(w){if(w==null||typeof w==="boolean")return[];return Array.isArray(w)?w:[w]}function Cw(w){return zw(w)}function OP(w){let P=w.trim(),j=P.length>0&&!P.endsWith(";")?";":"";return`${P}${j}display:none`}var qw=new Map;function _P(w,P){qw.set(w,P)}function dw(w){return qw.get(w)}function DP(w){return qw.has(w)}async function VP(w,P){let j=dw(w);if(!j)throw Error(`Page "${w}" not found in registry`);let Y=await j(P);return Z(Y)}async function Z(w){if(w==null||typeof w==="boolean")return"";if(typeof w==="string")return F(w);if(typeof w==="number")return String(w);if(w instanceof z)return w.value;if(B(w)||G(w))return F(String(w.value));if(Array.isArray(w))return(await Promise.all(w.map((j)=>Z(j)))).join("");if(w instanceof Promise)return l(await w);return l(w)}async function l(w){let{tag:P,props:j,children:Y}=w;if(P===I||P===M||P===f||P===k||P===H||P===R||P===E)return l(P(j));if(P===y)return l(P(j));if(x(w)){let $=_(j.when);return Z($?CP(w,$):j.fallback)}if(C(w))return HP(w);if(g(w))return Z(yP(w));if(q(w)){let $=_(j.when);return Z($?aw(w,$):null)}if(u(w))return RP(w);if(h(w)){let $=_(j.when);return Z(EP(w,$))}if(v(w)){let $=_(j.component),S=xP(w,$);return S?l(S):""}if(i(w))return"";if(typeof P==="function"){let $=await P(j);return Z($)}if(typeof P==="string")return IP(P,j,Y);return Z(Y)}var NP=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);async function IP(w,P,j){let Y=MP(P);if(NP.has(w))return Y?`<${w}${Y}>`:`<${w}>`;let $=await fP(j,P);return Y?`<${w}${Y}>${$}</${w}>`:`<${w}>${$}</${w}>`}function MP(w){let P="";for(let[j,Y]of Object.entries(w)){if(j==="children"||j==="key"||j==="ref"||j==="dangerouslySetInnerHTML"||O(j))continue;let $=_(Y);if($==null||$===!1)continue;P+=D(j,$)}return P}async function fP(w,P){let j=P.dangerouslySetInnerHTML;if(j&&typeof j.__html==="string")return j.__html;return Z(w)}function kP(w){return w!=null&&typeof w==="object"&&!Array.isArray(w)&&!(w instanceof z)}async function HP(w){let P=w.props,j=_(P.each);if(!Array.isArray(j)||typeof P.children!=="function")return P.fallback?Z(P.fallback):"";if(j.length===0)return P.fallback?Z(P.fallback):"";return(await Promise.all(j.map(($,S)=>Z(P.children($,()=>S))))).join("")}async function RP(w){let P=w.props,j=_(P.each);if(!Array.isArray(j)||typeof P.children!=="function")return P.fallback?Z(P.fallback):"";if(j.length===0)return P.fallback?Z(P.fallback):"";return(await Promise.all(j.map(($,S)=>Z(P.children(()=>$,S))))).join("")}function yP(w){let P=w.props,j=cw(P.children??w.children);for(let Y of j){let $=uP(Y);if(!$)continue;let S=_($.props.when);if(S)return aw($,S)}return P.fallback}function aw(w,P){let j=w.props.children??w.children;if(typeof j==="function")return j(P);return j}function EP(w,P){let j=w.props.children??w.children;if(typeof j==="function")return j(P);return j}function xP(w,P){if(typeof P!=="string"&&typeof P!=="function")return null;let{component:j,...Y}=w.props,$=cw(Y.children??w.children);return{tag:P,props:Y,children:$}}function CP(w,P){let j=w.props.children??w.children;if(typeof j==="function")return j(P);return j}function _(w){return B(w)||G(w)?w.value:w}function cw(w){if(w==null||typeof w==="boolean")return[];return Array.isArray(w)?w:[w]}function gP(w){return w!=null&&typeof w==="object"&&"tag"in w}function uP(w){if(!gP(w))return null;if(q(w))return w;return w.tag===T?T(w.props):null}var hP=0;function o(w,P,j){return{uid:hP++,component:w,props:P,element:null,parent:j,children:[],effects:[],_mountedHooks:[],_unmountedHooks:[],_updatedHooks:[],_errorHooks:[],provides:j?Object.create(j.provides):Object.create(null),isMounted:!1,isUnmounted:!1}}var Tw=null;function Yw(){return Tw}function L(w){let P=Tw;return Tw=w,P}function JY(w,P){let j=L(w);try{return P()}finally{L(j)}}function vP(w){if(w.isUnmounted)return;for(let P of w.children)vP(P);if(!w.isMounted){w.isMounted=!0;for(let P of w._mountedHooks)P()}}function iP(w){for(let P of w.children)iP(P);if(w.isMounted&&!w.isUnmounted){w.isUnmounted=!0,w.isMounted=!1;for(let P of w._unmountedHooks)P();for(let P of w.effects)P();w.effects.length=0}}function mP(w){for(let P of w._updatedHooks)P()}var Lw=new Set;function KY(w){if(!w||!w.isMounted||w.isUnmounted||w._updatedHooks.length===0||Lw.has(w))return;Lw.add(w),bw(()=>{if(Lw.delete(w),w.isMounted&&!w.isUnmounted)mP(w)})}function XY(w,P){let j=w;while(j){if(j._errorHooks.length>0){for(let Y of j._errorHooks)Y(P);return}j=j.parent}console.error("[Sinwan] Unhandled component error:",P)}var $w="data-sinwan-id";var Sw="data-sinwan-ev";function Ww(w){return`c${w}`}function Jw(w){return`<!--sinwan-t:${w}-->`}function Kw(){return"<!--/sinwan-t-->"}function QY(w){let P=w.data;if(P.startsWith("sinwan-t:")){let j=parseInt(P.slice(9),10);return Number.isNaN(j)?-1:j}return-1}function BY(w){return w.data==="/sinwan-t"}function rw(){return{componentIndex:0,textIndex:0,eventIndex:0}}var lw=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function pP(w,P){let j=new TextEncoder;return new ReadableStream({async start(Y){try{let $=await w(P);await b($,Y,j),Y.close()}catch($){Y.error($)}}})}function sP(w,P){let j=new TextEncoder,Y=rw();return new ReadableStream({async start($){try{await ow(w,P??{},$,j,Y,!0),$.close()}catch(S){$.error(S)}}})}function dP(w){let P=new TextEncoder,j=rw();return new ReadableStream({async start(Y){try{await Q(w,Y,P,j),Y.close()}catch($){Y.error($)}}})}async function b(w,P,j){if(w==null||typeof w==="boolean")return;if(typeof w==="string"){P.enqueue(j.encode(F(w)));return}if(typeof w==="number"){P.enqueue(j.encode(String(w)));return}if(w instanceof z){P.enqueue(j.encode(w.value));return}if(B(w)||G(w)){P.enqueue(j.encode(F(String(w.value))));return}if(Array.isArray(w)){for(let Y of w)await b(Y,P,j);return}if(w instanceof Promise){let Y=await w;await n(Y,P,j);return}await n(w,P,j)}async function n(w,P,j){let{tag:Y,props:$,children:S}=w;if(Y===I||Y===M||Y===f||Y===k||Y===H||Y===R||Y===E){await n(Y($),P,j);return}if(Y===y){await n(Y($),P,j);return}if(x(w)){let W=A($.when);await b(W?nw(w,W):$.fallback,P,j);return}if(C(w)){await tP(w,P,j);return}if(g(w)){await b(tw(w),P,j);return}if(q(w)){let W=A($.when);await b(W?Ow(w,W):null,P,j);return}if(u(w)){await eP(w,P,j);return}if(h(w)){let W=A($.when);await b(ew(w,W),P,j);return}if(v(w)){let W=A($.component),J=wP(w,W);if(J)await n(J,P,j);return}if(i(w))return;if(typeof Y==="function"){let W=await Y($);await b(W,P,j);return}if(typeof Y==="string"){await aP(Y,$,S,P,j);return}await b(S,P,j)}async function aP(w,P,j,Y,$){let S=cP(P),W=P.dangerouslySetInnerHTML;if(lw.has(w)){let K=S?`<${w}${S}>`:`<${w}>`;Y.enqueue($.encode(K));return}let J=S?`<${w}${S}>`:`<${w}>`;if(Y.enqueue($.encode(J)),W&&typeof W.__html==="string")Y.enqueue($.encode(W.__html));else await b(j,Y,$);Y.enqueue($.encode(`</${w}>`))}function cP(w){let P="";for(let[j,Y]of Object.entries(w)){if(j==="children"||j==="key"||j==="ref"||j==="dangerouslySetInnerHTML"||O(j))continue;let $=A(Y);if($==null||$===!1)continue;P+=D(j,$)}return P}async function Q(w,P,j,Y,$=!1){if(w==null||typeof w==="boolean")return;if(typeof w==="string"){m(P,j,F(w));return}if(typeof w==="number"){m(P,j,String(w));return}if(w instanceof z){m(P,j,w.value);return}if(B(w)||G(w)){let S=Y.textIndex++;m(P,j,`${Jw(S)}${F(String(w.value))}${Kw()}`);return}if(Array.isArray(w)){for(let S of w)await Q(S,P,j,Y);return}if(w instanceof Promise){await t(await w,P,j,Y,$);return}await t(w,P,j,Y,$)}async function t(w,P,j,Y,$){let{tag:S,props:W,children:J}=w;if(S===""){for(let K of J)await Q(K,P,j,Y);return}if(S===I||S===M||S===f||S===k||S===H||S===R||S===E){await t(S(W),P,j,Y,$);return}if(S===y){await t(S(W),P,j,Y,$);return}if(x(w)){let K=A(W.when);await Q(K?nw(w,K):W.fallback,P,j,Y,$);return}if(C(w)){await lP(w,P,j,Y);return}if(g(w)){await Q(tw(w),P,j,Y,$);return}if(q(w)){let K=A(W.when);await Q(K?Ow(w,K):null,P,j,Y,$);return}if(u(w)){await oP(w,P,j,Y);return}if(h(w)){let K=A(W.when);await Q(ew(w,K),P,j,Y,$);return}if(v(w)){let K=A(W.component),X=wP(w,K);if(X)await t(X,P,j,Y,$);return}if(i(w))return;if(typeof S==="function"){await ow(S,W,P,j,Y,!0);return}if(typeof S==="string"){await rP(S,W,J,P,j,Y,$);return}await Q(J,P,j,Y)}async function ow(w,P,j,Y,$,S){let W=Yw(),J=o(w,P,W);if(W)W.children.push(J);let K=L(J);try{let X=await w(P);await Q(X,j,Y,$,S)}finally{L(K)}}async function rP(w,P,j,Y,$,S,W){let J=nP(P,S,W),K=P.dangerouslySetInnerHTML;if(m(Y,$,J?`<${w}${J}>`:`<${w}>`),lw.has(w))return;if(K&&typeof K.__html==="string")m(Y,$,K.__html);else for(let X of j)await Q(X,Y,$,S);m(Y,$,`</${w}>`)}async function lP(w,P,j,Y){let $=w.props,S=A($.each);if(!Array.isArray(S)||typeof $.children!=="function"){if($.fallback)await Q($.fallback,P,j,Y);return}if(S.length===0){if($.fallback)await Q($.fallback,P,j,Y);return}for(let W=0;W<S.length;W++)await Q($.children(S[W],()=>W),P,j,Y)}async function oP(w,P,j,Y){let $=w.props,S=A($.each);if(!Array.isArray(S)||typeof $.children!=="function"){if($.fallback)await Q($.fallback,P,j,Y);return}if(S.length===0){if($.fallback)await Q($.fallback,P,j,Y);return}for(let W=0;W<S.length;W++)await Q($.children(()=>S[W],W),P,j,Y)}function nP(w,P,j){let Y="";if(j)Y+=` ${$w}="${Ww(P.componentIndex++)}"`;let $=[];for(let[S,W]of Object.entries(w)){if(S==="children"||S==="key"||S==="ref"||S==="dangerouslySetInnerHTML")continue;if(O(S)){$.push(`${r(S)}:${P.eventIndex++}`);continue}let J=A(W);if(J==null||J===!1)continue;Y+=D(S,J)}if($.length>0)Y+=` ${Sw}="${$.join(",")}"`;return Y}function m(w,P,j){w.enqueue(P.encode(j))}async function tP(w,P,j){let Y=w.props,$=A(Y.each);if(!Array.isArray($)||typeof Y.children!=="function"){if(Y.fallback)await b(Y.fallback,P,j);return}if($.length===0){if(Y.fallback)await b(Y.fallback,P,j);return}for(let S=0;S<$.length;S++)await b(Y.children($[S],()=>S),P,j)}async function eP(w,P,j){let Y=w.props,$=A(Y.each);if(!Array.isArray($)||typeof Y.children!=="function"){if(Y.fallback)await b(Y.fallback,P,j);return}if($.length===0){if(Y.fallback)await b(Y.fallback,P,j);return}for(let S=0;S<$.length;S++)await b(Y.children(()=>$[S],S),P,j)}function nw(w,P){let j=w.props.children??w.children;if(typeof j==="function")return j(P);return j}function tw(w){let P=w.props,j=PP(P.children??w.children);for(let Y of j){let $=Pj(Y);if(!$)continue;let S=A($.props.when);if(S)return Ow($,S)}return P.fallback}function Ow(w,P){let j=w.props.children??w.children;if(typeof j==="function")return j(P);return j}function ew(w,P){let j=w.props.children??w.children;if(typeof j==="function")return j(P);return j}function wP(w,P){if(typeof P!=="string"&&typeof P!=="function")return null;let{component:j,...Y}=w.props,$=PP(Y.children??w.children);return{tag:P,props:Y,children:$}}function A(w){return B(w)||G(w)?w.value:w}function PP(w){if(w==null||typeof w==="boolean")return[];return Array.isArray(w)?w:[w]}function wj(w){return w!=null&&typeof w==="object"&&"tag"in w}function Pj(w){if(!wj(w))return null;if(q(w))return w;return w.tag===T?T(w.props):null}function jP(){return{componentIndex:0,textIndex:0,eventIndex:0}}async function jj(w,P){let j=jP(),Y=P??{},$=o(w,Y,null),S=L($);try{let W=await w(Y);if(W&&typeof W==="object"&&"tag"in W)return s(W,j,!0);return U(W,j)}finally{L(S)}}async function Yj(w){let P=jP();return U(w,P)}var $j=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function U(w,P){if(w==null||typeof w==="boolean")return"";if(typeof w==="string")return F(w);if(typeof w==="number")return String(w);if(w instanceof z)return w.value;if(B(w)||G(w)){let j=w.value,Y=P.textIndex++;return`${Jw(Y)}${F(String(j))}${Kw()}`}if(Array.isArray(w))return w.map((j)=>U(j,P)).join("");if(w instanceof Promise)return"";if(typeof w==="object"&&"tag"in w)return s(w,P,!1);return F(String(w))}function s(w,P,j){let{tag:Y,props:$,children:S}=w;if(Y==="")return S.map((W)=>U(W,P)).join("");if(Y===I||Y===M||Y===f||Y===k||Y===H||Y===R||Y===E)return s(Y($),P,j);if(Y===y)return s(Y($),P,j);if(x(w)){let W=p($.when),J=W?Xj(w,W):$.fallback;return Xw(J,P,j)}if(C(w))return Jj(w,P);if(g(w))return Xw(Zj(w),P,j);if(q(w)){let W=p($.when);return Xw(W?YP(w,W):null,P,j)}if(u(w))return Kj(w,P);if(h(w)){let W=p($.when);return Xw(Qj(w,W),P,j)}if(v(w)){let W=p($.component),J=Bj(w,W);return J?s(J,P,j):""}if(i(w))return"";if(typeof Y==="function")return Sj(Y,$,P);if(typeof Y==="string")return Wj(Y,$,S,P,j);return S.map((W)=>U(W,P)).join("")}function Sj(w,P,j){let Y=Yw(),$=o(w,P,Y);if(Y)Y.children.push($);let S=L($);try{let W=w(P);if(W&&typeof W==="object"&&"tag"in W)return s(W,j,!0);return U(W,j)}finally{L(S)}}function Wj(w,P,j,Y,$){let S="";if($)S+=` ${$w}="${Ww(Y.componentIndex++)}"`;let W=[];for(let[X,d]of Object.entries(P)){if(X==="children"||X==="key"||X==="ref"||X==="dangerouslySetInnerHTML")continue;if(O(X)){let SP=r(X);W.push(`${SP}:${Y.eventIndex++}`);continue}if(d==null||d===!1)continue;let _w=d;if(B(d)||G(d))_w=d.value;S+=D(X,_w)}if(W.length>0)S+=` ${Sw}="${W.join(",")}"`;if($j.has(w))return`<${w}${S}>`;let J=P.dangerouslySetInnerHTML;if(J&&typeof J.__html==="string")return`<${w}${S}>${J.__html}</${w}>`;let K=j.map((X)=>U(X,Y)).join("");return`<${w}${S}>${K}</${w}>`}function Xw(w,P,j){if(j&&w&&typeof w==="object"&&!Array.isArray(w)&&"tag"in w)return s(w,P,!0);return U(w,P)}function Jj(w,P){let j=w.props,Y=p(j.each);if(!Array.isArray(Y)||typeof j.children!=="function")return j.fallback?U(j.fallback,P):"";if(Y.length===0)return j.fallback?U(j.fallback,P):"";return Y.map(($,S)=>U(j.children($,()=>S),P)).join("")}function Kj(w,P){let j=w.props,Y=p(j.each);if(!Array.isArray(Y)||typeof j.children!=="function")return j.fallback?U(j.fallback,P):"";if(Y.length===0)return j.fallback?U(j.fallback,P):"";return Y.map(($,S)=>U(j.children(()=>$,S),P)).join("")}function Xj(w,P){let j=w.props.children??w.children;if(typeof j==="function")return j(P);return j}function Zj(w){let P=w.props,j=$P(P.children??w.children);for(let Y of j){let $=bj(Y);if(!$)continue;let S=p($.props.when);if(S)return YP($,S)}return P.fallback}function YP(w,P){let j=w.props.children??w.children;if(typeof j==="function")return j(P);return j}function Qj(w,P){let j=w.props.children??w.children;if(typeof j==="function")return j(P);return j}function Bj(w,P){if(typeof P!=="string"&&typeof P!=="function")return null;let{component:j,...Y}=w.props,$=$P(Y.children??w.children);return{tag:P,props:Y,children:$}}function p(w){return B(w)||G(w)?w.value:w}function $P(w){if(w==null||typeof w==="boolean")return[];return Array.isArray(w)?w:[w]}function Gj(w){return w!=null&&typeof w==="object"&&"tag"in w}function bj(w){if(!Gj(w))return null;if(q(w))return w;return w.tag===T?T(w.props):null}export{pP as streamPage,sP as streamHydratablePage,dP as streamHydratableNode,Z as renderToString,jj as renderToHydratableString,VP as renderPage,Yj as renderNodeToHydratableString,_P as registerPage,kP as isSlots,DP as hasPage,dw as getPage};
2
+ var qj=Symbol("Fragment");class O extends String{value;constructor($){super($);this.value=$}toString(){return this.value}}var R$=($)=>new O($);function J$($){if($==null||typeof $==="boolean")return[];if(Array.isArray($))return $.flat(1/0);return[$]}function z$($,j,J){if($===qj)return{tag:"",props:{},children:J};if(typeof $==="function"||typeof $==="string"){let Z=j??{};if(J.length>0&&Z.children===void 0)Z.children=J.length===1?J[0]:J;return{tag:$,props:Z,children:J}}return{tag:"",props:{},children:J}}function YJ($,j,J){return z$($,j,J$(j?.children))}function VJ($,j,J){let Z=j?.children;return z$($,j,Array.isArray(Z)?Z.flat(1/0):J$(Z))}function OJ($,j,J,Z,Q,G){let X=Z?Array.isArray(j?.children)?j.children.flat(1/0):J$(j?.children):J$(j?.children),B=z$($,j,X);if(Q)B.__source=Q;return B}var A$=globalThis.Bun,f$=typeof A$?.escapeHTML==="function"?A$.escapeHTML.bind(A$):void 0,F$=/[&<>"']/g,Kj={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};function Lj($){if(F$.lastIndex=0,!F$.test($))return $;return $.replace(F$,(j)=>Kj[j])}function Y($){if($==null||typeof $==="boolean")return"";if(typeof $==="number")return String($);if($ instanceof O)return $.value;let j=String($);return f$?f$(j):Lj(j)}function _J($){return R$($)}function IJ($){return $ instanceof O}var zj={className:"class",htmlFor:"for",tabIndex:"tabindex",crossOrigin:"crossorigin"};function f($,j){let J=zj[$]??$;if(j==null||j===!1)return"";if(j===!0)return` ${J}`;let Z=J==="class"&&typeof j==="object"?Aj(j):J==="style"&&typeof j==="object"?Fj(j):String(j);return` ${J}="${Y(Z)}"`}function Aj($){if(Array.isArray($))return $.filter(Boolean).join(" ");return Object.entries($).filter(([,j])=>Boolean(j)).map(([j])=>j).join(" ")}function Fj($){return Object.entries($).filter(([,j])=>j!=null&&j!==!1).map(([j,J])=>`${Yj(j)}:${String(J)}`).join(";")}function Yj($){return $.includes("-")?$:$.replace(/[A-Z]/g,(j)=>`-${j.toLowerCase()}`)}var y=new Set,l=!1,Y$=!1,y$=[];function C$($){if(!$.active)return;y.add($),Vj()}function E$($){y.delete($)}function Vj(){if(!l)l=!0,queueMicrotask(x$)}function x$(){Y$=!0;let $=[...y].sort((Z,Q)=>Z.id-Q.id);y.clear();for(let Z of $)if(Z.active)Z.run();let j=10;while(y.size>0&&j-- >0){let Z=[...y].sort((Q,G)=>Q.id-G.id);y.clear();for(let Q of Z)if(Q.active)Q.run()}l=!1,Y$=!1;let J=y$.splice(0);for(let Z of J)Z()}function V$($){return new Promise((j)=>{let J=()=>{$?.(),j()};if(l||Y$)y$.push(J);else queueMicrotask(J)})}function O$(){if(l)l=!1,x$()}var r=null,D$=[],Oj=0;class Z${id;active=!0;fn;cleanup=void 0;deps=new Set;constructor($){this.id=Oj++,this.fn=$}run(){if(!this.active)return;if(D$.includes(this))return;if(this.cleanupDeps(),this.cleanup)this.cleanup(),this.cleanup=void 0;D$.push(this);let $=r;r=this;try{let j=this.fn();if(typeof j==="function")this.cleanup=j}finally{r=$,D$.pop()}}cleanupDeps(){for(let $ of this.deps)$.subscribers.delete(this);this.deps.clear()}notify(){C$(this)}dispose(){if(!this.active)return;if(this.active=!1,this.cleanup)this.cleanup(),this.cleanup=void 0;this.cleanupDeps(),E$(this)}}function Dj($){let j=new Z$($);return j.run(),()=>j.dispose()}function Q$($){if(r)$.subscribers.add(r),r.deps.add($)}function G$($){let j=[...$.subscribers];for(let J of j)J.notify()}var g$=Symbol("Sinwan:signal");class v${[g$]=!0;subscribers=new Set;_value;_manualSubs=new Set;constructor($){this._value=$}get value(){return Q$(this),this._value}set value($){if(Object.is(this._value,$))return;this._value=$,G$(this);for(let j of this._manualSubs)j($)}peek(){return this._value}subscribe($){return this._manualSubs.add($),()=>{this._manualSubs.delete($)}}toString(){return String(this.value)}valueOf(){return this.value}}function Pj($){return new v$($)}function L($){return $!=null&&typeof $==="object"&&g$ in $}var u$=Symbol("Sinwan:computed");class h${[u$]=!0;subscribers=new Set;_value;_dirty=!0;_effect;constructor($){let j=this;this._effect=new Z$(()=>{j._value=$()}),this._effect.notify=function(){if(!j._dirty)j._dirty=!0,G$(j)},this._effect.run(),this._dirty=!1}get value(){if(Q$(this),this._dirty)this._effect.run(),this._dirty=!1;return this._value}peek(){if(this._dirty)this._effect.run(),this._dirty=!1;return this._value}toString(){return String(this.value)}valueOf(){return this.value}}function P$($){return new h$($)}function z($){return $!=null&&typeof $==="object"&&u$ in $}function _j(){return{createElement($){return document.createElement($)},createElementNS($,j){return document.createElementNS($,j)},createTextNode($){return document.createTextNode($)},createComment($){return document.createComment($)},setAttribute($,j,J){$.setAttribute(j,J)},removeAttribute($,j){$.removeAttribute(j)},setProperty($,j,J){$[j]=J},insertBefore($,j,J){$.insertBefore(j,J)},appendChild($,j){$.appendChild(j)},remove($){$.parentNode?.removeChild($)},setTextContent($,j){$.data=j},addEventListener($,j,J){$.addEventListener(j,J)},removeEventListener($,j,J){$.removeEventListener(j,J)},parentNode($){return $.parentNode},nextSibling($){return $.nextSibling}}}var m$=_j(),C={...m$};function yJ($){Object.assign(C,$)}function CJ(){for(let $ of Object.keys(C))delete C[$];Object.assign(C,m$)}function _($){return $.length>2&&$.startsWith("on")}function t($){return $.slice(2).toLowerCase()}function Ij($,j,J){return C.addEventListener($,j,J),()=>{C.removeEventListener($,j,J)}}function gJ($,j){let J=[];for(let Z of Object.keys(j))if(_(Z)){let Q=j[Z];if(typeof Q==="function"){let G=t(Z);J.push(Ij($,G,Q))}}return J}var _$=0;function Nj($){_$++;try{$()}finally{if(_$--,_$===0)O$()}}function Mj($){return L($)||z($)||typeof $==="function"}function I$($){if(L($)||z($))return $.value;if(typeof $==="function")return $();return $}var p$=Symbol.for("Sinwan.Show"),i$=Symbol.for("Sinwan.For"),s$=Symbol.for("Sinwan.Switch"),d$=Symbol.for("Sinwan.Match"),a$=Symbol.for("Sinwan.Index"),c$=Symbol.for("Sinwan.Key"),l$=Symbol.for("Sinwan.Dynamic"),r$=Symbol.for("Sinwan.Portal");function I($){return{tag:p$,props:$,children:[]}}function N($){return{tag:i$,props:$,children:[]}}function M($){return{tag:s$,props:$,children:[]}}function b($){return{tag:d$,props:$,children:[]}}function w($){return{tag:a$,props:$,children:[]}}function S($){return{tag:c$,props:$,children:[]}}function g($){return{tag:l$,props:$,children:[]}}function v($){let{when:j,as:J="span",style:Z,children:Q,...G}=$,X=P$(()=>{let B=x(Z),W=Boolean(x(j));if(typeof B==="string")return W?B:Sj(B);let U=B&&typeof B==="object"?{...B}:{};return U.display=W?U.display:"none",U});return{tag:J,props:{...G,style:X,children:Q},children:wj(Q)}}function u($){return{tag:r$,props:$,children:[]}}function bj($){return $!=null&&typeof $==="object"&&"tag"in $}function k($){return $.tag===p$}function H($){return $.tag===i$}function h($){return $.tag===s$}function D($){return $.tag===d$}function T($){return $.tag===a$}function R($){return $.tag===c$}function m($){return $.tag===l$}function p($){return $.tag===r$}function o$($){let j=$.props,J=o(j.children??$.children),Z=E(J);return Z!==void 0?Z:j.fallback}function E($){for(let j of $){if(j==null||typeof j==="boolean")continue;if(Array.isArray(j)){let J=E(j);if(J!==void 0)return J;continue}if(bj(j)){let J=j;if(typeof J.tag==="function"){let Z=J.tag;if(Z===b||Z===I||Z===N||Z===w||Z===S||Z===M)J=Z(J.props)}if(D(J)){let Z=x(J.props.when);if(Z)return N$(J,Z)}else if(k(J)){let Z=x(J.props.when);if(Z){let Q=M$(J,Z),G=E(o(Q));if(G!==void 0)return G}else if(J.props.fallback){let Q=E(o(J.props.fallback));if(Q!==void 0)return Q}}else if(H(J)){let Z=J.props,Q=x(Z.each);if(Array.isArray(Q))for(let G=0;G<Q.length;G++){let X=Z.children(Q[G],()=>G),B=E(o(X));if(B!==void 0)return B}}else if(T(J)){let Z=J.props,Q=x(Z.each);if(Array.isArray(Q))for(let G=0;G<Q.length;G++){let X=Z.children(()=>Q[G],G),B=E(o(X));if(B!==void 0)return B}}else if(R(J)){let Z=x(J.props.when),Q=b$(J,Z),G=E(o(Q));if(G!==void 0)return G}}}return}function N$($,j){let J=$.props.children??$.children;if(typeof J==="function")return J(j);return J}function M$($,j){let J=$.props.children??$.children;if(typeof J==="function")return J(j);return J}function b$($,j){let J=$.props.children??$.children;if(typeof J==="function")return J(j);return J}function o($){if($==null||typeof $==="boolean")return[];return Array.isArray($)?$:[$]}function wj($){if($==null||typeof $==="boolean")return[];return Array.isArray($)?$:[$]}function x($){return I$($)}function Sj($){let j=$.trim(),J=j.length>0&&!j.endsWith(";")?";":"";return`${j}${J}display:none`}var w$=new Map;function kj($,j){w$.set($,j)}function t$($){return w$.get($)}function Hj($){return w$.has($)}async function Tj($,j){let J=t$($);if(!J)throw Error(`Page "${$}" not found in registry`);let Z=await J(j);return q(Z)}async function q($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return Y($);if(typeof $==="number")return String($);if($ instanceof O)return $.value;if(L($)||z($))return Y(String($.value));if(Array.isArray($))return(await Promise.all($.map((J)=>q(J)))).join("");if($ instanceof Promise)return n(await $);return n($)}async function n($){let{tag:j,props:J,children:Z}=$;if(j===I||j===N||j===M||j===w||j===S||j===g||j===u)return n(j(J));if(j===v)return n(j(J));if(k($)){let Q=i(J.when);return q(Q?M$($,Q):J.fallback)}if(H($))return xj($);if(h($))return q(o$($));if(D($)){let Q=i(J.when);return q(Q?N$($,Q):null)}if(T($))return gj($);if(R($)){let Q=i(J.when);return q(b$($,Q))}if(m($)){let Q=i(J.component),G=vj($,Q);return G?n(G):""}if(p($))return"";if(typeof j==="function"){let Q=await j(J);return q(Q)}if(typeof j==="string")return fj(j,J,Z);return q(Z)}var Rj=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);async function fj($,j,J){let Z=yj(j);if(Rj.has($))return Z?`<${$}${Z}>`:`<${$}>`;let Q=await Cj(J,j);return Z?`<${$}${Z}>${Q}</${$}>`:`<${$}>${Q}</${$}>`}function yj($){let j="";for(let[J,Z]of Object.entries($)){if(J==="children"||J==="key"||J==="ref"||J==="dangerouslySetInnerHTML"||_(J))continue;let Q=i(Z);if(Q==null||Q===!1)continue;j+=f(J,Q)}return j}async function Cj($,j){let J=j.dangerouslySetInnerHTML;if(J&&typeof J.__html==="string")return J.__html;return q($)}function Ej($){return $!=null&&typeof $==="object"&&!Array.isArray($)&&!($ instanceof O)}async function xj($){let j=$.props,J=i(j.each);if(!Array.isArray(J)||typeof j.children!=="function")return j.fallback?q(j.fallback):"";if(J.length===0)return j.fallback?q(j.fallback):"";return(await Promise.all(J.map((Q,G)=>q(j.children(Q,()=>G))))).join("")}async function gj($){let j=$.props,J=i(j.each);if(!Array.isArray(J)||typeof j.children!=="function")return j.fallback?q(j.fallback):"";if(J.length===0)return j.fallback?q(j.fallback):"";return(await Promise.all(J.map((Q,G)=>q(j.children(()=>Q,G))))).join("")}function vj($,j){if(typeof j!=="string"&&typeof j!=="function")return null;let{component:J,...Z}=$.props,Q=uj(Z.children??$.children);return{tag:j,props:Z,children:Q}}function i($){return L($)||z($)?$.value:$}function uj($){if($==null||typeof $==="boolean")return[];return Array.isArray($)?$:[$]}var hj=0;function e($,j,J){return{uid:hj++,component:$,props:j,element:null,parent:J,children:[],effects:[],_mountedHooks:[],_unmountedHooks:[],_updatedHooks:[],_errorHooks:[],provides:J?Object.create(J.provides):Object.create(null),isMounted:!1,isUnmounted:!1}}var k$=null;function X$(){return k$}function P($){let j=k$;return k$=$,j}function WZ($,j){let J=P($);try{return j()}finally{P(J)}}function mj($){if($.isUnmounted)return;for(let j of $.children)mj(j);if(!$.isMounted){$.isMounted=!0;for(let j of $._mountedHooks)j()}}function pj($){let j=[...$.children];for(let J of j)pj(J);if(!$.isUnmounted){if($.isUnmounted=!0,$.isMounted){$.isMounted=!1;for(let J of $._unmountedHooks)J()}for(let J of $.effects)J();if($.effects.length=0,$.parent){let J=$.parent.children.indexOf($);if(J!==-1)$.parent.children.splice(J,1)}}}function ij($){for(let j of $._updatedHooks)j()}var S$=new Set;function UZ($){if(!$||!$.isMounted||$.isUnmounted||$._updatedHooks.length===0||S$.has($))return;S$.add($),V$(()=>{if(S$.delete($),$.isMounted&&!$.isUnmounted)ij($)})}function qZ($,j){let J=$;while(J){if(J._errorHooks.length>0){for(let Z of J._errorHooks)Z(j);return}J=J.parent}console.error("[Sinwan] Unhandled component error:",j)}var B$="data-sinwan-id";var W$="data-sinwan-ev";function U$($){return`c${$}`}function q$($){return`<!--sinwan-t:${$}-->`}function K$(){return"<!--/sinwan-t-->"}function LZ($){let j=$.data;if(j.startsWith("sinwan-t:")){let J=parseInt(j.slice(9),10);return Number.isNaN(J)?-1:J}return-1}function zZ($){return $.data==="/sinwan-t"}function n$(){return{componentIndex:0,textIndex:0,eventIndex:0}}var e$=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function sj($,j){let J=new TextEncoder;return new ReadableStream({async start(Z){try{let Q=await $(j);await A(Q,Z,J),Z.close()}catch(Q){Z.error(Q)}}})}function dj($,j){let J=new TextEncoder,Z=n$();return new ReadableStream({async start(Q){try{await $j($,j??{},Q,J,Z,!0),Q.close()}catch(G){Q.error(G)}}})}function aj($){let j=new TextEncoder,J=n$();return new ReadableStream({async start(Z){try{await K($,Z,j,J),Z.close()}catch(Q){Z.error(Q)}}})}async function A($,j,J){if($==null||typeof $==="boolean")return;if(typeof $==="string"){j.enqueue(J.encode(Y($)));return}if(typeof $==="number"){j.enqueue(J.encode(String($)));return}if($ instanceof O){j.enqueue(J.encode($.value));return}if(L($)||z($)){j.enqueue(J.encode(Y(String($.value))));return}if(Array.isArray($)){for(let Z of $)await A(Z,j,J);return}if($ instanceof Promise){let Z=await $;await $$(Z,j,J);return}await $$($,j,J)}async function $$($,j,J){let{tag:Z,props:Q,children:G}=$;if(Z===I||Z===N||Z===M||Z===w||Z===S||Z===g||Z===u){await $$(Z(Q),j,J);return}if(Z===v){await $$(Z(Q),j,J);return}if(k($)){let X=F(Q.when);await A(X?jj($,X):Q.fallback,j,J);return}if(H($)){await ej($,j,J);return}if(h($)){await A(Jj($),j,J);return}if(D($)){let X=F(Q.when);await A(X?H$($,X):null,j,J);return}if(T($)){await $J($,j,J);return}if(R($)){let X=F(Q.when);await A(Zj($,X),j,J);return}if(m($)){let X=F(Q.component),B=Qj($,X);if(B)await $$(B,j,J);return}if(p($))return;if(typeof Z==="function"){let X=await Z(Q);await A(X,j,J);return}if(typeof Z==="string"){await cj(Z,Q,G,j,J);return}await A(G,j,J)}async function cj($,j,J,Z,Q){let G=lj(j),X=j.dangerouslySetInnerHTML;if(e$.has($)){let W=G?`<${$}${G}>`:`<${$}>`;Z.enqueue(Q.encode(W));return}let B=G?`<${$}${G}>`:`<${$}>`;if(Z.enqueue(Q.encode(B)),X&&typeof X.__html==="string")Z.enqueue(Q.encode(X.__html));else await A(J,Z,Q);Z.enqueue(Q.encode(`</${$}>`))}function lj($){let j="";for(let[J,Z]of Object.entries($)){if(J==="children"||J==="key"||J==="ref"||J==="dangerouslySetInnerHTML"||_(J))continue;let Q=F(Z);if(Q==null||Q===!1)continue;j+=f(J,Q)}return j}async function K($,j,J,Z,Q=!1){if($==null||typeof $==="boolean")return;if(typeof $==="string"){s(j,J,Y($));return}if(typeof $==="number"){s(j,J,String($));return}if($ instanceof O){s(j,J,$.value);return}if(L($)||z($)){let G=Z.textIndex++;s(j,J,`${q$(G)}${Y(String($.value))}${K$()}`);return}if(Array.isArray($)){for(let G of $)await K(G,j,J,Z);return}if($ instanceof Promise){await j$(await $,j,J,Z,Q);return}await j$($,j,J,Z,Q)}async function j$($,j,J,Z,Q){let{tag:G,props:X,children:B}=$;if(G===""){for(let W of B)await K(W,j,J,Z);return}if(G===I||G===N||G===M||G===w||G===S||G===g||G===u){await j$(G(X),j,J,Z,Q);return}if(G===v){await j$(G(X),j,J,Z,Q);return}if(k($)){let W=F(X.when);await K(W?jj($,W):X.fallback,j,J,Z,Q);return}if(H($)){await oj($,j,J,Z);return}if(h($)){await K(Jj($),j,J,Z,Q);return}if(D($)){let W=F(X.when);await K(W?H$($,W):null,j,J,Z,Q);return}if(T($)){await tj($,j,J,Z);return}if(R($)){let W=F(X.when);await K(Zj($,W),j,J,Z,Q);return}if(m($)){let W=F(X.component),U=Qj($,W);if(U)await j$(U,j,J,Z,Q);return}if(p($))return;if(typeof G==="function"){await $j(G,X,j,J,Z,!0);return}if(typeof G==="string"){await rj(G,X,B,j,J,Z,Q);return}await K(B,j,J,Z)}async function $j($,j,J,Z,Q,G){let X=X$(),B=e($,j,X);if(X)X.children.push(B);let W=P(B);try{let U=await $(j);await K(U,J,Z,Q,G)}finally{P(W)}}async function rj($,j,J,Z,Q,G,X){let B=nj(j,G,X),W=j.dangerouslySetInnerHTML;if(s(Z,Q,B?`<${$}${B}>`:`<${$}>`),e$.has($))return;if(W&&typeof W.__html==="string")s(Z,Q,W.__html);else for(let U of J)await K(U,Z,Q,G);s(Z,Q,`</${$}>`)}async function oj($,j,J,Z){let Q=$.props,G=F(Q.each);if(!Array.isArray(G)||typeof Q.children!=="function"){if(Q.fallback)await K(Q.fallback,j,J,Z);return}if(G.length===0){if(Q.fallback)await K(Q.fallback,j,J,Z);return}for(let X=0;X<G.length;X++)await K(Q.children(G[X],()=>X),j,J,Z)}async function tj($,j,J,Z){let Q=$.props,G=F(Q.each);if(!Array.isArray(G)||typeof Q.children!=="function"){if(Q.fallback)await K(Q.fallback,j,J,Z);return}if(G.length===0){if(Q.fallback)await K(Q.fallback,j,J,Z);return}for(let X=0;X<G.length;X++)await K(Q.children(()=>G[X],X),j,J,Z)}function nj($,j,J){let Z="";if(J)Z+=` ${B$}="${U$(j.componentIndex++)}"`;let Q=[];for(let[G,X]of Object.entries($)){if(G==="children"||G==="key"||G==="ref"||G==="dangerouslySetInnerHTML")continue;if(_(G)){Q.push(`${t(G)}:${j.eventIndex++}`);continue}let B=F(X);if(B==null||B===!1)continue;Z+=f(G,B)}if(Q.length>0)Z+=` ${W$}="${Q.join(",")}"`;return Z}function s($,j,J){$.enqueue(j.encode(J))}async function ej($,j,J){let Z=$.props,Q=F(Z.each);if(!Array.isArray(Q)||typeof Z.children!=="function"){if(Z.fallback)await A(Z.fallback,j,J);return}if(Q.length===0){if(Z.fallback)await A(Z.fallback,j,J);return}for(let G=0;G<Q.length;G++)await A(Z.children(Q[G],()=>G),j,J)}async function $J($,j,J){let Z=$.props,Q=F(Z.each);if(!Array.isArray(Q)||typeof Z.children!=="function"){if(Z.fallback)await A(Z.fallback,j,J);return}if(Q.length===0){if(Z.fallback)await A(Z.fallback,j,J);return}for(let G=0;G<Q.length;G++)await A(Z.children(()=>Q[G],G),j,J)}function jj($,j){let J=$.props.children??$.children;if(typeof J==="function")return J(j);return J}function Jj($){let j=$.props,J=Gj(j.children??$.children);for(let Z of J){let Q=JJ(Z);if(!Q)continue;let G=F(Q.props.when);if(G)return H$(Q,G)}return j.fallback}function H$($,j){let J=$.props.children??$.children;if(typeof J==="function")return J(j);return J}function Zj($,j){let J=$.props.children??$.children;if(typeof J==="function")return J(j);return J}function Qj($,j){if(typeof j!=="string"&&typeof j!=="function")return null;let{component:J,...Z}=$.props,Q=Gj(Z.children??$.children);return{tag:j,props:Z,children:Q}}function F($){return L($)||z($)?$.value:$}function Gj($){if($==null||typeof $==="boolean")return[];return Array.isArray($)?$:[$]}function jJ($){return $!=null&&typeof $==="object"&&"tag"in $}function JJ($){if(!jJ($))return null;if(D($))return $;return $.tag===b?b($.props):null}function Xj(){return{componentIndex:0,textIndex:0,eventIndex:0}}async function ZJ($,j){let J=Xj(),Z=j??{},Q=e($,Z,null),G=P(Q);try{let X=await $(Z);if(X&&typeof X==="object"&&"tag"in X)return a(X,J,!0);return V(X,J)}finally{P(G)}}async function QJ($){let j=Xj();return V($,j)}var GJ=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function V($,j){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return Y($);if(typeof $==="number")return String($);if($ instanceof O)return $.value;if(L($)||z($)){let J=$.value,Z=j.textIndex++;return`${q$(Z)}${Y(String(J))}${K$()}`}if(Array.isArray($))return $.map((J)=>V(J,j)).join("");if($ instanceof Promise)return"";if(typeof $==="object"&&"tag"in $)return a($,j,!1);return Y(String($))}function a($,j,J){let{tag:Z,props:Q,children:G}=$;if(Z==="")return G.map((X)=>V(X,j)).join("");if(Z===I||Z===N||Z===M||Z===w||Z===S||Z===g||Z===u)return a(Z(Q),j,J);if(Z===v)return a(Z(Q),j,J);if(k($)){let X=d(Q.when),B=X?qJ($,X):Q.fallback;return L$(B,j,J)}if(H($))return WJ($,j);if(h($))return L$(KJ($),j,J);if(D($)){let X=d(Q.when);return L$(X?Bj($,X):null,j,J)}if(T($))return UJ($,j);if(R($)){let X=d(Q.when);return L$(LJ($,X),j,J)}if(m($)){let X=d(Q.component),B=zJ($,X);return B?a(B,j,J):""}if(p($))return"";if(typeof Z==="function")return XJ(Z,Q,j);if(typeof Z==="string")return BJ(Z,Q,G,j,J);return G.map((X)=>V(X,j)).join("")}function XJ($,j,J){let Z=X$(),Q=e($,j,Z);if(Z)Z.children.push(Q);let G=P(Q);try{let X=$(j);if(X&&typeof X==="object"&&"tag"in X)return a(X,J,!0);return V(X,J)}finally{P(G)}}function BJ($,j,J,Z,Q){let G="";if(Q)G+=` ${B$}="${U$(Z.componentIndex++)}"`;let X=[];for(let[U,c]of Object.entries(j)){if(U==="children"||U==="key"||U==="ref"||U==="dangerouslySetInnerHTML")continue;if(_(U)){let Uj=t(U);X.push(`${Uj}:${Z.eventIndex++}`);continue}if(c==null||c===!1)continue;let T$=c;if(L(c)||z(c))T$=c.value;G+=f(U,T$)}if(X.length>0)G+=` ${W$}="${X.join(",")}"`;if(GJ.has($))return`<${$}${G}>`;let B=j.dangerouslySetInnerHTML;if(B&&typeof B.__html==="string")return`<${$}${G}>${B.__html}</${$}>`;let W=J.map((U)=>V(U,Z)).join("");return`<${$}${G}>${W}</${$}>`}function L$($,j,J){if(J&&$&&typeof $==="object"&&!Array.isArray($)&&"tag"in $)return a($,j,!0);return V($,j)}function WJ($,j){let J=$.props,Z=d(J.each);if(!Array.isArray(Z)||typeof J.children!=="function")return J.fallback?V(J.fallback,j):"";if(Z.length===0)return J.fallback?V(J.fallback,j):"";return Z.map((Q,G)=>V(J.children(Q,()=>G),j)).join("")}function UJ($,j){let J=$.props,Z=d(J.each);if(!Array.isArray(Z)||typeof J.children!=="function")return J.fallback?V(J.fallback,j):"";if(Z.length===0)return J.fallback?V(J.fallback,j):"";return Z.map((Q,G)=>V(J.children(()=>Q,G),j)).join("")}function qJ($,j){let J=$.props.children??$.children;if(typeof J==="function")return J(j);return J}function KJ($){let j=$.props,J=Wj(j.children??$.children);for(let Z of J){let Q=FJ(Z);if(!Q)continue;let G=d(Q.props.when);if(G)return Bj(Q,G)}return j.fallback}function Bj($,j){let J=$.props.children??$.children;if(typeof J==="function")return J(j);return J}function LJ($,j){let J=$.props.children??$.children;if(typeof J==="function")return J(j);return J}function zJ($,j){if(typeof j!=="string"&&typeof j!=="function")return null;let{component:J,...Z}=$.props,Q=Wj(Z.children??$.children);return{tag:j,props:Z,children:Q}}function d($){return L($)||z($)?$.value:$}function Wj($){if($==null||typeof $==="boolean")return[];return Array.isArray($)?$:[$]}function AJ($){return $!=null&&typeof $==="object"&&"tag"in $}function FJ($){if(!AJ($))return null;if(D($))return $;return $.tag===b?b($.props):null}export{sj as streamPage,dj as streamHydratablePage,aj as streamHydratableNode,q as renderToString,ZJ as renderToHydratableString,Tj as renderPage,QJ as renderNodeToHydratableString,kj as registerPage,Ej as isSlots,Hj as hasPage,t$ as getPage};
3
3
 
4
- //# debugId=B6A8C937376FF47C64756E2164756E21
4
+ //# debugId=1C00934D6E85922C64756E2164756E21
@@ -10,17 +10,17 @@
10
10
  "/**\n * SinwanJS Reactivity — Signal\n *\n * A signal is a reactive container for a single value.\n * Reading `.value` tracks the current effect as a subscriber.\n * Writing `.value` notifies all subscribers.\n *\n * Inspired by Vue 3 ref(), Solid signals, Preact signals.\n */\n\nimport { type Dep, track, trigger } from \"./effect.ts\";\n\n// ─── Signal interface ──────────────────────────────────────\n\nexport interface Signal<T> {\n /** Get or set the reactive value. Reading tracks; writing notifies. */\n value: T;\n\n /** Read the value without tracking dependencies. */\n peek(): T;\n\n /** Manually subscribe to changes. Returns an unsubscribe function. */\n subscribe(fn: (value: T) => void): () => void;\n}\n\n// Brand for type-checking\nconst SIGNAL_BRAND = Symbol(\"Sinwan:signal\");\n\n// ─── Implementation ────────────────────────────────────────\n\nclass SignalImpl<T> implements Signal<T>, Dep {\n [SIGNAL_BRAND] = true;\n\n subscribers = new Set<import(\"./effect.ts\").ReactiveEffect>();\n private _value: T;\n private _manualSubs = new Set<(value: T) => void>();\n\n constructor(initial: T) {\n this._value = initial;\n }\n\n get value(): T {\n track(this);\n return this._value;\n }\n\n set value(newValue: T) {\n if (Object.is(this._value, newValue)) return;\n this._value = newValue;\n trigger(this);\n\n // Notify manual subscribers\n for (const fn of this._manualSubs) {\n fn(newValue);\n }\n }\n\n peek(): T {\n return this._value;\n }\n\n subscribe(fn: (value: T) => void): () => void {\n this._manualSubs.add(fn);\n return () => {\n this._manualSubs.delete(fn);\n };\n }\n\n /**\n * toString() for interpolation in templates.\n */\n toString(): string {\n return String(this.value);\n }\n\n /**\n * valueOf() for numeric operations.\n */\n valueOf(): T {\n return this.value;\n }\n}\n\n// ─── Public API ────────────────────────────────────────────\n\n/**\n * Create a reactive signal.\n *\n * @example\n * const count = signal(0);\n * console.log(count.value); // 0\n *\n * effect(() => {\n * console.log(count.value); // re-runs when count changes\n * });\n *\n * count.value = 5; // triggers the effect\n */\nexport function signal<T>(initial: T): Signal<T> {\n return new SignalImpl(initial);\n}\n\n/**\n * Type guard: check if a value is a Signal.\n */\nexport function isSignal(value: unknown): value is Signal<unknown> {\n return (\n value != null && typeof value === \"object\" && SIGNAL_BRAND in (value as any)\n );\n}\n",
11
11
  "/**\n * SinwanJS Reactivity — Computed\n *\n * A computed is a derived reactive value that lazily re-evaluates\n * when its dependencies change. It caches the result and only\n * recomputes when actually read after a dependency has changed.\n *\n * Design: The computed does NOT use the scheduler for its own\n * re-evaluation. When a dependency changes, it marks itself dirty\n * and triggers downstream subscribers (which ARE scheduled).\n * The actual re-evaluation happens lazily on `.value` access.\n *\n * Inspired by Vue 3 computed(), Solid createMemo().\n */\n\nimport { type Dep, track, trigger, ReactiveEffect } from \"./effect.ts\";\n\n// ─── Computed interface ────────────────────────────────────\n\nexport interface Computed<T> {\n /** Read the computed value (lazy evaluation, cached). */\n readonly value: T;\n\n /** Read without tracking. */\n peek(): T;\n}\n\n// Brand for type-checking\nconst COMPUTED_BRAND = Symbol(\"Sinwan:computed\");\n\n// ─── Implementation ────────────────────────────────────────\n\nclass ComputedImpl<T> implements Computed<T>, Dep {\n [COMPUTED_BRAND] = true;\n\n subscribers = new Set<ReactiveEffect>();\n\n _value!: T;\n _dirty = true;\n _effect: ReactiveEffect;\n\n constructor(getter: () => T) {\n const self = this;\n\n // Internal effect solely for dependency tracking.\n // The fn wraps the getter — it writes to self._value as a side effect.\n this._effect = new ReactiveEffect(() => {\n self._value = getter();\n });\n\n // Override notify: don't schedule this effect via the scheduler.\n // Instead mark dirty and propagate to our own subscribers.\n this._effect.notify = function () {\n if (!self._dirty) {\n self._dirty = true;\n trigger(self);\n }\n };\n\n // Run once synchronously to establish deps and cache initial value\n this._effect.run();\n this._dirty = false;\n }\n\n get value(): T {\n track(this);\n\n if (this._dirty) {\n this._effect.run();\n this._dirty = false;\n }\n\n return this._value;\n }\n\n peek(): T {\n if (this._dirty) {\n this._effect.run();\n this._dirty = false;\n }\n return this._value;\n }\n\n /**\n * toString() for template interpolation.\n */\n toString(): string {\n return String(this.value);\n }\n\n /**\n * valueOf() for numeric operations.\n */\n valueOf(): T {\n return this.value;\n }\n}\n\n// ─── Public API ────────────────────────────────────────────\n\n/**\n * Create a computed reactive value.\n *\n * The getter function is tracked — when any signal it reads changes,\n * the computed is marked dirty and will re-evaluate on next `.value` read.\n *\n * @example\n * const count = signal(2);\n * const doubled = computed(() => count.value * 2);\n *\n * console.log(doubled.value); // 4\n *\n * count.value = 5;\n * console.log(doubled.value); // 10\n */\nexport function computed<T>(getter: () => T): Computed<T> {\n return new ComputedImpl(getter);\n}\n\n/**\n * Type guard: check if a value is a Computed.\n */\nexport function isComputed(value: unknown): value is Computed<unknown> {\n return (\n value != null &&\n typeof value === \"object\" &&\n COMPUTED_BRAND in (value as any)\n );\n}\n",
12
12
  "/// <reference lib=\"dom\" />\n\n/**\n * SinwanJS Client Renderer — DOM Operations\n *\n * Thin abstraction over native DOM APIs for testability\n * and potential future server-side DOM (e.g., happy-dom, linkedom).\n */\n\nexport interface DOMOps {\n createElement(tag: string): Element;\n createElementNS(namespace: string, tag: string): Element;\n createTextNode(text: string): Text;\n createComment(text: string): Comment;\n setAttribute(el: Element, key: string, value: string): void;\n removeAttribute(el: Element, key: string): void;\n setProperty(el: Element, key: string, value: unknown): void;\n insertBefore(parent: Node, child: Node, anchor: Node | null): void;\n appendChild(parent: Node, child: Node): void;\n remove(node: Node): void;\n setTextContent(node: Text, text: string): void;\n addEventListener(el: Element, event: string, handler: EventListener): void;\n removeEventListener(el: Element, event: string, handler: EventListener): void;\n parentNode(node: Node): Node | null;\n nextSibling(node: Node): Node | null;\n}\n\nfunction createDefaultDOMOps(): DOMOps {\n return {\n createElement(tag: string): Element {\n return document.createElement(tag);\n },\n\n createElementNS(namespace: string, tag: string): Element {\n return document.createElementNS(namespace, tag);\n },\n\n createTextNode(text: string): Text {\n return document.createTextNode(text);\n },\n\n createComment(text: string): Comment {\n return document.createComment(text);\n },\n\n setAttribute(el: Element, key: string, value: string): void {\n el.setAttribute(key, value);\n },\n\n removeAttribute(el: Element, key: string): void {\n el.removeAttribute(key);\n },\n\n setProperty(el: Element, key: string, value: unknown): void {\n (el as any)[key] = value;\n },\n\n insertBefore(parent: Node, child: Node, anchor: Node | null): void {\n parent.insertBefore(child, anchor);\n },\n\n appendChild(parent: Node, child: Node): void {\n parent.appendChild(child);\n },\n\n remove(node: Node): void {\n node.parentNode?.removeChild(node);\n },\n\n setTextContent(node: Text, text: string): void {\n node.data = text;\n },\n\n addEventListener(el: Element, event: string, handler: EventListener): void {\n el.addEventListener(event, handler);\n },\n\n removeEventListener(el: Element, event: string, handler: EventListener): void {\n el.removeEventListener(event, handler);\n },\n\n parentNode(node: Node): Node | null {\n return node.parentNode;\n },\n\n nextSibling(node: Node): Node | null {\n return node.nextSibling;\n },\n };\n}\n\nconst defaultDOMOps = createDefaultDOMOps();\n\n/**\n * Live DOM operations object used by the renderer.\n */\nexport const domOps: DOMOps = { ...defaultDOMOps };\n\nexport function setDOMOps(overrides: Partial<DOMOps>): void {\n Object.assign(domOps, overrides);\n}\n\nexport function resetDOMOps(): void {\n for (const key of Object.keys(domOps) as (keyof DOMOps)[]) {\n delete (domOps as any)[key];\n }\n Object.assign(domOps, defaultDOMOps);\n}\n",
13
- "/// <reference lib=\"dom\" />\n\n/**\n * SinwanJS Client Renderer — Event Binding\n *\n * Direct event binding (not delegation). Each handler is attached\n * directly to its target element for simplicity and easy hydration.\n *\n * Design decision: direct binding like Solid.js, not delegation like React.\n */\n\nimport { domOps } from \"./dom-ops.ts\";\nimport type { CleanupFn } from \"../reactivity/index.ts\";\n\n/**\n * Check if a prop key is an event handler (starts with \"on\").\n */\nexport function isEventProp(key: string): boolean {\n return key.length > 2 && key[0] === \"o\" && key[1] === \"n\" && key[2]! >= \"A\" && key[2]! <= \"Z\";\n}\n\n/**\n * Extract the DOM event name from a prop key.\n * e.g., \"onClick\" → \"click\", \"onMouseEnter\" → \"mouseenter\"\n */\nexport function toEventName(key: string): string {\n return key.slice(2).toLowerCase();\n}\n\n/**\n * Bind an event handler to an element.\n * Returns a cleanup function to remove the listener.\n */\nexport function bindEvent(\n el: Element,\n eventName: string,\n handler: EventListener,\n): CleanupFn {\n domOps.addEventListener(el, eventName, handler);\n return () => {\n domOps.removeEventListener(el, eventName, handler);\n };\n}\n\n/**\n * Bind all event props from an element's props object.\n * Returns an array of cleanup functions.\n */\nexport function bindEvents(\n el: Element,\n props: Record<string, unknown>,\n): CleanupFn[] {\n const cleanups: CleanupFn[] = [];\n\n for (const key of Object.keys(props)) {\n if (isEventProp(key)) {\n const handler = props[key];\n if (typeof handler === \"function\") {\n const eventName = toEventName(key);\n cleanups.push(bindEvent(el, eventName, handler as EventListener));\n }\n }\n }\n\n return cleanups;\n}\n",
13
+ "/// <reference lib=\"dom\" />\n\n/**\n * SinwanJS Client Renderer — Event Binding\n *\n * Direct event binding (not delegation). Each handler is attached\n * directly to its target element for simplicity and easy hydration.\n *\n * Design decision: direct binding like Solid.js, not delegation like React.\n */\n\nimport { domOps } from \"./dom-ops.ts\";\nimport type { CleanupFn } from \"../reactivity/index.ts\";\n\n/**\n * Check if a prop key is an event handler (starts with \"on\").\n */\nexport function isEventProp(key: string): boolean {\n // Matches onClick, onclick, onMouseMove, onmousemove, etc.\n return key.length > 2 && key.startsWith(\"on\");\n}\n\n/**\n * Extract the DOM event name from a prop key.\n * e.g., \"onClick\" → \"click\", \"onMouseEnter\" → \"mouseenter\"\n */\nexport function toEventName(key: string): string {\n return key.slice(2).toLowerCase();\n}\n\n/**\n * Bind an event handler to an element.\n * Returns a cleanup function to remove the listener.\n */\nexport function bindEvent(\n el: Element,\n eventName: string,\n handler: EventListener,\n): CleanupFn {\n domOps.addEventListener(el, eventName, handler);\n return () => {\n domOps.removeEventListener(el, eventName, handler);\n };\n}\n\n/**\n * Bind all event props from an element's props object.\n * Returns an array of cleanup functions.\n */\nexport function bindEvents(\n el: Element,\n props: Record<string, unknown>,\n): CleanupFn[] {\n const cleanups: CleanupFn[] = [];\n\n for (const key of Object.keys(props)) {\n if (isEventProp(key)) {\n const handler = props[key];\n if (typeof handler === \"function\") {\n const eventName = toEventName(key);\n cleanups.push(bindEvent(el, eventName, handler as EventListener));\n }\n }\n }\n\n return cleanups;\n}\n",
14
14
  "/**\n * SinwanJS Reactivity — Batch\n *\n * Batch multiple signal updates into a single synchronous flush.\n * Without batch(), each signal write schedules a microtask flush.\n * With batch(), all writes are collected and effects run once at the end.\n */\n\nimport { flushSync } from \"./scheduler.ts\";\n\nlet batchDepth = 0;\nlet batchScheduled = false;\n\n/**\n * Batch multiple signal writes so effects run only once.\n *\n * @example\n * const a = signal(1);\n * const b = signal(2);\n *\n * // Without batch — effect runs twice (once per signal change)\n * // With batch — effect runs once after both changes\n * batch(() => {\n * a.value = 10;\n * b.value = 20;\n * });\n */\nexport function batch(fn: () => void): void {\n batchDepth++;\n try {\n fn();\n } finally {\n batchDepth--;\n if (batchDepth === 0) {\n // Flush all pending effects synchronously\n flushSync();\n }\n }\n}\n\n/**\n * Returns true if currently inside a batch() call.\n */\nexport function isBatching(): boolean {\n return batchDepth > 0;\n}\n",
15
15
  "/**\n * SinwanJS Reactivity — Normalization\n *\n * Provides a unified way to handle different types of reactive inputs:\n * Signals, Computed values, and Function getters.\n */\n\nimport { isSignal, type Signal } from \"./signal.ts\";\nimport { isComputed, type Computed } from \"./computed.ts\";\n\n/**\n * Checks if a value is reactive (Signal, Computed, or Function getter).\n */\nexport function isReactive(value: unknown): value is Signal<any> | Computed<any> | Function {\n return (\n isSignal(value) ||\n isComputed(value) ||\n typeof value === \"function\"\n );\n}\n\n/**\n * Resolves the current value of a potentially reactive input.\n * If the input is a signal, computed, or function, it returns its current value.\n * Otherwise, it returns the input as-is.\n */\nexport function resolve<T>(value: T | Signal<T> | Computed<T> | (() => T)): T {\n if (isSignal(value) || isComputed(value)) {\n return (value as any).value;\n }\n if (typeof value === \"function\") {\n return (value as any)();\n }\n return value as T;\n}\n",
16
- "import type { Reactive, SinwanComponent, SinwanElement, SinwanNode } from \"../types.ts\";\nimport { computed } from \"../reactivity/computed.ts\";\nimport { resolve } from \"../reactivity/index.ts\";\n\nexport const SHOW_TYPE = Symbol.for(\"Sinwan.Show\");\nexport const FOR_TYPE = Symbol.for(\"Sinwan.For\");\nexport const SWITCH_TYPE = Symbol.for(\"Sinwan.Switch\");\nexport const MATCH_TYPE = Symbol.for(\"Sinwan.Match\");\nexport const INDEX_TYPE = Symbol.for(\"Sinwan.Index\");\nexport const KEY_TYPE = Symbol.for(\"Sinwan.Key\");\nexport const DYNAMIC_TYPE = Symbol.for(\"Sinwan.Dynamic\");\nexport const PORTAL_TYPE = Symbol.for(\"Sinwan.Portal\");\n\nexport interface ShowProps<T> {\n when: Reactive<T | false | null | undefined>;\n fallback?: SinwanNode;\n children?: SinwanNode | ((value: NonNullable<T>) => SinwanNode);\n}\n\nexport interface ForProps<T> {\n each: Reactive<readonly T[]>;\n key?: (item: T, index: number) => string | number | symbol;\n fallback?: SinwanNode;\n children?: (item: T, index: () => number) => SinwanNode;\n}\n\nexport interface SwitchProps {\n fallback?: SinwanNode;\n children?: SinwanNode | SinwanNode[];\n}\n\nexport interface MatchProps<T> {\n when: Reactive<T | false | null | undefined>;\n children?: SinwanNode | ((value: NonNullable<T>) => SinwanNode);\n}\n\nexport interface IndexProps<T> {\n each: Reactive<readonly T[]>;\n fallback?: SinwanNode;\n children?: (item: () => T, index: number) => SinwanNode;\n}\n\nexport interface KeyProps<T> {\n when: Reactive<T>;\n children?: SinwanNode | ((value: T) => SinwanNode);\n}\n\nexport type DynamicTag<P extends object = any> =\n | string\n | SinwanComponent<P>;\n\nexport type DynamicProps<P extends object = Record<string, unknown>> = P & {\n component: Reactive<DynamicTag<P> | null | undefined>;\n children?: SinwanNode;\n};\n\nexport interface VisibleProps {\n when: Reactive<unknown>;\n as?: string;\n style?: Reactive<Record<string, string | number | null | undefined> | string>;\n children?: SinwanNode;\n [key: string]: unknown;\n}\n\nexport interface PortalProps {\n mount?: Reactive<Node | string | (() => Node | null) | null | undefined>;\n children?: SinwanNode;\n}\n\nexport function Show<T>(props: ShowProps<T>): SinwanElement {\n return {\n tag: SHOW_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function For<T>(props: ForProps<T>): SinwanElement {\n return {\n tag: FOR_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Switch(props: SwitchProps): SinwanElement {\n return {\n tag: SWITCH_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Match<T>(props: MatchProps<T>): SinwanElement {\n return {\n tag: MATCH_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Index<T>(props: IndexProps<T>): SinwanElement {\n return {\n tag: INDEX_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Key<T>(props: KeyProps<T>): SinwanElement {\n return {\n tag: KEY_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Dynamic<P extends object = Record<string, unknown>>(\n props: DynamicProps<P>,\n): SinwanElement {\n return {\n tag: DYNAMIC_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Visible(props: VisibleProps): SinwanElement {\n const {\n when,\n as = \"span\",\n style,\n children,\n ...rest\n } = props;\n\n const visibleStyle = computed(() => {\n const base = readReactive(style);\n const visible = Boolean(readReactive(when));\n\n if (typeof base === \"string\") {\n return visible ? base : appendHiddenDisplay(base);\n }\n\n const styleObject =\n base && typeof base === \"object\"\n ? { ...(base as Record<string, string | number | null | undefined>) }\n : {};\n\n styleObject.display = visible ? styleObject.display : \"none\";\n return styleObject;\n });\n\n return {\n tag: as,\n props: {\n ...rest,\n style: visibleStyle,\n children,\n },\n children: normalizeChildren(children),\n };\n}\n\nexport function Portal(props: PortalProps): SinwanElement {\n return {\n tag: PORTAL_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function isShowElement(element: SinwanElement): boolean {\n return element.tag === SHOW_TYPE;\n}\n\nexport function isForElement(element: SinwanElement): boolean {\n return element.tag === FOR_TYPE;\n}\n\nexport function isSwitchElement(element: SinwanElement): boolean {\n return element.tag === SWITCH_TYPE;\n}\n\nexport function isMatchElement(element: SinwanElement): boolean {\n return element.tag === MATCH_TYPE;\n}\n\nexport function isIndexElement(element: SinwanElement): boolean {\n return element.tag === INDEX_TYPE;\n}\n\nexport function isKeyElement(element: SinwanElement): boolean {\n return element.tag === KEY_TYPE;\n}\n\nexport function isDynamicElement(element: SinwanElement): boolean {\n return element.tag === DYNAMIC_TYPE;\n}\n\nexport function isPortalElement(element: SinwanElement): boolean {\n return element.tag === PORTAL_TYPE;\n}\n\nfunction normalizeChildren(children: SinwanNode | undefined): SinwanNode[] {\n if (children == null || typeof children === \"boolean\") {\n return [];\n }\n return Array.isArray(children) ? children : [children];\n}\n\nfunction readReactive(value: unknown): unknown {\n return resolve(value as any);\n}\n\nfunction appendHiddenDisplay(style: string): string {\n const trimmed = style.trim();\n const separator = trimmed.length > 0 && !trimmed.endsWith(\";\") ? \";\" : \"\";\n return `${trimmed}${separator}display:none`;\n}\n",
17
- "/**\n * SinwanJS View Module — Renderer & Component Registry\n *\n * Renders Sinwan component trees to HTML strings.\n * Supports async components, caching, and streaming.\n */\n\nimport type {\n SinwanNode,\n SinwanElement,\n SinwanComponent,\n SinwanPage,\n SinwanSlots,\n} from \"../types.ts\";\nimport { HtmlEscapedString, escapeHtml } from \"../escaper.ts\";\nimport { renderServerAttribute } from \"./attribute-utils.ts\";\nimport { isSignal } from \"../reactivity/signal.ts\";\nimport { isComputed } from \"../reactivity/computed.ts\";\nimport { isEventProp } from \"../renderer/events.ts\";\nimport {\n Dynamic,\n For,\n Index,\n Key,\n Match,\n Portal,\n Switch,\n Visible,\n Show,\n isDynamicElement,\n isForElement,\n isIndexElement,\n isKeyElement,\n isMatchElement,\n isPortalElement,\n isShowElement,\n isSwitchElement,\n} from \"../component/control-flow.ts\";\n\n// Component cache - maps component identity to render function\nconst componentCache = new WeakMap<SinwanComponent<any>, boolean>();\n\n// Page registry\nconst pageRegistry = new Map<string, SinwanPage<any>>();\n\n/**\n * Register a page renderer by name.\n */\nexport function registerPage<D extends object = {}>(\n name: string,\n page: SinwanPage<D>,\n): void {\n pageRegistry.set(name, page);\n}\n\n/**\n * Get a registered page by name.\n */\nexport function getPage<D extends object = {}>(\n name: string,\n): SinwanPage<D> | undefined {\n return pageRegistry.get(name);\n}\n\n/**\n * Check if a page is registered.\n */\nexport function hasPage(name: string): boolean {\n return pageRegistry.has(name);\n}\n\n/**\n * Render a registered page to an HTML string.\n */\nexport async function renderPage<D extends object = {}>(\n name: string,\n data: D,\n): Promise<string> {\n const page = getPage<D>(name);\n if (!page) {\n throw new Error(`Page \"${name}\" not found in registry`);\n }\n\n const element = await page(data);\n return renderToString(element);\n}\n\n/**\n * Render a node tree to an HTML string.\n * Handles primitives, elements, components, and arrays.\n */\nexport async function renderToString(node: SinwanNode): Promise<string> {\n // Handle null/undefined/boolean\n if (node == null || typeof node === \"boolean\") {\n return \"\";\n }\n\n // Handle strings (escape them)\n if (typeof node === \"string\") {\n return escapeHtml(node);\n }\n\n // Handle numbers\n if (typeof node === \"number\") {\n return String(node);\n }\n\n // Handle pre-escaped HTML\n if (node instanceof HtmlEscapedString) {\n return node.value;\n }\n\n // Handle reactive containers — read current value and render as text\n if (isSignal(node) || isComputed(node)) {\n return escapeHtml(String((node as any).value));\n }\n\n // Handle arrays - render each child and concatenate\n if (Array.isArray(node)) {\n const results = await Promise.all(\n node.map((child) => renderToString(child)),\n );\n return results.join(\"\");\n }\n\n // Handle promises (async components)\n if (node instanceof Promise) {\n return renderElement(await node);\n }\n\n // Handle elements\n return renderElement(node as SinwanElement);\n}\n\n/**\n * Render an element to HTML string.\n */\nasync function renderElement(element: SinwanElement): Promise<string> {\n const { tag, props, children } = element;\n\n if (\n tag === Show ||\n tag === For ||\n tag === Switch ||\n tag === Index ||\n tag === Key ||\n tag === Dynamic ||\n tag === Portal\n ) {\n return renderElement((tag as Function)(props));\n }\n\n if (tag === Visible) {\n return renderElement((tag as Function)(props));\n }\n\n if (isShowElement(element)) {\n const when = readReactive(props.when);\n return renderToString(\n when ? resolveShowChildren(element, when) : props.fallback as SinwanNode,\n );\n }\n\n if (isForElement(element)) {\n return renderForElement(element);\n }\n\n if (isSwitchElement(element)) {\n return renderToString(resolveSwitchContent(element));\n }\n\n if (isMatchElement(element)) {\n const when = readReactive(props.when);\n return renderToString(when ? resolveMatchChildren(element, when) : null);\n }\n\n if (isIndexElement(element)) {\n return renderIndexElement(element);\n }\n\n if (isKeyElement(element)) {\n const key = readReactive(props.when);\n return renderToString(resolveKeyChildren(element, key));\n }\n\n if (isDynamicElement(element)) {\n const tag = readReactive(props.component);\n const dynamic = createDynamicElement(element, tag);\n return dynamic ? renderElement(dynamic) : \"\";\n }\n\n if (isPortalElement(element)) {\n return \"\";\n }\n\n // Handle functional components\n if (typeof tag === \"function\") {\n const result = await tag(props);\n return renderToString(result);\n }\n\n // Handle intrinsic HTML elements\n if (typeof tag === \"string\") {\n return renderIntrinsicElement(tag, props, children);\n }\n\n // Fallback - shouldn't happen with valid JSX\n return renderToString(children);\n}\n\n// Void elements that don't have closing tags\nconst VOID_ELEMENTS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\n/**\n * Render an intrinsic HTML element.\n */\nasync function renderIntrinsicElement(\n tag: string,\n props: Record<string, unknown>,\n children: SinwanNode[],\n): Promise<string> {\n const attrs = renderAttributes(props);\n\n // Void elements have no children and no closing tag\n if (VOID_ELEMENTS.has(tag)) {\n return attrs ? `<${tag}${attrs}>` : `<${tag}>`;\n }\n\n // Render children (handles dangerouslySetInnerHTML)\n const childrenHtml = await renderChildren(children, props);\n\n // Build element\n return attrs\n ? `<${tag}${attrs}>${childrenHtml}</${tag}>`\n : `<${tag}>${childrenHtml}</${tag}>`;\n}\n\n/**\n * Render HTML attributes from props.\n */\nfunction renderAttributes(props: Record<string, unknown>): string {\n let attrs = \"\";\n\n for (const [key, value] of Object.entries(props)) {\n // Skip children and special props\n if (\n key === \"children\" ||\n key === \"key\" ||\n key === \"ref\" ||\n key === \"dangerouslySetInnerHTML\" ||\n isEventProp(key)\n ) {\n continue;\n }\n\n const resolvedValue = readReactive(value);\n\n // Skip null/undefined/false values\n if (resolvedValue == null || resolvedValue === false) continue;\n\n attrs += renderServerAttribute(key, resolvedValue);\n }\n\n return attrs;\n}\n\n/**\n * Render children, with special handling for dangerouslySetInnerHTML.\n */\nasync function renderChildren(\n children: SinwanNode[],\n props: Record<string, unknown>,\n): Promise<string> {\n // Check for dangerous inner HTML\n const dangerous = props.dangerouslySetInnerHTML as\n | { __html?: string }\n | undefined;\n if (dangerous && typeof dangerous.__html === \"string\") {\n return dangerous.__html; // Trust the HTML (user explicitly marked safe)\n }\n\n return renderToString(children);\n}\n\n// Wire up dangerouslySetInnerHTML handling by patching renderIntrinsicElement\nconst originalRenderIntrinsic = renderIntrinsicElement;\n\n/**\n * Check if children is a slots object (named slots).\n */\nexport function isSlots(children: unknown): children is SinwanSlots {\n return (\n children != null &&\n typeof children === \"object\" &&\n !Array.isArray(children) &&\n !(children instanceof HtmlEscapedString)\n );\n}\n\nasync function renderForElement(element: SinwanElement): Promise<string> {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: unknown, index: () => number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n return props.fallback ? renderToString(props.fallback) : \"\";\n }\n\n if (each.length === 0) {\n return props.fallback ? renderToString(props.fallback) : \"\";\n }\n\n const rendered = await Promise.all(\n each.map((item, index) => renderToString(props.children!(item, () => index))),\n );\n return rendered.join(\"\");\n}\n\nasync function renderIndexElement(element: SinwanElement): Promise<string> {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: () => unknown, index: number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n return props.fallback ? renderToString(props.fallback) : \"\";\n }\n\n if (each.length === 0) {\n return props.fallback ? renderToString(props.fallback) : \"\";\n }\n\n const rendered = await Promise.all(\n each.map((item, index) => renderToString(props.children!(() => item, index))),\n );\n return rendered.join(\"\");\n}\n\nfunction resolveSwitchContent(element: SinwanElement): SinwanNode {\n const props = element.props as { fallback?: SinwanNode; children?: SinwanNode };\n const children = normalizeContent(props.children ?? element.children);\n\n for (const child of children) {\n const match = getMatchElement(child);\n if (!match) {\n continue;\n }\n\n const when = readReactive((match.props as any).when);\n if (when) {\n return resolveMatchChildren(match, when);\n }\n }\n\n return props.fallback;\n}\n\nfunction resolveMatchChildren(element: SinwanElement, value: unknown): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction resolveKeyChildren(element: SinwanElement, value: unknown): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction createDynamicElement(element: SinwanElement, tag: unknown): SinwanElement | null {\n if (typeof tag !== \"string\" && typeof tag !== \"function\") {\n return null;\n }\n\n const { component, ...props } = element.props as Record<string, unknown>;\n const children = normalizeContent(props.children ?? element.children);\n\n return {\n tag: tag as SinwanElement[\"tag\"],\n props,\n children,\n };\n}\n\nfunction resolveShowChildren(element: SinwanElement, value: unknown): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction readReactive(value: unknown): unknown {\n return isSignal(value) || isComputed(value) ? (value as any).value : value;\n}\n\nfunction normalizeContent(content: unknown): SinwanNode[] {\n if (content == null || typeof content === \"boolean\") {\n return [];\n }\n return Array.isArray(content) ? content : [content as SinwanNode];\n}\n\nfunction isElementLike(value: unknown): value is SinwanElement {\n return value != null && typeof value === \"object\" && \"tag\" in value;\n}\n\nfunction getMatchElement(value: unknown): SinwanElement | null {\n if (!isElementLike(value)) {\n return null;\n }\n if (isMatchElement(value)) {\n return value;\n }\n return value.tag === Match ? Match(value.props as any) : null;\n}\n",
18
- "/**\n * SinwanJS Component Runtime — Instance Management\n *\n * Each component rendered on the client gets a ComponentInstance\n * that tracks its lifecycle hooks, effects, parent/child tree,\n * and provide/inject context.\n *\n * A global `currentInstance` stack lets lifecycle hooks (onMounted, etc.)\n * register themselves during setup or synchronous lifecycle callbacks —\n * same pattern as Vue's getCurrentInstance.\n */\n\nimport type { SinwanComponent } from \"../types.ts\";\nimport type { MountedNode } from \"../renderer/types.ts\";\nimport type { CleanupFn } from \"../reactivity/index.ts\";\nimport { nextTick } from \"../reactivity/scheduler.ts\";\n\n// ─── ComponentInstance ─────────────────────────────────────\n\nlet uidCounter = 0;\n\nexport interface ComponentInstance {\n /** Unique identifier for this instance. */\n uid: number;\n\n /** The component definition (setup function). */\n component: SinwanComponent<any>;\n\n /** Props passed to this component. */\n props: Record<string, any>;\n\n /** The rendered DOM subtree (set after render). */\n element: MountedNode | null;\n\n /** Parent instance in the component tree. */\n parent: ComponentInstance | null;\n\n /** Child component instances. */\n children: ComponentInstance[];\n\n /** All effect dispose functions owned by this component. */\n effects: CleanupFn[];\n\n // ─── Lifecycle hook queues ────────────────────────────\n\n /** Callbacks to fire after the component is mounted to DOM. */\n _mountedHooks: (() => void)[];\n\n /** Callbacks to fire when the component is unmounted. */\n _unmountedHooks: (() => void)[];\n\n /** Callbacks to fire after any reactive update in this component. */\n _updatedHooks: (() => void)[];\n\n /** Error handler callbacks. */\n _errorHooks: ((err: Error) => void)[];\n\n // ─── Provide/Inject context ───────────────────────────\n\n /** Values provided by this instance (for inject in children). */\n provides: Record<string | symbol, unknown>;\n\n // ─── State flags ──────────────────────────────────────\n\n isMounted: boolean;\n isUnmounted: boolean;\n}\n\n/**\n * Create a fresh ComponentInstance.\n */\nexport function createComponentInstance(\n component: SinwanComponent<any>,\n props: Record<string, any>,\n parent: ComponentInstance | null,\n): ComponentInstance {\n return {\n uid: uidCounter++,\n component,\n props,\n element: null,\n parent,\n children: [],\n effects: [],\n _mountedHooks: [],\n _unmountedHooks: [],\n _updatedHooks: [],\n _errorHooks: [],\n // Inherit parent's provides (prototype chain for lookup)\n provides: parent ? Object.create(parent.provides) : Object.create(null),\n isMounted: false,\n isUnmounted: false,\n };\n}\n\n// ─── Current instance stack ────────────────────────────────\n\nlet currentInstance: ComponentInstance | null = null;\n\n/**\n * Get the currently active component instance.\n * Used by lifecycle hooks to register themselves.\n */\nexport function getCurrentInstance(): ComponentInstance | null {\n return currentInstance;\n}\n\n/**\n * Set the current instance (called by renderer before setup).\n * Returns the previous instance for restoration.\n */\nexport function setCurrentInstance(\n instance: ComponentInstance | null,\n): ComponentInstance | null {\n const prev = currentInstance;\n currentInstance = instance;\n return prev;\n}\n\n/**\n * Run a function with `instance` as the current component instance.\n * Automatically restores the previous instance when done.\n */\nexport function withInstance<T>(instance: ComponentInstance, fn: () => T): T {\n const prev = setCurrentInstance(instance);\n try {\n return fn();\n } finally {\n setCurrentInstance(prev);\n }\n}\n\n// ─── Lifecycle execution ───────────────────────────────────\n\n/**\n * Fire all onMounted hooks for an instance and its children (depth-first).\n */\nexport function fireMountedHooks(instance: ComponentInstance): void {\n if (instance.isUnmounted) {\n return;\n }\n\n // Children first (bottom-up, like Vue)\n for (const child of instance.children) {\n fireMountedHooks(child);\n }\n\n if (!instance.isMounted) {\n instance.isMounted = true;\n for (const hook of instance._mountedHooks) {\n hook();\n }\n }\n}\n\n/**\n * Fire all onUnmounted hooks and dispose all effects for an instance\n * and its children (depth-first, children first).\n */\nexport function fireUnmountedHooks(instance: ComponentInstance): void {\n // Children first\n for (const child of instance.children) {\n fireUnmountedHooks(child);\n }\n\n if (instance.isMounted && !instance.isUnmounted) {\n instance.isUnmounted = true;\n instance.isMounted = false;\n\n // Fire unmounted hooks\n for (const hook of instance._unmountedHooks) {\n hook();\n }\n\n // Dispose all effects owned by this component\n for (const dispose of instance.effects) {\n dispose();\n }\n instance.effects.length = 0;\n }\n}\n\n/**\n * Fire onUpdated hooks for the current instance.\n */\nexport function fireUpdatedHooks(instance: ComponentInstance): void {\n for (const hook of instance._updatedHooks) {\n hook();\n }\n}\n\nconst queuedUpdatedHooks = new Set<ComponentInstance>();\n\n/**\n * Queue onUpdated hooks to run after the current reactive flush.\n * Multiple DOM effects in the same flush produce one updated callback.\n */\nexport function queueUpdatedHooks(instance: ComponentInstance | null): void {\n if (\n !instance ||\n !instance.isMounted ||\n instance.isUnmounted ||\n instance._updatedHooks.length === 0 ||\n queuedUpdatedHooks.has(instance)\n ) {\n return;\n }\n\n queuedUpdatedHooks.add(instance);\n nextTick(() => {\n queuedUpdatedHooks.delete(instance);\n if (instance.isMounted && !instance.isUnmounted) {\n fireUpdatedHooks(instance);\n }\n });\n}\n\n/**\n * Handle an error in the component tree — walks up to find an error handler.\n */\nexport function handleComponentError(\n instance: ComponentInstance,\n err: Error,\n): void {\n let current: ComponentInstance | null = instance;\n while (current) {\n if (current._errorHooks.length > 0) {\n for (const hook of current._errorHooks) {\n hook(err);\n }\n return;\n }\n current = current.parent;\n }\n // No handler found — re-throw\n console.error(\"[Sinwan] Unhandled component error:\", err);\n}\n",
16
+ "import type { Reactive, SinwanComponent, SinwanElement, SinwanNode } from \"../types.ts\";\nimport { computed } from \"../reactivity/computed.ts\";\nimport { resolve } from \"../reactivity/index.ts\";\n\nexport const SHOW_TYPE = Symbol.for(\"Sinwan.Show\");\nexport const FOR_TYPE = Symbol.for(\"Sinwan.For\");\nexport const SWITCH_TYPE = Symbol.for(\"Sinwan.Switch\");\nexport const MATCH_TYPE = Symbol.for(\"Sinwan.Match\");\nexport const INDEX_TYPE = Symbol.for(\"Sinwan.Index\");\nexport const KEY_TYPE = Symbol.for(\"Sinwan.Key\");\nexport const DYNAMIC_TYPE = Symbol.for(\"Sinwan.Dynamic\");\nexport const PORTAL_TYPE = Symbol.for(\"Sinwan.Portal\");\n\nexport interface ShowProps<T> {\n when: Reactive<T | false | null | undefined>;\n fallback?: SinwanNode;\n children?: SinwanNode | ((value: NonNullable<T>) => SinwanNode);\n}\n\nexport interface ForProps<T> {\n each: Reactive<readonly T[]>;\n key?: (item: T, index: number) => string | number | symbol;\n fallback?: SinwanNode;\n children?: (item: T, index: () => number) => SinwanNode;\n}\n\nexport interface SwitchProps {\n fallback?: SinwanNode;\n children?: SinwanNode | SinwanNode[];\n}\n\nexport interface MatchProps<T> {\n when: Reactive<T | false | null | undefined>;\n children?: SinwanNode | ((value: NonNullable<T>) => SinwanNode);\n}\n\nexport interface IndexProps<T> {\n each: Reactive<readonly T[]>;\n fallback?: SinwanNode;\n children?: (item: () => T, index: number) => SinwanNode;\n}\n\nexport interface KeyProps<T> {\n when: Reactive<T>;\n children?: SinwanNode | ((value: T) => SinwanNode);\n}\n\nexport type DynamicTag<P extends object = any> =\n | string\n | SinwanComponent<P>;\n\nexport type DynamicProps<P extends object = Record<string, unknown>> = P & {\n component: Reactive<DynamicTag<P> | null | undefined>;\n children?: SinwanNode;\n};\n\nexport interface VisibleProps {\n when: Reactive<unknown>;\n as?: string;\n style?: Reactive<\n Record<string, string | number | null | undefined> | string | null | undefined\n >;\n children?: SinwanNode;\n [key: string]: unknown;\n}\n\nexport interface PortalProps {\n mount?: Reactive<Node | string | (() => Node | null) | null | undefined>;\n children?: SinwanNode;\n}\n\nexport function Show<T>(props: ShowProps<T>): SinwanElement {\n return {\n tag: SHOW_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function For<T>(props: ForProps<T>): SinwanElement {\n return {\n tag: FOR_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Switch(props: SwitchProps): SinwanElement {\n return {\n tag: SWITCH_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Match<T>(props: MatchProps<T>): SinwanElement {\n return {\n tag: MATCH_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Index<T>(props: IndexProps<T>): SinwanElement {\n return {\n tag: INDEX_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Key<T>(props: KeyProps<T>): SinwanElement {\n return {\n tag: KEY_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Dynamic<P extends object = Record<string, unknown>>(\n props: DynamicProps<P>,\n): SinwanElement {\n return {\n tag: DYNAMIC_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function Visible(props: VisibleProps): SinwanElement {\n const {\n when,\n as = \"span\",\n style,\n children,\n ...rest\n } = props;\n\n const visibleStyle = computed(() => {\n const base = readReactive(style);\n const visible = Boolean(readReactive(when));\n\n if (typeof base === \"string\") {\n return visible ? base : appendHiddenDisplay(base);\n }\n\n const styleObject =\n base && typeof base === \"object\"\n ? { ...(base as Record<string, string | number | null | undefined>) }\n : {};\n\n styleObject.display = visible ? styleObject.display : \"none\";\n return styleObject;\n });\n\n return {\n tag: as,\n props: {\n ...rest,\n style: visibleStyle,\n children,\n },\n children: normalizeChildren(children),\n };\n}\n\nexport function Portal(props: PortalProps): SinwanElement {\n return {\n tag: PORTAL_TYPE,\n props: props as unknown as Record<string, unknown>,\n children: [],\n };\n}\n\nexport function isElementLike(value: unknown): value is SinwanElement {\n return value != null && typeof value === \"object\" && \"tag\" in value;\n}\n\nexport function isShowElement(element: SinwanElement): boolean {\n return element.tag === SHOW_TYPE;\n}\n\nexport function isForElement(element: SinwanElement): boolean {\n return element.tag === FOR_TYPE;\n}\n\nexport function isSwitchElement(element: SinwanElement): boolean {\n return element.tag === SWITCH_TYPE;\n}\n\nexport function isMatchElement(element: SinwanElement): boolean {\n return element.tag === MATCH_TYPE;\n}\n\nexport function isIndexElement(element: SinwanElement): boolean {\n return element.tag === INDEX_TYPE;\n}\n\nexport function isKeyElement(element: SinwanElement): boolean {\n return element.tag === KEY_TYPE;\n}\n\nexport function isDynamicElement(element: SinwanElement): boolean {\n return element.tag === DYNAMIC_TYPE;\n}\n\nexport function isPortalElement(element: SinwanElement): boolean {\n return element.tag === PORTAL_TYPE;\n}\n\nexport function resolveSwitchContent(element: SinwanElement): SinwanNode {\n const props = element.props as { fallback?: SinwanNode; children?: SinwanNode };\n const children = normalizeContent(props.children ?? element.children);\n\n const match = findTruthyMatch(children);\n return match !== undefined ? match : props.fallback;\n}\n\nfunction findTruthyMatch(nodes: SinwanNode[]): SinwanNode | undefined {\n for (const node of nodes) {\n if (node == null || typeof node === \"boolean\") continue;\n\n if (Array.isArray(node)) {\n const match = findTruthyMatch(node);\n if (match !== undefined) return match;\n continue;\n }\n\n if (isElementLike(node)) {\n let element = node;\n\n // Expand functional control flow components if needed\n if (typeof element.tag === \"function\") {\n const tag = element.tag;\n if (\n tag === Match ||\n tag === Show ||\n tag === For ||\n tag === Index ||\n tag === Key ||\n tag === Switch\n ) {\n element = (tag as Function)(element.props);\n }\n }\n\n if (isMatchElement(element)) {\n const when = readReactive((element.props as any).when);\n if (when) {\n return resolveMatchChildren(element, when);\n }\n } else if (isShowElement(element)) {\n const when = readReactive((element.props as any).when);\n if (when) {\n const content = resolveShowChildren(element, when);\n const match = findTruthyMatch(normalizeContent(content));\n if (match !== undefined) return match;\n } else if ((element.props as any).fallback) {\n const match = findTruthyMatch(\n normalizeContent((element.props as any).fallback),\n );\n if (match !== undefined) return match;\n }\n } else if (isForElement(element)) {\n const props = element.props as any;\n const items = readReactive(props.each);\n if (Array.isArray(items)) {\n for (let i = 0; i < items.length; i++) {\n const child = props.children(items[i], () => i);\n const match = findTruthyMatch(normalizeContent(child));\n if (match !== undefined) return match;\n }\n }\n } else if (isIndexElement(element)) {\n const props = element.props as any;\n const items = readReactive(props.each);\n if (Array.isArray(items)) {\n for (let i = 0; i < items.length; i++) {\n const child = props.children(() => items[i], i);\n const match = findTruthyMatch(normalizeContent(child));\n if (match !== undefined) return match;\n }\n }\n } else if (isKeyElement(element)) {\n const key = readReactive((element.props as any).when);\n const child = resolveKeyChildren(element, key);\n const match = findTruthyMatch(normalizeContent(child));\n if (match !== undefined) return match;\n }\n }\n }\n return undefined;\n}\n\nexport function resolveMatchChildren(\n element: SinwanElement,\n value: unknown,\n): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nexport function resolveShowChildren(\n element: SinwanElement,\n value: unknown,\n): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nexport function resolveKeyChildren(\n element: SinwanElement,\n value: unknown,\n): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction normalizeContent(content: unknown): SinwanNode[] {\n if (content == null || typeof content === \"boolean\") {\n return [];\n }\n return Array.isArray(content) ? content : [content as SinwanNode];\n}\n\nfunction normalizeChildren(children: SinwanNode | undefined): SinwanNode[] {\n if (children == null || typeof children === \"boolean\") {\n return [];\n }\n return Array.isArray(children) ? children : [children];\n}\n\nfunction readReactive(value: unknown): unknown {\n return resolve(value as any);\n}\n\nfunction appendHiddenDisplay(style: string): string {\n const trimmed = style.trim();\n const separator = trimmed.length > 0 && !trimmed.endsWith(\";\") ? \";\" : \"\";\n return `${trimmed}${separator}display:none`;\n}\n",
17
+ "/**\n * SinwanJS View Module — Renderer & Component Registry\n *\n * Renders Sinwan component trees to HTML strings.\n * Supports async components, caching, and streaming.\n */\n\nimport type {\n SinwanNode,\n SinwanElement,\n SinwanComponent,\n SinwanPage,\n SinwanSlots,\n} from \"../types.ts\";\nimport { HtmlEscapedString, escapeHtml } from \"../escaper.ts\";\nimport { renderServerAttribute } from \"./attribute-utils.ts\";\nimport { isSignal } from \"../reactivity/signal.ts\";\nimport { isComputed } from \"../reactivity/computed.ts\";\nimport { isEventProp } from \"../renderer/events.ts\";\nimport {\n Dynamic,\n For,\n Index,\n Key,\n Match,\n Portal,\n Switch,\n Visible,\n Show,\n isDynamicElement,\n isForElement,\n isIndexElement,\n isKeyElement,\n isMatchElement,\n isPortalElement,\n isShowElement,\n isSwitchElement,\n resolveKeyChildren,\n resolveMatchChildren,\n resolveShowChildren,\n resolveSwitchContent,\n} from \"../component/control-flow.ts\";\n\n// Component cache - maps component identity to render function\nconst componentCache = new WeakMap<SinwanComponent<any>, boolean>();\n\n// Page registry\nconst pageRegistry = new Map<string, SinwanPage<any>>();\n\n/**\n * Register a page renderer by name.\n */\nexport function registerPage<D extends object = {}>(\n name: string,\n page: SinwanPage<D>,\n): void {\n pageRegistry.set(name, page);\n}\n\n/**\n * Get a registered page by name.\n */\nexport function getPage<D extends object = {}>(\n name: string,\n): SinwanPage<D> | undefined {\n return pageRegistry.get(name);\n}\n\n/**\n * Check if a page is registered.\n */\nexport function hasPage(name: string): boolean {\n return pageRegistry.has(name);\n}\n\n/**\n * Render a registered page to an HTML string.\n */\nexport async function renderPage<D extends object = {}>(\n name: string,\n data: D,\n): Promise<string> {\n const page = getPage<D>(name);\n if (!page) {\n throw new Error(`Page \"${name}\" not found in registry`);\n }\n\n const element = await page(data);\n return renderToString(element);\n}\n\n/**\n * Render a node tree to an HTML string.\n * Handles primitives, elements, components, and arrays.\n */\nexport async function renderToString(node: SinwanNode): Promise<string> {\n // Handle null/undefined/boolean\n if (node == null || typeof node === \"boolean\") {\n return \"\";\n }\n\n // Handle strings (escape them)\n if (typeof node === \"string\") {\n return escapeHtml(node);\n }\n\n // Handle numbers\n if (typeof node === \"number\") {\n return String(node);\n }\n\n // Handle pre-escaped HTML\n if (node instanceof HtmlEscapedString) {\n return node.value;\n }\n\n // Handle reactive containers — read current value and render as text\n if (isSignal(node) || isComputed(node)) {\n return escapeHtml(String((node as any).value));\n }\n\n // Handle arrays - render each child and concatenate\n if (Array.isArray(node)) {\n const results = await Promise.all(\n node.map((child) => renderToString(child)),\n );\n return results.join(\"\");\n }\n\n // Handle promises (async components)\n if (node instanceof Promise) {\n return renderElement(await node);\n }\n\n // Handle elements\n return renderElement(node as SinwanElement);\n}\n\n/**\n * Render an element to HTML string.\n */\nasync function renderElement(element: SinwanElement): Promise<string> {\n const { tag, props, children } = element;\n\n if (\n tag === Show ||\n tag === For ||\n tag === Switch ||\n tag === Index ||\n tag === Key ||\n tag === Dynamic ||\n tag === Portal\n ) {\n return renderElement((tag as Function)(props));\n }\n\n if (tag === Visible) {\n return renderElement((tag as Function)(props));\n }\n\n if (isShowElement(element)) {\n const when = readReactive(props.when);\n return renderToString(\n when ? resolveShowChildren(element, when) : props.fallback as SinwanNode,\n );\n }\n\n if (isForElement(element)) {\n return renderForElement(element);\n }\n\n if (isSwitchElement(element)) {\n return renderToString(resolveSwitchContent(element));\n }\n\n if (isMatchElement(element)) {\n const when = readReactive(props.when);\n return renderToString(when ? resolveMatchChildren(element, when) : null);\n }\n\n if (isIndexElement(element)) {\n return renderIndexElement(element);\n }\n\n if (isKeyElement(element)) {\n const key = readReactive(props.when);\n return renderToString(resolveKeyChildren(element, key));\n }\n\n if (isDynamicElement(element)) {\n const tag = readReactive(props.component);\n const dynamic = createDynamicElement(element, tag);\n return dynamic ? renderElement(dynamic) : \"\";\n }\n\n if (isPortalElement(element)) {\n return \"\";\n }\n\n // Handle functional components\n if (typeof tag === \"function\") {\n const result = await tag(props);\n return renderToString(result);\n }\n\n // Handle intrinsic HTML elements\n if (typeof tag === \"string\") {\n return renderIntrinsicElement(tag, props, children);\n }\n\n // Fallback - shouldn't happen with valid JSX\n return renderToString(children);\n}\n\n// Void elements that don't have closing tags\nconst VOID_ELEMENTS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\n/**\n * Render an intrinsic HTML element.\n */\nasync function renderIntrinsicElement(\n tag: string,\n props: Record<string, unknown>,\n children: SinwanNode[],\n): Promise<string> {\n const attrs = renderAttributes(props);\n\n // Void elements have no children and no closing tag\n if (VOID_ELEMENTS.has(tag)) {\n return attrs ? `<${tag}${attrs}>` : `<${tag}>`;\n }\n\n // Render children (handles dangerouslySetInnerHTML)\n const childrenHtml = await renderChildren(children, props);\n\n // Build element\n return attrs\n ? `<${tag}${attrs}>${childrenHtml}</${tag}>`\n : `<${tag}>${childrenHtml}</${tag}>`;\n}\n\n/**\n * Render HTML attributes from props.\n */\nfunction renderAttributes(props: Record<string, unknown>): string {\n let attrs = \"\";\n\n for (const [key, value] of Object.entries(props)) {\n // Skip children and special props\n if (\n key === \"children\" ||\n key === \"key\" ||\n key === \"ref\" ||\n key === \"dangerouslySetInnerHTML\" ||\n isEventProp(key)\n ) {\n continue;\n }\n\n const resolvedValue = readReactive(value);\n\n // Skip null/undefined/false values\n if (resolvedValue == null || resolvedValue === false) continue;\n\n attrs += renderServerAttribute(key, resolvedValue);\n }\n\n return attrs;\n}\n\n/**\n * Render children, with special handling for dangerouslySetInnerHTML.\n */\nasync function renderChildren(\n children: SinwanNode[],\n props: Record<string, unknown>,\n): Promise<string> {\n // Check for dangerous inner HTML\n const dangerous = props.dangerouslySetInnerHTML as\n | { __html?: string }\n | undefined;\n if (dangerous && typeof dangerous.__html === \"string\") {\n return dangerous.__html; // Trust the HTML (user explicitly marked safe)\n }\n\n return renderToString(children);\n}\n\n// Wire up dangerouslySetInnerHTML handling by patching renderIntrinsicElement\nconst originalRenderIntrinsic = renderIntrinsicElement;\n\n/**\n * Check if children is a slots object (named slots).\n */\nexport function isSlots(children: unknown): children is SinwanSlots {\n return (\n children != null &&\n typeof children === \"object\" &&\n !Array.isArray(children) &&\n !(children instanceof HtmlEscapedString)\n );\n}\n\nasync function renderForElement(element: SinwanElement): Promise<string> {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: unknown, index: () => number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n return props.fallback ? renderToString(props.fallback) : \"\";\n }\n\n if (each.length === 0) {\n return props.fallback ? renderToString(props.fallback) : \"\";\n }\n\n const rendered = await Promise.all(\n each.map((item, index) => renderToString(props.children!(item, () => index))),\n );\n return rendered.join(\"\");\n}\n\nasync function renderIndexElement(element: SinwanElement): Promise<string> {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: () => unknown, index: number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n return props.fallback ? renderToString(props.fallback) : \"\";\n }\n\n if (each.length === 0) {\n return props.fallback ? renderToString(props.fallback) : \"\";\n }\n\n const rendered = await Promise.all(\n each.map((item, index) => renderToString(props.children!(() => item, index))),\n );\n return rendered.join(\"\");\n}\n\nfunction createDynamicElement(element: SinwanElement, tag: unknown): SinwanElement | null {\n if (typeof tag !== \"string\" && typeof tag !== \"function\") {\n return null;\n }\n\n const { component, ...props } = element.props as Record<string, unknown>;\n const children = normalizeContent(props.children ?? element.children);\n\n return {\n tag: tag as SinwanElement[\"tag\"],\n props,\n children,\n };\n}\n\nfunction readReactive(value: unknown): unknown {\n return isSignal(value) || isComputed(value) ? (value as any).value : value;\n}\n\nfunction normalizeContent(content: unknown): SinwanNode[] {\n if (content == null || typeof content === \"boolean\") {\n return [];\n }\n return Array.isArray(content) ? content : [content as SinwanNode];\n}\n\nfunction isElementLike(value: unknown): value is SinwanElement {\n return value != null && typeof value === \"object\" && \"tag\" in value;\n}\n\nfunction getMatchElement(value: unknown): SinwanElement | null {\n if (!isElementLike(value)) {\n return null;\n }\n if (isMatchElement(value)) {\n return value;\n }\n return value.tag === Match ? Match(value.props as any) : null;\n}\n",
18
+ "/**\n * SinwanJS Component Runtime — Instance Management\n *\n * Each component rendered on the client gets a ComponentInstance\n * that tracks its lifecycle hooks, effects, parent/child tree,\n * and provide/inject context.\n *\n * A global `currentInstance` stack lets lifecycle hooks (onMounted, etc.)\n * register themselves during setup or synchronous lifecycle callbacks —\n * same pattern as Vue's getCurrentInstance.\n */\n\nimport type { SinwanComponent } from \"../types.ts\";\nimport type { MountedNode } from \"../renderer/types.ts\";\nimport type { CleanupFn } from \"../reactivity/index.ts\";\nimport { nextTick } from \"../reactivity/scheduler.ts\";\n\n// ─── ComponentInstance ─────────────────────────────────────\n\nlet uidCounter = 0;\n\nexport interface ComponentInstance {\n /** Unique identifier for this instance. */\n uid: number;\n\n /** The component definition (setup function). */\n component: SinwanComponent<any>;\n\n /** Props passed to this component. */\n props: Record<string, any>;\n\n /** The rendered DOM subtree (set after render). */\n element: MountedNode | null;\n\n /** Parent instance in the component tree. */\n parent: ComponentInstance | null;\n\n /** Child component instances. */\n children: ComponentInstance[];\n\n /** All effect dispose functions owned by this component. */\n effects: CleanupFn[];\n\n // ─── Lifecycle hook queues ────────────────────────────\n\n /** Callbacks to fire after the component is mounted to DOM. */\n _mountedHooks: (() => void)[];\n\n /** Callbacks to fire when the component is unmounted. */\n _unmountedHooks: (() => void)[];\n\n /** Callbacks to fire after any reactive update in this component. */\n _updatedHooks: (() => void)[];\n\n /** Error handler callbacks. */\n _errorHooks: ((err: Error) => void)[];\n\n // ─── Provide/Inject context ───────────────────────────\n\n /** Values provided by this instance (for inject in children). */\n provides: Record<string | symbol, unknown>;\n\n // ─── State flags ──────────────────────────────────────\n\n isMounted: boolean;\n isUnmounted: boolean;\n}\n\n/**\n * Create a fresh ComponentInstance.\n */\nexport function createComponentInstance(\n component: SinwanComponent<any>,\n props: Record<string, any>,\n parent: ComponentInstance | null,\n): ComponentInstance {\n return {\n uid: uidCounter++,\n component,\n props,\n element: null,\n parent,\n children: [],\n effects: [],\n _mountedHooks: [],\n _unmountedHooks: [],\n _updatedHooks: [],\n _errorHooks: [],\n // Inherit parent's provides (prototype chain for lookup)\n provides: parent ? Object.create(parent.provides) : Object.create(null),\n isMounted: false,\n isUnmounted: false,\n };\n}\n\n// ─── Current instance stack ────────────────────────────────\n\nlet currentInstance: ComponentInstance | null = null;\n\n/**\n * Get the currently active component instance.\n * Used by lifecycle hooks to register themselves.\n */\nexport function getCurrentInstance(): ComponentInstance | null {\n return currentInstance;\n}\n\n/**\n * Set the current instance (called by renderer before setup).\n * Returns the previous instance for restoration.\n */\nexport function setCurrentInstance(\n instance: ComponentInstance | null,\n): ComponentInstance | null {\n const prev = currentInstance;\n currentInstance = instance;\n return prev;\n}\n\n/**\n * Run a function with `instance` as the current component instance.\n * Automatically restores the previous instance when done.\n */\nexport function withInstance<T>(instance: ComponentInstance, fn: () => T): T {\n const prev = setCurrentInstance(instance);\n try {\n return fn();\n } finally {\n setCurrentInstance(prev);\n }\n}\n\n// ─── Lifecycle execution ───────────────────────────────────\n\n/**\n * Fire all onMounted hooks for an instance and its children (depth-first).\n */\nexport function fireMountedHooks(instance: ComponentInstance): void {\n if (instance.isUnmounted) {\n return;\n }\n\n // Children first\n for (const child of instance.children) {\n fireMountedHooks(child);\n }\n\n if (!instance.isMounted) {\n instance.isMounted = true;\n for (const hook of instance._mountedHooks) {\n hook();\n }\n }\n}\n\n/**\n * Fire all onUnmounted hooks and dispose all effects for an instance\n * and its children (depth-first, children first).\n */\nexport function fireUnmountedHooks(instance: ComponentInstance): void {\n // Children first\n const children = [...instance.children];\n for (const child of children) {\n fireUnmountedHooks(child);\n }\n\n if (!instance.isUnmounted) {\n instance.isUnmounted = true;\n \n // Only fire unmounted hooks if it was ever mounted\n if (instance.isMounted) {\n instance.isMounted = false;\n for (const hook of instance._unmountedHooks) {\n hook();\n }\n }\n\n // ALWAYS dispose effects owned by this component\n for (const dispose of instance.effects) {\n dispose();\n }\n instance.effects.length = 0;\n\n // Remove from parent to prevent memory leaks\n if (instance.parent) {\n const idx = instance.parent.children.indexOf(instance);\n if (idx !== -1) {\n instance.parent.children.splice(idx, 1);\n }\n }\n }\n}\n\n/**\n * Fire onUpdated hooks for the current instance.\n */\nexport function fireUpdatedHooks(instance: ComponentInstance): void {\n for (const hook of instance._updatedHooks) {\n hook();\n }\n}\n\nconst queuedUpdatedHooks = new Set<ComponentInstance>();\n\n/**\n * Queue onUpdated hooks to run after the current reactive flush.\n * Multiple DOM effects in the same flush produce one updated callback.\n */\nexport function queueUpdatedHooks(instance: ComponentInstance | null): void {\n if (\n !instance ||\n !instance.isMounted ||\n instance.isUnmounted ||\n instance._updatedHooks.length === 0 ||\n queuedUpdatedHooks.has(instance)\n ) {\n return;\n }\n\n queuedUpdatedHooks.add(instance);\n nextTick(() => {\n queuedUpdatedHooks.delete(instance);\n if (instance.isMounted && !instance.isUnmounted) {\n fireUpdatedHooks(instance);\n }\n });\n}\n\n/**\n * Handle an error in the component tree — walks up to find an error handler.\n */\nexport function handleComponentError(\n instance: ComponentInstance,\n err: Error,\n): void {\n let current: ComponentInstance | null = instance;\n while (current) {\n if (current._errorHooks.length > 0) {\n for (const hook of current._errorHooks) {\n hook(err);\n }\n return;\n }\n current = current.parent;\n }\n // No handler found — re-throw\n console.error(\"[Sinwan] Unhandled component error:\", err);\n}\n",
19
19
  "/// <reference lib=\"dom\" />\n\n/**\n * SinwanJS Hydration — Marker Protocol\n *\n * Constants and helpers for the hydration marker format:\n *\n * data-sinwan-id=\"c0\" — component boundary\n * <!--sinwan-t:0-->val<!--/sinwan-t--> — reactive text boundary\n * data-sinwan-ev=\"click:0\" — event binding reference\n */\n\n// ─── Constants ─────────────────────────────────────────────\n\n/** Attribute on the root element of each component instance. */\nexport const COMP_ID_ATTR = \"data-sinwan-id\";\n\n/** Prefix for component IDs. */\nexport const COMP_ID_PREFIX = \"c\";\n\n/** Opening comment prefix for reactive text slots: `Sinwan-t:N` */\nexport const TEXT_MARKER_OPEN = \"sinwan-t:\";\n\n/** Closing comment for reactive text slots. */\nexport const TEXT_MARKER_CLOSE = \"/sinwan-t\";\n\n/** Attribute for event binding references. */\nexport const EVENT_ATTR = \"data-sinwan-ev\";\n\n// ─── Server-side marker generation ────────────────────────\n\n/** Build a component ID string, e.g. `\"c0\"`. */\nexport function compId(index: number): string {\n return `${COMP_ID_PREFIX}${index}`;\n}\n\n/** Build an opening text marker comment string. */\nexport function textMarkerOpen(index: number): string {\n return `<!--${TEXT_MARKER_OPEN}${index}-->`;\n}\n\n/** Build a closing text marker comment string. */\nexport function textMarkerCloseStr(): string {\n return `<!--${TEXT_MARKER_CLOSE}-->`;\n}\n\n/** Build an event attribute value, e.g. `\"click:0\"`. */\nexport function eventAttrValue(event: string, index: number): string {\n return `${event}:${index}`;\n}\n\n// ─── Client-side marker parsing ───────────────────────────\n\n/**\n * Check if a comment node is a reactive text opening marker.\n * Returns the slot index, or -1 if not a marker.\n */\nexport function parseTextOpenMarker(node: Comment): number {\n const data = node.data;\n if (data.startsWith(TEXT_MARKER_OPEN)) {\n const idx = parseInt(data.slice(TEXT_MARKER_OPEN.length), 10);\n return Number.isNaN(idx) ? -1 : idx;\n }\n return -1;\n}\n\n/**\n * Check if a comment node is a reactive text closing marker.\n */\nexport function isTextCloseMarker(node: Comment): boolean {\n return node.data === TEXT_MARKER_CLOSE;\n}\n\n/**\n * Parse `data-sinwan-ev` attribute value into event entries.\n * Format: `\"click:0\"` or `\"click:0,input:1\"` for multiple.\n * Returns array of `[eventName, handlerIndex]` tuples.\n */\nexport function parseEventAttr(value: string): [string, number][] {\n return value.split(\",\").map((pair) => {\n const [event, idx] = pair.split(\":\");\n return [event!, parseInt(idx!, 10)];\n });\n}\n\n/**\n * Parse `data-sinwan-id` into the component index.\n * e.g., `\"c3\"` → `3`\n */\nexport function parseCompId(value: string): number {\n return parseInt(value.slice(COMP_ID_PREFIX.length), 10);\n}\n",
20
20
  "/**\n * SinwanJS View Module — Streaming SSR\n *\n * Progressive HTML streaming using Bun's native ReadableStream.\n * Streams chunks as they resolve without waiting for full tree.\n */\n\nimport type {\n SinwanNode,\n SinwanElement,\n SinwanPage,\n SinwanComponent,\n} from \"../types.ts\";\nimport { HtmlEscapedString, escapeHtml } from \"../escaper.ts\";\nimport { renderServerAttribute } from \"./attribute-utils.ts\";\nimport { isSignal } from \"../reactivity/signal.ts\";\nimport { isComputed } from \"../reactivity/computed.ts\";\nimport { isEventProp, toEventName } from \"../renderer/events.ts\";\nimport {\n Dynamic,\n For,\n Index,\n Key,\n Match,\n Portal,\n Switch,\n Visible,\n Show,\n isDynamicElement,\n isForElement,\n isIndexElement,\n isKeyElement,\n isMatchElement,\n isPortalElement,\n isShowElement,\n isSwitchElement,\n} from \"../component/control-flow.ts\";\nimport {\n createComponentInstance,\n getCurrentInstance,\n setCurrentInstance,\n} from \"../component/instance.ts\";\nimport {\n compId,\n textMarkerOpen,\n textMarkerCloseStr,\n COMP_ID_ATTR,\n EVENT_ATTR,\n} from \"../hydration/markers.ts\";\n\ninterface HydratableStreamContext {\n componentIndex: number;\n textIndex: number;\n eventIndex: number;\n}\n\nfunction createHydratableStreamContext(): HydratableStreamContext {\n return { componentIndex: 0, textIndex: 0, eventIndex: 0 };\n}\n\n// Void elements that don't have closing tags\nconst VOID_ELEMENTS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\n/**\n * Stream a page to a ReadableStream.\n */\nexport function streamPage<D extends object = {}>(\n page: SinwanPage<D>,\n data: D,\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n\n return new ReadableStream({\n async start(controller) {\n try {\n // Resolve the page component\n const element = await page(data);\n\n // Stream the element tree\n await streamNode(element, controller, encoder);\n\n // Close the stream\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n}\n\n/**\n * Stream a component with hydration markers.\n */\nexport function streamHydratablePage(\n component: SinwanComponent<any>,\n props?: Record<string, unknown>,\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const ctx = createHydratableStreamContext();\n\n return new ReadableStream({\n async start(controller) {\n try {\n await streamHydratableComponent(\n component,\n props ?? {},\n controller,\n encoder,\n ctx,\n true,\n );\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n}\n\n/**\n * Stream a raw node tree with hydration markers.\n */\nexport function streamHydratableNode(\n node: SinwanNode,\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const ctx = createHydratableStreamContext();\n\n return new ReadableStream({\n async start(controller) {\n try {\n await streamHydratableNodeToController(node, controller, encoder, ctx);\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n}\n\n/**\n * Stream a node tree to a controller.\n */\nasync function streamNode(\n node: SinwanNode,\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n): Promise<void> {\n // Handle null/undefined/boolean\n if (node == null || typeof node === \"boolean\") {\n return;\n }\n\n // Handle strings (escape them)\n if (typeof node === \"string\") {\n controller.enqueue(encoder.encode(escapeHtml(node)));\n return;\n }\n\n // Handle numbers\n if (typeof node === \"number\") {\n controller.enqueue(encoder.encode(String(node)));\n return;\n }\n\n // Handle pre-escaped HTML\n if (node instanceof HtmlEscapedString) {\n controller.enqueue(encoder.encode(node.value));\n return;\n }\n\n // Handle reactive containers — stream the escaped current value\n if (isSignal(node) || isComputed(node)) {\n controller.enqueue(encoder.encode(escapeHtml(String((node as any).value))));\n return;\n }\n\n // Handle arrays - stream each child\n if (Array.isArray(node)) {\n for (const child of node) {\n await streamNode(child, controller, encoder);\n }\n return;\n }\n\n // Handle async elements (Promise<SinwanElement>)\n if (node instanceof Promise) {\n const resolved = await node;\n await streamElement(resolved, controller, encoder);\n return;\n }\n\n // Handle elements\n await streamElement(node as SinwanElement, controller, encoder);\n}\n\n/**\n * Stream an element to the controller.\n */\nasync function streamElement(\n element: SinwanElement,\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n): Promise<void> {\n const { tag, props, children } = element;\n\n if (\n tag === Show ||\n tag === For ||\n tag === Switch ||\n tag === Index ||\n tag === Key ||\n tag === Dynamic ||\n tag === Portal\n ) {\n await streamElement((tag as Function)(props), controller, encoder);\n return;\n }\n\n if (tag === Visible) {\n await streamElement((tag as Function)(props), controller, encoder);\n return;\n }\n\n if (isShowElement(element)) {\n const when = readReactive(props.when);\n await streamNode(\n when ? resolveShowChildren(element, when) : (props.fallback as SinwanNode),\n controller,\n encoder,\n );\n return;\n }\n\n if (isForElement(element)) {\n await streamForElement(element, controller, encoder);\n return;\n }\n\n if (isSwitchElement(element)) {\n await streamNode(resolveSwitchContent(element), controller, encoder);\n return;\n }\n\n if (isMatchElement(element)) {\n const when = readReactive(props.when);\n await streamNode(\n when ? resolveMatchChildren(element, when) : null,\n controller,\n encoder,\n );\n return;\n }\n\n if (isIndexElement(element)) {\n await streamIndexElement(element, controller, encoder);\n return;\n }\n\n if (isKeyElement(element)) {\n const key = readReactive(props.when);\n await streamNode(resolveKeyChildren(element, key), controller, encoder);\n return;\n }\n\n if (isDynamicElement(element)) {\n const dynamicTag = readReactive(props.component);\n const dynamic = createDynamicElement(element, dynamicTag);\n if (dynamic) {\n await streamElement(dynamic, controller, encoder);\n }\n return;\n }\n\n if (isPortalElement(element)) {\n return;\n }\n\n // Handle functional components\n if (typeof tag === \"function\") {\n const result = await tag(props);\n await streamNode(result, controller, encoder);\n return;\n }\n\n // Handle intrinsic HTML elements\n if (typeof tag === \"string\") {\n await streamIntrinsicElement(tag, props, children, controller, encoder);\n return;\n }\n\n // Fallback\n await streamNode(children, controller, encoder);\n}\n\n/**\n * Stream an intrinsic HTML element.\n */\nasync function streamIntrinsicElement(\n tag: string,\n props: Record<string, unknown>,\n children: SinwanNode[],\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n): Promise<void> {\n const attrs = renderAttributes(props);\n\n // Check for dangerous inner HTML\n const dangerous = props.dangerouslySetInnerHTML as\n | { __html?: string }\n | undefined;\n\n // Void elements have no children and no closing tag\n if (VOID_ELEMENTS.has(tag)) {\n const html = attrs ? `<${tag}${attrs}>` : `<${tag}>`;\n controller.enqueue(encoder.encode(html));\n return;\n }\n\n // Opening tag\n const openTag = attrs ? `<${tag}${attrs}>` : `<${tag}>`;\n controller.enqueue(encoder.encode(openTag));\n\n // Children or dangerous HTML\n if (dangerous && typeof dangerous.__html === \"string\") {\n controller.enqueue(encoder.encode(dangerous.__html));\n } else {\n await streamNode(children, controller, encoder);\n }\n\n // Closing tag\n controller.enqueue(encoder.encode(`</${tag}>`));\n}\n\n/**\n * Render HTML attributes from props.\n */\nfunction renderAttributes(props: Record<string, unknown>): string {\n let attrs = \"\";\n\n for (const [key, value] of Object.entries(props)) {\n if (\n key === \"children\" ||\n key === \"key\" ||\n key === \"ref\" ||\n key === \"dangerouslySetInnerHTML\" ||\n isEventProp(key)\n ) {\n continue;\n }\n\n const resolvedValue = readReactive(value);\n if (resolvedValue == null || resolvedValue === false) continue;\n\n attrs += renderServerAttribute(key, resolvedValue);\n }\n\n return attrs;\n}\n\nasync function streamHydratableNodeToController(\n node: SinwanNode,\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n ctx: HydratableStreamContext,\n isComponentRoot = false,\n): Promise<void> {\n if (node == null || typeof node === \"boolean\") {\n return;\n }\n\n if (typeof node === \"string\") {\n enqueue(controller, encoder, escapeHtml(node));\n return;\n }\n\n if (typeof node === \"number\") {\n enqueue(controller, encoder, String(node));\n return;\n }\n\n if (node instanceof HtmlEscapedString) {\n enqueue(controller, encoder, node.value);\n return;\n }\n\n if (isSignal(node) || isComputed(node)) {\n const idx = ctx.textIndex++;\n enqueue(\n controller,\n encoder,\n `${textMarkerOpen(idx)}${escapeHtml(String((node as any).value))}${textMarkerCloseStr()}`,\n );\n return;\n }\n\n if (Array.isArray(node)) {\n for (const child of node) {\n await streamHydratableNodeToController(child, controller, encoder, ctx);\n }\n return;\n }\n\n if (node instanceof Promise) {\n await streamHydratableElement(\n await node,\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n return;\n }\n\n await streamHydratableElement(\n node as SinwanElement,\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n}\n\nasync function streamHydratableElement(\n element: SinwanElement,\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n ctx: HydratableStreamContext,\n isComponentRoot: boolean,\n): Promise<void> {\n const { tag, props, children } = element;\n\n if (tag === \"\") {\n for (const child of children) {\n await streamHydratableNodeToController(child, controller, encoder, ctx);\n }\n return;\n }\n\n if (\n tag === Show ||\n tag === For ||\n tag === Switch ||\n tag === Index ||\n tag === Key ||\n tag === Dynamic ||\n tag === Portal\n ) {\n await streamHydratableElement(\n (tag as Function)(props),\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n return;\n }\n\n if (tag === Visible) {\n await streamHydratableElement(\n (tag as Function)(props),\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n return;\n }\n\n if (isShowElement(element)) {\n const when = readReactive(props.when);\n await streamHydratableNodeToController(\n when ? resolveShowChildren(element, when) : (props.fallback as SinwanNode),\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n return;\n }\n\n if (isForElement(element)) {\n await streamHydratableForElement(element, controller, encoder, ctx);\n return;\n }\n\n if (isSwitchElement(element)) {\n await streamHydratableNodeToController(\n resolveSwitchContent(element),\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n return;\n }\n\n if (isMatchElement(element)) {\n const when = readReactive(props.when);\n await streamHydratableNodeToController(\n when ? resolveMatchChildren(element, when) : null,\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n return;\n }\n\n if (isIndexElement(element)) {\n await streamHydratableIndexElement(element, controller, encoder, ctx);\n return;\n }\n\n if (isKeyElement(element)) {\n const key = readReactive(props.when);\n await streamHydratableNodeToController(\n resolveKeyChildren(element, key),\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n return;\n }\n\n if (isDynamicElement(element)) {\n const dynamicTag = readReactive(props.component);\n const dynamic = createDynamicElement(element, dynamicTag);\n if (dynamic) {\n await streamHydratableElement(\n dynamic,\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n }\n return;\n }\n\n if (isPortalElement(element)) {\n return;\n }\n\n if (typeof tag === \"function\") {\n await streamHydratableComponent(\n tag as SinwanComponent<any>,\n props,\n controller,\n encoder,\n ctx,\n true,\n );\n return;\n }\n\n if (typeof tag === \"string\") {\n await streamHydratableIntrinsic(\n tag,\n props,\n children,\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n return;\n }\n\n await streamHydratableNodeToController(children, controller, encoder, ctx);\n}\n\nasync function streamHydratableComponent(\n component: SinwanComponent<any>,\n props: Record<string, unknown>,\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n ctx: HydratableStreamContext,\n isComponentRoot: boolean,\n): Promise<void> {\n const parentInstance = getCurrentInstance();\n const instance = createComponentInstance(component, props, parentInstance);\n if (parentInstance) {\n parentInstance.children.push(instance);\n }\n\n const prev = setCurrentInstance(instance);\n try {\n const result = await component(props);\n await streamHydratableNodeToController(\n result,\n controller,\n encoder,\n ctx,\n isComponentRoot,\n );\n } finally {\n setCurrentInstance(prev);\n }\n}\n\nasync function streamHydratableIntrinsic(\n tag: string,\n props: Record<string, unknown>,\n children: SinwanNode[],\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n ctx: HydratableStreamContext,\n isComponentRoot: boolean,\n): Promise<void> {\n const attrs = renderHydratableAttributes(props, ctx, isComponentRoot);\n const dangerous = props.dangerouslySetInnerHTML as\n | { __html?: string }\n | undefined;\n\n enqueue(controller, encoder, attrs ? `<${tag}${attrs}>` : `<${tag}>`);\n\n if (VOID_ELEMENTS.has(tag)) {\n return;\n }\n\n if (dangerous && typeof dangerous.__html === \"string\") {\n enqueue(controller, encoder, dangerous.__html);\n } else {\n for (const child of children) {\n await streamHydratableNodeToController(child, controller, encoder, ctx);\n }\n }\n\n enqueue(controller, encoder, `</${tag}>`);\n}\n\nasync function streamHydratableForElement(\n element: SinwanElement,\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n ctx: HydratableStreamContext,\n): Promise<void> {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: unknown, index: () => number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n if (props.fallback) {\n await streamHydratableNodeToController(\n props.fallback,\n controller,\n encoder,\n ctx,\n );\n }\n return;\n }\n\n if (each.length === 0) {\n if (props.fallback) {\n await streamHydratableNodeToController(\n props.fallback,\n controller,\n encoder,\n ctx,\n );\n }\n return;\n }\n\n for (let index = 0; index < each.length; index++) {\n await streamHydratableNodeToController(\n props.children(each[index], () => index),\n controller,\n encoder,\n ctx,\n );\n }\n}\n\nasync function streamHydratableIndexElement(\n element: SinwanElement,\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n ctx: HydratableStreamContext,\n): Promise<void> {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: () => unknown, index: number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n if (props.fallback) {\n await streamHydratableNodeToController(\n props.fallback,\n controller,\n encoder,\n ctx,\n );\n }\n return;\n }\n\n if (each.length === 0) {\n if (props.fallback) {\n await streamHydratableNodeToController(\n props.fallback,\n controller,\n encoder,\n ctx,\n );\n }\n return;\n }\n\n for (let index = 0; index < each.length; index++) {\n await streamHydratableNodeToController(\n props.children(() => each[index], index),\n controller,\n encoder,\n ctx,\n );\n }\n}\n\nfunction renderHydratableAttributes(\n props: Record<string, unknown>,\n ctx: HydratableStreamContext,\n isComponentRoot: boolean,\n): string {\n let attrs = \"\";\n\n if (isComponentRoot) {\n attrs += ` ${COMP_ID_ATTR}=\"${compId(ctx.componentIndex++)}\"`;\n }\n\n const eventParts: string[] = [];\n\n for (const [key, value] of Object.entries(props)) {\n if (\n key === \"children\" ||\n key === \"key\" ||\n key === \"ref\" ||\n key === \"dangerouslySetInnerHTML\"\n ) {\n continue;\n }\n\n if (isEventProp(key)) {\n eventParts.push(`${toEventName(key)}:${ctx.eventIndex++}`);\n continue;\n }\n\n const resolvedValue = readReactive(value);\n if (resolvedValue == null || resolvedValue === false) continue;\n\n attrs += renderServerAttribute(key, resolvedValue);\n }\n\n if (eventParts.length > 0) {\n attrs += ` ${EVENT_ATTR}=\"${eventParts.join(\",\")}\"`;\n }\n\n return attrs;\n}\n\nfunction enqueue(\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n html: string,\n): void {\n controller.enqueue(encoder.encode(html));\n}\n\nasync function streamForElement(\n element: SinwanElement,\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n): Promise<void> {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: unknown, index: () => number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n if (props.fallback) {\n await streamNode(props.fallback, controller, encoder);\n }\n return;\n }\n\n if (each.length === 0) {\n if (props.fallback) {\n await streamNode(props.fallback, controller, encoder);\n }\n return;\n }\n\n for (let index = 0; index < each.length; index++) {\n await streamNode(props.children(each[index], () => index), controller, encoder);\n }\n}\n\nasync function streamIndexElement(\n element: SinwanElement,\n controller: ReadableStreamDefaultController<Uint8Array>,\n encoder: TextEncoder,\n): Promise<void> {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: () => unknown, index: number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n if (props.fallback) {\n await streamNode(props.fallback, controller, encoder);\n }\n return;\n }\n\n if (each.length === 0) {\n if (props.fallback) {\n await streamNode(props.fallback, controller, encoder);\n }\n return;\n }\n\n for (let index = 0; index < each.length; index++) {\n await streamNode(props.children(() => each[index], index), controller, encoder);\n }\n}\n\nfunction resolveShowChildren(element: SinwanElement, value: unknown): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction resolveSwitchContent(element: SinwanElement): SinwanNode {\n const props = element.props as { fallback?: SinwanNode; children?: SinwanNode };\n const children = normalizeContent(props.children ?? element.children);\n\n for (const child of children) {\n const match = getMatchElement(child);\n if (!match) {\n continue;\n }\n\n const when = readReactive((match.props as any).when);\n if (when) {\n return resolveMatchChildren(match, when);\n }\n }\n\n return props.fallback;\n}\n\nfunction resolveMatchChildren(element: SinwanElement, value: unknown): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction resolveKeyChildren(element: SinwanElement, value: unknown): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction createDynamicElement(element: SinwanElement, tag: unknown): SinwanElement | null {\n if (typeof tag !== \"string\" && typeof tag !== \"function\") {\n return null;\n }\n\n const { component, ...props } = element.props as Record<string, unknown>;\n const children = normalizeContent(props.children ?? element.children);\n\n return {\n tag: tag as SinwanElement[\"tag\"],\n props,\n children,\n };\n}\n\nfunction readReactive(value: unknown): unknown {\n return isSignal(value) || isComputed(value) ? (value as any).value : value;\n}\n\nfunction normalizeContent(content: unknown): SinwanNode[] {\n if (content == null || typeof content === \"boolean\") {\n return [];\n }\n return Array.isArray(content) ? content : [content as SinwanNode];\n}\n\nfunction isElementLike(value: unknown): value is SinwanElement {\n return value != null && typeof value === \"object\" && \"tag\" in value;\n}\n\nfunction getMatchElement(value: unknown): SinwanElement | null {\n if (!isElementLike(value)) {\n return null;\n }\n if (isMatchElement(value)) {\n return value;\n }\n return value.tag === Match ? Match(value.props as any) : null;\n}\n",
21
21
  "/**\n * SinwanJS Server — Hydration-Aware SSR Renderer\n *\n * Enhanced `renderToString` that injects hydration markers:\n *\n * data-sinwan-id=\"c0\" — component boundary\n * <!--sinwan-t:0-->val<!--/sinwan-t--> — reactive text boundary\n * data-sinwan-ev=\"click:0\" — event binding reference\n *\n * Usage:\n * const html = await renderToHydratableString(App, { name: \"World\" });\n * // → '<div data-sinwan-id=\"c0\"><p>Count: <!--sinwan-t:0-->5<!--/sinwan-t--></p>...</div>'\n */\n\nimport type { SinwanElement, SinwanNode, SinwanComponent } from \"../types.ts\";\nimport { HtmlEscapedString, escapeHtml } from \"../escaper.ts\";\nimport { renderServerAttribute } from \"./attribute-utils.ts\";\nimport { isSignal } from \"../reactivity/signal.ts\";\nimport { isComputed } from \"../reactivity/computed.ts\";\nimport {\n compId,\n textMarkerOpen,\n textMarkerCloseStr,\n COMP_ID_ATTR,\n EVENT_ATTR,\n} from \"../hydration/markers.ts\";\nimport { isEventProp, toEventName } from \"../renderer/events.ts\";\nimport {\n createComponentInstance,\n getCurrentInstance,\n setCurrentInstance,\n} from \"../component/instance.ts\";\nimport {\n Dynamic,\n For,\n Index,\n Key,\n Match,\n Portal,\n Switch,\n Visible,\n Show,\n isDynamicElement,\n isForElement,\n isIndexElement,\n isKeyElement,\n isMatchElement,\n isPortalElement,\n isShowElement,\n isSwitchElement,\n} from \"../component/control-flow.ts\";\n\n// ─── Hydration context ─────────────────────────────────────\n\ninterface HydrationContext {\n componentIndex: number;\n textIndex: number;\n eventIndex: number;\n}\n\nfunction createHydrationContext(): HydrationContext {\n return { componentIndex: 0, textIndex: 0, eventIndex: 0 };\n}\n\n// ─── Public API ────────────────────────────────────────────\n\n/**\n * Render a component to an HTML string with hydration markers.\n */\nexport async function renderToHydratableString(\n component: SinwanComponent<any>,\n props?: Record<string, unknown>,\n): Promise<string> {\n const ctx = createHydrationContext();\n const mergedProps = props ?? {};\n\n // Create a temporary instance so lifecycle hooks register silently\n const instance = createComponentInstance(component, mergedProps, null);\n const prev = setCurrentInstance(instance);\n\n try {\n // Call the component to get the element tree\n const result = await component(mergedProps);\n if (result && typeof result === \"object\" && \"tag\" in result) {\n return renderElementH(result, ctx, true /* isComponentRoot */);\n }\n\n return renderNodeH(result as SinwanNode, ctx);\n } finally {\n setCurrentInstance(prev);\n }\n}\n\n/**\n * Render a raw SinwanNode tree with hydration markers.\n */\nexport async function renderNodeToHydratableString(\n node: SinwanNode,\n): Promise<string> {\n const ctx = createHydrationContext();\n return renderNodeH(node, ctx);\n}\n\n// ─── Internal rendering ────────────────────────────────────\n\nconst VOID_ELEMENTS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n\n/**\n * Render a node with hydration markers.\n */\nfunction renderNodeH(node: SinwanNode, ctx: HydrationContext): string {\n if (node == null || typeof node === \"boolean\") return \"\";\n\n if (typeof node === \"string\") return escapeHtml(node);\n if (typeof node === \"number\") return String(node);\n\n if (node instanceof HtmlEscapedString) return node.value;\n\n // Signal or Computed → wrap with text markers\n if (isSignal(node) || isComputed(node)) {\n const value = (node as any).value;\n const idx = ctx.textIndex++;\n return `${textMarkerOpen(idx)}${escapeHtml(String(value))}${textMarkerCloseStr()}`;\n }\n\n if (Array.isArray(node)) {\n return node.map((child) => renderNodeH(child, ctx)).join(\"\");\n }\n\n if (node instanceof Promise) {\n // Sync-only for hydration SSR — await should be handled at top level\n return \"\";\n }\n\n if (typeof node === \"object\" && \"tag\" in node) {\n return renderElementH(node, ctx, false);\n }\n\n return escapeHtml(String(node));\n}\n\n/**\n * Render an element with hydration markers.\n */\nfunction renderElementH(\n element: SinwanElement,\n ctx: HydrationContext,\n isComponentRoot: boolean,\n): string {\n const { tag, props, children } = element;\n\n // Fragment\n if (tag === \"\") {\n return children.map((child) => renderNodeH(child, ctx)).join(\"\");\n }\n\n if (\n tag === Show ||\n tag === For ||\n tag === Switch ||\n tag === Index ||\n tag === Key ||\n tag === Dynamic ||\n tag === Portal\n ) {\n return renderElementH((tag as Function)(props), ctx, isComponentRoot);\n }\n\n if (tag === Visible) {\n return renderElementH((tag as Function)(props), ctx, isComponentRoot);\n }\n\n if (isShowElement(element)) {\n const when = readReactive(props.when);\n const content = when\n ? resolveShowChildren(element, when)\n : (props.fallback as SinwanNode);\n return renderNodeMaybeRoot(content, ctx, isComponentRoot);\n }\n\n if (isForElement(element)) {\n return renderForElementH(element, ctx);\n }\n\n if (isSwitchElement(element)) {\n return renderNodeMaybeRoot(resolveSwitchContent(element), ctx, isComponentRoot);\n }\n\n if (isMatchElement(element)) {\n const when = readReactive(props.when);\n return renderNodeMaybeRoot(\n when ? resolveMatchChildren(element, when) : null,\n ctx,\n isComponentRoot,\n );\n }\n\n if (isIndexElement(element)) {\n return renderIndexElementH(element, ctx);\n }\n\n if (isKeyElement(element)) {\n const key = readReactive(props.when);\n return renderNodeMaybeRoot(resolveKeyChildren(element, key), ctx, isComponentRoot);\n }\n\n if (isDynamicElement(element)) {\n const dynamicTag = readReactive(props.component);\n const dynamic = createDynamicElement(element, dynamicTag);\n return dynamic ? renderElementH(dynamic, ctx, isComponentRoot) : \"\";\n }\n\n if (isPortalElement(element)) {\n return \"\";\n }\n\n // Functional component\n if (typeof tag === \"function\") {\n return renderComponentH(tag, props, ctx);\n }\n\n // Intrinsic HTML element\n if (typeof tag === \"string\") {\n return renderIntrinsicH(tag, props, children, ctx, isComponentRoot);\n }\n\n return children.map((child) => renderNodeH(child, ctx)).join(\"\");\n}\n\n/**\n * Render a functional component — calls it and marks the root element.\n */\nfunction renderComponentH(\n component: Function,\n props: Record<string, unknown>,\n ctx: HydrationContext,\n): string {\n // Set a temporary instance for lifecycle hooks\n const parentInstance = getCurrentInstance();\n const instance = createComponentInstance(component as any, props, parentInstance);\n if (parentInstance) {\n parentInstance.children.push(instance);\n }\n const prev = setCurrentInstance(instance);\n\n try {\n const result = component(props);\n\n if (result && typeof result === \"object\" && \"tag\" in result) {\n return renderElementH(\n result as SinwanElement,\n ctx,\n true /* mark as component root */,\n );\n }\n\n return renderNodeH(result as SinwanNode, ctx);\n } finally {\n setCurrentInstance(prev);\n }\n}\n\n/**\n * Render an intrinsic element with hydration markers.\n */\nfunction renderIntrinsicH(\n tag: string,\n props: Record<string, unknown>,\n children: SinwanNode[],\n ctx: HydrationContext,\n isComponentRoot: boolean,\n): string {\n let attrs = \"\";\n\n // Component boundary marker\n if (isComponentRoot) {\n attrs += ` ${COMP_ID_ATTR}=\"${compId(ctx.componentIndex++)}\"`;\n }\n\n // Event markers + regular attributes\n const eventParts: string[] = [];\n\n for (const [key, value] of Object.entries(props)) {\n if (\n key === \"children\" ||\n key === \"key\" ||\n key === \"ref\" ||\n key === \"dangerouslySetInnerHTML\"\n ) {\n continue;\n }\n\n if (isEventProp(key)) {\n // Collect event markers\n const eventName = toEventName(key);\n eventParts.push(`${eventName}:${ctx.eventIndex++}`);\n continue;\n }\n\n if (value == null || value === false) continue;\n\n // Resolve signal/computed values to their current values for SSR\n let resolvedValue = value;\n if (isSignal(value) || isComputed(value)) {\n resolvedValue = (value as any).value;\n }\n\n attrs += renderServerAttribute(key, resolvedValue);\n }\n\n // Add event attribute\n if (eventParts.length > 0) {\n attrs += ` ${EVENT_ATTR}=\"${eventParts.join(\",\")}\"`;\n }\n\n // Void elements\n if (VOID_ELEMENTS.has(tag)) {\n return `<${tag}${attrs}>`;\n }\n\n // Dangerous inner HTML\n const dangerous = props.dangerouslySetInnerHTML as\n | { __html?: string }\n | undefined;\n if (dangerous && typeof dangerous.__html === \"string\") {\n return `<${tag}${attrs}>${dangerous.__html}</${tag}>`;\n }\n\n // Render children with markers\n const childrenHtml = children\n .map((child) => renderNodeH(child, ctx))\n .join(\"\");\n\n return `<${tag}${attrs}>${childrenHtml}</${tag}>`;\n}\n\nfunction renderNodeMaybeRoot(\n node: SinwanNode,\n ctx: HydrationContext,\n isComponentRoot: boolean,\n): string {\n if (\n isComponentRoot &&\n node &&\n typeof node === \"object\" &&\n !Array.isArray(node) &&\n \"tag\" in node\n ) {\n return renderElementH(node as SinwanElement, ctx, true);\n }\n return renderNodeH(node, ctx);\n}\n\nfunction renderForElementH(element: SinwanElement, ctx: HydrationContext): string {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: unknown, index: () => number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n return props.fallback ? renderNodeH(props.fallback, ctx) : \"\";\n }\n\n if (each.length === 0) {\n return props.fallback ? renderNodeH(props.fallback, ctx) : \"\";\n }\n\n return each\n .map((item, index) => renderNodeH(props.children!(item, () => index), ctx))\n .join(\"\");\n}\n\nfunction renderIndexElementH(element: SinwanElement, ctx: HydrationContext): string {\n const props = element.props as {\n each?: unknown;\n fallback?: SinwanNode;\n children?: (item: () => unknown, index: number) => SinwanNode;\n };\n const each = readReactive(props.each);\n if (!Array.isArray(each) || typeof props.children !== \"function\") {\n return props.fallback ? renderNodeH(props.fallback, ctx) : \"\";\n }\n\n if (each.length === 0) {\n return props.fallback ? renderNodeH(props.fallback, ctx) : \"\";\n }\n\n return each\n .map((item, index) => renderNodeH(props.children!(() => item, index), ctx))\n .join(\"\");\n}\n\nfunction resolveShowChildren(element: SinwanElement, value: unknown): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction resolveSwitchContent(element: SinwanElement): SinwanNode {\n const props = element.props as { fallback?: SinwanNode; children?: SinwanNode };\n const children = normalizeContent(props.children ?? element.children);\n\n for (const child of children) {\n const match = getMatchElement(child);\n if (!match) {\n continue;\n }\n\n const when = readReactive((match.props as any).when);\n if (when) {\n return resolveMatchChildren(match, when);\n }\n }\n\n return props.fallback;\n}\n\nfunction resolveMatchChildren(element: SinwanElement, value: unknown): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction resolveKeyChildren(element: SinwanElement, value: unknown): SinwanNode {\n const children = (element.props as any).children ?? element.children;\n if (typeof children === \"function\") {\n return children(value);\n }\n return children as SinwanNode;\n}\n\nfunction createDynamicElement(element: SinwanElement, tag: unknown): SinwanElement | null {\n if (typeof tag !== \"string\" && typeof tag !== \"function\") {\n return null;\n }\n\n const { component, ...props } = element.props as Record<string, unknown>;\n const children = normalizeContent(props.children ?? element.children);\n\n return {\n tag: tag as SinwanElement[\"tag\"],\n props,\n children,\n };\n}\n\nfunction readReactive(value: unknown): unknown {\n return isSignal(value) || isComputed(value) ? (value as any).value : value;\n}\n\nfunction normalizeContent(content: unknown): SinwanNode[] {\n if (content == null || typeof content === \"boolean\") {\n return [];\n }\n return Array.isArray(content) ? content : [content as SinwanNode];\n}\n\nfunction isElementLike(value: unknown): value is SinwanElement {\n return value != null && typeof value === \"object\" && \"tag\" in value;\n}\n\nfunction getMatchElement(value: unknown): SinwanElement | null {\n if (!isElementLike(value)) {\n return null;\n }\n if (isMatchElement(value)) {\n return value;\n }\n return value.tag === Match ? Match(value.props as any) : null;\n}\n"
22
22
  ],
23
- "mappings": "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",
24
- "debugId": "B6A8C937376FF47C64756E2164756E21",
23
+ "mappings": "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",
24
+ "debugId": "1C00934D6E85922C64756E2164756E21",
25
25
  "names": []
26
26
  }
@@ -11,6 +11,6 @@ export type { Computed } from "./computed.ts";
11
11
  export { effect } from "./effect.ts";
12
12
  export type { CleanupFn, EffectFn } from "./effect.ts";
13
13
  export { batch } from "./batch.ts";
14
- export { nextTick } from "./scheduler.ts";
14
+ export { nextTick, flushSync } from "./scheduler.ts";
15
15
  export { isReactive, resolve } from "./normalization.ts";
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactivity/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reactivity/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/renderer/attributes.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAUxD,eAAO,MAAM,cAAc,aAAiG,CAAC;AAG7H,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK/C,CAAC;AAEF,UAAU,qBAAqB;IAC7B,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,SAAS,EAAE,CAyBb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,KAAK,CAAC,EAAE,qBAAqB,GAC5B,IAAI,CA2DN;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD"}
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/renderer/attributes.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAUxD,eAAO,MAAM,cAAc,aAAiG,CAAC;AAG7H,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK/C,CAAC;AAEF,UAAU,qBAAqB;IAC7B,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,SAAS,EAAE,CA4Bb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,KAAK,CAAC,EAAE,qBAAqB,GAC5B,IAAI,CA2DN;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/renderer/events.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,OAAO,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,GACrB,SAAS,CAKX;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,SAAS,EAAE,CAcb"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/renderer/events.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,OAAO,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,aAAa,GACrB,SAAS,CAKX;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,SAAS,EAAE,CAcb"}
@@ -1 +1 @@
1
- {"version":3,"file":"render-control-flow.d.ts","sourceRoot":"","sources":["../../src/renderer/render-control-flow.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAuC,MAAM,YAAY,CAAC;AAuCnF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,IAAI,GAAG,IAAI,EACnB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,WAAW,CAoCb"}
1
+ {"version":3,"file":"render-control-flow.d.ts","sourceRoot":"","sources":["../../src/renderer/render-control-flow.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAuC,MAAM,YAAY,CAAC;AAwCnF;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,IAAI,EACZ,MAAM,EAAE,IAAI,GAAG,IAAI,EACnB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,WAAW,CAoCb"}
@@ -1 +1 @@
1
- {"version":3,"file":"render-element.d.ts","sourceRoot":"","sources":["../../src/renderer/render-element.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AAsDhF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,IAAI,EACZ,MAAM,GAAE,IAAI,GAAG,IAAW,EAC1B,SAAS,GAAE,MAAM,GAAG,IAAW,GAC9B,WAAW,CAkDb"}
1
+ {"version":3,"file":"render-element.d.ts","sourceRoot":"","sources":["../../src/renderer/render-element.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AAsDhF;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,IAAI,EACZ,MAAM,GAAE,IAAI,GAAG,IAAW,EAC1B,SAAS,GAAE,MAAM,GAAG,IAAW,GAC9B,WAAW,CAmEb"}