what-core 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/{chunk-RI7T5VFD.min.js → chunk-D5YDPQ57.min.js} +1 -2
  2. package/dist/chunk-O3SKPRTY.min.js +0 -1
  3. package/dist/chunk-W33M3HL5.min.js +1 -0
  4. package/dist/index.min.js +2 -3
  5. package/dist/jsx-dev-runtime.min.js +0 -1
  6. package/dist/jsx-runtime.min.js +0 -1
  7. package/dist/render.min.js +1 -2
  8. package/dist/testing.min.js +1 -2
  9. package/package.json +2 -2
  10. package/src/agent-context.js +1 -1
  11. package/src/reactive.js +20 -4
  12. package/dist/a11y.js +0 -440
  13. package/dist/animation.js +0 -548
  14. package/dist/chunk-2IZMPODD.min.js +0 -2
  15. package/dist/chunk-2IZMPODD.min.js.map +0 -7
  16. package/dist/chunk-2P7OVL2L.js +0 -1386
  17. package/dist/chunk-2P7OVL2L.js.map +0 -7
  18. package/dist/chunk-5EQUBJWQ.js +0 -1365
  19. package/dist/chunk-5EQUBJWQ.js.map +0 -7
  20. package/dist/chunk-6DAIK77K.min.js +0 -2
  21. package/dist/chunk-6DAIK77K.min.js.map +0 -7
  22. package/dist/chunk-AW3BAPIK.js +0 -1685
  23. package/dist/chunk-AW3BAPIK.js.map +0 -7
  24. package/dist/chunk-AZP2EOGX.js +0 -188
  25. package/dist/chunk-AZP2EOGX.js.map +0 -7
  26. package/dist/chunk-CCINITLW.js +0 -1692
  27. package/dist/chunk-CCINITLW.js.map +0 -7
  28. package/dist/chunk-F2HUXI22.js +0 -1675
  29. package/dist/chunk-F2HUXI22.js.map +0 -7
  30. package/dist/chunk-GZRA4IAJ.js +0 -1699
  31. package/dist/chunk-GZRA4IAJ.js.map +0 -7
  32. package/dist/chunk-H3GA34JK.js +0 -1384
  33. package/dist/chunk-H3GA34JK.js.map +0 -7
  34. package/dist/chunk-KBM6CWG4.min.js +0 -2
  35. package/dist/chunk-KBM6CWG4.min.js.map +0 -7
  36. package/dist/chunk-KL7TNUIU.min.js +0 -2
  37. package/dist/chunk-KL7TNUIU.min.js.map +0 -7
  38. package/dist/chunk-L6XOF7P4.min.js +0 -2
  39. package/dist/chunk-L6XOF7P4.min.js.map +0 -7
  40. package/dist/chunk-M7UEET5O.js +0 -1323
  41. package/dist/chunk-M7UEET5O.js.map +0 -7
  42. package/dist/chunk-MH7L756Y.min.js +0 -2
  43. package/dist/chunk-MH7L756Y.min.js.map +0 -7
  44. package/dist/chunk-O3SKPRTY.min.js.map +0 -7
  45. package/dist/chunk-RI7T5VFD.min.js.map +0 -7
  46. package/dist/chunk-RN6QIBWL.min.js +0 -2
  47. package/dist/chunk-RN6QIBWL.min.js.map +0 -7
  48. package/dist/chunk-VKCFJ4OT.min.js +0 -2
  49. package/dist/chunk-VKCFJ4OT.min.js.map +0 -7
  50. package/dist/chunk-VMTTYB4L.min.js +0 -2
  51. package/dist/chunk-VMTTYB4L.min.js.map +0 -7
  52. package/dist/chunk-VP4WLF5A.js +0 -1323
  53. package/dist/chunk-VP4WLF5A.js.map +0 -7
  54. package/dist/chunk-YA3W4XKH.js +0 -1323
  55. package/dist/chunk-YA3W4XKH.js.map +0 -7
  56. package/dist/compiler.js +0 -1799
  57. package/dist/compiler.js.map +0 -7
  58. package/dist/compiler.min.js +0 -2
  59. package/dist/compiler.min.js.map +0 -7
  60. package/dist/components.js +0 -229
  61. package/dist/data.js +0 -638
  62. package/dist/devtools.js +0 -10
  63. package/dist/devtools.js.map +0 -7
  64. package/dist/devtools.min.js +0 -2
  65. package/dist/devtools.min.js.map +0 -7
  66. package/dist/dom.js +0 -439
  67. package/dist/form.js +0 -509
  68. package/dist/h.js +0 -152
  69. package/dist/head.js +0 -51
  70. package/dist/helpers.js +0 -140
  71. package/dist/hooks.js +0 -210
  72. package/dist/index.js +0 -3576
  73. package/dist/index.js.map +0 -7
  74. package/dist/index.min.js.map +0 -7
  75. package/dist/jsx-dev-runtime.js +0 -23
  76. package/dist/jsx-dev-runtime.js.map +0 -7
  77. package/dist/jsx-dev-runtime.min.js.map +0 -7
  78. package/dist/jsx-runtime.js +0 -21
  79. package/dist/jsx-runtime.js.map +0 -7
  80. package/dist/jsx-runtime.min.js.map +0 -7
  81. package/dist/reactive.js +0 -432
  82. package/dist/render.js +0 -53
  83. package/dist/render.js.map +0 -7
  84. package/dist/render.min.js.map +0 -7
  85. package/dist/scheduler.js +0 -246
  86. package/dist/skeleton.js +0 -363
  87. package/dist/store.js +0 -83
  88. package/dist/testing.js +0 -439
  89. package/dist/testing.js.map +0 -7
  90. package/dist/testing.min.js.map +0 -7
  91. package/dist/what.js +0 -117
@@ -1,2 +0,0 @@
1
- import{I as U,K as nt,M as ut,N as at,a as G,c as F,e as D,m as q}from"./chunk-VMTTYB4L.min.js";var Z=null;function Gt(t){Z=typeof t=="function"?t:null}function Pt(t,n,e){if(e&&e.length>0){let o=e.length===1?e[0]:e;n?n.children=o:n={children:o}}return nt({tag:t,props:n||{},children:e||[],key:null,_vnode:!0})}var ht=new Set(["href","src","action","formaction","formAction"]);function _t(t){if(typeof t!="string")return!0;let n=t.trim().replace(/[\s\x00-\x1f]/g,"").toLowerCase();return!(n.startsWith("javascript:")||n.startsWith("data:")||n.startsWith("vbscript:"))}var Ct={tr:{depth:2,wrap:"<table><tbody>",unwrap:"</tbody></table>"},td:{depth:3,wrap:"<table><tbody><tr>",unwrap:"</tr></tbody></table>"},th:{depth:3,wrap:"<table><tbody><tr>",unwrap:"</tr></tbody></table>"},thead:{depth:1,wrap:"<table>",unwrap:"</table>"},tbody:{depth:1,wrap:"<table>",unwrap:"</table>"},tfoot:{depth:1,wrap:"<table>",unwrap:"</table>"},colgroup:{depth:1,wrap:"<table>",unwrap:"</table>"},col:{depth:1,wrap:"<table>",unwrap:"</table>"},caption:{depth:1,wrap:"<table>",unwrap:"</table>"}},wt=new Set(["svg","path","circle","rect","line","polyline","polygon","ellipse","g","defs","use","text","tspan","foreignObject","clipPath","mask","pattern","linearGradient","radialGradient","stop","marker","symbol","image","animate","animateTransform","animateMotion","set","filter","feGaussianBlur","feOffset","feMerge","feMergeNode","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feImage","feMorphology","feSpecularLighting","feTile","feTurbulence","feDistantLight","fePointLight","feSpotLight"]);function bt(t){let n=t.match(/^<([a-zA-Z][a-zA-Z0-9]*)/);return n?n[1]:""}function At(t){let n=t.trim(),e=bt(n);if(wt.has(e))return Lt(n);let o=Ct[e];if(o){let r=document.createElement("template");r.innerHTML=o.wrap+n+o.unwrap;let y=r.content.firstChild;for(let c=0;c<o.depth;c++)y=y.firstChild;return()=>y.cloneNode(!0)}let i=document.createElement("template");return i.innerHTML=n,()=>i.content.firstChild.cloneNode(!0)}var gt=!1;function Ot(t){return G&&!gt&&(gt=!0,console.warn("[what] template() is a compiler internal. Use JSX instead. Direct calls with user input can lead to XSS vulnerabilities.")),At(t)}function Lt(t){let n=t.trim();if(bt(n)==="svg"){let i=document.createElement("template");return i.innerHTML=n,()=>i.content.firstChild.cloneNode(!0)}let o=document.createElement("template");return o.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg">${n}</svg>`,()=>o.content.firstChild.firstChild.cloneNode(!0)}function Ut(t,n,e){if(typeof n=="function"&&n._mapArray)return n(t,e||null);if(typeof n=="function"){let o=n(),i=typeof o;if(i==="string"||i==="number"){let y=document.createTextNode(String(o)),c=e||null;c?t.insertBefore(y,c):t.appendChild(y),Z&&Z(t,String(o));let g=y,s=!0;return D(()=>{let d=n(),l=typeof d;if(s&&(l==="string"||l==="number")){let b=String(d);y.data!==b&&(y.data=b),Z&&Z(t,b)}else s=!1,g=Q(t,d,g,c)}),y}let r=null;return D(()=>{r=Q(t,n(),r,e||null)}),r}if(typeof n=="string"||typeof n=="number"){let o=document.createTextNode(String(n));return e?t.insertBefore(o,e):t.appendChild(o),o}return n!=null&&typeof n=="object"&&n.nodeType>0?(e?t.insertBefore(n,e):t.appendChild(n),n):Q(t,n,null,e||null)}function xt(t){return!t||typeof t!="object"?!1:typeof Node<"u"&&t instanceof Node?!0:typeof t.nodeType=="number"&&typeof t.nodeName=="string"}function Tt(t){return!!t&&typeof t=="object"&&(t._vnode===!0||"tag"in t)}var ct=typeof SVGElement<"u";function Et(t){return ct&&t instanceof SVGElement&&t.tagName!=="foreignObject"}function dt(t){return t==null?[]:Array.isArray(t)?t:[t]}function ft(t,n,e){if(t==null||typeof t=="boolean")return e;if(Array.isArray(t)){for(let o=0;o<t.length;o++)ft(t[o],n,e);return e}if(typeof t=="function")return ft(t(),n,e),e;if(typeof t=="string"||typeof t=="number")return e.push(document.createTextNode(String(t))),e;if(xt(t)){if(t.nodeType===11&&t.childNodes.length>0){let o=Array.from(t.childNodes);for(let i=0;i<o.length;i++)e.push(o[i])}else e.push(t);return e}return Tt(t)?(e.push(nt(t,n,Et(n))),e):(e.push(document.createTextNode(String(t))),e)}function St(t,n){if(t.length!==n.length)return!1;for(let e=0;e<t.length;e++)if(t[e]!==n[e])return!1;return!0}function Q(t,n,e,o){if(!t||typeof t.insertBefore!="function")return G&&console.warn("[what] reconcileInsert called with invalid parent:",t),e;let i=o||null;if(n==null||typeof n=="boolean"){let s=dt(e);for(let d=0;d<s.length;d++){let l=s[d];l.parentNode===t&&(U(l),t.removeChild(l))}return null}if((typeof n=="string"||typeof n=="number")&&e&&!Array.isArray(e)&&e.nodeType===3){let s=String(n);return e.data!==s&&(e.data=s),e}if(typeof n=="object"&&n!==null&&n.nodeType>0&&!Array.isArray(n)){if(n===e)return e;if(e&&!Array.isArray(e)&&e.nodeType>0)return e.parentNode===t?(U(e),t.replaceChild(n,e)):i?t.insertBefore(n,i):t.appendChild(n),n}let r=ft(n,t,[]),y=dt(e);if(St(y,r))return e;let c=r.length;for(let s=0;s<y.length;s++){let d=y[s];if(d.parentNode!==t)continue;let l=!1;for(let b=0;b<c;b++)if(r[b]===d){l=!0;break}l||(U(d),t.removeChild(d))}let g=i;for(let s=r.length-1;s>=0;s--){let d=r[s];(d.parentNode!==t||d.nextSibling!==g)&&(g&&g.parentNode!==t&&(g=null),g?t.insertBefore(d,g):t.appendChild(d)),g=d}return r.length===0?null:r.length===1?r[0]:r}function qt(t,n,e){let o=e?.key,i=e?.raw||!1,r=(y,c)=>{let g=[],s=[],d=[],l=o&&!i?new Map:null,b=document.createComment("/list");return y.insertBefore(b,c||null),D(()=>{let x=t()||[];o?jt(y,b,g,x,s,d,n,o,l):Mt(y,b,g,x,s,d,n),g=x.length>0?x.slice():x}),b};return r._mapArray=!0,r}function Mt(t,n,e,o,i,r,y){let c=o.length,g=e.length;if(c===0){if(g>0){for(let a=0;a<g;a++)r[a]&&r[a]();for(let a=g-1;a>=0;a--){let u=i[a];u&&((u._componentCtx||u._dispose||u._propEffects)&&U(u),u.parentNode===t&&t.removeChild(u))}i.length=0,r.length=0}return}if(g===0){let a=document.createDocumentFragment();for(let u=0;u<c;u++){let L=o[u],E=q(W=>(r[u]=W,y(L,u)));i[u]=E,a.appendChild(E)}t.insertBefore(a,n);return}let s=0,d=Math.min(g,c);for(;s<d&&e[s]===o[s];)s++;if(s===g&&s===c)return;let l=g-1,b=c-1;for(;l>=s&&b>=s&&e[l]===o[b];)l--,b--;let x=new Array(c),p=new Array(c);for(let a=0;a<s;a++)x[a]=i[a],p[a]=r[a];for(let a=b+1;a<c;a++){let u=l+1+(a-b-1);x[a]=i[u],p[a]=r[u]}let _=b-s+1,A=l-s+1;if(_===0)for(let a=s;a<=l;a++)r[a]?.(),i[a]?.parentNode&&i[a].parentNode.removeChild(i[a]);else if(A===0){let a=s<c&&x[b+1]?x[b+1]:n,u=document.createDocumentFragment();for(let L=s;L<=b;L++){let E=o[L],W=L;x[L]=q(S=>(p[W]=S,y(E,W))),u.appendChild(x[L])}t.insertBefore(u,a)}else Bt(t,n,e,o,i,r,y,s,l,b,x,p);i.length=c,r.length=c;for(let a=0;a<c;a++)i[a]=x[a],r[a]=p[a]}function Bt(t,n,e,o,i,r,y,c,g,s,d,l){let b=new Map;for(let u=c;u<=g;u++)b.set(e[u],u);let x=s-c+1,p=new Int32Array(x);p.fill(-1);for(let u=c;u<=s;u++){let L=b.get(o[u]);L!==void 0&&(b.delete(o[u]),d[u]=i[L],l[u]=r[L],p[u-c]=L)}for(let[,u]of b)r[u]?.(),i[u]?.parentNode&&i[u].parentNode.removeChild(i[u]);let _=x-Ht(p,x),A=new Uint8Array(x);if(_>1){let u=new Int32Array(_),L=new Int32Array(_),E=0;for(let S=0;S<x;S++)p[S]!==-1&&(u[E]=p[S],L[E]=S,E++);let W=pt(u,_);for(let S=0;S<W.length;S++)A[L[W[S]]]=1}else if(_===1){for(let u=0;u<x;u++)if(p[u]!==-1){A[u]=1;break}}for(let u=c;u<=s;u++)if(!d[u]){let L=o[u],E=u;d[u]=q(W=>(l[E]=W,y(L,E)))}let a=s+1<d.length&&d[s+1]?d[s+1]:n;for(let u=s;u>=c;u--){let L=u-c;(p[L]===-1||!A[L])&&(a&&a.parentNode!==t&&(a=n),t.insertBefore(d[u],a)),a=d[u]}}function Ht(t,n){let e=0;for(let o=0;o<n;o++)t[o]===-1&&e++;return e}function pt(t,n){if(n===0)return[];if(n===1)return[0];let e=new Int32Array(n),o=new Int32Array(n),i=1;e[0]=0,o[0]=-1;for(let c=1;c<n;c++)if(t[c]>t[e[i-1]])o[c]=e[i-1],e[i++]=c;else{let g=0,s=i-1;for(;g<s;){let d=g+s>>1;t[e[d]]<t[c]?g=d+1:s=d}e[g]=c,o[c]=g>0?e[g-1]:-1}let r=new Array(i),y=e[i-1];for(let c=i-1;c>=0;c--)r[c]=y,y=o[y];return r}function $t(){return document.createComment("i")}function z(t,n,e,o){let i=n;for(;i&&i!==e;){let r=i.nextSibling;t.insertBefore(i,o),i=r}}function ot(t,n,e){let o=n;for(;o&&o!==e;){let i=o.nextSibling;(o._componentCtx||o._dispose||o._propEffects)&&U(o),t.removeChild(o),o=i}}function it(t,n,e,o,i,r,y,c,g){let s;if(i){let b=o(n),x=g(n);s=x,i.set(b,{itemSig:x})}else s=n;let d=$t();t.appendChild(d);let l=q(b=>(c[e]=b,r(s,e)));t.appendChild(l),y[e]=d}function jt(t,n,e,o,i,r,y,c,g){let s=o.length,d=e.length;if(s===0){if(d>0){for(let f=0;f<d;f++)r[f]&&r[f]();i[0]&&ot(t,i[0],n),i.length=0,r.length=0,g&&g.clear()}return}if(d===0){let f=document.createDocumentFragment();for(let C=0;C<s;C++)it(f,o[C],C,c,g,y,i,r,F);t.insertBefore(f,n);return}let l=0,b=Math.min(d,s);for(;l<b;){if(e[l]===o[l]){l++;continue}let f=c(e[l]),C=c(o[l]);if(f!==C)break;g&&g.get(f).itemSig.set(o[l]),l++}let x=d-1,p=s-1;for(;x>=l&&p>=l;){if(e[x]===o[p]){x--,p--;continue}let f=c(e[x]),C=c(o[p]);if(f!==C)break;g&&g.get(f).itemSig.set(o[p]),x--,p--}if(l>x&&l>p)return;let _=new Array(s),A=new Array(s);for(let f=0;f<l;f++)_[f]=i[f],A[f]=r[f];for(let f=p+1;f<s;f++){let C=x+1+(f-p-1);_[f]=i[C],A[f]=r[C]}let a=p-l+1,u=x-l+1;if(u===0){let f=p+1<s&&_[p+1]?_[p+1]:n,C=document.createDocumentFragment();for(let T=l;T<=p;T++)it(C,o[T],T,c,g,y,_,A,F);t.insertBefore(C,f),X(i,r,_,A,s);return}if(a===0){for(let f=l;f<=x;f++){r[f]?.();let C=P(t,i[f],i,f,n);ot(t,i[f],C),g&&g.delete(c(e[f]))}X(i,r,_,A,s);return}if(a===u&&a>=2&&a<=Math.max(u,200)){let f=0,C=-1,T=-1;for(let m=0;m<a&&f<=4;m++){let w=c(e[l+m]),K=c(o[l+m]);w!==K&&(f===0?C=m:f===1&&(T=m),f++)}if(f===2){let m=l+C,w=l+T,K=c(e[m]),N=c(e[w]),O=c(o[m]),v=c(o[w]);if(K===v&&N===O){for(let h=0;h<l;h++)_[h]=i[h],A[h]=r[h];for(let h=l;h<=p;h++)_[h]=i[h],A[h]=r[h];for(let h=p+1;h<s;h++){let j=x+1+(h-p-1);_[h]=i[j],A[h]=r[j]}let V=_[m];_[m]=_[w],_[w]=V;let H=A[m];if(A[m]=A[w],A[w]=H,g){if(o[m]!==e[m]){let h=c(o[m]),j=g.get(h);j&&j.itemSig.set(o[m])}if(o[w]!==e[w]){let h=c(o[w]),j=g.get(h);j&&j.itemSig.set(o[w])}}let B=w===m+1||m===w+1,$=Math.min(m,w),M=Math.max(m,w);if(B){let h=P(t,i[M],i,M,n);z(t,i[M],h,i[$])}else{let h=P(t,i[w],i,w,n),j=document.createComment("tmp");t.insertBefore(j,i[w]),z(t,i[w],h,i[m]);let k=P(t,i[m],i,m,n);z(t,i[m],k,j),t.removeChild(j)}X(i,r,_,A,s);return}}if(f>=2&&f<=a){let m=C,w=null,K=-1,N=-1,O=!1,v=c(e[l+m]),V=-1;for(let H=m;H<a;H++)if(c(o[l+H])===v){V=H;break}if(V>m){let H=!0;for(let B=m;B<V;B++)if(c(e[l+B+1])!==c(o[l+B])){H=!1;break}if(H){let B=!0;for(let $=V+1;$<a;$++)if(c(e[l+$])!==c(o[l+$])){B=!1;break}B&&(O=!0,K=l+m,N=l+V,w=v)}}if(!O){let H=c(o[l+m]),B=-1;for(let $=m;$<u;$++)if(c(e[l+$])===H){B=$;break}if(B>m){let $=!0;for(let M=m;M<B;M++)if(c(e[l+M])!==c(o[l+M+1])){$=!1;break}if($){let M=!0;for(let h=B+1;h<a;h++)if(c(e[l+h])!==c(o[l+h])){M=!1;break}M&&(O=!0,K=l+B,N=l+m,w=H)}}}if(O){for(let h=l;h<=x;h++)_[h]=i[h],A[h]=r[h];let H=_[K],B=A[K];if(K<N)for(let h=K;h<N;h++)_[h]=_[h+1],A[h]=A[h+1];else for(let h=K;h>N;h--)_[h]=_[h-1],A[h]=A[h-1];if(_[N]=H,A[N]=B,g)for(let h=l;h<=p;h++){let j=c(o[h]);if(o[h]!==e[h]){let k=g.get(j);k&&k.itemSig.set(o[h])}}let $=P(t,H,i,K,n),M;N+1<s?M=_[N+1]:M=n,(N>=p+1||M&&M.parentNode!==t)&&(M=n),z(t,H,$,M),X(i,r,_,A,s);return}}}let L=new Map;for(let f=l;f<=x;f++)L.set(c(e[f]),f);let E=new Int32Array(a);E.fill(-1);for(let f=l;f<=p;f++){let C=c(o[f]),T=L.get(C);T!==void 0&&(L.delete(C),_[f]=i[T],A[f]=r[T],E[f-l]=T,g&&o[f]!==e[T]&&g.get(C).itemSig.set(o[f]))}let W=[...L.values()].sort((f,C)=>C-f);for(let f of W){r[f]?.();let C=P(t,i[f],i,f,n);ot(t,i[f],C),g&&g.delete(c(e[f]))}for(let f=l;f<=p;f++)if(!_[f]){let C=document.createDocumentFragment();it(C,o[f],f,c,g,y,_,A,F),_[f]._frag=C}let S=0,lt=!0,st=-1;for(let f=0;f<a;f++)E[f]!==-1&&(S++,E[f]<=st&&(lt=!1),st=E[f]);let I=new Uint8Array(a);if(lt)for(let f=0;f<a;f++)E[f]!==-1&&(I[f]=1);else if(S>1){let f=new Int32Array(S),C=new Int32Array(S),T=0;for(let w=0;w<a;w++)E[w]!==-1&&(f[T]=E[w],C[T]=w,T++);let m=pt(f,S);for(let w=0;w<m.length;w++)I[C[m[w]]]=1}else if(S===1){for(let f=0;f<a;f++)if(E[f]!==-1){I[f]=1;break}}X(i,r,_,A,s);let et=p+1<s&&i[p+1]?i[p+1]:n;for(let f=p;f>=l;f--){let C=f-l,T=i[f];if(E[C]===-1)T._frag&&(t.insertBefore(T._frag,et),delete T._frag);else if(!I[C]){let m=P(t,T,i,f,n);z(t,T,m,et)}et=T}}function P(t,n,e,o,i){let r=n.nextSibling;for(;r&&r!==i;){if(r.nodeType===8&&r.data==="i")return r;r=r.nextSibling}return i}function X(t,n,e,o,i){t.length=i,n.length=i;for(let r=0;r<i;r++)t[r]=e[r],n[r]=o[r]}function zt(t,n){for(let e in n){let o=n[e];if(e.startsWith("on")&&e.length>2){let i=e.slice(2).toLowerCase();t.addEventListener(i,o);continue}if(typeof o=="function"&&!e.startsWith("on")){if(t._propEffects||(t._propEffects={}),t._propEffects[e])try{t._propEffects[e]()}catch{}e==="class"||e==="className"?t._propEffects[e]=D(()=>{let i=o()||"";ct&&t instanceof SVGElement?t.setAttribute("class",i):t.className=i}):e==="style"&&typeof o()=="object"?t._propEffects[e]=D(()=>{let i=o();for(let r in i)t.style[r]=i[r]??""}):t._propEffects[e]=D(()=>{Y(t,e,o())})}else Y(t,e,o)}}function Y(t,n,e){if(n==="ref"){typeof e=="function"?e(t):e&&typeof e=="object"&&(e.current=t);return}if(n==="key")return;if(typeof e=="function"&&!n.startsWith("on")){if(t._propEffects||(t._propEffects={}),t._propEffects[n])try{t._propEffects[n]()}catch{}t._propEffects[n]=D(()=>Y(t,n,e()));return}if((ht.has(n)||ht.has(n.toLowerCase()))&&!_t(e)){typeof console<"u"&&console.warn(`[what] Blocked unsafe URL in "${n}" attribute: ${e}`);return}let o=ct&&t instanceof SVGElement;if(n==="class"||n==="className")o?t.setAttribute("class",e||""):t.className=e||"";else if(n==="dangerouslySetInnerHTML"){let i=e?.__html??"";typeof G<"u"&&G&&typeof i=="string"&&/(<script|onerror\s*=|onload\s*=|javascript:)/i.test(i)&&console.warn("[what] dangerouslySetInnerHTML contains potential XSS vectors. Ensure content is sanitized."),t.innerHTML=i}else if(n==="innerHTML")if(e&&typeof e=="object"&&"__html"in e){let i=e.__html??"";typeof G<"u"&&G&&typeof i=="string"&&/(<script|onerror\s*=|onload\s*=|javascript:)/i.test(i)&&console.warn("[what] dangerouslySetInnerHTML contains potential XSS vectors. Ensure content is sanitized."),t.innerHTML=i}else typeof console<"u"&&e!=null&&e!==""&&console.warn('[what] Plain string innerHTML is not allowed. Use { __html: "..." } or dangerouslySetInnerHTML={{ __html: "..." }} instead.');else if(n==="style"){if(typeof e=="string")t.style.cssText=e;else if(typeof e=="object")for(let i in e)t.style[i]=e[i]??""}else n.startsWith("data-")||n.startsWith("aria-")?t.setAttribute(n,e):typeof e=="boolean"?e?t.setAttribute(n,""):t.removeAttribute(n):o?t.setAttribute(n,e):n==="value"&&t.tagName==="SELECT"?at(t,e):n in t?t[n]=e:t.setAttribute(n,e)}var yt=new Set;function Xt(t){for(let n of t)yt.has(n)||(yt.add(n),document.addEventListener(n,e=>{let o=e.target,i="$$"+n;for(;o;){let r=o[i];if(r&&(r(e),e.cancelBubble))return;o=o.parentNode}}))}function Zt(t,n,e){return t.addEventListener(n,e),()=>t.removeEventListener(n,e)}function Jt(t,n){D(()=>{for(let e in n){let o=typeof n[e]=="function"?n[e]():n[e];t.classList.toggle(e,!!o)}})}var tt=!1,R=null;function Qt(){return tt}function Yt(t,n){tt=!0,R={parent:n,index:0};try{return J(t,n)}finally{tt=!1,R=null}}function mt(t){let n=t.childNodes;for(;R.index<n.length;){let e=n[R.index];if(e.nodeType===8){let o=e.textContent;if(o==="$"||o==="/$"||o==="[]"||o==="/[]"){R.index++;continue}}return R.index++,e}return null}function rt(){return typeof process<"u"&&!1}function J(t,n){if(t==null||typeof t=="boolean")return null;if(typeof t=="string"||typeof t=="number"){let o=mt(n),i=String(t);if(o&&o.nodeType===3)return rt()&&o.textContent!==i&&(console.warn(`[what] Hydration mismatch: expected text "${i}", got "${o.textContent}"`),o.textContent=i),o;rt()&&console.warn(`[what] Hydration mismatch: expected text node "${i}", got ${o?o.nodeName:"nothing"}. Falling back to client render.`);let r=document.createTextNode(i);return o?n.replaceChild(r,o):n.appendChild(r),r}if(typeof t=="function"){let o=t(),i=J(o,n);return D(()=>{let r=t();tt||(i=Q(n,r,i,null))}),i}if(Array.isArray(t)){let o=[];for(let i of t){let r=J(i,n);r&&o.push(r)}return o.length===1?o[0]:o}if(typeof t=="object"&&t._vnode){if(typeof t.tag=="function"){let y=ut(),c=t.tag,g=t.props||{},s=t.children||[],d={hooks:[],hookIndex:0,effects:[],cleanups:[],mounted:!1,disposed:!1,Component:c,_parentCtx:y[y.length-1]||null,_errorBoundary:null};y.push(d);let l;try{let b=s.length===0?void 0:s.length===1?s[0]:s;l=c({...g,children:b})}catch(b){return y.pop(),console.error("[what] Error in component during hydration:",c.name||"Anonymous",b),null}return y.pop(),d.mounted=!0,d._mountCallbacks&&queueMicrotask(()=>{if(!d.disposed)for(let b of d._mountCallbacks)try{b()}catch(x){console.error("[what] onMount error:",x)}}),J(l,n)}let o=mt(n),i=t.tag.toUpperCase();if(o&&o.nodeType===1&&o.nodeName===i){Dt(o,t.props||{});let y=R;if(R={parent:o,index:0},t.props?.dangerouslySetInnerHTML?.__html==null)for(let g of t.children)J(g,o);return R=y,o}rt()&&console.warn(`[what] Hydration mismatch: expected <${t.tag}>, got ${o?o.nodeName:"nothing"}. Falling back to client render.`);let r=document.createElement(t.tag);for(let y in t.props||{})y==="children"||y==="key"||Y(r,y,t.props[y]);for(let y of t.children)Q(r,y,null,null);return o?n.replaceChild(r,o):n.appendChild(r),r}if(xt(t))return t;let e=document.createTextNode(String(t));return n.appendChild(e),e}function Dt(t,n){for(let e in n){if(e==="children"||e==="key"||e==="ref"||e==="dangerouslySetInnerHTML"||e==="innerHTML")continue;let o=n[e];if(e.startsWith("on")&&e.length>2){let i=e.slice(2).toLowerCase();t.addEventListener(i,o);continue}if(e.startsWith("$$")){t[e]=o;continue}if(typeof o=="function"&&!e.startsWith("on")){e==="class"||e==="className"?D(()=>{t.className=o()||""}):e==="style"&&typeof o()=="object"?D(()=>{let i=o();for(let r in i)t.style[r]=i[r]??""}):D(()=>{Y(t,e,o())});continue}}}export{Gt as a,Pt as b,At as c,Ot as d,Lt as e,Ut as f,qt as g,zt as h,Y as i,Xt as j,Zt as k,Jt as l,Qt as m,Yt as n};
2
- //# sourceMappingURL=chunk-L6XOF7P4.min.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/render.js"],
4
- "sourcesContent": ["// What Framework - Fine-Grained Rendering Primitives\n// Solid-style rendering: components run once, signals create individual DOM effects.\n// No VDOM diffing \u2014 direct DOM manipulation with surgical signal-driven updates.\n\nimport { effect, untrack, createRoot, _createItemScope, signal, __DEV__ } from './reactive.js';\nimport { createDOM, disposeTree, getCurrentComponent, getComponentStack, _setSelectValue } from './dom.js';\nexport { effect, untrack };\n\n// --- Generic text insertion hook ---\n// External text engines (e.g., what-text) register a callback here via\n// _setTextInsertHook(). When null (default), zero cost \u2014 no module loaded,\n// no branch taken. The hook receives (parentElement, textString) on every\n// dynamic text insertion and update.\nlet _onTextInsert = null;\n\nexport function _setTextInsertHook(fn) {\n _onTextInsert = typeof fn === 'function' ? fn : null;\n}\n\n// --- _$createComponent(Component, props, children) ---\n// Internal compiler target for component instantiation. The compiler emits calls\n// to this function instead of h() \u2014 keeping h() out of compiled output entirely.\n// Merges children into props and delegates to createDOM which calls createComponent.\n\nexport function _$createComponent(Component, props, children) {\n if (children && children.length > 0) {\n const mergedChildren = children.length === 1 ? children[0] : children;\n // Mutate props in place when possible to avoid object spread allocation.\n // Compiled output creates a fresh props object per call, so mutation is safe.\n if (props) {\n props.children = mergedChildren;\n } else {\n props = { children: mergedChildren };\n }\n }\n // Build a VNode-like object and pass to createDOM which handles component execution\n return createDOM({ tag: Component, props: props || {}, children: children || [], key: null, _vnode: true });\n}\n\n// --- URL Sanitization for DOM attributes ---\n// Rejects javascript:, data:, vbscript: protocols (case-insensitive, trimmed).\n\nconst URL_ATTRS = new Set(['href', 'src', 'action', 'formaction', 'formAction']);\n\nfunction isSafeUrl(url) {\n if (typeof url !== 'string') return true; // non-string values are not URL-injection risks\n const normalized = url.trim().replace(/[\\s\\x00-\\x1f]/g, '').toLowerCase();\n if (normalized.startsWith('javascript:')) return false;\n if (normalized.startsWith('data:')) return false;\n if (normalized.startsWith('vbscript:')) return false;\n return true;\n}\n\n// --- template(html) ---\n// Pre-parse HTML string into a <template> element. Returns a factory function\n// that clones the DOM tree via cloneNode(true) \u2014 2-5x faster than createElement chains.\n// INTERNAL: Used by the compiler. Not intended for direct use by application code.\n// Exported as both `template` (for compiler output) and `_template` (to signal internal use).\n\n// Table child elements that need special parent wrapping for innerHTML parsing.\n// Browsers auto-correct bare <tr>, <td>, etc. when orphaned \u2014 wrapping prevents silent drops.\nconst TABLE_WRAPPERS = {\n tr: { depth: 2, wrap: '<table><tbody>', unwrap: '</tbody></table>' },\n td: { depth: 3, wrap: '<table><tbody><tr>', unwrap: '</tr></tbody></table>' },\n th: { depth: 3, wrap: '<table><tbody><tr>', unwrap: '</tr></tbody></table>' },\n thead: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n tbody: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n tfoot: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n colgroup: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n col: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n caption: { depth: 1, wrap: '<table>', unwrap: '</table>' },\n};\n\n// SVG element tags that must be created in an SVG namespace context.\nconst SVG_ELEMENTS = new Set([\n 'svg', 'path', 'circle', 'rect', 'line', 'polyline', 'polygon', 'ellipse',\n 'g', 'defs', 'use', 'text', 'tspan', 'foreignObject', 'clipPath', 'mask',\n 'pattern', 'linearGradient', 'radialGradient', 'stop', 'marker', 'symbol',\n 'image', 'animate', 'animateTransform', 'animateMotion', 'set',\n 'filter', 'feGaussianBlur', 'feOffset', 'feMerge', 'feMergeNode',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite',\n 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feFlood', 'feImage', 'feMorphology', 'feSpecularLighting',\n 'feTile', 'feTurbulence', 'feDistantLight', 'fePointLight', 'feSpotLight',\n]);\n\nfunction getLeadingTag(html) {\n const m = html.match(/^<([a-zA-Z][a-zA-Z0-9]*)/);\n return m ? m[1] : '';\n}\n\n// Internal implementation \u2014 no warnings. Used by compiler via _$template.\nfunction _$templateImpl(html) {\n const trimmed = html.trim();\n const tag = getLeadingTag(trimmed);\n\n // SVG namespace: parse inside an SVG container then extract\n if (SVG_ELEMENTS.has(tag)) {\n return svgTemplate(trimmed);\n }\n\n // Table element wrapping: parse inside proper table parent then extract\n const tableInfo = TABLE_WRAPPERS[tag];\n if (tableInfo) {\n const t = document.createElement('template');\n t.innerHTML = tableInfo.wrap + trimmed + tableInfo.unwrap;\n // Pre-navigate to the target element once \u2014 avoids per-clone traversal.\n let target = t.content.firstChild;\n for (let i = 0; i < tableInfo.depth; i++) target = target.firstChild;\n return () => target.cloneNode(true);\n }\n\n const t = document.createElement('template');\n t.innerHTML = trimmed;\n return () => t.content.firstChild.cloneNode(true);\n}\n\n// Public export \u2014 warns in dev mode that this is a compiler internal.\n// Application code should use JSX, which the compiler transforms into _$template calls.\nlet _templateWarned = false;\nexport function template(html) {\n if (__DEV__ && !_templateWarned) {\n _templateWarned = true;\n console.warn(\n '[what] template() is a compiler internal. Use JSX instead. ' +\n 'Direct calls with user input can lead to XSS vulnerabilities.'\n );\n }\n return _$templateImpl(html);\n}\n\n// Compiler-internal alias \u2014 preferred name for compiled output (no warning)\nexport { _$templateImpl as _$template };\n\n// Legacy alias kept for backwards compat\nexport { template as _template };\n\n// --- svgTemplate(html) ---\n// Parse SVG content inside an SVG namespace container. Without this, innerHTML on a\n// <template> element creates HTML-namespace nodes, making SVG elements invisible.\n// If the HTML is a complete <svg> tag, it is parsed inside a temporary <div> so the\n// browser uses the correct SVG namespace. For inner SVG elements (path, circle, etc.),\n// they are wrapped in an <svg> container for parsing and then extracted.\n\nexport function svgTemplate(html) {\n const trimmed = html.trim();\n const tag = getLeadingTag(trimmed);\n\n if (tag === 'svg') {\n // Complete <svg> element \u2014 parse in a div (browsers handle the namespace)\n const t = document.createElement('template');\n t.innerHTML = trimmed;\n return () => t.content.firstChild.cloneNode(true);\n }\n\n // Inner SVG element (path, circle, g, etc.) \u2014 wrap in <svg> for namespace context\n const t = document.createElement('template');\n t.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\">${trimmed}</svg>`;\n return () => t.content.firstChild.firstChild.cloneNode(true);\n}\n\n// --- insert(parent, child, marker?) ---\n// Reactive child insertion. Handles all child types:\n// - string/number \u2192 text node\n// - function \u2192 effect that updates text node reactively\n// - DOM node \u2192 append directly\n// - array \u2192 insert each element\n\nexport function insert(parent, child, marker) {\n // mapArray inserter: self-managing reactive list with its own effect\n if (typeof child === 'function' && child._mapArray) {\n return child(parent, marker || null);\n }\n\n if (typeof child === 'function') {\n // Fast path: if the first evaluation returns a string/number, optimistically\n // create a text node for direct updates. If the value type changes later\n // (e.g., text -> vnode), fall back to full reconcileInsert.\n const first = child();\n const t = typeof first;\n if (t === 'string' || t === 'number') {\n const textNode = document.createTextNode(String(first));\n const m = marker || null;\n if (m) parent.insertBefore(textNode, m);\n else parent.appendChild(textNode);\n if (_onTextInsert) _onTextInsert(parent, String(first));\n let current = textNode;\n let isTextFastPath = true;\n effect(() => {\n const val = child();\n const vt = typeof val;\n if (isTextFastPath && (vt === 'string' || vt === 'number')) {\n // Fast path: still text \u2014 update data directly (no allocations)\n const str = String(val);\n if (textNode.data !== str) textNode.data = str;\n if (_onTextInsert) _onTextInsert(parent, str);\n } else {\n // Type changed \u2014 fall back to full reconcile\n isTextFastPath = false;\n current = reconcileInsert(parent, val, current, m);\n }\n });\n return textNode;\n }\n // General path for non-text reactive children (first value was null/vnode/array).\n // Let the effect handle both the initial insert and subsequent updates to avoid\n // double-evaluating child() (which would create components twice on mount).\n let current = null;\n effect(() => {\n current = reconcileInsert(parent, child(), current, marker || null);\n });\n return current;\n }\n\n // Static text: create text node directly, skip reconcileInsert overhead\n if (typeof child === 'string' || typeof child === 'number') {\n const textNode = document.createTextNode(String(child));\n if (marker) parent.insertBefore(textNode, marker);\n else parent.appendChild(textNode);\n return textNode;\n }\n\n // Static DOM node: insert directly, skip reconcileInsert overhead\n if (child != null && typeof child === 'object' && child.nodeType > 0) {\n if (marker) parent.insertBefore(child, marker);\n else parent.appendChild(child);\n return child;\n }\n\n return reconcileInsert(parent, child, null, marker || null);\n}\n\nfunction isDomNode(value) {\n if (!value || typeof value !== 'object') return false;\n if (typeof Node !== 'undefined' && value instanceof Node) return true;\n return typeof value.nodeType === 'number' && typeof value.nodeName === 'string';\n}\n\nfunction isVNode(value) {\n return !!value && typeof value === 'object' && (value._vnode === true || 'tag' in value);\n}\n\n// Check if parent is an SVG element. Cached typeof check avoids repeated lookups.\nconst _hasSVGElement = typeof SVGElement !== 'undefined';\nfunction isSvgParent(parent) {\n return _hasSVGElement\n && parent instanceof SVGElement\n && parent.tagName !== 'foreignObject';\n}\n\nfunction asNodeArray(value) {\n if (value == null) return [];\n return Array.isArray(value) ? value : [value];\n}\n\nfunction valuesToNodes(value, parent, out) {\n if (value == null || typeof value === 'boolean') return out;\n\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n valuesToNodes(value[i], parent, out);\n }\n return out;\n }\n\n // Resolve function values (reactive accessors passed through props)\n if (typeof value === 'function') {\n valuesToNodes(value(), parent, out);\n return out;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n out.push(document.createTextNode(String(value)));\n return out;\n }\n\n if (isDomNode(value)) {\n // DocumentFragments lose their children on DOM insertion, making them\n // untrackable for reconciliation. Flatten to child nodes instead.\n if (value.nodeType === 11 && value.childNodes.length > 0) {\n const children = Array.from(value.childNodes);\n for (let i = 0; i < children.length; i++) {\n out.push(children[i]);\n }\n } else {\n out.push(value);\n }\n return out;\n }\n\n if (isVNode(value)) {\n out.push(createDOM(value, parent, isSvgParent(parent)));\n return out;\n }\n\n out.push(document.createTextNode(String(value)));\n return out;\n}\n\nfunction sameNodeArray(a, b) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction reconcileInsert(parent, value, current, marker) {\n // Guard: parent must be a node that supports child operations.\n // This catches cases where a stale DOM reference (e.g., a comment node from\n // shifted childNodes indices) is mistakenly passed as the parent.\n if (!parent || typeof parent.insertBefore !== 'function') {\n if (__DEV__) {\n console.warn('[what] reconcileInsert called with invalid parent:', parent);\n }\n return current;\n }\n\n const targetMarker = marker || null;\n\n if (value == null || typeof value === 'boolean') {\n const oldNodes = asNodeArray(current);\n for (let i = 0; i < oldNodes.length; i++) {\n const oldNode = oldNodes[i];\n if (oldNode.parentNode === parent) {\n disposeTree(oldNode);\n parent.removeChild(oldNode);\n }\n }\n return null;\n }\n\n if ((typeof value === 'string' || typeof value === 'number')\n && current && !Array.isArray(current) && current.nodeType === 3) {\n const text = String(value);\n if (current.data !== text) current.data = text;\n return current;\n }\n\n // Fast path: single DOM node value with single current node \u2014 skip array allocations\n if (typeof value === 'object' && value !== null && value.nodeType > 0 && !Array.isArray(value)) {\n if (value === current) return current;\n if (current && !Array.isArray(current) && current.nodeType > 0) {\n // Replace single node with single node\n if (current.parentNode === parent) {\n disposeTree(current);\n parent.replaceChild(value, current);\n } else {\n if (targetMarker) parent.insertBefore(value, targetMarker);\n else parent.appendChild(value);\n }\n return value;\n }\n }\n\n const newNodes = valuesToNodes(value, parent, []);\n const oldNodes = asNodeArray(current);\n\n if (sameNodeArray(oldNodes, newNodes)) {\n return current;\n }\n\n // Remove old nodes not in the new set. For small arrays (typical case),\n // linear scan is faster than Set allocation + hashing.\n const newLen = newNodes.length;\n for (let i = 0; i < oldNodes.length; i++) {\n const oldNode = oldNodes[i];\n if (oldNode.parentNode !== parent) continue;\n let found = false;\n for (let j = 0; j < newLen; j++) {\n if (newNodes[j] === oldNode) { found = true; break; }\n }\n if (!found) {\n disposeTree(oldNode);\n parent.removeChild(oldNode);\n }\n }\n\n let ref = targetMarker;\n for (let i = newNodes.length - 1; i >= 0; i--) {\n const node = newNodes[i];\n if (node.parentNode !== parent || node.nextSibling !== ref) {\n // Guard against stale ref from nested reconciliation\n if (ref && ref.parentNode !== parent) ref = null;\n if (ref) parent.insertBefore(node, ref);\n else parent.appendChild(node);\n }\n ref = node;\n }\n\n if (newNodes.length === 0) return null;\n return newNodes.length === 1 ? newNodes[0] : newNodes;\n}\n\n// --- mapArray(source, mapFn, options?) ---\n// Reactive list rendering with per-item scopes.\n// Unkeyed: tracks items by reference. Keyed: tracks by key function.\n// With key + raw: mapFn receives (item, index) \u2014 raw item value. Items identified by key for\n// efficient DOM reuse/moves. Use when items have per-field signals (no wrapper needed).\n// With key (no raw): mapFn receives (itemAccessor, index) \u2014 accessor is a signal getter.\n// When item reference changes but key persists, the signal updates in place.\n// Without key: mapFn receives (item, index) \u2014 raw item value. New reference = new row.\n\nexport function mapArray(source, mapFn, options) {\n const keyFn = options?.key;\n const raw = options?.raw || false;\n\n const inserter = (parent, marker) => {\n let items = [];\n let mappedNodes = [];\n let disposeFns = [];\n // Keyed mode state: key \u2192 { itemSignal }. Null for raw/unkeyed modes.\n let keyedState = keyFn && !raw ? new Map() : null;\n\n const endMarker = document.createComment('/list');\n parent.insertBefore(endMarker, marker || null);\n\n effect(() => {\n const newItems = source() || [];\n if (keyFn) {\n reconcileKeyed(parent, endMarker, items, newItems, mappedNodes, disposeFns, mapFn, keyFn, keyedState);\n } else {\n reconcileList(parent, endMarker, items, newItems, mappedNodes, disposeFns, mapFn);\n }\n // Save a snapshot of items for next diff. Use slice() to defend against\n // in-place mutation, but skip for empty arrays (common clear case).\n items = newItems.length > 0 ? newItems.slice() : newItems;\n });\n\n return endMarker;\n };\n inserter._mapArray = true;\n return inserter;\n}\n\nfunction reconcileList(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns, mapFn) {\n const newLen = newItems.length;\n const oldLen = oldItems.length;\n\n if (newLen === 0) {\n // Fast path: clear all \u2014 dispose reactive scopes first (handles effects/cleanups),\n // then remove DOM nodes. createRoot disposal handles all tracked effects; we only\n // need disposeTree for nodes with additional reactive bindings outside createRoot.\n if (oldLen > 0) {\n for (let i = 0; i < oldLen; i++) {\n if (disposeFns[i]) disposeFns[i]();\n }\n for (let i = oldLen - 1; i >= 0; i--) {\n const node = mappedNodes[i];\n if (node) {\n // Only walk subtree if the node has reactive state not tracked by createRoot\n if (node._componentCtx || node._dispose || node._propEffects) {\n disposeTree(node);\n }\n if (node.parentNode === parent) parent.removeChild(node);\n }\n }\n mappedNodes.length = 0;\n disposeFns.length = 0;\n }\n return;\n }\n\n if (oldLen === 0) {\n // Fast path: all new\n const frag = document.createDocumentFragment();\n for (let i = 0; i < newLen; i++) {\n const item = newItems[i];\n const node = _createItemScope(dispose => {\n disposeFns[i] = dispose;\n return mapFn(item, i);\n });\n mappedNodes[i] = node;\n frag.appendChild(node);\n }\n parent.insertBefore(frag, endMarker);\n return;\n }\n\n // --- Common prefix/suffix skip ---\n let start = 0;\n const minLen = Math.min(oldLen, newLen);\n while (start < minLen && oldItems[start] === newItems[start]) start++;\n\n // If everything matches and same length, nothing changed\n if (start === oldLen && start === newLen) return;\n\n let oldEnd = oldLen - 1;\n let newEnd = newLen - 1;\n while (oldEnd >= start && newEnd >= start && oldItems[oldEnd] === newItems[newEnd]) {\n oldEnd--;\n newEnd--;\n }\n\n // Copy prefix/suffix into output arrays\n const newMapped = new Array(newLen);\n const newDispose = new Array(newLen);\n for (let i = 0; i < start; i++) {\n newMapped[i] = mappedNodes[i];\n newDispose[i] = disposeFns[i];\n }\n for (let i = newEnd + 1; i < newLen; i++) {\n // Suffix items: same item, possibly different index offset\n const oldI = oldEnd + 1 + (i - newEnd - 1);\n newMapped[i] = mappedNodes[oldI];\n newDispose[i] = disposeFns[oldI];\n }\n\n // Only reconcile the middle section: start..newEnd (new) vs start..oldEnd (old)\n const midNewLen = newEnd - start + 1;\n const midOldLen = oldEnd - start + 1;\n\n if (midNewLen === 0) {\n // Only removals in the middle\n for (let i = start; i <= oldEnd; i++) {\n disposeFns[i]?.();\n if (mappedNodes[i]?.parentNode) mappedNodes[i].parentNode.removeChild(mappedNodes[i]);\n }\n } else if (midOldLen === 0) {\n // Only insertions in the middle\n const marker = start < newLen && newMapped[newEnd + 1] ? newMapped[newEnd + 1] : endMarker;\n const frag = document.createDocumentFragment();\n for (let i = start; i <= newEnd; i++) {\n const item = newItems[i];\n const idx = i;\n newMapped[i] = _createItemScope(dispose => {\n newDispose[idx] = dispose;\n return mapFn(item, idx);\n });\n frag.appendChild(newMapped[i]);\n }\n parent.insertBefore(frag, marker);\n } else {\n // General case: reconcile middle section with LIS\n _reconcileMiddle(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns,\n mapFn, start, oldEnd, newEnd, newMapped, newDispose);\n }\n\n // Update arrays in place\n mappedNodes.length = newLen;\n disposeFns.length = newLen;\n for (let i = 0; i < newLen; i++) {\n mappedNodes[i] = newMapped[i];\n disposeFns[i] = newDispose[i];\n }\n}\n\nfunction _reconcileMiddle(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns,\n mapFn, start, oldEnd, newEnd, newMapped, newDispose) {\n // Build index map only for the middle section\n const oldIdxMap = new Map();\n for (let i = start; i <= oldEnd; i++) {\n oldIdxMap.set(oldItems[i], i);\n }\n\n // Match old items to new positions, collect old indices for LIS\n const midLen = newEnd - start + 1;\n const oldIndices = new Int32Array(midLen); // -1 = new item\n oldIndices.fill(-1);\n\n for (let i = start; i <= newEnd; i++) {\n const oldIdx = oldIdxMap.get(newItems[i]);\n if (oldIdx !== undefined) {\n oldIdxMap.delete(newItems[i]);\n newMapped[i] = mappedNodes[oldIdx];\n newDispose[i] = disposeFns[oldIdx];\n oldIndices[i - start] = oldIdx;\n }\n }\n\n // Dispose removed items\n for (const [, oldIdx] of oldIdxMap) {\n disposeFns[oldIdx]?.();\n if (mappedNodes[oldIdx]?.parentNode) mappedNodes[oldIdx].parentNode.removeChild(mappedNodes[oldIdx]);\n }\n\n // Compute LIS on old indices of reused items\n // Build the sequence of old indices for reused items only\n const reusedCount = midLen - _countNeg1(oldIndices, midLen);\n\n // Use a bitfield (via Uint8Array) to mark LIS positions \u2014 avoids Set overhead\n const inLIS = new Uint8Array(midLen);\n\n if (reusedCount > 1) {\n const seq = new Int32Array(reusedCount);\n const seqToMid = new Int32Array(reusedCount); // maps seq index \u2192 mid index\n let k = 0;\n for (let i = 0; i < midLen; i++) {\n if (oldIndices[i] !== -1) {\n seq[k] = oldIndices[i];\n seqToMid[k] = i;\n k++;\n }\n }\n const lisResult = _lis(seq, reusedCount);\n for (let i = 0; i < lisResult.length; i++) {\n inLIS[seqToMid[lisResult[i]]] = 1;\n }\n } else if (reusedCount === 1) {\n // Single reused item is trivially in LIS\n for (let i = 0; i < midLen; i++) {\n if (oldIndices[i] !== -1) { inLIS[i] = 1; break; }\n }\n }\n\n // Create new items\n for (let i = start; i <= newEnd; i++) {\n if (!newMapped[i]) {\n const item = newItems[i];\n const idx = i;\n newMapped[i] = _createItemScope(dispose => {\n newDispose[idx] = dispose;\n return mapFn(item, idx);\n });\n }\n }\n\n // Position: work backwards from the item after newEnd (suffix start or endMarker)\n let nextSibling = newEnd + 1 < newMapped.length && newMapped[newEnd + 1]\n ? newMapped[newEnd + 1] : endMarker;\n\n for (let i = newEnd; i >= start; i--) {\n const mi = i - start;\n if (oldIndices[mi] === -1 || !inLIS[mi]) {\n // New item or moved item \u2014 insert\n // Guard against stale nextSibling from nested reconciliation\n if (nextSibling && nextSibling.parentNode !== parent) nextSibling = endMarker;\n parent.insertBefore(newMapped[i], nextSibling);\n }\n nextSibling = newMapped[i];\n }\n}\n\nfunction _countNeg1(arr, len) {\n let c = 0;\n for (let i = 0; i < len; i++) if (arr[i] === -1) c++;\n return c;\n}\n\n// Longest Increasing Subsequence \u2014 returns indices into the input array.\n// O(n log n) using patience sorting. Uses typed arrays for performance.\nfunction _lis(arr, len) {\n if (len === 0) return [];\n if (len === 1) return [0];\n\n const tails = new Int32Array(len); // indices into arr\n const predecessors = new Int32Array(len);\n let tailLen = 1;\n tails[0] = 0;\n predecessors[0] = -1;\n\n for (let i = 1; i < len; i++) {\n if (arr[i] > arr[tails[tailLen - 1]]) {\n predecessors[i] = tails[tailLen - 1];\n tails[tailLen++] = i;\n } else {\n let lo = 0, hi = tailLen - 1;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (arr[tails[mid]] < arr[i]) lo = mid + 1;\n else hi = mid;\n }\n tails[lo] = i;\n predecessors[i] = lo > 0 ? tails[lo - 1] : -1;\n }\n }\n\n const result = new Array(tailLen);\n let k = tails[tailLen - 1];\n for (let i = tailLen - 1; i >= 0; i--) {\n result[i] = k;\n k = predecessors[k];\n }\n return result;\n}\n\n// --- reconcileKeyed ---\n// Keyed reconciliation: tracks items by key function, not by reference.\n// When a key persists but its item reference changes, the item signal updates\n// in place \u2014 no DOM node destruction/creation. Only effects reading the\n// item accessor re-run (e.g., textContent update for changed label).\n//\n// Multi-node items: Components return DocumentFragments (c:start, content, c:end).\n// We track each item via a start-marker comment. Moving/removing an item moves\n// all nodes from its marker up to (but not including) the next item's marker.\n\nfunction _createItemMarker() {\n return document.createComment('i');\n}\n\n// Collect all DOM nodes belonging to one item (from its marker to beforeEnd).\nfunction _collectItemNodes(marker, beforeEnd) {\n const nodes = [];\n let n = marker;\n while (n && n !== beforeEnd) {\n nodes.push(n);\n n = n.nextSibling;\n }\n return nodes;\n}\n\n// Move all nodes for an item (starting at marker) before `ref` in `parent`.\nfunction _moveItem(parent, marker, beforeEnd, ref) {\n let n = marker;\n while (n && n !== beforeEnd) {\n const next = n.nextSibling;\n parent.insertBefore(n, ref);\n n = next;\n }\n}\n\n// Remove all nodes for an item from the DOM.\nfunction _removeItemNodes(parent, marker, beforeEnd) {\n let n = marker;\n while (n && n !== beforeEnd) {\n const next = n.nextSibling;\n if (n._componentCtx || n._dispose || n._propEffects) disposeTree(n);\n parent.removeChild(n);\n n = next;\n }\n}\n\n// Create a new item: wraps mapFn result in a marker + appends to target.\nfunction _createKeyedItem(target, item, idx, keyFn, keyedState, mapFn, mappedArr, disposeArr, signal_) {\n let accessor;\n if (keyedState) {\n const key = keyFn(item);\n const itemSig = signal_(item);\n accessor = itemSig;\n keyedState.set(key, { itemSig });\n } else {\n accessor = item;\n }\n const marker = _createItemMarker();\n target.appendChild(marker);\n const result = _createItemScope(dispose => {\n disposeArr[idx] = dispose;\n return mapFn(accessor, idx);\n });\n // result may be a DocumentFragment or a single node\n target.appendChild(result);\n mappedArr[idx] = marker;\n}\n\nfunction reconcileKeyed(parent, endMarker, oldItems, newItems, mappedNodes, disposeFns, mapFn, keyFn, keyedState) {\n const newLen = newItems.length;\n const oldLen = oldItems.length;\n\n // --- Fast path: clear all ---\n if (newLen === 0) {\n if (oldLen > 0) {\n for (let i = 0; i < oldLen; i++) {\n if (disposeFns[i]) disposeFns[i]();\n }\n // Remove all nodes between first item marker and endMarker\n if (mappedNodes[0]) {\n _removeItemNodes(parent, mappedNodes[0], endMarker);\n }\n mappedNodes.length = 0;\n disposeFns.length = 0;\n if (keyedState) keyedState.clear();\n }\n return;\n }\n\n // --- Fast path: all new ---\n if (oldLen === 0) {\n const frag = document.createDocumentFragment();\n for (let i = 0; i < newLen; i++) {\n _createKeyedItem(frag, newItems[i], i, keyFn, keyedState, mapFn, mappedNodes, disposeFns, signal);\n }\n parent.insertBefore(frag, endMarker);\n return;\n }\n\n // --- Common prefix: skip matching keys at the start ---\n let start = 0;\n const minLen = Math.min(oldLen, newLen);\n while (start < minLen) {\n if (oldItems[start] === newItems[start]) { start++; continue; }\n const oldKey = keyFn(oldItems[start]);\n const newKey = keyFn(newItems[start]);\n if (oldKey !== newKey) break;\n if (keyedState) keyedState.get(oldKey).itemSig.set(newItems[start]);\n start++;\n }\n\n // --- Common suffix: skip matching keys at the end ---\n let oldEnd = oldLen - 1;\n let newEnd = newLen - 1;\n while (oldEnd >= start && newEnd >= start) {\n if (oldItems[oldEnd] === newItems[newEnd]) { oldEnd--; newEnd--; continue; }\n const oldKey = keyFn(oldItems[oldEnd]);\n const newKey = keyFn(newItems[newEnd]);\n if (oldKey !== newKey) break;\n if (keyedState) keyedState.get(oldKey).itemSig.set(newItems[newEnd]);\n oldEnd--;\n newEnd--;\n }\n\n if (start > oldEnd && start > newEnd) return;\n\n const newMapped = new Array(newLen);\n const newDispose = new Array(newLen);\n for (let i = 0; i < start; i++) {\n newMapped[i] = mappedNodes[i];\n newDispose[i] = disposeFns[i];\n }\n for (let i = newEnd + 1; i < newLen; i++) {\n const oldI = oldEnd + 1 + (i - newEnd - 1);\n newMapped[i] = mappedNodes[oldI];\n newDispose[i] = disposeFns[oldI];\n }\n\n const midNewLen = newEnd - start + 1;\n const midOldLen = oldEnd - start + 1;\n\n // --- Only additions in middle ---\n if (midOldLen === 0) {\n const ref = newEnd + 1 < newLen && newMapped[newEnd + 1] ? newMapped[newEnd + 1] : endMarker;\n const frag = document.createDocumentFragment();\n for (let i = start; i <= newEnd; i++) {\n _createKeyedItem(frag, newItems[i], i, keyFn, keyedState, mapFn, newMapped, newDispose, signal);\n }\n parent.insertBefore(frag, ref);\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n return;\n }\n\n // --- Only removals in middle ---\n if (midNewLen === 0) {\n for (let i = start; i <= oldEnd; i++) {\n disposeFns[i]?.();\n // Compute the range boundary from the live DOM. Sibling markers in\n // mappedNodes may have been detached by earlier iterations of this loop;\n // walking the DOM finds the next surviving item marker (or endMarker).\n const rangeEnd = _findNextMarkerAfter(parent, mappedNodes[i], mappedNodes, i, endMarker);\n _removeItemNodes(parent, mappedNodes[i], rangeEnd);\n if (keyedState) keyedState.delete(keyFn(oldItems[i]));\n }\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n return;\n }\n\n // --- Fast paths for common small-move cases ---\n // Detect swap (2 mismatches) or single-move (contiguous shift) cheaply\n // before falling through to the expensive LIS + backward-walk general case.\n\n if (midNewLen === midOldLen && midNewLen >= 2 && midNewLen <= Math.max(midOldLen, 200)) {\n // Count positions where keys differ\n let mismatchCount = 0;\n let mm1 = -1, mm2 = -1; // first two mismatch indices (relative to start)\n for (let i = 0; i < midNewLen && mismatchCount <= 4; i++) {\n const oldKey = keyFn(oldItems[start + i]);\n const newKey = keyFn(newItems[start + i]);\n if (oldKey !== newKey) {\n if (mismatchCount === 0) mm1 = i;\n else if (mismatchCount === 1) mm2 = i;\n mismatchCount++;\n }\n }\n\n // --- Fast path A: Pure swap (exactly 2 key mismatches, keys exchanged) ---\n if (mismatchCount === 2) {\n const i1 = start + mm1, i2 = start + mm2;\n const oldKey1 = keyFn(oldItems[i1]), oldKey2 = keyFn(oldItems[i2]);\n const newKey1 = keyFn(newItems[i1]), newKey2 = keyFn(newItems[i2]);\n\n if (oldKey1 === newKey2 && oldKey2 === newKey1) {\n // Confirmed swap. Move item at i2's DOM position before item at i1's position,\n // then move i1's nodes to where i2 was.\n for (let i = 0; i < start; i++) {\n newMapped[i] = mappedNodes[i];\n newDispose[i] = disposeFns[i];\n }\n for (let i = start; i <= newEnd; i++) {\n newMapped[i] = mappedNodes[i];\n newDispose[i] = disposeFns[i];\n }\n for (let i = newEnd + 1; i < newLen; i++) {\n const oldI = oldEnd + 1 + (i - newEnd - 1);\n newMapped[i] = mappedNodes[oldI];\n newDispose[i] = disposeFns[oldI];\n }\n\n // Swap mapped entries\n const tmpM = newMapped[i1]; newMapped[i1] = newMapped[i2]; newMapped[i2] = tmpM;\n const tmpD = newDispose[i1]; newDispose[i1] = newDispose[i2]; newDispose[i2] = tmpD;\n\n // Update keyed state signals if item references differ\n if (keyedState) {\n if (newItems[i1] !== oldItems[i1]) {\n const k = keyFn(newItems[i1]);\n const entry = keyedState.get(k);\n if (entry) entry.itemSig.set(newItems[i1]);\n }\n if (newItems[i2] !== oldItems[i2]) {\n const k = keyFn(newItems[i2]);\n const entry = keyedState.get(k);\n if (entry) entry.itemSig.set(newItems[i2]);\n }\n }\n\n // DOM moves: swap the two items' DOM ranges.\n // Adjacent swaps need special handling because moving item2 before\n // item1 invalidates the pre-computed end boundary for item1 (it was\n // item2's marker, which has now moved). For adjacent items, a single\n // _moveItem suffices. For non-adjacent items, we recompute end1 after\n // the first move.\n const isAdjacent = (i2 === i1 + 1) || (i1 === i2 + 1);\n const lo = Math.min(i1, i2), hi = Math.max(i1, i2);\n\n if (isAdjacent) {\n // Adjacent: just move the later item's nodes before the earlier item's marker.\n const endHi = _findNextMarkerAfter(parent, mappedNodes[hi], mappedNodes, hi, endMarker);\n _moveItem(parent, mappedNodes[hi], endHi, mappedNodes[lo]);\n } else {\n // Non-adjacent: use a placeholder to remember i2's position, then\n // recompute end1 after the first move (since DOM has changed).\n const end2 = _findNextMarkerAfter(parent, mappedNodes[i2], mappedNodes, i2, endMarker);\n\n const placeholder = document.createComment('tmp');\n parent.insertBefore(placeholder, mappedNodes[i2]);\n\n // Move i2's nodes to before i1's current position\n _moveItem(parent, mappedNodes[i2], end2, mappedNodes[i1]);\n // Recompute end1 \u2014 the DOM has changed, so the pre-move boundary is stale\n const end1 = _findNextMarkerAfter(parent, mappedNodes[i1], mappedNodes, i1, endMarker);\n // Move i1's nodes to where i2 was (before placeholder)\n _moveItem(parent, mappedNodes[i1], end1, placeholder);\n parent.removeChild(placeholder);\n }\n\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n return;\n }\n }\n\n // --- Fast path B: Single item relocated ---\n // One item removed from position `from` and inserted at position `to`,\n // everything between shifted by one.\n if (mismatchCount >= 2 && mismatchCount <= midNewLen) {\n // Try to detect single-move pattern:\n // If we remove element at `from` in old and insert at `to` in new,\n // the rest should match.\n // Forward move: old[from] = new[to], old[from+1..to] = new[from..to-1]\n // Backward move: old[from] = new[to], old[to..from-1] = new[to+1..from]\n\n const fromRel = mm1; // first mismatch - the moved item was here in old OR went here in new\n let movedKey = null;\n let fromAbs = -1, toAbs = -1;\n let isMove = false;\n\n // Check forward move: item at old[start+fromRel] moved later\n const candidateKey = keyFn(oldItems[start + fromRel]);\n // Find where this key ended up in new\n let destRel = -1;\n for (let i = fromRel; i < midNewLen; i++) {\n if (keyFn(newItems[start + i]) === candidateKey) { destRel = i; break; }\n }\n if (destRel > fromRel) {\n // Verify: old[fromRel+1..destRel] should match new[fromRel..destRel-1]\n let match = true;\n for (let i = fromRel; i < destRel; i++) {\n if (keyFn(oldItems[start + i + 1]) !== keyFn(newItems[start + i])) { match = false; break; }\n }\n if (match) {\n // And everything after destRel should be the same\n let afterMatch = true;\n for (let i = destRel + 1; i < midNewLen; i++) {\n if (keyFn(oldItems[start + i]) !== keyFn(newItems[start + i])) { afterMatch = false; break; }\n }\n if (afterMatch) {\n isMove = true;\n fromAbs = start + fromRel;\n toAbs = start + destRel;\n movedKey = candidateKey;\n }\n }\n }\n\n if (!isMove) {\n // Check backward move: item from later in old moved to start+fromRel in new\n const candidateKey2 = keyFn(newItems[start + fromRel]);\n let srcRel = -1;\n for (let i = fromRel; i < midOldLen; i++) {\n if (keyFn(oldItems[start + i]) === candidateKey2) { srcRel = i; break; }\n }\n if (srcRel > fromRel) {\n // Verify: old[fromRel..srcRel-1] should match new[fromRel+1..srcRel]\n let match = true;\n for (let i = fromRel; i < srcRel; i++) {\n if (keyFn(oldItems[start + i]) !== keyFn(newItems[start + i + 1])) { match = false; break; }\n }\n if (match) {\n let afterMatch = true;\n for (let i = srcRel + 1; i < midNewLen; i++) {\n if (keyFn(oldItems[start + i]) !== keyFn(newItems[start + i])) { afterMatch = false; break; }\n }\n if (afterMatch) {\n isMove = true;\n fromAbs = start + srcRel;\n toAbs = start + fromRel;\n movedKey = candidateKey2;\n }\n }\n }\n }\n\n if (isMove) {\n // Copy all mapped/dispose to new arrays\n for (let i = start; i <= oldEnd; i++) {\n newMapped[i] = mappedNodes[i];\n newDispose[i] = disposeFns[i];\n }\n\n // Shift entries in newMapped/newDispose to reflect the move\n const movedMarker = newMapped[fromAbs];\n const movedDispose = newDispose[fromAbs];\n\n if (fromAbs < toAbs) {\n // Forward move: shift [from+1..to] left by 1\n for (let i = fromAbs; i < toAbs; i++) {\n newMapped[i] = newMapped[i + 1];\n newDispose[i] = newDispose[i + 1];\n }\n } else {\n // Backward move: shift [to..from-1] right by 1\n for (let i = fromAbs; i > toAbs; i--) {\n newMapped[i] = newMapped[i - 1];\n newDispose[i] = newDispose[i - 1];\n }\n }\n newMapped[toAbs] = movedMarker;\n newDispose[toAbs] = movedDispose;\n\n // Update keyed state signals for items whose references changed\n if (keyedState) {\n for (let i = start; i <= newEnd; i++) {\n const key = keyFn(newItems[i]);\n if (newItems[i] !== oldItems[i]) {\n // Only look up oldItems[i] by key if index is in old range\n const entry = keyedState.get(key);\n if (entry) entry.itemSig.set(newItems[i]);\n }\n }\n }\n\n // Single DOM move: move the item's nodes to its new position\n const movedEnd = _findNextMarkerAfter(parent, movedMarker, mappedNodes, fromAbs, endMarker);\n // Find the reference node: the marker of the item that should come AFTER the moved item\n let ref;\n if (toAbs + 1 < newLen) {\n ref = newMapped[toAbs + 1];\n } else {\n ref = endMarker;\n }\n // For suffix items, use the actual mapped marker\n if (toAbs >= newEnd + 1 || (ref && ref.parentNode !== parent)) {\n ref = endMarker;\n }\n _moveItem(parent, movedMarker, movedEnd, ref);\n\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n return;\n }\n }\n }\n\n // --- General case: reconcile middle section ---\n const oldKeyMap = new Map();\n for (let i = start; i <= oldEnd; i++) {\n oldKeyMap.set(keyFn(oldItems[i]), i);\n }\n\n const oldIndices = new Int32Array(midNewLen);\n oldIndices.fill(-1);\n\n for (let i = start; i <= newEnd; i++) {\n const key = keyFn(newItems[i]);\n const oldIdx = oldKeyMap.get(key);\n if (oldIdx !== undefined) {\n oldKeyMap.delete(key);\n newMapped[i] = mappedNodes[oldIdx];\n newDispose[i] = disposeFns[oldIdx];\n oldIndices[i - start] = oldIdx;\n if (keyedState && newItems[i] !== oldItems[oldIdx]) {\n keyedState.get(key).itemSig.set(newItems[i]);\n }\n }\n }\n\n // Dispose removed items (iterate in reverse to avoid shifting boundaries)\n const removedIndices = [...oldKeyMap.values()].sort((a, b) => b - a);\n for (const oldIdx of removedIndices) {\n disposeFns[oldIdx]?.();\n // Compute the range boundary from the live DOM. Adjacent removals can\n // detach mappedNodes[oldIdx + 1] before we get here, so we cannot trust\n // that reference \u2014 walk the DOM to find the next surviving item marker.\n const rangeEnd = _findNextMarkerAfter(parent, mappedNodes[oldIdx], mappedNodes, oldIdx, endMarker);\n _removeItemNodes(parent, mappedNodes[oldIdx], rangeEnd);\n if (keyedState) keyedState.delete(keyFn(oldItems[oldIdx]));\n }\n\n // Create new items (into a detached fragment, then positioned below)\n for (let i = start; i <= newEnd; i++) {\n if (!newMapped[i]) {\n const frag = document.createDocumentFragment();\n _createKeyedItem(frag, newItems[i], i, keyFn, keyedState, mapFn, newMapped, newDispose, signal);\n // Leave in frag for now \u2014 will be positioned in the move pass\n newMapped[i]._frag = frag;\n }\n }\n\n // Position using LIS\n let reusedCount = 0;\n let alreadySorted = true;\n let lastOldIdx = -1;\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) {\n reusedCount++;\n if (oldIndices[i] <= lastOldIdx) alreadySorted = false;\n lastOldIdx = oldIndices[i];\n }\n }\n\n const inLIS = new Uint8Array(midNewLen);\n\n if (alreadySorted) {\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) inLIS[i] = 1;\n }\n } else if (reusedCount > 1) {\n const seq = new Int32Array(reusedCount);\n const seqToMid = new Int32Array(reusedCount);\n let k = 0;\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) {\n seq[k] = oldIndices[i];\n seqToMid[k] = i;\n k++;\n }\n }\n const lisResult = _lis(seq, reusedCount);\n for (let i = 0; i < lisResult.length; i++) {\n inLIS[seqToMid[lisResult[i]]] = 1;\n }\n } else if (reusedCount === 1) {\n for (let i = 0; i < midNewLen; i++) {\n if (oldIndices[i] !== -1) { inLIS[i] = 1; break; }\n }\n }\n\n // Position: work backwards, move items not in LIS\n // For existing items: move all nodes from marker to next-item boundary.\n // For new items: insert from their detached fragment.\n // We rebuild the output array to reflect final positions.\n _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen);\n\n // Start ref at the first suffix item's marker (not endMarker) so moved items\n // land before the suffix, not after it.\n let ref = newEnd + 1 < newLen && mappedNodes[newEnd + 1]\n ? mappedNodes[newEnd + 1] : endMarker;\n for (let i = newEnd; i >= start; i--) {\n const mi = i - start;\n const marker = mappedNodes[i];\n\n if (oldIndices[mi] === -1) {\n // New item \u2014 insert from detached fragment\n if (marker._frag) {\n parent.insertBefore(marker._frag, ref);\n delete marker._frag;\n }\n } else if (!inLIS[mi]) {\n // Existing item not in LIS \u2014 move all its nodes\n const nextItemMarker = _findNextMarkerAfter(parent, marker, mappedNodes, i, endMarker);\n _moveItem(parent, marker, nextItemMarker, ref);\n }\n ref = marker;\n }\n}\n\n// TODO(perf): cache item end boundary on marker if large keyed reorders show O(n\u00B2) hot paths.\n// Find the boundary end for an item's nodes in the current DOM.\n// Walks from the marker's nextSibling until we hit another item's marker or endMarker.\nfunction _findNextMarkerAfter(parent, marker, mappedNodes, idx, endMarker) {\n // The item's nodes end at the next sibling that is either:\n // - another item's marker comment (data === 'i')\n // - the list endMarker (data === '/list')\n let n = marker.nextSibling;\n while (n && n !== endMarker) {\n if (n.nodeType === 8 && n.data === 'i') return n;\n n = n.nextSibling;\n }\n return endMarker;\n}\n\nfunction _copyBack(mappedNodes, disposeFns, newMapped, newDispose, newLen) {\n mappedNodes.length = newLen;\n disposeFns.length = newLen;\n for (let i = 0; i < newLen; i++) {\n mappedNodes[i] = newMapped[i];\n disposeFns[i] = newDispose[i];\n }\n}\n\n// --- spread(el, props) ---\n// Fine-grained prop effects. Function props create individual effects.\n// Event props use direct assignment.\n\nexport function spread(el, props) {\n for (const key in props) {\n const value = props[key];\n\n if (key.startsWith('on') && key.length > 2) {\n // Event handler \u2014 direct assignment. Use $$name for delegated events.\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value);\n continue;\n }\n\n if (typeof value === 'function' && !key.startsWith('on')) {\n // Reactive prop \u2014 create micro-effect. The disposer must be registered\n // on el._propEffects so disposeTree() (dom.js) tears it down when the\n // element unmounts; otherwise the effect keeps firing on signal writes\n // for a detached element. Mirror the setProp() pattern.\n if (!el._propEffects) el._propEffects = {};\n // If a previous spread/setProp already registered an effect for this\n // key, dispose it first to avoid double-tracking.\n if (el._propEffects[key]) {\n try { el._propEffects[key](); } catch (e) { /* already disposed */ }\n }\n if (key === 'class' || key === 'className') {\n el._propEffects[key] = effect(() => {\n const cls = value() || '';\n if (_hasSVGElement && el instanceof SVGElement) el.setAttribute('class', cls);\n else el.className = cls;\n });\n } else if (key === 'style' && typeof value() === 'object') {\n el._propEffects[key] = effect(() => {\n const styles = value();\n for (const prop in styles) {\n el.style[prop] = styles[prop] ?? '';\n }\n });\n } else {\n el._propEffects[key] = effect(() => { setProp(el, key, value()); });\n }\n } else {\n // Static prop\n setProp(el, key, value);\n }\n }\n}\n\n// NOTE: this is the fine-grained-compiler path's setProp. A second\n// implementation lives in dom.js (h()/diff path). See the longer note above\n// the dom.js version. Key differences vs. dom.js setProp:\n// - assumes events are handled by the compiler (delegation or direct\n// addEventListener) \u2014 no el._events bookkeeping here.\n// - sanitizes URL attributes (href/src) against javascript: protocol.\n// - enforces innerHTML must be { __html: ... } \u2014 plain strings are warned.\n// Both share the el._propEffects[key] disposer convention so disposeTree()\n// can tear down reactive prop effects on unmount.\nexport function setProp(el, key, value) {\n // Ref handling \u2014 assign element to ref object/callback (defense in depth)\n if (key === 'ref') {\n if (typeof value === 'function') value(el);\n else if (value && typeof value === 'object') value.current = el;\n return;\n }\n\n // Key prop \u2014 no-op, WhatFW has no virtual DOM (defense in depth, issue #6)\n if (key === 'key') return;\n\n // Reactive accessor: function values on non-event props are treated as\n // reactive getters. Wrap in an effect so the prop auto-updates. Track the\n // disposer on el._propEffects so disposeTree() tears it down on unmount \u2014\n // mirrors the pattern in dom.js setProp / spread().\n if (typeof value === 'function' && !key.startsWith('on')) {\n if (!el._propEffects) el._propEffects = {};\n if (el._propEffects[key]) {\n try { el._propEffects[key](); } catch (e) { /* already disposed */ }\n }\n el._propEffects[key] = effect(() => setProp(el, key, value()));\n return;\n }\n\n // Sanitize URL attributes \u2014 reject dangerous protocols\n if (URL_ATTRS.has(key) || URL_ATTRS.has(key.toLowerCase())) {\n if (!isSafeUrl(value)) {\n if (typeof console !== 'undefined') {\n console.warn(`[what] Blocked unsafe URL in \"${key}\" attribute: ${value}`);\n }\n return;\n }\n }\n\n const isSvg = _hasSVGElement && el instanceof SVGElement;\n\n if (key === 'class' || key === 'className') {\n if (isSvg) {\n el.setAttribute('class', value || '');\n } else {\n el.className = value || '';\n }\n } else if (key === 'dangerouslySetInnerHTML') {\n const html = value?.__html ?? '';\n if (typeof __DEV__ !== 'undefined' && __DEV__ && typeof html === 'string' && /(<script|onerror\\s*=|onload\\s*=|javascript:)/i.test(html)) {\n console.warn('[what] dangerouslySetInnerHTML contains potential XSS vectors. Ensure content is sanitized.');\n }\n el.innerHTML = html;\n } else if (key === 'innerHTML') {\n if (value && typeof value === 'object' && '__html' in value) {\n const html = value.__html ?? '';\n if (typeof __DEV__ !== 'undefined' && __DEV__ && typeof html === 'string' && /(<script|onerror\\s*=|onload\\s*=|javascript:)/i.test(html)) {\n console.warn('[what] dangerouslySetInnerHTML contains potential XSS vectors. Ensure content is sanitized.');\n }\n el.innerHTML = html;\n } else {\n if (typeof console !== 'undefined' && value != null && value !== '') {\n console.warn(\n '[what] Plain string innerHTML is not allowed. Use { __html: \"...\" } or dangerouslySetInnerHTML={{ __html: \"...\" }} instead.'\n );\n }\n }\n } else if (key === 'style') {\n if (typeof value === 'string') {\n el.style.cssText = value;\n } else if (typeof value === 'object') {\n for (const prop in value) {\n el.style[prop] = value[prop] ?? '';\n }\n }\n } else if (key.startsWith('data-') || key.startsWith('aria-')) {\n el.setAttribute(key, value);\n } else if (typeof value === 'boolean') {\n if (value) el.setAttribute(key, '');\n else el.removeAttribute(key);\n } else if (isSvg) {\n el.setAttribute(key, value);\n } else if (key === 'value' && el.tagName === 'SELECT') {\n _setSelectValue(el, value);\n } else if (key in el) {\n el[key] = value;\n } else {\n el.setAttribute(key, value);\n }\n}\n\n// --- delegateEvents(eventNames) ---\n// Event delegation: common events handled at document level.\n// Handlers stored as el.$$click, el.$$input, etc.\n// Single listener per event type on document \u2014 reduces listener count from N to 1.\n\nconst delegatedEvents = new Set();\n\nexport function delegateEvents(eventNames) {\n for (const name of eventNames) {\n if (delegatedEvents.has(name)) continue;\n delegatedEvents.add(name);\n\n document.addEventListener(name, (e) => {\n let node = e.target;\n const key = '$$' + name;\n\n // Walk up the DOM tree looking for handlers\n while (node) {\n const handler = node[key];\n if (handler) {\n handler(e);\n if (e.cancelBubble) return;\n }\n node = node.parentNode;\n }\n });\n }\n}\n\n// --- addEventListener helper for non-delegated events ---\nexport function on(el, event, handler) {\n el.addEventListener(event, handler);\n return () => el.removeEventListener(event, handler);\n}\n\n// --- className helper for conditional classes ---\nexport function classList(el, classes) {\n effect(() => {\n for (const name in classes) {\n const value = typeof classes[name] === 'function' ? classes[name]() : classes[name];\n el.classList.toggle(name, !!value);\n }\n });\n}\n\n// =========================================================================\n// DOM Hydration\n// =========================================================================\n// Reuses server-rendered DOM instead of creating new nodes.\n// After hydration is complete, switches to normal rendering for updates.\n\nlet _isHydrating = false;\nlet _hydrationCursor = null;\n\nexport function isHydrating() {\n return _isHydrating;\n}\n\n/**\n * hydrate(vnode, container)\n * Walk existing DOM nodes in `container`, match them against the vnode tree,\n * attach reactive bindings, and skip cloneNode. Once done, switch to normal rendering.\n */\nexport function hydrate(vnode, container) {\n _isHydrating = true;\n _hydrationCursor = { parent: container, index: 0 };\n\n try {\n const result = hydrateNode(vnode, container);\n return result;\n } finally {\n _isHydrating = false;\n _hydrationCursor = null;\n }\n}\n\n/**\n * Claim the next DOM node from the hydration cursor.\n * Returns the existing DOM node or null if none available.\n */\nfunction claimNode(parent) {\n const children = parent.childNodes;\n while (_hydrationCursor.index < children.length) {\n const node = children[_hydrationCursor.index];\n // Skip hydration comment markers\n if (node.nodeType === 8) { // Comment node\n const text = node.textContent;\n if (text === '$' || text === '/$' || text === '[]' || text === '/[]') {\n _hydrationCursor.index++;\n continue;\n }\n }\n _hydrationCursor.index++;\n return node;\n }\n return null;\n}\n\nfunction isDevMode() {\n return typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production';\n}\n\nfunction hydrateNode(vnode, parent) {\n if (vnode == null || typeof vnode === 'boolean') {\n return null;\n }\n\n // Text node\n if (typeof vnode === 'string' || typeof vnode === 'number') {\n const existing = claimNode(parent);\n const text = String(vnode);\n\n if (existing && existing.nodeType === 3) {\n // Reuse text node \u2014 check for mismatch in dev\n if (isDevMode() && existing.textContent !== text) {\n console.warn(\n `[what] Hydration mismatch: expected text \"${text}\", got \"${existing.textContent}\"`\n );\n existing.textContent = text;\n }\n return existing;\n }\n\n // Mismatch: expected text node, got element or nothing\n if (isDevMode()) {\n console.warn(\n `[what] Hydration mismatch: expected text node \"${text}\", got ${existing ? existing.nodeName : 'nothing'}. Falling back to client render.`\n );\n }\n const textNode = document.createTextNode(text);\n if (existing) {\n parent.replaceChild(textNode, existing);\n } else {\n parent.appendChild(textNode);\n }\n return textNode;\n }\n\n // Reactive function child \u2014 attach effect to existing node\n if (typeof vnode === 'function') {\n // Unwrap to get the initial value for hydration\n const initialValue = vnode();\n let current = hydrateNode(initialValue, parent);\n\n // Set up reactive effect for future updates (normal rendering path)\n effect(() => {\n const value = vnode();\n // After hydration, this runs as normal insert\n if (!_isHydrating) {\n current = reconcileInsert(parent, value, current, null);\n }\n });\n return current;\n }\n\n // Array \u2014 hydrate each child\n if (Array.isArray(vnode)) {\n const nodes = [];\n for (const child of vnode) {\n const node = hydrateNode(child, parent);\n if (node) nodes.push(node);\n }\n return nodes.length === 1 ? nodes[0] : nodes;\n }\n\n // VNode \u2014 component or element\n if (typeof vnode === 'object' && vnode._vnode) {\n // Component \u2014 route through component context so hooks work during hydration\n if (typeof vnode.tag === 'function') {\n const componentStack = getComponentStack();\n const Component = vnode.tag;\n const props = vnode.props || {};\n const children = vnode.children || [];\n\n // Set up component context (mirrors createComponent in dom.js)\n const ctx = {\n hooks: [],\n hookIndex: 0,\n effects: [],\n cleanups: [],\n mounted: false,\n disposed: false,\n Component,\n _parentCtx: componentStack[componentStack.length - 1] || null,\n _errorBoundary: null,\n };\n\n // Push context so hooks can access it\n componentStack.push(ctx);\n\n let result;\n try {\n const propsChildren = children.length === 0 ? undefined\n : children.length === 1 ? children[0] : children;\n result = Component({ ...props, children: propsChildren });\n } catch (error) {\n componentStack.pop();\n console.error('[what] Error in component during hydration:', Component.name || 'Anonymous', error);\n return null;\n }\n\n componentStack.pop();\n ctx.mounted = true;\n\n // Run onMount callbacks after hydration\n if (ctx._mountCallbacks) {\n queueMicrotask(() => {\n if (ctx.disposed) return;\n for (const fn of ctx._mountCallbacks) {\n try { fn(); } catch (e) { console.error('[what] onMount error:', e); }\n }\n });\n }\n\n return hydrateNode(result, parent);\n }\n\n // Element \u2014 claim existing DOM element\n const existing = claimNode(parent);\n const expectedTag = vnode.tag.toUpperCase();\n\n if (existing && existing.nodeType === 1 && existing.nodeName === expectedTag) {\n // Match! Reuse this element. Apply props/bindings.\n hydrateElementProps(existing, vnode.props || {});\n\n // Hydrate children\n const savedCursor = _hydrationCursor;\n _hydrationCursor = { parent: existing, index: 0 };\n\n const rawInner = vnode.props?.dangerouslySetInnerHTML?.__html;\n if (rawInner == null) {\n for (const child of vnode.children) {\n hydrateNode(child, existing);\n }\n }\n\n _hydrationCursor = savedCursor;\n return existing;\n }\n\n // Mismatch \u2014 fall back to client render for this subtree\n if (isDevMode()) {\n console.warn(\n `[what] Hydration mismatch: expected <${vnode.tag}>, got ${existing ? existing.nodeName : 'nothing'}. Falling back to client render.`\n );\n }\n\n // Create the element from scratch\n const newEl = document.createElement(vnode.tag);\n for (const key in vnode.props || {}) {\n if (key === 'children' || key === 'key') continue;\n setProp(newEl, key, vnode.props[key]);\n }\n for (const child of vnode.children) {\n reconcileInsert(newEl, child, null, null);\n }\n if (existing) {\n parent.replaceChild(newEl, existing);\n } else {\n parent.appendChild(newEl);\n }\n return newEl;\n }\n\n // DOM node \u2014 use directly\n if (isDomNode(vnode)) {\n return vnode;\n }\n\n // Fallback \u2014 create text node\n const textNode = document.createTextNode(String(vnode));\n parent.appendChild(textNode);\n return textNode;\n}\n\n/**\n * Apply props to an existing hydrated element.\n * Attaches event handlers and reactive bindings without re-creating the element.\n */\nfunction hydrateElementProps(el, props) {\n for (const key in props) {\n if (key === 'children' || key === 'key' || key === 'ref') continue;\n if (key === 'dangerouslySetInnerHTML' || key === 'innerHTML') continue;\n\n const value = props[key];\n\n // Event handlers \u2014 always attach (they don't exist in SSR HTML)\n if (key.startsWith('on') && key.length > 2) {\n const event = key.slice(2).toLowerCase();\n el.addEventListener(event, value);\n continue;\n }\n\n // Delegated events ($$click etc.)\n if (key.startsWith('$$')) {\n el[key] = value;\n continue;\n }\n\n // Reactive props \u2014 set up effects\n if (typeof value === 'function' && !key.startsWith('on')) {\n if (key === 'class' || key === 'className') {\n effect(() => { el.className = value() || ''; });\n } else if (key === 'style' && typeof value() === 'object') {\n effect(() => {\n const styles = value();\n for (const prop in styles) {\n el.style[prop] = styles[prop] ?? '';\n }\n });\n } else {\n effect(() => { setProp(el, key, value()); });\n }\n continue;\n }\n\n // Static props \u2014 skip attributes already set from SSR\n // Only attach non-serializable props or ones that may differ\n if (key === 'data-hk') continue;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["_onTextInsert", "_setTextInsertHook", "fn", "_$createComponent", "Component", "props", "children", "mergedChildren", "createDOM", "URL_ATTRS", "isSafeUrl", "url", "normalized", "TABLE_WRAPPERS", "SVG_ELEMENTS", "getLeadingTag", "html", "m", "_$templateImpl", "trimmed", "tag", "svgTemplate", "tableInfo", "t", "target", "i", "_templateWarned", "template", "__DEV__", "svgTemplate", "html", "trimmed", "getLeadingTag", "t", "insert", "parent", "child", "marker", "first", "textNode", "m", "_onTextInsert", "current", "isTextFastPath", "effect", "val", "vt", "str", "reconcileInsert", "isDomNode", "value", "isVNode", "_hasSVGElement", "isSvgParent", "asNodeArray", "valuesToNodes", "out", "i", "children", "createDOM", "sameNodeArray", "a", "b", "__DEV__", "targetMarker", "oldNodes", "oldNode", "disposeTree", "text", "newNodes", "newLen", "found", "j", "ref", "node", "mapArray", "source", "mapFn", "options", "keyFn", "raw", "inserter", "items", "mappedNodes", "disposeFns", "keyedState", "endMarker", "newItems", "reconcileKeyed", "reconcileList", "oldItems", "oldLen", "frag", "item", "_createItemScope", "dispose", "start", "minLen", "oldEnd", "newEnd", "newMapped", "newDispose", "oldI", "midNewLen", "midOldLen", "idx", "_reconcileMiddle", "oldIdxMap", "midLen", "oldIndices", "oldIdx", "reusedCount", "_countNeg1", "inLIS", "seq", "seqToMid", "k", "lisResult", "_lis", "nextSibling", "mi", "arr", "len", "c", "tails", "predecessors", "tailLen", "lo", "hi", "mid", "result", "_createItemMarker", "_moveItem", "parent", "marker", "beforeEnd", "ref", "n", "next", "_removeItemNodes", "disposeTree", "_createKeyedItem", "target", "item", "idx", "keyFn", "keyedState", "mapFn", "mappedArr", "disposeArr", "signal_", "accessor", "key", "itemSig", "_createItemMarker", "result", "_createItemScope", "dispose", "reconcileKeyed", "endMarker", "oldItems", "newItems", "mappedNodes", "disposeFns", "newLen", "oldLen", "i", "frag", "signal", "start", "minLen", "oldKey", "newKey", "oldEnd", "newEnd", "newMapped", "newDispose", "oldI", "midNewLen", "midOldLen", "_copyBack", "rangeEnd", "_findNextMarkerAfter", "mismatchCount", "mm1", "mm2", "i1", "i2", "oldKey1", "oldKey2", "newKey1", "newKey2", "tmpM", "tmpD", "k", "entry", "isAdjacent", "lo", "hi", "endHi", "end2", "placeholder", "end1", "fromRel", "movedKey", "fromAbs", "toAbs", "isMove", "candidateKey", "destRel", "match", "afterMatch", "candidateKey2", "srcRel", "movedMarker", "movedDispose", "movedEnd", "oldKeyMap", "oldIndices", "oldIdx", "removedIndices", "a", "b", "reusedCount", "alreadySorted", "lastOldIdx", "inLIS", "seq", "seqToMid", "lisResult", "_lis", "mi", "nextItemMarker", "spread", "el", "props", "value", "event", "effect", "cls", "_hasSVGElement", "styles", "prop", "setProp", "URL_ATTRS", "isSafeUrl", "isSvg", "html", "__DEV__", "_setSelectValue", "delegatedEvents", "delegateEvents", "eventNames", "name", "node", "handler", "on", "classList", "classes", "_isHydrating", "_hydrationCursor", "isHydrating", "hydrate", "vnode", "container", "hydrateNode", "claimNode", "children", "text", "isDevMode", "existing", "textNode", "initialValue", "current", "reconcileInsert", "nodes", "child", "componentStack", "getComponentStack", "Component", "ctx", "propsChildren", "error", "fn", "e", "expectedTag", "hydrateElementProps", "savedCursor", "newEl", "isDomNode"]
7
- }