@cyberart-io/engine 0.0.9 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/dist/headless.d.ts +156 -8
- package/dist/headless.js +1 -1
- package/dist/index.d.ts +169 -9
- package/dist/index.js +1 -1
- package/docs/audio.md +24 -0
- package/docs/browser-harness.md +2 -1
- package/docs/normalized-geometry.md +1 -1
- package/docs/production-scenario.md +121 -6
- package/package.json +1 -1
package/dist/headless.js
CHANGED
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
* Not an OSI open-source license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
var Ic=Object.defineProperty;var Xo=(e,t)=>()=>(e&&(t=e(e=0)),t);var Rc=(e,t)=>{for(var n in t)Ic(e,n,{get:t[n],enumerable:!0})};var zc={};function Jc(e,t){let n=e.indexOf(ks);if(n===-1)return null;let r=n+ks.length,o=`const __cyberSkip=new Set(${JSON.stringify(t)});const __cyberOrig=registerProcessor;registerProcessor=(n,p)=>__cyberSkip.has(n)?undefined:__cyberOrig(n,p);`;return e.slice(0,r)+o+e.slice(r)}var ti,Hn,Uc,ln,ks,Es=Xo(()=>{"use strict";ti=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,Hn="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[Hn]&&(window.addEventListener("error",e=>{let t=e?.message??"";ti.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";ti.test(n)&&e.preventDefault()}),window[Hn]=!0);Uc=!1,ln=(...e)=>{Uc&&console.log("[workletPatch]",...e)},ks="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[Hn]){let e=new WeakMap,t=/registerProcessor\s*\(\s*['"`]([^'"`]+)['"`]/g,n=AudioWorklet.prototype.addModule,r=0;AudioWorklet.prototype.addModule=async function(o,s){let a=++r,c=e.get(this);c||(c=new Set,e.set(this,c)),ln(`#${a} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...c]});let m=o,u=null;if(o.startsWith("blob:")){let y=null;try{y=await(await fetch(o)).text()}catch(S){ln(`#${a} blob fetch failed`,S)}if(y!==null){let S=new Set;for(let R of y.matchAll(t))S.add(R[1]);if(S.size>0){let R=[...S].filter(k=>c.has(k)),T=[...S].filter(k=>!c.has(k));if(R.length>0&&T.length===0){ln(`#${a} short-circuit \u2014 all processors already registered`,R);return}if(R.length>0&&T.length>0){let k=Jc(y,R);if(k!==null){let P=new Blob([k],{type:"application/javascript"});u=URL.createObjectURL(P),m=u,ln(`#${a} rewrote blob; skipping`,R,"allowing",T)}else ln(`#${a} blob rewrite failed; passing original through`)}T.forEach(k=>c.add(k))}}}return n.call(this,m,s).then(()=>{u&&URL.revokeObjectURL(u)},y=>{u&&URL.revokeObjectURL(u);let S=(y&&y.message)??"";if(!(ti.test(S)||/already registered/i.test(S)))throw y})},AudioWorklet.prototype[Hn]=!0}});var Rs={};Rc(Rs,{AUDIO_LIBRARIES:()=>ni,adaptersFor:()=>Gn,importTone:()=>qn,normalizeAudioLibraries:()=>Wn});async function qn(){let e=await import("tone");if(typeof e.start=="function")return e;let t=e.default;return t&&typeof t.start=="function"?t:e}function Wn(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in ni)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function Gn(e){return e.map(t=>ni[t])}var Is,ni,ri=Xo(()=>{"use strict";Is={id:"tone",async load(){await Promise.resolve().then(()=>(Es(),zc))},async unlock(){await Is.load(),await(await qn()).start()},async resumeIfSuspended(){let e=await qn();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await qn()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},ni={tone:Is}});var ve=class extends Error{constructor(n,r){super(r?`Headless Canvas2D does not support ${n}: ${r}`:`Headless Canvas2D does not support ${n}`);this.name="HeadlessUnsupportedOperationError";this.operation=n}},vt=class{constructor(t,n,r,i,o,s=0,a=0){this.stops=[];this.kind=t,this.x0=n,this.y0=r,this.x1=i,this.y1=o,this.r0=s,this.r1=a}addColorStop(t,n){if(!Number.isFinite(t)||t<0||t>1)throw new ve("addColorStop","offset must be in [0, 1]");this.stops.push({offset:t,color:Nn(n)}),this.stops.sort((r,i)=>r.offset-i.offset)}colorAt(t){let n=t<0?0:t>1?1:t;if(this.stops.length===0)return{r:0,g:0,b:0,a:0};if(this.stops.length===1||n<=this.stops[0].offset)return this.stops[0].color;let r=this.stops[this.stops.length-1];if(n>=r.offset)return r.color;for(let i=1;i<this.stops.length;i++){let o=this.stops[i],s=this.stops[i-1];if(n<=o.offset){let a=o.offset-s.offset,c=a===0?0:(n-s.offset)/a;return Dc(s.color,o.color,c)}}return r.color}},qr={a:1,b:0,c:0,d:1,e:0,f:0},Cc={black:"#000000",white:"#ffffff",red:"#ff0000",green:"#008000",blue:"#0000ff",cyan:"#00ffff",magenta:"#ff00ff",yellow:"#ffff00",gold:"#ffd700",orange:"#ffa500",navy:"#000080",gray:"#808080",grey:"#808080",transparent:"#00000000"},Vt=new WeakMap,ns,Qo=!1,Ur=class{constructor(t,n,r,i){this.context=null;this.onDeviceReset=null;this.canvas=t,this.width=Math.max(0,n|0),this.height=Math.max(0,r|0),this.alpha=i.alpha!==!1,this.pixels=new Uint8ClampedArray(this.width*this.height*4),this.glyphAtlas=i.glyphAtlas??ns??ss(),this.alpha||this.fillOpaqueBlack()}resize(t,n,r=!1){let i=Math.max(0,t|0),o=Math.max(0,n|0);i!==this.width||o!==this.height?(this.width=i,this.height=o,this.pixels=new Uint8ClampedArray(i*o*4)):r&&this.pixels.fill(0),this.alpha||this.fillOpaqueBlack()}fillOpaqueBlack(){let t=this.pixels;for(let n=3;n<t.length;n+=4)t[n]=255}};function wc(e,t,n){let r=n??new Uint8ClampedArray(e*t*4);if(r.length!==e*t*4)throw new ve("createImageFixture","data length must be width*height*4");return{__headlessImage:!0,width:e,height:t,data:r}}function Jr(e){ns=e}function Ac(e){return Vt.get(e)}function zr(e,t={}){let n=Vt.get(e);if(n?.context)return n.context;let r=Math.max(0,Number(e.width)||0),i=Math.max(0,Number(e.height)||0),o=new Ur(e,r,i,t);Vt.set(e,o);let s=Pc(o);return o.context=s,s}function rs(e){let t=Vt.get(e);if(t)return t.resize(e.width,e.height,!1),$t(t.width,t.height,t.pixels)}function Pc(e){let t={...qr},n=[],r="#000000",i="#000000",o={r:0,g:0,b:0,a:255},s={r:0,g:0,b:0,a:255},a=1,c="source-over",m=1,u="butt",y="10px sans-serif",S="start",R="alphabetic",T=null,k=!0,P=[],B=null,J=(p,E)=>{B={points:[g(p,E)],closed:!1},P.push(B)},D=(p,E)=>{if(!B){J(p,E);return}B.points.push(g(p,E))},O=()=>{if(!B||B.points.length===0)return;B.closed=!0;let p=B.points[0];B.points.push({x:p.x,y:p.y})},g=(p,E)=>({x:t.a*p+t.c*E+t.e,y:t.b*p+t.d*E+t.f}),f=()=>{if(c!=="source-over"&&c!=="copy")throw new ve("globalCompositeOperation",c)},I=()=>{e.resize(e.canvas.width,e.canvas.height,!1)},d=()=>{t={...qr},n.length=0,P.length=0,B=null,T=null,r="#000000",i="#000000",o={r:0,g:0,b:0,a:255},s={r:0,g:0,b:0,a:255},a=1,c="source-over",m=1,u="butt",y="10px sans-serif",S="start",R="alphabetic",k=!0};e.onDeviceReset=d;let l=(p,E,w,M=c)=>{if(p<0||E<0||p>=e.width||E>=e.height||T&&T[E*e.width+p]===0)return;let L=(E*e.width+p)*4,q=e.pixels;if(M==="copy"){q[L]=w.r,q[L+1]=w.g,q[L+2]=w.b,q[L+3]=e.alpha?w.a:255;return}let _=Math.round(w.a/255*a*255);if(_<=0)return;if(_>=255){q[L]=w.r,q[L+1]=w.g,q[L+2]=w.b,q[L+3]=255;return}let U=_/255,h=q[L+3]/255,v=U+h*(1-U);if(v<=0){q[L]=0,q[L+1]=0,q[L+2]=0,q[L+3]=e.alpha?0:255;return}q[L]=Math.round((w.r*U+q[L]*h*(1-U))/v),q[L+1]=Math.round((w.g*U+q[L+1]*h*(1-U))/v),q[L+2]=Math.round((w.b*U+q[L+2]*h*(1-U))/v),q[L+3]=e.alpha?Math.round(v*255):255},b=(p,E,w,M)=>{if(!(p instanceof vt))return E;let L=On(t,w+.5,M+.5);return Tc(p,L.x,L.y)},A=(p,E,w,M,L)=>{f(),I();let q=Gr(p,e.width,e.height);if(q)for(let _=q.minY;_<=q.maxY;_++)for(let U=q.minX;U<=q.maxX;U++){let h=U+.5,v=_+.5;Zo(p,h,v,M)&&l(U,_,b(E,w,U,_),L)}},F=p=>{f(),I();let E=Math.sqrt(Math.abs(t.a*t.d-t.b*t.c)),w=m*(E===0?1:E)/2,M=Gr(p,e.width,e.height,w+1);if(M)for(let L=M.minY;L<=M.maxY;L++)for(let q=M.minX;q<=M.maxX;q++)Oc(p,q+.5,L+.5,w,u)&&l(q,L,b(i,s,q,L))},x=(p,E)=>{if(p instanceof vt){E==="fillStyle"?(r=p,o={r:0,g:0,b:0,a:255}):(i=p,s={r:0,g:0,b:0,a:255});return}if(typeof p!="string")throw new ve(E,String(p));let w=Nn(p);E==="fillStyle"?(r=p,o=w):(i=p,s=w)},H={get canvas(){return e.canvas},get fillStyle(){return r},set fillStyle(p){x(p,"fillStyle")},get strokeStyle(){return i},set strokeStyle(p){x(p,"strokeStyle")},get globalAlpha(){return a},set globalAlpha(p){a=is(p)},get globalCompositeOperation(){return c},set globalCompositeOperation(p){if(p!=="source-over"&&p!=="copy")throw new ve("globalCompositeOperation",p);c=p},get lineWidth(){return m},set lineWidth(p){m=Number.isFinite(p)&&p>0?p:1},get lineCap(){return u},set lineCap(p){if(p!=="butt"&&p!=="round"&&p!=="square")throw new ve("lineCap",String(p));u=p},get font(){return y},set font(p){y=p},get textAlign(){return S},set textAlign(p){if(p!=="start"&&p!=="left"&&p!=="center"&&p!=="right"&&p!=="end")throw new ve("textAlign",String(p));S=p},get textBaseline(){return R},set textBaseline(p){R=p},get imageSmoothingEnabled(){return k},set imageSmoothingEnabled(p){k=!!p},imageSmoothingQuality:"low",lineJoin:"miter",miterLimit:10,lineDashOffset:0,shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0)",shadowOffsetX:0,shadowOffsetY:0,setGlyphAtlas(p){e.glyphAtlas=p},save(){n.push({transform:{...t},fillStyle:r,strokeStyle:i,fillStyleRaw:r,strokeStyleRaw:i,globalAlpha:a,globalCompositeOperation:c,lineWidth:m,lineCap:u,font:y,textAlign:S,textBaseline:R,clip:T?T.slice():null,imageSmoothingEnabled:k})},restore(){let p=n.pop();p&&(t=p.transform,r=p.fillStyleRaw,i=p.strokeStyleRaw,r instanceof vt?o={r:0,g:0,b:0,a:255}:o=Nn(r),i instanceof vt?s={r:0,g:0,b:0,a:255}:s=Nn(i),a=p.globalAlpha,c=p.globalCompositeOperation,m=p.lineWidth,u=p.lineCap,y=p.font,S=p.textAlign,R=p.textBaseline,T=p.clip,k=p.imageSmoothingEnabled)},beginPath(){P.length=0,B=null},closePath:O,moveTo:J,lineTo:D,rect(p,E,w,M){J(p,E),D(p+w,E),D(p+w,E+M),D(p,E+M),O()},quadraticCurveTo(p,E,w,M){let L=B?.points[B.points.length-1];if(!L){J(w,M);return}let q=On(t,L.x,L.y);_c(q.x,q.y,p,E,w,M,16,(_,U)=>{B.points.push(g(_,U))})},bezierCurveTo(p,E,w,M,L,q){let _=B?.points[B.points.length-1];if(!_){J(L,q);return}let U=On(t,_.x,_.y);Lc(U.x,U.y,p,E,w,M,L,q,24,(h,v)=>{B.points.push(g(h,v))})},arc(p,E,w,M,L,q=!1){if(w<0)throw new ve("arc","negative radius");let _=es(p,E,w,M,L,q);if(_.length===0)return;let U=_[0];B?B.points.push(g(U.x,U.y)):J(U.x,U.y);for(let h=1;h<_.length;h++)B.points.push(g(_[h].x,_[h].y))},ellipse(p,E,w,M,L,q,_,U=!1){if(w<0||M<0)throw new ve("ellipse","negative radius");let h=es(0,0,1,q,_,U),v=Math.cos(L),C=Math.sin(L);for(let N=0;N<h.length;N++){let W=h[N].x*w,Z=h[N].y*M,X=p+W*v-Z*C,re=E+W*C+Z*v;N===0&&!B?J(X,re):D(X,re)}},fill(p="nonzero"){A(Wr(P),r,o,p)},stroke(){F(Wr(P))},clip(p="nonzero"){let E=new Uint8Array(e.width*e.height),w=Wr(P),M=Gr(w,e.width,e.height);if(M)for(let L=M.minY;L<=M.maxY;L++)for(let q=M.minX;q<=M.maxX;q++)Zo(w,q+.5,L+.5,p)&&(E[L*e.width+q]=1);if(!T){T=E;return}for(let L=0;L<T.length;L++)T[L]=T[L]&&E[L]?1:0},fillRect(p,E,w,M){A(K(p,E,w,M),r,o,"nonzero")},strokeRect(p,E,w,M){F(K(p,E,w,M))},clearRect(p,E,w,M){let L=e.alpha?{r:0,g:0,b:0,a:0}:{r:0,g:0,b:0,a:255};A(K(p,E,w,M),"#000000",L,"nonzero","copy")},fillText(p,E,w){$(String(p),E,w,r,o,!0)},strokeText(p,E,w){$(String(p),E,w,i,s,!1)},measureText(p){return{width:ts(String(p),y,e.glyphAtlas)}},translate(p,E){t=Mn(t,{a:1,b:0,c:0,d:1,e:p,f:E})},rotate(p){let E=Math.cos(p),w=Math.sin(p);t=Mn(t,{a:E,b:w,c:-w,d:E,e:0,f:0})},scale(p,E){t=Mn(t,{a:p,b:0,c:0,d:E,e:0,f:0})},transform(p,E,w,M,L,q){t=Mn(t,{a:p,b:E,c:w,d:M,e:L,f:q})},setTransform(p,E,w,M,L,q){if(p&&typeof p=="object"){t={a:p.a,b:p.b,c:p.c,d:p.d,e:p.e,f:p.f};return}t={a:Number(p)||0,b:Number(E)||0,c:Number(w)||0,d:Number(M)||0,e:Number(L)||0,f:Number(q)||0}},resetTransform(){t={...qr}},getTransform(){return{...t}},createLinearGradient(p,E,w,M){return new vt("linear",p,E,w,M)},createRadialGradient(p,E,w,M,L,q){if(w<0||q<0)throw new ve("createRadialGradient","negative radius");return new vt("radial",p,E,M,L,w,q)},createImageData(p,E){return typeof p=="object"?gt(new Uint8ClampedArray(p.width*p.height*4),p.width,p.height):gt(new Uint8ClampedArray(p*(E??0)*4),p,E??0)},getImageData(p,E,w,M){I();let L=p|0,q=E|0,_=w|0,U=M|0,h=new Uint8ClampedArray(_*U*4);for(let v=0;v<U;v++)for(let C=0;C<_;C++){let N=L+C,W=q+v,Z=(v*_+C)*4;if(N<0||W<0||N>=e.width||W>=e.height)continue;let X=(W*e.width+N)*4;h[Z]=e.pixels[X],h[Z+1]=e.pixels[X+1],h[Z+2]=e.pixels[X+2],h[Z+3]=e.pixels[X+3]}return gt(h,_,U)},putImageData(p,E,w){I();let M=E|0,L=w|0,q=p.data;for(let _=0;_<p.height;_++)for(let U=0;U<p.width;U++){let h=M+U,v=L+_;if(h<0||v<0||h>=e.width||v>=e.height)continue;let C=(_*p.width+U)*4,N=(v*e.width+h)*4;e.pixels[N]=q[C],e.pixels[N+1]=q[C+1],e.pixels[N+2]=q[C+2],e.pixels[N+3]=e.alpha?q[C+3]:255}},drawImage(p,...E){let w=xc(p),M=0,L=0,q=w.width,_=w.height,U,h,v,C;if(E.length===2)U=E[0],h=E[1],v=q,C=_;else if(E.length===4)U=E[0],h=E[1],v=E[2],C=E[3];else if(E.length===8)M=E[0],L=E[1],q=E[2],_=E[3],U=E[4],h=E[5],v=E[6],C=E[7];else throw new ve("drawImage","invalid argument count");f(),I();let N=[g(U,h),g(U+v,h),g(U+v,h+C),g(U,h+C)],W=Math.max(0,Math.floor(Math.min(...N.map(ee=>ee.x)))),Z=Math.min(e.width-1,Math.ceil(Math.max(...N.map(ee=>ee.x)))),X=Math.max(0,Math.floor(Math.min(...N.map(ee=>ee.y)))),re=Math.min(e.height-1,Math.ceil(Math.max(...N.map(ee=>ee.y))));for(let ee=X;ee<=re;ee++)for(let ge=W;ge<=Z;ge++){let G=On(t,ge+.5,ee+.5),z=(G.x-U)/v,ae=(G.y-h)/C;if(z<0||ae<0||z>=1||ae>=1)continue;let V=Math.floor(M+z*q),j=Math.floor(L+ae*_);if(V<0||j<0||V>=w.width||j>=w.height)continue;let Y=(j*w.width+V)*4;l(ge,ee,{r:w.data[Y],g:w.data[Y+1],b:w.data[Y+2],a:w.data[Y+3]})}},setLineDash(p){if(p.length>0)throw new ve("setLineDash","non-empty dash")},getLineDash(){return[]},createPattern(){throw new ve("createPattern")}};function K(p,E,w,M){let L=g(p,E),q=g(p+w,E),_=g(p+w,E+M),U=g(p,E+M);return[{closed:!0,points:[L,q,_,U,L]}]}function $(p,E,w,M,L,q){f();let _=e.glyphAtlas,U=os(y),h=U/_.cellHeight,v=ts(p,y,_),C=E;S==="center"?C=E-v/2:(S==="right"||S==="end")&&(C=E-v);let N=w;R==="top"||R==="hanging"?N=w:R==="middle"?N=w-U/2:N=w-U;let W=C,Z=(_.cellWidth+1)*h;for(let X of p){let re=_.glyphs[X]??_.glyphs[X.toUpperCase()];if(!re){W+=Z;continue}for(let ee=0;ee<_.cellHeight;ee++)for(let ge=0;ge<_.cellWidth;ge++){if(re[ee*_.cellWidth+ge]===0)continue;if(!q){let Ae=ge===0||re[ee*_.cellWidth+ge-1]===0,he=ge===_.cellWidth-1||re[ee*_.cellWidth+ge+1]===0,lt=ee===0||re[(ee-1)*_.cellWidth+ge]===0,bt=ee===_.cellHeight-1||re[(ee+1)*_.cellWidth+ge]===0;if(!Ae&&!he&&!lt&&!bt)continue}let G=W+ge*h,z=N+ee*h,ae=W+(ge+1)*h,V=N+(ee+1)*h,j=g(G,z),Y=g(ae,V),Q=Math.max(0,Math.floor(Math.min(j.x,Y.x))),ie=Math.min(e.width-1,Math.ceil(Math.max(j.x,Y.x))-1),de=Math.max(0,Math.floor(Math.min(j.y,Y.y))),Oe=Math.min(e.height-1,Math.ceil(Math.max(j.y,Y.y))-1);for(let Ae=de;Ae<=Oe;Ae++)for(let he=Q;he<=ie;he++)l(he,Ae,b(M,L,he,Ae))}W+=Z}}return new Proxy(H,{get(p,E,w){if(Reflect.has(p,E))return Reflect.get(p,E,w);if(typeof E=="symbol")return;let M=String(E);if(!(M==="then"||M==="toJSON"))return(...L)=>{throw new ve(M)}},set(p,E,w,M){if(E==="shadowBlur"&&w)throw new ve("shadowBlur");if((E==="shadowOffsetX"||E==="shadowOffsetY")&&w)throw new ve(String(E));if(E==="filter"&&w&&w!=="none")throw new ve("filter",String(w));if(Reflect.has(p,E))return Reflect.set(p,E,w,M);throw new ve(String(E))}})}function xc(e){if(e&&typeof e=="object"&&"__headlessImage"in e){let t=e;return{width:t.width,height:t.height,data:t.data}}if(e&&typeof e=="object"&&"data"in e&&"width"in e&&"height"in e){let t=e;if(t.data instanceof Uint8ClampedArray)return{width:t.width,height:t.height,data:t.data}}if(typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement){let t=Vt.get(e);if(!t)throw new ve("drawImage","source canvas has no headless surface");return{width:t.width,height:t.height,data:t.pixels}}throw new ve("drawImage","source must be ImageData, a headless canvas, or createImageFixture()")}function Tc(e,t,n){if(e.kind==="linear"){let s=e.x1-e.x0,a=e.y1-e.y0,c=s*s+a*a,m=c===0?0:((t-e.x0)*s+(n-e.y0)*a)/c;return e.colorAt(m)}let r=Math.hypot(t-e.x1,n-e.y1),i=e.r1-e.r0,o=i===0?0:(r-e.r0)/i;return e.colorAt(o)}function Dc(e,t,n){return{r:Math.round(e.r+(t.r-e.r)*n),g:Math.round(e.g+(t.g-e.g)*n),b:Math.round(e.b+(t.b-e.b)*n),a:Math.round(e.a+(t.a-e.a)*n)}}function Mn(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,e:e.a*t.e+e.c*t.f+e.e,f:e.b*t.e+e.d*t.f+e.f}}function On(e,t,n){let r=e.a*e.d-e.b*e.c;if(r===0)return{x:t,y:n};let i=e.d/r,o=-e.b/r,s=-e.c/r,a=e.a/r,c=(e.c*e.f-e.d*e.e)/r,m=(e.b*e.e-e.a*e.f)/r;return{x:i*t+s*n+c,y:o*t+a*n+m}}function Wr(e){return e.map(t=>({closed:t.closed,points:t.points.map(n=>({x:n.x,y:n.y}))}))}function Gr(e,t,n,r=0){let i=1/0,o=1/0,s=-1/0,a=-1/0;for(let c of e)for(let m of c.points)i=Math.min(i,m.x),o=Math.min(o,m.y),s=Math.max(s,m.x),a=Math.max(a,m.y);return Number.isFinite(i)?{minX:Math.max(0,Math.floor(i-r)),minY:Math.max(0,Math.floor(o-r)),maxX:Math.min(t-1,Math.ceil(s+r)),maxY:Math.min(n-1,Math.ceil(a+r))}:null}function Zo(e,t,n,r){let i=0,o=0;for(let s of e){let a=s.points;if(!(a.length<2))for(let c=1;c<a.length;c++){let m=a[c-1],u=a[c],y=Mc(m.x,m.y,u.x,u.y,t,n);i+=y,y!==0&&(o+=1)}}return r==="evenodd"?o%2===1:i!==0}function Mc(e,t,n,r,i,o){if(t<=o==r<=o)return 0;let s=e+(o-t)/(r-t)*(n-e);return i<s?r>t?1:-1:0}function Oc(e,t,n,r,i){for(let o of e){let s=o.points;for(let a=1;a<s.length;a++){let c=s[a-1],m=s[a];if(i==="round"){if(Nc(t,n,c.x,c.y,m.x,m.y)<=r)return!0;continue}let u=m.x-c.x,y=m.y-c.y,S=Math.hypot(u,y);if(S===0){if(Math.hypot(t-c.x,n-c.y)<=r)return!0;continue}let R=u/S,T=y/S,k=c.x,P=c.y,B=m.x,J=m.y;i==="square"&&(k-=R*r,P-=T*r,B+=R*r,J+=T*r);let D=B-k,O=J-P,g=D*D+O*O,f=((t-k)*D+(n-P)*O)/g;if(f<0||f>1)continue;let I=k+f*D,d=P+f*O;if(Math.hypot(t-I,n-d)<=r)return!0}}return!1}function Nc(e,t,n,r,i,o){let s=i-n,a=o-r,c=s*s+a*a;if(c===0)return Math.hypot(e-n,t-r);let m=((e-n)*s+(t-r)*a)/c;return m=m<0?0:m>1?1:m,Math.hypot(e-(n+m*s),t-(r+m*a))}function _c(e,t,n,r,i,o,s,a){for(let c=1;c<=s;c++){let m=c/s,u=1-m;a(u*u*e+2*u*m*n+m*m*i,u*u*t+2*u*m*r+m*m*o)}}function Lc(e,t,n,r,i,o,s,a,c,m){for(let u=1;u<=c;u++){let y=u/c,S=1-y,R=S*S,T=y*y;m(R*S*e+3*R*y*n+3*S*T*i+T*y*s,R*S*t+3*R*y*r+3*S*T*o+T*y*a)}}function es(e,t,n,r,i,o){let s=r,a=i;!o&&a<s&&(a+=Math.PI*2),o&&s<a&&(s+=Math.PI*2);let c=a-s,m=Math.max(8,Math.min(360,Math.ceil(Math.abs(c)*Math.max(n,1)))),u=[];for(let y=0;y<=m;y++){let S=s+c*y/m;u.push({x:e+Math.cos(S)*n,y:t+Math.sin(S)*n})}return u}function is(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function Nn(e){let t=e.trim().toLowerCase(),r=Cc[t]??t;if(r==="transparent")return{r:0,g:0,b:0,a:0};if(r[0]==="#"){let o=r.slice(1);if(o.length===3)return{r:parseInt(o[0]+o[0],16),g:parseInt(o[1]+o[1],16),b:parseInt(o[2]+o[2],16),a:255};if(o.length===6)return{r:parseInt(o.slice(0,2),16),g:parseInt(o.slice(2,4),16),b:parseInt(o.slice(4,6),16),a:255};if(o.length===8)return{r:parseInt(o.slice(0,2),16),g:parseInt(o.slice(2,4),16),b:parseInt(o.slice(4,6),16),a:parseInt(o.slice(6,8),16)}}let i=r.match(/^rgba?\(\s*([0-9.]+)\s*,\s*([0-9.]+)\s*,\s*([0-9.]+)(?:\s*,\s*([0-9.]+))?\s*\)$/);if(i)return{r:Kr(Number(i[1])),g:Kr(Number(i[2])),b:Kr(Number(i[3])),a:i[4]===void 0?255:Math.round(is(Number(i[4]))*255)};throw new ve("fillStyle",e)}function Kr(e){return Number.isFinite(e)?e<0?0:e>255?255:Math.round(e):0}function os(e){let t=e.match(/([0-9]+(?:\.[0-9]+)?)px/);return t?Number(t[1]):10}function ts(e,t,n){let r=os(t)/n.cellHeight;return e.length*(n.cellWidth+1)*r}function gt(e,t,n){if(typeof ImageData=="function")try{return new ImageData(e,t,n)}catch{try{let r=new ImageData(t,n);return r.data.set(e),r}catch{}}return{data:e,width:t,height:n,colorSpace:"srgb"}}function ss(){let n={" ":new Uint8Array(35)},r={0:[14,17,19,21,25,17,14],1:[4,12,4,4,4,4,14],2:[14,17,1,2,4,8,31],3:[14,17,1,6,1,17,14],4:[2,6,10,18,31,2,2],5:[31,16,30,1,1,17,14],6:[14,16,30,17,17,17,14],7:[31,1,2,4,8,8,8],8:[14,17,17,14,17,17,14],9:[14,17,17,15,1,1,14],A:[14,17,17,31,17,17,17],B:[30,17,17,30,17,17,30],C:[14,17,16,16,16,17,14],D:[30,17,17,17,17,17,30],E:[31,16,16,30,16,16,31],F:[31,16,16,30,16,16,16],G:[14,17,16,23,17,17,14],H:[17,17,17,31,17,17,17],I:[14,4,4,4,4,4,14],K:[17,18,20,24,20,18,17],L:[16,16,16,16,16,16,31],M:[17,27,21,21,17,17,17],N:[17,25,21,19,17,17,17],O:[14,17,17,17,17,17,14],P:[30,17,17,30,16,16,16],R:[30,17,17,30,20,18,17],S:[15,16,16,14,1,1,30],T:[31,4,4,4,4,4,4],U:[17,17,17,17,17,17,14],V:[17,17,17,17,17,10,4],W:[17,17,17,21,21,21,10],Y:[17,17,10,4,4,4,4],Z:[31,1,2,4,8,16,31],".":[0,0,0,0,0,0,4],"-":[0,0,0,31,0,0,0],"+":[0,4,4,31,4,4,0],"*":[0,21,14,31,14,21,0],"!":[4,4,4,4,4,0,4],"?":[14,17,1,2,4,0,4],"/":[1,2,2,4,8,8,16],":":[0,4,0,0,0,4,0],"\u2713":[1,1,2,2,20,8,0]};for(let[i,o]of Object.entries(r)){let s=new Uint8Array(35);for(let a=0;a<7;a++)for(let c=0;c<5;c++)s[a*5+c]=o[a]&1<<4-c?1:0;n[i]=s,n[i.toLowerCase()]=s}return{cellWidth:5,cellHeight:7,glyphs:n}}var as=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;as[e]=t>>>0}function Vc(e){let t=4294967295;for(let n=0;n<e.length;n++)t=as[(t^e[n])&255]^t>>>8;return(t^4294967295)>>>0}function Fc(e){let t=1,n=0;for(let r=0;r<e.length;r++)t=(t+e[r])%65521,n=(n+t)%65521;return(n<<16|t)>>>0}function dn(e){return new Uint8Array([e>>>24&255,e>>>16&255,e>>>8&255,e&255])}function jr(e,t){let n=new Uint8Array(8+t.length+4);n.set(dn(t.length),0),n[4]=e.charCodeAt(0),n[5]=e.charCodeAt(1),n[6]=e.charCodeAt(2),n[7]=e.charCodeAt(3),n.set(t,8);let r=n.subarray(4,8+t.length);return n.set(dn(Vc(r)),8+t.length),n}function $c(e){let t=[];for(let s=0;s<e.length;s+=65535){let a=e.subarray(s,Math.min(s+65535,e.length)),c=s+65535>=e.length,m=new Uint8Array(5+a.length);m[0]=c?1:0,m[1]=a.length&255,m[2]=a.length>>>8&255;let u=~a.length&65535;m[3]=u&255,m[4]=u>>>8&255,m.set(a,5),t.push(m)}t.length===0&&t.push(new Uint8Array([1,0,0,255,255]));let r=t.reduce((s,a)=>s+a.length,0),i=new Uint8Array(2+r+4);i[0]=120,i[1]=1;let o=2;for(let s of t)i.set(s,o),o+=s.length;return i.set(dn(Fc(e)),o),i}function Ft(e,t,n){let r=e*4,i=new Uint8Array(t*(1+r));for(let y=0;y<t;y++){let S=y*(1+r);i[S]=0,i.set(n.subarray(y*r,(y+1)*r),S+1)}let o=new Uint8Array(13);o.set(dn(e),0),o.set(dn(t),4),o[8]=8,o[9]=6;let s=new Uint8Array([137,80,78,71,13,10,26,10]),a=[jr("IHDR",o),jr("IDAT",$c(i)),jr("IEND",new Uint8Array(0))],c=s.length+a.reduce((y,S)=>y+S.length,0),m=new Uint8Array(c);m.set(s,0);let u=s.length;for(let y of a)m.set(y,u),u+=y.length;return m}function $t(e,t,n){let r=Ft(e,t,n),i="";for(let o=0;o<r.length;o++)i+=String.fromCharCode(r[o]);return`data:image/png;base64,${globalThis.btoa(i)}`}function Yr(e){let t=[137,80,78,71,13,10,26,10];for(let m=0;m<8;m++)if(e[m]!==t[m])throw new ve("decodePng","invalid signature");let n=0,r=0,i=[],o=8;for(;o<e.length;){let m=e[o]<<24|e[o+1]<<16|e[o+2]<<8|e[o+3],u=String.fromCharCode(e[o+4],e[o+5],e[o+6],e[o+7]),y=e.subarray(o+8,o+8+m);if(u==="IHDR"){if(n=y[0]<<24|y[1]<<16|y[2]<<8|y[3],r=y[4]<<24|y[5]<<16|y[6]<<8|y[7],y[8]!==8||y[9]!==6)throw new ve("decodePng","only 8-bit RGBA is supported")}else if(u==="IDAT")for(let S=0;S<y.length;S++)i.push(y[S]);else if(u==="IEND")break;o+=12+m}let s=Bc(new Uint8Array(i)),a=n*4,c=new Uint8ClampedArray(n*r*4);for(let m=0;m<r;m++){let u=m*(1+a);if(s[u]!==0)throw new ve("decodePng",`unsupported scanline filter ${s[u]}`);c.set(s.subarray(u+1,u+1+a),m*a)}return gt(c,n,r)}function Bc(e){if(e.length<6)throw new ve("decodePng","truncated zlib");let t=[],n=2;for(;n<e.length-4;){let s=e[n]&1;if((e[n]>>>1&3)!==0)throw new ve("decodePng","only stored deflate blocks are supported");n+=1;let c=e[n]|e[n+1]<<8;if(n+=4,t.push(e.subarray(n,n+c)),n+=c,s)break}let r=t.reduce((s,a)=>s+a.length,0),i=new Uint8Array(r),o=0;for(let s of t)i.set(s,o),o+=s.length;return i}function _n(e){let t=e.indexOf(","),n=t>=0?e.slice(t+1):e,r=globalThis.atob(n),i=new Uint8Array(r.length);for(let o=0;o<r.length;o++)i[o]=r.charCodeAt(o);return i}function ds(){if(!Qo){Qo=!0;for(let e of["width","height"]){let t=Object.getOwnPropertyDescriptor(HTMLCanvasElement.prototype,e);if(!t?.set||!t.get)continue;let n=t.set;Object.defineProperty(HTMLCanvasElement.prototype,e,{configurable:!0,enumerable:t.enumerable,get:t.get,set(r){n.call(this,r);let i=Vt.get(this);i&&(i.resize(this.width,this.height,!0),i.onDeviceReset?.())}})}}}var cs=()=>{let e=["ms","moz","webkit","o"];for(let t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"]},Ue=window.devicePixelRatio||1,Bt=/Headless/i.test(navigator.userAgent),vh=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function us(){return Math.min(window.innerWidth,window.innerHeight)}var Xr="data-cyberart-canvas",Ht=class{constructor(t,n,r=1,i={}){this.width=t,this.height=n;let o=i.container,s=i.adoptFromDocument??!o,a=o?o.querySelector(`canvas[${Xr}]`)??o.querySelector("canvas"):null;if(a)this.canvas=a,this.adopted=!0;else if(s){let c=document.getElementById("canvas")??document.querySelector("canvas");c?(this.canvas=c,this.adopted=!0):(this.canvas=document.createElement("canvas"),this.canvas.setAttribute("id","canvas"),this.adopted=!1)}else this.canvas=document.createElement("canvas"),this.adopted=!1;this.canvas.hasAttribute(Xr)||this.canvas.setAttribute(Xr,""),this.canvas.style.display="block",this.canvas.style.margin="auto",this.ctx=this.canvas.getContext("2d",{colorSpace:"display-p3",alpha:!1}),this.ctx.globalAlpha=r,this.ctx.imageSmoothingEnabled=!1,this.setSize(t,n)}setSize(t,n){this.width=t,this.height=n,this.canvas.width=t,this.canvas.height=n,this.canvas.style.width=`${t/Ue}px`,this.canvas.style.height=`${n/Ue}px`,this.imageData=this.ctx.createImageData(t,n),this.ctx.putImageData(this.imageData,0,0)}_blank(t=1){let n=t?Math.max(t,.03):1;this.ctx.fillStyle=`rgba(0,0,0,${n})`,this.ctx.fillRect(0,0,this.width,this.height)}clearAll(){this.ctx.save(),this.ctx.globalAlpha=1,this._blank(),this.ctx.restore()}};function Ln(e,t){let n=e/t,r,i;return n>1?(r=e,i=~~(e/n)):(i=t,r=~~(t*n)),{width:r,height:i,iWidth:1/r,iHeight:1/i,area:r*i,largeDim:Math.max(r,i),smallDim:Math.min(r,i),aspectRatio:n}}function ls(e,t=window.innerWidth,n=window.innerHeight){let r=us(),i,o;return n<t?e>1?t>=r*e?(i=r*e,o=r):(i=t,o=i/e):(i=r*e,o=r):e>1?(i=r,o=r/e):n<r/e?(o=n,i=o*e):(i=r,o=r/e),[i,o]}var Qr=class{constructor(t=!1,n=!0){this.debugMode=t,this.actionMap={},this.listening=n,this.checkKeypress=this.checkKeypress.bind(this),this.registerAction=this.registerAction.bind(this),this.listening&&window.addEventListener("keydown",this.checkKeypress,!1)}checkKeypress({key:t}){this.debugMode&&console.log(`Pressed ${t}`),t in this.actionMap&&this.actionMap[t]()}inject(t){this.checkKeypress({key:t})}registerAction(t,n,r=!1){if(t.length!==1)throw new Error(`Only single-character actions may be registered. Cannot register: ${t}`);if(t in this.actionMap&&!r)throw new Error(`Action already exists for code: ${t}`);this.actionMap[t]=n}destroy(){this.listening&&window.removeEventListener("keydown",this.checkKeypress,!1),this.actionMap={}}},Vn=Qr;var Zr=class{constructor(t,n={}){this.x=-1;this.y=-1;this.isDown=!1;this.clicks=[];this.canvas=t,this.listening=n.listen!==!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.listening&&(t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp))}toCanvasCoords(t){let n=this.canvas.getBoundingClientRect();return{x:(t.clientX-n.left)*(this.canvas.width/n.width),y:(t.clientY-n.top)*(this.canvas.height/n.height)}}onPointerDown(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r,this.isDown=!0,this.clicks.push({x:n,y:r})}onPointerMove(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r}onPointerUp(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r,this.isDown=!1}hasClick(){return this.clicks.length>0}consumeClick(){return this.clicks.shift()??null}inject(t,n,r){this.x=n,this.y=r,t==="down"?(this.isDown=!0,this.clicks.push({x:n,y:r})):t==="up"&&(this.isDown=!1)}destroy(){this.listening&&(this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointermove",this.onPointerMove),this.canvas.removeEventListener("pointerup",this.onPointerUp))}},ps=Zr;function Fn(){return{now:()=>performance.now()}}function fs(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var cn=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),$n=class{constructor(t,n,r,i,o,s={}){this.startTime=0;this.lastUpdateAt=null;this.lastRenderAt=null;this.clockOffsetMs=0;this.pauseStartedAt=null;this.renderAnimation=this.renderAnimation.bind(this),this.dimensionContext=Ln(t,n),this.R=r,this.gameManager=s.gameManager,this.hostChannel=s.hostChannel,this.clock=s.clock??Fn(),this.kind=s.kind??"render",this.keyboardManager=new Vn(!1,s.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new Ht(this.dimensionContext.width,this.dimensionContext.height,1,s.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new ps(this.canvas.canvas,{listen:s.listenToPointer!==!1})),this.animationCart=o;let a=s.customState;this.featureState=o.getDefaultFeatureState?.(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.hostChannel),this.cartState=o.getDefaultState(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.featureState,this.hostChannel),this.startTime=this.clock.now(),this.canvas?.clearAll()}captureFramebuffer(){let t=this.canvas?.imageData;if(!t)return new ImageData(this.dimensionContext.width,this.dimensionContext.height);let n=new ImageData(t.width,t.height);return n.data.set(t.data),n}restoreFramebuffer(t){let n=this.canvas?.imageData,r=this.drawingContext;return!n||!r||n.width!==t.width||n.height!==t.height||n.data.length!==t.data.length?!1:(n.data.set(t.data),r.putImageData(n,0,0),!0)}setPaused(t){let n=this.clock.now();if(t){this.pauseStartedAt===null&&(this.pauseStartedAt=n);return}this.pauseStartedAt!==null&&(this.clockOffsetMs+=n-this.pauseStartedAt,this.pauseStartedAt=null)}resolveNow(t){let n=this.pauseStartedAt!==null?t-this.pauseStartedAt:0;return t-this.clockOffsetMs-n}getElapsedSinceStart(t=this.clock.now()){return Math.max(0,this.resolveNow(t)-this.startTime)}restoreClock(t,n){this.pauseStartedAt=null,this.lastUpdateAt=null,this.lastRenderAt=null;let r=Math.max(0,t);if(typeof n=="number"&&Number.isFinite(n)){this.startTime=n,this.clockOffsetMs=this.clock.now()-n-r;return}this.clockOffsetMs=0,this.startTime=this.clock.now()-r}getRandomState(){return this.R.getState()}injectKey(t){this.keyboardManager.inject(t)}injectPointer(t,n,r){this.pointerManager?.inject(t,n,r)}async updateAnimationState(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=cn(i,this.startTime,this.lastUpdateAt,this.lastRenderAt);this.cartState=this.animationCart.update(this.R,t,n,this.dimensionContext,this.cartState,this.keyboardManager,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastUpdateAt=i}async renderAnimation(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=cn(i,this.startTime,this.lastUpdateAt,this.lastRenderAt),s=this.drawingContext,a=this.canvas?.imageData;this.kind!=="calculation"&&this.animationCart.render&&s&&a&&this.animationCart.render(this.R,t,n,this.dimensionContext,this.cartState,s,a,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastRenderAt=i}getCanvas(){return this.canvas?.canvas}getDrawDetails(){let t=this.canvas?.canvas;if(!t)throw new Error("calculation cart has no canvas");return[t,0,0,this.dimensionContext.width,this.dimensionContext.height]}teardown(){try{this.animationCart.teardown?.(this.cartState,this.featureState)}catch(t){console.error("Error during cart teardown",t)}this.keyboardManager.destroy(),this.pointerManager?.destroy()}};var Bn=class extends Ht{constructor(t,n,r=1,i=!0,o={}){if(super(t,n,r,o),this.adopted)return;let s=o.container;if(s){this.canvas.parentNode!==s&&s.appendChild(this.canvas);return}if(i){let a=document.getElementById("canvas");a&&a!==this.canvas&&a.parentNode===document.body&&document.body.removeChild(a),document.body.appendChild(this.canvas)}}};function ms(e){let t=parseInt(e.substring(0,8),16),n=parseInt(e.substring(8,8),16),r=parseInt(e.substring(16,8),16),i=parseInt(e.substring(24,8),16);return{next:()=>{t|=0,n|=0,r|=0,i|=0;let s=(t+n|0)+i|0;return i=i+1|0,t=n^n>>>9,n=r+(r<<3)|0,r=r<<21|r>>>11,r=r+s|0,(s>>>0)/4294967296},getRegs:()=>({a:t,b:n,c:r,d:i}),setRegs:s=>{t=s.a,n=s.b,r=s.c,i=s.d}}}var qt=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=ms(t.hash.substring(2,32)),this.genB=ms(t.hash.substring(34,32)),this.prngA=this.genA.next,this.prngB=this.genB.next;for(let n=0;n<1e6;n+=2)this.prngA(),this.prngB()}getState(){let t=this.genA.getRegs(),n=this.genB.getRegs();return{seed:this.seed,useA:this.useA,prngA:{a:t.a,b:t.b,c:t.c,d:t.d},prngB:{a:n.a,b:n.b,c:n.c,d:n.d}}}setState(t){if(t.seed!==this.seed)throw new Error(`Random.setState: seed ${t.seed} does not match ${this.seed}`);this.useA=t.useA,this.genA.setRegs(t.prngA),this.genB.setRegs(t.prngB)}r_zero_one(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}dec(t,n){return t===void 0?this.r_zero_one():n===void 0?t*this.r_zero_one():t+(n-t)*this.r_zero_one()}int(t,n){return n===void 0&&(n=t,t=0),Math.floor(this.dec(t,n))}bool(t=.5){return this.r_zero_one()<t}sign(){return this.bool()?1:-1}choose(t){return t[this.int(t.length)]}};var ys="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",gs="https://salmon-just-firefly-671.mypinata.cloud/ipfs/";function Hc(e){return e.endsWith("/")?e:`${e}/`}var un=null;function qc(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function Wc(e){return e&&e.length>0?e:[{cid:ys}]}function Gc(e){return e.startsWith("0x")?e:`0x${e}`}var bs=/^(0[xX])?[0-9a-fA-F]{64}$/;function Kc(e){let t="",n=2166136261,r=522970236;for(let i=0;t.length<64;i++){for(let o=0;o<e.length;o++)n^=e.charCodeAt(o)+i,n=Math.imul(n,16777619),r^=e.charCodeAt(o)+i*17,r=Math.imul(r,16777619);t+=(n>>>0).toString(16).padStart(8,"0"),t+=(r>>>0).toString(16).padStart(8,"0")}return`0x${t.slice(0,64)}`}function hs(e){let t=typeof e=="number"?String(e):e;return bs.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:Kc(t)}function vs(e,t){if(typeof e=="number"||t==="deterministic")return hs(e);let n=String(e);return bs.test(n)?hs(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function jc(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:Wc(tokenData.externalAssetDependencies),preferredIPFSGateway:Hc(tokenData.preferredIPFSGateway||gs),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?Gc(e):t.get("hash")||`0x${qc(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:ys}],preferredIPFSGateway:gs}}function ei(e){let t=e?.useCache!==!1;if(t&&un&&!e?.hash)return un;let n=jc(e?.hash);return t?un=n:un||(un=n),n}function Ss(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}ri();var Kn="$cyberartTa",Le=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},ii={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function Yc(e){for(let t of Object.keys(ii))if(e instanceof ii[t])return t}function As(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Ze(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function oi(e){return Ze(e)?typeof e[Kn]=="string"&&Array.isArray(e.d):!1}function Xc(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||As(e)||Ze(e))}var Qc=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function Cs(e){return e===null?"null":oi(e)?String(e[Kn]):Array.isArray(e)?"array":Ze(e)?"object":typeof e}function Zc(e,t){return e===t||e==="null"||t==="null"}function ws(e){return e.trim().toLowerCase().replace(/^0x/,"")}function Ps(e,t,n,r){if(!(!n&&!r)&&ws(e)!==ws(t))throw new Le(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function Wt(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function xs(e,t){let n=e.dimensions;if(n&&Wt(n.width)&&Wt(n.height))return n;if(t&&Wt(t.width)&&Wt(t.height))return{width:t.width,height:t.height};if(Ze(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(Wt(r)&&Wt(i))return{width:r,height:i}}return null}function Gt(e,t=new WeakSet){if(e===null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e:null;if(!(typeof e=="function"||typeof e>"u"||typeof e=="bigint"||typeof e=="symbol")){if(As(e)){let n=Yc(e);return n?{[Kn]:n,d:Array.from(e)}:void 0}if(typeof e=="object"&&!t.has(e)){t.add(e);try{if(Array.isArray(e)){let i=[],o=0;for(let s of e){let a=Gt(s,t);a!==void 0&&(i.push(a),o++)}return e.length>0&&o===0?void 0:i}if(!Ze(e)||Xc(e))return;let n=Object.keys(e),r={};for(let i of n){if(Qc.has(i))continue;let o=Gt(e[i],t);o!==void 0&&(r[i]=o)}return n.length>0&&Object.keys(r).length===0?void 0:r}finally{t.delete(e)}}}}function pn(e){if(oi(e)){let t=ii[e[Kn]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>pn(t));if(Ze(e)){let t={};for(let n of Object.keys(e))t[n]=pn(e[n]);return t}return e}function si(e,t,n,r,i=!0){if(i&&n&&r&&n!==r)throw new Le(`Cart state is for "${r}", but the live cart is "${n}"`);if(!Ze(t)){if(i)throw new Le("Cart state snapshot is empty");return}let o=Object.keys(t);if(o.length===0){if(i)throw new Le("Cart state snapshot is empty");return}let s=Gt(e);if(!Ze(s)||Object.keys(s).length===0){if(i)throw new Le("Live cart has no serializable state");return}let a=o.filter(c=>c in s);if(a.length===0){if(i)throw new Le("Cart state snapshot does not overlap the live cart shape");return}for(let c of a){let m=Cs(s[c]),u=Cs(t[c]);if(!Zc(m,u))throw new Le(`Cart state field "${c}" has type ${u}, live cart expects ${m}`);if(m==="object"){let y=t[c],S=e[c];Ze(y)&&!oi(y)&&si(S,y,void 0,void 0,!1)}}}function Ts(e,t){if(!Ze(e)||!Ze(t))return;let n=Gt(e);if(Ze(n))for(let r of Object.keys(t))r in n&&(e[r]=pn(t[r]))}function pt(e){let t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object")throw new Le("Cart state bundle is not an object");if(t.version!==1)throw new Le(`Unsupported cart state version ${String(t.version)}`);if(typeof t.seed!="string"||typeof t.framesElapsed!="number")throw new Le("Cart state bundle is missing seed or framesElapsed");return t}var et="cyberart.asset.ready",Je="cyberart.asset.failed";function St(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Ds(e){return{type:e.status==="ready"?et:Je,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function tu(e){if(!e||typeof e!="object")return 0;let t=e;return typeof t.startTime=="number"&&typeof t.lastSimulationUpdateAt=="number"?Math.max(0,t.lastSimulationUpdateAt-t.startTime):0}function nu(e,t){if(typeof window.resizeTo!="function")return!1;try{if(window.top!==window)return!1}catch{return!1}let n=Math.max(1,Math.round(e)),r=Math.max(1,Math.round(t)),i=Math.max(0,window.outerWidth-window.innerWidth),o=Math.max(0,window.outerHeight-window.innerHeight);try{window.resizeTo(n+i,r+o)}catch{return!1}return Math.abs(window.innerWidth-n)<=8&&Math.abs(window.innerHeight-r)<=8}var ru=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],di=ru[0],iu=di[0]/di[1],ai=30,ou=120,su=3840/2160,au=2160/3840,jn=class{constructor(t=ai,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,s,a={}){this.framesElapsed=0;this.frameRate=ai;this._paused=!1;this.savedToken=!1;this.prepared=!1;this.loopRunning=!1;this.fallbackAudio=[];this.audioLibrariesInternal=[];this.virtualClock=null;this.scriptedActions=[];this.initialScriptedActions=[];this.appliedActions=[];this.consumedActionIndexes=new Set;this.outboundEvents=[];this.consecutiveErrorCount=0;this.lastErrorLogAt=0;this.reinitStayPaused=!1;this.reinitPending=!1;this.lastExportedFramebuffer=null;this.pinnedOutput=null;this.pinViewportAtImport=null;this.importing=!1;this.drawLoop=this.drawLoop.bind(this),this.loadCart=this.loadCart.bind(this),this.prepareCart=this.prepareCart.bind(this),this.beginPlayback=this.beginPlayback.bind(this),this.reinit=this.reinit.bind(this),this.tuneFramerate=this.tuneFramerate.bind(this),this.container=a.container,this.seed=a.seed,this.captureKeyboard=a.captureKeyboard??!0,this.customState=a.customState,this.hostChannel=a.hostChannel,this.fallbackAudio=Wn(a.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=a.kind??"render",this.onFrameTiming=a.onFrameTiming;let c=a.deterministic;this.deterministic=!!c;let m=c&&typeof c=="object"?c:{};if(this.deterministic){if(a.clock){let u=a.clock;if(typeof u.advance!="function")throw new Error("deterministic mode requires a virtual clock with advance()");this.virtualClock=u,this.clock=u}else this.virtualClock=fs(m.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=St(m.actions??[]),this.scriptedActions=St(this.initialScriptedActions)}else this.clock=a.clock??Fn();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=iu,this.selectedAsp=di,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=Bt,this.containerWidth=r,this.containerHeight=i,this.gameManager=s,this.init(!0)}setGameManager(t){this.gameManager=t}reinit(t){if(!this.importing){if(this.shouldKeepPinnedOutput()){this.fitPinnedCanvas();return}this.reinitPending||(this.reinitStayPaused=this._paused,this.reinitPending=!0),this.paused=!0,clearTimeout(this.reinitTimeout),this.reinitTimeout=setTimeout(()=>{if(this.importing){this.paused=this.reinitStayPaused,this.reinitPending=!1;return}this.updateInProgress?this.reinit(t):(this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.clearPinnedOutput(),this.init(),this.reloadCart(),this.paused=this.reinitStayPaused,this.reinitPending=!1)},150)}}initSeed(){this.tokenData=this.seed?ei({hash:this.seed,useCache:!1}):ei(),this.rawParams=Ss(this.tokenData),this.mintNo=parseInt(this.tokenData.tokenId)%1e6,console.log("token",this.mintNo,this.tokenData.hash)}init(t=!1){t&&this.initSeed(),this.pureAspectUpdate(this.selectedAsp);let n=this.aspectRatio,[r,i]=ls(n,this.containerWidth,this.containerHeight);r*=Ue,i*=Ue,this.width=~~r,this.height=~~i,this.atCenterX=this.width/2,this.atCenterY=this.height/2,this.kind!=="calculation"&&(this.mainCanvas?this.mainCanvas.setSize(this.width,this.height):this.mainCanvas=new Bn(this.width,this.height,1,this.isBodyCanvas,this.canvasMountOptions()))}loadCart(t){this.prepareCart(t)&&this.beginPlayback()}prepareCart(t){if(this.prepared)return!0;try{let n=~~(this.width/1),r=~~(this.height/this.width*n),i=new qt(this.tokenData),o=new $n(n,r,i,this.rawParams,t,{gameManager:this.gameManager,canvasMount:this.canvasMountOptions(),customState:this.customState,captureKeyboard:this.deterministic?!1:this.captureKeyboard,hostChannel:this.hostChannel,clock:this.clock,listenToPointer:!this.deterministic,kind:this.kind});return this.animation=o,this.animationCart=t,this.paused=!1,this.framesElapsed=0,this.outboundEvents=[],this.scriptedActions=St(this.initialScriptedActions),this.appliedActions=[],this.consumedActionIndexes=new Set,this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.deterministic&&this.hostChannel&&(this.outboundUnsubscribe=this.hostChannel.onEvent(s=>{this.outboundEvents.push(s)})),this.R=i,this.applyCartFrameRate(t,o),this.resolveAudioLibraries(t),this.prepared=!0,!0}catch(n){return console.error(n),!1}}applyCartFrameRate(t,n){let r=t.metadata,i=r?.frameRate??ai,o=n.cartState?.visualMode??n.featureState?.visualMode,s=o&&r?.frameRateByVisualMode?r.frameRateByVisualMode[o]:void 0;this.updateFrameRate(typeof s=="number"&&s>0?s:i)}get audioLibraries(){return this.audioLibrariesInternal}get needsAudio(){return this.audioLibrariesInternal.length>0}resolveAudioLibraries(t){this.audioLibrariesInternal=Wn(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=Gn(this.audioLibrariesInternal);if(Bt){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||Bt))for(let t of Gn(this.audioLibrariesInternal))try{await t.resumeIfSuspended()}catch(n){console.error(`Failed to resume audio library "${t.id}" after reload`,n)}}beginPlayback(){!this.prepared||this.loopRunning||(this.prepared=!1,this.loopRunning=!0,this.consecutiveErrorCount=0,!this.deterministic&&(this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)))}get isPrepared(){return this.prepared}get isLoopRunning(){return this.loopRunning}get isDeterministic(){return this.deterministic}getClock(){return{now:this.clock.now(),framesElapsed:this.framesElapsed,frameRate:this.frameRate}}getRandomState(){return this.requirePreparedAnimation().getRandomState()}schedule(t){this.scriptedActions.push(St(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:St(this.scriptedActions),applied:St(this.appliedActions),events:St(this.outboundEvents),state:t.state}}async step(t=1){if(!this.deterministic)throw new Error("step() requires createRuntime({ deterministic: true })");this.requirePreparedAnimation(),this.prepared&&!this.loopRunning&&this.beginPlayback(),this.paused=!1;let n=Math.max(0,Math.floor(t));for(let r=0;r<n&&this.animation;r++){let i=this.framesElapsed;if(this.applyScheduledActions(i),await this.processFrame(this.clock.now(),{ignorePause:!0,scheduleNext:!1}),this.framesElapsed===i||(this.virtualClock?.advance(this.targetDrawTime),!this.loopRunning))break}}async advance(t){let n=Math.max(0,Math.round(t/this.targetDrawTime));await this.step(n)}applyScheduledActions(t){let n=this.animation;n&&this.scriptedActions.forEach((r,i)=>{r.atFrame===t&&(this.consumedActionIndexes.has(i)||(this.consumedActionIndexes.add(i),r.type==="pointer"?n.injectPointer(r.pointer.kind,r.pointer.x,r.pointer.y):r.type==="key"?n.injectKey(r.key):r.type==="event"?this.hostChannel?.dispatch(r.event):r.type==="asset"&&this.hostChannel?.dispatch(Ds(r)),this.appliedActions.push({frame:t,action:r})))})}get paused(){return this._paused}set paused(t){this._paused!==t&&(this._paused=t,this.animation?.setPaused(t))}async waitUntilUpdateIdle(){for(;this.updateInProgress;)await new Promise(t=>{this.deterministic?queueMicrotask(t):typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,0)})}requirePreparedAnimation(){if(!this.animation)throw new Error("No prepared cart");return this.animation}async exportState(){let t=this.requirePreparedAnimation(),n=this._paused;this.paused=!0,await this.waitUntilUpdateIdle();try{this.kind!=="calculation"?this.lastExportedFramebuffer=t.captureFramebuffer():this.lastExportedFramebuffer=null;let r=t.getCanvas();return{version:1,cartId:this.animationCart?.metadata?.id,generative:this.animationCart?.metadata?.generative,seed:this.tokenData.hash,framesElapsed:this.framesElapsed,elapsedSinceStart:t.getElapsedSinceStart(),dimensions:{width:r?.width??this.width,height:r?.height??this.height,cssWidth:this.containerWidth,cssHeight:this.containerHeight,dpr:Ue},state:Gt(t.cartState)}}finally{this.paused=n}}async exportStateJSON(){return JSON.stringify(await this.exportState())}peekExportedFramebuffer(){return this.lastExportedFramebuffer}peekSeed(){return this.tokenData?.hash}isGenerative(){return this.animationCart?.metadata?.generative===!0}async importState(t,n){let r=this.requirePreparedAnimation(),i=pt(t),o=this._paused,s=this.loopRunning;this.paused=!0,await this.waitUntilUpdateIdle(),si(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),Ps(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let a=xs(i,n?.framebuffer??this.lastExportedFramebuffer);if(a){this.pinOutputSize(a);let u=a.cssWidth??a.width/Ue,y=a.cssHeight??a.height/Ue;nu(u,y),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let c=this.customState,m=!1;try{if(this.customState=pn(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&Ts(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let u=this.animation,y=u.cartState,S=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:tu(y);u.restoreClock(S,typeof y?.startTime=="number"?y.startTime:void 0),o&&u.setPaused(!0);let R=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(R&&u.restoreFramebuffer(R)?y.keepRatioPrimed=!0:await u.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),m=!0}catch(u){throw this.clearPinnedOutput(),this.customState=c,this.paused=o,this.animationCart&&(this.syncContainerFromDom(),this.init(),this.reloadCart()),u}finally{this.importing=!1,m&&(this.customState=c,this.paused=o,s&&this.beginPlayback())}}unloadCart(){this.loopRunning=!1,this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.drawLoopTimeout&&clearTimeout(this.drawLoopTimeout),this.animation?.teardown(),this.animation=void 0,this.prepared=!1,this.audioLibrariesInternal=this.fallbackAudio,this.mainCanvas?.clearAll()}reloadCart(t=!1){let n=this.animationCart;if(!n)return;this.pinnedOutput&&(this.clearPinnedOutput(),this.syncContainerFromDom(),this.init());let r=this.reinitPending?this.reinitStayPaused:this._paused;this.unloadCart(),t&&this.initSeed(),this.loadCart(n),this.paused=r,!this.paused&&!Bt&&this.resumeAudioLibraries()}getFrameRate(){return this.frameRate}updateFrameRate(t){if(this.frameRate=t,t>=1)this.targetDrawTime=1e3/t;else{let r=1/(2-t);this.targetDrawTime=1e3/r}this.drawTime=this.targetDrawTime}canvasMountOptions(){return{container:this.container,adoptFromDocument:!this.container}}syncContainerFromDom(){if(this.container){this.containerWidth=this.container.clientWidth||this.containerWidth,this.containerHeight=this.container.clientHeight||this.containerHeight;return}this.containerWidth=window.innerWidth,this.containerHeight=window.innerHeight}pinOutputSize(t){this.pinnedOutput=t,this.width=~~t.width,this.height=~~t.height,this.atCenterX=this.width/2,this.atCenterY=this.height/2,this.aspectRatio=this.width/this.height,this.mainCanvas&&this.mainCanvas.setSize(this.width,this.height)}shouldKeepPinnedOutput(){return this.pinnedOutput?(this.syncContainerFromDom(),this.viewportMatches(this.pinnedCssSize())?!0:!!(this.pinViewportAtImport&&this.viewportMatches(this.pinViewportAtImport))):!1}pinnedCssSize(){let t=this.pinnedOutput;return{w:t.cssWidth??t.width/Ue,h:t.cssHeight??t.height/Ue}}viewportMatches(t){return Math.abs(this.containerWidth-t.w)<8&&Math.abs(this.containerHeight-t.h)<8}fitPinnedCanvas(){let t=this.pinnedOutput,n=this.canvas;if(!t||!n)return;this.container&&!this.container.style.position&&(this.container.style.position="relative");let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=t.width/Ue,s=t.height/Ue;if(o<1||s<1||r<1||i<1)return;let a=Math.min(r/o,i/s),c=o*a,m=s*a;n.style.position="absolute",n.style.left="50%",n.style.top="50%",n.style.transform="translate(-50%, -50%)",n.style.margin="0",n.style.width=`${c}px`,n.style.height=`${m}px`,n.style.imageRendering=Math.abs(a-1)<.01?"auto":"pixelated"}clearPinnedOutput(){let t=this.canvas;this.pinnedOutput=null,this.pinViewportAtImport=null,t&&(t.style.position="",t.style.left="",t.style.top="",t.style.transform="",t.style.imageRendering="",t.style.width="",t.style.height="",t.style.margin="auto")}get canvas(){return this.animation?.getCanvas()??this.mainCanvas?.canvas}destroy(){this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.clearPinnedOutput(),this.unloadCart(),clearTimeout(this.reinitTimeout),this.mainCanvas&&!this.mainCanvas.adopted&&this.mainCanvas.canvas.remove()}drawIt(){}tuneFramerate(t){let n=this.lastCall||t;this.lastCall=t,this.drawTime=Math.max(0,this.drawTime+this.targetDrawTime-this.lastCall+n)}async processFrame(t,n={}){let r=n.ignorePause===!0,i=n.scheduleNext!==!1;if(!this.loopRunning&&!r)return;let o=!1,s,a="update",c=this.onFrameTiming,m=0,u=0,y=0;try{if(r||!this.paused||this.tempUnpause){if(!Bt&&!r&&this.tuneFramerate(t),!this.animation)return;a="update",this.updateInProgress=!0;let R=c?performance.now():0;if(await this.animation.updateAnimationState(this.framesElapsed,this.rawParams,t),c&&(m=performance.now()-R),this.updateInProgress=!1,this.kind!=="calculation"){a="render";let T=c?performance.now():0;await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t),c&&(u=performance.now()-T)}if(this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let P=localStorage.getItem("goodones"),B=JSON.stringify(P?[...JSON.parse(P),this.tokenData.hash]:[this.tokenData.hash]);localStorage.setItem("goodones",B),this.savedToken=!0,this.mainCanvas&&localStorage.setItem(this.tokenData.hash,this.mainCanvas.canvas.toDataURL("image/png")),window.location.reload(),this.loopRunning=!1;return}this.framesElapsed++,this.tempUnpause&&(this.tempUnpause=!1)}a="draw";let S=c?performance.now():0;this.drawIt(),c&&(y=performance.now()-S)}catch(S){o=!0,s=S,this.handleFrameError(S,a)}finally{this.updateInProgress=!1,c&&!o&&c({frame:this.framesElapsed,updateMs:m,renderMs:u,drawMs:y,totalMs:m+u+y})}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=ou&&(this.loopRunning=!1,this.onError?.(s,{phase:a,consecutive:this.consecutiveErrorCount,stopped:!0}))):this.consecutiveErrorCount=0,!(!this.loopRunning||!i)&&(this.drawLoopTimeout=setTimeout(()=>{this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)},this.drawTime))}async drawLoop(t){await this.processFrame(t,{scheduleNext:!0})}handleFrameError(t,n){let r=performance.now();r-this.lastErrorLogAt>=1e3&&(this.lastErrorLogAt=r,console.error(`Animation ${n} error:`,t)),this.consecutiveErrorCount===0&&this.onError?.(t,{phase:n,consecutive:1,stopped:!1})}pureAspectUpdate(t){if(t[0]===0&&t[1]===0){let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=r/i;this.aspectRatio=Math.min(su,Math.max(au,o))}else this.aspectRatio=t[0]/t[1]}};var du="HostChannel has been destroyed",Un=class{constructor(){this.inbound=[];this.listeners=[];this.closed=!1}dispatch(t){this.requireOpen(),this.inbound.push(t),this.inbound.length>32&&this.inbound.splice(0,this.inbound.length-32)}consume(){if(this.requireOpen(),this.inbound.length===0)return[];let t=this.inbound;return this.inbound=[],t}emit(t){this.requireOpen();for(let n of this.listeners)n(t)}onEvent(t){return this.requireOpen(),this.listeners.push(t),()=>{this.listeners=this.listeners.filter(n=>n!==t)}}clearInbound(){this.requireOpen(),this.inbound=[]}clear(){this.inbound=[],this.listeners=[]}close(){this.closed=!0,this.clear()}requireOpen(){if(this.closed)throw new Error(du)}};var Ve=2,ui=1,li="0.0.5",Os="0",Ns="1970-01-01T00:00:00.000Z";function Fe(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function zn(e){return JSON.parse(JSON.stringify(e))}function be(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function _s(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){be(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{be(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function Pe(e){return typeof e=="string"&&e.length>0}function Jn(e){return typeof e=="number"&&Number.isFinite(e)}function cu(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function pi(e){return!Fe(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function Yn(e){if(Fe(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if(pi(e))return ui}}function ci(e,t,n){try{return zn(pt(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";be(n,"invalid-engine-state",i,t);return}}function uu(e,t,n){if(!Fe(e)){be(n,"invalid-field","cart must be an object",t);return}Pe(e.id)||be(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),Pe(e.version)||be(n,"invalid-field","cart.version must be a non-empty string",`${t}.version`);let r={id:typeof e.id=="string"?e.id:"",version:typeof e.version=="string"?e.version:""};return e.generative!==void 0&&(typeof e.generative!="boolean"?be(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function lu(e,t,n){if(!Fe(e)){be(n,"invalid-field","clock must be an object",t);return}if(!Jn(e.framesElapsed)){be(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(Jn(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:be(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(Jn(e.now)?r.now=e.now:be(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(Jn(e.frameRate)?r.frameRate=e.frameRate:be(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function pu(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){be(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Fe(i)||!Pe(i.id)||!Pe(i.version)){be(n,"invalid-field","module refs need non-empty id and version",s);return}r.push({id:i.id,version:i.version})}),r}function fu(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){be(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Fe(i)||!Pe(i.id)){be(n,"invalid-field","asset refs need a non-empty id",s);return}let a={id:i.id};i.version!==void 0&&(Pe(i.version)?a.version=i.version:be(n,"invalid-field","asset.version must be a non-empty string",`${s}.version`)),i.ref!==void 0&&(Pe(i.ref)?a.ref=i.ref:be(n,"invalid-field","asset.ref must be a non-empty string",`${s}.ref`)),r.push(a)}),r}function mu(e,t,n){if(e===void 0)return;if(!Fe(e)||!Pe(e.seed)){be(n,"invalid-field","rng must include a seed",t);return}if(!Fe(e.prngA)||!Fe(e.prngB)){be(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){be(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return _s(e,t,n)}function gu(e,t,n){if(e===void 0)return;if(!Fe(e)){be(n,"invalid-field","provenance must be an object",t);return}let r={};if(e.source!==void 0&&(Pe(e.source)?r.source=e.source:be(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!Fe(e.integrity)||!Pe(e.integrity.alg)||!Pe(e.integrity.hash)?be(n,"invalid-field","provenance.integrity needs alg and hash strings",`${t}.integrity`):r.integrity={alg:e.integrity.alg,hash:e.integrity.hash}),e.publisher!==void 0&&(Pe(e.publisher)?r.publisher=e.publisher:be(n,"invalid-field","provenance.publisher must be a non-empty string",`${t}.publisher`)),e.version!==void 0&&(Pe(e.version)?r.version=e.version:be(n,"invalid-field","provenance.version must be a non-empty string",`${t}.version`)),e.signature!==void 0&&(!Fe(e.signature)||!Pe(e.signature.id)||!Pe(e.signature.alg)?be(n,"invalid-field","provenance.signature needs id and alg strings",`${t}.signature`):r.signature={id:e.signature.id,alg:e.signature.alg}),e.grants!==void 0)if(!Array.isArray(e.grants))be(n,"invalid-field","provenance.grants must be an array",`${t}.grants`);else{let i=[];e.grants.forEach((o,s)=>{Pe(o)?i.push(o):be(n,"invalid-field","provenance.grants entries must be non-empty strings",`${t}.grants[${s}]`)}),r.grants=i}return r}function Ls(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==Ve&&be(t,"invalid-schema",`defineSnapshot produces schema ${Ve}`,"schemaVersion"),Pe(e.seed)||be(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?li:e.runtimeVersion;Pe(n)||be(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;cu(r)||be(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=uu(e.cart,"cart",t),o=lu(e.clock,"clock",t),s=ci(e.engineState,"engineState",t),a=pu(e.modules,"modules",t),c=fu(e.assets,"assets",t),m=mu(e.rng,"rng",t),u=gu(e.provenance,"provenance",t),y;if(e.hostState!==void 0&&(y=_s(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!Pe(e.hostStateRef)&&be(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!s||!Pe(e.seed))return;let S={schemaVersion:Ve,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:s,createdAt:r};return a&&a.length>0&&(S.modules=a),m&&(S.rng=m),y!==void 0&&(S.hostState=y),Pe(e.hostStateRef)&&(S.hostStateRef=e.hostStateRef),c&&c.length>0&&(S.assets=c),u&&(u.source||u.integrity||u.publisher||u.version||u.signature||u.grants)&&(S.provenance=u),S}function fi(e){if(!Fe(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=Ls(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function Xn(e,t){return Pe(e.cartId)?fi({cart:{id:e.cartId,version:t?.cartVersion??Os,generative:e.generative},modules:t?.modules,seed:e.seed,rng:t?.rng,clock:t?.clock??{framesElapsed:e.framesElapsed,elapsedSinceStart:e.elapsedSinceStart},engineState:e,hostState:t?.hostState,hostStateRef:t?.hostStateRef,assets:t?.assets,createdAt:t?.createdAt,provenance:t?.provenance,runtimeVersion:t?.runtimeVersion}):{ok:!1,errors:[{code:"invalid-field",detail:"cart.id is required",path:"cart.id"}]}}function Ms(e){let t=zn(e),n={schemaVersion:ui,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:Os,generative:t.generative}),n}function mi(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[{code:"invalid-json",detail:"Snapshot JSON could not be parsed"}]}}if(!Fe(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(pi(t))try{return{ok:!0,snapshot:Ms(pt(t))}}catch(r){return{ok:!1,errors:[{code:"invalid-engine-state",detail:r instanceof Error?r.message:"Cart state bundle is invalid"}]}}let n=Yn(t);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is missing schemaVersion and is not a cart state bundle",path:"schemaVersion"}]};if(n===ui){let r=[],i=ci(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:Ms(i)}}if(n!==Ve){if(n>Ve)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${n} is newer than ${Ve}`,path:"schemaVersion"}]};let r=[],i=ci(t.engineState,"engineState",r);return i?{ok:!0,snapshot:{schemaVersion:n,engineState:i,seed:typeof t.seed=="string"?t.seed:i.seed,clock:{framesElapsed:i.framesElapsed,elapsedSinceStart:i.elapsedSinceStart}}}:{ok:!1,errors:r.length?r:[{code:"invalid-snapshot",detail:`Snapshot schema ${n} is missing engineState`,path:"engineState"}]}}return fn(t)}function fn(e){if(!Fe(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(e.schemaVersion!==Ve)return{ok:!1,errors:[{code:"invalid-schema",detail:`Expected snapshot schema ${Ve}`,path:"schemaVersion"}]};let t=[],n=Ls(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function Kt(e){return e.map(t=>t.detail).join("; ")}function Vs(e){if(pi(e))return pt(e);if(Fe(e)&&e.engineState!==void 0)return pt(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function hu(){return[{from:1,to:2,migrate:Su}]}function yu(e){let t=[...e?.migrations??hu()],n=new Map;for(let r of t){if(!Number.isInteger(r.from)||!Number.isInteger(r.to)||r.to!==r.from+1)throw new Error(`Snapshot migration must step from n to n+1 (got ${String(r.from)} \u2192 ${String(r.to)})`);if(typeof r.migrate!="function")throw new Error(`Snapshot migration ${r.from} \u2192 ${r.to} is missing migrate()`);if(n.has(r.from))throw new Error(`Duplicate snapshot migration from schema ${r.from}`);n.set(r.from,r)}return{migrations:t,get(r){return n.get(r)}}}var bu=yu();function vu(){return bu}function Su(e){let t=Vs(e),n=Xn(t,{createdAt:Ns,runtimeVersion:li});if(n.ok===!1)throw new Error(Kt(n.errors));return n.snapshot}function Fs(e){try{return zn(e)}catch{return}}function $s(e,t=vu()){let n=Fs(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=Yn(r);if(i===void 0){let o=mi(r);if(o.ok===!1)return o;r=o.snapshot,i=o.snapshot.schemaVersion}if(i>Ve)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${i} is newer than ${Ve}`,path:"schemaVersion"}]};if(i===Ve)return fn(r);for(;i<Ve;){let o=t.get(i);if(!o)return{ok:!1,errors:[{code:"missing-migration",detail:`No snapshot migration from schema ${i} to ${i+1}`,path:"schemaVersion"}]};let s;try{s=o.migrate(Fs(r))}catch(c){let m=c instanceof Error?c.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${m}`,path:"schemaVersion"}]}}let a=Yn(s);if(a!==o.to)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} produced schema ${String(a)}`,path:"schemaVersion"}]};if(o.to===Ve){let c=fn(s);if(c.ok===!1)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} did not produce a valid snapshot`,path:"schemaVersion"},...c.errors]};r=c.snapshot}else r=s;i=o.to}return fn(r)}function Bs(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[{code:"invalid-json",detail:"Snapshot JSON could not be parsed"}]}}if(!n||typeof n!="object")return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(typeof n.schemaVersion=="number"){let i=$s(n,t);if(i.ok===!1)return i;try{return{ok:!0,bundle:pt(i.snapshot.engineState),snapshot:i.snapshot}}catch(o){return{ok:!1,errors:[{code:"invalid-engine-state",detail:o instanceof Error?o.message:"engineState is not a cart state bundle",path:"engineState"}]}}}try{return{ok:!0,bundle:pt(n)}}catch(i){return{ok:!1,errors:[{code:"invalid-engine-state",detail:i instanceof Error?i.message:"Cart state bundle is invalid"}]}}}function Hs(e,t){let n=mi(e);return n.ok===!1?n:$s(n.snapshot,t)}var ku=["image","audio","font","spritesheet"],Eu=["timeout","cors","not-found","invalid","aborted","resolver","undeclared","hash-mismatch","unsigned"],mn="cyberart:fallback/silent",qs="Asset preloader has been destroyed",Iu=4,Ru=new Set(ku),Cu=new Set(Eu),wu={timeout:"asset load timed out",cors:"CORS blocked this asset","not-found":"asset was not found",invalid:"asset declaration or resource is invalid",aborted:"asset load was aborted",resolver:"asset resolver failed",undeclared:"asset is not declared on the cart manifest","hash-mismatch":"asset bytes do not match the declared hash",unsigned:"asset bytes are missing or unsigned"};function yn(e){return typeof e=="string"&&Ru.has(e)}function Au(e){return typeof e=="string"&&Cu.has(e)}function hn(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&Au(t.code)&&typeof t.message=="string"}function Ee(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:wu[e.code]}}function jt(e,t){return{type:e==="ready"?et:Je,kind:"state",payload:t}}function Ws(e){if(!e?.aborted)return;let t=new Error("aborted");throw t.name="AbortError",t}function Pu(e){return e instanceof Error&&e.name==="AbortError"||typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"}function gi(e){return e?{...e}:void 0}function ft(e){let t={id:e.id,ref:e.ref,type:e.type,url:e.url};return e.integrity!==void 0&&(t.integrity=e.integrity),e.provenance&&(t.provenance=gi(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function gn(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function xu(e){if(e.state==="ready"){let t={state:"ready",resource:ft(e.resource)};return e.failure&&(t.failure=gn(e.failure)),t}return e.state==="failed"?{state:"failed",failure:gn(e.failure)}:{state:e.state}}function Tu(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}async function Du(e){let t=await crypto.subtle.digest("SHA-256",e);return Tu(new Uint8Array(t))}function Mu(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return`data:application/octet-stream;base64,${typeof btoa=="function"?btoa(t):Buffer.from(e).toString("base64")}`}function Qn(e){let t=e.declared,n=e.fetchBytes,r=e.hashBytes??Du;return{async resolve(i,o){Ws(o);let s=t[i.ref];if(!s)throw Ee({id:i.id,ref:i.ref,code:"undeclared",message:`undeclared asset ref "${i.ref}"`});if(!s.hash||typeof s.hash!="string")throw Ee({id:i.id,ref:i.ref,code:"unsigned",message:`unsigned asset "${i.ref}"`});let a=await n(s.url);if(Ws(o),!a)throw Ee({id:i.id,ref:i.ref,code:"unsigned",message:`no signed bytes for "${s.url}"`});if(await r(a)!==s.hash)throw Ee({id:i.id,ref:i.ref,code:"hash-mismatch",message:`hash mismatch for "${i.ref}"`});return{id:i.id,ref:i.ref,type:i.type,url:Mu(a),integrity:`sha256-${s.hash}`,cors:"omit",provenance:i.provenance}}}}function Ou(e){if(!e||typeof e!="object")return Ee({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return Ee({id:typeof e.id=="string"?e.id:"",ref:typeof e.ref=="string"?e.ref:"",code:"invalid",message:"id is required"});if(typeof e.ref!="string"||e.ref.length===0)return Ee({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!yn(e.type))return Ee({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return Ee({id:e.id,ref:e.ref,code:"invalid",message:"integrity must be a string"});if(e.timeoutMs!==void 0&&(typeof e.timeoutMs!="number"||!Number.isFinite(e.timeoutMs)||e.timeoutMs<0))return Ee({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function Gs(e){return{id:e.id,ref:mn,type:e.type,url:mn,usedFallback:!0,cors:"omit"}}function Ks(e,t){return hn(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:Pu(t)?Ee({id:e.id,ref:e.ref,code:"aborted"}):Ee({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function js(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw Ee({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw Ee({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=ft(t);return n.id=e.id,n.ref=t.ref||e.ref,n.type=e.type,!n.integrity&&e.integrity&&(n.integrity=e.integrity),!n.provenance&&e.provenance&&(n.provenance=gi(e.provenance)),n}function Ut(e){if(typeof e?.resolver?.resolve!="function")throw new Error("createAssetPreloader: resolver is required");let t=e.emitEvents!==!1,n=e.wallClockTimeout!==!1,r=new Map,i=[],o=new Map,s=new Map,a=new Map,c=new Map,m=new Map,u=new Set,y=!1;function S(x){return x.code==="aborted"||x.code==="timeout"}function R(x,H,K){let $=Ks(x,K);return $.code==="timeout"?$:H.aborted?Ee({id:x.id,ref:x.ref,code:"aborted"}):$}function T(x,H){let K=m.get(x);K||(K=new Set,m.set(x,K)),K.add(H)}function k(x){if(x?.state==="ready")return`${x.resource.type}\0${x.resource.ref}`}function P(x,H){for(let[K,$]of m)if(K!==H&&$.has(x))return!0;for(let[K,$]of r)if(K!==H&&k($)===x)return!0;return!1}function B(x,H){let K=new Set(m.get(x)),$=k(H);$&&K.add($),m.delete(x);for(let p of K)P(p,x)||a.delete(p)}function J(){let x=0,H=0,K=0,$=0,p={};for(let[E,w]of r)p[E]=xu(w),w.state==="pending"||w.state==="loading"?x+=1:w.state==="failed"?K+=1:(H+=1,(w.resource.usedFallback||w.failure)&&($+=1));return{total:r.size,pending:x,ready:H,failed:K,fallbacks:$,items:p,failures:i.map(gn)}}function D(){if(u.size===0)return;let x=J();for(let H of u)H(x)}function O(x){i.push(gn(x))}function g(x){y||!t||!e.dispatch||e.dispatch(x)}function f(x){if(x?.managed&&x.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(x.url)}catch{}}function I(x,H){if(y)return;let K=r.get(x);K?.state==="ready"&&f(K.resource),r.set(x,H),D()}function d(x){if(x.fallback!==void 0)return x.fallback==="silent"?{id:`${x.id}::fallback`,ref:mn,type:x.type}:typeof x.fallback=="string"?{id:`${x.id}::fallback`,ref:x.fallback,type:x.type}:{...x.fallback,id:typeof x.fallback.id=="string"&&x.fallback.id.length>0?x.fallback.id:`${x.id}::fallback`}}function l(x,H,K){let $=`${x.type}\0${x.ref}`,p=a.get($);if(p)return H.aborted?Promise.reject(Ee({id:x.id,ref:x.ref,code:"aborted"})):(T(K,$),Promise.resolve(ft(p.resource)));if(H.aborted)return Promise.reject(Ee({id:x.id,ref:x.ref,code:"aborted"}));let E=c.get($);if(!E){let M=new AbortController,L={id:x.id,ref:x.ref,type:x.type};x.integrity!==void 0&&(L.integrity=x.integrity),x.provenance&&(L.provenance=gi(x.provenance)),E={promise:Promise.resolve().then(()=>e.resolver.resolve(L,M.signal)).then(_=>{let U=js(x,_);if(M.signal.aborted)throw Ee({id:x.id,ref:x.ref,code:"aborted"});return a.set($,{resource:ft(U)}),U}).catch(_=>{throw Ks(x,_)}).finally(()=>{c.delete($)}),controller:M,waiters:0},c.set($,E)}let w=E;return w.waiters+=1,new Promise((M,L)=>{let q=!1,_=(h,v)=>{q||(q=!0,H.removeEventListener("abort",U),w.waiters-=1,v&&w.waiters<=0&&w.controller.abort(),h())},U=()=>{_(()=>L(Ee({id:x.id,ref:x.ref,code:"aborted"})),!0)};if(H.aborted){U();return}H.addEventListener("abort",U,{once:!0}),w.promise.then(h=>{if(!q){if(H.aborted){U();return}T(K,$),_(()=>M(ft(h)),!1)}},h=>{if(!q){if(H.aborted){U();return}_(()=>L(h),!1)}})})}function b(x,H,K){if(H.aborted)return Promise.reject(Ee({id:x.id,ref:x.ref,code:"aborted"}));if(x.ref===mn)return Promise.resolve(Gs(x));let $=new AbortController,p=()=>$.abort();H.addEventListener("abort",p,{once:!0});let E=x.timeoutMs??e.timeoutMs,w,M=!1;return n&&E!==void 0&&E>0&&Number.isFinite(E)&&(w=setTimeout(()=>{M=!0,$.abort()},E)),l(x,$.signal,K).then(L=>{let q=js(x,L);return q.id=x.id,q}).catch(L=>{throw M?Ee({id:x.id,ref:x.ref,code:"timeout"}):L}).finally(()=>{w!==void 0&&clearTimeout(w),H.removeEventListener("abort",p)})}async function A(x,H,K,$){try{return{resource:await b(x,H,$)}}catch(p){let E=R(x,H,p);if(S(E)||H.aborted||K>=Iu)throw E;let w=d(x);if(!w)throw E;if(H.aborted)throw Ee({id:x.id,ref:x.ref,code:"aborted"});if(x.fallback==="silent"||w.ref===mn)return{resource:Gs(x),failure:E};try{let M=await A(w,H,K+1,$);return{resource:{...ft(M.resource),id:x.id,usedFallback:!0},failure:E}}catch(M){let L=hn(M)&&!S(M)&&!H.aborted?M:R(x,H,M);throw!S(L)&&!H.aborted&&O(E),L}}}async function F(x,H){if(y)throw new Error(qs);let K=r.get(x.id);if(K?.state==="ready"||K?.state==="failed")return;let $=o.get(x.id);if($){await $;return}let p=(async()=>{let E=Ou(x);if(E){I(x.id,{state:"failed",failure:E}),O(E),g(jt("failed",{id:x.id,ref:x.ref,failure:E}));return}I(x.id,{state:"loading"});let w=s.get(x.id)??new AbortController;s.has(x.id)||s.set(x.id,w);try{let M=await A(x,w.signal,H,x.id);if(y)return;if(w.signal.aborted){let L=Ee({id:x.id,ref:x.ref,code:"aborted"});I(x.id,{state:"failed",failure:L}),O(L),g(jt("failed",{id:x.id,ref:x.ref,failure:L}));return}if(M.resource.id=x.id,M.failure){I(x.id,{state:"ready",resource:M.resource,failure:M.failure}),O(M.failure),g(jt("failed",{id:x.id,ref:x.ref,failure:M.failure,resource:ft(M.resource)})),g(jt("ready",{id:x.id,ref:M.resource.ref,resource:ft(M.resource),failure:M.failure}));return}I(x.id,{state:"ready",resource:M.resource}),g(jt("ready",{id:x.id,ref:x.ref,resource:ft(M.resource)}))}catch(M){if(y)return;let L=hn(M)&&!S(M)&&!w.signal.aborted?{...gn(M),id:x.id}:R(x,w.signal,M);I(x.id,{state:"failed",failure:L}),O(L),g(jt("failed",{id:x.id,ref:x.ref,failure:L}))}finally{s.get(x.id)===w&&s.delete(x.id)}})();o.set(x.id,p);try{await p}finally{o.delete(x.id)}}return{async preload(x){if(y)throw new Error(qs);let H=Array.isArray(x)?x:[];for(let K of H)K&&typeof K.id=="string"&&K.id.length>0&&(r.has(K.id)||r.set(K.id,{state:"pending"}),s.has(K.id)||s.set(K.id,new AbortController));return D(),await Promise.all(H.map(K=>F(K,0))),J()},get(x){let H=r.get(x);if(H?.state==="ready")return ft(H.resource)},getProgress(){return J()},onProgress(x){return u.add(x),()=>{u.delete(x)}},abort(x){if(!y){if(x!==void 0){s.get(x)?.abort();return}for(let H of s.values())H.abort()}},forget(x){if(y)return;if(x===void 0){for(let K of r.values())K.state==="ready"&&f(K.resource);r.clear(),i.length=0,a.clear(),m.clear(),D();return}let H=r.get(x);H?.state==="ready"&&f(H.resource),B(x,H),r.delete(x);for(let K=i.length-1;K>=0;K--)i[K].id===x&&i.splice(K,1);D()},dispose(){if(!y){y=!0;for(let x of s.values())x.abort();s.clear();for(let x of r.values())x.state==="ready"&&f(x.resource);r.clear(),i.length=0,o.clear();for(let x of c.values())x.controller.abort();a.clear(),c.clear(),m.clear(),u.clear()}}}}var Us=.25;function Jt(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function hi(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function Nu(e){return e instanceof Error&&e.message?e.message:String(e)}async function _u(){let{adaptersFor:e}=await Promise.resolve().then(()=>(ri(),Rs)),t=e(["tone"]),n=typeof navigator<"u"&&/Headless/i.test(navigator.userAgent);for(let r of t)n?await r.load():await r.unlock()}function Lu(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function Js(e={}){let t=e.toneStart??_u,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,s=new Map,a=[],c={state:"locked"},m,u=!1,y=!1;function S(D){for(let O of a.slice())O(D)}function R(D,O){let g=i.get(D);if(g)return O&&!g.participantId&&(g.participantId=O),g;let f={id:D,participantId:O,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(D,f),f}function T(D){return u||D.muted?0:hi(D.gain*D.duckGain)}function k(D){return{id:D.id,participantId:D.participantId,gain:D.gain,muted:D.muted,duckGain:D.duckGain,priority:D.priority,effectiveGain:T(D)}}function P(){let D=-1/0;for(let O of s.values())O.priority>D&&(D=O.priority);for(let O of i.values())if(!O.manualDuck){if(D===-1/0){O.duckGain=1;continue}O.duckGain=O.priority<D?Us:1}}async function B(){if(y||c.state==="unlocked")return Jt(c);if(m)return await m,Jt(c);c={state:"unlocking"},m=(async()=>{try{await t(),c={state:"unlocked"}}catch(D){c={state:"failed",error:Nu(D)}}})();try{await m}finally{m=void 0}return Jt(c)}return{unlock:B,status(){return Jt(c)},authorize(D){y||typeof D!="string"||D.length===0||r.add(D)},revoke(D){y||r.delete(D)},isAuthorized(D){return D===void 0||D.length===0?r.size===0:r.size===0?!0:r.has(D)},setChannelGain(D,O,g){y||typeof D!="string"||D.length===0||(R(D,g).gain=hi(O))},setPriority(D,O,g){y||typeof D!="string"||D.length===0||(R(D,g).priority=Number.isFinite(O)?O:0,P())},mute(){y||(u=!0,S({type:"mute"}))},unmute(){y||(u=!1,S({type:"mute"}))},muteChannel(D,O){y||typeof D!="string"||D.length===0||(R(D,O).muted=!0,S({type:"mute"}))},unmuteChannel(D){if(y)return;let O=i.get(D);O&&(O.muted=!1,S({type:"mute"}))},duck(D,O=Us){if(y||typeof D!="string"||D.length===0)return;let g=R(D);g.manualDuck=!0,g.duckGain=hi(O)},unduck(D){if(y)return;let O=i.get(D);O&&(O.manualDuck=!1,P())},effectiveGain(D){let O=i.get(D);return O?T(O):u?0:1},handleHostEvent(D){if(y||!D||typeof D!="object")return;let O=Lu(D.payload);if(O){if(D.type===et){o.set(O,"ready"),S({type:"asset",id:O,status:"ready"});return}D.type===Je&&(o.set(O,"failed"),S({type:"asset",id:O,status:"failed"}))}},assetStatus(D){return o.get(D)},noteCueStarted(D){if(y)return;s.set(D.idempotencyKey,{idempotencyKey:D.idempotencyKey,channelId:D.channelId,participantId:D.participantId,priority:D.priority});let O=R(D.channelId,D.participantId);D.priority>O.priority&&(O.priority=D.priority),P()},noteCueEnded(D){s.delete(D)&&P()},teardown(D){if(!y&&!(typeof D!="string"||D.length===0)){r.delete(D);for(let[O,g]of[...s.entries()])g.participantId===D&&s.delete(O);for(let[O,g]of[...i.entries()])g.participantId===D&&i.delete(O);P(),S({type:"teardown",participantId:D})}},onNotice(D){return a.push(D),()=>{let O=a.indexOf(D);O>=0&&a.splice(O,1)}},inspect(){let D=[...o.entries()].sort(([g],[f])=>g<f?-1:g>f?1:0),O={};for(let[g,f]of D)O[g]=f;return{status:Jt(c),reducedSensory:n,muted:u,authorized:[...r].sort(),channels:[...i.values()].sort((g,f)=>g.id<f.id?-1:g.id>f.id?1:0).map(k),assets:O}},destroy(){y||(y=!0,s.clear(),i.clear(),r.clear(),S({type:"destroy"}),a.length=0)},get reducedSensory(){return n},get muted(){return u}}}function zs(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function Zn(e){cs();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:s,audioBroker:a,audioParticipantId:c,kind:m="render",onFrameTiming:u}=e,y=n===void 0?void 0:vs(n,o?"deterministic":"live"),S=new Un;if(a&&(zs(S,a),c&&a.authorize(c)),s&&typeof s.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let R=s?Ut({resolver:s.resolver,timeoutMs:s.timeoutMs,emitEvents:s.emitEvents??!o,wallClockTimeout:!o,dispatch:l=>S.dispatch(l)}):void 0,T=!1,k=null,P,B=u,J=!1,D=t.clientWidth||window.innerWidth,O=t.clientHeight||window.innerHeight,g=new jn(30,!1,D,O,!1,void 0,{container:t,seed:y,captureKeyboard:r,hostChannel:S,audio:i,deterministic:o,kind:m,onFrameTiming:u}),f=()=>{let l=t.clientWidth||window.innerWidth,b=t.clientHeight||window.innerHeight;return l===g.containerWidth&&b===g.containerHeight?!1:(g.containerWidth=l,g.containerHeight=b,!0)},I=null;return!g.isDeterministic&&typeof ResizeObserver<"u"&&(I=new ResizeObserver(()=>{if(T||!k)return;f()&&J&&g.reinit()}),I.observe(t)),g.onError=(l,b)=>{P?.(l,b)},{get tokenData(){return g.tokenData},get hostChannel(){return S},get assets(){return R},get audioBroker(){return a},get kind(){return m},get onError(){return P},set onError(l){P=l},get onFrameTiming(){return B},set onFrameTiming(l){B=l,g.onFrameTiming=l},mount(l,b={}){if(T)throw new Error("createRuntime: cannot mount on a destroyed runtime");k?.destroy(),J=!1,g.customState=b.initialState,g.setGameManager(b.gameManager);let A=b.onEvent?S.onEvent(b.onEvent):()=>{};if(a&&c&&a.authorize(c),!g.prepareCart(l))throw A(),new Error("createRuntime: failed to prepare cart");let F=!1,x={async start(){if(!F){if(f()&&g.isPrepared&&(g.init(),g.unloadCart(),!g.prepareCart(l)))throw new Error("createRuntime: failed to prepare cart");g.needsAudio&&(a?await a.unlock():await g.unlockAudio(),F)||(J=!0,g.beginPlayback())}},pause(){F||(g.paused=!0)},resume(){F||(g.paused=!1)},dispatch(H){F||S.dispatch(H)},snapshot(){if(F)return{seed:"",pngDataUrl:""};let H=g.canvas;return{seed:g.tokenData.hash,metadata:l.metadata,pngDataUrl:H?H.toDataURL("image/png"):""}},destroy(){F||(F=!0,J=!1,A(),S.clearInbound(),g.unloadCart(),k===x&&(k=null))},reload(){if(!F){if(!J){if(g.isPrepared&&(g.unloadCart(),!g.prepareCart(l)))throw new Error("createRuntime: failed to prepare cart");return}g.reloadCart()}},reinit(H){if(!F){if(!J){f();return}g.reinit(H)}},getCartState(){return g.animation?.cartState},exportState(){return F?Promise.reject(new Error("Cart handle has been destroyed")):g.exportState()},exportStateJSON(){return F?Promise.reject(new Error("Cart handle has been destroyed")):g.exportStateJSON()},async importState(H,K){if(F)throw new Error("Cart handle has been destroyed");let $=H,p=H;if(typeof H=="string")try{p=JSON.parse(H)}catch{await g.importState(H,K);return}if(p&&typeof p=="object"&&typeof p.schemaVersion=="number"){let E=Bs(p);if(E.ok===!1)throw new Le(Kt(E.errors));await g.importState(E.bundle,K);return}await g.importState(typeof $=="string"?$:p,K)},async exportSnapshot(H){if(F)throw new Error("Cart handle has been destroyed");let K=await g.exportState(),$=g.getClock(),p=Xn(K,{...H,rng:g.getRandomState(),clock:{framesElapsed:K.framesElapsed,elapsedSinceStart:K.elapsedSinceStart,now:$.now,frameRate:$.frameRate}});if(p.ok===!1)throw new Le(Kt(p.errors));return p.snapshot},async exportSnapshotJSON(H){return JSON.stringify(await x.exportSnapshot(H))},async importSnapshot(H,K){if(F)throw new Error("Cart handle has been destroyed");let $=Hs(H);if($.ok===!1)throw new Le(Kt($.errors));await g.importState($.snapshot.engineState,K)},peekExportedFramebuffer(){return F?null:g.peekExportedFramebuffer()},peekSeed(){if(!F)return g.peekSeed()},isGenerative(){return F?!1:g.isGenerative()},async step(H=1){if(F)throw new Error("Cart handle has been destroyed");await g.step(H)},async advance(H){if(F)throw new Error("Cart handle has been destroyed");await g.advance(H)},schedule(H){F||g.schedule(H)},getClock(){if(F)throw new Error("Cart handle has been destroyed");return g.getClock()},getRandomState(){if(F)throw new Error("Cart handle has been destroyed");return g.getRandomState()},getReplayMetadata(){return F?Promise.reject(new Error("Cart handle has been destroyed")):g.getReplayMetadata()},get canvas(){return g.canvas},get paused(){return g.paused},set paused(H){F||(g.paused=H)},get tokenData(){return g.tokenData},get isPrepared(){return g.isPrepared},get isLoopRunning(){return g.isLoopRunning},get needsAudio(){return g.needsAudio},get audioLibraries(){return g.audioLibraries}};return k=x,x},async unlockAudio(){if(a){g.needsAudio&&await a.unlock();return}await g.unlockAudio()},destroy(){T||(T=!0,k?.destroy(),k=null,a&&c&&a.teardown(c),I?.disconnect(),I=null,R?.dispose(),S.close(),g.destroy())}}}var Ys="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==",Xs=320,Qs=180,Vu="Headless harness has been destroyed",Zs=!1;function er(e={}){if(e.glyphAtlas&&Jr(e.glyphAtlas),typeof globalThis.ImageData>"u"){class n{constructor(i,o,s){this.colorSpace="srgb";typeof i=="number"?(this.width=i,this.height=o??0,this.data=new Uint8ClampedArray(this.width*this.height*4)):(this.data=i,this.width=o??0,this.height=s??i.length/4/this.width)}}globalThis.ImageData=n}ds();let t=HTMLCanvasElement.prototype;t.getContext=function(r,i){return String(r??"2d").toLowerCase()!=="2d"?null:zr(this,{alpha:i?.alpha!==!1,glyphAtlas:e.glyphAtlas})},t.toDataURL=function(r){if(r&&r!=="image/png")throw new ve(`toDataURL(${r})`);return rs(this)??Ys},Zs=!0}function Fu(e,t){let n=document.createElement("div");return Object.defineProperty(n,"clientWidth",{value:e,configurable:!0}),Object.defineProperty(n,"clientHeight",{value:t,configurable:!0}),document.body.appendChild(n),n}function $u(e){let t=e.indexOf(","),n=t>=0?e.slice(t+1):e,r=globalThis.atob(n),i=new Uint8Array(r.length);for(let o=0;o<r.length;o++)i[o]=r.charCodeAt(o);return i}function Bu(){return typeof process<"u"&&!!process.versions?.node}async function Hu(e,t){if(!Bu())throw new Error("captureFrame(path) requires Node.js; omit the path to get the snapshot only");let n;try{({writeFile:n}=await import("node:fs/promises"))}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`captureFrame(path) could not load node:fs/promises (${i}). Omit the path, or run under Node.`)}try{await n(e,$u(t))}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`captureFrame could not write ${e}: ${i}`)}}function qu(e){Zs||er();let t=e.width??Xs,n=e.height??Qs,r=Fu(t,n),i=[],o=[],s=!1,a=e.onEvent,c=e.onError,m=Zn({container:r,seed:e.seed,deterministic:{origin:e.origin,actions:e.actions??[]}});m.onError=(T,k)=>{o.push({error:T,info:k}),c?.(T,k)},Object.defineProperty(m,"onError",{configurable:!0,enumerable:!0,get(){return c},set(T){c=T}});let u=T=>{i.push(T),a?.(T)},y=m.mount(e.cart,{initialState:e.initialState,gameManager:e.gameManager,onEvent:u}),S=()=>{if(s)throw new Error(Vu)};return{runtime:m,container:r,get events(){return i.slice()},get errors(){return o.slice()},get cart(){return y},async step(T=1){S(),await y.step(T)},async advance(T){S(),await y.advance(T)},schedule(T){S(),y.schedule(T)},dispatch(T){S(),y.dispatch(T)},start(){return S(),y.start()},pause(){S(),y.pause()},resume(){S(),y.resume()},get paused(){return y.paused},key(T){S(),y.schedule({type:"key",atFrame:y.getClock().framesElapsed,key:T})},click(T,k){S(),y.schedule({type:"pointer",atFrame:y.getClock().framesElapsed,pointer:{kind:"down",x:T,y:k}})},async inspect(){S();let T=await y.getReplayMetadata();return{state:T.state,events:i.slice(),errors:o.slice(),replay:T,clock:y.getClock()}},async captureFrame(T){S();let k=y.snapshot();return T&&await Hu(T,k.pngDataUrl),k},remount(T={}){return S(),i.length=0,o.length=0,"onEvent"in T&&(a=T.onEvent),y=m.mount(e.cart,{initialState:T.initialState??e.initialState,gameManager:T.gameManager??e.gameManager,onEvent:u}),y},destroy(){if(!s){s=!0;try{y.destroy()}finally{try{m.destroy()}finally{r.remove()}}}}}}var ea="CYBERART_UPDATE_GOLDEN";function ta(e=typeof process<"u"?process.env:void 0){let t=e?.[ea];return t==="1"||t==="true"}function yi(e){return Yr(_n(e))}function na(e,t,n={}){if(e.width!==t.width||e.height!==t.height){let u=Gu(e,t);return{match:!1,differingPixels:e.width*e.height,width:e.width,height:e.height,artifacts:u,updatedGolden:!1}}let r=n.tolerance??0,i=n.perceptualThreshold,o=n.maxDifferingPixels??0,s=new Uint8ClampedArray(e.width*e.height*4),a=0;for(let u=0;u<e.data.length;u+=4){let y=Math.abs(e.data[u]-t.data[u]),S=Math.abs(e.data[u+1]-t.data[u+1]),R=Math.abs(e.data[u+2]-t.data[u+2]),T=Math.abs(e.data[u+3]-t.data[u+3]),k=.299*y+.587*S+.114*R,P=n.alphaTolerance??r;(i!==void 0?k<=i&&T<=P:y<=r&&S<=r&&R<=r&&T<=P)?(s[u]=0,s[u+1]=0,s[u+2]=0,s[u+3]=255):(a+=1,s[u]=255,s[u+1]=0,s[u+2]=255,s[u+3]=255)}let c=bi(t,e,gt(s,e.width,e.height),a);return n.updateGolden===!0||ta()?{match:!0,differingPixels:0,width:e.width,height:e.height,artifacts:bi(e,e,gt(s,e.width,e.height),0),updatedGolden:!0}:{match:a<=o,differingPixels:a,width:e.width,height:e.height,artifacts:c,updatedGolden:!1}}function ra(e,t,n={}){let r=na(e,t,n);if(!r.match){let i=new Error(`Visual assertion failed: ${r.differingPixels} differing pixels (${r.width}\xD7${r.height}). Review expected/actual/diff PNG buffers on the result.`);throw i.visual=r,i}return r}function Wu(e,t,n={}){return ra(yi(e),yi(t),n)}function bi(e,t,n,r){let i=Ft(e.width,e.height,e.data),o=Ft(t.width,t.height,t.data),s=Ft(n.width,n.height,n.data);return{expectedPng:i,actualPng:o,diffPng:s,expectedDataUrl:$t(e.width,e.height,e.data),actualDataUrl:$t(t.width,t.height,t.data),diffDataUrl:$t(n.width,n.height,n.data),differingPixels:r}}function Gu(e,t){let n=Math.max(e.width,t.width),r=Math.max(e.height,t.height),i=new Uint8ClampedArray(n*r*4);for(let o=0;o<i.length;o+=4)i[o]=255,i[o+1]=0,i[o+2]=255,i[o+3]=255;return bi(t,e,gt(i,n,r),n*r)}async function Ku(e,t,n={}){let{mkdir:r,writeFile:i}=await import("node:fs/promises"),{join:o}=await import("path");await r(e,{recursive:!0});let s=o(e,n.expected??"expected.png"),a=o(e,n.actual??"actual.png"),c=o(e,n.diff??"diff.png");return await i(s,t.expectedPng),await i(a,t.actualPng),await i(c,t.diffPng),{expectedPath:s,actualPath:a,diffPath:c}}var ia="cyberart.state.save",oa="cyberart.state.load";var tr=1,ht="cyberart.diagnostic.rejected",vi=8,ju=new Set(["intent","state","diagnostic"]),Uu=new Set([ia,oa]);function nr(e){return typeof e=="string"&&ju.has(e)}function Ju(e){if(e.kind!==void 0)return nr(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(Uu.has(e.type))return"intent";for(let t of e.type.split("."))if(nr(t))return t}}function zu(e,t){let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function At(e,t){for(let n of e)if(zu(n,t))return!0;return!1}function Yu(e){if(e===void 0)return{ok:!0,value:void 0};try{return{ok:!0,value:JSON.parse(JSON.stringify(e))}}catch{return{ok:!1}}}function Si(e,t){if(!e||typeof e.type!="string"||e.type.length===0)return{ok:!1,reason:"malformed",detail:"type is required"};if(e.schemaVersion!==void 0&&e.schemaVersion!==tr)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=Ju(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=Yu(e.payload);if(!r.ok)return{ok:!1,reason:"malformed",detail:"payload is not JSON-serializable"};let i=t.createId(),o=typeof e.correlationId=="string"&&e.correlationId.length>0?e.correlationId:i,s=typeof e.causationId=="string"&&e.causationId.length>0?e.causationId:t.causationId,a=typeof e.target=="string"&&e.target.length>0?e.target:void 0,c=t.maxHops??vi,m=t.parentHops===void 0?c:Math.max(0,t.parentHops-1),u=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,y={schemaVersion:tr,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:m};return a&&(y.target=a),s&&(y.causationId=s),u&&(y.idempotencyKey=u),r.value!==void 0&&(y.payload=r.value),{ok:!0,envelope:y}}var Xu=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),Qu=8,Zu=8,el=16,tl=256,nl=256,rl=["*.intent.*"];function sa(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??Qu,i=e.maxCausationDepth??Zu,o=e.maxHops??vi,s=e.maxCorrelationPerTurn??el,a=e.maxIndex??tl,c=e.maxDecisions??nl,m=e.maxPerWindow,u=e.windowMs??1e3,y=e.now??Date.now,S=0,R=e.createId??(()=>`evt-${++S}`),T=new Map,k=[],P=[],B=new Map,J=new Map,D=new Map,O=[],g=0,f=0,I=0;function d(V){try{return JSON.parse(JSON.stringify(V))}catch{return V}}function l(V){for(O.push(V);O.length>c;)O.shift();for(let j of P)try{j(d(V))}catch{}}function b(V,j){let Y={outcome:j.outcome,source:j.source,type:V.type,kind:V.kind,envelopeId:V.id,deliveredTo:j.deliveredTo,hops:V.hops,seq:V.seq,correlationId:V.correlationId,schemaVersion:V.schemaVersion,turn:I,time:y()};return j.reason&&(Y.reason=j.reason),j.detail&&(Y.detail=j.detail),j.priorEnvelopeId&&(Y.priorEnvelopeId=j.priorEnvelopeId),V.target&&(Y.target=V.target),V.causationId&&(Y.causationId=V.causationId),V.idempotencyKey&&(Y.idempotencyKey=V.idempotencyKey),V.payload!==void 0&&(Y.payload=d(V.payload)),Y}let A=[],F=!1;function x(V,j,Y){for(V.set(j,Y);V.size>a;){let Q=V.keys().next().value;if(Q===void 0)break;V.delete(Q)}}function H(V){x(B,V.id,{type:V.type,source:V.source,causationId:V.causationId,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey})}function K(V,j){j&&(V.correlationId||(V.correlationId=j.correlationId),V.causationId||(V.causationId=j.id),!V.idempotencyKey&&j.idempotencyKey&&(V.idempotencyKey=`${j.idempotencyKey}::${V.type}`))}function $(V,j){if(V){let Y=B.get(V);return Y?Y.hops:o}return j}function p(V,j){return`${V}\0${j}`}function E(V,j){V.idempotencyKey&&x(D,p(V.source,V.idempotencyKey),j)}function w(V,j){if(j)return D.get(p(V,j))}function M(V){return w(V.source,V.idempotencyKey)}function L(V){return V.seq+=1,V.seq}function q(V,j){if(!(typeof j.causationId=="string"&&j.causationId.length>0))return V.lastDelivered}function _(V){let j=new Set,Y=new Set([`${V.type}\0${V.source}`]),Q=V.causationId,ie=0;for(;Q;){if(ie+=1,ie>i||j.has(Q))return!0;j.add(Q);let de=B.get(Q);if(!de)break;let Oe=`${de.type}\0${de.source}`;if(Y.has(Oe))return!0;Y.add(Oe),Q=de.causationId}return!1}function U(V){let j=(J.get(V)??0)+1;return J.set(V,j),j}function h(V,j){m!==void 0&&(V.emitTimestamps=V.emitTimestamps.filter(Y=>j-Y<u))}function v(V,j){return(j.kind==="state"||j.kind==="diagnostic")&&!V.authoritative?!1:At(V.emit,j.type)}function C(V){for(let j of k)if(At(j.patterns,V.type))try{j.listener(V)}catch{}}function N(V){let j=[];if(V.target){let Y=T.get(V.target);return!Y||!At(Y.subscribe,V.type)||(Y.channel.dispatch(V),Y.lastDelivered={id:V.id,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey},j.push(Y.id)),j}for(let Y of T.values())At(Y.subscribe,V.type)&&(Y.channel.dispatch(V),Y.lastDelivered={id:V.id,hops:V.hops,correlationId:V.correlationId,idempotencyKey:V.idempotencyKey},j.push(Y.id));return j}function W(V,j,Y,Q,ie,de,Oe){let Ae={reason:Q,eventType:j,source:Y};ie&&(Ae.detail=ie),f+=1;let he=R(),lt={schemaVersion:tr,type:ht,kind:"diagnostic",source:n,id:he,correlationId:de??he,seq:f,hops:0,payload:Ae};Oe&&(lt.causationId=Oe),H(lt);let bt=T.get(V);bt&&bt.channel.dispatch(lt),C(lt)}function Z(V,j,Y,Q,ie){if(W(V,ie?.type??(typeof j.type=="string"?j.type:""),ie?.source??V,Y,Q,ie?.correlationId,ie?.id),ie?.idempotencyKey&&!Xu.has(Y)&&E(ie,{status:"rejected"}),ie)l(b(ie,{outcome:"rejected",reason:Y,detail:Q,source:V,deliveredTo:[]}));else{let de={outcome:"rejected",reason:Y,source:V,type:typeof j.type=="string"?j.type:"",deliveredTo:[],turn:I,time:y()};Q&&(de.detail=Q),typeof j.idempotencyKey=="string"&&(de.idempotencyKey=j.idempotencyKey),l(de)}}function X(V,j){H(V),E(V,{status:"accepted",envelope:V}),U(V.correlationId),C(V);let Y=N(V);l(b(V,{outcome:"accepted",source:j,deliveredTo:Y}))}function re(V,j,Y,Q){let ie=Q?.type??(typeof j.type=="string"?j.type:""),de={outcome:"duplicate",reason:"duplicate",detail:Y.status==="accepted"?"idempotent accepted":"idempotent rejected",source:V,type:ie,deliveredTo:[],turn:I,time:y()};Q?(de.kind=Q.kind,de.envelopeId=Q.id,de.hops=Q.hops,de.seq=Q.seq,de.correlationId=Q.correlationId,de.schemaVersion=Q.schemaVersion,Q.target&&(de.target=Q.target),Q.causationId&&(de.causationId=Q.causationId),Q.idempotencyKey&&(de.idempotencyKey=Q.idempotencyKey),Q.payload!==void 0&&(de.payload=d(Q.payload))):typeof j.idempotencyKey=="string"&&(de.idempotencyKey=j.idempotencyKey),Y.status==="accepted"&&(de.priorEnvelopeId=Y.envelope.id,de.envelopeId||(de.envelopeId=Y.envelope.id)),l(de)}function ee(V,j,Y,Q){if(!Y.ok){Z(V,j,"malformed",Y.detail);return}let ie=Y.envelope,de=M(ie);if(de)return re(V,j,de,ie),de.status==="accepted"?de.envelope:void 0;if(ie.hops<1){Z(V,j,"hop-limit","no hops remaining",ie);return}if(ie.target&&ie.target!==t){let Oe=T.get(ie.target);if(!Oe){Z(V,j,"unknown-target",`unknown target "${ie.target}"`,ie);return}if(!At(Oe.subscribe,ie.type)){Z(V,j,"not-subscribed",`target "${ie.target}" does not subscribe to ${ie.type}`,ie);return}}if(Q){if(!v(Q,ie)){Z(V,j,"unauthorized","source may not emit this event",ie);return}if(Q.emitsThisTurn+=1,Q.emitsThisTurn>r){Z(V,j,"rate-limited","maxPerTurn exceeded",ie);return}if(m!==void 0){let Ae=y();if(h(Q,Ae),Q.emitTimestamps.push(Ae),Q.emitTimestamps.length>m){Z(V,j,"rate-limited","maxPerWindow exceeded",ie);return}}if(_(ie)){Z(V,j,"loop-detected","causation chain cycle or depth exceeded",ie);return}if((J.get(ie.correlationId)??0)+1>s){Z(V,j,"storm-detected","correlationId storm",ie);return}if(e.validate){let Ae;try{Ae=e.validate(ie)}catch(he){let lt=he instanceof Error?he.message:"validate threw";Z(V,j,"host-rejected",lt,ie);return}if(Ae!==!0){Z(V,j,"host-rejected",Ae.detail,ie);return}}}else{if(_(ie)){Z(V,j,"loop-detected","causation chain cycle or depth exceeded",ie);return}if((J.get(ie.correlationId)??0)+1>s){Z(V,j,"storm-detected","correlationId storm",ie);return}}return X(ie,V),ie}function ge(V,j){let Y=T.get(V);if(!Y)return;let Q={...j},ie=q(Y,Q);K(Q,ie);let de=w(Y.id,Q.idempotencyKey);if(de){re(V,Q,de);return}let Oe=L(Y),Ae=Si(Q,{source:Y.id,createId:R,seq:Oe,causationId:ie?.id,maxHops:o,parentHops:$(Q.causationId??ie?.id,ie?.hops)});ee(V,Q,Ae,Y)}function G(V,j){let Y=j?.cause,Q={...V};K(Q,Y);let ie=w(t,Q.idempotencyKey);if(ie)return re(t,Q,ie),ie.status==="accepted"?ie.envelope:void 0;g+=1;let de=Si(Q,{source:t,createId:R,seq:g,causationId:Q.causationId,maxHops:o,parentHops:$(Q.causationId,Y?.hops)});return ee(t,Q,de,void 0)}function z(){if(!F){F=!0;try{for(;A.length>0;){let V=A.shift();V&&(V.kind==="cart"?ge(V.participantId,V.event):V.result=G(V.event,V.extras))}}finally{F=!1}}}function ae(V){A.push(V),z()}return{attach(V,j,Y={}){if(V===t||V===n)throw new Error(`createEventRouter: "${V}" is a reserved participant id`);for(let de of T.values())if(de.channel===j&&de.id!==V)throw new Error(`createEventRouter: channel already attached as "${de.id}"`);T.get(V)?.unsubscribe();let ie={id:V,channel:j,emit:Y.emit??rl,subscribe:Y.subscribe??[],authoritative:Y.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};ie.unsubscribe=j.onEvent(de=>{ae({kind:"cart",participantId:V,event:de})}),T.set(V,ie)},detach(V){let j=T.get(V);j&&(j.unsubscribe(),T.delete(V))},publish(V,j){let Y={kind:"publish",event:V,extras:j};return ae(Y),Y.result},subscribe(V,j){let Y={patterns:V,listener:j};return k.push(Y),()=>{let Q=k.indexOf(Y);Q>=0&&k.splice(Q,1)}},subscribeDecision(V){return P.push(V),()=>{let j=P.indexOf(V);j>=0&&P.splice(j,1)}},inspectParticipants(){return[...T.values()].map(V=>({id:V.id,emit:V.emit.slice(),subscribe:V.subscribe.slice(),authoritative:V.authoritative}))},inspectDecisions(){return O.map(V=>d(V))},turn(){I+=1,J.clear();for(let V of T.values())V.emitsThisTurn=0,V.lastDelivered=void 0,m!==void 0&&h(V,y())}}}var il=320,ol=180,sl=1024,al="Runtime group has been destroyed";function dl(e){let t="";for(let n=0;n<32;n++){let r=e.charCodeAt(n%Math.max(e.length,1))+n*17&255;t+=r.toString(16).padStart(2,"0")}return`0x${t}`}function cl(e,t){let n=document.createElement("div");return Object.defineProperty(n,"clientWidth",{value:e,configurable:!0}),Object.defineProperty(n,"clientHeight",{value:t,configurable:!0}),document.body.appendChild(n),n}function da(e){let t=e.capability,n={},r=e.emit??t?.emit,i=e.subscribe??t?.subscribe,o=e.authoritative??t?.authoritative;return r&&(n.emit=r),i&&(n.subscribe=i),o!==void 0&&(n.authoritative=o),n}function aa(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ul(e){let t=new Set([ht,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=da(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function rr(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let f of e.participants){if(!f.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(f.id))throw new Error(`createRuntimeGroup: duplicate participant id "${f.id}"`);t.add(f.id)}let n=e.origin??0,r=e.width??il,i=e.height??ol,o=e.maxTrace??sl,s=[...e.participants].sort((f,I)=>f.id.localeCompare(I.id)),a=[],c=new Map,m=0,u=e.createId??e.router?.createId??(()=>`evt-${++m}`),y=e.now??e.router?.now??(()=>{let f=a[0];if(!f)return n;try{return f.cart.getClock().now}catch{return n}}),S=sa({...e.router,createId:u,now:y,validate:e.validate??e.router?.validate}),R=[],T=!1,k=!1,P=()=>{},B=f=>I=>{f.events.push(I),f.userOnEvent?.(I)},J=()=>{if(k)throw new Error(al)},D=()=>{P();for(let f of a){try{S.detach(f.id)}catch{}try{f.runtime.destroy()}catch{}f.ownsContainer&&f.container.remove()}a.length=0,c.clear()};try{for(let f of s){let I=f.width??r,d=f.height??i,l=!f.container,b=f.container??cl(I,d),A=Zn({container:b,seed:f.seed??dl(f.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?f.id:void 0,kind:f.kind??"render"}),F={id:f.id,kind:f.kind??"render",cartDef:f.cart,initialState:f.initialState,gameManager:f.gameManager,userOnEvent:f.onEvent,runtime:A,container:b,ownsContainer:l,cart:void 0,events:[],errors:[],suspended:!1};A.onError=(x,H)=>{F.errors.push({error:x,info:H})},S.attach(f.id,A.hostChannel,da(f)),F.cart=A.mount(f.cart,{initialState:f.initialState,gameManager:f.gameManager,onEvent:B(F)}),a.push(F),c.set(F.id,F)}P=S.subscribe(ul(s),f=>{for(R.push(aa(f));R.length>o;)R.shift()})}catch(f){throw D(),f}let O=f=>({id:f.id,kind:f.kind,runtime:f.runtime,container:f.container,get events(){return f.events.slice()},get errors(){return f.errors.slice()},get cart(){return f.cart}});return{router:S,origin:n,get paused(){return T},get audioBroker(){return e.audioBroker},participant(f){J();let I=c.get(f);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${f}"`);return O(I)},async step(f=1){if(J(),T)return;let I=Math.max(0,Math.floor(f));for(let d=0;d<I;d++){S.turn();for(let l of a)if(!l.suspended)try{await l.cart.step(1)}catch(b){l.errors.push({error:b,info:{phase:"update",consecutive:l.errors.length+1,stopped:!1}})}}},pause(){J(),T=!0;for(let f of a)f.cart.pause()},resume(){J(),T=!1;for(let f of a)f.cart.resume()},reset(){J(),R.length=0;for(let f of a)f.events.length=0,f.errors.length=0,f.suspended=!1,f.cart=f.runtime.mount(f.cartDef,{initialState:f.initialState,gameManager:f.gameManager,onEvent:B(f)});S.turn()},resize(f,I){J();let d=Math.max(1,f|0),l=Math.max(1,I|0);for(let b of a){Object.defineProperty(b.container,"clientWidth",{value:d,configurable:!0}),Object.defineProperty(b.container,"clientHeight",{value:l,configurable:!0});let A=b.cart.canvas;A&&(A.width=d,A.height=l)}},detach(f){J();let I=c.get(f);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${f}"`);try{S.detach(I.id)}catch{}try{I.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(I.id),I.ownsContainer&&I.container.remove();let d=a.indexOf(I);d>=0&&a.splice(d,1),c.delete(f)},suspendParticipant(f){J();let I=c.get(f);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${f}"`);I.suspended=!0,I.cart.pause()},resumeParticipant(f){J();let I=c.get(f);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${f}"`);I.suspended=!1,T||I.cart.resume()},isParticipantSuspended(f){J();let I=c.get(f);if(!I)throw new Error(`createRuntimeGroup: unknown participant "${f}"`);return I.suspended},dispatch(f,I){J();let d=c.get(f);if(!d)throw new Error(`createRuntimeGroup: unknown participant "${f}"`);d.cart.dispatch(I)},publish(f,I){return J(),S.publish(f,I)},inspectParticipants(){J();let f=new Map(a.map(I=>[I.id,I.kind]));return S.inspectParticipants().map(I=>({...I,kind:f.get(I.id)??"render"}))},async inspect(){J();let f={},I={},d=new Map(S.inspectParticipants().map(A=>[A.id,A]));for(let A of a){let F=await A.cart.getReplayMetadata(),x=A.cart.getClock();I[A.id]=x;let H=d.get(A.id);f[A.id]={state:F.state,events:A.events.slice(),errors:A.errors.slice(),kind:A.kind,clock:x,emit:H?.emit.slice()??[],subscribe:H?.subscribe.slice()??[],authoritative:H?.authoritative===!0,suspended:A.suspended}}let l=R.map(A=>aa(A)),b=a.filter(A=>A.suspended).map(A=>A.id).sort();return{participants:f,trace:l,diagnostics:{paused:T,participantIds:a.map(A=>A.id),suspendedIds:b,clocks:I,rejections:l.filter(A=>A.type===ht).map(A=>A.payload)}}},destroy(){if(!k){k=!0,T=!1;try{D()}finally{R.length=0}}}}}function ll(e){return er(),rr(e)}var ki=1,Ei=512,ot="[REDACTED]",Pt=["prompt","credentials","credential","authorization","apiKey","secret"],pl=new Set([et,Je]);function $e(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ir(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>ir(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?ot:ir(o,t);return r}function fl(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function ml(e,t){return t?!(t.types&&!t.types.includes(e.type)||t.sources&&!t.sources.includes(e.source)||t.outcomes&&!t.outcomes.includes(e.outcome)||t.correlationId&&e.correlationId!==t.correlationId):!0}function ca(e){return JSON.stringify({outcome:e.outcome,reason:e.reason,source:e.source,target:e.target,type:e.type,kind:e.kind,envelopeId:e.envelopeId,priorEnvelopeId:e.priorEnvelopeId,correlationId:e.correlationId,causationId:e.causationId,hops:e.hops,seq:e.seq,idempotencyKey:e.idempotencyKey,deliveredTo:e.deliveredTo,payload:e.payload})}function Ii(e,t){if(e.length!==t.length)return{ok:!1,detail:`record count ${t.length} !== ${e.length}`};for(let n=0;n<e.length;n++){let r=ca(e[n]),i=ca(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function ua(e){let t=new Map,n=[];for(let o of e){if(o.outcome==="duplicate"){n.push(void 0);continue}let s={envelopeId:o.envelopeId,type:o.type,source:o.source,outcome:o.outcome,children:[]};o.reason&&(s.reason=o.reason),n.push(s),o.envelopeId&&!t.has(o.envelopeId)&&t.set(o.envelopeId,s)}let r=new Set;for(let o=0;o<e.length;o++){let s=e[o],a=n[o];if(!a)continue;let c=s.causationId?t.get(s.causationId):void 0;c&&c!==a&&(c.children.push(a),r.add(a))}let i=[];for(let o of n)o&&!r.has(o)&&i.push(o);return i}function la(e,t){let n={id:e.id,emit:e.emit.slice(),subscribe:e.subscribe.slice(),authoritative:e.authoritative,errorCount:0};return t&&(n.kind=t),n}function gl(e,t,n){let r=t.errors[t.errors.length-1],i={id:e,kind:t.kind,emit:t.emit.slice(),subscribe:t.subscribe.slice(),authoritative:t.authoritative,clock:$e(t.clock),state:ir(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=fl(r.error)),i}function or(e={}){let t=new Set([...Pt,...e.redactedKeys??[]]),n=e.maxRecords??Ei,r=e.registry,i=0,o=0,s=!1,a=[],c=[],m,u=[],y=0,S=[],R={},T=()=>{},k=()=>{if(s)throw new Error("Replay inspector has been destroyed")},P=O=>{let g=r?.get(O.type),f={index:o,turn:O.turn,time:O.time,outcome:O.outcome,source:O.source,type:O.type,deliveredTo:O.deliveredTo.slice(),payload:ir(O.payload,t)};for(o+=1,O.reason&&(f.reason=O.reason),O.detail&&(f.detail=O.detail),O.target&&(f.target=O.target),O.kind&&(f.kind=O.kind),O.envelopeId&&(f.envelopeId=O.envelopeId),O.priorEnvelopeId&&(f.priorEnvelopeId=O.priorEnvelopeId),O.correlationId&&(f.correlationId=O.correlationId),O.causationId&&(f.causationId=O.causationId),O.hops!==void 0&&(f.hops=O.hops),O.seq!==void 0&&(f.seq=O.seq),O.idempotencyKey&&(f.idempotencyKey=O.idempotencyKey),O.schemaVersion!==void 0&&(f.schemaVersion=O.schemaVersion),g&&(f.payloadSchemaVersion=g.payloadSchema.version),a.push(f);a.length>n;)a.shift(),i+=1},B=O=>a.filter(g=>ml(g,O)).map(g=>$e(g)),J=O=>O?O.inspectParticipants().map(g=>la(g,g.kind)):S.map(g=>$e(g)),D={watchRouter(O){if(k(),T(),S=O.inspectParticipants().map(f=>la(f)),a.length===0)for(let f of O.inspectDecisions())P(f);let g=O.subscribeDecision(f=>P(f));return T=()=>{g(),T=()=>{}},c.push(T),T},bind(O){k(),m&&T(),m=O,y=O.origin,D.watchRouter(O.router),S=J(O);let g={publish(f,I){k();let d={kind:"publish",event:$e(f)};return I?.cause&&(d.extras={cause:$e(I.cause)}),u.push(d),O.publish(f,I)},dispatch(f,I){k();let d=$e(I);typeof d.type=="string"&&pl.has(d.type)?u.push({kind:"asset",participantId:f,event:d}):u.push({kind:"dispatch",participantId:f,event:d}),O.dispatch(f,I)},async step(f=1){k(),u.push({kind:"step",frames:f}),await O.step(f)},async report(){k();let f=await O.inspect(),I=[];for(let d of Object.keys(f.participants).sort())I.push(gl(d,f.participants[d],t));S=I,R={};for(let d of I)R[d.id]=$e(d.state);return D.report()},async exportTrace(f){return await g.report(),D.exportTrace(f)},unbind(){T(),m=void 0}};return g},importTrace(O){k();let g=typeof O=="string"?JSON.parse(O):O;if(g.schemaVersion!==ki)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,a.length=0,u=$e(g.tape??[]),y=g.origin??0,S=$e(g.participants??[]),R=$e(g.snapshots??{});for(let f of g.records??[])P({outcome:f.outcome,reason:f.reason,detail:f.detail,source:f.source,type:f.type,kind:f.kind,envelopeId:f.envelopeId,priorEnvelopeId:f.priorEnvelopeId,target:f.target,deliveredTo:f.deliveredTo,hops:f.hops,seq:f.seq,correlationId:f.correlationId,causationId:f.causationId,idempotencyKey:f.idempotencyKey,schemaVersion:f.schemaVersion,payload:f.payload,turn:f.turn,time:f.time})},exportTrace(O){return k(),{schemaVersion:ki,origin:y,redactedKeys:[...t],participants:$e(S),tape:$e(u),records:B(O),snapshots:$e(R)}},report(O){k();let g=B(O);return{schemaVersion:ki,participants:$e(S),records:g,trees:ua(g),dropped:i}},causationTree(O){k();let g=B(O?{correlationId:O}:void 0);return ua(g)},records(){return k(),a.map(O=>$e(O))},reset(){k(),a.length=0,u=[],i=0,o=0,R={},m&&(S=J(m))},destroy(){if(!s){for(s=!0,T();c.length>0;)c.pop()?.();a.length=0,u=[],S=[],R={},m=void 0}}};return D}async function Ri(e,t,n={}){let r=or({redactedKeys:n.redactedKeys??e.redactedKeys,maxRecords:n.maxRecords,registry:n.registry}),i=r.bind(t);try{for(let s of e.tape)s.kind==="publish"?i.publish(s.event,s.extras):s.kind==="dispatch"||s.kind==="asset"?i.dispatch(s.participantId,s.event):await i.step(s.frames);let o=await i.report();return{inspector:r,report:o}}catch(o){throw r.destroy(),o}}var sr=1,fa=Ei,Ci=["binding-conflict","asset-failure","revision-rollback","sequence-interruption","text-only-fallback"],ma=["state-projection","binding","content-revision","staging","asset","sequence","presentation","snapshot"],ga=[...Pt,"privatePrompt","signedUrl","signedURL","signed_url","presignedUrl","password"],hl=new Set(Ci),yl=new Set(ma),bl=new Set(["signedUrl","signedURL","signed_url","presignedUrl","presignedURL"]),vl=/[?&](X-Amz-Signature|X-Amz-Credential|X-Amz-Security-Token|X-Goog-Signature|Signature|sig)=/i,Sl=/https?:\/\/[^\s"'<>)\]]+/gi,kl="Selection trace has been destroyed",El=new Set(Ci);function Il(e){return typeof e=="string"&&hl.has(e)}function Rl(e){return typeof e=="string"&&yl.has(e)}function Be(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function pa(e){return/^https?:\/\//i.test(e)?vl.test(e):!1}function ha(e){return pa(e)?ot:e.replace(Sl,t=>pa(t)?ot:t)}function st(e,t){if(e==null)return e;if(typeof e=="string")return ha(e);if(Array.isArray(e))return e.map(i=>st(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))t.has(i)||bl.has(i)?r[i]=ot:r[i]=st(o,t);return r}function ya(e,t,n){if(e==null)return e;if(Array.isArray(e))return e.map(o=>ya(o,t,n));if(typeof e!="object")return ot;let r=e,i={};for(let[o,s]of Object.entries(r))t.has(o)?i[o]=st(s,n):i[o]=ot;return i}function Cl(e,t){return t?!(t.kinds&&!t.kinds.includes(e.kind)||t.reasons&&!t.reasons.includes(e.reason)||t.correlationId&&e.correlationId!==t.correlationId||t.causationId&&e.causationId!==t.causationId||t.envelopeId&&e.envelopeId!==t.envelopeId||t.contentId&&![e.requestedContent?.contentId,e.activatedContent?.contentId].includes(t.contentId)||t.sequenceId&&e.sequence?.sequenceId!==t.sequenceId):!0}function wl(e,t,n){return El.has(e)||n>=1?!0:n<=0?!1:(t*2654435761>>>0)/4294967296<n}function Al(e,t){if(!e)return[];let n=new Set;for(let r of t)r.correlationId&&n.add(r.correlationId),r.causationId&&n.add(r.causationId),r.envelopeId&&n.add(r.envelopeId);return n.size===0?[]:e.records().filter(r=>r.correlationId!==void 0&&n.has(r.correlationId)||r.causationId!==void 0&&n.has(r.causationId)||r.envelopeId!==void 0&&n.has(r.envelopeId))}function Pl(e,t){return e.recordSelectionDecision(t)}function xl(e,t){return{...Be(e),selectionTrace:t}}function Tl(e={}){let t=new Set([...ga,...e.redactedKeys??[]]),n=new Set(e.projectionWhitelist??[]),r=e.maxRecords??fa,i=e.sampleRate??1,o=e.inspector,s=0,a=0,c=0,m=!1,u=[],y=[],S={},R=()=>{if(m)throw new Error(kl)},T=D=>u.filter(O=>Cl(O,D)).map(O=>Be(O)),k=D=>ya(D,n,t),P=(D,O)=>{let g={index:O,kind:D.kind,reason:D.reason,summary:ha(String(D.summary))};return D.turn!==void 0&&(g.turn=D.turn),D.time!==void 0&&(g.time=D.time),D.correlationId&&(g.correlationId=D.correlationId),D.causationId&&(g.causationId=D.causationId),D.envelopeId&&(g.envelopeId=D.envelopeId),D.initiatingEventType&&(g.initiatingEventType=D.initiatingEventType),D.projectionRevision!==void 0&&(g.projectionRevision=D.projectionRevision),D.projection!==void 0?g.projection=k(D.projection):D.hostState!==void 0&&(g.projection=k(D.hostState)),D.bindings&&(g.bindings=st(Be(D.bindings.slice()),t)),D.winningBindingId!==void 0&&(g.winningBindingId=D.winningBindingId),D.rejectedBindingIds&&(g.rejectedBindingIds=D.rejectedBindingIds.slice()),D.defaultFallback!==void 0&&(g.defaultFallback=D.defaultFallback),D.requestedContent&&(g.requestedContent=st(Be(D.requestedContent),t)),D.activatedContent!==void 0&&(g.activatedContent=D.activatedContent?st(Be(D.activatedContent),t):null),D.staging&&(g.staging=st(Be(D.staging),t)),D.lastKnownGood!==void 0&&(g.lastKnownGood=D.lastKnownGood?st(Be(D.lastKnownGood),t):null),D.asset&&(g.asset=st(Be(D.asset),t)),D.sequence&&(g.sequence=st(Be(D.sequence),t)),D.presentation&&(g.presentation=st(Be(D.presentation),t)),D.snapshot&&(g.snapshot=Be(D.snapshot)),g},B=D=>{for(u.push(D);u.length>r;)u.shift(),s+=1};return{recordSelectionDecision(D){R();let O=c;if(c+=1,!wl(D.reason,O,i))return a+=1,null;let g=P(D,O);return B(g),Be(g)},records(D){return R(),T(D)},query(D){return R(),T(D)},chain(D){return R(),T({correlationId:D})},exportTrace(D){R();let O=T(D),g=y.length>0?y.filter(I=>D?.correlationId?I.correlationId===D.correlationId:!0):Al(o,O),f={schemaVersion:sr,redactedKeys:[...t],projectionWhitelist:[...n],dropped:s,sampledOut:a,records:O,inspectorRecords:Be(g)};return S.revision!==void 0&&(f.snapshotRevision=S.revision),S.schemaVersion!==void 0&&(f.snapshotSchemaVersion=S.schemaVersion),S.seed&&(f.snapshotSeed=S.seed),f},importTrace(D){R();let O=typeof D=="string"?JSON.parse(D):D;if(O.schemaVersion!==sr)throw new Error("Selection trace: unsupported export schemaVersion");s=O.dropped??0,a=O.sampledOut??0,c=0,u.length=0,y=Be(O.inspectorRecords??[]),S={},O.snapshotRevision!==void 0&&(S.revision=O.snapshotRevision),O.snapshotSchemaVersion!==void 0&&(S.schemaVersion=O.snapshotSchemaVersion),O.snapshotSeed&&(S.seed=O.snapshotSeed);for(let g of O.records??[]){let f=typeof g.index=="number"?g.index:c;c=Math.max(c,f+1),B(Be(g))}},report(D){return R(),{schemaVersion:sr,records:T(D),dropped:s,sampledOut:a}},setSnapshotProvenance(D){R(),S={...S,...D}},reset(){R(),u.length=0,y=[],s=0,a=0,c=0,S={}},destroy(){m||(m=!0,u.length=0,y=[],S={})}}}var zt="cue.started",bn="cue.completed",Yt="cue.cancelled",xt="cue.replaced";function Dl(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function ba(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function ar(e){return{name:e.name,idempotencyKey:e.idempotencyKey,phase:e.phase,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,progress:e.progress,repeatIndex:e.repeatIndex}}function wi(e){return e.startFrame+e.delayFrames}function Ml(e,t){if(!e||typeof e!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof e.name!="string"||e.name.length===0)return{ok:!1,reason:"invalid",detail:"name is required"};if(typeof e.idempotencyKey!="string"||e.idempotencyKey.length===0)return{ok:!1,reason:"invalid",detail:"idempotencyKey is required"};if(typeof e.durationFrames!="number"||!Number.isFinite(e.durationFrames)||e.durationFrames<0)return{ok:!1,reason:"invalid",detail:"durationFrames must be a non-negative finite number"};let n=e.startFrame===void 0?t:e.startFrame;if(typeof n!="number"||!Number.isFinite(n))return{ok:!1,reason:"invalid",detail:"startFrame must be finite"};let r=e.delayFrames??0;if(typeof r!="number"||!Number.isFinite(r)||r<0)return{ok:!1,reason:"invalid",detail:"delayFrames must be a non-negative finite number"};let i=e.easing??"linear";if(i!=="linear"&&i!=="ease-out")return{ok:!1,reason:"invalid",detail:"unsupported easing"};let o=e.onDuplicate??"replace";if(o!=="ignore"&&o!=="replace"&&o!=="reject")return{ok:!1,reason:"invalid",detail:"unsupported onDuplicate"};let s=0;if(e.repeat)if("forever"in e.repeat&&e.repeat.forever)s="forever";else if("count"in e.repeat){if(typeof e.repeat.count!="number"||!Number.isFinite(e.repeat.count)||e.repeat.count<0)return{ok:!1,reason:"invalid",detail:"repeat.count must be >= 0"};s=Math.floor(e.repeat.count)}else return{ok:!1,reason:"invalid",detail:"unsupported repeat"};let a=e.reducedMotion??"complete";return a!=="skip"&&a!=="complete"&&(typeof a!="object"||typeof a.durationFrames!="number"||!Number.isFinite(a.durationFrames)||a.durationFrames<0)?{ok:!1,reason:"invalid",detail:"unsupported reducedMotion"}:{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:n,durationFrames:e.durationFrames,delayFrames:r,easing:i,repeatRemaining:s,repeatIndex:0,reducedMotion:a,onDuplicate:o,phase:"scheduled",progress:0}}function Ol(e,t){if(!t)return e;let n=e.reducedMotion;return n==="skip"||n==="complete"?{...e,durationFrames:0,delayFrames:0,startFrame:e.startFrame}:{...e,durationFrames:n.durationFrames}}function kt(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(k){i.push(k)}function s(k,P){let B=wi(k)-wi(P);return B!==0?B:k.name<P.name?-1:k.name>P.name?1:k.idempotencyKey<P.idempotencyKey?-1:k.idempotencyKey>P.idempotencyKey?1:0}function a(k,P){o({type:P,atFrame:n,name:k.name,idempotencyKey:k.idempotencyKey,progress:k.progress})}function c(k){if(k.phase="completed",k.progress=1,a(k,bn),k.repeatRemaining==="forever"||k.repeatRemaining>0){if(typeof k.repeatRemaining=="number"&&(k.repeatRemaining-=1),k.repeatIndex+=1,k.phase="scheduled",k.progress=0,k.startFrame=n,k.delayFrames=0,k.durationFrames===0){r.delete(k.idempotencyKey);return}k.phase="active",a(k,zt)}else r.delete(k.idempotencyKey)}function m(k){if(k.phase==="cancelled"||k.phase==="completed")return;let P=wi(k);if(!(n<P)){if(k.phase==="scheduled"&&(k.phase="active",k.progress=k.durationFrames===0?1:0,a(k,zt),k.durationFrames===0)){c(k);return}if(k.phase==="active"){let B=n-P;B>=k.durationFrames?(k.progress=1,c(k)):k.progress=Dl(k.durationFrames===0?1:B/k.durationFrames,k.easing)}}}function u(){let k=[...r.values()].sort(s);for(let P of k)m(P)}function y(k){let P=Ml(k,n);if("ok"in P&&P.ok===!1)return P;let B=Ol(P,t),J=r.get(B.idempotencyKey);if(J&&(J.phase==="scheduled"||J.phase==="active")){if(J.onDuplicate==="reject"||B.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${B.idempotencyKey} is already ${J.phase}`};if(J.onDuplicate==="ignore"||B.onDuplicate==="ignore")return{ok:!0,cue:ar(J)};J.phase="cancelled",J.progress=J.progress,a(J,xt),r.delete(J.idempotencyKey)}r.set(B.idempotencyKey,B),m(B);let D=r.get(B.idempotencyKey)??B;return{ok:!0,cue:ar(D)}}function S(k){let P=r.get(k);return!P||P.phase==="completed"||P.phase==="cancelled"?!1:(P.phase="cancelled",a(P,Yt),r.delete(k),!0)}function R(){for(let k of[...r.values()].sort(s))(k.phase==="scheduled"||k.phase==="active")&&(k.phase="cancelled",a(k,Yt));r.clear(),i.length=0,n=e.originFrame??0}function T(k=1){let P=Number.isFinite(k)?Math.max(0,Math.floor(k)):0,B=i.length;for(let J=0;J<P;J++)n+=1,u();return i.slice(B).map(ba)}return{play:y,step:T,cancel:S,reset:R,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(s).map(ar),events:i.map(ba)}},get(k){let P=r.get(k);return P?ar(P):void 0},get frame(){return n},get reducedMotion(){return t}}}var Nl="audio.cue.scheduled",_l="audio.cue.started",Ll="audio.cue.skipped",Pi="audio.cue.failed";function Ai(e){let t={type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,assetId:e.assetId,channelId:e.channelId,progress:e.progress};return e.participantId!==void 0&&(t.participantId=e.participantId),e.reason!==void 0&&(t.reason=e.reason),t}function Vl(e){return{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,repeat:e.repeat,reducedMotion:e.reducedMotion,onDuplicate:e.onDuplicate}}function dr(e,t,n){return{name:e.name,idempotencyKey:e.idempotencyKey,phase:t?.phase??(e.audioPhase==="started"?"active":"scheduled"),startFrame:t?.startFrame??n,durationFrames:t?.durationFrames??0,delayFrames:t?.delayFrames??0,easing:t?.easing??"linear",progress:t?.progress??0,repeatIndex:t?.repeatIndex??0,assetId:e.assetId,channelId:e.channelId,participantId:e.participantId,priority:e.priority,audioPhase:e.audioPhase}}function Fl(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=kt({originFrame:e.originFrame}),i=new Map,o=[],s=new Set,a=0;function c(g){o.push(g)}function m(g,f,I){let d=r.get(f.idempotencyKey);return Ai({type:g,atFrame:r.frame,name:f.name,idempotencyKey:f.idempotencyKey,assetId:f.assetId,channelId:f.channelId,participantId:f.participantId,reason:I?.reason,progress:I?.progress??d?.progress??0})}function u(g,f){s.delete(g.idempotencyKey),t?.noteCueEnded(g.idempotencyKey),g.audioPhase="failed",c(m(Pi,g,{reason:f})),r.cancel(g.idempotencyKey),i.delete(g.idempotencyKey)}function y(g,f){s.delete(g.idempotencyKey),g.audioPhase="skipped",c(m(Ll,g,{reason:f}))}function S(g){s.delete(g.idempotencyKey),g.audioPhase="started",t?.noteCueStarted({idempotencyKey:g.idempotencyKey,channelId:g.channelId,participantId:g.participantId,priority:g.priority}),c(m(_l,g))}function R(g){if(g.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(g.participantId)){y(g,"unauthorized"),r.cancel(g.idempotencyKey),i.delete(g.idempotencyKey);return}if(n||t?.reducedSensory){y(g,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(g.channelId)===0){y(g,"muted");return}let f=t?.assetStatus(g.assetId);if(!t){S(g);return}if(f==="failed"){u(g,"asset-failed");return}if(f==="ready"){S(g);return}s.add(g.idempotencyKey)}function T(g,f){for(let I of[...s]){let d=i.get(I);if(!d){s.delete(I);continue}if(!(g&&d.assetId!==g)){if(f==="failed"||t?.assetStatus(d.assetId)==="failed"){u(d,"asset-failed");continue}(f==="ready"||t?.assetStatus(d.assetId)==="ready")&&R(d)}}}function k(g){for(let f of[...i.values()])f.participantId===g&&(f.audioPhase==="scheduled"||f.audioPhase==="started")&&u(f,"torn-down")}function P(g){for(let f of g){let I=i.get(f.idempotencyKey);if(I)if(f.type===zt)R(I);else if(f.type===bn){if(s.delete(I.idempotencyKey),t?.noteCueEnded(I.idempotencyKey),r.get(I.idempotencyKey)){I.audioPhase="scheduled";continue}I.audioPhase==="scheduled"?u(I,"asset-failed"):(I.audioPhase==="started"&&(I.audioPhase="completed"),i.delete(I.idempotencyKey))}else f.type===Yt?(s.delete(I.idempotencyKey),t?.noteCueEnded(I.idempotencyKey),(I.audioPhase==="scheduled"||I.audioPhase==="started")&&(I.audioPhase="failed"),i.delete(I.idempotencyKey)):f.type===xt&&(s.delete(I.idempotencyKey),t?.noteCueEnded(I.idempotencyKey),i.delete(I.idempotencyKey))}}function B(){let g=o.slice(a).map(Ai);return a=o.length,g}let J=t?.onNotice(g=>{if(g.type==="asset"){if(g.status==="failed"){for(let f of[...i.values()])f.assetId===g.id&&(f.audioPhase==="scheduled"||f.audioPhase==="started")&&u(f,"asset-failed");return}T(g.id,g.status);return}if(g.type==="teardown"){k(g.participantId);return}if(g.type==="destroy")for(let f of[...i.values()])(f.audioPhase==="scheduled"||f.audioPhase==="started")&&u(f,"torn-down")});function D(){for(let g of i.values())t?.noteCueEnded(g.idempotencyKey);i.clear(),s.clear(),o.length=0,a=0,r.reset()}function O(g){if(!g||typeof g!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof g.assetId!="string"||g.assetId.length===0)return{ok:!1,reason:"invalid",detail:"assetId is required"};let f=r.snapshot().events.length,I=r.play(Vl(g));if(!I.ok)return I;let d=r.snapshot().events.slice(f),l=d.some(K=>K.type===xt);if(!l&&i.has(g.idempotencyKey)){let K=i.get(g.idempotencyKey);return{ok:!0,cue:dr(K,I.cue,r.frame)}}if(l){let K=i.get(g.idempotencyKey);K&&(s.delete(K.idempotencyKey),t?.noteCueEnded(K.idempotencyKey),i.delete(K.idempotencyKey))}let b=g.channelId??g.participantId??"master",A={name:g.name,idempotencyKey:g.idempotencyKey,assetId:g.assetId,channelId:b,participantId:g.participantId,priority:Number.isFinite(g.priority)?g.priority:0,audioPhase:"scheduled"};i.set(A.idempotencyKey,A),typeof g.gain=="number"&&t?.setChannelGain(b,g.gain,g.participantId),typeof g.priority=="number"&&t?.setPriority(b,g.priority,g.participantId),c(m(Nl,A)),P(d.filter(K=>K.type!==xt));let F=i.get(A.idempotencyKey);F&&F.audioPhase==="scheduled"&&t?.assetStatus(F.assetId)==="failed"&&u(F,"asset-failed"),B();let x=i.get(A.idempotencyKey)??A,H=r.get(A.idempotencyKey)??I.cue;return{ok:!0,cue:dr(x,H,r.frame)}}return{play:O,step(g=1){let f=r.step(g);return P(f),B()},cancel(g){let f=i.get(g),I=r.cancel(g);return f&&(s.delete(g),t?.noteCueEnded(g),i.delete(g)),I},reset:D,snapshot(){return{frame:r.frame,reducedSensory:n,cues:[...i.values()].map(g=>dr(g,r.get(g.idempotencyKey),r.frame)).sort((g,f)=>g.name!==f.name?g.name<f.name?-1:1:g.idempotencyKey<f.idempotencyKey?-1:g.idempotencyKey>f.idempotencyKey?1:0),events:o.map(Ai)}},get(g){let f=i.get(g);if(f)return dr(f,r.get(g),r.frame)},dispose(){J?.(),D()},get frame(){return r.frame},get reducedSensory(){return n}}}function xi(e={}){let t=Js({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=Fl({broker:t,originFrame:e.originFrame,reducedSensory:e.reducedSensory});return{broker:t,timeline:n,unlock(){return t.unlock()},play(r){return n.play(r)},step(r){return n.step(r)},handleHostEvent(r){t.handleHostEvent(r)},snapshot(){return{...n.snapshot(),unlock:t.status(),muted:t.muted}},destroy(){n.dispose(),t.destroy()}}}var va=1,$l=["layer","mask","sprite"],Bl=["show","hide","replace","crossfade"],Hl=":incoming",ql="visual.layer.revealed",Sa="visual.layer.hidden",Wl="visual.layer.transition-started",Gl="visual.layer.transition-completed",ka="visual.layer.failed";var Kl="host.state.accepted";var jl="Visual layer controller has been destroyed",Ul=new Set($l),Jl=new Set(Bl);function zl(e){return typeof e=="string"&&Ul.has(e)}function Yl(e){return typeof e=="string"&&Jl.has(e)}function Xl(e){return`${e}${Hl}`}function Ql(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function Zl(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Xt(e){return JSON.parse(JSON.stringify(e))}function cr(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function ep(e){let t=cr(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function tp(e){if(!e||typeof e!="object")return;let t=e;if(!(typeof t.id!="string"||typeof t.ref!="string"||typeof t.code!="string"||typeof t.message!="string"))return t}function ze(e,t){if(t)return e.versions.find(n=>n.id===t)}function Ea(e){return e?{...e}:null}function Ti(e){if(!e?.compositor)throw new Error("createVisualLayerController: compositor is required");if(!e.layers?.length)throw new Error("createVisualLayerController: at least one layer is required");let t=e.compositor,n=e.preloader,r=!!e.reducedMotion,i=e.fallback??"keep-prior",o=kt({originFrame:e.originFrame,reducedMotion:r}),s=e.sceneId??null,a=!1,c=0,m=new Map,u=new Map,y=new Map,S=new Map,R=[],T=[],k=()=>{if(a)throw new Error(jl)};function P(h){R.push(h),e.dispatch&&e.dispatch({type:h.type,kind:h.type===ka?"diagnostic":"state",payload:h})}function B(h){T.push(h),P({type:ka,atFrame:h.atFrame,layerId:h.layerId,version:h.version,progress:0,code:h.code})}function J(h,v){y.set(h,v)}function D(h){let v=y.get(h);if(v)return v;if(n?.get(h))return"ready";let C=n?.getProgress().items[h];return C?.state==="failed"?"failed":C?.state==="ready"?"ready":"pending"}function O(h){let v=u.get(h);if(v)return v.kind==="canvas"?{kind:"canvas",canvas:v.canvas}:{kind:"image",image:v.image}}function g(h,v){let C=ze(h.declaration,v);return C?D(C.assetId)==="ready"&&!!O(C.assetId):!1}function f(h){return h.overrideVersion&&g(h,h.overrideVersion)?h.overrideVersion:h.committedVersion}function I(h,v){let C=ze(h.declaration,v);return C?Ea(S.get(C.assetId))??Ea(C.provenance)??null:null}function d(h,v=0){return o.get(h)?.progress??v}function l(h,v,C){try{t.layer(h)}catch{t.addLayer({id:h,order:v,visible:!1,opacity:0,pointerEvents:C.pointerEvents??"none",blend:C.blend,clip:C.clip??void 0,clearPolicy:C.clearPolicy})}}function b(h){try{t.setLayer(h.incomingLayerId,{visible:!1,opacity:0})}catch{}}function A(){for(let h of m.values()){let v=f(h),C=ze(h.declaration,v),N=h.transition,W=N?d(N.cueKey):0,Z=N?.kind==="crossfade"&&N.toVersion!==null&&g(h,N.toVersion);l(h.compositorLayerId,h.order,h);let X=h.visible,re=1;N?.kind==="hide"?(re=1-W,W>=1&&(X=!1)):N?.kind==="show"?(X=g(h,N.toVersion),re=X?N.durationFrames===0?1:W:0):Z&&(re=1-W);let ee=C?O(C.assetId):void 0;if(t.setLayer(h.compositorLayerId,{order:h.order,visible:X&&!!ee,opacity:re,blend:h.blend,clip:h.clip??void 0,pointerEvents:h.pointerEvents,clearPolicy:h.clearPolicy,source:ee}),Z&&N){let ge=ze(h.declaration,N.toVersion),G=ge?O(ge.assetId):void 0;if(G){try{t.layer(h.incomingLayerId)}catch{t.addLayer({id:h.incomingLayerId,order:h.order+1,visible:!1,opacity:0,pointerEvents:"none",blend:h.blend,clip:h.clip??void 0,clearPolicy:h.clearPolicy})}t.setLayer(h.incomingLayerId,{order:h.order+1,visible:!0,opacity:W,blend:h.blend,clip:h.clip??void 0,pointerEvents:"none",clearPolicy:h.clearPolicy,source:G});continue}}b(h)}}function F(h){let v=f(h);return{id:h.declaration.id,kind:h.kind,visible:h.visible&&!!(v&&g(h,v)),activeVersion:v,pendingVersion:h.pendingVersion,committedVersion:h.committedVersion,opacity:t.layer(h.compositorLayerId).opacity,order:h.order,provenance:I(h,v),overrideVersion:h.overrideVersion,transition:h.transition?{kind:h.transition.kind,progress:d(h.transition.cueKey),fromVersion:h.transition.fromVersion,toVersion:h.transition.toVersion,cueKey:h.transition.cueKey,startFrame:h.transition.startFrame,durationFrames:h.transition.durationFrames,delayFrames:h.transition.delayFrames,easing:h.transition.easing}:null}}function x(h,v,C){h.committedVersion=v,h.pendingVersion=null,h.transition=null,h.visible=C,A(),P({type:C?ql:Sa,atFrame:o.frame,layerId:h.declaration.id,version:v,progress:1})}function H(h){h.visible=!1,h.pendingVersion=null,h.transition=null,A(),P({type:Sa,atFrame:o.frame,layerId:h.declaration.id,version:h.committedVersion??void 0,progress:1})}function K(h,v,C,N){let W=h.fallback;h.transition=null,h.pendingVersion=null,W==="hide"?h.visible=!1:typeof W=="object"&&W.version&&g(h,W.version)&&(h.committedVersion=W.version,h.visible=!0),A(),B({code:N?"asset-failed":"missing-source",layerId:h.declaration.id,version:v??void 0,assetId:C,message:N?N.message:`visual layer "${h.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:N})}function $(h){let v=h.transition;if(v?.kind==="hide")return H(h),!0;let C=h.pendingVersion??v?.toVersion??null;if(!C)return h.transition=null,!0;if(!ze(h.declaration,C))return K(h,C),!0;if(g(h,C))return x(h,C,!0),!0;let N=ze(h.declaration,C).assetId;return D(N)==="failed"?(K(h,C,N),!0):(h.transition=null,h.pendingVersion=C,A(),!1)}function p(){for(let h of m.values())if(!h.transition&&h.pendingVersion){if(g(h,h.pendingVersion))x(h,h.pendingVersion,!0);else if(D(ze(h.declaration,h.pendingVersion)?.assetId??"")==="failed"){let v=ze(h.declaration,h.pendingVersion);K(h,h.pendingVersion,v?.assetId)}}for(let h of m.values())h.overrideVersion&&g(h,h.overrideVersion)&&h.committedVersion!==h.overrideVersion&&x(h,h.overrideVersion,!0)}function E(h,v){J(h,"failed");for(let C of m.values()){let N=C.declaration.versions.find(ee=>ee.assetId===h);if(!N)continue;let W=ze(C.declaration,C.pendingVersion),Z=ze(C.declaration,C.transition?.toVersion??null),X=ze(C.declaration,C.overrideVersion);if(W?.assetId===h||Z?.assetId===h||X?.assetId===h){C.transition&&o.cancel(C.transition.cueKey),X?.assetId===h&&(C.overrideVersion=null),K(C,N.id,h,v);continue}B({code:"asset-failed",layerId:C.declaration.id,version:N.id,assetId:h,message:v?.message??`asset "${h}" failed; prior frame kept`,atFrame:o.frame,failure:v}),A()}}function w(h){for(let v of h){let C=[...m.values()].find(N=>N.transition?.cueKey===v.idempotencyKey);if(!(!C||!C.transition))if(v.type===zt)P({type:Wl,atFrame:v.atFrame,layerId:C.declaration.id,version:C.transition.toVersion??void 0,kind:C.transition.kind,progress:v.progress}),A();else if(v.type===bn){let N=C.transition.kind,W=C.transition.toVersion??void 0;$(C),P({type:Gl,atFrame:v.atFrame,layerId:C.declaration.id,version:W,kind:N,progress:1})}else(v.type===Yt||v.type===xt)&&(C.transition=null,A())}}function M(){let h=R.slice(c).map(v=>Xt(v));return c=R.length,h}for(let h of e.layers){if(!h?.id)throw new Error("createVisualLayerController: layer id is required");if(m.has(h.id))throw new Error(`createVisualLayerController: duplicate layer id "${h.id}"`);if(!zl(h.kind))throw new Error(`createVisualLayerController: layer "${h.id}" kind is invalid`);if(!h.versions?.length)throw new Error(`createVisualLayerController: layer "${h.id}" needs versions`);let v=new Set;for(let re of h.versions){if(!re?.id||!re.assetId)throw new Error(`createVisualLayerController: layer "${h.id}" versions need id and assetId`);if(v.has(re.id))throw new Error(`createVisualLayerController: layer "${h.id}" duplicate version "${re.id}"`);v.add(re.id),re.provenance&&S.set(re.assetId,{...re.provenance})}if(h.initialVersion&&!v.has(h.initialVersion))throw new Error(`createVisualLayerController: layer "${h.id}" unknown initialVersion`);let C=h.compositorLayerId??h.id,N=h.incomingLayerId??Xl(C),W=h.order??0,Z=h.pointerEvents??(h.kind==="mask"?"none":"auto"),X={declaration:h,compositorLayerId:C,incomingLayerId:N,kind:h.kind,order:W,blend:h.blend??"source-over",clip:h.clip?{...h.clip}:null,pointerEvents:Z,clearPolicy:h.clearPolicy??"opaque",fallback:h.fallback??i,visible:!!h.initialVersion,committedVersion:h.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};m.set(h.id,X),l(C,W,X)}A();function L(h){if(k(),!h||typeof h!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(!h.layerId)return{ok:!1,reason:"invalid",detail:"layerId is required"};let v=m.get(h.layerId);if(!v)return{ok:!1,reason:"invalid",detail:`unknown layer "${h.layerId}"`};if(!Yl(h.kind))return{ok:!1,reason:"invalid",detail:"unsupported kind"};if(h.kind!=="hide"&&!h.toVersion)return{ok:!1,reason:"invalid",detail:"toVersion is required"};if(h.toVersion&&!ze(v.declaration,h.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${h.toVersion}"`};let C={name:h.name,idempotencyKey:h.idempotencyKey,startFrame:h.startFrame,durationFrames:h.durationFrames,delayFrames:h.delayFrames,easing:h.easing,repeat:h.repeat,reducedMotion:h.reducedMotion,onDuplicate:h.onDuplicate??"replace"},N=o.snapshot().events.length,W=o.play(C);if(!W.ok)return W;let Z=o.snapshot().events.slice(N);return v.pendingVersion=h.kind==="hide"?v.committedVersion:h.toVersion??null,v.transition={kind:h.kind,cueKey:h.idempotencyKey,fromVersion:h.fromVersion??v.committedVersion,toVersion:h.kind==="hide"?v.committedVersion:h.toVersion??null,startFrame:W.cue.startFrame,durationFrames:W.cue.durationFrames,delayFrames:W.cue.delayFrames,easing:W.cue.easing},w(Z),A(),M(),W}function q(h){let v=cr(h),C=typeof v?.sceneId=="string"?v.sceneId:void 0;if(e.sceneId&&C&&C!==e.sceneId)return;C&&(s=C);let N=typeof v?.layerId=="string"?v.layerId:typeof v?.overlayId=="string"?v.overlayId:void 0,W=typeof v?.version=="string"?v.version:void 0;if(N&&W){L({name:`visual:${N}:replace`,idempotencyKey:`visual:${N}:accepted`,layerId:N,kind:"replace",toVersion:W,durationFrames:2});return}for(let Z of e.onAccepted??[])L({name:`visual:${Z.layerId}:${Z.kind??"replace"}`,idempotencyKey:Z.idempotencyKey??`visual:${Z.layerId}:accepted`,layerId:Z.layerId,kind:Z.kind??"replace",toVersion:Z.toVersion,durationFrames:Z.durationFrames??2,delayFrames:Z.delayFrames,easing:Z.easing})}function _(){let h=[...m.values()].map(C=>{let N=F(C);return{id:C.declaration.id,kind:C.kind,visible:C.visible,committedVersion:C.committedVersion,pendingVersion:C.pendingVersion,activeVersion:N.activeVersion,opacity:N.opacity,order:C.order,overrideVersion:C.overrideVersion,provenance:N.provenance,fallback:C.fallback,transition:N.transition}}).sort((C,N)=>C.id<N.id?-1:C.id>N.id?1:0),v={};for(let[C,N]of[...y.entries()].sort(([W],[Z])=>W<Z?-1:W>Z?1:0))v[C]=N;return Xt({schemaVersion:va,frame:o.frame,sceneId:s,reducedMotion:r,layers:h,assets:v,events:R.map(C=>Xt(C)),diagnostics:T.map(C=>Xt(C))})}function U(h){k();let v=[],C=X=>{let re={code:"invalid-snapshot",layerId:"",message:X,atFrame:o.frame};return{ok:!1,errors:[...v,re]}},N=h;if(typeof h=="string")try{N=JSON.parse(h)}catch{return C("snapshot JSON is invalid")}if(!N||typeof N!="object"||Array.isArray(N))return C("snapshot must be an object");let W=N;if(W.schemaVersion!==va)return C("unsupported visual layer snapshot schema");if(typeof W.frame!="number"||!Number.isFinite(W.frame))return C("frame must be finite");if(!Array.isArray(W.layers))return C("layers must be an array");if(o=kt({originFrame:W.frame,reducedMotion:r}),s=typeof W.sceneId=="string"||W.sceneId===null?W.sceneId:s,R.length=0,T.length=0,c=0,Array.isArray(W.events)&&(R.push(...W.events.map(X=>Xt(X))),c=R.length),Array.isArray(W.diagnostics)&&T.push(...W.diagnostics.map(X=>Xt(X))),y.clear(),W.assets&&typeof W.assets=="object")for(let[X,re]of Object.entries(W.assets))(re==="ready"||re==="failed"||re==="pending")&&y.set(X,re);let Z=new Map(W.layers.map(X=>[X.id,X]));for(let X of m.values()){let re=Z.get(X.declaration.id);re&&(X.visible=!!re.visible,X.committedVersion=re.committedVersion??null,X.pendingVersion=re.pendingVersion??null,X.overrideVersion=re.overrideVersion??null,X.transition=null,re.transition&&o.play({name:`visual:${X.declaration.id}:${re.transition.kind}`,idempotencyKey:re.transition.cueKey,startFrame:re.transition.startFrame,durationFrames:re.transition.durationFrames,delayFrames:re.transition.delayFrames,easing:re.transition.easing,onDuplicate:"replace"}).ok&&(X.transition={kind:re.transition.kind,cueKey:re.transition.cueKey,fromVersion:re.transition.fromVersion,toVersion:re.transition.toVersion,startFrame:re.transition.startFrame,durationFrames:re.transition.durationFrames,delayFrames:re.transition.delayFrames,easing:re.transition.easing}))}return A(),{ok:!0,snapshot:_()}}return{registerSource(h,v){if(k(),typeof h!="string"||h.length===0)throw new Error("createVisualLayerController: assetId is required");if(v instanceof HTMLCanvasElement)u.set(h,{kind:"canvas",canvas:v});else if(v&&"data"in v&&"width"in v)u.set(h,{kind:"image",image:Zl(v)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");p(),A()},handleHostEvent(h){if(k(),!h||typeof h!="object")return;if(h.type===Kl){q(h.payload);return}let v=ep(h.payload);if(v){if(h.type===et){J(v,"ready");let N=cr(h.payload)?.resource;if(N&&typeof N=="object"&&"provenance"in N){let W=N.provenance;W&&S.set(v,{...W})}p(),A();return}if(h.type===Je){let C=cr(h.payload);E(v,tp(C?.failure))}}},override(h,v){k();let C=m.get(h);if(!C)throw new Error(`createVisualLayerController: unknown layer "${h}"`);if(v===null){C.overrideVersion=null,A();return}if(!ze(C.declaration,v))throw new Error(`createVisualLayerController: unknown version "${v}" on "${h}"`);if(C.overrideVersion=v,g(C,v)){C.transition&&o.cancel(C.transition.cueKey),x(C,v,!0);return}A()},play:L,step(h=1){k();let v=o.step(h);return w(v),p(),A(),M()},snapshot(){return k(),_()},restore:U,inspect(){return k(),A(),[...m.values()].map(F).sort((h,v)=>h.id<v.id?-1:h.id>v.id?1:0)},captureComposedFrame(){return k(),A(),t.captureComposedFrame()},destroy(){a||(a=!0,o.reset(),R.length=0,T.length=0)},get frame(){return o.frame},get sceneId(){return s},get compositor(){return t}}}var np=["loading","ready","error","unsupported"],rp=["keyboard","pointer","audio","assets","hostChannel"],ip=["image","audio","font","spritesheet"],op=["tone","midi"],Mi=["source-over","screen"],Ra=["transparent","opaque"],sp=["render","calculation"],vn=["audio","controller","network","persistence","fullscreen"],ap=new Set(np),Ca=new Set(rp),Ia=new Set(ip),wa=new Set(op),dp=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind","grants"]),cp=new Set(["minContractVersion","features"]),up=new Set(["kinds","declarations"]),lp=new Set(["id","kind"]),pp=new Set(["emit","subscribe","authoritative"]),Aa=new Set(["alpha","clearPolicy"]),Pa=new Set(["compositor","blend"]),xa=new Set(["refs"]),fp=new Set(["id","version"]),ur=/^[a-z0-9][a-z0-9.-]*$/i,Ta=new Set(Mi),Da=new Set(Ra),Ma=new Set(sp),Di=new Set(vn),mp=new Set(["contractVersion","features","integrations","managers","emit","subscribe","surface","layers","modules","kinds","grants"]);function ce(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Ye(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Xe(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(ce("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function gp(e){if(typeof e!="string"||e.length===0)return!1;let t=e.split(".");return t.some(n=>n.length===0)?!1:t.every(n=>n==="*"||/^[a-z0-9][a-z0-9-]*$/i.test(n))}function hp(e,t){let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function lr(e,t){for(let n of t)if(e===n||hp(n,e))return!0;return!1}function Qt(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function Oi(e,t,n){if(!Array.isArray(e))return{ok:!1,errors:[ce("invalid-field",`${t} must be an array`,t)]};let r=[],i=[];return e.forEach((o,s)=>{let a=`${t}[${s}]`;if(typeof o!="string"||o.length===0){r.push(ce("invalid-field",`${t} entries must be non-empty strings`,a));return}let c=n(o,a);c?r.push(c):i.push(o)}),r.length>0?{ok:!1,errors:r}:{ok:!0,values:i}}function Zt(e,t){return Oi(e,t,(n,r)=>gp(n)?void 0:ce("invalid-pattern",`invalid event pattern "${n}"`,r))}function tt(e,t,n,r,i){return Oi(e,t,(o,s)=>n.has(o)?void 0:ce(r,`invalid ${i} "${o}"`,s))}function Oa(e,t){return Oi(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:ce("invalid-feature",`invalid feature tag "${n}"`,r))}function Na(e,t){if(!Array.isArray(e))return{ok:!1,errors:[ce("invalid-module",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Ye(i)){n.push(ce("invalid-module","module ref must be an object",s));return}n.push(...Xe(i,fp,s)),(typeof i.id!="string"||i.id.length===0||!ur.test(i.id))&&n.push(ce("invalid-module",`invalid module id "${String(i.id)}"`,`${s}.id`)),(typeof i.version!="string"||i.version.length===0||!ur.test(i.version))&&n.push(ce("invalid-module",`invalid module version "${String(i.version)}"`,`${s}.version`)),typeof i.id=="string"&&ur.test(i.id)&&typeof i.version=="string"&&ur.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function yp(e){let t=new Set,n=[];for(let r of e){let i=`${r.id}@${r.version}`;t.has(i)||(t.add(i),n.push({id:r.id,version:r.version}))}return n}function bp(e){if(!Ye(e))return[ce("invalid-manifest","capability manifest must be a JSON object")];let t=[...Xe(e,dp,"")];if(e.version!==void 0&&e.version!==1&&t.push(ce("invalid-version","capability manifest version must be 1","version")),(typeof e.id!="string"||e.id.length===0)&&t.push(ce("invalid-id","id is required","id")),!Ye(e.runtime))t.push(ce("invalid-runtime","runtime is required","runtime"));else{t.push(...Xe(e.runtime,cp,"runtime"));let a=e.runtime.minContractVersion;(typeof a!="number"||!Number.isInteger(a)||a<1)&&t.push(ce("invalid-runtime","runtime.minContractVersion must be an integer >= 1","runtime.minContractVersion"));let c=Oa(e.runtime.features,"runtime.features");c.ok||t.push(...c.errors)}let n=tt(e.phases,"phases",ap,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=tt(e.managers,"managers",Ca,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!Ye(e.assets))t.push(ce("invalid-assets","assets is required","assets"));else{t.push(...Xe(e.assets,up,"assets"));let a=tt(e.assets.kinds,"assets.kinds",Ia,"invalid-asset-kind","asset kind");a.ok||t.push(...a.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((c,m)=>{let u=`assets.declarations[${m}]`;if(!Ye(c)){t.push(ce("invalid-assets","asset declaration must be an object",u));return}t.push(...Xe(c,lp,u)),(typeof c.id!="string"||c.id.length===0)&&t.push(ce("invalid-assets","asset declaration id is required",`${u}.id`)),(typeof c.kind!="string"||!Ia.has(c.kind))&&t.push(ce("invalid-asset-kind",`invalid asset kind "${String(c.kind)}"`,`${u}.kind`))}):t.push(ce("invalid-assets","assets.declarations must be an array","assets.declarations"))}let i=Zt(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=Zt(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!Ye(e.permissions))t.push(ce("invalid-permissions","permissions is required","permissions"));else{t.push(...Xe(e.permissions,pp,"permissions"));let a=Zt(e.permissions.emit,"permissions.emit");a.ok||t.push(...a.errors);let c=Zt(e.permissions.subscribe,"permissions.subscribe");c.ok||t.push(...c.errors),e.permissions.authoritative!==void 0&&typeof e.permissions.authoritative!="boolean"&&t.push(ce("invalid-permissions","permissions.authoritative must be a boolean","permissions.authoritative"))}let s=tt(e.integrations,"integrations",wa,"invalid-integration","integration");if(s.ok||t.push(...s.errors),e.surface!==void 0&&(Ye(e.surface)?(t.push(...Xe(e.surface,Aa,"surface")),e.surface.alpha!==void 0&&typeof e.surface.alpha!="boolean"&&t.push(ce("invalid-surface","surface.alpha must be a boolean","surface.alpha")),e.surface.clearPolicy!==void 0&&(typeof e.surface.clearPolicy!="string"||!Da.has(e.surface.clearPolicy))&&t.push(ce("invalid-clear-policy",`invalid clear policy "${String(e.surface.clearPolicy)}"`,"surface.clearPolicy"))):t.push(ce("invalid-surface","surface must be an object","surface"))),e.layers!==void 0){if(!Ye(e.layers))t.push(ce("invalid-layers","layers must be an object","layers"));else if(t.push(...Xe(e.layers,Pa,"layers")),e.layers.compositor!==void 0&&typeof e.layers.compositor!="boolean"&&t.push(ce("invalid-layers","layers.compositor must be a boolean","layers.compositor")),e.layers.blend!==void 0){let a=tt(e.layers.blend,"layers.blend",Ta,"invalid-blend","blend mode");a.ok||t.push(...a.errors)}}if(e.modules!==void 0){if(!Ye(e.modules))t.push(ce("invalid-module","modules must be an object","modules"));else if(t.push(...Xe(e.modules,xa,"modules")),e.modules.refs!==void 0){let a=Na(e.modules.refs,"modules.refs");a.ok||t.push(...a.errors)}}if(e.kind!==void 0&&(typeof e.kind!="string"||!Ma.has(e.kind))&&t.push(ce("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),e.grants!==void 0){let a=tt(e.grants,"grants",Di,"invalid-grant","grant");a.ok||t.push(...a.errors)}return t}function vp(e){let t=[];return e.emittedEvents.forEach((n,r)=>{lr(n,e.permissions.emit)||t.push(ce("undeclared-permission",`emitted event "${n}" is not covered by permissions.emit`,`emittedEvents[${r}]`))}),e.acceptedEvents.forEach((n,r)=>{lr(n,e.permissions.subscribe)||t.push(ce("undeclared-permission",`accepted event "${n}" is not covered by permissions.subscribe`,`acceptedEvents[${r}]`))}),t}function Sp(e){let t=Qt(e.assets.kinds),n=e.assets.declarations.map(o=>({id:o.id,kind:o.kind})),r={emit:[...e.permissions.emit],subscribe:[...e.permissions.subscribe]};e.permissions.authoritative===!0&&(r.authoritative=!0);let i={version:1,id:e.id,runtime:{minContractVersion:e.runtime.minContractVersion,features:[...e.runtime.features]},phases:Qt(e.phases),managers:Qt(e.managers),assets:{kinds:t,declarations:n},acceptedEvents:[...e.acceptedEvents],emittedEvents:[...e.emittedEvents],permissions:r,integrations:Qt(e.integrations)};if(e.surface){let o={};e.surface.alpha===!0&&(o.alpha=!0),e.surface.clearPolicy&&(o.clearPolicy=e.surface.clearPolicy),(o.alpha!==void 0||o.clearPolicy!==void 0)&&(i.surface=o)}if(e.layers){let o={};e.layers.compositor===!0&&(o.compositor=!0),e.layers.blend&&e.layers.blend.length>0&&(o.blend=Qt(e.layers.blend)),(o.compositor!==void 0||o.blend!==void 0)&&(i.layers=o)}if(e.modules?.refs&&e.modules.refs.length>0){let o=yp(e.modules.refs);o.length>0&&(i.modules={refs:o})}return e.kind==="calculation"&&(i.kind="calculation"),e.grants&&e.grants.length>0&&(i.grants=Qt(e.grants)),i}function Ni(e){let t=bp(e);if(t.length>0)return{ok:!1,errors:t};let n=Sp(e);return t.push(...vp(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function pr(e,t){let n=Ni(e),r=n.ok?[]:[...n.errors];if(!Ye(t))return{ok:!1,errors:[ce("invalid-host","host capabilities must be a JSON object")]};r.push(...Xe(t,mp,"host")),typeof t.contractVersion!="number"||!Number.isInteger(t.contractVersion)||t.contractVersion<1?r.push(ce("invalid-host","host.contractVersion must be an integer >= 1","host.contractVersion")):n.ok&&t.contractVersion<n.manifest.runtime.minContractVersion&&r.push(ce("unsupported-runtime",`host contract version ${t.contractVersion} is below required ${n.manifest.runtime.minContractVersion}`,"runtime.minContractVersion"));let i=Oa(t.features,"host.features");if(!i.ok)r.push(...i.errors);else if(n.ok){let a=new Set(i.values);n.manifest.runtime.features.forEach((c,m)=>{a.has(c)||r.push(ce("unsupported-feature",`host does not support required feature "${c}"`,`runtime.features[${m}]`))})}let o=tt(t.integrations,"host.integrations",wa,"invalid-integration","integration");if(!o.ok)r.push(...o.errors);else if(n.ok){let a=new Set(o.values);n.manifest.integrations.forEach((c,m)=>{a.has(c)||r.push(ce("missing-integration",`host does not provide required integration "${c}"`,`integrations[${m}]`))})}if(t.managers!==void 0){let a=tt(t.managers,"host.managers",Ca,"invalid-manager","manager");if(!a.ok)r.push(...a.errors);else if(n.ok){let c=new Set(a.values);n.manifest.managers.forEach((m,u)=>{c.has(m)||r.push(ce("missing-manager",`host does not provide required manager "${m}"`,`managers[${u}]`))})}}if(t.emit!==void 0){let a=Zt(t.emit,"host.emit");a.ok?n.ok&&n.manifest.permissions.emit.forEach((c,m)=>{lr(c,a.values)||r.push(ce("unknown-permission",`host does not allow emit permission "${c}"`,`permissions.emit[${m}]`))}):r.push(...a.errors)}if(t.subscribe!==void 0){let a=Zt(t.subscribe,"host.subscribe");a.ok?n.ok&&n.manifest.permissions.subscribe.forEach((c,m)=>{lr(c,a.values)||r.push(ce("unknown-permission",`host does not allow subscribe permission "${c}"`,`permissions.subscribe[${m}]`))}):r.push(...a.errors)}if(t.surface!==void 0&&(Ye(t.surface)?(r.push(...Xe(t.surface,Aa,"host.surface")),t.surface.alpha!==void 0&&typeof t.surface.alpha!="boolean"&&r.push(ce("invalid-host","host.surface.alpha must be a boolean","host.surface.alpha")),t.surface.clearPolicy!==void 0&&(Array.isArray(t.surface.clearPolicy)?t.surface.clearPolicy:[t.surface.clearPolicy]).forEach((c,m)=>{(typeof c!="string"||!Da.has(c))&&r.push(ce("invalid-clear-policy",`invalid clear policy "${String(c)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${m}]`:"host.surface.clearPolicy"))})):r.push(ce("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!Ye(t.layers))r.push(ce("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...Xe(t.layers,Pa,"host.layers")),t.layers.compositor!==void 0&&typeof t.layers.compositor!="boolean"&&r.push(ce("invalid-host","host.layers.compositor must be a boolean","host.layers.compositor")),t.layers.blend!==void 0){let a=tt(t.layers.blend,"host.layers.blend",Ta,"invalid-blend","blend mode");a.ok||r.push(...a.errors)}}let s;if(t.modules!==void 0)if(!Ye(t.modules))r.push(ce("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...Xe(t.modules,xa,"host.modules")),t.modules.refs!==void 0){let a=Na(t.modules.refs,"host.modules.refs");a.ok?s=a.values:r.push(...a.errors)}else s=[];if(n.ok&&n.manifest.surface){let a=n.manifest.surface,c=t.surface;a.alpha===!0&&c?.alpha!==!0&&r.push(ce("unsupported-surface","host does not provide an alpha-capable surface","surface.alpha")),a.clearPolicy&&((Array.isArray(c?.clearPolicy)?c.clearPolicy:c?.clearPolicy?[c.clearPolicy]:[]).includes(a.clearPolicy)||r.push(ce("unsupported-surface",`host does not provide clear policy "${a.clearPolicy}"`,"surface.clearPolicy")))}if(n.ok&&n.manifest.layers){let a=n.manifest.layers,c=t.layers;if(a.compositor===!0&&c?.compositor!==!0&&r.push(ce("unsupported-layer","host does not provide a compositor","layers.compositor")),a.blend){let m=new Set(c?.blend??[]);a.blend.forEach((u,y)=>{m.has(u)||r.push(ce("unsupported-layer",`host does not provide blend mode "${u}"`,`layers.blend[${y}]`))})}}if(n.ok&&n.manifest.modules?.refs){let a=t.modules===void 0?[]:s??[];n.manifest.modules.refs.forEach((c,m)=>{a.some(u=>u.id===c.id&&u.version===c.version)||r.push(ce("unsupported-module",`host does not provide required module "${c.id}@${c.version}"`,`modules.refs[${m}]`))})}if(n.ok&&n.manifest.grants&&n.manifest.grants.length>0){let a=t.grants===void 0?{ok:!0,values:[]}:tt(t.grants,"host.grants",Di,"invalid-grant","grant");if(!a.ok)r.push(...a.errors);else{let c=new Set(a.values);n.manifest.grants.forEach((m,u)=>{c.has(m)||r.push(ce("ungranted-capability",`host does not grant "${m}"`,`grants[${u}]`))})}}else if(t.grants!==void 0){let a=tt(t.grants,"host.grants",Di,"invalid-grant","grant");a.ok||r.push(...a.errors)}if(t.kinds!==void 0){let a=tt(t.kinds,"host.kinds",Ma,"invalid-kind","cart kind");if(!a.ok)r.push(...a.errors);else if(n.ok){let c=n.manifest.kind??"render";a.values.includes(c)||r.push(ce("unsupported-kind",`host does not support cart kind "${c}"`,"kind"))}}return r.length>0?{ok:!1,errors:r}:{ok:!0}}var $a=Mi;var kp="Compositor has been destroyed";function Ep(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function Ip(e){let t=e.trim().toLowerCase();if(t[0]!=="#")throw new Error(`createCompositor: host.color must be #rgb or #rrggbb, got "${e}"`);let n=t.slice(1);if(n.length===3)return{r:parseInt(n[0]+n[0],16),g:parseInt(n[1]+n[1],16),b:parseInt(n[2]+n[2],16),a:255};if(n.length===6)return{r:parseInt(n.slice(0,2),16),g:parseInt(n.slice(2,4),16),b:parseInt(n.slice(4,6),16),a:255};throw new Error(`createCompositor: host.color must be #rgb or #rrggbb, got "${e}"`)}function Rp(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Cp(e,t){if(e===void 0||e.kind==="participant")return{kind:"participant"};if(e.kind==="canvas"){if(!e.canvas)throw new Error(`createCompositor: layer "${t}" canvas source is required`);return{kind:"canvas",canvas:e.canvas}}if(e.kind==="image"){if(!e.image||!e.image.data)throw new Error(`createCompositor: layer "${t}" image source is required`);return{kind:"image",image:Rp(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function _i(e,t){if(!e.id)throw new Error("createCompositor: layer id is required");if(!Number.isFinite(e.order))throw new Error(`createCompositor: layer "${e.id}" order is required`);let n=e.blend??"source-over";if(n!=="source-over"&&n!=="screen")throw new Error(`createCompositor: layer "${e.id}" blend must be source-over or screen`);let r=e.pointerEvents??"auto";if(r!=="auto"&&r!=="none")throw new Error(`createCompositor: layer "${e.id}" pointerEvents must be auto or none`);let i=e.clearPolicy??t;if(i!=="transparent"&&i!=="opaque")throw new Error(`createCompositor: layer "${e.id}" clearPolicy is invalid`);let o=Cp(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:Ep(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function _a(e){return{id:e.id,order:e.order,visible:e.visible,opacity:e.opacity,blend:e.blend,clip:e.clip?{...e.clip}:null,pointerEvents:e.pointerEvents,clearPolicy:e.clearPolicy,sourceKind:e.source.kind}}function La(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function Li(e,t){return 255-Math.round((255-e)*(255-t)/255)}function wp(e,t,n,r,i,o,s,a){let c=o/255*s;if(c<=0)return;let m=e[t],u=e[t+1],y=e[t+2],S=e[t+3]/255,R=n,T=r,k=i;a==="screen"&&(R=Li(m,n),T=Li(u,r),k=Li(y,i));let P=c+S*(1-c);if(P<=0){e[t]=0,e[t+1]=0,e[t+2]=0,e[t+3]=0;return}e[t]=Math.round((R*c+m*S*(1-c))/P),e[t+1]=Math.round((T*c+u*S*(1-c))/P),e[t+2]=Math.round((k*c+y*S*(1-c))/P),e[t+3]=Math.round(P*255)}function Ap(e,t,n){if(e.width===t&&e.height===n)return{data:new Uint8ClampedArray(e.data),width:t,height:n,colorSpace:e.colorSpace??"srgb"};let r=new Uint8ClampedArray(t*n*4);for(let i=0;i<n;i++){let o=Math.min(e.height-1,Math.floor(i*e.height/n));for(let s=0;s<t;s++){let a=Math.min(e.width-1,Math.floor(s*e.width/t)),c=(o*e.width+a)*4,m=(i*t+s)*4;r[m]=e.data[c],r[m+1]=e.data[c+1],r[m+2]=e.data[c+2],r[m+3]=e.data[c+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function Pp(e,t){for(let n=0;n<e.length;n+=4)e[n]=t.r,e[n+1]=t.g,e[n+2]=t.b,e[n+3]=t.a}function Va(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function Fa(e){let t=e.getContext("2d");if(!t)throw new Error("createCompositor: layer canvas has no 2d context");return t.getImageData(0,0,e.width,e.height)}function fr(e,t){e&&(e.style.zIndex=String(t.order),e.style.pointerEvents=t.pointerEvents==="none"?"none":"auto",e.style.visibility=t.visible?"visible":"hidden")}function Ba(e){if(!e.layers.length)throw new Error("createCompositor: at least one layer is required");let t=new Set,n=e.clearPolicy??"transparent";if(n!=="transparent"&&n!=="opaque")throw new Error("createCompositor: clearPolicy must be transparent or opaque");let r=new Map;for(let f of e.layers){let I=_i(f,n);if(t.has(I.id))throw new Error(`createCompositor: duplicate layer id "${I.id}"`);t.add(I.id),r.set(I.id,I)}let i=e.group,o=e.dpr&&e.dpr>0?e.dpr:1,s=Math.max(1,(e.width??320)|0),a=Math.max(1,(e.height??180)|0),c=o,m=e.offscreen!==!1,u=!e.target;if(!m&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let y=e.target??document.createElement("canvas"),S=y.getContext("2d",{alpha:!0});if(!S)throw new Error("createCompositor: host canvas has no 2d context");let R=!1,T=()=>{if(R)throw new Error(kp)},k=()=>({width:Math.max(1,Math.round(s*c)),height:Math.max(1,Math.round(a*c))}),P=()=>{let f=k();y.width!==f.width&&(y.width=f.width),y.height!==f.height&&(y.height=f.height),y.style.width=`${s}px`,y.style.height=`${a}px`},B=()=>La([...r.values()]).map(_a),J=f=>{if(f.source.kind==="image")return f.source.image;if(f.source.kind==="canvas")try{return Fa(f.source.canvas)}catch{return}try{let d=i.participant(f.id).cart.canvas;return d?(fr(d,f),Fa(d)):void 0}catch{return}},D=(f,I,d)=>{if(f.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&f.fill(0),e.host?.image){let l=Ap(e.host.image,I,d);f.set(l.data);return}e.host?.color&&Pp(f,Ip(e.host.color))},O=()=>{let{width:f,height:I}=k();P();let d=S.createImageData(f,I);D(d.data,f,I);for(let l of La([...r.values()])){if(!l.visible||l.opacity<=0)continue;let b=J(l);if(!b)continue;let A=l.clearPolicy==="transparent",F=Math.min(f,b.width),x=Math.min(I,b.height);for(let H=0;H<x;H++)for(let K=0;K<F;K++){if(!Va(l.clip,K,H))continue;let $=(H*b.width+K)*4,p=b.data[$],E=b.data[$+1],w=b.data[$+2],M=b.data[$+3];A&&p===0&&E===0&&w===0||M<=0||wp(d.data,(H*f+K)*4,p,E,w,M,l.opacity,l.blend)}}return S.putImageData(d,0,0),d};P();for(let f of B())try{fr(i.participant(f.id).cart.canvas,f)}catch{}return{get canvas(){return y},get width(){return s},get height(){return a},get dpr(){return c},compose(){return T(),O()},captureComposedFrame(){T();let f=O();return{imageData:f,pngDataUrl:y.toDataURL("image/png"),width:f.width,height:f.height,declaredOrder:B()}},resize(f,I,d){T(),s=Math.max(1,f|0),a=Math.max(1,I|0),d!==void 0&&(c=d>0?d:1);let l=k();i.resize(l.width,l.height),P()},setLayer(f,I){T();let d=r.get(f);if(!d)throw new Error(`createCompositor: unknown layer "${f}"`);let l=_i({id:f,order:I.order??d.order,visible:I.visible??d.visible,opacity:I.opacity??d.opacity,blend:I.blend??d.blend,clip:I.clip===void 0?d.clip??void 0:I.clip,pointerEvents:I.pointerEvents??d.pointerEvents,clearPolicy:I.clearPolicy??d.clearPolicy,source:I.source??d.source},n);r.set(f,l);try{fr(i.participant(f).cart.canvas,l)}catch{}},addLayer(f){if(T(),r.has(f.id))throw new Error(`createCompositor: duplicate layer id "${f.id}"`);let I=_i(f,n);r.set(I.id,I);try{fr(i.participant(I.id).cart.canvas,I)}catch{}},layer(f){T();let I=r.get(f);if(!I)throw new Error(`createCompositor: unknown layer "${f}"`);return _a(I)},layers(){return T(),B()},pointerTarget(f,I){T();let d=f|0,l=I|0,b=[...B()].reverse();for(let A of b){if(!A.visible||A.pointerEvents==="none"||!Va(A.clip,d,l))continue;let F=r.get(A.id);if(F&&F.source.kind!=="participant")return A.id;try{i.participant(A.id)}catch{continue}return A.id}},unmountLayer(f){if(T(),!r.has(f))throw new Error(`createCompositor: unknown layer "${f}"`);r.delete(f);try{i.detach(f)}catch{}},inspect(){T();let f=B();return{viewport:{width:s,height:a,dpr:c},clearPolicy:n,layers:f,declaredOrder:f.map(I=>I.id)}},destroy(){R||(R=!0,u&&y.parentNode&&y.remove())}}}function Ha(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:s}=e,a=i/n,c=o/r,m=s==="contain"?Math.min(a,c):Math.max(a,c),u=n*m,y=r*m,S=(i-u)/2,R=(o-y)/2,T=mr(-S/u),k=mr(-R/y),P=mr(i/u),B=mr(o/y);return{mode:s,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:m,offsetX:S,offsetY:R,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x:T,y:k,width:Math.min(P,1-T),height:Math.min(B,1-k)}}}function xp(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function gr(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function Tp(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function Dp(e,t){return gr(Tp(e,t),t)}function Mp(e,t){let n=xp({x:e.x,y:e.y},t);return{x:n.x,y:n.y,width:e.width*t.contentWidth*t.scale,height:e.height*t.contentHeight*t.scale}}function qa(e,t,n,r){let o=(r?.space??"canvas")==="css"?gr(e,t):Dp(e,t);for(let s of n.regions)if(hr(s,o))return s}function Wa(e,t){let n=Op(e);if(n)return Mp(n,t)}function mr(e){return e<=0?0:e>=1?1:e}function Op(e){if(e.rect)return e.rect;if(!e.polygon||e.polygon.length===0)return;let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let o of e.polygon)t=Math.min(t,o.x),n=Math.min(n,o.y),r=Math.max(r,o.x),i=Math.max(i,o.y);return{x:t,y:n,width:r-t,height:i-n}}function hr(e,t){return e.polygon&&e.polygon.length>=3?Np(t,e.polygon):e.rect?t.x>=e.rect.x&&t.x<e.rect.x+e.rect.width&&t.y>=e.rect.y&&t.y<e.rect.y+e.rect.height:!1}function Np(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r,r+=1){let o=t[r],s=t[i];o.y>e.y!=s.y>e.y&&e.x<(s.x-o.x)*(e.y-o.y)/(s.y-o.y)+o.x&&(n=!n)}return n}var Ga=1,_p=["mask","polygon","rect","depth"],Lp=["pass-through","absorb","exclusive","depth-ordered"];var Vp=["idle","hover","focus","selected"],Fp="Semantic layer controller has been destroyed",gb=new Set(_p),$p=new Set(Lp),Bp=new Set($a);function Ka(e){return typeof e=="string"&&$p.has(e)}function Fi(e){return typeof e=="string"&&Bp.has(e)}function Qa(e){let t=[];return e.mask&&t.push("mask"),e.polygon&&e.polygon.length>=3&&t.push("polygon"),e.rect&&t.push("rect"),typeof e.depth=="number"&&Number.isFinite(e.depth)&&t.push("depth"),t}function ja(e){return e.selected?"selected":e.focus?"focus":e.hover?"hover":"idle"}function $i(e){return JSON.parse(JSON.stringify(e))}function Ua(){return{hover:!1,focus:!1,selected:!1}}function Vi(e,t){return{hover:t?.hover??e.hover,focus:t?.focus??e.focus,selected:t?.selected??e.selected}}function en(e){return $i(e)}function Sn(e){return $i(e??{})}function Ja(e,t){let n=e.visuals[t]??e.visuals.idle;return{opacity:n?.opacity??1,blend:n?.blend??e.blend,version:n?.version}}function Hp(e,t){let n=e.bounds??{x:0,y:0,width:1,height:1};if(t.x<n.x||t.x>=n.x+n.width||t.y<n.y||t.y>=n.y+n.height||!Number.isInteger(e.width)||!Number.isInteger(e.height)||e.width<1||e.height<1||e.alpha.length!==e.width*e.height)return!1;let r=(t.x-n.x)/n.width,i=(t.y-n.y)/n.height,o=Math.min(e.width-1,Math.max(0,Math.floor(r*e.width))),s=Math.min(e.height-1,Math.max(0,Math.floor(i*e.height)));return(e.alpha[s*e.width+o]??0)>.5}function qp(e,t){return e.mask?Hp(e.mask,t):e.polygon&&e.polygon.length>=3?hr({id:"",polygon:e.polygon},t):e.rect?hr({id:"",rect:e.rect},t):typeof e.depth=="number"&&Number.isFinite(e.depth)?t.x>=0&&t.x<=1&&t.y>=0&&t.y<=1:!1}function Wp(e,t){let n=e.hitTest==="exclusive"?1:0,r=t.hitTest==="exclusive"?1:0;if(n!==r)return r-n;let i=e.geometry.depth??0,o=t.geometry.depth??0;return i!==o?o-i:t.order-e.order}function Gp(e,t){if(!Number.isInteger(t.width)||!Number.isInteger(t.height)||t.width<1||t.height<1)throw new Error(`region "${e}" mask size is invalid`);if(!Array.isArray(t.alpha)||t.alpha.length!==t.width*t.height)throw new Error(`region "${e}" mask alpha length must be width*height`)}function za(e,t){if(!t||typeof t!="object")throw new Error(`region "${e}" geometry is required`);if(t.mask&&Gp(e,t.mask),t.polygon&&t.polygon.length>0&&t.polygon.length<3)throw new Error(`region "${e}" polygon needs 3+ points`);if(Qa(t).length===0)throw new Error(`region "${e}" needs mask, polygon, rect, or depth`)}function Ya(e,t){if(t!==void 0){if(!t||typeof t!="object")throw new Error(`region "${e}" visuals must be an object`);for(let n of Vp){let r=t[n];if(r&&r.blend!==void 0&&!Fi(r.blend))throw new Error(`region "${e}" ${n} blend is invalid`)}}}function Xa(e,t){return e instanceof Error?e.message:t}function Kp(e,t){try{return e.layer(t),!0}catch{return!1}}function Bi(e){if(!e?.regions?.length)throw new Error("createSemanticLayerController: at least one region is required");let t=e.compositor,n=e.visualLayers,r=e.originFrame??0,i=!1,o=new Map,s=()=>{if(i)throw new Error(Fp)};function a(k){let P=ja(k.state);return{id:k.declaration.id,geometryKinds:Qa(k.geometry),hitTest:k.hitTest,blend:k.blend,order:k.order,depth:k.geometry.depth??0,state:{...k.state},appearance:P,a11y:k.a11y?{...k.a11y}:null,visual:Ja(k,P)}}function c(k){let P=ja(k.state),B=Ja(k,P);if(k.visualLayerId&&n&&B.version&&n.override(k.visualLayerId,B.version),k.compositorLayerId&&t){if(!Kp(t,k.compositorLayerId))return;t.setLayer(k.compositorLayerId,{opacity:B.opacity,blend:B.blend,pointerEvents:k.hitTest==="pass-through"?"none":"auto"})}}function m(k){return{geometry:en(k.geometry),hitTest:k.hitTest,blend:k.blend,order:k.order,compositorLayerId:k.compositorLayerId,visualLayerId:k.visualLayerId,visuals:Sn(k.visuals),state:{...k.state},a11y:k.a11y?{...k.a11y}:null}}function u(k,P){k.geometry=en(P.geometry),k.hitTest=P.hitTest,k.blend=P.blend,k.order=P.order,k.compositorLayerId=P.compositorLayerId,k.visualLayerId=P.visualLayerId,k.visuals=Sn(P.visuals),k.state={...P.state},k.a11y=P.a11y?{...P.a11y}:null}for(let k of e.regions){if(!k?.id)throw new Error("createSemanticLayerController: region id is required");if(o.has(k.id))throw new Error(`createSemanticLayerController: duplicate region id "${k.id}"`);if(za(k.id,k.geometry),Ya(k.id,k.visuals),k.hitTest&&!Ka(k.hitTest))throw new Error(`createSemanticLayerController: region "${k.id}" hitTest is invalid`);if(k.blend&&!Fi(k.blend))throw new Error(`createSemanticLayerController: region "${k.id}" blend is invalid`);let P={declaration:k,geometry:en(k.geometry),hitTest:k.hitTest??"absorb",blend:k.blend??"source-over",order:k.order??0,compositorLayerId:k.compositorLayerId??null,visualLayerId:k.visualLayerId??null,visuals:Sn(k.visuals),state:Vi(Ua(),k.initialState),a11y:null};o.set(k.id,P),c(P)}function y(){return[...o.values()].map(a).sort((k,P)=>k.id<P.id?-1:k.id>P.id?1:0)}function S(k){let P=[...o.values()].filter(B=>B.hitTest!=="pass-through"&&qp(B.geometry,k));return P.sort(Wp),P[0]?.hitTest==="exclusive"?P.filter(B=>B.hitTest==="exclusive"):P[0]?.hitTest==="absorb"?[P[0]]:P}function R(){let k=[...o.values()].map(P=>({id:P.declaration.id,geometry:en(P.geometry),hitTest:P.hitTest,blend:P.blend,order:P.order,compositorLayerId:P.compositorLayerId,visualLayerId:P.visualLayerId,visuals:Sn(P.visuals),state:{...P.state},a11y:P.a11y?{...P.a11y}:null})).sort((P,B)=>P.id<B.id?-1:P.id>B.id?1:0);return $i({schemaVersion:Ga,frame:r,regions:k})}function T(k){s();let P=[],B=l=>({ok:!1,errors:[...P,l]}),J=k;if(typeof k=="string")try{J=JSON.parse(k)}catch{return B("snapshot JSON is invalid")}if(!J||typeof J!="object"||Array.isArray(J))return B("snapshot must be an object");let D=J;if(D.schemaVersion!==Ga)return B("unsupported semantic layer snapshot schema");if(typeof D.frame!="number"||!Number.isFinite(D.frame))return B("frame must be finite");if(!Array.isArray(D.regions))return B("regions must be an array");let O=D.regions,g=new Map;for(let l of O){if(!l||typeof l.id!="string"||l.id.length===0){P.push("region id is required");continue}g.has(l.id)&&P.push(`duplicate region "${l.id}"`),g.set(l.id,l),o.has(l.id)||P.push(`unknown region "${l.id}"`),Ka(l.hitTest)||P.push(`region "${l.id}" hitTest is invalid`),Fi(l.blend)||P.push(`region "${l.id}" blend is invalid`),(typeof l.order!="number"||!Number.isFinite(l.order))&&P.push(`region "${l.id}" order must be finite`);try{za(l.id,l.geometry),Ya(l.id,l.visuals)}catch(b){P.push(Xa(b,`region "${l.id}" is invalid`))}}for(let l of o.keys())g.has(l)||P.push(`missing region "${l}"`);if(P.length>0)return{ok:!1,errors:P};let f=r,I=new Map;for(let l of o.values())I.set(l.declaration.id,m(l));let d=()=>{r=f;for(let l of o.values()){let b=I.get(l.declaration.id);b&&u(l,b)}for(let l of o.values())c(l)};r=D.frame;for(let l of o.values()){let b=g.get(l.declaration.id);l.geometry=en(b.geometry),l.hitTest=b.hitTest,l.blend=b.blend,l.order=b.order,l.compositorLayerId=b.compositorLayerId??null,l.visualLayerId=b.visualLayerId??null,l.visuals=Sn(b.visuals),l.state=Vi(Ua(),b.state),l.a11y=b.a11y&&typeof b.a11y.name=="string"&&typeof b.a11y.role=="string"?{name:b.a11y.name,role:b.a11y.role}:null}try{for(let l of o.values())c(l)}catch(l){return d(),B(Xa(l,"visual layer apply failed"))}return{ok:!0,snapshot:R()}}return{list(){return s(),y()},inspect(){return s(),y()},inspectPublished(){return s(),y().map(k=>({id:k.id,geometryKinds:k.geometryKinds,a11y:k.a11y}))},get(k){s();let P=o.get(k);return P?a(P):void 0},geometryOf(k){s();let P=o.get(k);return P?en(P.geometry):void 0},setRegionState(k,P){s();let B=o.get(k);if(!B)throw new Error(`createSemanticLayerController: unknown region "${k}"`);let J={...B.state};B.state=Vi(B.state,P);try{c(B)}catch(D){throw B.state=J,D}},setRegionA11y(k,P){s();let B=o.get(k);if(!B)throw new Error(`createSemanticLayerController: unknown region "${k}"`);B.a11y=P?{name:P.name,role:P.role}:null},hitTest(k){s();let P=S(k);return P[0]?a(P[0]):void 0},hitTestAll(k){return s(),S(k).map(a)},snapshot(){return s(),R()},restore:T,destroy(){i||(i=!0,o.clear())},get frame(){return r}}}var jp=new Set(["string","number","boolean","object","array"]);function Qe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Up(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if(nr(t))return t}}function Jp(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function zp(e){let t=[];if(!e||typeof e!="object")return[Qe("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(Qe("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(Qe("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(Qe("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!jp.has(r.type))&&t.push(Qe("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function Yp(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"array":typeof e=="string"?"string":typeof e=="number"&&Number.isFinite(e)?"number":typeof e=="boolean"?"boolean":typeof e=="object"?"object":"other"}function Xp(e,t){if(t===void 0){let i=Object.entries(e.fields).filter(([,o])=>o.optional!==!0);return i.length===0?{ok:!0,payload:void 0}:{ok:!1,errors:i.map(([o])=>Qe("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[Qe("invalid-payload","payload must be a JSON object")]};let n=t,r=[];for(let[i,o]of Object.entries(e.fields)){if(!(i in n)||n[i]===void 0){o.optional!==!0&&r.push(Qe("missing-field",`payload is missing required field "${i}"`,i));continue}let s=Yp(n[i]);s!==o.type&&r.push(Qe("field-type",`payload.${i} expected ${o.type}, got ${s}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function Qp(e,t,n){let r=Jp(e);return{type:e,kind:t,payloadSchema:{version:n.version,fields:{...n.fields}},emitPattern:r,subscribePattern:r,toManifest(){let i={};for(let[o,s]of Object.entries(this.payloadSchema.fields))i[o]={type:s.type,optional:s.optional===!0};return{type:this.type,kind:this.kind,version:this.payloadSchema.version,fields:i,emitPattern:this.emitPattern,subscribePattern:this.subscribePattern}},validatePayload(i){return Xp(this.payloadSchema,i)}}}function Hi(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(Qe("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(Qe("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=Up(t);i?i!==e&&r.push(Qe("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(Qe("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(...zp(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:Qp(t,e,n)}}function Za(e,t){return Hi("intent",e,t)}function pe(e,t){return Hi("state",e,t)}function qe(e,t){return Hi("diagnostic",e,t)}var ed=1,Wi="presentation.sequence.state.requested",Gi="presentation.sequence.state.preloading",Ki="presentation.sequence.state.ready",ji="presentation.sequence.state.started",Ui="presentation.sequence.state.step-started",Ji="presentation.sequence.state.step-completed",zi="presentation.sequence.state.skipped",Yi="presentation.sequence.state.interrupted",nd="presentation.sequence.state.failed",Xi="presentation.sequence.state.completed",rd="presentation.sequence.diagnostic.lifecycle",Zp=[Wi,Gi,Ki,ji,Ui,Ji,zi,Yi,nd,Xi,rd],ef=["audio","caption","semantic-region","visual-layer","cue"],tf=["replace","queue","reject","ignore"],nf=["duration","immediate"],rf=["unavailable","failed","unauthorized","muted"],of=["requested","preloading","ready","playing","paused","skipped","interrupted","failed","completed"],sf=new Set(ef),af=new Set(tf),df=new Set(nf),cf=new Set(rf),uf=new Set(Zp),lf="Presentation sequence player has been destroyed";function se(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Te(e){return JSON.parse(JSON.stringify(e))}function De(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ie(e){return typeof e=="string"&&e.length>0}function qi(e,t,n){if(typeof e=="function"){n.push(se("callbacks-forbidden","authored sequences must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>qi(r,`${t}[${i}]`,n));return}if(De(e))for(let[r,i]of Object.entries(e))qi(i,t?`${t}.${r}`:r,n)}function tn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function at(){return{version:1,fields:{sequenceId:{type:"string"},invocationId:{type:"string"},idempotencyKey:{type:"string"},stepId:{type:"string",optional:!0},fallbackId:{type:"string",optional:!0},reason:{type:"string",optional:!0}}}}function dt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function pf(){return[dt(pe(Wi,at())),dt(pe(Gi,at())),dt(pe(Ki,at())),dt(pe(ji,at())),dt(pe(Ui,at())),dt(pe(Ji,at())),dt(pe(zi,at())),dt(pe(Yi,at())),dt(pe(nd,at())),dt(pe(Xi,at())),dt(qe(rd,at()))]}function ff(e){return typeof e=="string"&&uf.has(e)}function mf(e){if(e)return"timeline"in e?e.timeline:e}function gf(e,t,n){return n?!t||t==="skip"||t==="complete"?0:t.durationFrames:e}function hf(e,t){return(e.kind==="relative"||e.kind==="simultaneous"?e.delayFrames??0:0)+t}function yf(e,t,n){if(!De(e)||!Ie(e.kind)){n.push(se("invalid-timing","timing.kind is required",t));return}if(e.kind==="absolute"){tn(e.atFrame)||n.push(se("invalid-timing","timing.atFrame must be >= 0",t));return}if(e.kind==="relative"){e.afterStepId!==void 0&&!Ie(e.afterStepId)&&n.push(se("invalid-timing","timing.afterStepId must be a string",t)),e.delayFrames!==void 0&&!tn(e.delayFrames)&&n.push(se("invalid-timing","timing.delayFrames must be >= 0",t));return}if(e.kind==="simultaneous"){Ie(e.withStepId)||n.push(se("invalid-timing","timing.withStepId is required",t)),e.order!==void 0&&!tn(e.order)&&n.push(se("invalid-timing","timing.order must be >= 0",t)),e.delayFrames!==void 0&&!tn(e.delayFrames)&&n.push(se("invalid-timing","timing.delayFrames must be >= 0",t));return}n.push(se("invalid-timing",`unsupported timing.kind "${String(e.kind)}"`,t))}function bf(e,t,n,r){if(!De(e)||!Ie(e.kind)){r.push(se("invalid-effect","effect.kind is required",n));return}e.kind!==t&&r.push(se("kind-mismatch",`effect.kind "${e.kind}" must match track kind "${t}"`,n)),e.kind==="audio"&&!Ie(e.assetBinding)&&r.push(se("invalid-effect","assetBinding is required",n)),e.kind==="caption"&&(Ie(e.textBinding)||r.push(se("invalid-effect","textBinding is required",n)),typeof e.visible!="boolean"&&r.push(se("invalid-effect","visible must be boolean",n))),e.kind==="semantic-region"&&(Ie(e.regionBinding)||r.push(se("invalid-effect","regionBinding is required",n)),De(e.state)||r.push(se("invalid-effect","state is required",n))),e.kind==="visual-layer"&&(Ie(e.layerBinding)||r.push(se("invalid-effect","layerBinding is required",n)),e.transition!=="show"&&e.transition!=="hide"&&r.push(se("invalid-effect","transition must be show or hide",n))),e.kind==="cue"&&!Ie(e.name)&&r.push(se("invalid-effect","cue name is required",n))}function vf(e){let t=new Map;for(let n of e.tracks)for(let r of n.steps)t.set(r.id,{track:n,step:r});return t}function kn(e){let t=[];if(qi(e,"",t),!De(e))return{ok:!1,errors:[se("invalid-definition","sequence must be a JSON object")]};if(Ie(e.id)||t.push(se("invalid-id","id is required","id")),!Array.isArray(e.tracks)||e.tracks.length===0)return t.push(se("invalid-tracks","tracks must be a non-empty array","tracks")),{ok:!1,errors:t};let n=e.interruptionPolicy??"replace";af.has(String(n))||t.push(se("invalid-policy","unsupported interruptionPolicy","interruptionPolicy"));let r=new Set,i=new Set,o=[];e.tracks.forEach((u,y)=>{let S=`tracks[${y}]`;if(!De(u)){t.push(se("invalid-track","track must be an object",S));return}if(!Ie(u.id)){t.push(se("invalid-track","track id is required",`${S}.id`));return}if(i.has(u.id)&&t.push(se("duplicate-track",`duplicate track id "${u.id}"`,S)),i.add(u.id),!sf.has(String(u.kind))){t.push(se("invalid-kind","unsupported track kind",`${S}.kind`));return}if(!Array.isArray(u.steps)||u.steps.length===0){t.push(se("invalid-steps","track steps are required",`${S}.steps`));return}let R=[];u.steps.forEach((T,k)=>{let P=`${S}.steps[${k}]`;if(!De(T)){t.push(se("invalid-step","step must be an object",P));return}if(!Ie(T.id)){t.push(se("invalid-step","step id is required",`${P}.id`));return}r.has(T.id)&&t.push(se("duplicate-step",`duplicate step id "${T.id}"`,P)),r.add(T.id),tn(T.durationFrames)||t.push(se("invalid-duration","durationFrames must be >= 0",`${P}.durationFrames`)),T.delayFrames!==void 0&&!tn(T.delayFrames)&&t.push(se("invalid-delay","delayFrames must be >= 0",`${P}.delayFrames`)),T.completion!==void 0&&!df.has(String(T.completion))&&t.push(se("invalid-completion","unsupported completion rule",`${P}.completion`)),yf(T.timing,`${P}.timing`,t),bf(T.effect,String(u.kind),`${P}.effect`,t),R.push(Te(T))}),o.push({id:u.id,kind:u.kind,steps:R})});let s=[],a=new Set;e.fallbacks!==void 0&&(Array.isArray(e.fallbacks)?e.fallbacks.forEach((u,y)=>{let S=`fallbacks[${y}]`;if(!De(u)||!Ie(u.id)){t.push(se("invalid-fallback","fallback id is required",S));return}a.has(u.id)&&t.push(se("duplicate-fallback",`duplicate fallback id "${u.id}"`,S)),a.add(u.id);let R=u.when;if((!De(R)||R.capability!=="audio"||!cf.has(String(R.status)))&&t.push(se("invalid-fallback","unsupported fallback.when",`${S}.when`)),u.omitTrackIds!==void 0)if(!Array.isArray(u.omitTrackIds))t.push(se("invalid-fallback","omitTrackIds must be an array",S));else for(let T of u.omitTrackIds)i.has(String(T))||t.push(se("unknown-track",`omitTrackIds references unknown track "${String(T)}"`,S));s.push(Te(u))}):t.push(se("invalid-fallbacks","fallbacks must be an array","fallbacks")));let c={id:String(e.id??""),tracks:o,interruptionPolicy:n,fallbacks:s},m=vf(c);for(let{step:u}of m.values())u.timing.kind==="relative"&&u.timing.afterStepId&&(m.has(u.timing.afterStepId)||t.push(se("unknown-step",`afterStepId "${u.timing.afterStepId}" does not exist`,`steps.${u.id}`))),u.timing.kind==="simultaneous"&&!m.has(u.timing.withStepId)&&t.push(se("unknown-step",`withStepId "${u.timing.withStepId}" does not exist`,`steps.${u.id}`));return t.length>0?{ok:!1,errors:t}:{ok:!0,sequence:Te(c)}}function td(e,t,n,r){let i=[];for(let u of e.tracks)if(!t.has(u.id))for(let y of u.steps)i.push({track:u,step:y});let o=new Map(i.map(u=>[u.step.id,u])),s=new Map,a=new Set;function c(u){let y=s.get(u);if(y!==void 0)return y;let S=o.get(u);if(!S||a.has(u))return n;a.add(u);let R=hf(S.step.timing,S.step.delayFrames??0),T=n+R;if(S.step.timing.kind==="absolute")T=n+S.step.timing.atFrame+(S.step.delayFrames??0);else if(S.step.timing.kind==="relative"&&S.step.timing.afterStepId){let k=o.get(S.step.timing.afterStepId);if(k){let P=c(k.step.id),B=m(k.step);T=P+B+R}}else S.step.timing.kind==="simultaneous"&&(T=c(S.step.timing.withStepId)+R);return a.delete(u),s.set(u,T),T}function m(u){return u.completion==="immediate"?0:gf(u.durationFrames,u.reducedMotion,r)}return i.map(({track:u,step:y})=>{let S=c(y.id),R=m(y),T=y.timing.kind==="simultaneous"?y.timing.order??0:0;return{id:y.id,trackId:u.id,trackKind:u.kind,order:T,startFrame:S,durationFrames:R,endFrame:S+R,effect:Te(y.effect),restoreOnComplete:y.restoreOnComplete===!0,reducedSensory:y.reducedSensory??"keep"}}).sort(id)}function id(e,t){return e.startFrame!==t.startFrame?e.startFrame-t.startFrame:e.order!==t.order?e.order-t.order:e.trackId!==t.trackId?e.trackId<t.trackId?-1:1:e.id<t.id?-1:e.id>t.id?1:0}function Et(e,t){if(!t)return;let n=e?.[t];return Ie(n)?n:void 0}function Sf(e,t){let n=e.snapshot().events;for(let r=n.length-1;r>=0;r--){let i=n[r];if(i&&i.idempotencyKey===t&&i.type===Pi)return i.reason??"asset-failed"}}function kf(e,t,n,r){if(!t.tracks.some(s=>s.kind==="audio"))return"ok";if(!e)return"unavailable";let o=(r&&"broker"in r?r:void 0)?.broker;if(o?.muted)return"muted";for(let s of t.tracks)if(s.kind==="audio")for(let a of s.steps){if(a.effect.kind!=="audio")continue;let c=Et(n.assets,a.effect.assetBinding);if(!c)continue;let m=Et(n.channels,a.effect.channelBinding);if(o&&!o.isAuthorized(m)&&o.inspect().authorized.length>0)return"unauthorized";if(o?.assetStatus(c)==="failed")return"failed"}return"ok"}function Qi(e={}){let t=e.originFrame??0,n=!!e.reducedMotion,r=!!e.reducedSensory,i=e.semantic,o=e.visual,s=mf(e.audio),a=e.audio,c=new Map,m=kt({originFrame:t,reducedMotion:n}),u=t,y=!1,S=!1,R=null,T=null,k=[],P=new Map,B=[],J=new Map;for(let v of e.sequences??[]){let C=kn(v);C.ok&&c.set(C.sequence.id,C.sequence)}function D(){if(S)throw new Error(lf)}function O(v){B.push(Te(v))}function g(v,C,N){let W={type:C,atFrame:u,sequenceId:v.sequenceId,invocationId:v.invocationId,idempotencyKey:v.idempotencyKey};N?.stepId&&(W.stepId=N.stepId),v.selectedFallbackId&&(W.fallbackId=v.selectedFallbackId),N?.reason&&(W.reason=N.reason),O(W)}function f(v){let C=[...v.steps.values()].filter(W=>W.phase==="completed").map(W=>W.resolved.id).sort(),N=[...v.steps.values()].filter(W=>W.phase==="active").map(W=>W.resolved.id).sort();return{sequenceId:v.sequenceId,invocationId:v.invocationId,idempotencyKey:v.idempotencyKey,phase:v.phase,playhead:Math.max(0,u-v.startedAtFrame),startedAtFrame:v.startedAtFrame,completedStepIds:C,activeStepIds:N,selectedFallbackId:v.selectedFallbackId}}function I(v,C){return id(v.resolved,C.resolved)}function d(v,C){return`${v.invocationId}:${C}`}function l(v,C){return`${v.invocationId}:${C}`}function b(v){if(v.audioKey&&s?.cancel(v.audioKey),v.captionId){let C=P.get(v.captionId);C&&P.set(v.captionId,{...C,visible:!1})}if(v.regionId&&v.regionKeys&&i){let C={};for(let N of v.regionKeys)C[N]=!1;i.setRegionState(v.regionId,C)}v.visualLayerId&&o&&v.visualTransition==="hide"?o.play({name:`sequence:${v.visualLayerId}:restore`,idempotencyKey:`sequence:${v.visualLayerId}:restore:${u}`,layerId:v.visualLayerId,kind:"show",toVersion:v.visualVersion,durationFrames:0,onDuplicate:"replace"}):v.visualLayerId&&o&&v.visualTransition==="show"&&o.play({name:`sequence:${v.visualLayerId}:restore`,idempotencyKey:`sequence:${v.visualLayerId}:restore:${u}`,layerId:v.visualLayerId,kind:"hide",durationFrames:0,onDuplicate:"replace"}),v.cueKey&&m.cancel(v.cueKey)}function A(v,C){let{resolved:N}=C,W={},Z=r||N.reducedSensory==="skip-audio"||N.reducedSensory==="complete";if(N.effect.kind==="audio"){let X=Et(v.bindings.assets,N.effect.assetBinding);if(X&&s&&!Z){let re=l(v,N.id);s.play({name:N.id,idempotencyKey:re,assetId:X,channelId:Et(v.bindings.channels,N.effect.channelBinding),durationFrames:N.durationFrames,onDuplicate:"replace"}),W.audioKey=re,Sf(s,re)&&(C.applied=W,x(v,"failed"),s.cancel(re),W.audioKey=void 0)}}else if(N.effect.kind==="caption"){let X=Et(v.bindings.captions,N.effect.textBinding)??"",re=d(v,N.effect.textBinding);P.set(re,{id:re,text:X,visible:N.effect.visible}),W.captionId=re}else if(N.effect.kind==="semantic-region"){let X=Et(v.bindings.regions,N.effect.regionBinding);X&&i&&(i.setRegionState(X,N.effect.state),W.regionId=X,W.regionKeys=["hover","focus","selected"].filter(re=>N.effect.kind==="semantic-region"&&N.effect.state[re]!==void 0))}else if(N.effect.kind==="visual-layer"){let X=Et(v.bindings.layers,N.effect.layerBinding),re=Et(v.bindings.versions,N.effect.versionBinding);X&&o&&(o.play({name:`sequence:${N.id}`,idempotencyKey:l(v,N.id),layerId:X,kind:N.effect.transition,toVersion:N.effect.transition==="hide"?void 0:re,durationFrames:N.durationFrames,onDuplicate:"replace"}),W.visualLayerId=X,W.visualVersion=re??o.inspect().find(ee=>ee.id===X)?.committedVersion??void 0,W.visualTransition=N.effect.transition)}else if(N.effect.kind==="cue"){let X=l(v,N.id);m.play({name:N.effect.name,idempotencyKey:X,durationFrames:N.durationFrames,easing:N.effect.easing,onDuplicate:"replace"}),W.cueKey=X}C.applied=W}function F(v,C,N){if(C.phase==="active"){if(N){C.applied&&b(C.applied),C.phase="skipped";return}C.resolved.restoreOnComplete&&C.applied?b(C.applied):C.applied?.audioKey&&C.resolved.effect.kind,C.phase="completed",g(v,Ji,{stepId:C.resolved.id})}}function x(v,C){let N=c.get(v.sequenceId);if(!N)return!1;let W=(N.fallbacks??[]).find(X=>X.when.capability==="audio"&&X.when.status===C);if(!W)return!1;if(v.selectedFallbackId===W.id)return!0;v.selectedFallbackId=W.id;let Z=new Set(W.omitTrackIds??[]);for(let X of v.steps.values())Z.has(X.resolved.trackId)&&(X.phase==="pending"?X.phase="skipped":X.phase==="active"&&F(v,X,!0));return!0}function H(v){let C=[...v.steps.values()].filter(N=>N.phase==="pending"&&N.resolved.startFrame<=u).sort(I);for(let N of C)N.phase="active",g(v,Ui,{stepId:N.resolved.id}),A(v,N),N.resolved.durationFrames===0&&N.phase==="active"&&F(v,N,!1)}function K(v){let C=[...v.steps.values()].filter(N=>N.phase==="active"&&u>=N.resolved.endFrame).sort(I);for(let N of C)F(v,N,!1)}function $(v){return v.phase==="playing"||v.phase==="paused"||v.phase==="ready"||v.phase==="preloading"||v.phase==="requested"}function p(v){!$(v)||[...v.steps.values()].some(N=>N.phase==="pending"||N.phase==="active")||(v.phase="completed",v.nextAvailable=!0,g(v,Xi),R===v&&(R=null,y=!1),q())}function E(v,C){for(let N of[...v.steps.values()].sort(I))N.phase==="active"?F(v,N,!0):N.phase==="pending"&&(N.phase="skipped")}function w(v,C,N,W,Z=u){let X=td(v,W,Z,n),re=new Map;for(let ee of X)re.set(ee.id,{resolved:ee,phase:"pending",applied:null});return{sequenceId:v.id,invocationId:C.invocationId,idempotencyKey:C.idempotencyKey??C.invocationId,bindings:Te(C.bindings??{}),interruptionPolicy:v.interruptionPolicy??"replace",selectedFallbackId:N,phase:"requested",startedAtFrame:u,steps:re,nextAvailable:!1}}function M(v,C){if(!Ie(C.invocationId))return{ok:!1,reason:"invalid",detail:"invocationId is required"};let N=C.idempotencyKey??C.invocationId;if(J.get(N)&&R&&R.idempotencyKey===N)return{ok:!0,invocation:f(R)};let Z=C.bindings??{};O({type:Wi,atFrame:u,sequenceId:v.id,invocationId:C.invocationId,idempotencyKey:N});let X={sequenceId:v.id,invocationId:C.invocationId,idempotencyKey:N,bindings:Te(Z),interruptionPolicy:v.interruptionPolicy??"replace",selectedFallbackId:null,phase:"preloading",startedAtFrame:u,steps:new Map,nextAvailable:!1};g(X,Gi);let ee=kf(s,v,Z,a),ge=null,G=new Set;if(ee!=="ok"){let ae=(v.fallbacks??[]).find(V=>V.when.capability==="audio"&&V.when.status===ee);if(ae){ge=ae.id;for(let V of ae.omitTrackIds??[])G.add(V)}else if(ee==="unavailable"||ee==="failed")for(let V of v.tracks)V.kind==="audio"&&G.add(V.id)}if(r)for(let ae of v.tracks)ae.kind==="audio"&&G.add(ae.id);let z=w(v,{...C,idempotencyKey:N},ge,G);return z.phase="ready",g(z,Ki),z.phase="playing",g(z,ji),R=z,T={sequenceId:v.id,options:{...C,idempotencyKey:N}},J.set(N,z.invocationId),K(z),H(z),p(z),{ok:!0,invocation:f(z)}}function L(v){if(!R||!$(R))return;let C=R;E(C,!0),C.phase="interrupted",C.nextAvailable=!0,g(C,Yi,{reason:v}),R=null,y=!1}function q(){if(R||y)return;let v=k.shift();if(!v)return;let C=c.get(v.sequenceId);C&&M(C,v.options)}function _(v,C){let N=new Set;if(C){let W=(v.fallbacks??[]).find(Z=>Z.id===C);for(let Z of W?.omitTrackIds??[])N.add(Z)}return td(v,N,t,n).map(W=>({sequenceId:v.id,stepId:W.id,trackId:W.trackId,kind:W.trackKind,startFrame:W.startFrame,durationFrames:W.durationFrames,order:W.order,effect:Te(W.effect)}))}function U(){return Te({schemaVersion:ed,frame:u,reducedMotion:n,reducedSensory:r,paused:y,active:R?f(R):null,queue:k.map(v=>({sequenceId:v.sequenceId,invocationId:v.options.invocationId,idempotencyKey:v.options.idempotencyKey??v.options.invocationId,bindings:Te(v.options.bindings??{})})),captions:[...P.values()].sort((v,C)=>v.id<C.id?-1:1),events:B.map(v=>Te(v)),bindings:R?Te(R.bindings):null})}function h(v){for(let C of[...v.steps.values()].sort(I)){if(C.phase!=="active")continue;let N=Math.max(0,C.resolved.endFrame-u);C.resolved={...C.resolved,durationFrames:N,endFrame:u+N},A(v,C)}}return{define(v){D();let C=kn(v);return C.ok&&c.set(C.sequence.id,C.sequence),C},playSequence(v,C){D();let N=c.get(v);if(!N)return{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${v}"`};let W=C.idempotencyKey??C.invocationId;if(R&&$(R)&&R.idempotencyKey===W)return{ok:!0,invocation:f(R)};if(R&&$(R)){let Z=R.interruptionPolicy;if(Z==="reject")return{ok:!1,reason:"busy",detail:"sequence is already playing"};if(Z==="ignore")return{ok:!0,invocation:f(R)};if(Z==="queue")return k.push({sequenceId:v,options:{...C,idempotencyKey:W}}),{ok:!0,invocation:{sequenceId:v,invocationId:C.invocationId,idempotencyKey:W,phase:"requested",playhead:0,startedAtFrame:u,completedStepIds:[],activeStepIds:[],selectedFallbackId:null}};L("replace")}return M(N,{...C,idempotencyKey:W})},skip(v){if(D(),!R||!$(R)||v&&R.invocationId!==v)return!1;let C=R;return E(C,!0),C.phase="skipped",C.nextAvailable=!0,g(C,zi),R=null,y=!1,q(),!0},replay(v){D();let C=R&&$(R)?R:null,N=C?{sequenceId:C.sequenceId,options:{invocationId:C.invocationId,idempotencyKey:C.idempotencyKey,bindings:Te(C.bindings)}}:T;if(!N)return{ok:!1,reason:"invalid",detail:"no sequence to replay"};if(v&&N.options.invocationId!==v)return{ok:!1,reason:"invalid",detail:"unknown invocation"};let W=c.get(N.sequenceId);return W?(J.delete(N.options.idempotencyKey??N.options.invocationId),C&&(E(C,!0),R=null,y=!1),M(W,N.options)):{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${N.sequenceId}"`}},pause(){return D(),!R||R.phase!=="playing"?!1:(y=!0,R.phase="paused",!0)},resume(){return D(),!R||R.phase!=="paused"?!1:(y=!1,R.phase="playing",!0)},cancel(v){return D(),!R||!$(R)||v&&R.invocationId!==v?!1:(L("cancel"),q(),!0)},step(v=1){D();let C=Number.isFinite(v)?Math.max(0,Math.floor(v)):0,N=B.length;if(y)return[];for(let W=0;W<C;W++)u+=1,m.step(1),s?.step(1),o?.step(1),R&&$(R)?(K(R),H(R),p(R)):q();return B.slice(N).map(W=>Te(W))},snapshot(){return D(),U()},restore(v){D();let C={frame:u,paused:y,active:R,queue:k.slice(),captions:new Map(P),events:B.slice(),seenKeys:new Map(J),presentation:m},N=ee=>{u=C.frame,y=C.paused,R=C.active,k.length=0,k.push(...C.queue),P.clear();for(let[ge,G]of C.captions)P.set(ge,G);B.length=0,B.push(...C.events),J.clear();for(let[ge,G]of C.seenKeys)J.set(ge,G);return m=C.presentation,{ok:!1,errors:ee}},W=v;if(typeof v=="string")try{W=JSON.parse(v)}catch{return N([se("invalid-json","snapshot JSON is invalid")])}if(!De(W))return N([se("invalid-snapshot","snapshot must be a JSON object")]);let Z=[];W.schemaVersion!==ed&&Z.push(se("unsupported-schema","unsupported presentation sequence snapshot schema")),(typeof W.frame!="number"||!Number.isFinite(W.frame))&&Z.push(se("invalid-snapshot","frame must be finite","frame"));let X=W.active;if(X!=null&&(!De(X)||!Ie(X.sequenceId)?Z.push(se("invalid-snapshot","active.sequenceId is required","active")):c.has(X.sequenceId)||Z.push(se("unknown-sequence",`unknown sequence "${X.sequenceId}"`,"active.sequenceId"))),W.queue!==void 0&&(Array.isArray(W.queue)?W.queue.forEach((ee,ge)=>{let G=`queue[${ge}]`;if(!De(ee)||!Ie(ee.sequenceId)){Z.push(se("invalid-snapshot","queue item sequenceId is required",G));return}c.has(ee.sequenceId)||Z.push(se("unknown-sequence",`unknown sequence "${ee.sequenceId}"`,G)),Ie(ee.invocationId)||Z.push(se("invalid-snapshot","queue item invocationId is required",G))}):Z.push(se("invalid-snapshot","queue must be an array","queue"))),Z.length>0)return N(Z);let re=W.frame;if(typeof re!="number"||!Number.isFinite(re))return N([se("invalid-snapshot","frame must be finite","frame")]);try{if(R&&$(R)&&E(R,!0),P.clear(),k.length=0,B.length=0,J.clear(),y=W.paused===!0,u=re,m=kt({originFrame:u,reducedMotion:n}),Array.isArray(W.events))for(let ee of W.events)De(ee)&&ff(ee.type)&&B.push(Te(ee));if(Array.isArray(W.captions))for(let ee of W.captions)De(ee)&&Ie(ee.id)&&P.set(ee.id,{id:ee.id,text:typeof ee.text=="string"?ee.text:"",visible:ee.visible===!0});if(Array.isArray(W.queue))for(let ee of W.queue)!De(ee)||!Ie(ee.sequenceId)||!Ie(ee.invocationId)||c.has(ee.sequenceId)&&k.push({sequenceId:ee.sequenceId,options:{invocationId:ee.invocationId,idempotencyKey:Ie(ee.idempotencyKey)?ee.idempotencyKey:ee.invocationId,bindings:De(ee.bindings)?Te(ee.bindings):{}}});if(R=null,De(X)&&Ie(X.sequenceId)){let ee=c.get(X.sequenceId),ge=of.includes(X.phase)?X.phase:"playing";if(ge==="skipped"||ge==="completed"||ge==="interrupted"||ge==="failed"){let G=typeof X.startedAtFrame=="number"?X.startedAtFrame:t,z=w(ee,{invocationId:String(X.invocationId),idempotencyKey:String(X.idempotencyKey??X.invocationId),bindings:De(W.bindings)?Te(W.bindings):{}},Ie(X.selectedFallbackId)?X.selectedFallbackId:null,new Set(ge==="skipped"?ee.tracks.map(ae=>ae.id):[]),G);z.phase=ge,z.startedAtFrame=G;for(let ae of z.steps.values())ae.phase="skipped";z.nextAvailable=!0,R=null,J.set(z.idempotencyKey,z.invocationId)}else{let G=new Set,z=Ie(X.selectedFallbackId)?X.selectedFallbackId:null;if(z){let Y=(ee.fallbacks??[]).find(Q=>Q.id===z);for(let Q of Y?.omitTrackIds??[])G.add(Q)}let ae=w(ee,{invocationId:String(X.invocationId),idempotencyKey:String(X.idempotencyKey??X.invocationId),bindings:De(W.bindings)?Te(W.bindings):{}},z,G,typeof X.startedAtFrame=="number"?X.startedAtFrame:t);ae.phase=y?"paused":"playing",ae.startedAtFrame=typeof X.startedAtFrame=="number"?X.startedAtFrame:t;let V=new Set(Array.isArray(X.completedStepIds)?X.completedStepIds.filter(Y=>typeof Y=="string"):[]),j=new Set(Array.isArray(X.activeStepIds)?X.activeStepIds.filter(Y=>typeof Y=="string"):[]);for(let Y of ae.steps.values())V.has(Y.resolved.id)?Y.phase="completed":j.has(Y.resolved.id)||Y.resolved.startFrame<=u?Y.resolved.endFrame<=u?Y.phase="completed":Y.phase="active":Y.phase="pending";R=ae,J.set(ae.idempotencyKey,ae.invocationId),h(ae)}}return{ok:!0,snapshot:U()}}catch(ee){return N([se("restore-failed",ee instanceof Error?ee.message:String(ee))])}},inspect(){D();let v=R?c.get(R.sequenceId):void 0;return{frame:u,paused:y,reducedMotion:n,reducedSensory:r,active:R?f(R):null,queue:k.map(C=>({sequenceId:C.sequenceId,invocationId:C.options.invocationId,idempotencyKey:C.options.idempotencyKey??C.options.invocationId,phase:"requested",playhead:0,startedAtFrame:u,completedStepIds:[],activeStepIds:[],selectedFallbackId:null})),captions:[...P.values()].sort((C,N)=>C.id<N.id?-1:1),cueIntent:v?_(v,R?.selectedFallbackId??void 0):[]}},inspectCueIntent(v,C){D();let N=c.get(v);return N?_(N,C?.fallbackId):[]},get(v){D();let C=c.get(v);return C?Te(C):void 0},destroy(){S||(R&&$(R)&&E(R,!0),S=!0,R=null,k.length=0,P.clear(),B.length=0)},get frame(){return u},get reducedMotion(){return n},get reducedSensory(){return r}}}var no=1,Zi=1,Er="presentation.binding.state.applied",vr="presentation.binding.state.rejected",Sr="presentation.binding.diagnostic.lifecycle",Ef=[Er,vr,Sr],If=["visual-layer","presence","prop","semantic-region","hotspot","sequence","asset"],Rf=["invalid-manifest","invalid-schema","invalid-version","invalid-id","unknown-field","unknown-resource","unknown-selector","duplicate-id","duplicate-priority","uncovered-default","impossible-target","callbacks-forbidden","invalid-predicate","invalid-projection","invalid-snapshot","destroyed"],Cf=new Set(If),wb=new Set(Ef),Ab=new Set(Rf),wf="Presentation binding runtime has been destroyed",ro=/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/,Af=new Set(["show","hide","replace"]),Pf=new Set(["id","schemaVersion","bindings","defaults","resources"]),xf=new Set(["id","priority","when","targets"]),Tf=new Set(["layers","versions","regions","sequences","hotspots","entities","props","assets"]),Df=new Set(["labels","reducedSensory","reducedMotion"]);function oe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function We(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Re(e){return typeof e=="string"&&e.length>0}function Me(e){return JSON.parse(JSON.stringify(e))}function kr(e,t,n){if(typeof e=="function"){n.push(oe("callbacks-forbidden","authored bindings must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>kr(r,`${t}[${i}]`,n));return}if(We(e))for(let[r,i]of Object.entries(e))kr(i,t?`${t}.${r}`:r,n)}function _e(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(oe("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function od(e){return e===null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function eo(){return{version:1,fields:{manifestId:{type:"string"},revision:{type:"string",optional:!0},selectedBindingIds:{type:"array",optional:!0},reason:{type:"string",optional:!0},usedFallback:{type:"boolean",optional:!0}}}}function to(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Mf(){return[to(pe(Er,eo())),to(pe(vr,eo())),to(qe(Sr,eo()))]}function It(e){switch(e.kind){case"visual-layer":return`visual-layer:${e.layerId}`;case"presence":return`presence:${e.entityId}`;case"prop":return`prop:${e.propId}`;case"semantic-region":return`semantic-region:${e.regionId}`;case"hotspot":return`hotspot:${e.hotspotId}`;case"sequence":return`sequence:${e.sequenceId}`;case"asset":return`asset:${e.bindingId}`}}function Of(e){if(e==null)return"missing";if(!We(e))return"invalid";let t=[];if(kr(e,"",t),t.length>0)return"invalid";try{return Me(e)}catch{return"invalid"}}function Nf(e,t){if(!ro.test(t))return{found:!1,value:void 0};let n=e;for(let r of t.split(".")){if(!We(n)||!Object.prototype.hasOwnProperty.call(n,r))return{found:!1,value:void 0};n=n[r]}return{found:!0,value:n}}function _f(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="function"?n:void 0}function yr(e,t,n){if("all"in e){for(let i of e.all){let o=yr(i,t,n);if(!o.ok)return o}return{ok:!0}}if("any"in e){let i={ok:!1,detail:"no alternative matched"};for(let o of e.any){let s=yr(o,t,n);if(s.ok)return s;i=s}return i}if("not"in e){let i=yr(e.not,t,n);return{ok:!i.ok,detail:i.ok?"negation failed":void 0}}if("selector"in e){let i=_f(n,e.selector);if(!i)return{ok:!1,detail:`unknown selector "${e.selector}"`};try{return{ok:!!i(t)}}catch(o){return{ok:!1,detail:o instanceof Error?o.message:"selector threw"}}}let r=Nf(t,e.path);return"present"in e?{ok:(r.found&&r.value!==null&&r.value!==void 0)===e.present}:"neq"in e?r.found?{ok:r.value!==e.neq}:{ok:!0,detail:"path missing"}:r.found?{ok:r.value===e.eq}:{ok:!1,detail:`missing path "${e.path}"`}}function br(e,t,n){if(!We(e)){n.push(oe("invalid-predicate","predicate must be an object",t));return}if("all"in e||"any"in e||"not"in e){if("all"in e){if(_e(e,new Set(["all"]),t,n),!Array.isArray(e.all)||e.all.length===0){n.push(oe("invalid-predicate","all requires a non-empty array",`${t}.all`));return}return{all:e.all.map((a,c)=>br(a,`${t}.all[${c}]`,n)).filter(a=>!!a)}}if("any"in e){if(_e(e,new Set(["any"]),t,n),!Array.isArray(e.any)||e.any.length===0){n.push(oe("invalid-predicate","any requires a non-empty array",`${t}.any`));return}return{any:e.any.map((a,c)=>br(a,`${t}.any[${c}]`,n)).filter(a=>!!a)}}_e(e,new Set(["not"]),t,n);let o=br(e.not,`${t}.not`,n);return o?{not:o}:void 0}if("selector"in e){if(_e(e,new Set(["selector"]),t,n),!Re(e.selector)){n.push(oe("invalid-predicate","selector is required",`${t}.selector`));return}return{selector:e.selector}}if(_e(e,new Set(["path","eq","neq","present"]),t,n),(!Re(e.path)||!ro.test(e.path))&&n.push(oe("invalid-predicate","path must be a dotted identifier",`${t}.path`)),[e.eq!==void 0,e.neq!==void 0,e.present!==void 0].filter(Boolean).length!==1){n.push(oe("invalid-predicate","predicate needs exactly one of eq, neq, or present",t));return}if(!(!Re(e.path)||!ro.test(e.path))){if(e.present!==void 0){if(typeof e.present!="boolean"){n.push(oe("invalid-predicate","present must be a boolean",`${t}.present`));return}return{path:e.path,present:e.present}}if(e.neq!==void 0){if(!od(e.neq)){n.push(oe("invalid-predicate","neq must be a JSON primitive",`${t}.neq`));return}return{path:e.path,neq:e.neq}}if(!od(e.eq)){n.push(oe("invalid-predicate","eq must be a JSON primitive",`${t}.eq`));return}return{path:e.path,eq:e.eq}}}function Lf(e,t,n){if(e===void 0)return;if(!We(e)){n.push(oe("impossible-target","region state must be an object",t));return}_e(e,new Set(["hover","focus","selected"]),t,n);let r={};for(let i of["hover","focus","selected"]){let o=e[i];if(o!==void 0){if(typeof o!="boolean"){n.push(oe("impossible-target",`${i} must be a boolean`,`${t}.${i}`));continue}r[i]=o}}return r}function io(e,t,n,r){if(!We(e)){n.push(oe("impossible-target","target must be an object",t));return}if(!Cf.has(String(e.kind))){n.push(oe("impossible-target",`unsupported target kind "${String(e.kind)}"`,`${t}.kind`));return}let i=e.kind;if(i==="visual-layer"){if(_e(e,new Set(["kind","layerId","version","transition"]),t,n),!Re(e.layerId)){n.push(oe("impossible-target","layerId is required",`${t}.layerId`));return}if(!Re(e.version)){n.push(oe("impossible-target","version is required",`${t}.version`));return}e.transition!==void 0&&!Af.has(String(e.transition))&&n.push(oe("impossible-target","transition must be show, hide, or replace",`${t}.transition`)),r?.layers&&!r.layers.includes(e.layerId)&&n.push(oe("unknown-resource",`unknown layer "${e.layerId}"`,`${t}.layerId`));let o=r?.versions?.[e.layerId];o&&!o.includes(e.version)&&n.push(oe("unknown-resource",`unknown version "${e.version}" on "${e.layerId}"`,`${t}.version`));let s={kind:"visual-layer",layerId:e.layerId,version:e.version};return(e.transition==="show"||e.transition==="hide"||e.transition==="replace")&&(s.transition=e.transition),s}if(i==="presence"){if(_e(e,new Set(["kind","entityId","present","regionId"]),t,n),!Re(e.entityId)){n.push(oe("impossible-target","entityId is required",`${t}.entityId`));return}if(typeof e.present!="boolean"){n.push(oe("impossible-target","present must be a boolean",`${t}.present`));return}r?.entities&&!r.entities.includes(e.entityId)&&n.push(oe("unknown-resource",`unknown entity "${e.entityId}"`,`${t}.entityId`)),e.regionId!==void 0&&!Re(e.regionId)&&n.push(oe("impossible-target","regionId must be a string",`${t}.regionId`));let o={kind:"presence",entityId:e.entityId,present:e.present};return Re(e.regionId)&&(o.regionId=e.regionId),o}if(i==="prop"){if(_e(e,new Set(["kind","propId","visible","layerId"]),t,n),!Re(e.propId)){n.push(oe("impossible-target","propId is required",`${t}.propId`));return}if(typeof e.visible!="boolean"){n.push(oe("impossible-target","visible must be a boolean",`${t}.visible`));return}r?.props&&!r.props.includes(e.propId)&&n.push(oe("unknown-resource",`unknown prop "${e.propId}"`,`${t}.propId`));let o={kind:"prop",propId:e.propId,visible:e.visible};return Re(e.layerId)&&(o.layerId=e.layerId),o}if(i==="semantic-region"){if(_e(e,new Set(["kind","regionId","state","hitTestEnabled"]),t,n),!Re(e.regionId)){n.push(oe("impossible-target","regionId is required",`${t}.regionId`));return}r?.regions&&!r.regions.includes(e.regionId)&&n.push(oe("unknown-resource",`unknown region "${e.regionId}"`,`${t}.regionId`)),e.hitTestEnabled!==void 0&&typeof e.hitTestEnabled!="boolean"&&n.push(oe("impossible-target","hitTestEnabled must be a boolean",`${t}.hitTestEnabled`));let o=Lf(e.state,`${t}.state`,n),s={kind:"semantic-region",regionId:e.regionId};return o&&(s.state=o),typeof e.hitTestEnabled=="boolean"&&(s.hitTestEnabled=e.hitTestEnabled),s}if(i==="hotspot"){if(_e(e,new Set(["kind","hotspotId","enabled","regionId"]),t,n),!Re(e.hotspotId)){n.push(oe("impossible-target","hotspotId is required",`${t}.hotspotId`));return}if(typeof e.enabled!="boolean"){n.push(oe("impossible-target","enabled must be a boolean",`${t}.enabled`));return}r?.hotspots&&!r.hotspots.includes(e.hotspotId)&&n.push(oe("unknown-resource",`unknown hotspot "${e.hotspotId}"`,`${t}.hotspotId`));let o={kind:"hotspot",hotspotId:e.hotspotId,enabled:e.enabled};return Re(e.regionId)&&(o.regionId=e.regionId),o}if(i==="sequence"){if(_e(e,new Set(["kind","sequenceId","play"]),t,n),!Re(e.sequenceId)){n.push(oe("impossible-target","sequenceId is required",`${t}.sequenceId`));return}e.play!==void 0&&typeof e.play!="boolean"&&n.push(oe("impossible-target","play must be a boolean",`${t}.play`)),r?.sequences&&!r.sequences.includes(e.sequenceId)&&n.push(oe("unknown-resource",`unknown sequence "${e.sequenceId}"`,`${t}.sequenceId`));let o={kind:"sequence",sequenceId:e.sequenceId};return typeof e.play=="boolean"&&(o.play=e.play),o}if(_e(e,new Set(["kind","bindingId","assetId"]),t,n),!Re(e.bindingId)){n.push(oe("impossible-target","bindingId is required",`${t}.bindingId`));return}if(!Re(e.assetId)){n.push(oe("impossible-target","assetId is required",`${t}.assetId`));return}return r?.assets&&!r.assets.includes(e.assetId)&&n.push(oe("unknown-resource",`unknown asset "${e.assetId}"`,`${t}.assetId`)),{kind:"asset",bindingId:e.bindingId,assetId:e.assetId}}function Vf(e,t,n){if(e===void 0)return;if(!We(e)){n.push(oe("invalid-manifest","resources must be an object",t));return}_e(e,Tf,t,n);let r={},i=(S,R)=>{if(S!==void 0){if(!Array.isArray(S)||S.some(T=>!Re(T))){n.push(oe("invalid-manifest",`${R} must be a string array`,`${t}.${R}`));return}return S.slice()}},o=i(e.layers,"layers");o&&(r.layers=o);let s=i(e.regions,"regions");s&&(r.regions=s);let a=i(e.sequences,"sequences");a&&(r.sequences=a);let c=i(e.hotspots,"hotspots");c&&(r.hotspots=c);let m=i(e.entities,"entities");m&&(r.entities=m);let u=i(e.props,"props");u&&(r.props=u);let y=i(e.assets,"assets");if(y&&(r.assets=y),e.versions!==void 0)if(!We(e.versions))n.push(oe("invalid-manifest","versions must be an object",`${t}.versions`));else{let S={};for(let[R,T]of Object.entries(e.versions)){if(!Array.isArray(T)||T.some(k=>!Re(k))){n.push(oe("invalid-manifest",`versions.${R} must be a string array`,`${t}.versions.${R}`));continue}S[R]=T.slice()}r.versions=S}return r}function Ir(e){let t=[];if(kr(e,"",t),!We(e))return{ok:!1,errors:[oe("invalid-manifest","bindings manifest must be a JSON object")]};_e(e,Pf,"",t),Re(e.id)||t.push(oe("invalid-id","id is required","id")),e.schemaVersion!==Zi&&t.push(oe("invalid-version",`schemaVersion must be ${Zi}`,"schemaVersion")),Array.isArray(e.bindings)||t.push(oe("invalid-manifest","bindings must be an array","bindings")),(!Array.isArray(e.defaults)||e.defaults.length===0)&&t.push(oe("uncovered-default","defaults must cover required presentation targets","defaults"));let n=Vf(e.resources,"resources",t),r=new Set,i=[];Array.isArray(e.bindings)&&e.bindings.forEach((m,u)=>{let y=`bindings[${u}]`;if(!We(m)){t.push(oe("invalid-manifest","binding must be an object",y));return}if(_e(m,xf,y,t),!Re(m.id)){t.push(oe("invalid-id","binding id is required",`${y}.id`));return}r.has(m.id)&&t.push(oe("duplicate-id",`duplicate binding id "${m.id}"`,`${y}.id`)),r.add(m.id),(typeof m.priority!="number"||!Number.isFinite(m.priority))&&t.push(oe("invalid-manifest","priority must be a finite number",`${y}.priority`));let S=br(m.when,`${y}.when`,t);if(!Array.isArray(m.targets)||m.targets.length===0){t.push(oe("impossible-target","binding targets are required",`${y}.targets`));return}let R=m.targets.map((T,k)=>io(T,`${y}.targets[${k}]`,t,n)).filter(T=>!!T);!S||typeof m.priority!="number"||!Number.isFinite(m.priority)||i.push({id:m.id,priority:m.priority,when:S,targets:R})});let o=[],s=new Set;Array.isArray(e.defaults)&&e.defaults.forEach((m,u)=>{let y=io(m,`defaults[${u}]`,t,n);if(!y)return;let S=It(y);s.has(S)&&t.push(oe("duplicate-priority",`duplicate default target "${S}"`,`defaults[${u}]`)),s.add(S),o.push(y)});let a=new Map,c=new Set;for(let m of i){let u=new Set;for(let y of m.targets){let S=It(y);c.add(S),u.has(S)&&t.push(oe("duplicate-priority",`binding "${m.id}" repeats target "${S}"`,`bindings.${m.id}`)),u.add(S);let R=a.get(S);R||(R=new Map,a.set(S,R));let T=R.get(m.priority);T?t.push(oe("duplicate-priority",`bindings "${T}" and "${m.id}" share priority ${m.priority} on "${S}"`,`bindings.${m.id}`)):R.set(m.priority,m.id)}}for(let m of c)s.has(m)||t.push(oe("uncovered-default",`required target "${m}" has no default`,"defaults"));return t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:Me({id:String(e.id),schemaVersion:Zi,bindings:i,defaults:o,...n?{resources:n}:{}})}}function dd(e){return{considered:[],winners:{},rejected:[],fallbacks:[],fallbackReason:e}}function sd(e,t){let n=dd(t==="uncovered-default"?null:t),r=[],i={};for(let o of e.defaults){let s=It(o);r.push(Me(o)),i[s]={bindingId:null,target:Me(o)},n.fallbacks.push({targetKey:s,reason:t})}return n.winners=i,{selectedBindingIds:[],targets:r,usedFallback:t!=="uncovered-default",fallbackReason:t==="uncovered-default"?null:t,explanation:n}}function oo(e,t,n={}){let r=Of(t);if(r==="missing")return sd(e,"missing-state");if(r==="invalid")return sd(e,"invalid-projection");let i=dd(null),o=[];for(let u of e.bindings){let y=yr(u.when,r,n);if(i.considered.push({bindingId:u.id,predicateResult:y.ok,...y.detail?{detail:y.detail}:{}}),y.ok)o.push(u);else for(let S of u.targets)i.rejected.push({bindingId:u.id,targetKey:It(S),reason:"predicate-false"})}o.sort((u,y)=>y.priority-u.priority||(u.id<y.id?-1:u.id>y.id?1:0));let s=new Map;for(let u of o)for(let y of u.targets){let S=It(y),R=s.get(S);if(!R){s.set(S,{bindingId:u.id,priority:u.priority,target:Me(y)});continue}u.priority<R.priority&&i.rejected.push({bindingId:u.id,targetKey:S,reason:"lower-priority"})}for(let u of e.defaults){let y=It(u);s.has(y)||(i.fallbacks.push({targetKey:y,reason:"uncovered-default"}),i.winners[y]={bindingId:null,target:Me(u)})}for(let[u,y]of s)i.winners[u]={bindingId:y.bindingId,target:Me(y.target)};let a=[...new Set([...s.values()].sort((u,y)=>y.priority-u.priority||(u.bindingId<y.bindingId?-1:1)).map(u=>u.bindingId))],c=[],m=new Set;for(let u of e.defaults){let y=It(u),S=s.get(y),R=S?S.target:u;m.has(y)||(m.add(y),c.push(Me(R)))}for(let[u,y]of s)m.has(u)||(m.add(u),c.push(Me(y.target)));return{selectedBindingIds:a,targets:c,usedFallback:!1,fallbackReason:null,explanation:i}}function Ff(e,t){let n={},r={},i={},o={},s={},a={},c={},m=t.sequences?.inspect().active;for(let u of e){if(u.kind==="visual-layer"&&(n[u.layerId]=u.version),u.kind==="presence"&&(r[u.entityId]=u.present),u.kind==="prop"&&(i[u.propId]=u.visible),u.kind==="semantic-region"&&(o[u.regionId]={...u.state??{},...u.hitTestEnabled!==void 0?{hitTestEnabled:u.hitTestEnabled}:{}}),u.kind==="hotspot"&&(s[u.hotspotId]=u.enabled),u.kind==="sequence"){let y=u.play!==!1,S=y&&m&&m.sequenceId===u.sequenceId&&(m.phase==="playing"||m.phase==="paused"||m.phase==="requested"||m.phase==="preloading"||m.phase==="ready");a[u.sequenceId]=S?"playing":"idle",y&&S&&(a[u.sequenceId]="playing")}u.kind==="asset"&&(c[u.bindingId]=u.assetId)}return{revision:t.revision,selectedBindingIds:t.selectedBindingIds.slice(),layers:n,presence:r,props:i,regions:o,hotspots:s,sequences:a,assets:c,override:t.override?Me(t.override):null,usedFallback:t.usedFallback,fallbackReason:t.fallbackReason,explanation:t.explanation?Me(t.explanation):null}}function $f(e,t){return e?JSON.stringify(e)===JSON.stringify(t):!1}function ad(e,t){if(e===null)return null;if(e===void 0)return;if(!We(e)){t.push(oe("invalid-snapshot","override must be an object"));return}_e(e,Df,"override",t);let n={};if(e.reducedSensory!==void 0&&(typeof e.reducedSensory!="boolean"?t.push(oe("invalid-snapshot","reducedSensory must be a boolean","override.reducedSensory")):n.reducedSensory=e.reducedSensory),e.reducedMotion!==void 0&&(typeof e.reducedMotion!="boolean"?t.push(oe("invalid-snapshot","reducedMotion must be a boolean","override.reducedMotion")):n.reducedMotion=e.reducedMotion),e.labels!==void 0)if(!We(e.labels))t.push(oe("invalid-snapshot","labels must be an object","override.labels"));else{let r={};for(let[i,o]of Object.entries(e.labels)){if(typeof o=="string"){r[i]=o;continue}if(We(o)&&Re(o.name)&&Re(o.role)){r[i]={name:o.name,role:o.role};continue}t.push(oe("invalid-snapshot",`label "${i}" must be a string or { name, role }`,`override.labels.${i}`))}n.labels=r}return n}function so(e){let t=Ir(e.manifest);if(!t.ok)throw new Error(`createPresentationBindingRuntime: ${t.errors.map($=>$.detail).join("; ")}`);let n=t.manifest,r=e.visual,i=e.semantic,o=e.sequences,s=e.selectors??{},a=!1,c=null,m=0,u=[],y=new Map,S=!1,R=null,T=null,k=null,P=!1,B=new Map,J=[],D=()=>{if(a)throw new Error(wf)};function O($,p){J.push({type:$,atRevision:c,manifestId:n.id,selectedBindingIds:u.slice(),reason:typeof p.reason=="string"?p.reason:void 0});let E=$.includes(".diagnostic.")?"diagnostic":"state",w={type:$,kind:E,payload:Me(p)};e.onEvent?.(w),e.router?.publish(w)}function g(){return Ff([...y.values()],{revision:c,selectedBindingIds:u,override:k,usedFallback:S,fallbackReason:R,explanation:T,sequences:o})}function f($){let p=[];for(let E of $)E.kind==="visual-layer"&&r&&(r.inspect().find(M=>M.id===E.layerId)||p.push(oe("unknown-resource",`unknown live layer "${E.layerId}"`,E.layerId))),E.kind==="semantic-region"&&i&&!i.get(E.regionId)&&p.push(oe("unknown-resource",`unknown live region "${E.regionId}"`,E.regionId)),E.kind==="hotspot"&&E.regionId&&i&&!i.get(E.regionId)&&p.push(oe("unknown-resource",`unknown live region "${E.regionId}"`,E.regionId)),E.kind==="presence"&&E.regionId&&i&&!i.get(E.regionId)&&p.push(oe("unknown-resource",`unknown live region "${E.regionId}"`,E.regionId)),E.kind==="sequence"&&o&&!o.get(E.sequenceId)&&p.push(oe("unknown-resource",`unknown live sequence "${E.sequenceId}"`,E.sequenceId));return p}function I(){if(!(!i||!k?.labels)){for(let[$,p]of Object.entries(k.labels))if(i.get($))if(typeof p=="string"){let E=i.get($)?.a11y;i.setRegionA11y($,{name:p,role:E?.role??"region"})}else i.setRegionA11y($,{name:p.name,role:p.role})}}function d(){return k?.reducedSensory===!0}function l($){let p=o?.inspect().active;return!!(p&&p.sequenceId===$&&(p.phase==="playing"||p.phase==="paused"||p.phase==="requested"||p.phase==="preloading"||p.phase==="ready"))}function b($,p){if(!o)return;let E=d(),w=$.play!==!1&&!E,M=l($.sequenceId);if(w&&!M&&(!p||P!==E)){let q=o.playSequence($.sequenceId,{invocationId:`presentation-binding:${$.sequenceId}`,idempotencyKey:`presentation-binding:${$.sequenceId}`});if(!q.ok&&q.reason!=="duplicate")return oe("unknown-resource",q.detail,$.sequenceId)}!w&&M&&o.skip()}function A(){for(let $ of y.values())$.kind==="sequence"&&b($,!0);P=d()}function F($){if(!i)return[];let p=new Map;for(let _ of $)_.kind==="hotspot"&&_.regionId&&p.set(_.regionId,_.enabled);for(let _ of $)_.kind==="semantic-region"&&_.hitTestEnabled!==void 0&&p.set(_.regionId,_.hitTestEnabled);if(p.size===0)return[];let E=new Map,w=!1;for(let[_,U]of p){let h=i.get(_);if(!h)continue;h.hitTest!=="pass-through"&&B.set(_,h.hitTest);let v=B.get(_)??"absorb",C=U?v:"pass-through";E.set(_,C),h.hitTest!==C&&(w=!0)}if(!w)return[];let M=i.snapshot(),L={...M,regions:M.regions.map(_=>{let U=E.get(_.id);return U&&U!==_.hitTest?{..._,hitTest:U}:_})},q=i.restore(L);return q.ok?[]:q.errors.map(_=>oe("unknown-resource",_))}function x($){let p=r?.snapshot(),E=i?.snapshot(),w=o?.snapshot(),M=new Map(B),L=U=>{B.clear();for(let[h,v]of M)B.set(h,v);return o&&w&&o.restore(w),r&&p&&r.restore(p),i&&E&&i.restore(E),U},q=new Map;for(let U of $)q.set(It(U),Me(U));let _=F($);if(_.length>0)return L(_);for(let[U,h]of q){let v=y.get(U),C=$f(v,h);if(h.kind==="visual-layer"&&r&&!C){let N=h.transition??"replace",W=r.play({name:`presentation-binding:${h.layerId}:${N}`,idempotencyKey:`presentation-binding:${h.layerId}:${h.version}:${N}`,layerId:h.layerId,kind:N,...N==="hide"?{}:{toVersion:h.version},durationFrames:0,onDuplicate:"ignore"});if(!W.ok&&W.reason!=="duplicate")return L([oe("unknown-resource",W.detail,h.layerId)])}if(h.kind==="semantic-region"&&i){let N=h.state??{},W=i.get(h.regionId)?.state,Z={hover:N.hover??W?.hover??!1,focus:N.focus??W?.focus??!1,selected:N.selected??W?.selected??!1};(!W||W.hover!==Z.hover||W.focus!==Z.focus||W.selected!==Z.selected)&&i.setRegionState(h.regionId,Z)}if(h.kind==="hotspot"&&h.regionId&&i){let N=i.get(h.regionId)?.state;(!N||N.selected!==h.enabled)&&i.setRegionState(h.regionId,{selected:h.enabled})}if(h.kind==="presence"&&h.regionId&&i){let N=i.get(h.regionId)?.state;(!N||N.selected!==h.present)&&i.setRegionState(h.regionId,{selected:h.present})}if(h.kind==="sequence"){let N=b(h,C);if(N)return L([N])}}return y=q,P=d(),I(),[]}function H($,p){let E=f($.targets);if(E.length>0)return O(vr,{manifestId:n.id,revision:String(p),reason:E[0]?.code,selectedBindingIds:u}),O(Sr,{manifestId:n.id,revision:String(p),reason:E[0]?.code}),{ok:!1,errors:E,inspect:g()};let w=x($.targets);return w.length>0?(O(vr,{manifestId:n.id,revision:String(p),reason:w[0]?.code,selectedBindingIds:u}),O(Sr,{manifestId:n.id,revision:String(p),reason:w[0]?.code}),{ok:!1,errors:w,inspect:g()}):(c=p,u=$.selectedBindingIds.slice(),S=$.usedFallback,R=$.fallbackReason,T=Me($.explanation),O(Er,{manifestId:n.id,revision:String(p),selectedBindingIds:u,usedFallback:S,reason:R??void 0}),{ok:!0,revision:p,selectedBindingIds:u.slice(),usedFallback:S,fallbackReason:R,explanation:Me($.explanation),inspect:g()})}function K(){return{schemaVersion:no,manifestId:n.id,projectionRevision:c,selectedBindingIds:u.slice(),targets:[...y.values()].map($=>Me($)),usedFallback:S,fallbackReason:R,override:k?Me(k):null}}return{get manifest(){return Me(n)},apply($,p){D();let E=p?.revision??m+1;typeof E=="number"&&(m=Math.max(m,E));let w=oo(n,$,s);return H(w,E)},setOverride($){D();let p=d();if($===null)k=null;else{let E=[],w=ad($,E);if(E.length>0||w===void 0)throw new Error(`createPresentationBindingRuntime: ${E.map(M=>M.detail).join("; ")||"invalid override"}`);k=w?Me(w):null,I()}d()!==p&&A()},evaluate($){return D(),oo(n,$,s)},inspect(){return D(),g()},snapshot(){return D(),K()},restore($){D();let p=C=>({ok:!1,errors:C}),E=$;if(typeof $=="string")try{E=JSON.parse($)}catch{return p([oe("invalid-snapshot","snapshot JSON is invalid")])}if(!We(E))return p([oe("invalid-snapshot","snapshot must be a JSON object")]);if(E.schemaVersion!==no)return p([oe("invalid-schema",`unsupported snapshot schemaVersion ${String(E.schemaVersion)}`,"schemaVersion")]);if(E.manifestId!==n.id)return p([oe("invalid-snapshot",`snapshot manifestId "${String(E.manifestId)}" does not match "${n.id}"`,"manifestId")]);if(!Array.isArray(E.selectedBindingIds))return p([oe("invalid-snapshot","selectedBindingIds must be an array","selectedBindingIds")]);let w=new Set(n.bindings.map(C=>C.id));for(let C of E.selectedBindingIds)if(!Re(C)||!w.has(C))return p([oe("unknown-resource",`unknown selected binding "${String(C)}"`,"selectedBindingIds")]);if(!Array.isArray(E.targets))return p([oe("invalid-snapshot","targets must be an array","targets")]);let M=[],L=E.targets.map((C,N)=>io(C,`targets[${N}]`,M,n.resources)).filter(C=>!!C);if(M.length>0)return p(M);let q=[],_=ad(E.override??null,q);if(q.length>0)return p(q);let U=f(L);if(U.length>0)return p(U);let h=typeof E.projectionRevision=="string"||typeof E.projectionRevision=="number"?E.projectionRevision:E.projectionRevision===null?null:void 0;if(h===void 0)return p([oe("invalid-snapshot","projectionRevision must be a string, number, or null","projectionRevision")]);let v=x(L);return v.length>0?p(v):(c=h,typeof h=="number"&&(m=Math.max(m,h)),u=E.selectedBindingIds.filter(C=>Re(C)),S=E.usedFallback===!0,R=E.fallbackReason==="missing-state"||E.fallbackReason==="invalid-projection"?E.fallbackReason:null,k=_??null,I(),A(),{ok:!0,snapshot:K()})},destroy(){a||(a=!0,y.clear(),J.length=0)}}}var cd="executable module host has been destroyed";var Bf=/^[a-z0-9][a-z0-9.-]*$/i,Hf=/^[a-z0-9][a-z0-9-]*$/i;function Tt(e){return{id:e.id,version:e.version}}function ao(e){return`${e.id}@${e.version}`}function En(e){return typeof e=="string"&&e.length>0&&Bf.test(e)}function qf(e){if(typeof e!="string"||e.length===0)return!1;let t=e.split(".");return t.some(n=>n.length===0)?!1:t.every(n=>n==="*"||Hf.test(n))}function pd(e,t){if(e===t)return!0;if(!e.includes("*"))return!1;let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function Wf(e,t){return t.some(n=>n.version===e.version&&pd(n.id,e.id))}function In(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Gf(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function ud(e){return e instanceof Error&&e.message?e.message:String(e)}function Rn(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>Rn(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=Rn(e[n]);return Object.freeze(t)}function ld(e){if(!In(e))return;let t=e.id,n=e.version;if(!(!En(t)||!En(n)))return{id:t,version:n}}function Kf(e){if(e===void 0)return{};if(!In(e))throw new Error("createExecutableModuleHost: limits must be an object");let t={};if(e.maxInvokeMs!==void 0){if(typeof e.maxInvokeMs!="number"||!Number.isInteger(e.maxInvokeMs)||e.maxInvokeMs<1)throw new Error("createExecutableModuleHost: limits.maxInvokeMs must be an integer >= 1");t.maxInvokeMs=e.maxInvokeMs}if(e.maxInvokesPerTurn!==void 0){if(typeof e.maxInvokesPerTurn!="number"||!Number.isInteger(e.maxInvokesPerTurn)||e.maxInvokesPerTurn<1)throw new Error("createExecutableModuleHost: limits.maxInvokesPerTurn must be an integer >= 1");t.maxInvokesPerTurn=e.maxInvokesPerTurn}return t}function fd(e){if(!In(e))throw new Error("createExecutableModuleHost: options are required");if(!Array.isArray(e.allowlist))throw new Error("createExecutableModuleHost: allowlist must be an array");if(!Array.isArray(e.modules))throw new Error("createExecutableModuleHost: modules must be an array");let t=e.allowlist.map((g,f)=>{if(!In(g))throw new Error(`createExecutableModuleHost: allowlist[${f}] must be an object`);if(!qf(g.id))throw new Error(`createExecutableModuleHost: allowlist[${f}].id is not a valid id or pattern`);if(!En(g.version)||g.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${f}].version must be an exact version`);return{id:g.id,version:g.version}}),n=new Map,r=new Map;for(let[g,f]of e.modules.entries()){if(!In(f))throw new Error(`createExecutableModuleHost: modules[${g}] must be an object`);if(!En(f.id))throw new Error(`createExecutableModuleHost: modules[${g}].id is invalid`);if(!En(f.version))throw new Error(`createExecutableModuleHost: modules[${g}].version is invalid`);if(typeof f.create!="function")throw new Error(`createExecutableModuleHost: modules[${g}].create must be a function`);let I=`${f.id}@${f.version}`;if(n.has(I))throw new Error(`createExecutableModuleHost: duplicate module ${I}`);n.set(I,{id:f.id,version:f.version,create:f.create,capabilities:f.capabilities});let d=r.get(f.id)??[];d.push(f.version),r.set(f.id,d)}let i=Kf(e.limits),o=e.capabilities,s=new Map,a=new Set,c=[],m=0,u=0,y=!1;function S(g,f,I){let d=I?{code:g,detail:f,ref:Tt(I)}:{code:g,detail:f};return c.push(d),c.length>256&&c.shift(),d}function R(g,f,I){return{ok:!1,error:S(g,f,I)}}function T(g){if(y){let A=ld(g);return R("destroyed",cd,A)}let f=ld(g);if(!f)return R("invalid-ref","module ref requires exact id and version");let I=n.get(ao(f)),d=r.has(f.id),l=Wf(f,t),b=t.some(A=>pd(A.id,f.id)&&A.version!==f.version);return l?I?{ok:!0,ref:f,registration:I}:d?R("version-mismatch",`no factory for ${f.id}@${f.version}`,f):R("unknown-module",`unknown module "${f.id}"`,f):b||d&&!I?R("version-mismatch",`no allowlisted factory for ${f.id}@${f.version}`,f):!I&&!d?R("unknown-module",`unknown module "${f.id}"`,f):R("not-allowlisted",`${f.id}@${f.version} is not allowlisted`,f)}function k(g,f){let I=ao(g);if(s.has(I))return{ok:!0,ref:Tt(g)};let d=Rn({...o??{},...f.capabilities??{}});try{let l=f.create(d);return!l||typeof l.invoke!="function"?R("load-failed",`factory for ${g.id}@${g.version} did not return an invoke() module`,g):(s.set(I,{ref:Tt(g),instance:l}),{ok:!0,ref:Tt(g)})}catch(l){return R("load-failed",ud(l),g)}}function P(g){let f=T(g);return f.ok?k(f.ref,f.registration):f}function B(g,f){let I=T(g);if(!I.ok)return Promise.resolve(I);if(i.maxInvokesPerTurn!==void 0&&u>=i.maxInvokesPerTurn)return Promise.resolve(R("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,I.ref));u+=1;let d=k(I.ref,I.registration);if(!d.ok)return Promise.resolve(d);let l=s.get(ao(I.ref));if(!l)return Promise.resolve(R("load-failed","module instance was not retained",I.ref));let b=new AbortController;a.add(b);let A=Date.now(),F=i.maxInvokeMs,x;F!==void 0&&(x=setTimeout(()=>b.abort(),F));let H=$=>(x!==void 0&&clearTimeout(x),a.delete(b),y?R("destroyed",cd,I.ref):$),K=$=>b.signal.aborted&&F!==void 0?R("timeout",`invoke exceeded ${F}ms`,I.ref):R("invoke-failed",ud($),I.ref);try{let $=l.instance.invoke(f,{signal:b.signal,turn:m});return Gf($)?new Promise(p=>{let E=!1,w=M=>{E||(E=!0,p(H(M)))};if(F!==void 0){let M=x;M!==void 0&&clearTimeout(M),x=setTimeout(()=>{b.abort(),w(R("timeout",`invoke exceeded ${F}ms`,I.ref))},Math.max(0,F-(Date.now()-A)))}Promise.resolve($).then(M=>w({ok:!0,value:M}),M=>w(K(M)))}):F!==void 0&&Date.now()-A>=F?(b.abort(),Promise.resolve(H(R("timeout",`invoke exceeded ${F}ms`,I.ref)))):Promise.resolve(H({ok:!0,value:$}))}catch($){return Promise.resolve(H(K($)))}}function J(){y||(m+=1,u=0)}function D(){return{allowlist:t.map(Tt),registered:[...n.values()].map(g=>({id:g.id,version:g.version})),loaded:[...s.values()].map(g=>Tt(g.ref)),turn:m,invokesThisTurn:u,diagnostics:c.map(g=>g.ref?{...g,ref:Tt(g.ref)}:{...g})}}function O(){if(!y){y=!0;for(let g of a)g.abort();a.clear();for(let g of s.values())try{g.instance.destroy?.()}catch{}s.clear(),n.clear(),r.clear(),t.length=0}}return{load:P,invoke:B,beginTurn:J,inspect:D,destroy:O}}var co=1,md="hmac-sha256",Mt=1,Sd=vn;var uo=class extends Error{constructor(n,r){super(`${r} requires grant "${n}"`);this.code="capability-denied";this.name="RemoteCartCapabilityError",this.grant=n}};function me(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Ot(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ge(e){return typeof e=="string"&&e.length>0}var lo=new Set(Sd),gd=new Set(["image","audio","font","spritesheet"]),jf=new Set(["version","id","cartVersion","publisher","assets","requestedGrants","module","capabilities"]),Uf=new Set(["id","kind","url","hash","alg"]),Jf=new Set(["alg","keyId","mac"]),hd=/^[a-z0-9][a-z0-9.-]*$/i,zf=256;function kd(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}var Yf=/^[0-9a-f]+$/i;function yd(e){if(e.length%2!==0||e.length===0||!Yf.test(e))return;let t=new Uint8Array(e.length/2);for(let n=0;n<t.length;n++)t[n]=Number.parseInt(e.slice(n*2,n*2+2),16);return t}function Xf(e,t){let n=yd(e),r=yd(t),i=n??new Uint8Array(32),o=r??new Uint8Array(32),s=Math.max(i.length,o.length),a=n&&r&&n.length===r.length?0:1;for(let c=0;c<s;c++)a|=(i[c]??0)^(o[c]??0);return a===0}async function Rr(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=await crypto.subtle.digest("SHA-256",t);return kd(new Uint8Array(n))}async function Qf(e,t){let n=await crypto.subtle.importKey("raw",new TextEncoder().encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),r=await crypto.subtle.sign("HMAC",n,new TextEncoder().encode(t));return kd(new Uint8Array(r))}function po(e){if(Array.isArray(e))return e.map(po);if(!Ot(e))return e;let t={};for(let n of Object.keys(e).sort())t[n]=po(e[n]);return t}function Zf(e){return JSON.stringify(po(e))}function Cr(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(me("invalid-manifest",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function em(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function Ed(e,t){if(!Array.isArray(e))return{ok:!1,errors:[me("invalid-manifest",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;typeof i!="string"||!lo.has(i)?n.push(me("invalid-manifest",`invalid grant "${String(i)}"`,s)):r.push(i)}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:em(r)}}function tm(e){if(!Array.isArray(e))return{ok:!1,errors:[me("invalid-manifest","assets must be an array","assets")]};let t=[],n=[],r=new Set;return e.forEach((i,o)=>{let s=`assets[${o}]`;if(!Ot(i)){t.push(me("invalid-manifest","asset must be an object",s));return}t.push(...Cr(i,Uf,s)),Ge(i.id)?r.has(i.id)?t.push(me("invalid-manifest",`duplicate asset id "${i.id}"`,`${s}.id`)):r.add(i.id):t.push(me("invalid-manifest","asset id is required",`${s}.id`)),(typeof i.kind!="string"||!gd.has(i.kind))&&t.push(me("invalid-manifest",`invalid asset kind "${String(i.kind)}"`,`${s}.kind`)),Ge(i.url)||t.push(me("invalid-manifest","asset url is required",`${s}.url`)),Ge(i.hash)||t.push(me("unsigned-bytes","asset hash is required",`${s}.hash`)),i.alg!=="sha256"&&t.push(me("invalid-manifest","asset alg must be sha256",`${s}.alg`)),Ge(i.id)&&typeof i.kind=="string"&&gd.has(i.kind)&&Ge(i.url)&&Ge(i.hash)&&i.alg==="sha256"&&n.push({id:i.id,kind:i.kind,url:i.url,hash:i.hash,alg:"sha256"})}),t.length>0?{ok:!1,errors:t}:{ok:!0,values:n}}function nm(e){return e===void 0?{ok:!0}:Ot(e)?!Ge(e.id)||!hd.test(e.id)?{ok:!1,errors:[me("invalid-manifest","module.id is invalid","module.id")]}:!Ge(e.version)||!hd.test(e.version)?{ok:!1,errors:[me("invalid-manifest","module.version is invalid","module.version")]}:{ok:!0,value:{id:e.id,version:e.version}}:{ok:!1,errors:[me("invalid-manifest","module must be an object","module")]}}function rm(e){if(!Ot(e))return{ok:!1,errors:[me("invalid-manifest","remote cart body must be a JSON object")]};let t=Cr(e,jf,"");e.version!==void 0&&e.version!==co&&t.push(me("invalid-version",`remote cart manifest version must be ${co}`,"version")),Ge(e.id)||t.push(me("invalid-manifest","id is required","id")),Ge(e.cartVersion)||t.push(me("invalid-manifest","cartVersion is required","cartVersion")),Ge(e.publisher)||t.push(me("unknown-publisher","publisher is required","publisher"));let n=tm(e.assets);n.ok||t.push(...n.errors);let r=Ed(e.requestedGrants,"requestedGrants");r.ok||t.push(...r.errors);let i=nm(e.module);i.ok||t.push(...i.errors);let o;if(e.capabilities!==void 0){let a=Ni(e.capabilities);if(a.ok)o=a.manifest;else for(let c of a.errors)t.push(me(c.code,c.detail,c.path?`capabilities.${c.path}`:"capabilities"))}if(t.length>0)return{ok:!1,errors:t};let s={version:co,id:e.id,cartVersion:e.cartVersion,publisher:e.publisher,assets:n.ok?n.values:[],requestedGrants:r.ok?r.values:[]};return i.ok&&i.value&&(s.module=i.value),o&&(s.capabilities=o),{ok:!0,body:s}}function im(e){if(!Ot(e))return{ok:!1,errors:[me("invalid-signature","signature must be an object","signature")]};let t=Cr(e,Jf,"signature");return e.alg!==md&&t.push(me("invalid-signature","signature.alg must be hmac-sha256","signature.alg")),Ge(e.keyId)||t.push(me("unknown-key","signature.keyId is required","signature.keyId")),(!Ge(e.mac)||!/^[0-9a-f]+$/i.test(e.mac))&&t.push(me("invalid-signature","signature.mac must be hex","signature.mac")),t.length>0?{ok:!1,errors:t}:{ok:!0,signature:{alg:md,keyId:e.keyId,mac:e.mac.toLowerCase()}}}function Id(e){if(!Ot(e))return{ok:!1,errors:[me("invalid-manifest","signed remote cart must be a JSON object")]};let t=rm(e.body),n=im(e.signature),r=[];t.ok||r.push(...t.errors),n.ok||r.push(...n.errors);let i=Cr(e,new Set(["body","signature"]),"");return r.push(...i),r.length>0?{ok:!1,errors:r}:{ok:!0,manifest:{body:t.ok?t.body:void 0,signature:n.ok?n.signature:void 0}}}async function fo(e,t,n){let r=Id(e);if(!r.ok)return r;let i=t[r.manifest.signature.keyId];if(!Ge(i))return{ok:!1,errors:[me("unknown-key",`unknown signature key "${r.manifest.signature.keyId}"`,"signature.keyId")]};let o=await Qf(i,Zf(r.manifest.body));return Xf(o,r.manifest.signature.mac)?n!==void 0&&r.manifest.body.cartVersion!==n?{ok:!1,errors:[me("invalid-version",`cartVersion ${r.manifest.body.cartVersion} does not match ${n}`,"body.cartVersion")]}:{ok:!0,manifest:r.manifest}:{ok:!1,errors:[me("invalid-signature","HMAC does not match canonical body","signature.mac")]}}function Rd(e){return[...e.body.requestedGrants]}function nn(e){let t=new Set;if(e)for(let o of e)lo.has(o)&&t.add(o);function n(){return{schemaVersion:Mt,grants:Sd.filter(o=>t.has(o))}}function r(o){let s=o;if(typeof o=="string")try{s=JSON.parse(o)}catch{return{ok:!1,errors:[me("invalid-json","grant snapshot JSON is not parseable")]}}if(!Ot(s))return{ok:!1,errors:[me("invalid-manifest","grant snapshot must be an object")]};if(s.schemaVersion!==Mt)return{ok:!1,errors:[me("invalid-version",`grant snapshot schema must be ${Mt}`,"schemaVersion")]};let a=Ed(s.grants,"grants");if(!a.ok)return a;t.clear();for(let c of a.values)t.add(c);return{ok:!0,grants:n().grants}}function i(o,s){return lo.has(o)?(s?t.add(o):t.delete(o),{ok:!0,grants:n().grants}):{ok:!1,errors:[me("invalid-manifest",`invalid grant "${String(o)}"`)]}}return{grant:o=>i(o,!0),revoke:o=>i(o,!1),has:o=>t.has(o),list:()=>n().grants,inspect:n,restore:r}}function Dt(e,t){return e.push(t),e.length>zf&&e.shift(),t}function bd(e){return e.code==="undeclared"?me("undeclared-asset",e.message,e.ref):e.code==="hash-mismatch"?me("hash-mismatch",e.message,e.ref):e.code==="unsigned"?me("unsigned-bytes",e.message,e.ref):me("load-failed",e.message,e.ref)}function vd(e,t,n,r){let i=(s,a)=>{if(!e.has(s))throw new uo(s,a)},o={grants:e.list(),network:{fetch(s){if(i("network","network.fetch"),!t.has(s))return Promise.reject(Object.assign(new Error(`undeclared network url "${s}"`),{code:"undeclared-asset"}));let a=n[s];return a?Promise.resolve(a.slice()):Promise.reject(Object.assign(new Error(`no signed bytes for "${s}"`),{code:"unsigned-bytes"}))}},storage:{getItem(s){return i("persistence","storage.getItem"),r.get(s)??null},setItem(s,a){i("persistence","storage.setItem"),r.set(s,a)},removeItem(s){i("persistence","storage.removeItem"),r.delete(s)},clear(){i("persistence","storage.clear"),r.clear()}},audio:{request(){return i("audio","audio.request"),{ok:!0}}},controller:{request(){return i("controller","controller.request"),{ok:!0}}},fullscreen:{request(){return i("fullscreen","fullscreen.request"),{ok:!0}}}};return Rn(o)}function om(e,t){return{source:`remote-cart:${e.body.id}`,publisher:e.body.publisher,version:e.body.cartVersion,signature:{id:e.signature.keyId,alg:e.signature.alg},grants:[...t]}}function sm(e){let t=Id(e.manifest);if(!t.ok)throw new Error(t.errors.map(B=>B.detail).join("; "));let n=t.manifest,r=nn(e.grants),i=[],o=new Map,s=new Set(n.body.assets.map(B=>B.url)),a={};for(let B of n.body.assets)a[B.id]={url:B.url,hash:B.hash,alg:B.alg};let c=!1,m=!1,u=!1,y;function S(){return Dt(i,me("destroyed","remote cart sandbox has been destroyed"))}async function R(){if(u)return{ok:!0};let B=await fo(n,e.keys);if(!B.ok){for(let J of B.errors)Dt(i,J);return{ok:!1,errors:B.errors}}return u=!0,{ok:!0}}async function T(){if(m)return{ok:!1,errors:[S()]};let B=await R();if(!B.ok)return B;if(n.body.capabilities){let g=n.body.capabilities,f=pr(g,{contractVersion:Math.max(1,g.runtime.minContractVersion),features:[...g.runtime.features],integrations:[...g.integrations],grants:r.list()});if(!f.ok){let I=f.errors.map(d=>me(d.code,d.detail,d.path));for(let d of I)Dt(i,d);return{ok:!1,errors:I}}}let J=Qn({declared:a,fetchBytes:async g=>e.bytesByUrl[g],hashBytes:Rr}),D=Ut({resolver:J,emitEvents:!1,wallClockTimeout:!1}),O=n.body.assets.map(g=>({id:g.id,ref:g.id,type:g.kind,integrity:`sha256-${g.hash}`,provenance:{publisher:n.body.publisher,version:n.body.cartVersion}}));try{let g=await D.preload(O);if(g.failed>0)return{ok:!1,errors:g.failures.map(I=>Dt(i,bd(I)))};if(c=!0,n.body.module&&e.modules){y=fd({allowlist:[n.body.module],modules:e.modules,capabilities:vd(r,s,e.bytesByUrl,o)});let f=y.load(n.body.module);if(!f.ok){let I=me("load-failed",f.error.detail,`${f.error.ref?.id}@${f.error.ref?.version}`);return Dt(i,I),{ok:!1,errors:[I]}}}return{ok:!0,snapshot:g}}catch(g){return hn(g)?{ok:!1,errors:[Dt(i,bd(g))]}:{ok:!1,errors:[Dt(i,me("load-failed",g instanceof Error?g.message:String(g)))]}}finally{D.dispose()}}function k(){return m?{ok:!1,errors:[S()]}:u?vd(r,s,e.bytesByUrl,o):{ok:!1,errors:[me("invalid-signature","verify the manifest HMAC via loadAssets before using capabilities")]}}function P(){return{id:n.body.id,cartVersion:n.body.cartVersion,publisher:n.body.publisher,signature:{id:n.signature.keyId,alg:n.signature.alg},requestedGrants:[...n.body.requestedGrants],grants:r.list(),assets:n.body.assets.map(B=>({id:B.id,url:B.url,hash:B.hash})),loaded:c,destroyed:m,diagnostics:i.map(B=>({...B}))}}return{listRequestedGrants:()=>[...n.body.requestedGrants],grants:r,loadAssets:T,capabilities:k,inspect:P,snapshotProvenance:()=>om(n,r.list()),destroy(){m||(m=!0,y?.destroy(),o.clear())}}}var wr=1,Ar=1,am=8,dm=["cabinet","painting","dream","wormhole","book","nested-world"],cm=["completed","aborted"],wd=["audio","controller","fullscreen"],rn="portal.lifecycle.entered",mo="portal.lifecycle.exited",go="portal.lifecycle.aborted";var um=new Set(dm),lm=new Set(cm),pm=new Set(wd),fm=new Set(vn),mm="Portal lifecycle has been destroyed";function ye(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function ho(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Nt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Cd(e){return typeof e=="string"&&um.has(e)}function gm(e){return pm.has(e)}function bo(e){return[...e].sort()}function Ad(e){return bo([...e.childGrantsBefore,...e.transferred,...e.extraChildGrants])}function yo(e){return{id:e.id,parentId:e.parentId,childId:e.childId,metaphor:e.metaphor,seed:e.seed,clock:e.clock,parentState:Nt(e.parentState),parentGrants:[...e.parentGrants],childGrants:Ad(e),childGrantsBefore:[...e.childGrantsBefore],extraChildGrants:[...e.extraChildGrants],persistence:Nt(e.persistence),transferred:[...e.transferred],enterCue:e.enterCue,exitCue:e.exitCue}}function hm(e){return{enter:t=>e.enter({...t,metaphor:"cabinet"}),exit:e.exit,abort:e.abort}}function ym(e){return{enter:t=>e.enter({...t,metaphor:"painting"}),exit:e.exit,abort:e.abort}}function bm(e={}){let t=e.group,n=e.audioBroker??t?.audioBroker,r=e.maxDepth??am,i=new Map((e.declarations??[]).map(p=>[p.id,p])),o=new Map;if(e.grants)for(let[p,E]of Object.entries(e.grants))o.set(p,E);let s=0,a=e.createId??(()=>`portal-${++s}`),c=[],m=[],u=null,y=!1,S=e.rootId??null,R=()=>{if(y)throw new Error(mm)},T=p=>{let E=o.get(p);return E||(E=nn(),o.set(p,E)),E},k=()=>c.length===0?S:c[c.length-1].childId,P=(p,E)=>{if(m.push(p),!t)return;let w={type:p,kind:"state",payload:E};try{t.publish(w)}catch{}},B=p=>{if(!t)return null;try{return Nt(t.participant(p).cart.getCartState())}catch{return null}},J=()=>{if(!t)return;let p=new Set;for(let w of c)p.add(w.parentId);let E=new Set(t.inspectParticipants().map(w=>w.id));for(let w of E)p.has(w)?t.isParticipantSuspended(w)||t.suspendParticipant(w):t.isParticipantSuspended(w)&&t.resumeParticipant(w)},D=(p,E,w)=>{let M=T(p),L=T(E),q=M.list(),_=L.list(),U=[];for(let h of wd)M.has(h)&&(M.revoke(h),L.grant(h),U.push(h));if(w)for(let h of w)L.grant(h);return O(p,E,U,w??[]),{transferred:U,parentBefore:q,childBefore:_}},O=(p,E,w,M)=>{n&&(w.includes("audio")||M.includes("audio"))&&(n.revoke(p),n.authorize(E))},g=p=>{for(let E of p)O(E.parentId,E.childId,E.transferred,E.extraChildGrants)},f=()=>n?n.inspect().authorized.slice():[],I=p=>{if(!n)return;let E=new Set(p);for(let w of n.inspect().authorized)E.has(w)||n.revoke(w);for(let w of p)n.authorize(w)},d=()=>t?t.inspectParticipants().map(p=>p.id).filter(p=>t.isParticipantSuspended(p)).sort():[],l=p=>{if(!t)return;let E=new Set(p);for(let w of t.inspectParticipants()){let M=t.isParticipantSuspended(w.id);E.has(w.id)&&!M&&t.suspendParticipant(w.id),!E.has(w.id)&&M&&t.resumeParticipant(w.id)}},b=p=>{let E=T(p.parentId),w=T(p.childId);for(let M of p.transferred)w.revoke(M),E.grant(M);for(let M of p.extraChildGrants)p.childGrantsBefore.includes(M)||w.revoke(M);n&&(p.transferred.includes("audio")||p.extraChildGrants.includes("audio"))&&(n.revoke(p.childId),n.authorize(p.parentId))},A=()=>{let p={};for(let[E,w]of o)p[E]=w.list();return{destroyed:y,activeId:y?null:k(),stack:c.map(yo),lastOutcome:u,cues:[...m],grants:p}},F=(p,E)=>{if(R(),c.length===0)return{ok:!1,errors:[ye("empty-stack","no portal is open")]};let w=c[c.length-1],M={schemaVersion:Ar,kind:p,payload:E},L=p==="aborted"?go:mo;return w.exitCue=L,b(w),c.pop(),u=M,J(),P(L,{parentId:w.parentId,childId:w.childId,metaphor:w.metaphor,kind:p}),{ok:!0,inspect:A(),outcome:M}},x=(p,E)=>p===null?{ok:!0,outcome:null}:ho(p)?p.schemaVersion!==Ar?{ok:!1,errors:[ye("invalid-version",`outcome schema must be ${Ar}`,`${E}.schemaVersion`)]}:typeof p.kind!="string"||!lm.has(p.kind)?{ok:!1,errors:[ye("invalid-snapshot","outcome.kind is required",`${E}.kind`)]}:{ok:!0,outcome:{schemaVersion:Ar,kind:p.kind,payload:p.payload}}:{ok:!1,errors:[ye("invalid-snapshot","outcome must be an object or null",E)]},H=(p,E)=>{if(!Array.isArray(p))return{ok:!1,errors:[ye("invalid-snapshot","grants must be an array",E)]};let w=[];for(let M=0;M<p.length;M++){let L=p[M];if(typeof L!="string"||!fm.has(L))return{ok:!1,errors:[ye("invalid-snapshot",typeof L=="string"?`unknown grant "${L}"`:"grant must be a string",`${E}[${M}]`)]};w.push(L)}return{ok:!0,grants:w}},K=(p,E)=>{if(!ho(p))return{ok:!1,errors:[ye("invalid-snapshot","frame must be an object",E)]};if(typeof p.id!="string"||p.id.length===0)return{ok:!1,errors:[ye("invalid-snapshot","frame.id is required",`${E}.id`)]};if(typeof p.parentId!="string"||typeof p.childId!="string")return{ok:!1,errors:[ye("invalid-snapshot","parentId and childId are required",E)]};if(!Cd(p.metaphor))return{ok:!1,errors:[ye("invalid-snapshot","unknown metaphor",`${E}.metaphor`)]};let w=H(p.parentGrants,`${E}.parentGrants`);if(!w.ok)return w;let M=H(p.childGrants,`${E}.childGrants`);if(!M.ok)return M;if(!Array.isArray(p.transferred))return{ok:!1,errors:[ye("invalid-snapshot","transferred must be an array",`${E}.transferred`)]};let L=[];for(let v=0;v<p.transferred.length;v++){let C=p.transferred[v];if(typeof C!="string"||!gm(C))return{ok:!1,errors:[ye("invalid-snapshot","invalid exclusive grant",`${E}.transferred[${v}]`)]};L.push(C)}if(p.enterCue!==rn)return{ok:!1,errors:[ye("invalid-snapshot","enterCue mismatch",`${E}.enterCue`)]};let q=p.exitCue;if(q!==null&&q!==mo&&q!==go)return{ok:!1,errors:[ye("invalid-snapshot","invalid exitCue",`${E}.exitCue`)]};if(p.seed!==null&&typeof p.seed!="string")return{ok:!1,errors:[ye("invalid-snapshot","seed must be string or null",`${E}.seed`)]};if(p.clock!==null&&typeof p.clock!="number")return{ok:!1,errors:[ye("invalid-snapshot","clock must be number or null",`${E}.clock`)]};let _=p.extraChildGrants===void 0?{ok:!0,grants:[]}:H(p.extraChildGrants,`${E}.extraChildGrants`);if(!_.ok)return _;let U=p.childGrantsBefore===void 0?{ok:!0,grants:M.grants}:H(p.childGrantsBefore,`${E}.childGrantsBefore`);if(!U.ok)return U;let h=p.childGrantsBefore===void 0?Ad({childGrantsBefore:U.grants,transferred:L,extraChildGrants:_.grants}):M.grants;return{ok:!0,frame:{id:p.id,parentId:p.parentId,childId:p.childId,metaphor:p.metaphor,seed:p.seed,clock:p.clock,parentState:p.parentState,parentGrants:w.grants,childGrants:h,childGrantsBefore:U.grants,extraChildGrants:_.grants,persistence:p.persistence??null,transferred:L,enterCue:rn,exitCue:q}}},$=p=>{let E=p;if(typeof p=="string")try{E=JSON.parse(p)}catch{return{ok:!1,errors:[ye("invalid-json","portal snapshot JSON is not parseable")]}}if(!ho(E))return{ok:!1,errors:[ye("invalid-snapshot","snapshot must be an object")]};if(E.schemaVersion!==wr)return{ok:!1,errors:[ye("invalid-version",`portal snapshot schema must be ${wr}`,"schemaVersion")]};if(!Array.isArray(E.stack))return{ok:!1,errors:[ye("invalid-snapshot","stack must be an array","stack")]};let w=[];for(let _=0;_<E.stack.length;_++){let U=K(E.stack[_],`stack[${_}]`);if(!U.ok)return U;w.push(U.frame)}if(w.length>r)return{ok:!1,errors:[ye("max-depth",`stack exceeds maxDepth ${r}`,"stack")]};let M=x(E.lastOutcome,"lastOutcome");if(!M.ok)return M;if(E.activeId!==null&&typeof E.activeId!="string")return{ok:!1,errors:[ye("invalid-snapshot","activeId must be string or null","activeId")]};if(!Array.isArray(E.cues))return{ok:!1,errors:[ye("invalid-snapshot","cues must be an array","cues")]};let L=[];for(let _=0;_<E.cues.length;_++){let U=E.cues[_];if(U!==rn&&U!==mo&&U!==go)return{ok:!1,errors:[ye("invalid-snapshot","unknown cue",`cues[${_}]`)]};L.push(U)}let q=w.length===0?S:w[w.length-1].childId;return E.activeId!==q&&E.activeId!==null&&w.length>0&&E.activeId!==w[w.length-1].childId?{ok:!1,errors:[ye("invalid-snapshot","activeId must be the top child when the stack is non-empty","activeId")]}:{ok:!0,snapshot:{schemaVersion:wr,activeId:E.activeId??q,stack:w,lastOutcome:M.outcome,cues:L}}};return{enter(p){R();let E=[];(!p.from||!p.to)&&E.push(ye("invalid-enter","from and to are required")),p.from===p.to&&E.push(ye("invalid-enter","cannot enter the same cart")),p.metaphor!==void 0&&!Cd(p.metaphor)&&E.push(ye("invalid-enter","unknown metaphor","metaphor")),c.length>=r&&E.push(ye("max-depth",`portal stack is at maxDepth ${r}`));let w=k();w&&p.from!==w&&E.push(ye("stack-order",`enter must start from the active cart "${w}"`,"from"));let M=i.get(p.from);if(M&&!M.targets.includes(p.to)&&E.push(ye("undeclared-target",`"${p.from}" does not declare target "${p.to}"`,"to")),t){try{t.participant(p.from)}catch{E.push(ye("unknown-parent",`unknown parent "${p.from}"`,"from"))}try{t.participant(p.to)}catch{E.push(ye("unknown-child",`unknown child "${p.to}"`,"to"))}}if(E.length)return{ok:!1,errors:E};let L=p.state!==void 0?Nt(p.state):B(p.from),q=p.grants??[],{transferred:_,parentBefore:U,childBefore:h}=D(p.from,p.to,q),v={id:a(),parentId:p.from,childId:p.to,metaphor:p.metaphor??"nested-world",seed:p.seed??null,clock:p.clock??null,parentState:L,parentGrants:bo(U),childGrantsBefore:bo(h),transferred:_,extraChildGrants:[...q],persistence:p.persistence??null,enterCue:rn,exitCue:null};return c.push(v),J(),P(rn,{parentId:v.parentId,childId:v.childId,metaphor:v.metaphor,seed:v.seed}),{ok:!0,inspect:A()}},exit(p){return F("completed",p)},abort(p){return F("aborted",p)},stack(){return R(),c.map(yo)},activeId(){return R(),k()},inspect(){return A()},snapshot(){return R(),{schemaVersion:wr,activeId:k(),stack:c.map(yo),lastOutcome:u,cues:[...m]}},restore(p){R();let E=$(p);if(!E.ok)return E;let w=E.snapshot;if(t){let L=[];for(let q=0;q<w.stack.length;q++){let _=w.stack[q];try{t.participant(_.parentId)}catch{L.push(ye("unknown-parent",`unknown parent "${_.parentId}"`,`stack[${q}].parentId`))}try{t.participant(_.childId)}catch{L.push(ye("unknown-child",`unknown child "${_.childId}"`,`stack[${q}].childId`))}}if(L.length)return{ok:!1,errors:L}}let M={stack:c.map(L=>({...L})),lastOutcome:u,cues:[...m],grants:new Map([...o].map(([L,q])=>[L,q.list()])),authorized:f(),suspended:d()};try{c.length=0;for(let L of w.stack)c.push({id:L.id,parentId:L.parentId,childId:L.childId,metaphor:L.metaphor,seed:L.seed,clock:L.clock,parentState:Nt(L.parentState),parentGrants:[...L.parentGrants],childGrantsBefore:[...L.childGrantsBefore],transferred:[...L.transferred],extraChildGrants:[...L.extraChildGrants],persistence:Nt(L.persistence),enterCue:rn,exitCue:L.exitCue});u=w.lastOutcome,m.length=0,m.push(...w.cues);for(let L of c)T(L.parentId).restore({schemaVersion:Mt,grants:L.parentGrants}),T(L.childId).restore({schemaVersion:Mt,grants:L.childGrantsBefore});for(let L of c){let q=T(L.parentId),_=T(L.childId);for(let U of L.transferred)q.revoke(U),_.grant(U);for(let U of L.extraChildGrants)_.grant(U)}return g(c),J(),{ok:!0,snapshot:Nt(w)}}catch(L){c.length=0,c.push(...M.stack),u=M.lastOutcome,m.length=0,m.push(...M.cues);for(let[q,_]of M.grants)T(q).restore({schemaVersion:Mt,grants:_});try{I(M.authorized),l(M.suspended)}catch{}return{ok:!1,errors:[ye("restore-failed",L instanceof Error?L.message:String(L))]}}},grantsOf:T,destroy(){if(!y){for(y=!0;c.length>0;){let p=c.pop();b(p)}if(t)try{J()}catch{}m.length=0,u=null}}}}var Pr=1,vm=1,Sm=["queued","claimed","awaiting-evaluation","retry-scheduled","ready","applied","failed","canceled","superseded"],km=["retryable","permanent","unknown"],Em=["accept","reject","revise"],Td="job.intent.submitted",So="job.state.queued",Dd="job.state.claimed",Md="job.state.progress",Od="job.state.awaiting-evaluation",Nd="job.state.retry-scheduled",_d="job.state.ready",Ld="job.state.applied",Vd="job.state.failed",Fd="job.state.canceled",$d="job.state.superseded",Im="job.diagnostic.lifecycle";var Rm=Pt,Cm=new Set(Sm),wm=new Set(km),Am=new Set(Em),Pm="Job coordinator has been destroyed",xm=512,Tm=8;function le(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function _t(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ce(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function vo(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>vo(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?ot:vo(o,t);return r}function nt(){return{version:1,fields:{jobId:{type:"string"},state:{type:"string"},definitionId:{type:"string"},correlationId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function rt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Dm(){return[rt(Za(Td,nt())),rt(pe(So,nt())),rt(pe(Dd,nt())),rt(pe(Md,nt())),rt(pe(Od,nt())),rt(pe(Nd,nt())),rt(pe(_d,nt())),rt(pe(Ld,nt())),rt(pe(Vd,nt())),rt(pe(Fd,nt())),rt(pe($d,nt())),rt(qe(Im,nt()))]}function Bd(){let e=new Map,t=new Map;return{save(n){let r=Ce(n);e.set(r.jobId,r),t.set(r.idempotencyKey,r.jobId)},get(n){let r=e.get(n);return r?Ce(r):void 0},getByIdempotencyKey(n){let r=t.get(n);return r?this.get(r):void 0},list(){return[...e.values()].map(n=>Ce(n))},replaceAll(n){e.clear(),t.clear();for(let r of n)this.save(r)}}}function Mm(){let e,t=new Set;return{bind(n){e=n},start(n){t.add(n.jobId)},cancel(n){t.delete(n)},complete(n,r){return e?(t.delete(n),e.complete(n,r)):{ok:!1,errors:[le("unbound-worker","worker is not bound")]}},fail(n,r){return e?(t.delete(n),e.fail(n,r)):{ok:!1,errors:[le("unbound-worker","worker is not bound")]}},started(){return[...t]}}}function ko(e){return _t(e)?e.schemaVersion===vm&&typeof e.kind=="string"&&e.kind.length>0&&typeof e.uri=="string"&&e.uri.length>0&&(e.contentType===void 0||typeof e.contentType=="string")&&(e.bytes===void 0||typeof e.bytes=="number"&&Number.isFinite(e.bytes)):!1}function Hd(e){return _t(e)?typeof e.value=="number"&&Number.isFinite(e.value)&&typeof e.stage=="string"&&e.stage.length>0&&(e.message===void 0||typeof e.message=="string"):!1}function Pd(e){return e===null||typeof e=="string"}function xd(e){return e===null||typeof e=="number"&&Number.isFinite(e)}function Om(e){return _t(e)?typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&typeof e.code=="string"&&e.code.length>0&&typeof e.retryability=="string"&&wm.has(e.retryability)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.detail===void 0||typeof e.detail=="string"):!1}function Nm(e){return _t(e)?typeof e.decision=="string"&&Am.has(e.decision)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.correction===void 0||typeof e.correction=="string"):!1}function _m(e){return!_t(e)||typeof e.reasonCode!="string"||e.reasonCode.length===0?!1:e.resultRef===void 0||ko(e.resultRef)}function Lm(e,t){if(!_t(e))return{ok:!1,errors:[le("invalid-job","job must be an object",t)]};let n=[],r=(i,o,s)=>{o||n.push(le("invalid-job-field",s,`${t}.${i}`))};return r("jobId",typeof e.jobId=="string"&&e.jobId.length>0,"jobId is required"),r("definitionId",typeof e.definitionId=="string"&&e.definitionId.length>0,"definitionId is required"),r("definitionVersion",typeof e.definitionVersion=="number"&&Number.isInteger(e.definitionVersion),"definitionVersion must be an integer"),r("idempotencyKey",typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0,"idempotencyKey is required"),r("state",typeof e.state=="string"&&Cm.has(e.state),"unknown job state"),r("attempt",typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&e.attempt>=0,"attempt must be an integer >= 0"),r("correlationId",typeof e.correlationId=="string"&&e.correlationId.length>0,"correlationId is required"),r("createdAt",typeof e.createdAt=="number"&&Number.isFinite(e.createdAt),"createdAt must be a number"),r("updatedAt",typeof e.updatedAt=="number"&&Number.isFinite(e.updatedAt),"updatedAt must be a number"),r("timeoutAt",typeof e.timeoutAt=="number"&&Number.isFinite(e.timeoutAt),"timeoutAt must be a number"),r("workerId",Pd(e.workerId),"workerId must be a string or null"),r("leaseUntil",xd(e.leaseUntil),"leaseUntil must be a number or null"),r("nextRetryAt",xd(e.nextRetryAt),"nextRetryAt must be a number or null"),r("supersededBy",Pd(e.supersededBy),"supersededBy must be a string or null"),r("fallbackApplied",typeof e.fallbackApplied=="boolean","fallbackApplied must be a boolean"),r("causationId",e.causationId===void 0||typeof e.causationId=="string","causationId must be a string when present"),e.resultRef!=null&&!ko(e.resultRef)&&n.push(le("invalid-result-ref","resultRef is invalid",`${t}.resultRef`)),Hd(e.progress)||n.push(le("invalid-progress","progress is invalid",`${t}.progress`)),(!Array.isArray(e.failureHistory)||!e.failureHistory.every(Om))&&n.push(le("invalid-failure-history","failureHistory entries are invalid",`${t}.failureHistory`)),(!Array.isArray(e.evaluatorHistory)||!e.evaluatorHistory.every(Nm))&&n.push(le("invalid-evaluator-history","evaluatorHistory entries are invalid",`${t}.evaluatorHistory`)),e.fallback!==void 0&&!_m(e.fallback)&&n.push(le("invalid-fallback","fallback is invalid",`${t}.fallback`)),n.length?{ok:!1,errors:n}:{ok:!0,job:Ce(e)}}function Vm(e){if(!_t(e))return{ok:!1,errors:[le("invalid-snapshot","snapshot must be a JSON object")]};if(e.schemaVersion!==Pr)return{ok:!1,errors:[le("schema-mismatch",`expected schemaVersion ${Pr}`,"schemaVersion")]};if(!Array.isArray(e.jobs))return{ok:!1,errors:[le("invalid-jobs","jobs must be an array","jobs")]};if(!Array.isArray(e.hostAcceptedJobIds)||e.hostAcceptedJobIds.some(r=>typeof r!="string"))return{ok:!1,errors:[le("invalid-accepted","hostAcceptedJobIds must be string[]","hostAcceptedJobIds")]};let t=[],n=[];for(let r=0;r<e.jobs.length;r++){let i=Lm(e.jobs[r],`jobs[${r}]`);i.ok?t.push(i.job):n.push(...i.errors)}return n.length?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:Pr,jobs:t,hostAcceptedJobIds:[...e.hostAcceptedJobIds]}}}function Fm(e){let t=[];return e.id||t.push(le("invalid-definition","definition id is required")),(!Number.isInteger(e.version)||e.version<1)&&t.push(le("invalid-definition","definition version must be an integer >= 1",e.id)),(!Number.isInteger(e.retry.maxAttempts)||e.retry.maxAttempts<1)&&t.push(le("invalid-retry","maxAttempts must be >= 1",e.id)),(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)&&t.push(le("invalid-timeout","timeoutMs must be > 0",e.id)),(!Number.isFinite(e.leaseMs)||e.leaseMs<=0)&&t.push(le("invalid-lease","leaseMs must be > 0",e.id)),e.fallback?.reasonCode||t.push(le("invalid-fallback","fallback.reasonCode is required",e.id)),t}function $m(e){switch(e){case"queued":return So;case"claimed":return Dd;case"awaiting-evaluation":return Od;case"retry-scheduled":return Nd;case"ready":return _d;case"applied":return Ld;case"failed":return Vd;case"canceled":return Fd;case"superseded":return $d}}function Bm(e){let t=new Map;for(let d of e.definitions){let l=Fm(d);if(l.length)throw new Error(l.map(b=>b.detail).join("; "));t.set(d.id,Ce(d))}let n=e.persistence??Bd(),r=e.now??(()=>Date.now()),i=0,o=e.createId??(()=>`job-${++i}`),s=e.maxCorrectionChars??xm,a=e.maxFailureHistory??Tm,c=new Set(Rm),m=!1,u=[],y=new Set,S=e.worker,R=()=>{if(m)throw new Error(Pm)},T=d=>{n.save(d)},k=(d,l,b)=>{u.push(d);let A={jobId:l.jobId,state:l.state,definitionId:l.definitionId,correlationId:l.correlationId};b&&(A.reasonCode=b);let F={type:d,kind:d.includes(".intent.")?"intent":d.includes(".diagnostic.")?"diagnostic":"state",payload:A,correlationId:l.correlationId,causationId:l.causationId,idempotencyKey:`${d}:${l.jobId}:${l.updatedAt}`};e.router?.publish(F)},P=(d,l,b)=>(d.state=l,d.updatedAt=r(),T(d),k($m(l),d,b),d),B=d=>d==="applied"||d==="failed"||d==="canceled"||d==="superseded",J=(d,l)=>{let b=d.retry.backoffMs;return b.length?b[Math.min(l-1,b.length-1)]??0:0},D=(d,l)=>l.retryability==="permanent"?"permanent":d.retry.retryableCodes.includes(l.code)||l.retryability==="retryable"?"retryable":l.retryability,O=(d,l)=>(d.fallbackApplied=!0,d.fallback=Ce(l.fallback),l.fallback.resultRef&&(d.resultRef=Ce(l.fallback.resultRef)),P(d,"failed",l.fallback.reasonCode)),g=(d,l,b)=>(d.failureHistory=[...d.failureHistory,b].slice(-a),d.workerId=null,d.leaseUntil=null,d.attempt>=l.retry.maxAttempts||b.retryability==="permanent"?O(d,l):(d.nextRetryAt=r()+J(l,d.attempt),P(d,"retry-scheduled",b.code))),f=(d,l,b)=>{d.workerId=l,d.leaseUntil=r()+b.leaseMs,d.nextRetryAt=null,d.attempt+=1;let A=P(d,"claimed");return S?.start({jobId:A.jobId,workerId:l,definitionId:A.definitionId,request:Ce(A.request),attempt:A.attempt}),A},I={submit(d){R();let l=[];d.idempotencyKey||l.push(le("missing-idempotency","idempotencyKey is required")),d.correlationId||l.push(le("missing-correlation","correlationId is required"));let b=t.get(d.definitionId);if(b||l.push(le("unknown-definition",`unknown definition "${d.definitionId}"`)),l.length||!b)return{ok:!1,errors:l};let A=n.getByIdempotencyKey(d.idempotencyKey);if(A)return{ok:!0,job:A};let F=r(),x={jobId:o(),definitionId:b.id,definitionVersion:b.version,idempotencyKey:d.idempotencyKey,state:"queued",request:Ce(d.request),resultRef:null,progress:{value:0,stage:"queued"},attempt:0,failureHistory:[],evaluatorHistory:[],correlationId:d.correlationId,causationId:d.causationId,workerId:null,leaseUntil:null,createdAt:F,updatedAt:F,timeoutAt:F+b.timeoutMs,nextRetryAt:null,supersededBy:null,fallbackApplied:!1};if(T(x),k(Td,x),k(So,x),d.supersedeJobId){let H=n.get(d.supersedeJobId);H&&!B(H.state)&&(H.supersededBy=x.jobId,S?.cancel?.(H.jobId),P(H,"superseded","superseded"))}return{ok:!0,job:Ce(x)}},claim(d){if(R(),!d)return{ok:!1,errors:[le("missing-worker","workerId is required")]};I.tick();let b=n.list().filter(F=>F.state==="queued"||F.state==="retry-scheduled"&&(F.nextRetryAt??0)<=r()).sort((F,x)=>F.createdAt-x.createdAt)[0];if(!b)return{ok:!1,errors:[le("empty-queue","no claimable jobs")]};let A=t.get(b.definitionId);return A?{ok:!0,job:Ce(f(b,d,A))}:{ok:!1,errors:[le("unknown-definition",b.definitionId)]}},reportProgress(d,l){R();let b=n.get(d);return b?b.state!=="claimed"?{ok:!1,errors:[le("invalid-state",`cannot report progress in ${b.state}`)]}:Hd(l)?l.value<b.progress.value?{ok:!1,errors:[le("non-monotonic","progress.value must not decrease")]}:(b.progress=Ce(l),b.updatedAt=r(),T(b),k(Md,b),{ok:!0,job:Ce(b)}):{ok:!1,errors:[le("invalid-progress","progress value/stage required")]}:{ok:!1,errors:[le("unknown-job",d)]}},heartbeat(d){R();let l=n.get(d);if(!l)return{ok:!1,errors:[le("unknown-job",d)]};if(l.state!=="claimed"||!l.workerId)return{ok:!1,errors:[le("invalid-state","heartbeat requires a claimed job")]};let b=t.get(l.definitionId);return b?(l.leaseUntil=r()+b.leaseMs,l.updatedAt=r(),T(l),{ok:!0,job:Ce(l)}):{ok:!1,errors:[le("unknown-definition",l.definitionId)]}},complete(d,l){R();let b=n.get(d);if(!b)return{ok:!1,errors:[le("unknown-job",d)]};if(b.state!=="claimed")return{ok:!1,errors:[le("invalid-state",`cannot complete in ${b.state}`)]};if(!ko(l))return{ok:!1,errors:[le("invalid-result-ref","result must be a reference")]};let A=t.get(b.definitionId);return A&&l.kind!==A.resultKind?{ok:!1,errors:[le("result-kind",`expected result kind "${A.resultKind}"`)]}:(b.resultRef=Ce(l),b.workerId=null,b.leaseUntil=null,b.progress={value:Math.max(b.progress.value,1),stage:"awaiting-evaluation"},{ok:!0,job:Ce(P(b,"awaiting-evaluation"))})},fail(d,l){R();let b=n.get(d);if(!b)return{ok:!1,errors:[le("unknown-job",d)]};if(b.state!=="claimed"&&b.state!=="queued")return{ok:!1,errors:[le("invalid-state",`cannot fail in ${b.state}`)]};let A=t.get(b.definitionId);if(!A)return{ok:!1,errors:[le("unknown-definition",b.definitionId)]};let F=D(A,l),x={attempt:b.attempt,code:l.code,retryability:F,at:r(),detail:l.detail};return S?.cancel?.(b.jobId),{ok:!0,job:Ce(g(b,A,x))}},evaluate(d,l,b){R();let A=n.get(d);if(!A)return{ok:!1,errors:[le("unknown-job",d)]};if(A.state!=="awaiting-evaluation")return{ok:!1,errors:[le("invalid-state","evaluate requires awaiting-evaluation")]};let F=t.get(A.definitionId);if(!F)return{ok:!1,errors:[le("unknown-definition",A.definitionId)]};if(b!==void 0&&b.length>s)return{ok:!1,errors:[le("correction-bound",`correction exceeds ${s} chars`)]};if(A.evaluatorHistory=[...A.evaluatorHistory,{decision:l,at:r(),correction:b?.slice(0,s)}],l==="accept")return A.progress={value:1,stage:"ready"},{ok:!0,job:Ce(P(A,"ready"))};let x={attempt:A.attempt,code:l==="revise"?"evaluator-revise":"evaluator-reject",retryability:"retryable",at:r(),detail:b};return{ok:!0,job:Ce(g(A,F,x))}},cancel(d){R();let l=n.get(d);return l?B(l.state)||l.state==="applied"?{ok:!1,errors:[le("invalid-state",`cannot cancel ${l.state}`)]}:(S?.cancel?.(l.jobId),l.workerId=null,l.leaseUntil=null,{ok:!0,job:Ce(P(l,"canceled","canceled"))}):{ok:!1,errors:[le("unknown-job",d)]}},recoverStale(){R();let d=[],l=r();for(let b of n.list()){if(b.state!=="claimed"||b.leaseUntil==null||b.leaseUntil>l)continue;let A=t.get(b.definitionId);if(!A)continue;S?.cancel?.(b.jobId);let F={attempt:b.attempt,code:"stale-lease",retryability:"retryable",at:l};d.push(Ce(g(b,A,F)))}return d},tick(){R();let d=[];d.push(...I.recoverStale());let l=r();for(let b of n.list())if(!(B(b.state)||b.state==="ready"||b.state==="applied")&&l>=b.timeoutAt){let A=t.get(b.definitionId);if(!A)continue;let F={attempt:b.attempt,code:"timeout",retryability:"permanent",at:l};S?.cancel?.(b.jobId),d.push(Ce(g(b,A,F)))}return d},accept(d){R();let l=n.get(d);return l?l.state!=="ready"?{ok:!1,errors:[le("not-ready","host may accept only ready jobs")]}:(y.add(l.jobId),{ok:!0,job:Ce(P(l,"applied"))}):{ok:!1,errors:[le("unknown-job",d)]}},get(d){return R(),n.get(d)},getByIdempotencyKey(d){return R(),n.getByIdempotencyKey(d)},inspect(){return R(),{destroyed:!1,jobs:n.list(),events:[...u]}},snapshot(){return R(),{schemaVersion:Pr,jobs:n.list(),hostAcceptedJobIds:[...y]}},restore(d){R();let l=Vm(d);if(!l.ok)return l;let b=n.list(),A=[...y];try{n.replaceAll(l.snapshot.jobs),y.clear();for(let F of l.snapshot.hostAcceptedJobIds)y.add(F);return{ok:!0,snapshot:Ce(l.snapshot)}}catch{n.replaceAll(b),y.clear();for(let F of A)y.add(F);return{ok:!1,errors:[le("restore-failed","restore rolled back")]}}},exportTrace(){return R(),{jobs:n.list().map(d=>vo(d,c)),events:[...u]}},destroy(){m=!0}};return S?.bind({reportProgress:(d,l)=>I.reportProgress(d,l),complete:(d,l)=>I.complete(d,l),fail:(d,l)=>I.fail(d,l),heartbeat:d=>I.heartbeat(d)}),I}var An=1,Co=["room","region","landmark","frontier"],Hm=["local","regional"],qm=["canonical","discoverable","hidden"],Wm=["open","locked","disabled"],Gm=["character","party"],Km=["available","busy","traveling"],Wd="world.graph.state.node-added",Gd="world.graph.state.edge-added",Kd="world.graph.state.discovered",Io="world.graph.state.transit",Ro="world.graph.diagnostic.lifecycle";var jm=new Set(Co),Um=new Set(Hm),Jm=new Set(qm),jd=new Set(Wm),zm=new Set(Gm),Ud=new Set(Km),Ym="World graph has been destroyed",Xm=4096;function ne(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function mt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function it(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function on(e){return typeof e=="number"&&Number.isFinite(e)}function He(e){return typeof e=="string"&&e.length>0}function wo(e,t,n){if(e!==void 0){if(!mt(e)){n.push(ne("invalid-metadata","metadata must be a JSON object",t));return}return it(e)}}function Qm(e,t,n){if(e!==void 0){if(!mt(e)){n.push(ne("invalid-requirements","requirements must be a JSON object",t));return}return it(e)}}function Zm(e,t,n){if(e===void 0)return;if(!mt(e)){n.push(ne("invalid-cost","cost must be a JSON object",t));return}let r={};for(let[i,o]of Object.entries(e)){if(!on(o)){n.push(ne("invalid-cost",`cost.${i} must be finite`,t));continue}r[i]=o}return r}function Jd(e,t){if(!mt(e))return{ok:!1,errors:[ne("invalid-node","node must be an object",t)]};let n=[];He(e.id)||n.push(ne("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(ne("invalid-version","version must be an integer \u2265 1",`${t}.version`)),jm.has(e.kind)||n.push(ne("invalid-kind","unknown node kind",`${t}.kind`)),Um.has(e.mapLayer)||n.push(ne("invalid-map-layer","unknown mapLayer",`${t}.mapLayer`)),e.frontier!==void 0&&typeof e.frontier!="boolean"&&n.push(ne("invalid-frontier","frontier must be boolean",`${t}.frontier`));let r=wo(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let i={id:e.id,version:e.version,kind:e.kind,mapLayer:e.mapLayer};return e.frontier===!0&&(i.frontier=!0),r&&(i.metadata=r),{ok:!0,node:i}}function zd(e,t){if(!mt(e))return{ok:!1,errors:[ne("invalid-edge","edge must be an object",t)]};let n=[];He(e.id)||n.push(ne("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(ne("invalid-version","version must be an integer \u2265 1",`${t}.version`)),He(e.from)||n.push(ne("invalid-from","from is required",`${t}.from`)),He(e.to)||n.push(ne("invalid-to","to is required",`${t}.to`)),typeof e.directed!="boolean"&&n.push(ne("invalid-directed","directed must be boolean",`${t}.directed`)),He(e.kind)||n.push(ne("invalid-kind","kind is required",`${t}.kind`)),Jm.has(e.visibility)||n.push(ne("invalid-visibility","unknown visibility",`${t}.visibility`)),jd.has(e.access)||n.push(ne("invalid-access","unknown access",`${t}.access`));let r=Qm(e.requirements,`${t}.requirements`,n),i=Zm(e.cost,`${t}.cost`,n),o=wo(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let s={id:e.id,version:e.version,from:e.from,to:e.to,directed:e.directed,kind:e.kind,visibility:e.visibility,access:e.access};return r&&(s.requirements=r),i&&(s.cost=i),o&&(s.metadata=o),{ok:!0,edge:s}}function Yd(e,t){if(!mt(e))return{ok:!1,errors:[ne("invalid-transit","transit must be an object",t)]};let n=[];return He(e.originNodeId)||n.push(ne("invalid-origin","originNodeId is required",`${t}.originNodeId`)),He(e.destinationNodeId)||n.push(ne("invalid-destination","destinationNodeId is required",`${t}.destinationNodeId`)),(!Array.isArray(e.routeEdgeIds)||e.routeEdgeIds.some(r=>!He(r)))&&n.push(ne("invalid-route","routeEdgeIds must be strings",`${t}.routeEdgeIds`)),on(e.departedAt)||n.push(ne("invalid-time","departedAt must be finite semantic time",`${t}.departedAt`)),on(e.expectedArrival)||n.push(ne("invalid-time","expectedArrival must be finite semantic time",`${t}.expectedArrival`)),n.length?{ok:!1,errors:n}:{ok:!0,transit:{originNodeId:e.originNodeId,destinationNodeId:e.destinationNodeId,routeEdgeIds:[...e.routeEdgeIds],departedAt:e.departedAt,expectedArrival:e.expectedArrival}}}function Xd(e,t){if(!mt(e))return{ok:!1,errors:[ne("invalid-entity","entity must be an object",t)]};let n=[];He(e.id)||n.push(ne("invalid-id","id is required",`${t}.id`)),zm.has(e.kind)||n.push(ne("invalid-kind","unknown entity kind",`${t}.kind`)),Ud.has(e.status)||n.push(ne("invalid-status","unknown status",`${t}.status`)),e.locationNodeId!==null&&!He(e.locationNodeId)&&n.push(ne("invalid-location","locationNodeId must be string or null",`${t}.locationNodeId`));let r=null;if(e.transit!==null&&e.transit!==void 0){let s=Yd(e.transit,`${t}.transit`);s.ok?r=s.transit:n.push(...s.errors)}let i=wo(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let o={id:e.id,kind:e.kind,status:e.status,locationNodeId:e.locationNodeId??null,transit:r};return i&&(o.metadata=i),{ok:!0,entity:o}}function eg(e,t){if(!mt(e))return{ok:!1,errors:[ne("invalid-discovery","discovery must be an object",t)]};let n=[];return He(e.observerId)||n.push(ne("invalid-observer","observerId is required",`${t}.observerId`)),(!Array.isArray(e.nodeIds)||e.nodeIds.some(r=>!He(r)))&&n.push(ne("invalid-node-ids","nodeIds must be strings",`${t}.nodeIds`)),(!Array.isArray(e.edgeIds)||e.edgeIds.some(r=>!He(r)))&&n.push(ne("invalid-edge-ids","edgeIds must be strings",`${t}.edgeIds`)),n.length?{ok:!1,errors:n}:{ok:!0,discovery:{observerId:e.observerId,nodeIds:[...e.nodeIds],edgeIds:[...e.edgeIds]}}}function tg(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[ne("invalid-json","snapshot JSON is invalid")]}}if(!mt(n))return{ok:!1,errors:[ne("invalid-snapshot","snapshot must be a JSON object")]};let r=n.schemaVersion;if(typeof r=="number"&&r<An){let T=n,k=r;for(;k<An;){let P=t.find(B=>B.from===k&&B.to===k+1);if(!P)return{ok:!1,errors:[ne("unsupported-schema",`no migration from schema ${k}`)]};T=P.migrate(T),k+=1}if(n=T,!mt(n))return{ok:!1,errors:[ne("invalid-snapshot","migrated snapshot must be an object")]};r=n.schemaVersion}if(r!==An)return{ok:!1,errors:[ne("unsupported-schema","unsupported world graph snapshot schema")]};if(!He(n.graphId))return{ok:!1,errors:[ne("invalid-graph-id","graphId is required","graphId")]};if(!Array.isArray(n.nodes))return{ok:!1,errors:[ne("invalid-nodes","nodes must be an array","nodes")]};if(!Array.isArray(n.edges))return{ok:!1,errors:[ne("invalid-edges","edges must be an array","edges")]};if(!Array.isArray(n.entities))return{ok:!1,errors:[ne("invalid-entities","entities must be an array","entities")]};if(!Array.isArray(n.discovery))return{ok:!1,errors:[ne("invalid-discovery","discovery must be an array","discovery")]};let i=[],o=[],s=new Set;n.nodes.forEach((T,k)=>{let P=Jd(T,`nodes[${k}]`);if(!P.ok){i.push(...P.errors);return}if(s.has(P.node.id)){i.push(ne("duplicate-id","duplicate node id",`nodes[${k}].id`));return}s.add(P.node.id),o.push(P.node)});let a=[],c=new Set;n.edges.forEach((T,k)=>{let P=zd(T,`edges[${k}]`);if(!P.ok){i.push(...P.errors);return}if(c.has(P.edge.id)){i.push(ne("duplicate-id","duplicate edge id",`edges[${k}].id`));return}s.has(P.edge.id)&&i.push(ne("id-collision","edge id collides with a node id",`edges[${k}].id`)),c.add(P.edge.id),a.push(P.edge)});let m=[],u=new Set;n.entities.forEach((T,k)=>{let P=Xd(T,`entities[${k}]`);if(!P.ok){i.push(...P.errors);return}if(u.has(P.entity.id)){i.push(ne("duplicate-id","duplicate entity id",`entities[${k}].id`));return}u.add(P.entity.id),m.push(P.entity)});let y=[],S=new Set;if(n.discovery.forEach((T,k)=>{let P=eg(T,`discovery[${k}]`);if(!P.ok){i.push(...P.errors);return}if(S.has(P.discovery.observerId)){i.push(ne("duplicate-observer","duplicate observerId",`discovery[${k}].observerId`));return}S.add(P.discovery.observerId),y.push(P.discovery)}),i.length)return{ok:!1,errors:i};let R=xr(o,a,m,y);return R.length?{ok:!1,errors:R}:{ok:!0,snapshot:{schemaVersion:An,graphId:n.graphId,nodes:o,edges:a,entities:m,discovery:y}}}function xr(e,t,n,r){let i=new Set(e.map(a=>a.id)),o=new Set(t.map(a=>a.id)),s=[];for(let a of t)i.has(a.from)||s.push(ne("missing-node",`edge ${a.id} from unknown node`,`edges.${a.id}.from`)),i.has(a.to)||s.push(ne("missing-node",`edge ${a.id} to unknown node`,`edges.${a.id}.to`));for(let a of n)if(a.locationNodeId&&!i.has(a.locationNodeId)&&s.push(ne("missing-node",`entity ${a.id} location unknown`,`entities.${a.id}.locationNodeId`)),a.transit){i.has(a.transit.originNodeId)||s.push(ne("missing-node","transit origin unknown",`entities.${a.id}.transit.originNodeId`)),i.has(a.transit.destinationNodeId)||s.push(ne("missing-node","transit destination unknown",`entities.${a.id}.transit.destinationNodeId`));for(let c of a.transit.routeEdgeIds)o.has(c)||s.push(ne("missing-edge",`transit route missing ${c}`,`entities.${a.id}.transit.routeEdgeIds`))}for(let a of r){for(let c of a.nodeIds)i.has(c)||s.push(ne("missing-node",`discovery references unknown node ${c}`,`discovery.${a.observerId}`));for(let c of a.edgeIds)o.has(c)||s.push(ne("missing-edge",`discovery references unknown edge ${c}`,`discovery.${a.observerId}`))}return s}function Eo(e){return[...e].map(t=>it(t)).sort((t,n)=>t.id.localeCompare(n.id))}function qd(e){return[...e].map(t=>it(t)).sort((t,n)=>t.id.localeCompare(n.id))}function ng(e){return e.directed?[{from:e.from,to:e.to}]:[{from:e.from,to:e.to},{from:e.to,to:e.from}]}function Cn(){return{version:1,fields:{graphId:{type:"string",optional:!0},nodeId:{type:"string",optional:!0},edgeId:{type:"string",optional:!0},observerId:{type:"string",optional:!0},entityId:{type:"string",optional:!0}}}}function wn(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function rg(){return[wn(pe(Wd,Cn())),wn(pe(Gd,Cn())),wn(pe(Kd,Cn())),wn(pe(Io,Cn())),wn(qe(Ro,Cn()))]}function ig(e={}){let t=e.migrations??[],n=e.maxPathVisits??Xm,r=e.source??"world-graph",i=e.graphId??"world",o=!1,s=new Map,a=new Map,c=new Map,m=new Map,u=[],y=[];function S(){if(o)throw new Error(Ym)}function R(d,l){let b={type:d,payload:l,source:r,kind:d===Ro?"diagnostic":void 0};u.push(b),y.push(d),e.router?.publish(b)}function T(d){return R(Ro,{graphId:i}),{ok:!1,errors:d}}function k(){let d=new Map,l=b=>(d.has(b)||d.set(b,[]),d.get(b));for(let b of s.values())l(b.id);for(let b of a.values())for(let A of ng(b))l(A.from).push({edge:b,to:A.to});for(let b of d.values())b.sort((A,F)=>A.edge.id.localeCompare(F.edge.id)||A.to.localeCompare(F.to));return d}function P(d,l){let b=Jd(d,`nodes.${d.id??"?"}`);return b.ok?s.get(b.node.id)?(l.push(ne("duplicate-id",`node ${b.node.id} already exists`,`nodes.${b.node.id}`)),!1):a.has(b.node.id)?(l.push(ne("id-collision","node id collides with an edge id",`nodes.${b.node.id}`)),!1):(s.set(b.node.id,b.node),R(Wd,{graphId:i,nodeId:b.node.id}),!0):(l.push(...b.errors),!1)}function B(d,l){let b=zd(d,`edges.${d.id??"?"}`);return b.ok?a.has(b.edge.id)?(l.push(ne("duplicate-id",`edge ${b.edge.id} already exists`,`edges.${b.edge.id}`)),!1):s.has(b.edge.id)?(l.push(ne("id-collision","edge id collides with a node id",`edges.${b.edge.id}`)),!1):!s.has(b.edge.from)||!s.has(b.edge.to)?(l.push(ne("missing-node",`edge ${b.edge.id} references unknown node`,`edges.${b.edge.id}`)),!1):(a.set(b.edge.id,b.edge),R(Gd,{graphId:i,edgeId:b.edge.id}),!0):(l.push(...b.errors),!1)}function J(d){let l=m.get(d);return l||(l={nodeIds:new Set,edgeIds:new Set},m.set(d,l)),l}function D(d,l){return l.visibility==="canonical"?!0:m.get(d)?.edgeIds.has(l.id)===!0}function O(d,l){if(m.get(d)?.nodeIds.has(l.id))return!0;if(l.kind==="frontier"||l.frontier){for(let b of a.values())if(D(d,b)&&(b.from===l.id||b.to===l.id)){let A=b.from===l.id?b.to:b.from;if(m.get(d)?.nodeIds.has(A))return!0}}return!1}function g(d,l,b,A){let F=new Map;for(let $ of s.values())b($,null)&&F.set($.id,it($));let x=[];for(let $ of a.values())!F.has($.from)||!F.has($.to)||b(F.get($.from),$)&&x.push(it($));let H=Eo([...F.values()].filter($=>$.kind==="frontier"||$.frontier===!0)),K=[...c.values()].filter($=>!!($.locationNodeId&&F.has($.locationNodeId)||$.transit&&(F.has($.transit.originNodeId)||F.has($.transit.destinationNodeId)))).map($=>it($)).sort(($,p)=>$.id.localeCompare(p.id));return{kind:d,observerId:l,focusNodeId:A,nodes:Eo(F.values()),edges:qd(x),frontiers:H,entities:K}}function f(d,l,b){let A=new Set;if(!s.has(d))return A;let F=k(),x=[{id:d,dist:0}],H=new Set([d]);for(A.add(d);x.length;){let K=x.shift();if(!(K.dist>=l))for(let $ of F.get(K.id)??[]){if(!D(b,$.edge)&&$.edge.visibility!=="canonical"||H.has($.to))continue;let p=s.get($.to);p&&(p.mapLayer!=="local"&&p.kind!=="frontier"&&!p.frontier||(H.add($.to),A.add($.to),x.push({id:$.to,dist:K.dist+1})))}}return A}function I(d,l,b,A,F){let x=A?.maxVisits??n,H=k(),K=new Map([[d,0]]),$=new Map,p=new Set,E=0;for(;E<x;){let w=null,M=1/0;for(let[L,q]of K)p.has(L)||(q<M||q===M&&(w===null||L.localeCompare(w)<0))&&(w=L,M=q);if(w===null||F!==null&&w===F)break;p.add(w),E+=1;for(let L of H.get(w)??[]){if(!l.canTraverse(L.edge,w,L.to,b))continue;let q=l.cost(L.edge,w,L.to,b);if(!Number.isFinite(q)||q<0)continue;let _=M+q,U=K.get(L.to);(U===void 0||_<U||_===U&&L.edge.id.localeCompare($.get(L.to)?.edge.id??L.edge.id)<0)&&(K.set(L.to,_),$.set(L.to,{node:w,edge:L.edge,cost:q}))}}return{dist:K,prev:$}}return{addNode(d){S();let l=[];return P(d,l),l.length?T(l):{ok:!0}},addEdge(d){S();let l=[];return B(d,l),l.length?T(l):{ok:!0}},applyPatch(d){S();let l=new Map(s),b=new Map(a),A=u.length,F=y.length,x=[];for(let H of d.nodes??[])P(H,x);for(let H of d.edges??[])B(H,x);if(x.length){s.clear(),a.clear();for(let[H,K]of l)s.set(H,K);for(let[H,K]of b)a.set(H,K);return u.length=A,y.length=F,T(x)}return{ok:!0}},removeNode(d){if(S(),!s.has(d))return T([ne("unknown-node",d)]);let l=xr([...s.values()].filter(A=>A.id!==d),[...a.values()].filter(A=>A.from!==d&&A.to!==d),[...c.values()],[...m.entries()].map(([A,F])=>({observerId:A,nodeIds:[...F.nodeIds].filter(x=>x!==d),edgeIds:[...F.edgeIds]}))).filter(A=>A.code!=="missing-node"||!A.detail.includes(d));if(l.length)return T(l);let b=[...a.values()].filter(A=>A.from===d||A.to===d);if(b.length)return T([ne("node-in-use",`remove incident edges first (${b[0].id})`)]);for(let A of c.values())if(A.locationNodeId===d||A.transit?.originNodeId===d||A.transit?.destinationNodeId===d)return T([ne("node-in-use",`entity ${A.id} still references node`)]);s.delete(d);for(let A of m.values())A.nodeIds.delete(d);return{ok:!0}},removeEdge(d){if(S(),!a.has(d))return T([ne("unknown-edge",d)]);for(let l of c.values())if(l.transit?.routeEdgeIds.includes(d))return T([ne("edge-in-use",`entity ${l.id} still references edge`)]);a.delete(d);for(let l of m.values())l.edgeIds.delete(d);return{ok:!0}},setEdgeAccess(d,l){S();let b=a.get(d);return b?jd.has(l)?(a.set(d,{...b,access:l}),{ok:!0}):T([ne("invalid-access",l)]):T([ne("unknown-edge",d)])},discover(d,l){if(S(),!He(d))return T([ne("invalid-observer","observerId is required")]);let b=[];for(let F of l.nodeIds??[])s.has(F)||b.push(ne("unknown-node",F));for(let F of l.edgeIds??[])a.has(F)||b.push(ne("unknown-edge",F));if(b.length)return T(b);let A=J(d);for(let F of l.nodeIds??[])A.nodeIds.add(F);for(let F of l.edgeIds??[])A.edgeIds.add(F);return R(Kd,{graphId:i,observerId:d}),{ok:!0}},upsertEntity(d){S();let l=Xd(d,`entities.${d.id??"?"}`);if(!l.ok)return T(l.errors);let b=xr([...s.values()],[...a.values()],[l.entity],[]);return b.length?T(b):(c.set(l.entity.id,l.entity),{ok:!0})},startTransit(d,l,b="traveling"){S();let A=c.get(d);if(!A)return T([ne("unknown-entity",d)]);let F=Yd(l,"transit");if(!F.ok)return T(F.errors);let x={...A,status:b,locationNodeId:null,transit:F.transit},H=xr([...s.values()],[...a.values()],[x],[]);return H.length?T(H):(c.set(d,x),R(Io,{graphId:i,entityId:d}),{ok:!0})},completeTransit(d,l){S();let b=c.get(d);return b?b.transit?on(l)?(c.set(d,{...b,status:"available",locationNodeId:b.transit.destinationNodeId,transit:null}),R(Io,{graphId:i,entityId:d,semanticTime:l}),{ok:!0}):T([ne("invalid-time","semanticTime must be finite")]):T([ne("not-traveling",d)]):T([ne("unknown-entity",d)])},setEntityStatus(d,l){S();let b=c.get(d);return b?Ud.has(l)?(c.set(d,{...b,status:l}),{ok:!0}):T([ne("invalid-status",l)]):T([ne("unknown-entity",d)])},getNode(d){S();let l=s.get(d);return l?it(l):void 0},getEdge(d){S();let l=a.get(d);return l?it(l):void 0},getEntity(d){S();let l=c.get(d);return l?it(l):void 0},projectCanonical(){return S(),g("canonical",void 0,()=>!0)},projectKnown(d){return S(),g("known",d,(l,b)=>b?D(d,b):O(d,l))},projectLocal(d,l,b=8){S();let A=f(l,b,d);return g("local",d,(F,x)=>A.has(F.id)?x?D(d,x)||x.visibility==="canonical":O(d,F)||A.has(F.id):!1,l)},projectRegional(d){return S(),g("regional",d,(l,b)=>l.mapLayer!=="regional"&&l.kind!=="frontier"&&!l.frontier?!1:b?D(d,b):O(d,l))},findPath(d,l,b,A,F){if(S(),!s.has(d))return{ok:!1,errors:[ne("unknown-node",d)]};if(!s.has(l))return{ok:!1,errors:[ne("unknown-node",l)]};if(!on(A.semanticTime))return{ok:!1,errors:[ne("invalid-time","semanticTime must be finite")]};if(d===l)return{ok:!0,path:{from:d,to:l,nodeIds:[d],steps:[],totalCost:0}};let{dist:x,prev:H}=I(d,b,A,F,l);if(!x.has(l))return{ok:!1,errors:[ne("unreachable",l)]};let K=[],$=[l],p=l;for(;p!==d;){let E=H.get(p);if(!E)return{ok:!1,errors:[ne("unreachable",l)]};K.push({edgeId:E.edge.id,from:E.node,to:p,cost:E.cost}),p=E.node,$.push(p)}return K.reverse(),$.reverse(),{ok:!0,path:{from:d,to:l,nodeIds:$,steps:K,totalCost:x.get(l)}}},reachable(d,l,b,A){if(S(),!s.has(d)||!on(b.semanticTime))return{nodeIds:[]};let{dist:F}=I(d,l,b,A,null);return{nodeIds:[...F.keys()].sort((x,H)=>x.localeCompare(H))}},inspect(){return S(),{destroyed:!1,graphId:i,nodeCount:s.size,edgeCount:a.size,entityCount:c.size,observerCount:m.size,events:[...y]}},snapshot(){return S(),{schemaVersion:An,graphId:i,nodes:Eo(s.values()),edges:qd(a.values()),entities:[...c.values()].map(d=>it(d)).sort((d,l)=>d.id.localeCompare(l.id)),discovery:[...m.entries()].map(([d,l])=>({observerId:d,nodeIds:[...l.nodeIds].sort((b,A)=>b.localeCompare(A)),edgeIds:[...l.edgeIds].sort((b,A)=>b.localeCompare(A))})).sort((d,l)=>d.observerId.localeCompare(l.observerId))}},restore(d){S();let l=tg(d,t);if(!l.ok)return l;let b={graphId:i,nodes:new Map(s),edges:new Map(a),entities:new Map(c),discovery:new Map([...m.entries()].map(([A,F])=>[A,{nodeIds:new Set(F.nodeIds),edgeIds:new Set(F.edgeIds)}]))};try{i=l.snapshot.graphId,s.clear(),a.clear(),c.clear(),m.clear();for(let A of l.snapshot.nodes)s.set(A.id,A);for(let A of l.snapshot.edges)a.set(A.id,A);for(let A of l.snapshot.entities)c.set(A.id,A);for(let A of l.snapshot.discovery)m.set(A.observerId,{nodeIds:new Set(A.nodeIds),edgeIds:new Set(A.edgeIds)});return{ok:!0,snapshot:it(l.snapshot)}}catch{i=b.graphId,s.clear(),a.clear(),c.clear(),m.clear();for(let[A,F]of b.nodes)s.set(A,F);for(let[A,F]of b.edges)a.set(A,F);for(let[A,F]of b.entities)c.set(A,F);for(let[A,F]of b.discovery)m.set(A,F);return{ok:!1,errors:[ne("restore-failed","restore rolled back")]}}},events(){return S(),[...u]},destroy(){o=!0,s.clear(),a.clear(),c.clear(),m.clear()}}}var Or=1,_r=1,og=["add","replace","revise","remove","tombstone","link","unlink"],sg=["base-revision","entity-revision","entity-hash","identity-required","identity-absent","capability","schema"],Mo="world.patch.state.accepted",nc="world.patch.state.rejected",rc="world.patch.state.superseded",Nr="world.patch.diagnostic.lifecycle";var ag=["invalid-schema","unknown-field","unknown-op","missing-field","missing-ref","referential-integrity","stale-base","precondition-failed","asset-unavailable","content-unavailable","binding-unavailable","cycle","over-limit","idempotency-conflict","superseded","invalid-snapshot","invalid-version","destroyed","domain","capability-denied","schema-mismatch","identity-required","identity-absent","entity-revision","entity-hash","duplicate-id","graph-apply-failed","publish-failed"],dg=Pt,Qd=new Set(og),cg=new Set(sg),Kb=new Set(ag),Po=new Set(Co),xo=new Set(["exit","edge","graph-edge"]),ug="World patch applier has been destroyed",lg=new Set(["patchId","schemaVersion","baseRevision","idempotencyKey","preconditions","operations","provenance","supersedes"]),pg=new Set(["op","kind","id","value","from","to","order","refs"]),fg=new Set(["jobId","producer","contentRevisions"]),mg={"base-revision":new Set(["type","revision"]),"entity-revision":new Set(["type","kind","id","revision"]),"entity-hash":new Set(["type","kind","id","hash"]),"identity-required":new Set(["type","kind","id"]),"identity-absent":new Set(["type","kind","id"]),capability:new Set(["type","name"]),schema:new Set(["type","schemaVersion"])},gg=256,hg=32,yg=4096,bg=262144;function te(e,t,n,r){let i=n?{code:e,detail:t,path:n}:{code:e,detail:t};return r?.expectedRevision!==void 0&&(i.expectedRevision=r.expectedRevision),r?.actualRevision!==void 0&&(i.actualRevision=r.actualRevision),i}function Ne(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Se(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function fe(e){return typeof e=="string"&&e.length>0}function Ke(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)}function Pn(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(te("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function To(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(To);let t=e,n={};for(let r of Object.keys(t).sort())n[r]=To(t[r]);return n}function Zd(e){let t=JSON.stringify(To(e)??null),n=2166136261;for(let r=0;r<t.length;r++)n^=t.charCodeAt(r),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function Do(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Do(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?ot:Do(o,t);return r}function vg(){return{revision:0,entities:[],links:[],accepted:[]}}function ic(e){return[...e].map(t=>Se(t)).sort((t,n)=>{let r=t.kind.localeCompare(n.kind);return r!==0?r:t.id.localeCompare(n.id)})}function oc(e){return[...e].map(t=>Se(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Sg(e){return[...e].map(t=>Se(t)).sort((t,n)=>t.revision!==n.revision?t.revision-n.revision:t.patchId.localeCompare(n.patchId))}function Lr(e){return{revision:e.revision,entities:ic(e.entities),links:oc(e.links),accepted:Sg(e.accepted)}}function Tr(e,t){return e.length<=t?e:[...e.slice(0,t),te("over-limit",`truncated ${e.length-t} additional diagnostics`)]}function sc(e,t){let n=e.order??0,r=t.order??0;return n!==r?n-r:e.op!==t.op?e.op.localeCompare(t.op):e.kind!==t.kind?e.kind.localeCompare(t.kind):e.id.localeCompare(t.id)}function Dr(){return{version:1,fields:{patchId:{type:"string"},oldRevision:{type:"number",optional:!0},newRevision:{type:"number",optional:!0},revision:{type:"number",optional:!0},producer:{type:"string",optional:!0},jobId:{type:"string",optional:!0},contentRevisions:{type:"array",optional:!0},reasonCode:{type:"string",optional:!0},supersededBy:{type:"string",optional:!0},changedIdentities:{type:"array",optional:!0}}}}function Mr(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function kg(){return[Mr(pe(Mo,Dr())),Mr(pe(nc,Dr())),Mr(pe(rc,Dr())),Mr(qe(Nr,Dr()))]}function ac(){let e=vg();return{current(){return Se(e)},begin(){let t=Se(e),n=null;return{applyWorldRevision(r){n=Lr(r)},commit(){n&&(e=n),n=null},rollback(){e=Se(t),n=null}}}}}function dc(e,t,n){if(e===void 0)return;if(!Ne(e)){n.push(te("invalid-schema","refs must be an object",t));return}Pn(e,new Set(["contentId","contentRevision","binding","asset","identity"]),t,n);let r={};for(let i of["contentId","contentRevision","binding","asset","identity"]){let o=e[i];if(o!==void 0){if(!fe(o)){n.push(te("invalid-schema",`refs.${i} must be a non-empty string`,`${t}.${i}`));continue}r[i]=o}}return r}function Eg(e,t,n){if(!Ne(e)){n.push(te("invalid-schema","operation must be an object",t));return}Pn(e,pg,t,n),(!fe(e.op)||!Qd.has(e.op))&&n.push(te("unknown-op",`unknown op "${String(e.op)}"`,`${t}.op`)),fe(e.kind)||n.push(te("missing-field","kind is required",`${t}.kind`));let r=e.id;fe(r)||((e.op==="link"||e.op==="unlink")&&fe(e.from)&&fe(e.to)?r=`${e.kind??"link"}:${e.from}:${e.to}`:n.push(te("missing-field","id is required",`${t}.id`))),e.order!==void 0&&!Ke(e.order)&&n.push(te("invalid-schema","order must be an integer",`${t}.order`)),e.from!==void 0&&!fe(e.from)&&n.push(te("invalid-schema","from must be a non-empty string",`${t}.from`)),e.to!==void 0&&!fe(e.to)&&n.push(te("invalid-schema","to must be a non-empty string",`${t}.to`));let i=dc(e.refs,`${t}.refs`,n);if(!fe(e.op)||!Qd.has(e.op)||!fe(e.kind)||!fe(r))return;(e.op==="link"||e.op==="unlink")&&(!fe(e.from)||!fe(e.to))&&n.push(te("missing-field","link/unlink require from and to",t));let o={op:e.op,kind:e.kind,id:r};return Ke(e.order)&&(o.order=e.order),e.value!==void 0&&(o.value=Se(e.value)),fe(e.from)&&(o.from=e.from),fe(e.to)&&(o.to=e.to),i&&Object.keys(i).length&&(o.refs=i),o}function Ig(e,t,n){if(!Ne(e)){n.push(te("invalid-schema","precondition must be an object",t));return}if(!fe(e.type)||!cg.has(e.type)){n.push(te("invalid-schema",`unknown precondition type "${String(e.type)}"`,`${t}.type`));return}let r=e.type;switch(Pn(e,mg[r],t,n),r){case"base-revision":if(!Ke(e.revision)||e.revision<0){n.push(te("invalid-schema","revision must be an integer \u2265 0",`${t}.revision`));return}return{type:r,revision:e.revision};case"entity-revision":if(!fe(e.kind)||!fe(e.id)||!Ke(e.revision)||e.revision<1){n.push(te("invalid-schema","kind, id, and revision \u2265 1 are required",t));return}return{type:r,kind:e.kind,id:e.id,revision:e.revision};case"entity-hash":if(!fe(e.kind)||!fe(e.id)||!fe(e.hash)){n.push(te("invalid-schema","kind, id, and hash are required",t));return}return{type:r,kind:e.kind,id:e.id,hash:e.hash};case"identity-required":case"identity-absent":if(!fe(e.kind)||!fe(e.id)){n.push(te("invalid-schema","kind and id are required",t));return}return{type:r,kind:e.kind,id:e.id};case"capability":if(!fe(e.name)){n.push(te("invalid-schema","capability name is required",`${t}.name`));return}return{type:r,name:e.name};case"schema":if(!Ke(e.schemaVersion)||e.schemaVersion<1){n.push(te("invalid-schema","schemaVersion must be an integer \u2265 1",`${t}.schemaVersion`));return}return{type:r,schemaVersion:e.schemaVersion}}}function cc(e,t,n){if(!Ne(e)){n.push(te("invalid-schema","provenance is required",t));return}if(Pn(e,fg,t,n),!fe(e.producer)){n.push(te("missing-field","producer is required",`${t}.producer`));return}let r={producer:e.producer};return e.jobId!==void 0&&(fe(e.jobId)?r.jobId=e.jobId:n.push(te("invalid-schema","jobId must be a non-empty string",`${t}.jobId`))),e.contentRevisions!==void 0&&(!Array.isArray(e.contentRevisions)||e.contentRevisions.some(i=>!fe(i))?n.push(te("invalid-schema","contentRevisions must be string[]",`${t}.contentRevisions`)):r.contentRevisions=[...e.contentRevisions]),r}function Rg(e,t){let n=[],r="";try{r=JSON.stringify(e)??""}catch{return{errors:[te("invalid-schema","patch is not JSON-serializable")]}}if(r.length>t.maxBytes&&n.push(te("over-limit",`patch exceeds ${t.maxBytes} bytes`)),!Ne(e))return{errors:[te("invalid-schema","patch must be an object"),...n]};Pn(e,lg,"",n),fe(e.patchId)||n.push(te("missing-field","patchId is required","patchId")),e.schemaVersion!==Or&&n.push(te("schema-mismatch",`schemaVersion must be ${Or}`,"schemaVersion")),(!Ke(e.baseRevision)||e.baseRevision<0)&&n.push(te("invalid-schema","baseRevision must be an integer \u2265 0","baseRevision")),fe(e.idempotencyKey)||n.push(te("missing-field","idempotencyKey is required","idempotencyKey")),e.supersedes!==void 0&&!fe(e.supersedes)&&n.push(te("invalid-schema","supersedes must be a non-empty string","supersedes"));let i=cc(e.provenance,"provenance",n);Array.isArray(e.operations)?e.operations.length>t.maxOperations&&n.push(te("over-limit",`operations exceed ${t.maxOperations}`,"operations")):n.push(te("invalid-schema","operations must be an array","operations"));let o=[];if(Array.isArray(e.operations))for(let c=0;c<e.operations.length;c++){let m=Eg(e.operations[c],`operations[${c}]`,n);m&&o.push(m)}let s=[];if(e.preconditions!==void 0)if(!Array.isArray(e.preconditions))n.push(te("invalid-schema","preconditions must be an array","preconditions"));else for(let c=0;c<e.preconditions.length;c++){let m=Ig(e.preconditions[c],`preconditions[${c}]`,n);m&&s.push(m)}if(n.length)return{errors:n};let a={patchId:e.patchId,schemaVersion:Or,baseRevision:e.baseRevision,idempotencyKey:e.idempotencyKey,operations:o,provenance:i};return s.length&&(a.preconditions=s),fe(e.supersedes)&&(a.supersedes=e.supersedes),{patch:a,errors:n}}function Cg(e){let t=new Map;for(let r of e.entities)t.set(r.id,Se(r));let n=new Map;for(let r of e.links)n.set(r.id,Se(r));return{revision:e.revision,entities:t,links:n,accepted:e.accepted.map(r=>Se(r))}}function sn(e,t,n){let r=e.get(t);if(r&&!(n&&r.kind!==n))return r}function wg(e,t,n){let r=Cg(e),i=[],o=[],s=[...t].sort(sc),a=(m,u)=>{let y={kind:m.kind,id:m.id,revision:u?u.revision+1:1,hash:Zd(m.value??null),value:m.value===void 0?null:Se(m.value),tombstoned:!1};m.refs&&(y.refs=Se(m.refs)),r.entities.set(m.id,y),i.push({op:m.op,kind:m.kind,id:m.id})},c=m=>{!m.from||!m.to||r.links.set(m.id,{id:m.id,kind:m.kind,from:m.from,to:m.to,...m.value!==void 0?{value:Se(m.value)}:{}})};for(let m=0;m<s.length;m++){let u=s[m],y=`operations[${m}]`,S=r.entities.get(u.id);switch(u.op){case"add":if(S&&!S.tombstoned){o.push(te("duplicate-id",`identity "${u.id}" already exists`,y));break}a(u),u.from&&u.to&&c(u);break;case"replace":case"revise":if(!S||S.tombstoned){o.push(te("missing-ref",`identity "${u.id}" is absent`,y));break}if(S.kind!==u.kind){o.push(te("missing-ref",`identity "${u.id}" is kind "${S.kind}"`,y));break}a(u,S),u.from&&u.to&&c(u);break;case"remove":if(!S){o.push(te("missing-ref",`identity "${u.id}" is absent`,y));break}r.entities.delete(u.id),r.links.delete(u.id);for(let[R,T]of[...r.links])(T.from===u.id||T.to===u.id)&&r.links.delete(R);i.push({op:u.op,kind:u.kind,id:u.id});break;case"tombstone":if(!S){o.push(te("missing-ref",`identity "${u.id}" is absent`,y));break}S.tombstoned=!0,S.revision+=1,S.hash=Zd(null),S.value=null,r.links.delete(u.id);for(let[R,T]of[...r.links])(T.from===u.id||T.to===u.id)&&r.links.delete(R);i.push({op:u.op,kind:u.kind,id:u.id});break;case"link":if(S&&S.kind!==u.kind&&!S.tombstoned){o.push(te("duplicate-id",`identity "${u.id}" already exists`,y));break}a(u,S&&!S.tombstoned?S:void 0),c(u);break;case"unlink":if(!r.links.has(u.id)&&!S){o.push(te("missing-ref",`link "${u.id}" is absent`,y));break}r.links.delete(u.id),S&&(S.tombstoned=!0,S.revision+=1),i.push({op:u.op,kind:u.kind,id:u.id});break}}r.entities.size>n.maxEntities&&o.push(te("over-limit",`entities exceed ${n.maxEntities}`));for(let m of r.links.values()){let u=r.entities.get(m.from),y=r.entities.get(m.to);(!u||u.tombstoned)&&o.push(te("referential-integrity",`link "${m.id}" from "${m.from}" is absent`,`links.${m.id}.from`)),(!y||y.tombstoned)&&o.push(te("referential-integrity",`link "${m.id}" to "${m.to}" is absent`,`links.${m.id}.to`))}return{world:r,changed:i,errors:o}}function Ag(e,t,n,r){let i=[];e.baseRevision!==t.revision&&i.push(te("stale-base",`baseRevision ${e.baseRevision} is stale; current revision is ${t.revision}`,"baseRevision",{expectedRevision:t.revision,actualRevision:e.baseRevision}));for(let o=0;o<(e.preconditions??[]).length;o++){let s=e.preconditions[o],a=`preconditions[${o}]`;switch(s.type){case"base-revision":s.revision!==t.revision&&i.push(te("stale-base",`expected base revision ${s.revision}, current is ${t.revision}`,a,{expectedRevision:t.revision,actualRevision:s.revision}));break;case"entity-revision":{let c=sn(n,s.id,s.kind);c?c.revision!==s.revision&&i.push(te("entity-revision",`identity "${s.id}" revision is ${c.revision}, expected ${s.revision}`,a)):i.push(te("identity-required",`identity "${s.id}" is absent`,a));break}case"entity-hash":{let c=sn(n,s.id,s.kind);c?c.hash!==s.hash&&i.push(te("entity-hash",`identity "${s.id}" hash is ${c.hash}, expected ${s.hash}`,a)):i.push(te("identity-required",`identity "${s.id}" is absent`,a));break}case"identity-required":(!sn(n,s.id,s.kind)||sn(n,s.id,s.kind)?.tombstoned)&&i.push(te("identity-required",`identity "${s.id}" is required`,a));break;case"identity-absent":sn(n,s.id,s.kind)&&!sn(n,s.id,s.kind)?.tombstoned&&i.push(te("identity-absent",`identity "${s.id}" must be absent`,a));break;case"capability":r.has(s.name)||i.push(te("capability-denied",`capability "${s.name}" is not granted`,a));break;case"schema":s.schemaVersion!==Or&&i.push(te("schema-mismatch",`schema requirement ${s.schemaVersion} is unsupported`,a));break}}return i}function Pg(e){let t=new Map;for(let o of e){let s=t.get(o.from)??[];s.push(o.to),t.set(o.from,s),t.has(o.to)||t.set(o.to,t.get(o.to)??[])}let n=new Set,r=new Set,i=o=>{if(n.has(o))return!0;if(r.has(o))return!1;n.add(o);for(let s of t.get(o)??[])if(i(s))return!0;return n.delete(o),r.add(o),!1};for(let o of[...t.keys()].sort())if(i(o))return!0;return!1}function ec(e,t,n){return e?e.hasRevision?.(t??"",n)?!0:(e.available??[]).some(r=>r.revision===n&&(t===void 0||!r.contentId||r.contentId===t)):!1}function xg(e,t,n,r,i,o){let s=[],a=i?.listedIds?new Set(i.listedIds):void 0,c=o?.availableIds?new Set(o.availableIds):void 0,m=new Set(n.entities.filter(u=>!u.tombstoned).map(u=>u.id));for(let u of t)m.add(u.id);for(let u of e.provenance.contentRevisions??[])r&&!ec(r,void 0,u)&&s.push(te("content-unavailable",`content revision "${u}" is not available`,"provenance.contentRevisions"));for(let u=0;u<t.length;u++){let y=t[u],S=`operations[${u}]`,R=y.refs?.contentRevision,T=y.refs?.contentId;R&&r&&!ec(r,T,R)&&s.push(te("content-unavailable",`content revision "${R}" is not available`,`${S}.refs`));let k=y.refs?.binding??(y.kind==="presentation-binding"?y.id:void 0);k&&a&&!a.has(k)&&s.push(te("binding-unavailable",`binding "${k}" is not listed`,`${S}`));let P=y.refs?.asset??(y.kind==="asset"?y.id:void 0);P&&c&&!c.has(P)&&s.push(te("asset-unavailable",`asset "${P}" is not available`,`${S}`));let B=y.refs?.identity;B&&!m.has(B)&&s.push(te("missing-ref",`ref identity "${B}" is absent`,`${S}.refs`))}return s}function tc(e){if(!Po.has(e.kind))return;let t=Ne(e.value)?e.value:{},n={id:e.id,version:Ke(t.version)&&t.version>=1?t.version:1,kind:fe(t.kind)&&Po.has(t.kind)?t.kind:e.kind,mapLayer:t.mapLayer==="regional"?"regional":"local"};return t.frontier===!0&&(n.frontier=!0),Ne(t.metadata)&&(n.metadata=Se(t.metadata)),n}function Ao(e){if(!xo.has(e.kind)||!e.from||!e.to)return;let t=Ne(e.value)?e.value:{},n=t.visibility==="canonical"||t.visibility==="hidden"?t.visibility:"discoverable",r=t.access==="locked"||t.access==="disabled"?t.access:"open",i={id:e.id,version:Ke(t.version)&&t.version>=1?t.version:1,from:e.from,to:e.to,directed:t.directed===!0,kind:fe(t.kind)?t.kind:"door",visibility:n,access:r};if(Ne(t.requirements)&&(i.requirements=Se(t.requirements)),Ne(t.cost)){let o={};for(let[s,a]of Object.entries(t.cost))typeof a=="number"&&Number.isFinite(a)&&(o[s]=a);Object.keys(o).length&&(i.cost=o)}return Ne(t.metadata)&&(i.metadata=Se(t.metadata)),i}function Tg(e,t){let n=e.snapshot(),r=new Map(n.nodes.map(c=>[c.id,Se(c)])),i=new Map(n.edges.map(c=>[c.id,Se(c)])),o=[...t].sort(sc),s=c=>{r.delete(c);for(let[m,u]of[...i])(u.from===c||u.to===c)&&i.delete(m)};for(let c of o)switch(c.op){case"add":{let m=tc(c);m&&!r.has(m.id)&&r.set(m.id,m);let u=Ao(c);u&&!i.has(u.id)&&i.set(u.id,u);break}case"replace":case"revise":{let m=tc(c);m&&r.set(m.id,m);let u=Ao(c);u&&i.set(u.id,u);break}case"link":{let m=Ao(c);m&&i.set(m.id,m);break}case"remove":case"tombstone":Po.has(c.kind)&&s(c.id),xo.has(c.kind)&&i.delete(c.id);break;case"unlink":xo.has(c.kind)&&i.delete(c.id);break}let a=e.restore({...n,nodes:[...r.values()],edges:[...i.values()]});return a.ok?[]:a.errors.map(c=>te("graph-apply-failed",c.detail,c.path))}function Dg(e,t){let n=[];if(!Ne(e))return{errors:[te("invalid-snapshot","world must be an object",t)]};if((!Ke(e.revision)||e.revision<0)&&n.push(te("invalid-snapshot","revision must be an integer \u2265 0",`${t}.revision`)),!Array.isArray(e.entities)||!Array.isArray(e.links)||!Array.isArray(e.accepted))return n.push(te("invalid-snapshot","entities, links, and accepted must be arrays",t)),{errors:n};let r=[];for(let s=0;s<e.entities.length;s++){let a=e.entities[s],c=`${t}.entities[${s}]`;if(!Ne(a)){n.push(te("invalid-snapshot","entity must be an object",c));continue}if(!fe(a.kind)||!fe(a.id)||!Ke(a.revision)||a.revision<1){n.push(te("invalid-snapshot","kind, id, and revision are required",c));continue}if(!fe(a.hash)||typeof a.tombstoned!="boolean"){n.push(te("invalid-snapshot","hash and tombstoned are required",c));continue}let m={kind:a.kind,id:a.id,revision:a.revision,hash:a.hash,value:a.value??null,tombstoned:a.tombstoned};if(a.refs!==void 0){let u=dc(a.refs,`${c}.refs`,n);u&&(m.refs=u)}r.push(m)}let i=[];for(let s=0;s<e.links.length;s++){let a=e.links[s],c=`${t}.links[${s}]`;if(!Ne(a)||!fe(a.id)||!fe(a.kind)||!fe(a.from)||!fe(a.to)){n.push(te("invalid-snapshot","link id, kind, from, and to are required",c));continue}i.push({id:a.id,kind:a.kind,from:a.from,to:a.to,...a.value!==void 0?{value:a.value}:{}})}let o=[];for(let s=0;s<e.accepted.length;s++){let a=e.accepted[s],c=`${t}.accepted[${s}]`;if(!Ne(a)||!fe(a.patchId)||!fe(a.idempotencyKey)||!Ke(a.revision)||a.revision<1){n.push(te("invalid-snapshot","accepted patch identity is invalid",c));continue}let m=cc(a.provenance,`${c}.provenance`,n);if(!m)continue;let u={patchId:a.patchId,idempotencyKey:a.idempotencyKey,revision:a.revision,provenance:m};fe(a.supersededBy)&&(u.supersededBy=a.supersededBy),o.push(u)}return n.length?{errors:n}:{errors:[],world:Lr({revision:e.revision,entities:r,links:i,accepted:o})}}function Mg(e,t,n){if(!Ne(e)){n.push(te("invalid-snapshot","audit record must be an object",t));return}if(e.outcome!=="accepted"&&e.outcome!=="rejected"&&e.outcome!=="superseded"){n.push(te("invalid-snapshot","audit outcome is invalid",`${t}.outcome`));return}if(!fe(e.patchId)||!fe(e.idempotencyKey)||!Ke(e.at)){n.push(te("invalid-snapshot","audit identity is invalid",t));return}if(!Ke(e.oldRevision)||!Ke(e.newRevision)||!Array.isArray(e.reasonCodes)){n.push(te("invalid-snapshot","audit revisions are invalid",t));return}return{outcome:e.outcome,patchId:e.patchId,idempotencyKey:e.idempotencyKey,at:e.at,oldRevision:e.oldRevision,newRevision:e.newRevision,reasonCodes:e.reasonCodes.filter(r=>typeof r=="string"),changedIdentities:Array.isArray(e.changedIdentities)?e.changedIdentities:[],provenance:Ne(e.provenance)?e.provenance:{producer:"unknown"},patch:e.patch??null}}function Og(e){if(!Ne(e))return{ok:!1,errors:[te("invalid-snapshot","snapshot must be an object")]};if(e.schemaVersion!==_r)return{ok:!1,errors:[te("invalid-version","unknown snapshot schema version","schemaVersion")]};let t=Dg(e.world,"world");if(!t.world)return{ok:!1,errors:t.errors};let n=[...t.errors??[]];Array.isArray(e.audit)||n.push(te("invalid-snapshot","audit must be an array","audit"));let r=[];if(Array.isArray(e.audit))for(let o=0;o<e.audit.length;o++){let s=Mg(e.audit[o],`audit[${o}]`,n);s&&r.push(s)}if(n.length)return{ok:!1,errors:n};let i={schemaVersion:_r,world:t.world,audit:r};return e.graph!==void 0&&(i.graph=Se(e.graph)),{ok:!0,snapshot:i}}function Ng(e={}){let t=e.persistence??ac(),n=e.now??(()=>Date.now()),r=e.source??"world-patch",i={maxOperations:e.limits?.maxOperations??gg,maxDiagnostics:e.limits?.maxDiagnostics??hg,maxEntities:e.limits?.maxEntities??yg,maxBytes:e.limits?.maxBytes??bg},o=new Set([...dg,...e.redact??[]]),s=new Set(e.capabilities??[]),a=e.graphPolicy??{},c=!1,m=[],u=[],y=[],S=null;function R(){if(c)throw new Error(ug)}function T(){let f=t.current();return{destroyed:c,revision:f.revision,entities:ic(f.entities),links:oc(f.links),acceptedPatchIds:f.accepted.map(I=>I.patchId),events:[...y],lastRejection:S?Se(S):null}}function k(f,I){let d={type:f,payload:I,source:r,kind:f===Nr?"diagnostic":"state"};u.push(d),y.push(f),e.onEvent?.(d),e.router?.publish(d)}function P(f){m.push(f)}function B(f){let I=Rg(f,i);if(!I.patch)return{ok:!1,errors:Tr(I.errors,i.maxDiagnostics)};let d=I.patch,l=t.current(),b=l.accepted.find(M=>M.patchId===d.patchId);if(b&&!b.supersededBy)return{ok:!0,patch:d,next:Se(l),changed:[],idempotent:!0};if(b?.supersededBy)return{ok:!1,patch:d,errors:[te("superseded",`patch "${d.patchId}" was superseded by "${b.supersededBy}"`)]};let A=l.accepted.find(M=>M.idempotencyKey===d.idempotencyKey&&!M.supersededBy);if(A&&A.patchId!==d.patchId)return{ok:!1,patch:d,errors:[te("idempotency-conflict",`idempotencyKey already used by patch "${A.patchId}"`,"idempotencyKey")]};if(d.supersedes&&!l.accepted.find(L=>L.patchId===d.supersedes))return{ok:!1,patch:d,errors:[te("missing-ref",`superseded patch "${d.supersedes}" is unknown`,"supersedes")]};let F=new Map(l.entities.map(M=>[M.id,M])),x=Ag(d,l,F,s),H=wg(l,d.operations,i),K=xg(d,d.operations,l,e.content,e.bindings,e.assets),$=[...x,...H.errors,...K];if(!H.world)return{ok:!1,patch:d,errors:Tr($,i.maxDiagnostics)};let p=Lr({revision:l.revision+1,entities:H.world.entities.values(),links:H.world.links.values(),accepted:[...H.world.accepted.map(M=>d.supersedes&&M.patchId===d.supersedes?{...M,supersededBy:d.patchId}:M),{patchId:d.patchId,idempotencyKey:d.idempotencyKey,revision:l.revision+1,provenance:Se(d.provenance)}]});(a.detectCycle?.(p)??(!a.allowCycles&&Pg(p.links)))&&$.push(te("cycle","patch would introduce a link cycle"));for(let M of e.domainValidators??[])$.push(...M({patch:d,current:l,preview:p}).map(L=>L.code?L:te("domain",L.detail,L.path)));if($.length)return{ok:!1,patch:d,errors:Tr($,i.maxDiagnostics)};let w=d.supersedes?l.accepted.find(M=>M.patchId===d.supersedes):void 0;return{ok:!0,patch:d,next:p,changed:H.changed,supersede:w}}function J(f,I,d){let l=Tr(f,i.maxDiagnostics);S=l;let b=t.current(),A=l[0]?.code??"invalid-schema";return I?(P({outcome:"rejected",patchId:I.patchId,idempotencyKey:I.idempotencyKey,at:n(),oldRevision:d?.oldRevision??b.revision,newRevision:d?.oldRevision??b.revision,reasonCodes:l.map(F=>F.code),changedIdentities:[],provenance:Se(I.provenance),patch:Se(I)}),k(nc,{patchId:I.patchId,reasonCode:A,revision:b.revision}),k(Nr,{patchId:I.patchId,reasonCode:A,revision:b.revision})):k(Nr,{reasonCode:A,revision:b.revision}),{ok:!1,errors:l,inspect:T()}}function D(f){if(!e.graph||!f)return[];let I=e.graph.restore(f);return I.ok?[]:I.errors.map(d=>te("graph-apply-failed",d.detail,d.path))}function O(f){let I=t.begin();I.applyWorldRevision(f),I.commit()}return{dryRun(f){R();let I=B(f);return I.ok?I.idempotent?{ok:!0,previewRevision:I.next.revision,changedIdentities:[],diagnostics:[]}:{ok:!0,previewRevision:I.next.revision,changedIdentities:I.changed,diagnostics:[]}:{ok:!1,errors:I.errors}},commit(f){R();let I=B(f);if(!I.ok)return J(I.errors,I.patch);let d=I.patch,l=t.current();if(I.idempotent)return{ok:!0,patchId:d.patchId,oldRevision:l.revision,newRevision:l.revision,changedIdentities:[],idempotent:!0,inspect:T()};let b=e.graph?.snapshot(),A=t.begin();try{if(A.applyWorldRevision(I.next),e.graph){let x=Tg(e.graph,d.operations);if(x.length){try{A.rollback()}catch{}return O(l),D(b),J(x,d,{oldRevision:l.revision})}}A.commit()}catch(x){try{A.rollback()}catch{}return O(l),D(b),J([te("publish-failed",x instanceof Error?x.message:"persistence failed")],d,{oldRevision:l.revision})}let F={patchId:d.patchId,oldRevision:l.revision,newRevision:I.next.revision,changedIdentities:I.changed,producer:d.provenance.producer,jobId:d.provenance.jobId,contentRevisions:d.provenance.contentRevisions};try{t.publish?.(F),I.supersede&&(k(rc,{patchId:I.supersede.patchId,supersededBy:d.patchId,revision:I.next.revision}),P({outcome:"superseded",patchId:I.supersede.patchId,idempotencyKey:I.supersede.idempotencyKey,at:n(),oldRevision:l.revision,newRevision:I.next.revision,reasonCodes:["superseded"],changedIdentities:[],provenance:Se(I.supersede.provenance),patch:{supersededBy:d.patchId}})),k(Mo,{patchId:F.patchId,oldRevision:F.oldRevision,newRevision:F.newRevision,producer:F.producer,jobId:F.jobId,contentRevisions:F.contentRevisions,changedIdentities:F.changedIdentities}),S=null,P({outcome:"accepted",patchId:d.patchId,idempotencyKey:d.idempotencyKey,at:n(),oldRevision:l.revision,newRevision:I.next.revision,reasonCodes:[],changedIdentities:I.changed,provenance:Se(d.provenance),patch:Se(d)})}catch(x){return O(l),D(b),J([te("publish-failed",x instanceof Error?x.message:"publication failed")],d,{oldRevision:l.revision})}return{ok:!0,patchId:d.patchId,oldRevision:l.revision,newRevision:I.next.revision,changedIdentities:I.changed,inspect:T()}},inspect(){return R(),T()},snapshot(){R();let f={schemaVersion:_r,world:Lr(t.current()),audit:Se(m)};return e.graph&&(f.graph=e.graph.snapshot()),f},restore(f){R();let I=Og(f);if(!I.ok)return I;let d=t.current(),l=m,b=e.graph?.snapshot();try{if(O(I.snapshot.world),m=Se(I.snapshot.audit),S=null,I.snapshot.graph){let A=D(I.snapshot.graph);if(A.length)return O(d),D(b),m=l,{ok:!1,errors:A}}return{ok:!0,snapshot:I.snapshot}}catch{return O(d),D(b),m=l,{ok:!1,errors:[te("invalid-snapshot","restore failed to persist")]}}},audit(f){R();let I=f?.redact!==!1,d=Se(m);return I?Do(d,o):d},events(){return R(),u.map(f=>Se(f))},destroy(){c=!0,u.length=0,y.length=0}}}var Tn=1,wt=1,No="content.revision.state.discovered",uc="content.revision.state.staging",lc="content.revision.state.validated",pc="content.revision.state.rejected",Lo="content.revision.state.activated",Vr="content.revision.state.rolled-back",Fr="content.revision.state.superseded",_o="content.revision.diagnostic.lifecycle";var _g=["invalid-manifest","invalid-schema","invalid-version","invalid-snapshot","unknown-revision","unknown-adapter","hash-mismatch","capability-denied","pinned","staging-failed","activation-failed","health-check-failed","stale-health-check","superseded","destroyed","adapter-missing","asset-failed","unsigned"],Xb=new Set(_g),Lg="Content revision activator has been destroyed",Vg=/^[0-9a-f]+$/i;function ue(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function ut(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function ke(e){return typeof e=="string"&&e.length>0}function we(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ct(e,t){return`${e}@${t}`}function Fg(e,t){return e.localeCompare(t,"en",{numeric:!0,sensitivity:"base"})>0}function xn(e,t){return e===t?!0:!e||!t?!1:e.bundleId===t.bundleId&&e.adapterId===t.adapterId}function Rt(){return{version:1,fields:{contentId:{type:"string"},revision:{type:"string"},adapterId:{type:"string"},bundleId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function Ct(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function $g(){return[Ct(pe(No,Rt())),Ct(pe(uc,Rt())),Ct(pe(lc,Rt())),Ct(pe(pc,Rt())),Ct(pe(Lo,Rt())),Ct(pe(Vr,Rt())),Ct(pe(Fr,Rt())),Ct(qe(_o,Rt()))]}function Vo(e){return typeof e=="string"&&e.length===64&&Vg.test(e)}function Bg(e,t){return e===void 0?{ok:!0,fallback:void 0}:ut(e)?!ke(e.id)||!yn(e.kind)||!ke(e.url)||!Vo(e.hash)||e.alg!=="sha256"?{ok:!1,errors:[ue("invalid-schema","fallback is missing id, kind, url, or sha256 hash",t)]}:{ok:!0,fallback:{id:e.id,kind:e.kind,url:e.url,hash:e.hash.toLowerCase(),alg:"sha256"}}:{ok:!1,errors:[ue("invalid-schema","fallback must be an object",t)]}}function Fo(e){if(!ut(e))return{ok:!1,errors:[ue("invalid-manifest","catalog must be an object")]};let t=[];ke(e.contentId)||t.push(ue("invalid-schema","contentId is required","contentId")),(!ke(e.revision)||e.revision==="latest")&&t.push(ue("unknown-revision",'revision must be an exact id, not "latest"',"revision")),e.manifestVersion!==wt&&t.push(ue("invalid-version",`manifestVersion must be ${wt}`,"manifestVersion")),ke(e.publisher)||t.push(ue("invalid-schema","publisher is required","publisher")),ke(e.source)||t.push(ue("invalid-schema","source is required","source")),ke(e.adapterId)||t.push(ue("invalid-schema","adapterId is required","adapterId")),(!Array.isArray(e.assets)||e.assets.length===0)&&t.push(ue("invalid-schema","assets must be a non-empty array","assets"));let n=[],r=new Set;if(Array.isArray(e.assets)&&e.assets.forEach((o,s)=>{let a=`assets[${s}]`;if(!ut(o)){t.push(ue("invalid-schema","asset must be an object",a));return}if(!ke(o.id)||!yn(o.kind)||!ke(o.url)){t.push(ue("invalid-schema","asset needs id, kind, and url",a));return}if(!Vo(o.hash)||o.alg!=="sha256"){t.push(ue("hash-mismatch","asset hash must be sha256 hex",`${a}.hash`));return}if(r.has(o.id)){t.push(ue("invalid-schema",`duplicate asset id "${o.id}"`,`${a}.id`));return}r.add(o.id);let c=Bg(o.fallback,`${a}.fallback`);if(!c.ok){t.push(...c.errors);return}n.push({id:o.id,kind:o.kind,url:o.url,hash:o.hash.toLowerCase(),alg:"sha256",optional:o.optional===!0,fallback:c.fallback})}),t.length>0)return{ok:!1,errors:t};let i;if(e.signature!==void 0){if(!ut(e.signature)||!ke(e.signature.id)||!ke(e.signature.alg))return{ok:!1,errors:[ue("unsigned","signature must include id and alg","signature")]};i={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,catalog:{contentId:e.contentId,revision:e.revision,manifestVersion:wt,publisher:e.publisher,source:e.source,adapterId:e.adapterId,assets:n,requestedGrants:Array.isArray(e.requestedGrants)?e.requestedGrants:void 0,capabilities:e.capabilities,signature:i}}}function Hg(e,t){return{contentId:e.body.id,revision:e.body.cartVersion,manifestVersion:wt,publisher:e.body.publisher,source:"remote",adapterId:t,assets:e.body.assets.map(n=>({id:n.id,kind:n.kind,url:n.url,hash:n.hash.toLowerCase(),alg:"sha256"})),requestedGrants:Rd(e),capabilities:e.body.capabilities,signature:{id:e.signature.keyId,alg:e.signature.alg}}}function qg(e,t){return`https://registry.test/worlds/${e}/revisions/${t??"current"}.json`}function Wg(e){let t=e.id??"static",n=new Map,r=new Map;for(let o of e.revisions){let s=Fo({...o,adapterId:o.adapterId||t}),a=ke(o.contentId)?o.contentId:"",c=ke(o.revision)?o.revision:"";if(!(!a||!c))if(s.ok){let m={...s.catalog,adapterId:t,source:s.catalog.source||"static"};n.set(ct(a,c),{ok:!0,catalog:m});let u=r.get(a);(!u||Fg(m.revision,u.revision))&&r.set(a,m)}else n.set(ct(a,c),s)}let i=e.fetchBytes??(async o=>e.bytesByUrl[o]);return{id:t,hasRevision(o,s){return!!n.get(ct(o,s))?.ok},async discover(o){let s=r.get(o);if(s)return{contentId:s.contentId,revision:s.revision,adapterId:t,publisher:s.publisher,source:s.source}},async loadRevision(o,s){let a=n.get(ct(o,s));return a?a.ok?{ok:!0,catalog:we(a.catalog)}:a:{ok:!1,errors:[ue("unknown-revision",`static adapter has no ${o}@${s}`)]}},fetchBytes:i}}function Gg(e){let t=e.id??"remote",n=e.catalogUrl??qg,r=new Set((e.known??[]).map(s=>ct(s.contentId,s.revision))),i=e.fetchBytes??(async s=>e.bytesByUrl?.[s]);async function o(s,a,c){let m=a!=="current",u;try{u=await e.fetch(n(s,m?a:void 0),c)}catch(k){return{ok:!1,errors:[ue("staging-failed",k instanceof Error?k.message:String(k))]}}let y=u;if(ut(u)&&ut(u.manifest)){if(ke(u.world)&&u.world!==s)return{ok:!1,errors:[ue("invalid-manifest",`remote world "${String(u.world)}" does not match "${s}"`,"world")]};if(m&&ke(u.revision)&&u.revision!==a)return{ok:!1,errors:[ue("unknown-revision",`remote revision "${String(u.revision)}" does not match "${a}"`,"revision")]};y=u.manifest}let S=await fo(y,e.keys,m?a:void 0);if(!S.ok)return{ok:!1,errors:S.errors.map(k=>ue(k.code,k.detail,k.path))};if(S.manifest.body.id!==s)return{ok:!1,errors:[ue("invalid-manifest",`signed id "${S.manifest.body.id}" does not match "${s}"`,"body.id")]};let R=Hg(S.manifest,t);return r.add(ct(R.contentId,R.revision)),Fo(R)}return{id:t,hasRevision(s,a){return r.has(ct(s,a))},async discover(s){let a=await o(s,"current");if(a.ok)return{contentId:a.catalog.contentId,revision:a.catalog.revision,adapterId:t,publisher:a.catalog.publisher,source:a.catalog.source}},loadRevision:o,fetchBytes:i}}function Kg(e,t){return ut(e)?!ke(e.id)||!yn(e.kind)||!ke(e.ref)||!Vo(e.hash)||!ke(e.url)||typeof e.optional!="boolean"||typeof e.usedFallback!="boolean"?{ok:!1,errors:[ue("invalid-snapshot","resource fields are invalid",t)]}:{ok:!0,resource:{id:e.id,kind:e.kind,ref:e.ref,hash:e.hash.toLowerCase(),url:e.url,optional:e.optional,usedFallback:e.usedFallback}}:{ok:!1,errors:[ue("invalid-snapshot","resource must be an object",t)]}}function Oo(e,t){if(e===null)return{ok:!0,bundle:null};if(!ut(e))return{ok:!1,errors:[ue("invalid-snapshot","bundle must be an object or null",t)]};if(!ke(e.contentId)||!ke(e.revision)||e.revision==="latest")return{ok:!1,errors:[ue("unknown-revision","snapshot bundle must record an exact revision",`${t}.revision`)]};if(e.manifestVersion!==wt)return{ok:!1,errors:[ue("invalid-version",`bundle manifestVersion must be ${wt}`,`${t}.manifestVersion`)]};if(!ke(e.publisher)||!ke(e.source)||!ke(e.adapterId)||!ke(e.bundleId))return{ok:!1,errors:[ue("invalid-snapshot","bundle identity is incomplete",t)]};if(!ut(e.resources))return{ok:!1,errors:[ue("invalid-snapshot","bundle resources must be an object",`${t}.resources`)]};let n={};for(let[i,o]of Object.entries(e.resources)){let s=Kg(o,`${t}.resources.${i}`);if(!s.ok)return s;if(s.resource.id!==i)return{ok:!1,errors:[ue("invalid-snapshot",`resource key "${i}" does not match id`,`${t}.resources.${i}`)]};n[i]=s.resource}let r;if(e.signature!==void 0){if(!ut(e.signature)||!ke(e.signature.id)||!ke(e.signature.alg))return{ok:!1,errors:[ue("invalid-snapshot","signature must include id and alg",`${t}.signature`)]};r={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,bundle:{bundleId:e.bundleId,contentId:e.contentId,revision:e.revision,manifestVersion:wt,publisher:e.publisher,source:e.source,adapterId:e.adapterId,signature:r,resources:n}}}function jg(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[ue("invalid-snapshot","snapshot JSON is not parseable")]}}if(!ut(t))return{ok:!1,errors:[ue("invalid-snapshot","snapshot must be an object")]};if(t.schemaVersion!==Tn)return{ok:!1,errors:[ue("invalid-version",`snapshot schema must be ${Tn}`,"schemaVersion")]};if(typeof t.pinned!="boolean")return{ok:!1,errors:[ue("invalid-snapshot","pinned must be a boolean","pinned")]};let n=Oo(t.active,"active");if(!n.ok)return n;let r=Oo(t.lastKnownGood,"lastKnownGood");if(!r.ok)return r;let i=Oo(t.previous,"previous");return i.ok?{ok:!0,snapshot:{schemaVersion:Tn,pinned:t.pinned,active:n.bundle,lastKnownGood:r.bundle,previous:i.bundle}}:i}function Ug(e,t,n){return{id:e.id,kind:e.kind,ref:t.ref,hash:n&&e.fallback?e.fallback.hash:e.hash,url:t.url,optional:e.optional===!0,usedFallback:n}}function Jg(e){let t=[...e.adapters],n=e.grants??nn(),r=new Map,i=e.pin===!0,o=!1,s=null,a=null,c=null,m=null,u=null,y=[],S=0,R=null;function T(){if(o)throw new Error(Lg)}function k(d){return d?t.find(l=>l.id===d):t[0]}function P(d,l,b){return(b?t.filter(F=>F.id===b):t).some(F=>F.hasRevision(d,l))}function B(d,l){y.push(d);let b=d.includes(".diagnostic.")?"diagnostic":"state",A={type:d,kind:b,payload:we(l)};e.onEvent?.(A),e.router?.publish(A)}function J(d,l){return u=d.map(b=>we(b)),B(pc,{...l,reasonCode:d[0]?.code}),B(_o,{...l,reasonCode:d[0]?.code}),{ok:!1,errors:u}}function D(){return{destroyed:o,pinned:i,active:we(s),lastKnownGood:we(a),staging:m?we(m):null,events:[...y],lastRejection:u?we(u):null}}async function O(d,l,b){if(d.requestedGrants){for(let w of d.requestedGrants)if(!n.has(w))return{ok:!1,errors:[ue("capability-denied",`host did not grant "${w}"`,"requestedGrants")]}}if(d.capabilities){let w=e.hostCapabilities??{contractVersion:1,features:[],integrations:[],grants:n.list()},M=pr(d.capabilities,{...w,grants:n.list()});if(!M.ok)return{ok:!1,errors:M.errors.map(L=>ue(L.code==="missing-grant"||L.code==="capability-denied"||L.code==="ungranted-capability"?"capability-denied":"invalid-schema",L.detail,L.path))}}let A={},F=[];for(let w of d.assets)A[w.url]={url:w.url,hash:w.hash,alg:"sha256"},w.fallback&&(A[w.fallback.url]={url:w.fallback.url,hash:w.fallback.hash,alg:"sha256"}),F.push({id:w.id,ref:w.url,type:w.kind,integrity:`sha256-${w.hash}`,provenance:{contentId:d.contentId,revision:d.revision,publisher:d.publisher,adapterId:d.adapterId},fallback:w.fallback?{id:w.id,ref:w.fallback.url,type:w.fallback.kind,integrity:`sha256-${w.fallback.hash}`}:void 0});let x=Qn({declared:A,fetchBytes:async w=>{if(b.aborted)return;let M=Object.values(A).find(U=>U.url===w);if(!M)return;let q=r.get(M.hash)??await l.fetchBytes(w,b);if(!q||b.aborted)return;let _=await Rr(q);if(_!==M.hash)throw Ee({id:"",ref:w,code:"hash-mismatch",message:`hash mismatch for "${w}"`});return r.set(_,q),q},hashBytes:Rr}),H=Ut({resolver:x,emitEvents:!1,wallClockTimeout:!1});if(b.aborted)return H.dispose(),{ok:!1,errors:[ue("superseded","staging aborted")]};let K=()=>{H.abort(),H.dispose()};b.addEventListener("abort",K,{once:!0});let $;try{$=await H.preload(F)}finally{b.removeEventListener("abort",K),H.dispose()}if(b.aborted)return{ok:!1,errors:[ue("superseded","staging aborted")]};let p={},E=[];for(let w of d.assets){let M=$.items[w.id];if(M?.state==="ready"){p[w.id]=Ug(w,M.resource,M.resource.usedFallback===!0||!!M.failure);continue}if(w.optional)continue;let L=M?.state==="failed"?M.failure:$.failures.find(q=>q.id===w.id);E.push(ue(L?.code==="hash-mismatch"?"hash-mismatch":"asset-failed",L?.message??`required asset "${w.id}" failed`,w.id))}return E.length>0?{ok:!1,errors:E}:{ok:!0,bundle:{bundleId:ct(d.contentId,d.revision),contentId:d.contentId,revision:d.revision,manifestVersion:wt,publisher:d.publisher,source:d.source,adapterId:d.adapterId,signature:d.signature,resources:p}}}function g(d,l,b){return B(_o,{...d,reasonCode:l}),{ok:!1,errors:[ue("stale-health-check",b)]}}async function f(d,l){let b=we(d),A=s;s=b;let F=!0;try{F=e.healthCheck?await e.healthCheck(b):!0}catch(x){return xn(s,b)?(s=A,B(Vr,{...l,revision:A?.revision??"",reasonCode:"activation-failed"}),J([ue("activation-failed",x instanceof Error?x.message:String(x))],l)):g(l,"stale-health-check","stale health check ignored; a newer revision is active")}return F?xn(s,b)?(c=A,a=we(s),u=null,B(Lo,l),{ok:!0,bundle:we(s)}):g(l,"stale-health-check","stale health check ignored; a newer revision is active"):xn(s,b)?(s=A,B(Vr,{...l,revision:A?.revision??"",reasonCode:"health-check-failed"}),J([ue("health-check-failed","post-activation health check failed")],l)):g(l,"stale-health-check","stale health check ignored; a newer revision is active")}let I={pin(d=!0){T(),i=d},unpin(){T(),i=!1},isPinned(){return T(),i},async discover(d,l){T();let b=k(l);if(!b)return;let A=await b.discover(d);return A&&B(No,{contentId:A.contentId,revision:A.revision,adapterId:A.adapterId,bundleId:ct(A.contentId,A.revision)}),A?we(A):void 0},async activate(d){T();let l=k(d.adapterId);if(!l)return J([ue("unknown-adapter",`unknown adapter "${String(d.adapterId)}"`)],{contentId:d.contentId,revision:d.revision??"",adapterId:d.adapterId??""});let b=d.revision;if(!b){let H=await l.discover(d.contentId);b=H?.revision,H&&B(No,{contentId:H.contentId,revision:H.revision,adapterId:H.adapterId,bundleId:ct(H.contentId,H.revision)})}if(!ke(b)||b==="latest")return J([ue("unknown-revision","activation requires an exact revision")],{contentId:d.contentId,revision:String(b??""),adapterId:l.id});let A={contentId:d.contentId,revision:b,adapterId:l.id,bundleId:ct(d.contentId,b)};if(s&&s.contentId===d.contentId&&s.revision===b&&s.adapterId===l.id)return{ok:!0,bundle:we(s),idempotent:!0};if(i&&s)return J([ue("pinned","activator is pinned; live revision movement is frozen")],A);let F=++S;R?.abort();let x=new AbortController;R=x,m={contentId:d.contentId,revision:b,adapterId:l.id,bundleId:A.bundleId},B(uc,A);try{let H=await l.loadRevision(d.contentId,b,x.signal);if(F!==S||x.signal.aborted)return B(Fr,A),{ok:!1,errors:[ue("superseded",`revision ${b} was superseded`)]};if(!H.ok)return J(H.errors,A);let K=H.catalog,$=Fo(K);if(!$.ok)return J($.errors,A);let p=await O($.catalog,l,x.signal);return F!==S||x.signal.aborted?(B(Fr,A),{ok:!1,errors:[ue("superseded",`revision ${b} was superseded`)]}):p.ok?(B(lc,A),F!==S||x.signal.aborted?(B(Fr,A),{ok:!1,errors:[ue("superseded",`revision ${b} was superseded`)]}):await f(p.bundle,A)):J(p.errors,A)}finally{F===S&&(m=null,R===x&&(R=null))}},rollback(){T();let d=c??a;if(xn(s,d))return{ok:!0,bundle:we(s),idempotent:!0};if(i)return{ok:!1,errors:[ue("pinned","activator is pinned; live revision movement is frozen")]};let l=s;return s=we(d),a=we(d),c=we(d),B(Vr,{contentId:s?.contentId??l?.contentId??"",revision:s?.revision??"",adapterId:s?.adapterId??l?.adapterId??"",bundleId:s?.bundleId,reasonCode:"rolled-back"}),{ok:!0,bundle:we(s)}},inspect(){return T(),D()},activeBundle(){return T(),we(s)},snapshot(){return T(),{schemaVersion:Tn,pinned:i,active:we(s),lastKnownGood:we(a),previous:we(c)}},restore(d){T();let l=jg(d);if(!l.ok)return l;let b=l.snapshot,A=[b.active,b.lastKnownGood,b.previous];for(let F of A)if(F&&!P(F.contentId,F.revision,F.adapterId))return{ok:!1,errors:[ue("unknown-revision",`unknown revision ${F.contentId}@${F.revision}`,"revision")]};return i&&!xn(s,b.active)?{ok:!1,errors:[ue("pinned","activator is pinned; live revision movement is frozen")]}:(i=b.pinned,s=we(b.active),a=we(b.lastKnownGood),c=we(b.previous),u=null,{ok:!0,snapshot:I.snapshot()})},provenance(){if(T(),!!s)return{source:s.source,publisher:s.publisher,version:s.revision,signature:s.signature}},destroy(){o=!0,R?.abort(),R=null,m=null}};return I}function zg(e,t){return{width:e,height:t,data:new Uint8ClampedArray(e*t*4),colorSpace:"srgb"}}function Yg(){return{putImageData:()=>{}}}function Xg(e,t,n,r={}){let i=r.frames??30,o=r.warmupFrames??5,s=r.frameStepMs??1e3/60,a=r.width??1920,c=r.height??1080,m=r.tokenId??"18009999",u=new qt({hash:t,tokenId:m}),y=Ln(a,c),S=new Vn,R=e.getDefaultFeatureState?.(u,y,n,S),T=e.getDefaultState(u,y,n,S,void 0,void 0,void 0,R);r.prepareState?.(T,R);let k=zg(a,c),P=r.drawingContext??Yg(),B=typeof e.render=="function",J=null,D=null,O=0,g=0,f=0,I=0,d=0;for(let x=1;x<=o+i;x++){let H=O+x*s,K=cn(H,O,J,D),$=performance.now();e.update(u,x,n,y,T,S,void 0,void 0,K,R);let p=performance.now(),E=0;if(B){let M=cn(H,O,J,D);e.render(u,x,n,y,T,P,k,void 0,void 0,M,R),E=performance.now()-p}let w=p-$;J=H,D=H,x>o&&(g+=w,f+=E,w>I&&(I=w),E>d&&(d=E))}S.destroy();let l=g+f,b=g/i,A=f/i,F=l/i;return{frames:i,updateAvgMs:b,renderAvgMs:A,totalAvgMs:F,updateMaxMs:I,renderMaxMs:d,estFps:F>0?1e3/F:1/0,updatePct:l>0?100*g/l:0,renderPct:l>0?100*f/l:0}}function Qg(e,t=2){let n=r=>Number.isFinite(r)?Number(r.toFixed(t)):r;return{frames:e.frames,updateAvgMs:n(e.updateAvgMs),renderAvgMs:n(e.renderAvgMs),totalAvgMs:n(e.totalAvgMs),updateMaxMs:n(e.updateMaxMs),renderMaxMs:n(e.renderMaxMs),estFps:n(e.estFps),updatePct:n(e.updatePct),renderPct:n(e.renderPct)}}var $o={width:320,height:180,deviceScaleFactor:1},Zg="Browser harness has been destroyed";function eh(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function Bo(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function Ho(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function qo(e,t,n,r,i){let o={x:t,y:n,width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,toJSON(){return this}};e.getBoundingClientRect=()=>o}function fc(e){return!e||!(e instanceof HTMLElement)||e===document.body?{tag:"body",id:"",role:null,name:""}:{tag:e.tagName.toLowerCase(),id:e.id,role:e.getAttribute("role"),name:e.getAttribute("aria-label")??e.textContent?.trim()??""}}function th(e){return e.querySelector("[aria-live]")?.textContent??""}function mc(e,t,n){let r={bubbles:!0,cancelable:!0,clientX:t,clientY:n},i=globalThis.PointerEvent;typeof i=="function"?(e.dispatchEvent(new i("pointerdown",{...r,pointerId:1,pointerType:"mouse",buttons:1})),e.dispatchEvent(new i("pointerup",{...r,pointerId:1,pointerType:"mouse",buttons:0}))):(e.dispatchEvent(new MouseEvent("mousedown",r)),e.dispatchEvent(new MouseEvent("mouseup",r))),e.dispatchEvent(new MouseEvent("click",r))}function nh(e,t,n){let r=Array.from(e.querySelectorAll("*")),i=null,o=Number.POSITIVE_INFINITY;for(let s of r){if(!(s instanceof HTMLElement))continue;let a=s.getBoundingClientRect();if(t>=a.left&&t<a.right&&n>=a.top&&n<a.bottom){let c=Math.max(1,a.width*a.height);c<=o&&(i=s,o=c)}}return i??e}function gc(e){let t=window.matchMedia;return window.matchMedia=n=>({matches:e&&/prefers-reduced-motion:\s*reduce/i.test(n),media:n,onchange:null,addListener(){},removeListener(){},addEventListener(){},removeEventListener(){},dispatchEvent(){return!1}}),()=>{window.matchMedia=t}}function hc(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=e.geometry,r=e.semanticLayers,i=e.viewport?.width??$o.width,o=e.viewport?.height??$o.height,s=e.viewport?.deviceScaleFactor??$o.deviceScaleFactor,a=e.reducedMotion===!0,c=e.inputModality??"pointer",m=e.origin??0,u=e.fit??"contain",y=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),S=Object.getOwnPropertyDescriptor(window,"innerWidth"),R=Object.getOwnPropertyDescriptor(window,"innerHeight"),T=gc(a),k=()=>{Object.defineProperty(window,"devicePixelRatio",{value:s,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:i,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:o,configurable:!0})};k();let P=document.createElement("div");P.setAttribute("data-cyberart-browser-harness",""),P.style.position="relative",P.style.overflow="auto",P.tabIndex=-1,document.body.appendChild(P);let B=[],J=[],D=!1,O=0,g=e.createId??(()=>`br-${++O}`),f=()=>Ha({contentWidth:e.contentWidth??i,contentHeight:e.contentHeight??o,viewportWidth:i,viewportHeight:o,mode:u,devicePixelRatio:s}),I=f(),d=()=>Math.max(1,Math.round(i*s)),l=()=>Math.max(1,Math.round(o*s)),b=(_,U)=>{let h=n?.regions.find(C=>C.id===_);if(!h)return;let v=Wa(h,I);if(v)return U.style.position=U.style.position||"absolute",U.style.left=`${v.x}px`,U.style.top=`${v.y}px`,U.style.width=`${v.width}px`,U.style.height=`${v.height}px`,qo(U,v.x,v.y,v.width,v.height),{...v}},A=()=>{I=f(),P.style.width=`${i}px`,P.style.height=`${o}px`,Ho(P,i,o),qo(P,0,0,i,o),P.dataset.inputModality=c,P.dataset.reducedMotion=a?"true":"false",k()};A();let F=()=>({root:P,get layout(){return Bo(I)},get reducedMotion(){return a},get inputModality(){return c},placeRegion:b}),x=e.mount?.(F())??{},H=x.participants??[],K,$,p=()=>{};if(H.length>0){for(let _ of H)_.container&&Ho(_.container,d(),l());K=rr({origin:m,width:d(),height:l(),createId:g,now:()=>m,participants:H.map(_=>({..._,seed:_.seed??t,width:_.width??d(),height:_.height??l()}))}),p=K.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",ht],_=>{J.push(_)}),x.compositor&&($=Ba({...x.compositor,group:K,width:i,height:o,dpr:s}))}let E=()=>({...F(),group:K,compositor:$,publish(_){if(!K)throw new Error("Browser harness: publish requires mounted carts");return K.publish(_)}}),w=()=>{if(A(),K){let _=d(),U=l();for(let h of H){h.container&&(Ho(h.container,_,U),h.container.style.width=`${i}px`,h.container.style.height=`${o}px`);try{let v=K.participant(h.id).cart.canvas;v&&(v.style.width=`${i}px`,v.style.height=`${o}px`,qo(v,0,0,i,o))}catch{}}}},M=()=>{if(D)throw new Error(Zg)};w(),x.ready?.(E());let L=(_,U,h)=>{if(B.push({type:"click",x:_,y:U,...h?{selector:h}:{}}),h){let Z=P.querySelector(h);if(!(Z instanceof HTMLElement))throw new Error(`No element matches ${h}`);mc(Z,_,U);return}let v=r?r.hitTest(gr({x:_,y:U},I)):void 0,C=v===void 0&&n!==void 0?qa({x:_,y:U},I,n,{space:"css"}):v?{id:v.id}:void 0,W=(C?P.querySelector(`#${eh(C.id)}`):null)??nh(P,_,U);mc(W,_,U)};return{root:P,get group(){return K},get compositor(){return $},get layout(){return Bo(I)},get events(){return J.slice()},goto(){M()},setViewport(_,U,h){M(),i=Math.max(1,_|0),o=Math.max(1,U|0),h!==void 0&&(s=h>0?h:1),B.push({type:"viewport",width:i,height:o,dpr:s}),$?$.resize(i,o,s):K&&K.resize(d(),l()),w(),x.relayout?.(E())},setReducedMotion(_){M(),a=_,T(),T=gc(a),B.push({type:"reducedMotion",value:_}),w(),x.relayout?.(E())},setInputModality(_){M(),c=_,B.push({type:"inputModality",value:_}),w()},click(_,U){if(M(),typeof _=="string"){let h=P.querySelector(_);if(!(h instanceof HTMLElement))throw new Error(`No element matches ${_}`);let v=h.getBoundingClientRect();L(v.left+v.width/2,v.top+v.height/2,_);return}if(U===void 0)throw new Error("click(x, y) requires a y coordinate");L(_,U)},key(_){M(),B.push({type:"key",key:_}),(document.activeElement instanceof HTMLElement?document.activeElement:P).dispatchEvent(new KeyboardEvent("keydown",{key:_,bubbles:!0,cancelable:!0}))},focus(_){M();let U=P.querySelector(_);if(!(U instanceof HTMLElement))throw new Error(`No element matches ${_}`);U.focus()},async step(_=1){M(),B.push({type:"step",frames:_}),K&&await K.step(_)},async advance(_){M(),B.push({type:"advance",ms:_}),K&&await K.step(Math.max(0,Math.round(_/1e3*30)))},screenshot(){if(M(),$){let _=$.captureComposedFrame();return{imageData:_.imageData,pngDataUrl:_.pngDataUrl,html:P.outerHTML,declaredOrder:_.declaredOrder.map(U=>U.id)}}return{imageData:null,pngDataUrl:null,html:P.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return M(),{focus:fc(document.activeElement),live:th(P),html:P.outerHTML,publishedRegions:(r?.inspectPublished()??[]).map(_=>({id:_.id,geometryKinds:[..._.geometryKinds],name:_.a11y?.name??null,role:_.a11y?.role??null}))}},async inspect(){M();let _={},U={},h=0;if(K){let v=await K.inspect();for(let C of v.diagnostics.participantIds)_[C]=K.participant(C).events.slice(),U[C]=v.participants[C]?.state,h=v.diagnostics.clocks[C]?.framesElapsed??h}return{host:x.hostState?.()??null,layout:Bo(I),events:J.slice(),participantEvents:_,state:U,focus:fc(document.activeElement),publishedRegions:(r?.inspectPublished()??[]).map(v=>({id:v.id,geometryKinds:[...v.geometryKinds],name:v.a11y?.name??null,role:v.a11y?.role??null})),scrollTop:P.scrollTop,clock:{framesElapsed:h}}},reproduction(){return M(),{seed:t,viewport:{width:i,height:o,dpr:s},reducedMotion:a,inputModality:c,actions:B.map(_=>({..._}))}},captureComposedFrame(){if(M(),!$)throw new Error("Browser harness: captureComposedFrame requires a compositor");return $.captureComposedFrame()},destroy(){if(!D){D=!0,p(),document.activeElement instanceof HTMLElement&&P.contains(document.activeElement)&&document.activeElement.blur();try{x.destroy?.()}finally{try{$?.destroy()}finally{try{K?.destroy()}finally{P.remove(),T(),y&&Object.defineProperty(window,"devicePixelRatio",y),S&&Object.defineProperty(window,"innerWidth",S),R&&Object.defineProperty(window,"innerHeight",R)}}}}}}}var jo=1,Uo=1,zo="production.scenario.state.observed",Br="production.scenario.state.failed",Yo="production.scenario.diagnostic.lifecycle",rh=[zo,Br,Yo],bc=["input","reducer","routing","binding","cue","pixels","caption","audio","save-replay"],ih=["invalid-scenario","invalid-schema","unknown-field","missing-field","callbacks-forbidden","missing-participant","missing-layer","destroyed","assertion-failed"],oh=["desktop","mobile"],Hr={desktop:{width:64,height:48,deviceScaleFactor:1},mobile:{width:48,height:64,deviceScaleFactor:2}},sh="Production scenario runner has been destroyed",Sv=new Set(rh),kv=new Set(ih),Ev=new Set(bc),vc=new Set(oh),ah=new Set(["id","schemaVersion","seed","required","matrix","steps"]),dh=new Set(["participants","layers"]),ch=new Set(["viewport","width","height","dpr","reducedMotion","mute","failedAssetIds","fallback","inputModality"]),uh=new Set(["click","key","focus","step","viewport","reducedMotion","mute","failAsset","save","reload","replay"]);function xe(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r&&(i.boundary=r),i}function yt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function an(e){return typeof e=="string"&&e.length>0}function je(e){return JSON.parse(JSON.stringify(e))}function Jo(e,t,n){if(typeof e=="function"){n.push(xe("callbacks-forbidden","authored scenarios must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Jo(r,`${t}[${i}]`,n));return}if(yt(e))for(let[r,i]of Object.entries(e))Jo(i,t?`${t}.${r}`:r,n)}function Wo(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(xe("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function yc(e,t,n){if(!Array.isArray(e))return n.push(xe("invalid-schema","must be an array of strings",t)),[];let r=[];return e.forEach((i,o)=>{if(!an(i)){n.push(xe("invalid-schema","id must be a non-empty string",`${t}[${o}]`));return}r.push(i)}),r}function Go(){return{version:1,fields:{scenarioId:{type:"string"},seed:{type:"string",optional:!0},boundary:{type:"string",optional:!0},reason:{type:"string",optional:!0},code:{type:"string",optional:!0},missing:{type:"array",optional:!0}}}}function Ko(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function lh(){return[Ko(pe(zo,Go())),Ko(pe(Br,Go())),Ko(qe(Yo,Go()))]}function ph(e,t,n){if(!yt(e)||!an(e.type)){n.push(xe("invalid-schema","step.type is required",t));return}if(!uh.has(e.type)){n.push(xe("unknown-field",`unknown step type "${e.type}"`,`${t}.type`));return}let r=n.length,i=a=>{an(e[a])||n.push(xe("missing-field",`${e.type} step requires ${a}`,`${t}.${a}`))},o=a=>{(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push(xe("missing-field",`${e.type} step requires numeric ${a}`,`${t}.${a}`))},s=a=>{typeof e[a]!="boolean"&&n.push(xe("missing-field",`${e.type} step requires boolean ${a}`,`${t}.${a}`))};switch(e.type){case"click":{let a=an(e.selector),c=typeof e.x=="number"&&typeof e.y=="number";!a&&!c&&n.push(xe("missing-field","click step requires selector or x and y",t));break}case"key":i("key");break;case"focus":i("selector");break;case"step":o("frames");break;case"viewport":{let a=e.kind!==void 0;a&&!vc.has(String(e.kind))&&n.push(xe("invalid-schema","viewport.kind must be desktop or mobile",`${t}.kind`));let c=typeof e.width=="number"&&typeof e.height=="number";!a&&!c&&n.push(xe("missing-field","viewport step requires kind or width and height",t));break}case"reducedMotion":case"mute":s("value");break;case"failAsset":i("assetId");break;default:break}if(n.length===r)return je(e)}function Sc(e){let t=[];if(Jo(e,"",t),!yt(e))return{ok:!1,errors:[xe("invalid-scenario","scenario must be an object")]};if(Wo(e,ah,"",t),an(e.id)||t.push(xe("missing-field","id is required","id")),e.schemaVersion!==jo&&t.push(xe("invalid-schema","schemaVersion must be 1","schemaVersion")),an(e.seed)||t.push(xe("missing-field","seed is required","seed")),!yt(e.required))t.push(xe("missing-field","required participants and layers are required","required"));else{Wo(e.required,dh,"required",t);let o=yc(e.required.participants,"required.participants",t),s=yc(e.required.layers,"required.layers",t);o.length===0&&t.push(xe("missing-field","required.participants must not be empty","required.participants")),s.length===0&&t.push(xe("missing-field","required.layers must not be empty","required.layers"))}let n;e.matrix!==void 0&&(yt(e.matrix)?(Wo(e.matrix,ch,"matrix",t),e.matrix.viewport!==void 0&&!vc.has(String(e.matrix.viewport))&&t.push(xe("invalid-schema","matrix.viewport must be desktop or mobile","matrix.viewport")),n=je(e.matrix)):t.push(xe("invalid-schema","matrix must be an object","matrix")));let r;if(e.steps!==void 0&&(Array.isArray(e.steps)?(r=[],e.steps.forEach((o,s)=>{let a=ph(o,`steps[${s}]`,t);a&&r.push(a)})):t.push(xe("invalid-schema","steps must be an array","steps"))),t.length>0)return{ok:!1,errors:t};let i={id:e.id,schemaVersion:jo,seed:e.seed,required:{participants:[...e.required.participants],layers:[...e.required.layers]}};return n&&(i.matrix=n),r&&(i.steps=r),{ok:!0,scenario:i}}function Lt(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=2166136261;for(let r=0;r<t.length;r++)n^=t[r],n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function Dn(e){return JSON.stringify(e)}function $r(e,t){let n=new Set(t);return e.filter(r=>!n.has(r))}function kc(e,t={}){let n=(r,i,o)=>({boundary:r,code:i,detail:o});if(t.inputDispatched===!0&&!e.inputDispatched)return n("input","assertion-failed","input was not dispatched");if(t.reducerAccepted===!0&&e.reducerAccepted!==!0)return n("reducer","assertion-failed","host reducer did not accept");if(t.reducerRejected===!0&&e.reducerRejected!==!0)return n("reducer","assertion-failed","host reducer did not reject");if(t.routedTypes){for(let r of t.routedTypes)if(!e.routedTypes.includes(r))return n("routing","assertion-failed",`missing routed type "${r}"`)}if(t.requiredParticipantsPresent===!0&&!e.requiredParticipantsPresent)return n("routing","missing-participant",`missing participants: ${e.missingParticipants.join(", ")}`);if(t.selectedBindingIds){for(let r of t.selectedBindingIds)if(!e.selectedBindingIds.includes(r))return n("binding","assertion-failed",`missing binding "${r}"`)}if(t.sequenceId&&e.sequenceId!==t.sequenceId)return n("cue","assertion-failed",`expected sequence "${t.sequenceId}"`);if(t.requiredLayersPresent===!0&&!e.requiredLayersPresent)return n("pixels","missing-layer",`missing layers: ${e.missingLayers.join(", ")}`);if(t.captions){for(let r of t.captions)if(!e.captions.includes(r))return n("caption","assertion-failed",`missing caption "${r}"`)}return t.audioInvoked===!0&&!e.audioInvoked?n("audio","assertion-failed","audio was not invoked"):t.audioFailed===!0&&!e.audioFailed?n("audio","assertion-failed","audio did not fail as required"):t.snapshotOk===!0&&e.snapshotOk!==!0?n("save-replay","assertion-failed","snapshot was not valid"):t.replayMatch===!0&&e.replayMatch!==!0?n("save-replay","assertion-failed","replay traces did not match"):null}function fh(e){let t=e?.viewport==="mobile"?"mobile":"desktop",n=Hr[t];return{preset:t,viewport:{width:e?.width??n.width,height:e?.height??n.height,deviceScaleFactor:e?.dpr??n.deviceScaleFactor}}}function mh(e){return{type:"host.intent.select",kind:"intent",payload:{id:e}}}function gh(e){return{type:"host.intent.key",kind:"intent",payload:{key:e}}}function hh(e,t,n,r){return{version:1,cartId:e,seed:t,framesElapsed:n,state:r}}function Ec(e){let t=Sc(e.scenario);if(!t.ok)throw new Error(`createProductionScenarioRunner: ${t.errors.map(G=>G.detail).join("; ")}`);let n=t.scenario,r=n.matrix??{},{preset:i,viewport:o}=fh(r),s=e.host,a=je(s.initialState),c=null,m,u,y=!1,S=[],R=0,T=0,k=e.createId??(()=>`ps-${++R}`),P=e.mapClick??mh,B=e.mapKey??gh,J=e.sequenceBindings??{},D=e.origin??0,O=e.semanticRegions&&e.semanticRegions.length>0?Bi({originFrame:0,regions:e.semanticRegions}):void 0,g,f,I,d=xi({originFrame:0,reducedSensory:r.reducedMotion===!0||r.mute===!0}),l=or(),b,A=null,F=G=>s.project?s.project(G):je(G),x=G=>b?b.publish(G):q.group?.publish(G),H=G=>{let z=F(a),ae=typeof z.worldRevision=="string"||typeof z.worldRevision=="number"?z.worldRevision:void 0;I?.apply(z,ae!==void 0?{revision:ae}:void 0);let V=G;if(V&&f){T+=1;let j=`${n.id}:${V}:${T}`;f.playSequence(V,{invocationId:j,idempotencyKey:j,bindings:J[V]??{}})}p()},K=G=>{let z=s.reduce(je(a),G);c=z,a=je(z.state);let ae=yt(G.payload)?G.payload:{};return z.accepted?x({type:"host.state.accepted",kind:"state",payload:{...ae,reason:z.reason??"accepted"}}):x({type:"host.state.rejected",kind:"state",payload:{...ae,reason:z.reason??"rejected"}}),H(z.playSequence),z},$=document.createElement("div");$.setAttribute("aria-live","polite"),$.id="status",$.textContent="";let p=()=>{let G=f?.inspect().captions.filter(ae=>ae.visible).map(ae=>ae.text)??[],z=typeof a.caption=="string"?a.caption:"";$.textContent=G[0]??z},E=()=>{let G=q.group,z=q.compositor,ae=G?G.inspectParticipants().map(Q=>Q.id):[],V=z?z.layers().map(Q=>Q.id):[],j=$r(n.required.participants,ae);if(j.length>0)return{boundary:"routing",code:"missing-participant",detail:`missing participants: ${j.join(", ")}`};let Y=$r(n.required.layers,V);return Y.length>0?{boundary:"pixels",code:"missing-layer",detail:`missing layers: ${Y.join(", ")}`}:null},w=G=>({scenarioId:n.id,seed:n.seed,boundary:G.boundary,reason:G.detail}),M=G=>{let z={type:Yo,kind:"diagnostic",payload:{...w(G),code:G.code}};x(z),e.router?.publish(z)},L=G=>{let z={type:Br,kind:"state",payload:w(G)};x(z),e.router?.publish(z),M(G)},q=hc({seed:n.seed,viewport:o,reducedMotion:r.reducedMotion===!0,inputModality:r.inputModality??"pointer",origin:D,createId:k,geometry:e.geometry,semanticLayers:O,contentWidth:e.contentWidth??o.width,contentHeight:e.contentHeight??o.height,mount(G){let z=[],ae=[...e.geometry?.regions.map(j=>j.id)??[],...(e.semanticRegions??[]).map(j=>j.id)],V=new Set;for(let j of ae){if(V.has(j))continue;V.add(j);let Y=document.createElement("button");Y.type="button",Y.id=j,Y.setAttribute("data-testid",j),Y.setAttribute("aria-label",j),G.placeRegion(j,Y),G.root.append(Y),z.push(Y)}return G.root.append($),{participants:e.participants,compositor:{layers:e.compositorLayers},hostState:()=>je(a),ready(j){if(j.group&&(b=l.bind(j.group)),j.compositor&&e.visualLayers&&e.visualLayers.length>0){g=Ti({compositor:j.compositor,originFrame:0,reducedMotion:r.reducedMotion===!0,sceneId:n.id,layers:e.visualLayers});for(let[Q,ie]of Object.entries(e.visualSources??{}))g.registerSource(Q,ie),g.handleHostEvent({type:et,kind:"state",payload:{id:Q}})}let Y=[];for(let Q of e.sequences??[]){let ie=kn(Q);if(!ie.ok)throw new Error(`createProductionScenarioRunner: sequence ${ie.errors.map(de=>de.detail).join("; ")}`);Y.push(ie.sequence)}if(f=Qi({originFrame:0,reducedMotion:r.reducedMotion===!0,reducedSensory:r.mute===!0||r.fallback===!0,audio:d,semantic:O,visual:g,sequences:Y}),e.bindings!==void 0){let Q=Ir(e.bindings);if(!Q.ok)throw new Error(`createProductionScenarioRunner: ${Q.errors.map(ie=>ie.detail).join("; ")}`);I=so({manifest:Q.manifest,visual:g,semantic:O,sequences:f})}for(let Q of z)Q.addEventListener("click",()=>{K(P(Q.id))});G.root.addEventListener("keydown",Q=>{let ie=B(Q.key);ie&&K(ie)}),H()},relayout(j){for(let Y of V){let Q=j.root.querySelector(`#${Y}`);Q instanceof HTMLElement&&j.placeRegion(Y,Q)}},destroy(){$.remove();for(let j of z)j.remove()}}}}),_=()=>{if(y)throw new Error(sh)};d.unlock(),r.mute===!0&&d.broker.mute();let U=new Set(r.failedAssetIds??[]),h=new Set([...U]);for(let G of Object.values(J))for(let z of Object.values(G.assets??{}))z&&h.add(z);for(let G of h){let z={type:U.has(G)?Je:et,kind:"state",payload:{id:G}};d.handleHostEvent(z),g?.handleHostEvent(z)}A=E(),A&&L(A);let v=async G=>{b?await b.step(G):await q.step(G),g?.step(G),f?.step(G),d.step(G),p()},C=()=>{let G=q.group,z=q.compositor,ae=G?G.inspectParticipants().map(he=>he.id):[],V=z?z.layers().map(he=>he.id):[],j=$r(n.required.participants,ae),Y=$r(n.required.layers,V),Q=q.events,ie=[...f?.inspect().captions.filter(he=>he.visible).map(he=>he.text)??[],...typeof a.caption=="string"&&a.caption?[a.caption]:[]],de=d.snapshot(),Oe=q.screenshot(),Ae=S.find(he=>he.type==="click");return{inputDispatched:S.some(he=>he.type==="click"||he.type==="key"),inputTarget:Ae?.selector,reducerAccepted:c?.accepted===!0,reducerRejected:c?c.accepted===!1:void 0,reducerReason:c?.reason,routedTypes:Q.map(he=>he.type),rejected:Q.some(he=>he.type===ht),selectedBindingIds:I?.inspect().selectedBindingIds??[],sequenceId:f?.inspect().active?.sequenceId??c?.playSequence??null,sequencePhase:f?.inspect().active?.phase??null,captions:ie,declaredOrder:Oe.declaredOrder,requiredParticipantsPresent:j.length===0,requiredLayersPresent:Y.length===0,missingParticipants:j,missingLayers:Y,audioInvoked:de.events.some(he=>he.type==="audio.cue.scheduled"||he.type==="audio.cue.started"),audioFailed:de.events.some(he=>he.type==="audio.cue.failed")||(r.failedAssetIds?.length??0)>0,muted:de.muted,replayMatch:u?.ok,snapshotOk:m!==void 0}},N=G=>{A=E();let z=C(),ae={requiredParticipantsPresent:!0,requiredLayersPresent:!0,...G},V=A??kc(z,ae),j=q.screenshot(),Y=q.accessibilitySnapshot(),Q=O?.inspectPublished()??[],ie=l.records(),de=m?Dn(m):"",Oe=j.imageData?new Uint8Array(j.imageData.data):new Uint8Array,Ae=Object.keys(e.visualSources??{}).sort(),he=typeof a.worldRevision=="string"||typeof a.worldRevision=="number"?a.worldRevision:null,lt={schemaVersion:Uo,scenarioId:n.id,seed:n.seed,matrix:{viewport:i,width:o.width,height:o.height,dpr:o.deviceScaleFactor??1,...r},hashes:{pixels:Lt(Oe),semantic:Lt(Dn(Q)),a11y:Lt(Dn(Y)),trace:Lt(Dn(ie)),snapshot:de?Lt(de):"0".repeat(8),assets:Lt(Dn(Ae))},revisions:{world:he,bindings:I?.inspect().revision??null,snapshot:Ve},traces:{envelopes:q.events.slice(),inspector:ie,audio:d.snapshot().events.slice(),actions:S.slice()},screenshot:{pngDataUrl:j.pngDataUrl,declaredOrder:j.declaredOrder.slice(),width:j.imageData?.width??o.width,height:j.imageData?.height??o.height},semantic:Q,a11y:Y,firstBrokenBoundary:V?.boundary??null,localization:V,participants:q.group?.inspectParticipants().map(bt=>bt.id)??[],layers:q.compositor?.layers().map(bt=>bt.id)??[],observation:z};return x({type:V?Br:zo,kind:"state",payload:{scenarioId:n.id,seed:n.seed,boundary:V?.boundary,reason:V?.detail}}),V&&M(V),lt},W=()=>({schemaVersion:Uo,host:je(a),lastDecision:c?je(c):null,visual:g?.snapshot()??null,semantic:O?.snapshot()??null,bindings:I?.snapshot()??null,sequences:f?.snapshot()??null,audio:d.snapshot()}),Z=()=>{let G=fi({cart:{id:n.id,version:"1"},seed:n.seed,clock:{framesElapsed:0},engineState:hh(n.id,n.seed,0,je(a)),hostState:W(),createdAt:"2026-09-05T00:00:00.000Z"});if(!G.ok)throw new Error(G.errors.map(z=>z.detail).join("; "));return m=G.snapshot,G.snapshot},X=G=>{let z=G.hostState;if(!yt(z)||!yt(z.host))throw new Error("Production scenario reload: hostState.host is required");a=je(z.host),c=yt(z.lastDecision)?je(z.lastDecision):null,z.visual&&g&&g.restore(z.visual),z.semantic&&O&&O.restore(z.semantic),z.bindings&&I&&I.restore(z.bindings),z.sequences&&f&&f.restore(z.sequences),H(),m=G},re=async()=>{let G=q.group;if(!b||!G)return u={ok:!1,detail:"replay requires a mounted runtime group"},u;let z=await b.exportTrace(),ae=Ec({...e,scenario:n,createId:(()=>{let V=0;return()=>`ps-${++V}`})()});try{let V=await Ri(z,ae.harness.group);return u=Ii(z.records,V.report.records),V.inspector.destroy(),u}finally{ae.destroy()}},ee=async G=>{switch(S.push(je(G)),G.type){case"click":if(typeof G.selector=="string")q.click(G.selector);else if(typeof G.x=="number"&&typeof G.y=="number")q.click(G.x,G.y);else throw new Error("click step requires selector or x,y");return;case"key":q.root.focus(),q.key(G.key);return;case"focus":q.focus(G.selector);return;case"step":await v(G.frames);return;case"viewport":{let z=G.kind==="mobile"?Hr.mobile:G.kind==="desktop"?Hr.desktop:o;q.setViewport(G.width??z.width,G.height??z.height,G.dpr??z.deviceScaleFactor);return}case"reducedMotion":q.setReducedMotion(G.value);return;case"mute":G.value?d.broker.mute():d.broker.unmute();return;case"failAsset":{let z={type:Je,kind:"state",payload:{id:G.assetId}};d.handleHostEvent(z),g?.handleHostEvent(z);return}case"save":Z();return;case"reload":if(!m)throw new Error("reload requires a prior save");X(m);return;case"replay":await re();return}};return{scenario:n,harness:q,audio:d,inspector:l,goto(){_(),q.goto()},click(G,z){_(),S.push(typeof G=="string"?{type:"click",selector:G}:{type:"click",x:G,y:z}),q.click(G,z)},key(G){_(),S.push({type:"key",key:G}),q.root.focus(),q.key(G)},focus(G){_(),S.push({type:"focus",selector:G}),q.focus(G)},setViewport(G,z,ae){_(),S.push({type:"viewport",width:G,height:z,dpr:ae}),q.setViewport(G,z,ae)},setReducedMotion(G){_(),S.push({type:"reducedMotion",value:G}),q.setReducedMotion(G)},mute(G=!0){_(),S.push({type:"mute",value:G}),G?d.broker.mute():d.broker.unmute()},failAsset(G){_(),S.push({type:"failAsset",assetId:G});let z={type:Je,kind:"state",payload:{id:G}};d.handleHostEvent(z),g?.handleHostEvent(z)},async step(G=1){_(),S.push({type:"step",frames:G}),await v(G)},applyHostIntent(G){return _(),K(G)},playSequence(G,z=`${n.id}:${G}`){_(),f?.playSequence(G,{invocationId:z,idempotencyKey:z,bindings:J[G]??{}}),p()},publish(G){return _(),x(G)},save(){return _(),S.push({type:"save"}),Z()},reload(G){_();let z=G??m;if(!z)throw new Error("reload requires a prior save or an explicit snapshot");S.push({type:"reload"}),X(z)},async replay(){return _(),S.push({type:"replay"}),re()},async run(G){_(),q.goto();let z=G??n.steps??[];for(let ae of z)await ee(ae);return N()},captureEvidence(G){return _(),N(G)},inspect(){return _(),{host:je(a),lastDecision:c,bindings:I?.inspect()??null,sequences:f?.inspect()??null,visual:g?.inspect()??null,semantic:O?.inspect()??null,audio:d.snapshot(),participants:q.group?.inspectParticipants().map(G=>G.id)??[],layers:q.compositor?.layers().map(G=>G.id)??[],composition:E()}},destroy(){y||(y=!0,b?.unbind(),l.destroy(),I?.destroy(),f?.destroy(),g?.destroy(),O?.destroy(),d.destroy(),q.destroy())}}}async function Cv(e,t){let n=e.captureComposedFrame();if(!t)return n;let{writeFile:r}=await import("node:fs/promises");return await r(t,_n(n.pngDataUrl)),{...n,path:t}}export{Lo as CONTENT_REVISION_ACTIVATED_EVENT,Tn as CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION,Qs as DEFAULT_HEADLESS_HEIGHT,Xs as DEFAULT_HEADLESS_WIDTH,fa as DEFAULT_MAX_SELECTION_RECORDS,Hr as DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS,Ys as HEADLESS_PNG_DATA_URL,ve as HeadlessUnsupportedOperationError,Er as PRESENTATION_BINDING_APPLIED_EVENT,no as PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION,bc as PRODUCTION_SCENARIO_BOUNDARIES,jo as PRODUCTION_SCENARIO_SCHEMA_VERSION,Uo as PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION,ma as SELECTION_DECISION_KINDS,Ci as SELECTION_REASON_CODES,sr as SELECTION_TRACE_SCHEMA_VERSION,ga as SELECTION_TRACE_SENSITIVE_KEYS,ea as UPDATE_GOLDEN_ENV,Mo as WORLD_PATCH_ACCEPTED_EVENT,_r as WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION,ra as assertPixelsEqual,Wu as assertPngDataUrlsEqual,zr as attachHeadlessCanvas2D,xl as attachSelectionTrace,Xg as benchmarkCartFrames,hm as cabinetPortal,Ql as captureVisualLayers,na as compareImageData,Ii as compareReplayTraces,$g as contentRevisionEventContracts,Jg as createContentRevisionActivator,ss as createDefaultGlyphAtlas,xi as createHeadlessAudioAdapter,qu as createHeadlessHarness,Mm as createHeadlessJobWorker,ll as createHeadlessMultiCartHarness,nn as createHostGrantSet,wc as createImageFixture,Bm as createJobCoordinator,Bd as createMemoryJobPersistence,ac as createMemoryWorldPersistence,bm as createPortalLifecycle,so as createPresentationBindingRuntime,Qi as createPresentationSequencePlayer,Ec as createProductionScenarioRunner,sm as createRemoteCartSandbox,Gg as createRemoteContentAdapter,or as createReplayInspector,Tl as createSelectionTrace,Bi as createSemanticLayerController,Wg as createStaticContentAdapter,Ti as createVisualLayerController,ig as createWorldGraph,Ng as createWorldPatchApplier,Yr as decodePng,Ir as definePresentationBindings,kn as definePresentationSequence,Sc as defineProductionScenario,Ft as encodePng,$t as encodePngDataUrl,oo as evaluatePresentationBindings,Lt as fnv1aHex,Qg as formatFrameBenchmarkResult,Ac as getHeadlessSurface,yi as imageDataFromPngDataUrl,er as installHeadlessCanvas,Rl as isSelectionDecisionKind,Il as isSelectionReasonCode,Dm as jobEventContracts,kc as localizeProductionScenarioFailure,gt as makeImageData,ym as paintingPortal,Mf as presentationBindingEventContracts,pf as presentationSequenceEventContracts,lh as productionScenarioEventContracts,Pl as recordSelectionDecision,Ri as replayExportedTrace,Jr as setDefaultGlyphAtlas,ta as shouldUpdateGolden,rg as worldGraphEventContracts,kg as worldPatchEventContracts,Cv as writeComposedFrame,Ku as writeVisualArtifacts};
|
|
8
|
+
var vu=Object.defineProperty;var Ns=(e,t)=>()=>(e&&(t=e(e=0)),t);var Su=(e,t)=>{for(var n in t)vu(e,n,{get:t[n],enumerable:!0})};var Wu={};function Gu(e,t){let n=e.indexOf(ia);if(n===-1)return null;let r=n+ia.length,o=`const __cyberSkip=new Set(${JSON.stringify(t)});const __cyberOrig=registerProcessor;registerProcessor=(n,p)=>__cyberSkip.has(n)?undefined:__cyberOrig(n,p);`;return e.slice(0,r)+o+e.slice(r)}var _i,gr,Ku,_n,ia,oa=Ns(()=>{"use strict";_i=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,gr="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[gr]&&(window.addEventListener("error",e=>{let t=e?.message??"";_i.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";_i.test(n)&&e.preventDefault()}),window[gr]=!0);Ku=!1,_n=(...e)=>{Ku&&console.log("[workletPatch]",...e)},ia="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[gr]){let e=new WeakMap,t=/registerProcessor\s*\(\s*['"`]([^'"`]+)['"`]/g,n=AudioWorklet.prototype.addModule,r=0;AudioWorklet.prototype.addModule=async function(o,s){let a=++r,d=e.get(this);d||(d=new Set,e.set(this,d)),_n(`#${a} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...d]});let m=o,l=null;if(o.startsWith("blob:")){let y=null;try{y=await(await fetch(o)).text()}catch(k){_n(`#${a} blob fetch failed`,k)}if(y!==null){let k=new Set;for(let C of y.matchAll(t))k.add(C[1]);if(k.size>0){let C=[...k].filter(v=>d.has(v)),T=[...k].filter(v=>!d.has(v));if(C.length>0&&T.length===0){_n(`#${a} short-circuit \u2014 all processors already registered`,C);return}if(C.length>0&&T.length>0){let v=Gu(y,C);if(v!==null){let x=new Blob([v],{type:"application/javascript"});l=URL.createObjectURL(x),m=l,_n(`#${a} rewrote blob; skipping`,C,"allowing",T)}else _n(`#${a} blob rewrite failed; passing original through`)}T.forEach(v=>d.add(v))}}}return n.call(this,m,s).then(()=>{l&&URL.revokeObjectURL(l)},y=>{l&&URL.revokeObjectURL(l);let k=(y&&y.message)??"";if(!(_i.test(k)||/already registered/i.test(k)))throw y})},AudioWorklet.prototype[gr]=!0}});var aa={};Su(aa,{AUDIO_LIBRARIES:()=>Li,adaptersFor:()=>br,importTone:()=>hr,normalizeAudioLibraries:()=>yr});async function hr(){let e=await import("tone");if(typeof e.start=="function")return e;let t=e.default;return t&&typeof t.start=="function"?t:e}function yr(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in Li)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function br(e){return e.map(t=>Li[t])}var sa,Li,Vi=Ns(()=>{"use strict";sa={id:"tone",async load(){await Promise.resolve().then(()=>(oa(),Wu))},async unlock(){await sa.load(),await(await hr()).start()},async resumeIfSuspended(){let e=await hr();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await hr()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},Li={tone:sa}});var Ae=class extends Error{constructor(n,r){super(r?`Headless Canvas2D does not support ${n}: ${r}`:`Headless Canvas2D does not support ${n}`);this.name="HeadlessUnsupportedOperationError";this.operation=n}},Ft=class{constructor(t,n,r,i,o,s=0,a=0){this.stops=[];this.kind=t,this.x0=n,this.y0=r,this.x1=i,this.y1=o,this.r0=s,this.r1=a}addColorStop(t,n){if(!Number.isFinite(t)||t<0||t>1)throw new Ae("addColorStop","offset must be in [0, 1]");this.stops.push({offset:t,color:dr(n)}),this.stops.sort((r,i)=>r.offset-i.offset)}colorAt(t){let n=t<0?0:t>1?1:t;if(this.stops.length===0)return{r:0,g:0,b:0,a:0};if(this.stops.length===1||n<=this.stops[0].offset)return this.stops[0].color;let r=this.stops[this.stops.length-1];if(n>=r.offset)return r.color;for(let i=1;i<this.stops.length;i++){let o=this.stops[i],s=this.stops[i-1];if(n<=o.offset){let a=o.offset-s.offset,d=a===0?0:(n-s.offset)/a;return wu(s.color,o.color,d)}}return r.color}},Ei={a:1,b:0,c:0,d:1,e:0,f:0},ku={black:"#000000",white:"#ffffff",red:"#ff0000",green:"#008000",blue:"#0000ff",cyan:"#00ffff",magenta:"#ff00ff",yellow:"#ffff00",gold:"#ffd700",orange:"#ffa500",navy:"#000080",gray:"#808080",grey:"#808080",transparent:"#00000000"},sn=new WeakMap,$s,_s=!1,wi=class{constructor(t,n,r,i){this.context=null;this.onDeviceReset=null;this.canvas=t,this.width=Math.max(0,n|0),this.height=Math.max(0,r|0),this.alpha=i.alpha!==!1,this.pixels=new Uint8ClampedArray(this.width*this.height*4),this.glyphAtlas=i.glyphAtlas??$s??Ks(),this.alpha||this.fillOpaqueBlack()}resize(t,n,r=!1){let i=Math.max(0,t|0),o=Math.max(0,n|0);i!==this.width||o!==this.height?(this.width=i,this.height=o,this.pixels=new Uint8ClampedArray(i*o*4)):r&&this.pixels.fill(0),this.alpha||this.fillOpaqueBlack()}fillOpaqueBlack(){let t=this.pixels;for(let n=3;n<t.length;n+=4)t[n]=255}};function Eu(e,t,n){let r=n??new Uint8ClampedArray(e*t*4);if(r.length!==e*t*4)throw new Ae("createImageFixture","data length must be width*height*4");return{__headlessImage:!0,width:e,height:t,data:r}}function Pi(e){$s=e}function Iu(e){return sn.get(e)}function xi(e,t={}){let n=sn.get(e);if(n?.context)return n.context;let r=Math.max(0,Number(e.width)||0),i=Math.max(0,Number(e.height)||0),o=new wi(e,r,i,t);sn.set(e,o);let s=Ru(o);return o.context=s,s}function Hs(e){let t=sn.get(e);if(t)return t.resize(e.width,e.height,!1),dn(t.width,t.height,t.pixels)}function Ru(e){let t={...Ei},n=[],r="#000000",i="#000000",o={r:0,g:0,b:0,a:255},s={r:0,g:0,b:0,a:255},a=1,d="source-over",m=1,l="butt",y="10px sans-serif",k="start",C="alphabetic",T=null,v=!0,x=[],$=null,j=(u,b)=>{$={points:[A(u,b)],closed:!1},x.push($)},D=(u,b)=>{if(!$){j(u,b);return}$.points.push(A(u,b))},V=()=>{if(!$||$.points.length===0)return;$.closed=!0;let u=$.points[0];$.points.push({x:u.x,y:u.y})},A=(u,b)=>({x:t.a*u+t.c*b+t.e,y:t.b*u+t.d*b+t.f}),p=()=>{if(d!=="source-over"&&d!=="copy")throw new Ae("globalCompositeOperation",d)},E=()=>{e.resize(e.canvas.width,e.canvas.height,!1)},c=()=>{t={...Ei},n.length=0,x.length=0,$=null,T=null,r="#000000",i="#000000",o={r:0,g:0,b:0,a:255},s={r:0,g:0,b:0,a:255},a=1,d="source-over",m=1,l="butt",y="10px sans-serif",k="start",C="alphabetic",v=!0};e.onDeviceReset=c;let f=(u,b,w,L=d)=>{if(u<0||b<0||u>=e.width||b>=e.height||T&&T[b*e.width+u]===0)return;let _=(b*e.width+u)*4,G=e.pixels;if(L==="copy"){G[_]=w.r,G[_+1]=w.g,G[_+2]=w.b,G[_+3]=e.alpha?w.a:255;return}let U=Math.round(w.a/255*a*255);if(U<=0)return;if(U>=255){G[_]=w.r,G[_+1]=w.g,G[_+2]=w.b,G[_+3]=255;return}let B=U/255,g=G[_+3]/255,S=B+g*(1-B);if(S<=0){G[_]=0,G[_+1]=0,G[_+2]=0,G[_+3]=e.alpha?0:255;return}G[_]=Math.round((w.r*B+G[_]*g*(1-B))/S),G[_+1]=Math.round((w.g*B+G[_+1]*g*(1-B))/S),G[_+2]=Math.round((w.b*B+G[_+2]*g*(1-B))/S),G[_+3]=e.alpha?Math.round(S*255):255},h=(u,b,w,L)=>{if(!(u instanceof Ft))return b;let _=ar(t,w+.5,L+.5);return Au(u,_.x,_.y)},R=(u,b,w,L,_)=>{p(),E();let G=Ri(u,e.width,e.height);if(G)for(let U=G.minY;U<=G.maxY;U++)for(let B=G.minX;B<=G.maxX;B++){let g=B+.5,S=U+.5;Ls(u,g,S,L)&&f(B,U,h(b,w,B,U),_)}},M=u=>{p(),E();let b=Math.sqrt(Math.abs(t.a*t.d-t.b*t.c)),w=m*(b===0?1:b)/2,L=Ri(u,e.width,e.height,w+1);if(L)for(let _=L.minY;_<=L.maxY;_++)for(let G=L.minX;G<=L.maxX;G++)xu(u,G+.5,_+.5,w,l)&&f(G,_,h(i,s,G,_))},P=(u,b)=>{if(u instanceof Ft){b==="fillStyle"?(r=u,o={r:0,g:0,b:0,a:255}):(i=u,s={r:0,g:0,b:0,a:255});return}if(typeof u!="string")throw new Ae(b,String(u));let w=dr(u);b==="fillStyle"?(r=u,o=w):(i=u,s=w)},F={get canvas(){return e.canvas},get fillStyle(){return r},set fillStyle(u){P(u,"fillStyle")},get strokeStyle(){return i},set strokeStyle(u){P(u,"strokeStyle")},get globalAlpha(){return a},set globalAlpha(u){a=Bs(u)},get globalCompositeOperation(){return d},set globalCompositeOperation(u){if(u!=="source-over"&&u!=="copy")throw new Ae("globalCompositeOperation",u);d=u},get lineWidth(){return m},set lineWidth(u){m=Number.isFinite(u)&&u>0?u:1},get lineCap(){return l},set lineCap(u){if(u!=="butt"&&u!=="round"&&u!=="square")throw new Ae("lineCap",String(u));l=u},get font(){return y},set font(u){y=u},get textAlign(){return k},set textAlign(u){if(u!=="start"&&u!=="left"&&u!=="center"&&u!=="right"&&u!=="end")throw new Ae("textAlign",String(u));k=u},get textBaseline(){return C},set textBaseline(u){C=u},get imageSmoothingEnabled(){return v},set imageSmoothingEnabled(u){v=!!u},imageSmoothingQuality:"low",lineJoin:"miter",miterLimit:10,lineDashOffset:0,shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0)",shadowOffsetX:0,shadowOffsetY:0,setGlyphAtlas(u){e.glyphAtlas=u},save(){n.push({transform:{...t},fillStyle:r,strokeStyle:i,fillStyleRaw:r,strokeStyleRaw:i,globalAlpha:a,globalCompositeOperation:d,lineWidth:m,lineCap:l,font:y,textAlign:k,textBaseline:C,clip:T?T.slice():null,imageSmoothingEnabled:v})},restore(){let u=n.pop();u&&(t=u.transform,r=u.fillStyleRaw,i=u.strokeStyleRaw,r instanceof Ft?o={r:0,g:0,b:0,a:255}:o=dr(r),i instanceof Ft?s={r:0,g:0,b:0,a:255}:s=dr(i),a=u.globalAlpha,d=u.globalCompositeOperation,m=u.lineWidth,l=u.lineCap,y=u.font,k=u.textAlign,C=u.textBaseline,T=u.clip,v=u.imageSmoothingEnabled)},beginPath(){x.length=0,$=null},closePath:V,moveTo:j,lineTo:D,rect(u,b,w,L){j(u,b),D(u+w,b),D(u+w,b+L),D(u,b+L),V()},quadraticCurveTo(u,b,w,L){let _=$?.points[$.points.length-1];if(!_){j(w,L);return}let G=ar(t,_.x,_.y);Du(G.x,G.y,u,b,w,L,16,(U,B)=>{$.points.push(A(U,B))})},bezierCurveTo(u,b,w,L,_,G){let U=$?.points[$.points.length-1];if(!U){j(_,G);return}let B=ar(t,U.x,U.y);Ou(B.x,B.y,u,b,w,L,_,G,24,(g,S)=>{$.points.push(A(g,S))})},arc(u,b,w,L,_,G=!1){if(w<0)throw new Ae("arc","negative radius");let U=Vs(u,b,w,L,_,G);if(U.length===0)return;let B=U[0];$?$.points.push(A(B.x,B.y)):j(B.x,B.y);for(let g=1;g<U.length;g++)$.points.push(A(U[g].x,U[g].y))},ellipse(u,b,w,L,_,G,U,B=!1){if(w<0||L<0)throw new Ae("ellipse","negative radius");let g=Vs(0,0,1,G,U,B),S=Math.cos(_),I=Math.sin(_);for(let N=0;N<g.length;N++){let q=g[N].x*w,Z=g[N].y*L,z=u+q*S-Z*I,ne=b+q*I+Z*S;N===0&&!$?j(z,ne):D(z,ne)}},fill(u="nonzero"){R(Ii(x),r,o,u)},stroke(){M(Ii(x))},clip(u="nonzero"){let b=new Uint8Array(e.width*e.height),w=Ii(x),L=Ri(w,e.width,e.height);if(L)for(let _=L.minY;_<=L.maxY;_++)for(let G=L.minX;G<=L.maxX;G++)Ls(w,G+.5,_+.5,u)&&(b[_*e.width+G]=1);if(!T){T=b;return}for(let _=0;_<T.length;_++)T[_]=T[_]&&b[_]?1:0},fillRect(u,b,w,L){R(W(u,b,w,L),r,o,"nonzero")},strokeRect(u,b,w,L){M(W(u,b,w,L))},clearRect(u,b,w,L){let _=e.alpha?{r:0,g:0,b:0,a:0}:{r:0,g:0,b:0,a:255};R(W(u,b,w,L),"#000000",_,"nonzero","copy")},fillText(u,b,w){O(String(u),b,w,r,o,!0)},strokeText(u,b,w){O(String(u),b,w,i,s,!1)},measureText(u){return{width:Fs(String(u),y,e.glyphAtlas)}},translate(u,b){t=sr(t,{a:1,b:0,c:0,d:1,e:u,f:b})},rotate(u){let b=Math.cos(u),w=Math.sin(u);t=sr(t,{a:b,b:w,c:-w,d:b,e:0,f:0})},scale(u,b){t=sr(t,{a:u,b:0,c:0,d:b,e:0,f:0})},transform(u,b,w,L,_,G){t=sr(t,{a:u,b,c:w,d:L,e:_,f:G})},setTransform(u,b,w,L,_,G){if(u&&typeof u=="object"){t={a:u.a,b:u.b,c:u.c,d:u.d,e:u.e,f:u.f};return}t={a:Number(u)||0,b:Number(b)||0,c:Number(w)||0,d:Number(L)||0,e:Number(_)||0,f:Number(G)||0}},resetTransform(){t={...Ei}},getTransform(){return{...t}},createLinearGradient(u,b,w,L){return new Ft("linear",u,b,w,L)},createRadialGradient(u,b,w,L,_,G){if(w<0||G<0)throw new Ae("createRadialGradient","negative radius");return new Ft("radial",u,b,L,_,w,G)},createImageData(u,b){return typeof u=="object"?_t(new Uint8ClampedArray(u.width*u.height*4),u.width,u.height):_t(new Uint8ClampedArray(u*(b??0)*4),u,b??0)},getImageData(u,b,w,L){E();let _=u|0,G=b|0,U=w|0,B=L|0,g=new Uint8ClampedArray(U*B*4);for(let S=0;S<B;S++)for(let I=0;I<U;I++){let N=_+I,q=G+S,Z=(S*U+I)*4;if(N<0||q<0||N>=e.width||q>=e.height)continue;let z=(q*e.width+N)*4;g[Z]=e.pixels[z],g[Z+1]=e.pixels[z+1],g[Z+2]=e.pixels[z+2],g[Z+3]=e.pixels[z+3]}return _t(g,U,B)},putImageData(u,b,w){E();let L=b|0,_=w|0,G=u.data;for(let U=0;U<u.height;U++)for(let B=0;B<u.width;B++){let g=L+B,S=_+U;if(g<0||S<0||g>=e.width||S>=e.height)continue;let I=(U*u.width+B)*4,N=(S*e.width+g)*4;e.pixels[N]=G[I],e.pixels[N+1]=G[I+1],e.pixels[N+2]=G[I+2],e.pixels[N+3]=e.alpha?G[I+3]:255}},drawImage(u,...b){let w=Cu(u),L=0,_=0,G=w.width,U=w.height,B,g,S,I;if(b.length===2)B=b[0],g=b[1],S=G,I=U;else if(b.length===4)B=b[0],g=b[1],S=b[2],I=b[3];else if(b.length===8)L=b[0],_=b[1],G=b[2],U=b[3],B=b[4],g=b[5],S=b[6],I=b[7];else throw new Ae("drawImage","invalid argument count");p(),E();let N=[A(B,g),A(B+S,g),A(B+S,g+I),A(B,g+I)],q=Math.max(0,Math.floor(Math.min(...N.map(Q=>Q.x)))),Z=Math.min(e.width-1,Math.ceil(Math.max(...N.map(Q=>Q.x)))),z=Math.max(0,Math.floor(Math.min(...N.map(Q=>Q.y)))),ne=Math.min(e.height-1,Math.ceil(Math.max(...N.map(Q=>Q.y))));for(let Q=z;Q<=ne;Q++)for(let he=q;he<=Z;he++){let ke=ar(t,he+.5,Q+.5),Ce=(ke.x-B)/S,Pe=(ke.y-g)/I;if(Ce<0||Pe<0||Ce>=1||Pe>=1)continue;let H=Math.floor(L+Ce*G),Y=Math.floor(_+Pe*U);if(H<0||Y<0||H>=w.width||Y>=w.height)continue;let re=(Y*w.width+H)*4;f(he,Q,{r:w.data[re],g:w.data[re+1],b:w.data[re+2],a:w.data[re+3]})}},setLineDash(u){if(u.length>0)throw new Ae("setLineDash","non-empty dash")},getLineDash(){return[]},createPattern(){throw new Ae("createPattern")}};function W(u,b,w,L){let _=A(u,b),G=A(u+w,b),U=A(u+w,b+L),B=A(u,b+L);return[{closed:!0,points:[_,G,U,B,_]}]}function O(u,b,w,L,_,G){p();let U=e.glyphAtlas,B=qs(y),g=B/U.cellHeight,S=Fs(u,y,U),I=b;k==="center"?I=b-S/2:(k==="right"||k==="end")&&(I=b-S);let N=w;C==="top"||C==="hanging"?N=w:C==="middle"?N=w-B/2:N=w-B;let q=I,Z=(U.cellWidth+1)*g;for(let z of u){let ne=U.glyphs[z]??U.glyphs[z.toUpperCase()];if(!ne){q+=Z;continue}for(let Q=0;Q<U.cellHeight;Q++)for(let he=0;he<U.cellWidth;he++){if(ne[Q*U.cellWidth+he]===0)continue;if(!G){let Be=he===0||ne[Q*U.cellWidth+he-1]===0,ze=he===U.cellWidth-1||ne[Q*U.cellWidth+he+1]===0,vt=Q===0||ne[(Q-1)*U.cellWidth+he]===0,Wt=Q===U.cellHeight-1||ne[(Q+1)*U.cellWidth+he]===0;if(!Be&&!ze&&!vt&&!Wt)continue}let ke=q+he*g,Ce=N+Q*g,Pe=q+(he+1)*g,H=N+(Q+1)*g,Y=A(ke,Ce),re=A(Pe,H),X=Math.max(0,Math.floor(Math.min(Y.x,re.x))),ee=Math.min(e.width-1,Math.ceil(Math.max(Y.x,re.x))-1),fe=Math.max(0,Math.floor(Math.min(Y.y,re.y))),je=Math.min(e.height-1,Math.ceil(Math.max(Y.y,re.y))-1);for(let Be=fe;Be<=je;Be++)for(let ze=X;ze<=ee;ze++)f(ze,Be,h(L,_,ze,Be))}q+=Z}}return new Proxy(F,{get(u,b,w){if(Reflect.has(u,b))return Reflect.get(u,b,w);if(typeof b=="symbol")return;let L=String(b);if(!(L==="then"||L==="toJSON"))return(..._)=>{throw new Ae(L)}},set(u,b,w,L){if(b==="shadowBlur"&&w)throw new Ae("shadowBlur");if((b==="shadowOffsetX"||b==="shadowOffsetY")&&w)throw new Ae(String(b));if(b==="filter"&&w&&w!=="none")throw new Ae("filter",String(w));if(Reflect.has(u,b))return Reflect.set(u,b,w,L);throw new Ae(String(b))}})}function Cu(e){if(e&&typeof e=="object"&&"__headlessImage"in e){let t=e;return{width:t.width,height:t.height,data:t.data}}if(e&&typeof e=="object"&&"data"in e&&"width"in e&&"height"in e){let t=e;if(t.data instanceof Uint8ClampedArray)return{width:t.width,height:t.height,data:t.data}}if(typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement){let t=sn.get(e);if(!t)throw new Ae("drawImage","source canvas has no headless surface");return{width:t.width,height:t.height,data:t.pixels}}throw new Ae("drawImage","source must be ImageData, a headless canvas, or createImageFixture()")}function Au(e,t,n){if(e.kind==="linear"){let s=e.x1-e.x0,a=e.y1-e.y0,d=s*s+a*a,m=d===0?0:((t-e.x0)*s+(n-e.y0)*a)/d;return e.colorAt(m)}let r=Math.hypot(t-e.x1,n-e.y1),i=e.r1-e.r0,o=i===0?0:(r-e.r0)/i;return e.colorAt(o)}function wu(e,t,n){return{r:Math.round(e.r+(t.r-e.r)*n),g:Math.round(e.g+(t.g-e.g)*n),b:Math.round(e.b+(t.b-e.b)*n),a:Math.round(e.a+(t.a-e.a)*n)}}function sr(e,t){return{a:e.a*t.a+e.c*t.b,b:e.b*t.a+e.d*t.b,c:e.a*t.c+e.c*t.d,d:e.b*t.c+e.d*t.d,e:e.a*t.e+e.c*t.f+e.e,f:e.b*t.e+e.d*t.f+e.f}}function ar(e,t,n){let r=e.a*e.d-e.b*e.c;if(r===0)return{x:t,y:n};let i=e.d/r,o=-e.b/r,s=-e.c/r,a=e.a/r,d=(e.c*e.f-e.d*e.e)/r,m=(e.b*e.e-e.a*e.f)/r;return{x:i*t+s*n+d,y:o*t+a*n+m}}function Ii(e){return e.map(t=>({closed:t.closed,points:t.points.map(n=>({x:n.x,y:n.y}))}))}function Ri(e,t,n,r=0){let i=1/0,o=1/0,s=-1/0,a=-1/0;for(let d of e)for(let m of d.points)i=Math.min(i,m.x),o=Math.min(o,m.y),s=Math.max(s,m.x),a=Math.max(a,m.y);return Number.isFinite(i)?{minX:Math.max(0,Math.floor(i-r)),minY:Math.max(0,Math.floor(o-r)),maxX:Math.min(t-1,Math.ceil(s+r)),maxY:Math.min(n-1,Math.ceil(a+r))}:null}function Ls(e,t,n,r){let i=0,o=0;for(let s of e){let a=s.points;if(!(a.length<2))for(let d=1;d<a.length;d++){let m=a[d-1],l=a[d],y=Pu(m.x,m.y,l.x,l.y,t,n);i+=y,y!==0&&(o+=1)}}return r==="evenodd"?o%2===1:i!==0}function Pu(e,t,n,r,i,o){if(t<=o==r<=o)return 0;let s=e+(o-t)/(r-t)*(n-e);return i<s?r>t?1:-1:0}function xu(e,t,n,r,i){for(let o of e){let s=o.points;for(let a=1;a<s.length;a++){let d=s[a-1],m=s[a];if(i==="round"){if(Tu(t,n,d.x,d.y,m.x,m.y)<=r)return!0;continue}let l=m.x-d.x,y=m.y-d.y,k=Math.hypot(l,y);if(k===0){if(Math.hypot(t-d.x,n-d.y)<=r)return!0;continue}let C=l/k,T=y/k,v=d.x,x=d.y,$=m.x,j=m.y;i==="square"&&(v-=C*r,x-=T*r,$+=C*r,j+=T*r);let D=$-v,V=j-x,A=D*D+V*V,p=((t-v)*D+(n-x)*V)/A;if(p<0||p>1)continue;let E=v+p*D,c=x+p*V;if(Math.hypot(t-E,n-c)<=r)return!0}}return!1}function Tu(e,t,n,r,i,o){let s=i-n,a=o-r,d=s*s+a*a;if(d===0)return Math.hypot(e-n,t-r);let m=((e-n)*s+(t-r)*a)/d;return m=m<0?0:m>1?1:m,Math.hypot(e-(n+m*s),t-(r+m*a))}function Du(e,t,n,r,i,o,s,a){for(let d=1;d<=s;d++){let m=d/s,l=1-m;a(l*l*e+2*l*m*n+m*m*i,l*l*t+2*l*m*r+m*m*o)}}function Ou(e,t,n,r,i,o,s,a,d,m){for(let l=1;l<=d;l++){let y=l/d,k=1-y,C=k*k,T=y*y;m(C*k*e+3*C*y*n+3*k*T*i+T*y*s,C*k*t+3*C*y*r+3*k*T*o+T*y*a)}}function Vs(e,t,n,r,i,o){let s=r,a=i;!o&&a<s&&(a+=Math.PI*2),o&&s<a&&(s+=Math.PI*2);let d=a-s,m=Math.max(8,Math.min(360,Math.ceil(Math.abs(d)*Math.max(n,1)))),l=[];for(let y=0;y<=m;y++){let k=s+d*y/m;l.push({x:e+Math.cos(k)*n,y:t+Math.sin(k)*n})}return l}function Bs(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function dr(e){let t=e.trim().toLowerCase(),r=ku[t]??t;if(r==="transparent")return{r:0,g:0,b:0,a:0};if(r[0]==="#"){let o=r.slice(1);if(o.length===3)return{r:parseInt(o[0]+o[0],16),g:parseInt(o[1]+o[1],16),b:parseInt(o[2]+o[2],16),a:255};if(o.length===6)return{r:parseInt(o.slice(0,2),16),g:parseInt(o.slice(2,4),16),b:parseInt(o.slice(4,6),16),a:255};if(o.length===8)return{r:parseInt(o.slice(0,2),16),g:parseInt(o.slice(2,4),16),b:parseInt(o.slice(4,6),16),a:parseInt(o.slice(6,8),16)}}let i=r.match(/^rgba?\(\s*([0-9.]+)\s*,\s*([0-9.]+)\s*,\s*([0-9.]+)(?:\s*,\s*([0-9.]+))?\s*\)$/);if(i)return{r:Ci(Number(i[1])),g:Ci(Number(i[2])),b:Ci(Number(i[3])),a:i[4]===void 0?255:Math.round(Bs(Number(i[4]))*255)};throw new Ae("fillStyle",e)}function Ci(e){return Number.isFinite(e)?e<0?0:e>255?255:Math.round(e):0}function qs(e){let t=e.match(/([0-9]+(?:\.[0-9]+)?)px/);return t?Number(t[1]):10}function Fs(e,t,n){let r=qs(t)/n.cellHeight;return e.length*(n.cellWidth+1)*r}function _t(e,t,n){if(typeof ImageData=="function")try{return new ImageData(e,t,n)}catch{try{let r=new ImageData(t,n);return r.data.set(e),r}catch{}}return{data:e,width:t,height:n,colorSpace:"srgb"}}function Ks(){let n={" ":new Uint8Array(35)},r={0:[14,17,19,21,25,17,14],1:[4,12,4,4,4,4,14],2:[14,17,1,2,4,8,31],3:[14,17,1,6,1,17,14],4:[2,6,10,18,31,2,2],5:[31,16,30,1,1,17,14],6:[14,16,30,17,17,17,14],7:[31,1,2,4,8,8,8],8:[14,17,17,14,17,17,14],9:[14,17,17,15,1,1,14],A:[14,17,17,31,17,17,17],B:[30,17,17,30,17,17,30],C:[14,17,16,16,16,17,14],D:[30,17,17,17,17,17,30],E:[31,16,16,30,16,16,31],F:[31,16,16,30,16,16,16],G:[14,17,16,23,17,17,14],H:[17,17,17,31,17,17,17],I:[14,4,4,4,4,4,14],K:[17,18,20,24,20,18,17],L:[16,16,16,16,16,16,31],M:[17,27,21,21,17,17,17],N:[17,25,21,19,17,17,17],O:[14,17,17,17,17,17,14],P:[30,17,17,30,16,16,16],R:[30,17,17,30,20,18,17],S:[15,16,16,14,1,1,30],T:[31,4,4,4,4,4,4],U:[17,17,17,17,17,17,14],V:[17,17,17,17,17,10,4],W:[17,17,17,21,21,21,10],Y:[17,17,10,4,4,4,4],Z:[31,1,2,4,8,16,31],".":[0,0,0,0,0,0,4],"-":[0,0,0,31,0,0,0],"+":[0,4,4,31,4,4,0],"*":[0,21,14,31,14,21,0],"!":[4,4,4,4,4,0,4],"?":[14,17,1,2,4,0,4],"/":[1,2,2,4,8,8,16],":":[0,4,0,0,0,4,0],"\u2713":[1,1,2,2,20,8,0]};for(let[i,o]of Object.entries(r)){let s=new Uint8Array(35);for(let a=0;a<7;a++)for(let d=0;d<5;d++)s[a*5+d]=o[a]&1<<4-d?1:0;n[i]=s,n[i.toLowerCase()]=s}return{cellWidth:5,cellHeight:7,glyphs:n}}var Gs=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;Gs[e]=t>>>0}function Mu(e){let t=4294967295;for(let n=0;n<e.length;n++)t=Gs[(t^e[n])&255]^t>>>8;return(t^4294967295)>>>0}function Nu(e){let t=1,n=0;for(let r=0;r<e.length;r++)t=(t+e[r])%65521,n=(n+t)%65521;return(n<<16|t)>>>0}function On(e){return new Uint8Array([e>>>24&255,e>>>16&255,e>>>8&255,e&255])}function Ai(e,t){let n=new Uint8Array(8+t.length+4);n.set(On(t.length),0),n[4]=e.charCodeAt(0),n[5]=e.charCodeAt(1),n[6]=e.charCodeAt(2),n[7]=e.charCodeAt(3),n.set(t,8);let r=n.subarray(4,8+t.length);return n.set(On(Mu(r)),8+t.length),n}function _u(e){let t=[];for(let s=0;s<e.length;s+=65535){let a=e.subarray(s,Math.min(s+65535,e.length)),d=s+65535>=e.length,m=new Uint8Array(5+a.length);m[0]=d?1:0,m[1]=a.length&255,m[2]=a.length>>>8&255;let l=~a.length&65535;m[3]=l&255,m[4]=l>>>8&255,m.set(a,5),t.push(m)}t.length===0&&t.push(new Uint8Array([1,0,0,255,255]));let r=t.reduce((s,a)=>s+a.length,0),i=new Uint8Array(2+r+4);i[0]=120,i[1]=1;let o=2;for(let s of t)i.set(s,o),o+=s.length;return i.set(On(Nu(e)),o),i}function an(e,t,n){let r=e*4,i=new Uint8Array(t*(1+r));for(let y=0;y<t;y++){let k=y*(1+r);i[k]=0,i.set(n.subarray(y*r,(y+1)*r),k+1)}let o=new Uint8Array(13);o.set(On(e),0),o.set(On(t),4),o[8]=8,o[9]=6;let s=new Uint8Array([137,80,78,71,13,10,26,10]),a=[Ai("IHDR",o),Ai("IDAT",_u(i)),Ai("IEND",new Uint8Array(0))],d=s.length+a.reduce((y,k)=>y+k.length,0),m=new Uint8Array(d);m.set(s,0);let l=s.length;for(let y of a)m.set(y,l),l+=y.length;return m}function dn(e,t,n){let r=an(e,t,n),i="";for(let o=0;o<r.length;o++)i+=String.fromCharCode(r[o]);return`data:image/png;base64,${globalThis.btoa(i)}`}function Ti(e){let t=[137,80,78,71,13,10,26,10];for(let m=0;m<8;m++)if(e[m]!==t[m])throw new Ae("decodePng","invalid signature");let n=0,r=0,i=[],o=8;for(;o<e.length;){let m=e[o]<<24|e[o+1]<<16|e[o+2]<<8|e[o+3],l=String.fromCharCode(e[o+4],e[o+5],e[o+6],e[o+7]),y=e.subarray(o+8,o+8+m);if(l==="IHDR"){if(n=y[0]<<24|y[1]<<16|y[2]<<8|y[3],r=y[4]<<24|y[5]<<16|y[6]<<8|y[7],y[8]!==8||y[9]!==6)throw new Ae("decodePng","only 8-bit RGBA is supported")}else if(l==="IDAT")for(let k=0;k<y.length;k++)i.push(y[k]);else if(l==="IEND")break;o+=12+m}let s=Lu(new Uint8Array(i)),a=n*4,d=new Uint8ClampedArray(n*r*4);for(let m=0;m<r;m++){let l=m*(1+a);if(s[l]!==0)throw new Ae("decodePng",`unsupported scanline filter ${s[l]}`);d.set(s.subarray(l+1,l+1+a),m*a)}return _t(d,n,r)}function Lu(e){if(e.length<6)throw new Ae("decodePng","truncated zlib");let t=[],n=2;for(;n<e.length-4;){let s=e[n]&1;if((e[n]>>>1&3)!==0)throw new Ae("decodePng","only stored deflate blocks are supported");n+=1;let d=e[n]|e[n+1]<<8;if(n+=4,t.push(e.subarray(n,n+d)),n+=d,s)break}let r=t.reduce((s,a)=>s+a.length,0),i=new Uint8Array(r),o=0;for(let s of t)i.set(s,o),o+=s.length;return i}function cr(e){let t=e.indexOf(","),n=t>=0?e.slice(t+1):e,r=globalThis.atob(n),i=new Uint8Array(r.length);for(let o=0;o<r.length;o++)i[o]=r.charCodeAt(o);return i}function Ws(){if(!_s){_s=!0;for(let e of["width","height"]){let t=Object.getOwnPropertyDescriptor(HTMLCanvasElement.prototype,e);if(!t?.set||!t.get)continue;let n=t.set;Object.defineProperty(HTMLCanvasElement.prototype,e,{configurable:!0,enumerable:t.enumerable,get:t.get,set(r){n.call(this,r);let i=sn.get(this);i&&(i.resize(this.width,this.height,!0),i.onDeviceReset?.())}})}}}var js=()=>{let e=["ms","moz","webkit","o"];for(let t=0;t<e.length&&!window.requestAnimationFrame;++t)window.requestAnimationFrame=window[e[t]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[t]+"CancelAnimationFrame"]||window[e[t]+"CancelRequestAnimationFrame"]},dt=window.devicePixelRatio||1,cn=/Headless/i.test(navigator.userAgent),$y=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function Us(){return Math.min(window.innerWidth,window.innerHeight)}var Di="data-cyberart-canvas",un=class{constructor(t,n,r=1,i={}){this.width=t,this.height=n;let o=i.container,s=i.adoptFromDocument??!o,a=o?o.querySelector(`canvas[${Di}]`)??o.querySelector("canvas"):null;if(a)this.canvas=a,this.adopted=!0;else if(s){let d=document.getElementById("canvas")??document.querySelector("canvas");d?(this.canvas=d,this.adopted=!0):(this.canvas=document.createElement("canvas"),this.canvas.setAttribute("id","canvas"),this.adopted=!1)}else this.canvas=document.createElement("canvas"),this.adopted=!1;this.canvas.hasAttribute(Di)||this.canvas.setAttribute(Di,""),this.canvas.style.display="block",this.canvas.style.margin="auto",this.ctx=this.canvas.getContext("2d",{colorSpace:"display-p3",alpha:!1}),this.ctx.globalAlpha=r,this.ctx.imageSmoothingEnabled=!1,this.setSize(t,n)}setSize(t,n){this.width=t,this.height=n,this.canvas.width=t,this.canvas.height=n,this.canvas.style.width=`${t/dt}px`,this.canvas.style.height=`${n/dt}px`,this.imageData=this.ctx.createImageData(t,n),this.ctx.putImageData(this.imageData,0,0)}_blank(t=1){let n=t?Math.max(t,.03):1;this.ctx.fillStyle=`rgba(0,0,0,${n})`,this.ctx.fillRect(0,0,this.width,this.height)}clearAll(){this.ctx.save(),this.ctx.globalAlpha=1,this._blank(),this.ctx.restore()}};function ur(e,t){let n=e/t,r,i;return n>1?(r=e,i=~~(e/n)):(i=t,r=~~(t*n)),{width:r,height:i,iWidth:1/r,iHeight:1/i,area:r*i,largeDim:Math.max(r,i),smallDim:Math.min(r,i),aspectRatio:n}}function Js(e,t=window.innerWidth,n=window.innerHeight){let r=Us(),i,o;return n<t?e>1?t>=r*e?(i=r*e,o=r):(i=t,o=i/e):(i=r*e,o=r):e>1?(i=r,o=r/e):n<r/e?(o=n,i=o*e):(i=r,o=r/e),[i,o]}var Oi=class{constructor(t=!1,n=!0){this.debugMode=t,this.actionMap={},this.listening=n,this.checkKeypress=this.checkKeypress.bind(this),this.registerAction=this.registerAction.bind(this),this.listening&&window.addEventListener("keydown",this.checkKeypress,!1)}checkKeypress({key:t}){this.debugMode&&console.log(`Pressed ${t}`),t in this.actionMap&&this.actionMap[t]()}inject(t){this.checkKeypress({key:t})}registerAction(t,n,r=!1){if(t.length!==1)throw new Error(`Only single-character actions may be registered. Cannot register: ${t}`);if(t in this.actionMap&&!r)throw new Error(`Action already exists for code: ${t}`);this.actionMap[t]=n}destroy(){this.listening&&window.removeEventListener("keydown",this.checkKeypress,!1),this.actionMap={}}},lr=Oi;var Mi=class{constructor(t,n={}){this.x=-1;this.y=-1;this.isDown=!1;this.clicks=[];this.canvas=t,this.listening=n.listen!==!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.listening&&(t.addEventListener("pointerdown",this.onPointerDown),t.addEventListener("pointermove",this.onPointerMove),t.addEventListener("pointerup",this.onPointerUp))}toCanvasCoords(t){let n=this.canvas.getBoundingClientRect();return{x:(t.clientX-n.left)*(this.canvas.width/n.width),y:(t.clientY-n.top)*(this.canvas.height/n.height)}}onPointerDown(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r,this.isDown=!0,this.clicks.push({x:n,y:r})}onPointerMove(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r}onPointerUp(t){let{x:n,y:r}=this.toCanvasCoords(t);this.x=n,this.y=r,this.isDown=!1}hasClick(){return this.clicks.length>0}consumeClick(){return this.clicks.shift()??null}inject(t,n,r){this.x=n,this.y=r,t==="down"?(this.isDown=!0,this.clicks.push({x:n,y:r})):t==="up"&&(this.isDown=!1)}destroy(){this.listening&&(this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointermove",this.onPointerMove),this.canvas.removeEventListener("pointerup",this.onPointerUp))}},zs=Mi;function pr(){return{now:()=>performance.now()}}function Ys(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var Mn=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),fr=class{constructor(t,n,r,i,o,s={}){this.startTime=0;this.lastUpdateAt=null;this.lastRenderAt=null;this.clockOffsetMs=0;this.pauseStartedAt=null;this.renderAnimation=this.renderAnimation.bind(this),this.dimensionContext=ur(t,n),this.R=r,this.gameManager=s.gameManager,this.hostChannel=s.hostChannel,this.clock=s.clock??pr(),this.kind=s.kind??"render",this.keyboardManager=new lr(!1,s.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new un(this.dimensionContext.width,this.dimensionContext.height,1,s.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new zs(this.canvas.canvas,{listen:s.listenToPointer!==!1})),this.animationCart=o;let a=s.customState;this.featureState=o.getDefaultFeatureState?.(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.hostChannel),this.cartState=o.getDefaultState(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.featureState,this.hostChannel),this.startTime=this.clock.now(),this.canvas?.clearAll()}captureFramebuffer(){let t=this.canvas?.imageData;if(!t)return new ImageData(this.dimensionContext.width,this.dimensionContext.height);let n=new ImageData(t.width,t.height);return n.data.set(t.data),n}restoreFramebuffer(t){let n=this.canvas?.imageData,r=this.drawingContext;return!n||!r||n.width!==t.width||n.height!==t.height||n.data.length!==t.data.length?!1:(n.data.set(t.data),r.putImageData(n,0,0),!0)}setPaused(t){let n=this.clock.now();if(t){this.pauseStartedAt===null&&(this.pauseStartedAt=n);return}this.pauseStartedAt!==null&&(this.clockOffsetMs+=n-this.pauseStartedAt,this.pauseStartedAt=null)}resolveNow(t){let n=this.pauseStartedAt!==null?t-this.pauseStartedAt:0;return t-this.clockOffsetMs-n}getElapsedSinceStart(t=this.clock.now()){return Math.max(0,this.resolveNow(t)-this.startTime)}restoreClock(t,n){this.pauseStartedAt=null,this.lastUpdateAt=null,this.lastRenderAt=null;let r=Math.max(0,t);if(typeof n=="number"&&Number.isFinite(n)){this.startTime=n,this.clockOffsetMs=this.clock.now()-n-r;return}this.clockOffsetMs=0,this.startTime=this.clock.now()-r}getRandomState(){return this.R.getState()}injectKey(t){this.keyboardManager.inject(t)}injectPointer(t,n,r){this.pointerManager?.inject(t,n,r)}async updateAnimationState(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=Mn(i,this.startTime,this.lastUpdateAt,this.lastRenderAt);this.cartState=this.animationCart.update(this.R,t,n,this.dimensionContext,this.cartState,this.keyboardManager,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastUpdateAt=i}async renderAnimation(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=Mn(i,this.startTime,this.lastUpdateAt,this.lastRenderAt),s=this.drawingContext,a=this.canvas?.imageData;this.kind!=="calculation"&&this.animationCart.render&&s&&a&&this.animationCart.render(this.R,t,n,this.dimensionContext,this.cartState,s,a,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastRenderAt=i}getCanvas(){return this.canvas?.canvas}getDrawDetails(){let t=this.canvas?.canvas;if(!t)throw new Error("calculation cart has no canvas");return[t,0,0,this.dimensionContext.width,this.dimensionContext.height]}teardown(){try{this.animationCart.teardown?.(this.cartState,this.featureState)}catch(t){console.error("Error during cart teardown",t)}this.keyboardManager.destroy(),this.pointerManager?.destroy()}};var mr=class extends un{constructor(t,n,r=1,i=!0,o={}){if(super(t,n,r,o),this.adopted)return;let s=o.container;if(s){this.canvas.parentNode!==s&&s.appendChild(this.canvas);return}if(i){let a=document.getElementById("canvas");a&&a!==this.canvas&&a.parentNode===document.body&&document.body.removeChild(a),document.body.appendChild(this.canvas)}}};function Xs(e){let t=parseInt(e.substring(0,8),16),n=parseInt(e.substring(8,8),16),r=parseInt(e.substring(16,8),16),i=parseInt(e.substring(24,8),16);return{next:()=>{t|=0,n|=0,r|=0,i|=0;let s=(t+n|0)+i|0;return i=i+1|0,t=n^n>>>9,n=r+(r<<3)|0,r=r<<21|r>>>11,r=r+s|0,(s>>>0)/4294967296},getRegs:()=>({a:t,b:n,c:r,d:i}),setRegs:s=>{t=s.a,n=s.b,r=s.c,i=s.d}}}var ln=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=Xs(t.hash.substring(2,32)),this.genB=Xs(t.hash.substring(34,32)),this.prngA=this.genA.next,this.prngB=this.genB.next;for(let n=0;n<1e6;n+=2)this.prngA(),this.prngB()}getState(){let t=this.genA.getRegs(),n=this.genB.getRegs();return{seed:this.seed,useA:this.useA,prngA:{a:t.a,b:t.b,c:t.c,d:t.d},prngB:{a:n.a,b:n.b,c:n.c,d:n.d}}}setState(t){if(t.seed!==this.seed)throw new Error(`Random.setState: seed ${t.seed} does not match ${this.seed}`);this.useA=t.useA,this.genA.setRegs(t.prngA),this.genB.setRegs(t.prngB)}r_zero_one(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}dec(t,n){return t===void 0?this.r_zero_one():n===void 0?t*this.r_zero_one():t+(n-t)*this.r_zero_one()}int(t,n){return n===void 0&&(n=t,t=0),Math.floor(this.dec(t,n))}bool(t=.5){return this.r_zero_one()<t}sign(){return this.bool()?1:-1}choose(t){return t[this.int(t.length)]}};var ea="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",Qs="https://salmon-just-firefly-671.mypinata.cloud/ipfs/";function Vu(e){return e.endsWith("/")?e:`${e}/`}var Nn=null;function Fu(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function $u(e){return e&&e.length>0?e:[{cid:ea}]}function Hu(e){return e.startsWith("0x")?e:`0x${e}`}var ta=/^(0[xX])?[0-9a-fA-F]{64}$/;function Bu(e){let t="",n=2166136261,r=522970236;for(let i=0;t.length<64;i++){for(let o=0;o<e.length;o++)n^=e.charCodeAt(o)+i,n=Math.imul(n,16777619),r^=e.charCodeAt(o)+i*17,r=Math.imul(r,16777619);t+=(n>>>0).toString(16).padStart(8,"0"),t+=(r>>>0).toString(16).padStart(8,"0")}return`0x${t.slice(0,64)}`}function Zs(e){let t=typeof e=="number"?String(e):e;return ta.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:Bu(t)}function na(e,t){if(typeof e=="number"||t==="deterministic")return Zs(e);let n=String(e);return ta.test(n)?Zs(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function qu(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:$u(tokenData.externalAssetDependencies),preferredIPFSGateway:Vu(tokenData.preferredIPFSGateway||Qs),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?Hu(e):t.get("hash")||`0x${Fu(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:ea}],preferredIPFSGateway:Qs}}function Ni(e){let t=e?.useCache!==!1;if(t&&Nn&&!e?.hash)return Nn;let n=qu(e?.hash);return t?Nn=n:Nn||(Nn=n),n}function ra(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}Vi();var vr="$cyberartTa",Ye=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},Fi={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function ju(e){for(let t of Object.keys(Fi))if(e instanceof Fi[t])return t}function ua(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function mt(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function $i(e){return mt(e)?typeof e[vr]=="string"&&Array.isArray(e.d):!1}function Uu(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||ua(e)||mt(e))}var Ju=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function da(e){return e===null?"null":$i(e)?String(e[vr]):Array.isArray(e)?"array":mt(e)?"object":typeof e}function zu(e,t){return e===t||e==="null"||t==="null"}function ca(e){return e.trim().toLowerCase().replace(/^0x/,"")}function la(e,t,n,r){if(!(!n&&!r)&&ca(e)!==ca(t))throw new Ye(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function pn(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function pa(e,t){let n=e.dimensions;if(n&&pn(n.width)&&pn(n.height))return n;if(t&&pn(t.width)&&pn(t.height))return{width:t.width,height:t.height};if(mt(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(pn(r)&&pn(i))return{width:r,height:i}}return null}function fn(e,t=new WeakSet){if(e===null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e:null;if(!(typeof e=="function"||typeof e>"u"||typeof e=="bigint"||typeof e=="symbol")){if(ua(e)){let n=ju(e);return n?{[vr]:n,d:Array.from(e)}:void 0}if(typeof e=="object"&&!t.has(e)){t.add(e);try{if(Array.isArray(e)){let i=[],o=0;for(let s of e){let a=fn(s,t);a!==void 0&&(i.push(a),o++)}return e.length>0&&o===0?void 0:i}if(!mt(e)||Uu(e))return;let n=Object.keys(e),r={};for(let i of n){if(Ju.has(i))continue;let o=fn(e[i],t);o!==void 0&&(r[i]=o)}return n.length>0&&Object.keys(r).length===0?void 0:r}finally{t.delete(e)}}}}function Ln(e){if($i(e)){let t=Fi[e[vr]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>Ln(t));if(mt(e)){let t={};for(let n of Object.keys(e))t[n]=Ln(e[n]);return t}return e}function Hi(e,t,n,r,i=!0){if(i&&n&&r&&n!==r)throw new Ye(`Cart state is for "${r}", but the live cart is "${n}"`);if(!mt(t)){if(i)throw new Ye("Cart state snapshot is empty");return}let o=Object.keys(t);if(o.length===0){if(i)throw new Ye("Cart state snapshot is empty");return}let s=fn(e);if(!mt(s)||Object.keys(s).length===0){if(i)throw new Ye("Live cart has no serializable state");return}let a=o.filter(d=>d in s);if(a.length===0){if(i)throw new Ye("Cart state snapshot does not overlap the live cart shape");return}for(let d of a){let m=da(s[d]),l=da(t[d]);if(!zu(m,l))throw new Ye(`Cart state field "${d}" has type ${l}, live cart expects ${m}`);if(m==="object"){let y=t[d],k=e[d];mt(y)&&!$i(y)&&Hi(k,y,void 0,void 0,!1)}}}function fa(e,t){if(!mt(e)||!mt(t))return;let n=fn(e);if(mt(n))for(let r of Object.keys(t))r in n&&(e[r]=Ln(t[r]))}function Tt(e){let t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object")throw new Ye("Cart state bundle is not an object");if(t.version!==1)throw new Ye(`Unsupported cart state version ${String(t.version)}`);if(typeof t.seed!="string"||typeof t.framesElapsed!="number")throw new Ye("Cart state bundle is missing seed or framesElapsed");return t}var et="cyberart.asset.ready",Xe="cyberart.asset.failed";function $t(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ma(e){return{type:e.status==="ready"?et:Xe,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function Xu(e){if(!e||typeof e!="object")return 0;let t=e;return typeof t.startTime=="number"&&typeof t.lastSimulationUpdateAt=="number"?Math.max(0,t.lastSimulationUpdateAt-t.startTime):0}function Qu(e,t){if(typeof window.resizeTo!="function")return!1;try{if(window.top!==window)return!1}catch{return!1}let n=Math.max(1,Math.round(e)),r=Math.max(1,Math.round(t)),i=Math.max(0,window.outerWidth-window.innerWidth),o=Math.max(0,window.outerHeight-window.innerHeight);try{window.resizeTo(n+i,r+o)}catch{return!1}return Math.abs(window.innerWidth-n)<=8&&Math.abs(window.innerHeight-r)<=8}var Zu=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],qi=Zu[0],el=qi[0]/qi[1],Bi=30,tl=120,nl=3840/2160,rl=2160/3840,Sr=class{constructor(t=Bi,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,s,a={}){this.framesElapsed=0;this.frameRate=Bi;this._paused=!1;this.savedToken=!1;this.prepared=!1;this.loopRunning=!1;this.fallbackAudio=[];this.audioLibrariesInternal=[];this.virtualClock=null;this.scriptedActions=[];this.initialScriptedActions=[];this.appliedActions=[];this.consumedActionIndexes=new Set;this.outboundEvents=[];this.consecutiveErrorCount=0;this.lastErrorLogAt=0;this.reinitStayPaused=!1;this.reinitPending=!1;this.lastExportedFramebuffer=null;this.pinnedOutput=null;this.pinViewportAtImport=null;this.importing=!1;this.drawLoop=this.drawLoop.bind(this),this.loadCart=this.loadCart.bind(this),this.prepareCart=this.prepareCart.bind(this),this.beginPlayback=this.beginPlayback.bind(this),this.reinit=this.reinit.bind(this),this.tuneFramerate=this.tuneFramerate.bind(this),this.container=a.container,this.seed=a.seed,this.captureKeyboard=a.captureKeyboard??!0,this.customState=a.customState,this.hostChannel=a.hostChannel,this.fallbackAudio=yr(a.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=a.kind??"render",this.onFrameTiming=a.onFrameTiming;let d=a.deterministic;this.deterministic=!!d;let m=d&&typeof d=="object"?d:{};if(this.deterministic){if(a.clock){let l=a.clock;if(typeof l.advance!="function")throw new Error("deterministic mode requires a virtual clock with advance()");this.virtualClock=l,this.clock=l}else this.virtualClock=Ys(m.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=$t(m.actions??[]),this.scriptedActions=$t(this.initialScriptedActions)}else this.clock=a.clock??pr();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=el,this.selectedAsp=qi,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=cn,this.containerWidth=r,this.containerHeight=i,this.gameManager=s,this.init(!0)}setGameManager(t){this.gameManager=t}reinit(t){if(!this.importing){if(this.shouldKeepPinnedOutput()){this.fitPinnedCanvas();return}this.reinitPending||(this.reinitStayPaused=this._paused,this.reinitPending=!0),this.paused=!0,clearTimeout(this.reinitTimeout),this.reinitTimeout=setTimeout(()=>{if(this.importing){this.paused=this.reinitStayPaused,this.reinitPending=!1;return}this.updateInProgress?this.reinit(t):(this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.clearPinnedOutput(),this.init(),this.reloadCart(),this.paused=this.reinitStayPaused,this.reinitPending=!1)},150)}}initSeed(){this.tokenData=this.seed?Ni({hash:this.seed,useCache:!1}):Ni(),this.rawParams=ra(this.tokenData),this.mintNo=parseInt(this.tokenData.tokenId)%1e6,console.log("token",this.mintNo,this.tokenData.hash)}init(t=!1){t&&this.initSeed(),this.pureAspectUpdate(this.selectedAsp);let n=this.aspectRatio,[r,i]=Js(n,this.containerWidth,this.containerHeight);r*=dt,i*=dt,this.width=~~r,this.height=~~i,this.atCenterX=this.width/2,this.atCenterY=this.height/2,this.kind!=="calculation"&&(this.mainCanvas?this.mainCanvas.setSize(this.width,this.height):this.mainCanvas=new mr(this.width,this.height,1,this.isBodyCanvas,this.canvasMountOptions()))}loadCart(t){this.prepareCart(t)&&this.beginPlayback()}prepareCart(t){if(this.prepared)return!0;try{let n=~~(this.width/1),r=~~(this.height/this.width*n),i=new ln(this.tokenData),o=new fr(n,r,i,this.rawParams,t,{gameManager:this.gameManager,canvasMount:this.canvasMountOptions(),customState:this.customState,captureKeyboard:this.deterministic?!1:this.captureKeyboard,hostChannel:this.hostChannel,clock:this.clock,listenToPointer:!this.deterministic,kind:this.kind});return this.animation=o,this.animationCart=t,this.paused=!1,this.framesElapsed=0,this.outboundEvents=[],this.scriptedActions=$t(this.initialScriptedActions),this.appliedActions=[],this.consumedActionIndexes=new Set,this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.deterministic&&this.hostChannel&&(this.outboundUnsubscribe=this.hostChannel.onEvent(s=>{this.outboundEvents.push(s)})),this.R=i,this.applyCartFrameRate(t,o),this.resolveAudioLibraries(t),this.prepared=!0,!0}catch(n){return console.error(n),!1}}applyCartFrameRate(t,n){let r=t.metadata,i=r?.frameRate??Bi,o=n.cartState?.visualMode??n.featureState?.visualMode,s=o&&r?.frameRateByVisualMode?r.frameRateByVisualMode[o]:void 0;this.updateFrameRate(typeof s=="number"&&s>0?s:i)}get audioLibraries(){return this.audioLibrariesInternal}get needsAudio(){return this.audioLibrariesInternal.length>0}resolveAudioLibraries(t){this.audioLibrariesInternal=yr(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=br(this.audioLibrariesInternal);if(cn){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||cn))for(let t of br(this.audioLibrariesInternal))try{await t.resumeIfSuspended()}catch(n){console.error(`Failed to resume audio library "${t.id}" after reload`,n)}}beginPlayback(){!this.prepared||this.loopRunning||(this.prepared=!1,this.loopRunning=!0,this.consecutiveErrorCount=0,!this.deterministic&&(this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)))}get isPrepared(){return this.prepared}get isLoopRunning(){return this.loopRunning}get isDeterministic(){return this.deterministic}getClock(){return{now:this.clock.now(),framesElapsed:this.framesElapsed,frameRate:this.frameRate}}getRandomState(){return this.requirePreparedAnimation().getRandomState()}schedule(t){this.scriptedActions.push($t(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:$t(this.scriptedActions),applied:$t(this.appliedActions),events:$t(this.outboundEvents),state:t.state}}async step(t=1){if(!this.deterministic)throw new Error("step() requires createRuntime({ deterministic: true })");this.requirePreparedAnimation(),this.prepared&&!this.loopRunning&&this.beginPlayback(),this.paused=!1;let n=Math.max(0,Math.floor(t));for(let r=0;r<n&&this.animation;r++){let i=this.framesElapsed;if(this.applyScheduledActions(i),await this.processFrame(this.clock.now(),{ignorePause:!0,scheduleNext:!1}),this.framesElapsed===i||(this.virtualClock?.advance(this.targetDrawTime),!this.loopRunning))break}}async advance(t){let n=Math.max(0,Math.round(t/this.targetDrawTime));await this.step(n)}applyScheduledActions(t){let n=this.animation;n&&this.scriptedActions.forEach((r,i)=>{r.atFrame===t&&(this.consumedActionIndexes.has(i)||(this.consumedActionIndexes.add(i),r.type==="pointer"?n.injectPointer(r.pointer.kind,r.pointer.x,r.pointer.y):r.type==="key"?n.injectKey(r.key):r.type==="event"?this.hostChannel?.dispatch(r.event):r.type==="asset"&&this.hostChannel?.dispatch(ma(r)),this.appliedActions.push({frame:t,action:r})))})}get paused(){return this._paused}set paused(t){this._paused!==t&&(this._paused=t,this.animation?.setPaused(t))}async waitUntilUpdateIdle(){for(;this.updateInProgress;)await new Promise(t=>{this.deterministic?queueMicrotask(t):typeof requestAnimationFrame=="function"?requestAnimationFrame(()=>t()):setTimeout(t,0)})}requirePreparedAnimation(){if(!this.animation)throw new Error("No prepared cart");return this.animation}async exportState(){let t=this.requirePreparedAnimation(),n=this._paused;this.paused=!0,await this.waitUntilUpdateIdle();try{this.kind!=="calculation"?this.lastExportedFramebuffer=t.captureFramebuffer():this.lastExportedFramebuffer=null;let r=t.getCanvas();return{version:1,cartId:this.animationCart?.metadata?.id,generative:this.animationCart?.metadata?.generative,seed:this.tokenData.hash,framesElapsed:this.framesElapsed,elapsedSinceStart:t.getElapsedSinceStart(),dimensions:{width:r?.width??this.width,height:r?.height??this.height,cssWidth:this.containerWidth,cssHeight:this.containerHeight,dpr:dt},state:fn(t.cartState)}}finally{this.paused=n}}async exportStateJSON(){return JSON.stringify(await this.exportState())}peekExportedFramebuffer(){return this.lastExportedFramebuffer}peekSeed(){return this.tokenData?.hash}isGenerative(){return this.animationCart?.metadata?.generative===!0}async importState(t,n){let r=this.requirePreparedAnimation(),i=Tt(t),o=this._paused,s=this.loopRunning;this.paused=!0,await this.waitUntilUpdateIdle(),Hi(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),la(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let a=pa(i,n?.framebuffer??this.lastExportedFramebuffer);if(a){this.pinOutputSize(a);let l=a.cssWidth??a.width/dt,y=a.cssHeight??a.height/dt;Qu(l,y),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let d=this.customState,m=!1;try{if(this.customState=Ln(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&fa(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let l=this.animation,y=l.cartState,k=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:Xu(y);l.restoreClock(k,typeof y?.startTime=="number"?y.startTime:void 0),o&&l.setPaused(!0);let C=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(C&&l.restoreFramebuffer(C)?y.keepRatioPrimed=!0:await l.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),m=!0}catch(l){throw this.clearPinnedOutput(),this.customState=d,this.paused=o,this.animationCart&&(this.syncContainerFromDom(),this.init(),this.reloadCart()),l}finally{this.importing=!1,m&&(this.customState=d,this.paused=o,s&&this.beginPlayback())}}unloadCart(){this.loopRunning=!1,this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.drawLoopTimeout&&clearTimeout(this.drawLoopTimeout),this.animation?.teardown(),this.animation=void 0,this.prepared=!1,this.audioLibrariesInternal=this.fallbackAudio,this.mainCanvas?.clearAll()}reloadCart(t=!1){let n=this.animationCart;if(!n)return;this.pinnedOutput&&(this.clearPinnedOutput(),this.syncContainerFromDom(),this.init());let r=this.reinitPending?this.reinitStayPaused:this._paused;this.unloadCart(),t&&this.initSeed(),this.loadCart(n),this.paused=r,!this.paused&&!cn&&this.resumeAudioLibraries()}getFrameRate(){return this.frameRate}updateFrameRate(t){if(this.frameRate=t,t>=1)this.targetDrawTime=1e3/t;else{let r=1/(2-t);this.targetDrawTime=1e3/r}this.drawTime=this.targetDrawTime}canvasMountOptions(){return{container:this.container,adoptFromDocument:!this.container}}syncContainerFromDom(){if(this.container){this.containerWidth=this.container.clientWidth||this.containerWidth,this.containerHeight=this.container.clientHeight||this.containerHeight;return}this.containerWidth=window.innerWidth,this.containerHeight=window.innerHeight}pinOutputSize(t){this.pinnedOutput=t,this.width=~~t.width,this.height=~~t.height,this.atCenterX=this.width/2,this.atCenterY=this.height/2,this.aspectRatio=this.width/this.height,this.mainCanvas&&this.mainCanvas.setSize(this.width,this.height)}shouldKeepPinnedOutput(){return this.pinnedOutput?(this.syncContainerFromDom(),this.viewportMatches(this.pinnedCssSize())?!0:!!(this.pinViewportAtImport&&this.viewportMatches(this.pinViewportAtImport))):!1}pinnedCssSize(){let t=this.pinnedOutput;return{w:t.cssWidth??t.width/dt,h:t.cssHeight??t.height/dt}}viewportMatches(t){return Math.abs(this.containerWidth-t.w)<8&&Math.abs(this.containerHeight-t.h)<8}fitPinnedCanvas(){let t=this.pinnedOutput,n=this.canvas;if(!t||!n)return;this.container&&!this.container.style.position&&(this.container.style.position="relative");let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=t.width/dt,s=t.height/dt;if(o<1||s<1||r<1||i<1)return;let a=Math.min(r/o,i/s),d=o*a,m=s*a;n.style.position="absolute",n.style.left="50%",n.style.top="50%",n.style.transform="translate(-50%, -50%)",n.style.margin="0",n.style.width=`${d}px`,n.style.height=`${m}px`,n.style.imageRendering=Math.abs(a-1)<.01?"auto":"pixelated"}clearPinnedOutput(){let t=this.canvas;this.pinnedOutput=null,this.pinViewportAtImport=null,t&&(t.style.position="",t.style.left="",t.style.top="",t.style.transform="",t.style.imageRendering="",t.style.width="",t.style.height="",t.style.margin="auto")}get canvas(){return this.animation?.getCanvas()??this.mainCanvas?.canvas}destroy(){this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.clearPinnedOutput(),this.unloadCart(),clearTimeout(this.reinitTimeout),this.mainCanvas&&!this.mainCanvas.adopted&&this.mainCanvas.canvas.remove()}drawIt(){}tuneFramerate(t){let n=this.lastCall||t;this.lastCall=t,this.drawTime=Math.max(0,this.drawTime+this.targetDrawTime-this.lastCall+n)}async processFrame(t,n={}){let r=n.ignorePause===!0,i=n.scheduleNext!==!1;if(!this.loopRunning&&!r)return;let o=!1,s,a="update",d=this.onFrameTiming,m=0,l=0,y=0;try{if(r||!this.paused||this.tempUnpause){if(!cn&&!r&&this.tuneFramerate(t),!this.animation)return;a="update",this.updateInProgress=!0;let C=d?performance.now():0;if(await this.animation.updateAnimationState(this.framesElapsed,this.rawParams,t),d&&(m=performance.now()-C),this.updateInProgress=!1,this.kind!=="calculation"){a="render";let T=d?performance.now():0;await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t),d&&(l=performance.now()-T)}if(this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let x=localStorage.getItem("goodones"),$=JSON.stringify(x?[...JSON.parse(x),this.tokenData.hash]:[this.tokenData.hash]);localStorage.setItem("goodones",$),this.savedToken=!0,this.mainCanvas&&localStorage.setItem(this.tokenData.hash,this.mainCanvas.canvas.toDataURL("image/png")),window.location.reload(),this.loopRunning=!1;return}this.framesElapsed++,this.tempUnpause&&(this.tempUnpause=!1)}a="draw";let k=d?performance.now():0;this.drawIt(),d&&(y=performance.now()-k)}catch(k){o=!0,s=k,this.handleFrameError(k,a)}finally{this.updateInProgress=!1,d&&!o&&d({frame:this.framesElapsed,updateMs:m,renderMs:l,drawMs:y,totalMs:m+l+y})}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=tl&&(this.loopRunning=!1,this.onError?.(s,{phase:a,consecutive:this.consecutiveErrorCount,stopped:!0}))):this.consecutiveErrorCount=0,!(!this.loopRunning||!i)&&(this.drawLoopTimeout=setTimeout(()=>{this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)},this.drawTime))}async drawLoop(t){await this.processFrame(t,{scheduleNext:!0})}handleFrameError(t,n){let r=performance.now();r-this.lastErrorLogAt>=1e3&&(this.lastErrorLogAt=r,console.error(`Animation ${n} error:`,t)),this.consecutiveErrorCount===0&&this.onError?.(t,{phase:n,consecutive:1,stopped:!1})}pureAspectUpdate(t){if(t[0]===0&&t[1]===0){let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=r/i;this.aspectRatio=Math.min(nl,Math.max(rl,o))}else this.aspectRatio=t[0]/t[1]}};var il="HostChannel has been destroyed",kr=class{constructor(){this.inbound=[];this.listeners=[];this.closed=!1}dispatch(t){this.requireOpen(),this.inbound.push(t),this.inbound.length>32&&this.inbound.splice(0,this.inbound.length-32)}consume(){if(this.requireOpen(),this.inbound.length===0)return[];let t=this.inbound;return this.inbound=[],t}emit(t){this.requireOpen();for(let n of this.listeners)n(t)}onEvent(t){return this.requireOpen(),this.listeners.push(t),()=>{this.listeners=this.listeners.filter(n=>n!==t)}}clearInbound(){this.requireOpen(),this.inbound=[]}clear(){this.inbound=[],this.listeners=[]}close(){this.closed=!0,this.clear()}requireOpen(){if(this.closed)throw new Error(il)}};var Qe=2,Gi=1,Wi="0.0.5",ha="0",ya="1970-01-01T00:00:00.000Z";function Ze(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Ir(e){return JSON.parse(JSON.stringify(e))}function Re(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function ba(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){Re(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{Re(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function Ve(e){return typeof e=="string"&&e.length>0}function Er(e){return typeof e=="number"&&Number.isFinite(e)}function ol(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function ji(e){return!Ze(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function Rr(e){if(Ze(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if(ji(e))return Gi}}function Ki(e,t,n){try{return Ir(Tt(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";Re(n,"invalid-engine-state",i,t);return}}function sl(e,t,n){if(!Ze(e)){Re(n,"invalid-field","cart must be an object",t);return}Ve(e.id)||Re(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),Ve(e.version)||Re(n,"invalid-field","cart.version must be a non-empty string",`${t}.version`);let r={id:typeof e.id=="string"?e.id:"",version:typeof e.version=="string"?e.version:""};return e.generative!==void 0&&(typeof e.generative!="boolean"?Re(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function al(e,t,n){if(!Ze(e)){Re(n,"invalid-field","clock must be an object",t);return}if(!Er(e.framesElapsed)){Re(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(Er(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:Re(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(Er(e.now)?r.now=e.now:Re(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(Er(e.frameRate)?r.frameRate=e.frameRate:Re(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function dl(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Re(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Ze(i)||!Ve(i.id)||!Ve(i.version)){Re(n,"invalid-field","module refs need non-empty id and version",s);return}r.push({id:i.id,version:i.version})}),r}function cl(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Re(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Ze(i)||!Ve(i.id)){Re(n,"invalid-field","asset refs need a non-empty id",s);return}let a={id:i.id};i.version!==void 0&&(Ve(i.version)?a.version=i.version:Re(n,"invalid-field","asset.version must be a non-empty string",`${s}.version`)),i.ref!==void 0&&(Ve(i.ref)?a.ref=i.ref:Re(n,"invalid-field","asset.ref must be a non-empty string",`${s}.ref`)),r.push(a)}),r}function ul(e,t,n){if(e===void 0)return;if(!Ze(e)||!Ve(e.seed)){Re(n,"invalid-field","rng must include a seed",t);return}if(!Ze(e.prngA)||!Ze(e.prngB)){Re(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){Re(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return ba(e,t,n)}function ll(e,t,n){if(e===void 0)return;if(!Ze(e)){Re(n,"invalid-field","provenance must be an object",t);return}let r={};if(e.source!==void 0&&(Ve(e.source)?r.source=e.source:Re(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!Ze(e.integrity)||!Ve(e.integrity.alg)||!Ve(e.integrity.hash)?Re(n,"invalid-field","provenance.integrity needs alg and hash strings",`${t}.integrity`):r.integrity={alg:e.integrity.alg,hash:e.integrity.hash}),e.publisher!==void 0&&(Ve(e.publisher)?r.publisher=e.publisher:Re(n,"invalid-field","provenance.publisher must be a non-empty string",`${t}.publisher`)),e.version!==void 0&&(Ve(e.version)?r.version=e.version:Re(n,"invalid-field","provenance.version must be a non-empty string",`${t}.version`)),e.signature!==void 0&&(!Ze(e.signature)||!Ve(e.signature.id)||!Ve(e.signature.alg)?Re(n,"invalid-field","provenance.signature needs id and alg strings",`${t}.signature`):r.signature={id:e.signature.id,alg:e.signature.alg}),e.grants!==void 0)if(!Array.isArray(e.grants))Re(n,"invalid-field","provenance.grants must be an array",`${t}.grants`);else{let i=[];e.grants.forEach((o,s)=>{Ve(o)?i.push(o):Re(n,"invalid-field","provenance.grants entries must be non-empty strings",`${t}.grants[${s}]`)}),r.grants=i}return r}function va(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==Qe&&Re(t,"invalid-schema",`defineSnapshot produces schema ${Qe}`,"schemaVersion"),Ve(e.seed)||Re(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?Wi:e.runtimeVersion;Ve(n)||Re(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;ol(r)||Re(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=sl(e.cart,"cart",t),o=al(e.clock,"clock",t),s=Ki(e.engineState,"engineState",t),a=dl(e.modules,"modules",t),d=cl(e.assets,"assets",t),m=ul(e.rng,"rng",t),l=ll(e.provenance,"provenance",t),y;if(e.hostState!==void 0&&(y=ba(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!Ve(e.hostStateRef)&&Re(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!s||!Ve(e.seed))return;let k={schemaVersion:Qe,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:s,createdAt:r};return a&&a.length>0&&(k.modules=a),m&&(k.rng=m),y!==void 0&&(k.hostState=y),Ve(e.hostStateRef)&&(k.hostStateRef=e.hostStateRef),d&&d.length>0&&(k.assets=d),l&&(l.source||l.integrity||l.publisher||l.version||l.signature||l.grants)&&(k.provenance=l),k}function Ui(e){if(!Ze(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=va(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function Cr(e,t){return Ve(e.cartId)?Ui({cart:{id:e.cartId,version:t?.cartVersion??ha,generative:e.generative},modules:t?.modules,seed:e.seed,rng:t?.rng,clock:t?.clock??{framesElapsed:e.framesElapsed,elapsedSinceStart:e.elapsedSinceStart},engineState:e,hostState:t?.hostState,hostStateRef:t?.hostStateRef,assets:t?.assets,createdAt:t?.createdAt,provenance:t?.provenance,runtimeVersion:t?.runtimeVersion}):{ok:!1,errors:[{code:"invalid-field",detail:"cart.id is required",path:"cart.id"}]}}function ga(e){let t=Ir(e),n={schemaVersion:Gi,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:ha,generative:t.generative}),n}function Ji(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[{code:"invalid-json",detail:"Snapshot JSON could not be parsed"}]}}if(!Ze(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(ji(t))try{return{ok:!0,snapshot:ga(Tt(t))}}catch(r){return{ok:!1,errors:[{code:"invalid-engine-state",detail:r instanceof Error?r.message:"Cart state bundle is invalid"}]}}let n=Rr(t);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is missing schemaVersion and is not a cart state bundle",path:"schemaVersion"}]};if(n===Gi){let r=[],i=Ki(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:ga(i)}}if(n!==Qe){if(n>Qe)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${n} is newer than ${Qe}`,path:"schemaVersion"}]};let r=[],i=Ki(t.engineState,"engineState",r);return i?{ok:!0,snapshot:{schemaVersion:n,engineState:i,seed:typeof t.seed=="string"?t.seed:i.seed,clock:{framesElapsed:i.framesElapsed,elapsedSinceStart:i.elapsedSinceStart}}}:{ok:!1,errors:r.length?r:[{code:"invalid-snapshot",detail:`Snapshot schema ${n} is missing engineState`,path:"engineState"}]}}return Vn(t)}function Vn(e){if(!Ze(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(e.schemaVersion!==Qe)return{ok:!1,errors:[{code:"invalid-schema",detail:`Expected snapshot schema ${Qe}`,path:"schemaVersion"}]};let t=[],n=va(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function mn(e){return e.map(t=>t.detail).join("; ")}function Sa(e){if(ji(e))return Tt(e);if(Ze(e)&&e.engineState!==void 0)return Tt(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function pl(){return[{from:1,to:2,migrate:hl}]}function fl(e){let t=[...e?.migrations??pl()],n=new Map;for(let r of t){if(!Number.isInteger(r.from)||!Number.isInteger(r.to)||r.to!==r.from+1)throw new Error(`Snapshot migration must step from n to n+1 (got ${String(r.from)} \u2192 ${String(r.to)})`);if(typeof r.migrate!="function")throw new Error(`Snapshot migration ${r.from} \u2192 ${r.to} is missing migrate()`);if(n.has(r.from))throw new Error(`Duplicate snapshot migration from schema ${r.from}`);n.set(r.from,r)}return{migrations:t,get(r){return n.get(r)}}}var ml=fl();function gl(){return ml}function hl(e){let t=Sa(e),n=Cr(t,{createdAt:ya,runtimeVersion:Wi});if(n.ok===!1)throw new Error(mn(n.errors));return n.snapshot}function ka(e){try{return Ir(e)}catch{return}}function Ea(e,t=gl()){let n=ka(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=Rr(r);if(i===void 0){let o=Ji(r);if(o.ok===!1)return o;r=o.snapshot,i=o.snapshot.schemaVersion}if(i>Qe)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${i} is newer than ${Qe}`,path:"schemaVersion"}]};if(i===Qe)return Vn(r);for(;i<Qe;){let o=t.get(i);if(!o)return{ok:!1,errors:[{code:"missing-migration",detail:`No snapshot migration from schema ${i} to ${i+1}`,path:"schemaVersion"}]};let s;try{s=o.migrate(ka(r))}catch(d){let m=d instanceof Error?d.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${m}`,path:"schemaVersion"}]}}let a=Rr(s);if(a!==o.to)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} produced schema ${String(a)}`,path:"schemaVersion"}]};if(o.to===Qe){let d=Vn(s);if(d.ok===!1)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} did not produce a valid snapshot`,path:"schemaVersion"},...d.errors]};r=d.snapshot}else r=s;i=o.to}return Vn(r)}function Ia(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[{code:"invalid-json",detail:"Snapshot JSON could not be parsed"}]}}if(!n||typeof n!="object")return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(typeof n.schemaVersion=="number"){let i=Ea(n,t);if(i.ok===!1)return i;try{return{ok:!0,bundle:Tt(i.snapshot.engineState),snapshot:i.snapshot}}catch(o){return{ok:!1,errors:[{code:"invalid-engine-state",detail:o instanceof Error?o.message:"engineState is not a cart state bundle",path:"engineState"}]}}}try{return{ok:!0,bundle:Tt(n)}}catch(i){return{ok:!1,errors:[{code:"invalid-engine-state",detail:i instanceof Error?i.message:"Cart state bundle is invalid"}]}}}function Ra(e,t){let n=Ji(e);return n.ok===!1?n:Ea(n.snapshot,t)}var yl=["image","audio","font","spritesheet"],bl=["timeout","cors","not-found","invalid","aborted","resolver","undeclared","hash-mismatch","unsigned"],Fn="cyberart:fallback/silent",Ca="Asset preloader has been destroyed",vl=4,Sl=new Set(yl),kl=new Set(bl),El={timeout:"asset load timed out",cors:"CORS blocked this asset","not-found":"asset was not found",invalid:"asset declaration or resource is invalid",aborted:"asset load was aborted",resolver:"asset resolver failed",undeclared:"asset is not declared on the cart manifest","hash-mismatch":"asset bytes do not match the declared hash",unsigned:"asset bytes are missing or unsigned"};function Bn(e){return typeof e=="string"&&Sl.has(e)}function Il(e){return typeof e=="string"&&kl.has(e)}function Hn(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&Il(t.code)&&typeof t.message=="string"}function Oe(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:El[e.code]}}function gn(e,t){return{type:e==="ready"?et:Xe,kind:"state",payload:t}}function Aa(e){if(!e?.aborted)return;let t=new Error("aborted");throw t.name="AbortError",t}function Rl(e){return e instanceof Error&&e.name==="AbortError"||typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"}function zi(e){return e?{...e}:void 0}function Dt(e){let t={id:e.id,ref:e.ref,type:e.type,url:e.url};return e.integrity!==void 0&&(t.integrity=e.integrity),e.provenance&&(t.provenance=zi(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function $n(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function Cl(e){if(e.state==="ready"){let t={state:"ready",resource:Dt(e.resource)};return e.failure&&(t.failure=$n(e.failure)),t}return e.state==="failed"?{state:"failed",failure:$n(e.failure)}:{state:e.state}}function Al(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}async function wl(e){let t=await crypto.subtle.digest("SHA-256",e);return Al(new Uint8Array(t))}function Pl(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return`data:application/octet-stream;base64,${typeof btoa=="function"?btoa(t):Buffer.from(e).toString("base64")}`}function Ar(e){let t=e.declared,n=e.fetchBytes,r=e.hashBytes??wl;return{async resolve(i,o){Aa(o);let s=t[i.ref];if(!s)throw Oe({id:i.id,ref:i.ref,code:"undeclared",message:`undeclared asset ref "${i.ref}"`});if(!s.hash||typeof s.hash!="string")throw Oe({id:i.id,ref:i.ref,code:"unsigned",message:`unsigned asset "${i.ref}"`});let a=await n(s.url);if(Aa(o),!a)throw Oe({id:i.id,ref:i.ref,code:"unsigned",message:`no signed bytes for "${s.url}"`});if(await r(a)!==s.hash)throw Oe({id:i.id,ref:i.ref,code:"hash-mismatch",message:`hash mismatch for "${i.ref}"`});return{id:i.id,ref:i.ref,type:i.type,url:Pl(a),integrity:`sha256-${s.hash}`,cors:"omit",provenance:i.provenance}}}}function xl(e){if(!e||typeof e!="object")return Oe({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return Oe({id:typeof e.id=="string"?e.id:"",ref:typeof e.ref=="string"?e.ref:"",code:"invalid",message:"id is required"});if(typeof e.ref!="string"||e.ref.length===0)return Oe({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!Bn(e.type))return Oe({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return Oe({id:e.id,ref:e.ref,code:"invalid",message:"integrity must be a string"});if(e.timeoutMs!==void 0&&(typeof e.timeoutMs!="number"||!Number.isFinite(e.timeoutMs)||e.timeoutMs<0))return Oe({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function wa(e){return{id:e.id,ref:Fn,type:e.type,url:Fn,usedFallback:!0,cors:"omit"}}function Pa(e,t){return Hn(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:Rl(t)?Oe({id:e.id,ref:e.ref,code:"aborted"}):Oe({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function xa(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw Oe({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw Oe({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=Dt(t);return n.id=e.id,n.ref=t.ref||e.ref,n.type=e.type,!n.integrity&&e.integrity&&(n.integrity=e.integrity),!n.provenance&&e.provenance&&(n.provenance=zi(e.provenance)),n}function hn(e){if(typeof e?.resolver?.resolve!="function")throw new Error("createAssetPreloader: resolver is required");let t=e.emitEvents!==!1,n=e.wallClockTimeout!==!1,r=new Map,i=[],o=new Map,s=new Map,a=new Map,d=new Map,m=new Map,l=new Set,y=!1;function k(P){return P.code==="aborted"||P.code==="timeout"}function C(P,F,W){let O=Pa(P,W);return O.code==="timeout"?O:F.aborted?Oe({id:P.id,ref:P.ref,code:"aborted"}):O}function T(P,F){let W=m.get(P);W||(W=new Set,m.set(P,W)),W.add(F)}function v(P){if(P?.state==="ready")return`${P.resource.type}\0${P.resource.ref}`}function x(P,F){for(let[W,O]of m)if(W!==F&&O.has(P))return!0;for(let[W,O]of r)if(W!==F&&v(O)===P)return!0;return!1}function $(P,F){let W=new Set(m.get(P)),O=v(F);O&&W.add(O),m.delete(P);for(let u of W)x(u,P)||a.delete(u)}function j(){let P=0,F=0,W=0,O=0,u={};for(let[b,w]of r)u[b]=Cl(w),w.state==="pending"||w.state==="loading"?P+=1:w.state==="failed"?W+=1:(F+=1,(w.resource.usedFallback||w.failure)&&(O+=1));return{total:r.size,pending:P,ready:F,failed:W,fallbacks:O,items:u,failures:i.map($n)}}function D(){if(l.size===0)return;let P=j();for(let F of l)F(P)}function V(P){i.push($n(P))}function A(P){y||!t||!e.dispatch||e.dispatch(P)}function p(P){if(P?.managed&&P.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(P.url)}catch{}}function E(P,F){if(y)return;let W=r.get(P);W?.state==="ready"&&p(W.resource),r.set(P,F),D()}function c(P){if(P.fallback!==void 0)return P.fallback==="silent"?{id:`${P.id}::fallback`,ref:Fn,type:P.type}:typeof P.fallback=="string"?{id:`${P.id}::fallback`,ref:P.fallback,type:P.type}:{...P.fallback,id:typeof P.fallback.id=="string"&&P.fallback.id.length>0?P.fallback.id:`${P.id}::fallback`}}function f(P,F,W){let O=`${P.type}\0${P.ref}`,u=a.get(O);if(u)return F.aborted?Promise.reject(Oe({id:P.id,ref:P.ref,code:"aborted"})):(T(W,O),Promise.resolve(Dt(u.resource)));if(F.aborted)return Promise.reject(Oe({id:P.id,ref:P.ref,code:"aborted"}));let b=d.get(O);if(!b){let L=new AbortController,_={id:P.id,ref:P.ref,type:P.type};P.integrity!==void 0&&(_.integrity=P.integrity),P.provenance&&(_.provenance=zi(P.provenance)),b={promise:Promise.resolve().then(()=>e.resolver.resolve(_,L.signal)).then(U=>{let B=xa(P,U);if(L.signal.aborted)throw Oe({id:P.id,ref:P.ref,code:"aborted"});return a.set(O,{resource:Dt(B)}),B}).catch(U=>{throw Pa(P,U)}).finally(()=>{d.delete(O)}),controller:L,waiters:0},d.set(O,b)}let w=b;return w.waiters+=1,new Promise((L,_)=>{let G=!1,U=(g,S)=>{G||(G=!0,F.removeEventListener("abort",B),w.waiters-=1,S&&w.waiters<=0&&w.controller.abort(),g())},B=()=>{U(()=>_(Oe({id:P.id,ref:P.ref,code:"aborted"})),!0)};if(F.aborted){B();return}F.addEventListener("abort",B,{once:!0}),w.promise.then(g=>{if(!G){if(F.aborted){B();return}T(W,O),U(()=>L(Dt(g)),!1)}},g=>{if(!G){if(F.aborted){B();return}U(()=>_(g),!1)}})})}function h(P,F,W){if(F.aborted)return Promise.reject(Oe({id:P.id,ref:P.ref,code:"aborted"}));if(P.ref===Fn)return Promise.resolve(wa(P));let O=new AbortController,u=()=>O.abort();F.addEventListener("abort",u,{once:!0});let b=P.timeoutMs??e.timeoutMs,w,L=!1;return n&&b!==void 0&&b>0&&Number.isFinite(b)&&(w=setTimeout(()=>{L=!0,O.abort()},b)),f(P,O.signal,W).then(_=>{let G=xa(P,_);return G.id=P.id,G}).catch(_=>{throw L?Oe({id:P.id,ref:P.ref,code:"timeout"}):_}).finally(()=>{w!==void 0&&clearTimeout(w),F.removeEventListener("abort",u)})}async function R(P,F,W,O){try{return{resource:await h(P,F,O)}}catch(u){let b=C(P,F,u);if(k(b)||F.aborted||W>=vl)throw b;let w=c(P);if(!w)throw b;if(F.aborted)throw Oe({id:P.id,ref:P.ref,code:"aborted"});if(P.fallback==="silent"||w.ref===Fn)return{resource:wa(P),failure:b};try{let L=await R(w,F,W+1,O);return{resource:{...Dt(L.resource),id:P.id,usedFallback:!0},failure:b}}catch(L){let _=Hn(L)&&!k(L)&&!F.aborted?L:C(P,F,L);throw!k(_)&&!F.aborted&&V(b),_}}}async function M(P,F){if(y)throw new Error(Ca);let W=r.get(P.id);if(W?.state==="ready"||W?.state==="failed")return;let O=o.get(P.id);if(O){await O;return}let u=(async()=>{let b=xl(P);if(b){E(P.id,{state:"failed",failure:b}),V(b),A(gn("failed",{id:P.id,ref:P.ref,failure:b}));return}E(P.id,{state:"loading"});let w=s.get(P.id)??new AbortController;s.has(P.id)||s.set(P.id,w);try{let L=await R(P,w.signal,F,P.id);if(y)return;if(w.signal.aborted){let _=Oe({id:P.id,ref:P.ref,code:"aborted"});E(P.id,{state:"failed",failure:_}),V(_),A(gn("failed",{id:P.id,ref:P.ref,failure:_}));return}if(L.resource.id=P.id,L.failure){E(P.id,{state:"ready",resource:L.resource,failure:L.failure}),V(L.failure),A(gn("failed",{id:P.id,ref:P.ref,failure:L.failure,resource:Dt(L.resource)})),A(gn("ready",{id:P.id,ref:L.resource.ref,resource:Dt(L.resource),failure:L.failure}));return}E(P.id,{state:"ready",resource:L.resource}),A(gn("ready",{id:P.id,ref:P.ref,resource:Dt(L.resource)}))}catch(L){if(y)return;let _=Hn(L)&&!k(L)&&!w.signal.aborted?{...$n(L),id:P.id}:C(P,w.signal,L);E(P.id,{state:"failed",failure:_}),V(_),A(gn("failed",{id:P.id,ref:P.ref,failure:_}))}finally{s.get(P.id)===w&&s.delete(P.id)}})();o.set(P.id,u);try{await u}finally{o.delete(P.id)}}return{async preload(P){if(y)throw new Error(Ca);let F=Array.isArray(P)?P:[];for(let W of F)W&&typeof W.id=="string"&&W.id.length>0&&(r.has(W.id)||r.set(W.id,{state:"pending"}),s.has(W.id)||s.set(W.id,new AbortController));return D(),await Promise.all(F.map(W=>M(W,0))),j()},get(P){let F=r.get(P);if(F?.state==="ready")return Dt(F.resource)},getProgress(){return j()},onProgress(P){return l.add(P),()=>{l.delete(P)}},abort(P){if(!y){if(P!==void 0){s.get(P)?.abort();return}for(let F of s.values())F.abort()}},forget(P){if(y)return;if(P===void 0){for(let W of r.values())W.state==="ready"&&p(W.resource);r.clear(),i.length=0,a.clear(),m.clear(),D();return}let F=r.get(P);F?.state==="ready"&&p(F.resource),$(P,F),r.delete(P);for(let W=i.length-1;W>=0;W--)i[W].id===P&&i.splice(W,1);D()},dispose(){if(!y){y=!0;for(let P of s.values())P.abort();s.clear();for(let P of r.values())P.state==="ready"&&p(P.resource);r.clear(),i.length=0,o.clear();for(let P of d.values())P.controller.abort();a.clear(),d.clear(),m.clear(),l.clear()}}}}var Ta=.25;function yn(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function Yi(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function Tl(e){return e instanceof Error&&e.message?e.message:String(e)}async function Dl(){let{adaptersFor:e}=await Promise.resolve().then(()=>(Vi(),aa)),t=e(["tone"]),n=typeof navigator<"u"&&/Headless/i.test(navigator.userAgent);for(let r of t)n?await r.load():await r.unlock()}function Ol(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function Da(e={}){let t=e.toneStart??Dl,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,s=new Map,a=[],d={state:"locked"},m,l=!1,y=!1;function k(D){for(let V of a.slice())V(D)}function C(D,V){let A=i.get(D);if(A)return V&&!A.participantId&&(A.participantId=V),A;let p={id:D,participantId:V,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(D,p),p}function T(D){return l||D.muted?0:Yi(D.gain*D.duckGain)}function v(D){return{id:D.id,participantId:D.participantId,gain:D.gain,muted:D.muted,duckGain:D.duckGain,priority:D.priority,effectiveGain:T(D)}}function x(){let D=-1/0;for(let V of s.values())V.priority>D&&(D=V.priority);for(let V of i.values())if(!V.manualDuck){if(D===-1/0){V.duckGain=1;continue}V.duckGain=V.priority<D?Ta:1}}async function $(){if(y||d.state==="unlocked")return yn(d);if(m)return await m,yn(d);d={state:"unlocking"},m=(async()=>{try{await t(),d={state:"unlocked"}}catch(D){d={state:"failed",error:Tl(D)}}})();try{await m}finally{m=void 0}return yn(d)}return{unlock:$,status(){return yn(d)},authorize(D){y||typeof D!="string"||D.length===0||r.add(D)},revoke(D){y||r.delete(D)},isAuthorized(D){return D===void 0||D.length===0?r.size===0:r.size===0?!0:r.has(D)},setChannelGain(D,V,A){y||typeof D!="string"||D.length===0||(C(D,A).gain=Yi(V))},setPriority(D,V,A){y||typeof D!="string"||D.length===0||(C(D,A).priority=Number.isFinite(V)?V:0,x())},mute(){y||(l=!0,k({type:"mute"}))},unmute(){y||(l=!1,k({type:"mute"}))},muteChannel(D,V){y||typeof D!="string"||D.length===0||(C(D,V).muted=!0,k({type:"mute"}))},unmuteChannel(D){if(y)return;let V=i.get(D);V&&(V.muted=!1,k({type:"mute"}))},duck(D,V=Ta){if(y||typeof D!="string"||D.length===0)return;let A=C(D);A.manualDuck=!0,A.duckGain=Yi(V)},unduck(D){if(y)return;let V=i.get(D);V&&(V.manualDuck=!1,x())},effectiveGain(D){let V=i.get(D);return V?T(V):l?0:1},handleHostEvent(D){if(y||!D||typeof D!="object")return;let V=Ol(D.payload);if(V){if(D.type===et){o.set(V,"ready"),k({type:"asset",id:V,status:"ready"});return}D.type===Xe&&(o.set(V,"failed"),k({type:"asset",id:V,status:"failed"}))}},assetStatus(D){return o.get(D)},noteCueStarted(D){if(y)return;s.set(D.idempotencyKey,{idempotencyKey:D.idempotencyKey,channelId:D.channelId,participantId:D.participantId,priority:D.priority});let V=C(D.channelId,D.participantId);D.priority>V.priority&&(V.priority=D.priority),x()},noteCueEnded(D){s.delete(D)&&x()},teardown(D){if(!y&&!(typeof D!="string"||D.length===0)){r.delete(D);for(let[V,A]of[...s.entries()])A.participantId===D&&s.delete(V);for(let[V,A]of[...i.entries()])A.participantId===D&&i.delete(V);x(),k({type:"teardown",participantId:D})}},onNotice(D){return a.push(D),()=>{let V=a.indexOf(D);V>=0&&a.splice(V,1)}},inspect(){let D=[...o.entries()].sort(([A],[p])=>A<p?-1:A>p?1:0),V={};for(let[A,p]of D)V[A]=p;return{status:yn(d),reducedSensory:n,muted:l,authorized:[...r].sort(),channels:[...i.values()].sort((A,p)=>A.id<p.id?-1:A.id>p.id?1:0).map(v),assets:V}},destroy(){y||(y=!0,s.clear(),i.clear(),r.clear(),k({type:"destroy"}),a.length=0)},get reducedSensory(){return n},get muted(){return l}}}function Oa(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function wr(e){js();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:s,audioBroker:a,audioParticipantId:d,kind:m="render",onFrameTiming:l}=e,y=n===void 0?void 0:na(n,o?"deterministic":"live"),k=new kr;if(a&&(Oa(k,a),d&&a.authorize(d)),s&&typeof s.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let C=s?hn({resolver:s.resolver,timeoutMs:s.timeoutMs,emitEvents:s.emitEvents??!o,wallClockTimeout:!o,dispatch:f=>k.dispatch(f)}):void 0,T=!1,v=null,x,$=l,j=!1,D=t.clientWidth||window.innerWidth,V=t.clientHeight||window.innerHeight,A=new Sr(30,!1,D,V,!1,void 0,{container:t,seed:y,captureKeyboard:r,hostChannel:k,audio:i,deterministic:o,kind:m,onFrameTiming:l}),p=()=>{let f=t.clientWidth||window.innerWidth,h=t.clientHeight||window.innerHeight;return f===A.containerWidth&&h===A.containerHeight?!1:(A.containerWidth=f,A.containerHeight=h,!0)},E=null;return!A.isDeterministic&&typeof ResizeObserver<"u"&&(E=new ResizeObserver(()=>{if(T||!v)return;p()&&j&&A.reinit()}),E.observe(t)),A.onError=(f,h)=>{x?.(f,h)},{get tokenData(){return A.tokenData},get hostChannel(){return k},get assets(){return C},get audioBroker(){return a},get kind(){return m},get onError(){return x},set onError(f){x=f},get onFrameTiming(){return $},set onFrameTiming(f){$=f,A.onFrameTiming=f},mount(f,h={}){if(T)throw new Error("createRuntime: cannot mount on a destroyed runtime");v?.destroy(),j=!1,A.customState=h.initialState,A.setGameManager(h.gameManager);let R=h.onEvent?k.onEvent(h.onEvent):()=>{};if(a&&d&&a.authorize(d),!A.prepareCart(f))throw R(),new Error("createRuntime: failed to prepare cart");let M=!1,P={async start(){if(!M){if(p()&&A.isPrepared&&(A.init(),A.unloadCart(),!A.prepareCart(f)))throw new Error("createRuntime: failed to prepare cart");A.needsAudio&&(a?await a.unlock():await A.unlockAudio(),M)||(j=!0,A.beginPlayback())}},pause(){M||(A.paused=!0)},resume(){M||(A.paused=!1)},dispatch(F){M||k.dispatch(F)},snapshot(){if(M)return{seed:"",pngDataUrl:""};let F=A.canvas;return{seed:A.tokenData.hash,metadata:f.metadata,pngDataUrl:F?F.toDataURL("image/png"):""}},destroy(){M||(M=!0,j=!1,R(),k.clearInbound(),A.unloadCart(),v===P&&(v=null))},reload(){if(!M){if(!j){if(A.isPrepared&&(A.unloadCart(),!A.prepareCart(f)))throw new Error("createRuntime: failed to prepare cart");return}A.reloadCart()}},reinit(F){if(!M){if(!j){p();return}A.reinit(F)}},getCartState(){return A.animation?.cartState},exportState(){return M?Promise.reject(new Error("Cart handle has been destroyed")):A.exportState()},exportStateJSON(){return M?Promise.reject(new Error("Cart handle has been destroyed")):A.exportStateJSON()},async importState(F,W){if(M)throw new Error("Cart handle has been destroyed");let O=F,u=F;if(typeof F=="string")try{u=JSON.parse(F)}catch{await A.importState(F,W);return}if(u&&typeof u=="object"&&typeof u.schemaVersion=="number"){let b=Ia(u);if(b.ok===!1)throw new Ye(mn(b.errors));await A.importState(b.bundle,W);return}await A.importState(typeof O=="string"?O:u,W)},async exportSnapshot(F){if(M)throw new Error("Cart handle has been destroyed");let W=await A.exportState(),O=A.getClock(),u=Cr(W,{...F,rng:A.getRandomState(),clock:{framesElapsed:W.framesElapsed,elapsedSinceStart:W.elapsedSinceStart,now:O.now,frameRate:O.frameRate}});if(u.ok===!1)throw new Ye(mn(u.errors));return u.snapshot},async exportSnapshotJSON(F){return JSON.stringify(await P.exportSnapshot(F))},async importSnapshot(F,W){if(M)throw new Error("Cart handle has been destroyed");let O=Ra(F);if(O.ok===!1)throw new Ye(mn(O.errors));await A.importState(O.snapshot.engineState,W)},peekExportedFramebuffer(){return M?null:A.peekExportedFramebuffer()},peekSeed(){if(!M)return A.peekSeed()},isGenerative(){return M?!1:A.isGenerative()},async step(F=1){if(M)throw new Error("Cart handle has been destroyed");await A.step(F)},async advance(F){if(M)throw new Error("Cart handle has been destroyed");await A.advance(F)},schedule(F){M||A.schedule(F)},getClock(){if(M)throw new Error("Cart handle has been destroyed");return A.getClock()},getRandomState(){if(M)throw new Error("Cart handle has been destroyed");return A.getRandomState()},getReplayMetadata(){return M?Promise.reject(new Error("Cart handle has been destroyed")):A.getReplayMetadata()},get canvas(){return A.canvas},get paused(){return A.paused},set paused(F){M||(A.paused=F)},get tokenData(){return A.tokenData},get isPrepared(){return A.isPrepared},get isLoopRunning(){return A.isLoopRunning},get needsAudio(){return A.needsAudio},get audioLibraries(){return A.audioLibraries}};return v=P,P},async unlockAudio(){if(a){A.needsAudio&&await a.unlock();return}await A.unlockAudio()},destroy(){T||(T=!0,v?.destroy(),v=null,a&&d&&a.teardown(d),E?.disconnect(),E=null,C?.dispose(),k.close(),A.destroy())}}}var Ma="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==",Na=320,_a=180,Ml="Headless harness has been destroyed",La=!1;function Pr(e={}){if(e.glyphAtlas&&Pi(e.glyphAtlas),typeof globalThis.ImageData>"u"){class n{constructor(i,o,s){this.colorSpace="srgb";typeof i=="number"?(this.width=i,this.height=o??0,this.data=new Uint8ClampedArray(this.width*this.height*4)):(this.data=i,this.width=o??0,this.height=s??i.length/4/this.width)}}globalThis.ImageData=n}Ws();let t=HTMLCanvasElement.prototype;t.getContext=function(r,i){return String(r??"2d").toLowerCase()!=="2d"?null:xi(this,{alpha:i?.alpha!==!1,glyphAtlas:e.glyphAtlas})},t.toDataURL=function(r){if(r&&r!=="image/png")throw new Ae(`toDataURL(${r})`);return Hs(this)??Ma},La=!0}function Nl(e,t){let n=document.createElement("div");return Object.defineProperty(n,"clientWidth",{value:e,configurable:!0}),Object.defineProperty(n,"clientHeight",{value:t,configurable:!0}),document.body.appendChild(n),n}function _l(e){let t=e.indexOf(","),n=t>=0?e.slice(t+1):e,r=globalThis.atob(n),i=new Uint8Array(r.length);for(let o=0;o<r.length;o++)i[o]=r.charCodeAt(o);return i}function Ll(){return typeof process<"u"&&!!process.versions?.node}async function Vl(e,t){if(!Ll())throw new Error("captureFrame(path) requires Node.js; omit the path to get the snapshot only");let n;try{({writeFile:n}=await import("node:fs/promises"))}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`captureFrame(path) could not load node:fs/promises (${i}). Omit the path, or run under Node.`)}try{await n(e,_l(t))}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`captureFrame could not write ${e}: ${i}`)}}function Fl(e){La||Pr();let t=e.width??Na,n=e.height??_a,r=Nl(t,n),i=[],o=[],s=!1,a=e.onEvent,d=e.onError,m=wr({container:r,seed:e.seed,deterministic:{origin:e.origin,actions:e.actions??[]}});m.onError=(T,v)=>{o.push({error:T,info:v}),d?.(T,v)},Object.defineProperty(m,"onError",{configurable:!0,enumerable:!0,get(){return d},set(T){d=T}});let l=T=>{i.push(T),a?.(T)},y=m.mount(e.cart,{initialState:e.initialState,gameManager:e.gameManager,onEvent:l}),k=()=>{if(s)throw new Error(Ml)};return{runtime:m,container:r,get events(){return i.slice()},get errors(){return o.slice()},get cart(){return y},async step(T=1){k(),await y.step(T)},async advance(T){k(),await y.advance(T)},schedule(T){k(),y.schedule(T)},dispatch(T){k(),y.dispatch(T)},start(){return k(),y.start()},pause(){k(),y.pause()},resume(){k(),y.resume()},get paused(){return y.paused},key(T){k(),y.schedule({type:"key",atFrame:y.getClock().framesElapsed,key:T})},click(T,v){k(),y.schedule({type:"pointer",atFrame:y.getClock().framesElapsed,pointer:{kind:"down",x:T,y:v}})},async inspect(){k();let T=await y.getReplayMetadata();return{state:T.state,events:i.slice(),errors:o.slice(),replay:T,clock:y.getClock()}},async captureFrame(T){k();let v=y.snapshot();return T&&await Vl(T,v.pngDataUrl),v},remount(T={}){return k(),i.length=0,o.length=0,"onEvent"in T&&(a=T.onEvent),y=m.mount(e.cart,{initialState:T.initialState??e.initialState,gameManager:T.gameManager??e.gameManager,onEvent:l}),y},destroy(){if(!s){s=!0;try{y.destroy()}finally{try{m.destroy()}finally{r.remove()}}}}}}var Va="CYBERART_UPDATE_GOLDEN";function Fa(e=typeof process<"u"?process.env:void 0){let t=e?.[Va];return t==="1"||t==="true"}function Xi(e){return Ti(cr(e))}function $a(e,t,n={}){if(e.width!==t.width||e.height!==t.height){let l=Hl(e,t);return{match:!1,differingPixels:e.width*e.height,width:e.width,height:e.height,artifacts:l,updatedGolden:!1}}let r=n.tolerance??0,i=n.perceptualThreshold,o=n.maxDifferingPixels??0,s=new Uint8ClampedArray(e.width*e.height*4),a=0;for(let l=0;l<e.data.length;l+=4){let y=Math.abs(e.data[l]-t.data[l]),k=Math.abs(e.data[l+1]-t.data[l+1]),C=Math.abs(e.data[l+2]-t.data[l+2]),T=Math.abs(e.data[l+3]-t.data[l+3]),v=.299*y+.587*k+.114*C,x=n.alphaTolerance??r;(i!==void 0?v<=i&&T<=x:y<=r&&k<=r&&C<=r&&T<=x)?(s[l]=0,s[l+1]=0,s[l+2]=0,s[l+3]=255):(a+=1,s[l]=255,s[l+1]=0,s[l+2]=255,s[l+3]=255)}let d=Qi(t,e,_t(s,e.width,e.height),a);return n.updateGolden===!0||Fa()?{match:!0,differingPixels:0,width:e.width,height:e.height,artifacts:Qi(e,e,_t(s,e.width,e.height),0),updatedGolden:!0}:{match:a<=o,differingPixels:a,width:e.width,height:e.height,artifacts:d,updatedGolden:!1}}function Ha(e,t,n={}){let r=$a(e,t,n);if(!r.match){let i=new Error(`Visual assertion failed: ${r.differingPixels} differing pixels (${r.width}\xD7${r.height}). Review expected/actual/diff PNG buffers on the result.`);throw i.visual=r,i}return r}function $l(e,t,n={}){return Ha(Xi(e),Xi(t),n)}function Qi(e,t,n,r){let i=an(e.width,e.height,e.data),o=an(t.width,t.height,t.data),s=an(n.width,n.height,n.data);return{expectedPng:i,actualPng:o,diffPng:s,expectedDataUrl:dn(e.width,e.height,e.data),actualDataUrl:dn(t.width,t.height,t.data),diffDataUrl:dn(n.width,n.height,n.data),differingPixels:r}}function Hl(e,t){let n=Math.max(e.width,t.width),r=Math.max(e.height,t.height),i=new Uint8ClampedArray(n*r*4);for(let o=0;o<i.length;o+=4)i[o]=255,i[o+1]=0,i[o+2]=255,i[o+3]=255;return Qi(t,e,_t(i,n,r),n*r)}async function Bl(e,t,n={}){let{mkdir:r,writeFile:i}=await import("node:fs/promises"),{join:o}=await import("path");await r(e,{recursive:!0});let s=o(e,n.expected??"expected.png"),a=o(e,n.actual??"actual.png"),d=o(e,n.diff??"diff.png");return await i(s,t.expectedPng),await i(a,t.actualPng),await i(d,t.diffPng),{expectedPath:s,actualPath:a,diffPath:d}}var Ba="cyberart.state.save",qa="cyberart.state.load";var xr=1,Lt="cyberart.diagnostic.rejected",Zi=8,ql=new Set(["intent","state","diagnostic"]),Kl=new Set([Ba,qa]);function Tr(e){return typeof e=="string"&&ql.has(e)}function Gl(e){if(e.kind!==void 0)return Tr(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(Kl.has(e.type))return"intent";for(let t of e.type.split("."))if(Tr(t))return t}}function Wl(e,t){let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function Jt(e,t){for(let n of e)if(Wl(n,t))return!0;return!1}function jl(e){if(e===void 0)return{ok:!0,value:void 0};try{return{ok:!0,value:JSON.parse(JSON.stringify(e))}}catch{return{ok:!1}}}function eo(e,t){if(!e||typeof e.type!="string"||e.type.length===0)return{ok:!1,reason:"malformed",detail:"type is required"};if(e.schemaVersion!==void 0&&e.schemaVersion!==xr)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=Gl(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=jl(e.payload);if(!r.ok)return{ok:!1,reason:"malformed",detail:"payload is not JSON-serializable"};let i=t.createId(),o=typeof e.correlationId=="string"&&e.correlationId.length>0?e.correlationId:i,s=typeof e.causationId=="string"&&e.causationId.length>0?e.causationId:t.causationId,a=typeof e.target=="string"&&e.target.length>0?e.target:void 0,d=t.maxHops??Zi,m=t.parentHops===void 0?d:Math.max(0,t.parentHops-1),l=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,y={schemaVersion:xr,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:m};return a&&(y.target=a),s&&(y.causationId=s),l&&(y.idempotencyKey=l),r.value!==void 0&&(y.payload=r.value),{ok:!0,envelope:y}}var Ul=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),Jl=8,zl=8,Yl=16,Xl=256,Ql=256,Zl=["*.intent.*"];function Ka(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??Jl,i=e.maxCausationDepth??zl,o=e.maxHops??Zi,s=e.maxCorrelationPerTurn??Yl,a=e.maxIndex??Xl,d=e.maxDecisions??Ql,m=e.maxPerWindow,l=e.windowMs??1e3,y=e.now??Date.now,k=0,C=e.createId??(()=>`evt-${++k}`),T=new Map,v=[],x=[],$=new Map,j=new Map,D=new Map,V=[],A=0,p=0,E=0;function c(H){try{return JSON.parse(JSON.stringify(H))}catch{return H}}function f(H){for(V.push(H);V.length>d;)V.shift();for(let Y of x)try{Y(c(H))}catch{}}function h(H,Y){let re={outcome:Y.outcome,source:Y.source,type:H.type,kind:H.kind,envelopeId:H.id,deliveredTo:Y.deliveredTo,hops:H.hops,seq:H.seq,correlationId:H.correlationId,schemaVersion:H.schemaVersion,turn:E,time:y()};return Y.reason&&(re.reason=Y.reason),Y.detail&&(re.detail=Y.detail),Y.priorEnvelopeId&&(re.priorEnvelopeId=Y.priorEnvelopeId),H.target&&(re.target=H.target),H.causationId&&(re.causationId=H.causationId),H.idempotencyKey&&(re.idempotencyKey=H.idempotencyKey),H.payload!==void 0&&(re.payload=c(H.payload)),re}let R=[],M=!1;function P(H,Y,re){for(H.set(Y,re);H.size>a;){let X=H.keys().next().value;if(X===void 0)break;H.delete(X)}}function F(H){P($,H.id,{type:H.type,source:H.source,causationId:H.causationId,hops:H.hops,correlationId:H.correlationId,idempotencyKey:H.idempotencyKey})}function W(H,Y){Y&&(H.correlationId||(H.correlationId=Y.correlationId),H.causationId||(H.causationId=Y.id),!H.idempotencyKey&&Y.idempotencyKey&&(H.idempotencyKey=`${Y.idempotencyKey}::${H.type}`))}function O(H,Y){if(H){let re=$.get(H);return re?re.hops:o}return Y}function u(H,Y){return`${H}\0${Y}`}function b(H,Y){H.idempotencyKey&&P(D,u(H.source,H.idempotencyKey),Y)}function w(H,Y){if(Y)return D.get(u(H,Y))}function L(H){return w(H.source,H.idempotencyKey)}function _(H){return H.seq+=1,H.seq}function G(H,Y){if(!(typeof Y.causationId=="string"&&Y.causationId.length>0))return H.lastDelivered}function U(H){let Y=new Set,re=new Set([`${H.type}\0${H.source}`]),X=H.causationId,ee=0;for(;X;){if(ee+=1,ee>i||Y.has(X))return!0;Y.add(X);let fe=$.get(X);if(!fe)break;let je=`${fe.type}\0${fe.source}`;if(re.has(je))return!0;re.add(je),X=fe.causationId}return!1}function B(H){let Y=(j.get(H)??0)+1;return j.set(H,Y),Y}function g(H,Y){m!==void 0&&(H.emitTimestamps=H.emitTimestamps.filter(re=>Y-re<l))}function S(H,Y){return(Y.kind==="state"||Y.kind==="diagnostic")&&!H.authoritative?!1:Jt(H.emit,Y.type)}function I(H){for(let Y of v)if(Jt(Y.patterns,H.type))try{Y.listener(H)}catch{}}function N(H){let Y=[];if(H.target){let re=T.get(H.target);return!re||!Jt(re.subscribe,H.type)||(re.channel.dispatch(H),re.lastDelivered={id:H.id,hops:H.hops,correlationId:H.correlationId,idempotencyKey:H.idempotencyKey},Y.push(re.id)),Y}for(let re of T.values())Jt(re.subscribe,H.type)&&(re.channel.dispatch(H),re.lastDelivered={id:H.id,hops:H.hops,correlationId:H.correlationId,idempotencyKey:H.idempotencyKey},Y.push(re.id));return Y}function q(H,Y,re,X,ee,fe,je){let Be={reason:X,eventType:Y,source:re};ee&&(Be.detail=ee),p+=1;let ze=C(),vt={schemaVersion:xr,type:Lt,kind:"diagnostic",source:n,id:ze,correlationId:fe??ze,seq:p,hops:0,payload:Be};je&&(vt.causationId=je),F(vt);let Wt=T.get(H);Wt&&Wt.channel.dispatch(vt),I(vt)}function Z(H,Y,re,X,ee){if(q(H,ee?.type??(typeof Y.type=="string"?Y.type:""),ee?.source??H,re,X,ee?.correlationId,ee?.id),ee?.idempotencyKey&&!Ul.has(re)&&b(ee,{status:"rejected"}),ee)f(h(ee,{outcome:"rejected",reason:re,detail:X,source:H,deliveredTo:[]}));else{let fe={outcome:"rejected",reason:re,source:H,type:typeof Y.type=="string"?Y.type:"",deliveredTo:[],turn:E,time:y()};X&&(fe.detail=X),typeof Y.idempotencyKey=="string"&&(fe.idempotencyKey=Y.idempotencyKey),f(fe)}}function z(H,Y){F(H),b(H,{status:"accepted",envelope:H}),B(H.correlationId),I(H);let re=N(H);f(h(H,{outcome:"accepted",source:Y,deliveredTo:re}))}function ne(H,Y,re,X){let ee=X?.type??(typeof Y.type=="string"?Y.type:""),fe={outcome:"duplicate",reason:"duplicate",detail:re.status==="accepted"?"idempotent accepted":"idempotent rejected",source:H,type:ee,deliveredTo:[],turn:E,time:y()};X?(fe.kind=X.kind,fe.envelopeId=X.id,fe.hops=X.hops,fe.seq=X.seq,fe.correlationId=X.correlationId,fe.schemaVersion=X.schemaVersion,X.target&&(fe.target=X.target),X.causationId&&(fe.causationId=X.causationId),X.idempotencyKey&&(fe.idempotencyKey=X.idempotencyKey),X.payload!==void 0&&(fe.payload=c(X.payload))):typeof Y.idempotencyKey=="string"&&(fe.idempotencyKey=Y.idempotencyKey),re.status==="accepted"&&(fe.priorEnvelopeId=re.envelope.id,fe.envelopeId||(fe.envelopeId=re.envelope.id)),f(fe)}function Q(H,Y,re,X){if(!re.ok){Z(H,Y,"malformed",re.detail);return}let ee=re.envelope,fe=L(ee);if(fe)return ne(H,Y,fe,ee),fe.status==="accepted"?fe.envelope:void 0;if(ee.hops<1){Z(H,Y,"hop-limit","no hops remaining",ee);return}if(ee.target&&ee.target!==t){let je=T.get(ee.target);if(!je){Z(H,Y,"unknown-target",`unknown target "${ee.target}"`,ee);return}if(!Jt(je.subscribe,ee.type)){Z(H,Y,"not-subscribed",`target "${ee.target}" does not subscribe to ${ee.type}`,ee);return}}if(X){if(!S(X,ee)){Z(H,Y,"unauthorized","source may not emit this event",ee);return}if(X.emitsThisTurn+=1,X.emitsThisTurn>r){Z(H,Y,"rate-limited","maxPerTurn exceeded",ee);return}if(m!==void 0){let Be=y();if(g(X,Be),X.emitTimestamps.push(Be),X.emitTimestamps.length>m){Z(H,Y,"rate-limited","maxPerWindow exceeded",ee);return}}if(U(ee)){Z(H,Y,"loop-detected","causation chain cycle or depth exceeded",ee);return}if((j.get(ee.correlationId)??0)+1>s){Z(H,Y,"storm-detected","correlationId storm",ee);return}if(e.validate){let Be;try{Be=e.validate(ee)}catch(ze){let vt=ze instanceof Error?ze.message:"validate threw";Z(H,Y,"host-rejected",vt,ee);return}if(Be!==!0){Z(H,Y,"host-rejected",Be.detail,ee);return}}}else{if(U(ee)){Z(H,Y,"loop-detected","causation chain cycle or depth exceeded",ee);return}if((j.get(ee.correlationId)??0)+1>s){Z(H,Y,"storm-detected","correlationId storm",ee);return}}return z(ee,H),ee}function he(H,Y){let re=T.get(H);if(!re)return;let X={...Y},ee=G(re,X);W(X,ee);let fe=w(re.id,X.idempotencyKey);if(fe){ne(H,X,fe);return}let je=_(re),Be=eo(X,{source:re.id,createId:C,seq:je,causationId:ee?.id,maxHops:o,parentHops:O(X.causationId??ee?.id,ee?.hops)});Q(H,X,Be,re)}function ke(H,Y){let re=Y?.cause,X={...H};W(X,re);let ee=w(t,X.idempotencyKey);if(ee)return ne(t,X,ee),ee.status==="accepted"?ee.envelope:void 0;A+=1;let fe=eo(X,{source:t,createId:C,seq:A,causationId:X.causationId,maxHops:o,parentHops:O(X.causationId,re?.hops)});return Q(t,X,fe,void 0)}function Ce(){if(!M){M=!0;try{for(;R.length>0;){let H=R.shift();H&&(H.kind==="cart"?he(H.participantId,H.event):H.result=ke(H.event,H.extras))}}finally{M=!1}}}function Pe(H){R.push(H),Ce()}return{attach(H,Y,re={}){if(H===t||H===n)throw new Error(`createEventRouter: "${H}" is a reserved participant id`);for(let fe of T.values())if(fe.channel===Y&&fe.id!==H)throw new Error(`createEventRouter: channel already attached as "${fe.id}"`);T.get(H)?.unsubscribe();let ee={id:H,channel:Y,emit:re.emit??Zl,subscribe:re.subscribe??[],authoritative:re.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};ee.unsubscribe=Y.onEvent(fe=>{Pe({kind:"cart",participantId:H,event:fe})}),T.set(H,ee)},detach(H){let Y=T.get(H);Y&&(Y.unsubscribe(),T.delete(H))},publish(H,Y){let re={kind:"publish",event:H,extras:Y};return Pe(re),re.result},subscribe(H,Y){let re={patterns:H,listener:Y};return v.push(re),()=>{let X=v.indexOf(re);X>=0&&v.splice(X,1)}},subscribeDecision(H){return x.push(H),()=>{let Y=x.indexOf(H);Y>=0&&x.splice(Y,1)}},inspectParticipants(){return[...T.values()].map(H=>({id:H.id,emit:H.emit.slice(),subscribe:H.subscribe.slice(),authoritative:H.authoritative}))},inspectDecisions(){return V.map(H=>c(H))},turn(){E+=1,j.clear();for(let H of T.values())H.emitsThisTurn=0,H.lastDelivered=void 0,m!==void 0&&g(H,y())}}}var ep=320,tp=180,np=1024,rp="Runtime group has been destroyed";function ip(e){let t="";for(let n=0;n<32;n++){let r=e.charCodeAt(n%Math.max(e.length,1))+n*17&255;t+=r.toString(16).padStart(2,"0")}return`0x${t}`}function op(e,t){let n=document.createElement("div");return Object.defineProperty(n,"clientWidth",{value:e,configurable:!0}),Object.defineProperty(n,"clientHeight",{value:t,configurable:!0}),document.body.appendChild(n),n}function Wa(e){let t=e.capability,n={},r=e.emit??t?.emit,i=e.subscribe??t?.subscribe,o=e.authoritative??t?.authoritative;return r&&(n.emit=r),i&&(n.subscribe=i),o!==void 0&&(n.authoritative=o),n}function Ga(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function sp(e){let t=new Set([Lt,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=Wa(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function Dr(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let p of e.participants){if(!p.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(p.id))throw new Error(`createRuntimeGroup: duplicate participant id "${p.id}"`);t.add(p.id)}let n=e.origin??0,r=e.width??ep,i=e.height??tp,o=e.maxTrace??np,s=[...e.participants].sort((p,E)=>p.id.localeCompare(E.id)),a=[],d=new Map,m=0,l=e.createId??e.router?.createId??(()=>`evt-${++m}`),y=e.now??e.router?.now??(()=>{let p=a[0];if(!p)return n;try{return p.cart.getClock().now}catch{return n}}),k=Ka({...e.router,createId:l,now:y,validate:e.validate??e.router?.validate}),C=[],T=!1,v=!1,x=()=>{},$=p=>E=>{p.events.push(E),p.userOnEvent?.(E)},j=()=>{if(v)throw new Error(rp)},D=()=>{x();for(let p of a){try{k.detach(p.id)}catch{}try{p.runtime.destroy()}catch{}p.ownsContainer&&p.container.remove()}a.length=0,d.clear()};try{for(let p of s){let E=p.width??r,c=p.height??i,f=!p.container,h=p.container??op(E,c),R=wr({container:h,seed:p.seed??ip(p.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?p.id:void 0,kind:p.kind??"render"}),M={id:p.id,kind:p.kind??"render",cartDef:p.cart,initialState:p.initialState,gameManager:p.gameManager,userOnEvent:p.onEvent,runtime:R,container:h,ownsContainer:f,cart:void 0,events:[],errors:[],suspended:!1};R.onError=(P,F)=>{M.errors.push({error:P,info:F})},k.attach(p.id,R.hostChannel,Wa(p)),M.cart=R.mount(p.cart,{initialState:p.initialState,gameManager:p.gameManager,onEvent:$(M)}),a.push(M),d.set(M.id,M)}x=k.subscribe(sp(s),p=>{for(C.push(Ga(p));C.length>o;)C.shift()})}catch(p){throw D(),p}let V=p=>({id:p.id,kind:p.kind,runtime:p.runtime,container:p.container,get events(){return p.events.slice()},get errors(){return p.errors.slice()},get cart(){return p.cart}});return{router:k,origin:n,get paused(){return T},get audioBroker(){return e.audioBroker},participant(p){j();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);return V(E)},async step(p=1){if(j(),T)return;let E=Math.max(0,Math.floor(p));for(let c=0;c<E;c++){k.turn();for(let f of a)if(!f.suspended)try{await f.cart.step(1)}catch(h){f.errors.push({error:h,info:{phase:"update",consecutive:f.errors.length+1,stopped:!1}})}}},pause(){j(),T=!0;for(let p of a)p.cart.pause()},resume(){j(),T=!1;for(let p of a)p.cart.resume()},reset(){j(),C.length=0;for(let p of a)p.events.length=0,p.errors.length=0,p.suspended=!1,p.cart=p.runtime.mount(p.cartDef,{initialState:p.initialState,gameManager:p.gameManager,onEvent:$(p)});k.turn()},resize(p,E){j();let c=Math.max(1,p|0),f=Math.max(1,E|0);for(let h of a){Object.defineProperty(h.container,"clientWidth",{value:c,configurable:!0}),Object.defineProperty(h.container,"clientHeight",{value:f,configurable:!0});let R=h.cart.canvas;R&&(R.width=c,R.height=f)}},detach(p){j();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);try{k.detach(E.id)}catch{}try{E.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(E.id),E.ownsContainer&&E.container.remove();let c=a.indexOf(E);c>=0&&a.splice(c,1),d.delete(p)},suspendParticipant(p){j();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);E.suspended=!0,E.cart.pause()},resumeParticipant(p){j();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);E.suspended=!1,T||E.cart.resume()},isParticipantSuspended(p){j();let E=d.get(p);if(!E)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);return E.suspended},dispatch(p,E){j();let c=d.get(p);if(!c)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);c.cart.dispatch(E)},publish(p,E){return j(),k.publish(p,E)},inspectParticipants(){j();let p=new Map(a.map(E=>[E.id,E.kind]));return k.inspectParticipants().map(E=>({...E,kind:p.get(E.id)??"render"}))},async inspect(){j();let p={},E={},c=new Map(k.inspectParticipants().map(R=>[R.id,R]));for(let R of a){let M=await R.cart.getReplayMetadata(),P=R.cart.getClock();E[R.id]=P;let F=c.get(R.id);p[R.id]={state:M.state,events:R.events.slice(),errors:R.errors.slice(),kind:R.kind,clock:P,emit:F?.emit.slice()??[],subscribe:F?.subscribe.slice()??[],authoritative:F?.authoritative===!0,suspended:R.suspended}}let f=C.map(R=>Ga(R)),h=a.filter(R=>R.suspended).map(R=>R.id).sort();return{participants:p,trace:f,diagnostics:{paused:T,participantIds:a.map(R=>R.id),suspendedIds:h,clocks:E,rejections:f.filter(R=>R.type===Lt).map(R=>R.payload)}}},destroy(){if(!v){v=!0,T=!1;try{D()}finally{C.length=0}}}}}function ap(e){return Pr(),Dr(e)}var to=1,no=512,It="[REDACTED]",zt=["prompt","credentials","credential","authorization","apiKey","secret"],dp=new Set([et,Xe]);function tt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Or(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Or(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?It:Or(o,t);return r}function cp(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function up(e,t){return t?!(t.types&&!t.types.includes(e.type)||t.sources&&!t.sources.includes(e.source)||t.outcomes&&!t.outcomes.includes(e.outcome)||t.correlationId&&e.correlationId!==t.correlationId):!0}function ja(e){return JSON.stringify({outcome:e.outcome,reason:e.reason,source:e.source,target:e.target,type:e.type,kind:e.kind,envelopeId:e.envelopeId,priorEnvelopeId:e.priorEnvelopeId,correlationId:e.correlationId,causationId:e.causationId,hops:e.hops,seq:e.seq,idempotencyKey:e.idempotencyKey,deliveredTo:e.deliveredTo,payload:e.payload})}function ro(e,t){if(e.length!==t.length)return{ok:!1,detail:`record count ${t.length} !== ${e.length}`};for(let n=0;n<e.length;n++){let r=ja(e[n]),i=ja(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function Ua(e){let t=new Map,n=[];for(let o of e){if(o.outcome==="duplicate"){n.push(void 0);continue}let s={envelopeId:o.envelopeId,type:o.type,source:o.source,outcome:o.outcome,children:[]};o.reason&&(s.reason=o.reason),n.push(s),o.envelopeId&&!t.has(o.envelopeId)&&t.set(o.envelopeId,s)}let r=new Set;for(let o=0;o<e.length;o++){let s=e[o],a=n[o];if(!a)continue;let d=s.causationId?t.get(s.causationId):void 0;d&&d!==a&&(d.children.push(a),r.add(a))}let i=[];for(let o of n)o&&!r.has(o)&&i.push(o);return i}function Ja(e,t){let n={id:e.id,emit:e.emit.slice(),subscribe:e.subscribe.slice(),authoritative:e.authoritative,errorCount:0};return t&&(n.kind=t),n}function lp(e,t,n){let r=t.errors[t.errors.length-1],i={id:e,kind:t.kind,emit:t.emit.slice(),subscribe:t.subscribe.slice(),authoritative:t.authoritative,clock:tt(t.clock),state:Or(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=cp(r.error)),i}function Mr(e={}){let t=new Set([...zt,...e.redactedKeys??[]]),n=e.maxRecords??no,r=e.registry,i=0,o=0,s=!1,a=[],d=[],m,l=[],y=0,k=[],C={},T=()=>{},v=()=>{if(s)throw new Error("Replay inspector has been destroyed")},x=V=>{let A=r?.get(V.type),p={index:o,turn:V.turn,time:V.time,outcome:V.outcome,source:V.source,type:V.type,deliveredTo:V.deliveredTo.slice(),payload:Or(V.payload,t)};for(o+=1,V.reason&&(p.reason=V.reason),V.detail&&(p.detail=V.detail),V.target&&(p.target=V.target),V.kind&&(p.kind=V.kind),V.envelopeId&&(p.envelopeId=V.envelopeId),V.priorEnvelopeId&&(p.priorEnvelopeId=V.priorEnvelopeId),V.correlationId&&(p.correlationId=V.correlationId),V.causationId&&(p.causationId=V.causationId),V.hops!==void 0&&(p.hops=V.hops),V.seq!==void 0&&(p.seq=V.seq),V.idempotencyKey&&(p.idempotencyKey=V.idempotencyKey),V.schemaVersion!==void 0&&(p.schemaVersion=V.schemaVersion),A&&(p.payloadSchemaVersion=A.payloadSchema.version),a.push(p);a.length>n;)a.shift(),i+=1},$=V=>a.filter(A=>up(A,V)).map(A=>tt(A)),j=V=>V?V.inspectParticipants().map(A=>Ja(A,A.kind)):k.map(A=>tt(A)),D={watchRouter(V){if(v(),T(),k=V.inspectParticipants().map(p=>Ja(p)),a.length===0)for(let p of V.inspectDecisions())x(p);let A=V.subscribeDecision(p=>x(p));return T=()=>{A(),T=()=>{}},d.push(T),T},bind(V){v(),m&&T(),m=V,y=V.origin,D.watchRouter(V.router),k=j(V);let A={publish(p,E){v();let c={kind:"publish",event:tt(p)};return E?.cause&&(c.extras={cause:tt(E.cause)}),l.push(c),V.publish(p,E)},dispatch(p,E){v();let c=tt(E);typeof c.type=="string"&&dp.has(c.type)?l.push({kind:"asset",participantId:p,event:c}):l.push({kind:"dispatch",participantId:p,event:c}),V.dispatch(p,E)},async step(p=1){v(),l.push({kind:"step",frames:p}),await V.step(p)},async report(){v();let p=await V.inspect(),E=[];for(let c of Object.keys(p.participants).sort())E.push(lp(c,p.participants[c],t));k=E,C={};for(let c of E)C[c.id]=tt(c.state);return D.report()},async exportTrace(p){return await A.report(),D.exportTrace(p)},unbind(){T(),m=void 0}};return A},importTrace(V){v();let A=typeof V=="string"?JSON.parse(V):V;if(A.schemaVersion!==to)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,a.length=0,l=tt(A.tape??[]),y=A.origin??0,k=tt(A.participants??[]),C=tt(A.snapshots??{});for(let p of A.records??[])x({outcome:p.outcome,reason:p.reason,detail:p.detail,source:p.source,type:p.type,kind:p.kind,envelopeId:p.envelopeId,priorEnvelopeId:p.priorEnvelopeId,target:p.target,deliveredTo:p.deliveredTo,hops:p.hops,seq:p.seq,correlationId:p.correlationId,causationId:p.causationId,idempotencyKey:p.idempotencyKey,schemaVersion:p.schemaVersion,payload:p.payload,turn:p.turn,time:p.time})},exportTrace(V){return v(),{schemaVersion:to,origin:y,redactedKeys:[...t],participants:tt(k),tape:tt(l),records:$(V),snapshots:tt(C)}},report(V){v();let A=$(V);return{schemaVersion:to,participants:tt(k),records:A,trees:Ua(A),dropped:i}},causationTree(V){v();let A=$(V?{correlationId:V}:void 0);return Ua(A)},records(){return v(),a.map(V=>tt(V))},reset(){v(),a.length=0,l=[],i=0,o=0,C={},m&&(k=j(m))},destroy(){if(!s){for(s=!0,T();d.length>0;)d.pop()?.();a.length=0,l=[],k=[],C={},m=void 0}}};return D}async function io(e,t,n={}){let r=Mr({redactedKeys:n.redactedKeys??e.redactedKeys,maxRecords:n.maxRecords,registry:n.registry}),i=r.bind(t);try{for(let s of e.tape)s.kind==="publish"?i.publish(s.event,s.extras):s.kind==="dispatch"||s.kind==="asset"?i.dispatch(s.participantId,s.event):await i.step(s.frames);let o=await i.report();return{inspector:r,report:o}}catch(o){throw r.destroy(),o}}var Nr=1,Ya=no,oo=["binding-conflict","asset-failure","revision-rollback","sequence-interruption","text-only-fallback"],Xa=["state-projection","binding","content-revision","staging","asset","sequence","presentation","snapshot"],Qa=[...zt,"privatePrompt","signedUrl","signedURL","signed_url","presignedUrl","password"],pp=new Set(oo),fp=new Set(Xa),mp=new Set(["signedUrl","signedURL","signed_url","presignedUrl","presignedURL"]),gp=/[?&](X-Amz-Signature|X-Amz-Credential|X-Amz-Security-Token|X-Goog-Signature|Signature|sig)=/i,hp=/https?:\/\/[^\s"'<>)\]]+/gi,yp="Selection trace has been destroyed",bp=new Set(oo);function vp(e){return typeof e=="string"&&pp.has(e)}function Sp(e){return typeof e=="string"&&fp.has(e)}function nt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function za(e){return/^https?:\/\//i.test(e)?gp.test(e):!1}function Za(e){return za(e)?It:e.replace(hp,t=>za(t)?It:t)}function Rt(e,t){if(e==null)return e;if(typeof e=="string")return Za(e);if(Array.isArray(e))return e.map(i=>Rt(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))t.has(i)||mp.has(i)?r[i]=It:r[i]=Rt(o,t);return r}function ed(e,t,n){if(e==null)return e;if(Array.isArray(e))return e.map(o=>ed(o,t,n));if(typeof e!="object")return It;let r=e,i={};for(let[o,s]of Object.entries(r))t.has(o)?i[o]=Rt(s,n):i[o]=It;return i}function kp(e,t){return t?!(t.kinds&&!t.kinds.includes(e.kind)||t.reasons&&!t.reasons.includes(e.reason)||t.correlationId&&e.correlationId!==t.correlationId||t.causationId&&e.causationId!==t.causationId||t.envelopeId&&e.envelopeId!==t.envelopeId||t.contentId&&![e.requestedContent?.contentId,e.activatedContent?.contentId].includes(t.contentId)||t.sequenceId&&e.sequence?.sequenceId!==t.sequenceId):!0}function Ep(e,t,n){return bp.has(e)||n>=1?!0:n<=0?!1:(t*2654435761>>>0)/4294967296<n}function Ip(e,t){if(!e)return[];let n=new Set;for(let r of t)r.correlationId&&n.add(r.correlationId),r.causationId&&n.add(r.causationId),r.envelopeId&&n.add(r.envelopeId);return n.size===0?[]:e.records().filter(r=>r.correlationId!==void 0&&n.has(r.correlationId)||r.causationId!==void 0&&n.has(r.causationId)||r.envelopeId!==void 0&&n.has(r.envelopeId))}function Rp(e,t){return e.recordSelectionDecision(t)}function Cp(e,t){return{...nt(e),selectionTrace:t}}function Ap(e={}){let t=new Set([...Qa,...e.redactedKeys??[]]),n=new Set(e.projectionWhitelist??[]),r=e.maxRecords??Ya,i=e.sampleRate??1,o=e.inspector,s=0,a=0,d=0,m=!1,l=[],y=[],k={},C=()=>{if(m)throw new Error(yp)},T=D=>l.filter(V=>kp(V,D)).map(V=>nt(V)),v=D=>ed(D,n,t),x=(D,V)=>{let A={index:V,kind:D.kind,reason:D.reason,summary:Za(String(D.summary))};return D.turn!==void 0&&(A.turn=D.turn),D.time!==void 0&&(A.time=D.time),D.correlationId&&(A.correlationId=D.correlationId),D.causationId&&(A.causationId=D.causationId),D.envelopeId&&(A.envelopeId=D.envelopeId),D.initiatingEventType&&(A.initiatingEventType=D.initiatingEventType),D.projectionRevision!==void 0&&(A.projectionRevision=D.projectionRevision),D.projection!==void 0?A.projection=v(D.projection):D.hostState!==void 0&&(A.projection=v(D.hostState)),D.bindings&&(A.bindings=Rt(nt(D.bindings.slice()),t)),D.winningBindingId!==void 0&&(A.winningBindingId=D.winningBindingId),D.rejectedBindingIds&&(A.rejectedBindingIds=D.rejectedBindingIds.slice()),D.defaultFallback!==void 0&&(A.defaultFallback=D.defaultFallback),D.requestedContent&&(A.requestedContent=Rt(nt(D.requestedContent),t)),D.activatedContent!==void 0&&(A.activatedContent=D.activatedContent?Rt(nt(D.activatedContent),t):null),D.staging&&(A.staging=Rt(nt(D.staging),t)),D.lastKnownGood!==void 0&&(A.lastKnownGood=D.lastKnownGood?Rt(nt(D.lastKnownGood),t):null),D.asset&&(A.asset=Rt(nt(D.asset),t)),D.sequence&&(A.sequence=Rt(nt(D.sequence),t)),D.presentation&&(A.presentation=Rt(nt(D.presentation),t)),D.snapshot&&(A.snapshot=nt(D.snapshot)),A},$=D=>{for(l.push(D);l.length>r;)l.shift(),s+=1};return{recordSelectionDecision(D){C();let V=d;if(d+=1,!Ep(D.reason,V,i))return a+=1,null;let A=x(D,V);return $(A),nt(A)},records(D){return C(),T(D)},query(D){return C(),T(D)},chain(D){return C(),T({correlationId:D})},exportTrace(D){C();let V=T(D),A=y.length>0?y.filter(E=>D?.correlationId?E.correlationId===D.correlationId:!0):Ip(o,V),p={schemaVersion:Nr,redactedKeys:[...t],projectionWhitelist:[...n],dropped:s,sampledOut:a,records:V,inspectorRecords:nt(A)};return k.revision!==void 0&&(p.snapshotRevision=k.revision),k.schemaVersion!==void 0&&(p.snapshotSchemaVersion=k.schemaVersion),k.seed&&(p.snapshotSeed=k.seed),p},importTrace(D){C();let V=typeof D=="string"?JSON.parse(D):D;if(V.schemaVersion!==Nr)throw new Error("Selection trace: unsupported export schemaVersion");s=V.dropped??0,a=V.sampledOut??0,d=0,l.length=0,y=nt(V.inspectorRecords??[]),k={},V.snapshotRevision!==void 0&&(k.revision=V.snapshotRevision),V.snapshotSchemaVersion!==void 0&&(k.schemaVersion=V.snapshotSchemaVersion),V.snapshotSeed&&(k.seed=V.snapshotSeed);for(let A of V.records??[]){let p=typeof A.index=="number"?A.index:d;d=Math.max(d,p+1),$(nt(A))}},report(D){return C(),{schemaVersion:Nr,records:T(D),dropped:s,sampledOut:a}},setSnapshotProvenance(D){C(),k={...k,...D}},reset(){C(),l.length=0,y=[],s=0,a=0,d=0,k={}},destroy(){m||(m=!0,l.length=0,y=[],k={})}}}var bn="cue.started",qn="cue.completed",vn="cue.cancelled",Yt="cue.replaced";function wp(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function td(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function _r(e){return{name:e.name,idempotencyKey:e.idempotencyKey,phase:e.phase,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,progress:e.progress,repeatIndex:e.repeatIndex}}function so(e){return e.startFrame+e.delayFrames}function Pp(e,t){if(!e||typeof e!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof e.name!="string"||e.name.length===0)return{ok:!1,reason:"invalid",detail:"name is required"};if(typeof e.idempotencyKey!="string"||e.idempotencyKey.length===0)return{ok:!1,reason:"invalid",detail:"idempotencyKey is required"};if(typeof e.durationFrames!="number"||!Number.isFinite(e.durationFrames)||e.durationFrames<0)return{ok:!1,reason:"invalid",detail:"durationFrames must be a non-negative finite number"};let n=e.startFrame===void 0?t:e.startFrame;if(typeof n!="number"||!Number.isFinite(n))return{ok:!1,reason:"invalid",detail:"startFrame must be finite"};let r=e.delayFrames??0;if(typeof r!="number"||!Number.isFinite(r)||r<0)return{ok:!1,reason:"invalid",detail:"delayFrames must be a non-negative finite number"};let i=e.easing??"linear";if(i!=="linear"&&i!=="ease-out")return{ok:!1,reason:"invalid",detail:"unsupported easing"};let o=e.onDuplicate??"replace";if(o!=="ignore"&&o!=="replace"&&o!=="reject")return{ok:!1,reason:"invalid",detail:"unsupported onDuplicate"};let s=0;if(e.repeat)if("forever"in e.repeat&&e.repeat.forever)s="forever";else if("count"in e.repeat){if(typeof e.repeat.count!="number"||!Number.isFinite(e.repeat.count)||e.repeat.count<0)return{ok:!1,reason:"invalid",detail:"repeat.count must be >= 0"};s=Math.floor(e.repeat.count)}else return{ok:!1,reason:"invalid",detail:"unsupported repeat"};let a=e.reducedMotion??"complete";return a!=="skip"&&a!=="complete"&&(typeof a!="object"||typeof a.durationFrames!="number"||!Number.isFinite(a.durationFrames)||a.durationFrames<0)?{ok:!1,reason:"invalid",detail:"unsupported reducedMotion"}:{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:n,durationFrames:e.durationFrames,delayFrames:r,easing:i,repeatRemaining:s,repeatIndex:0,reducedMotion:a,onDuplicate:o,phase:"scheduled",progress:0}}function xp(e,t){if(!t)return e;let n=e.reducedMotion;return n==="skip"||n==="complete"?{...e,durationFrames:0,delayFrames:0,startFrame:e.startFrame}:{...e,durationFrames:n.durationFrames}}function Vt(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(v){i.push(v)}function s(v,x){let $=so(v)-so(x);return $!==0?$:v.name<x.name?-1:v.name>x.name?1:v.idempotencyKey<x.idempotencyKey?-1:v.idempotencyKey>x.idempotencyKey?1:0}function a(v,x){o({type:x,atFrame:n,name:v.name,idempotencyKey:v.idempotencyKey,progress:v.progress})}function d(v){if(v.phase="completed",v.progress=1,a(v,qn),v.repeatRemaining==="forever"||v.repeatRemaining>0){if(typeof v.repeatRemaining=="number"&&(v.repeatRemaining-=1),v.repeatIndex+=1,v.phase="scheduled",v.progress=0,v.startFrame=n,v.delayFrames=0,v.durationFrames===0){r.delete(v.idempotencyKey);return}v.phase="active",a(v,bn)}else r.delete(v.idempotencyKey)}function m(v){if(v.phase==="cancelled"||v.phase==="completed")return;let x=so(v);if(!(n<x)){if(v.phase==="scheduled"&&(v.phase="active",v.progress=v.durationFrames===0?1:0,a(v,bn),v.durationFrames===0)){d(v);return}if(v.phase==="active"){let $=n-x;$>=v.durationFrames?(v.progress=1,d(v)):v.progress=wp(v.durationFrames===0?1:$/v.durationFrames,v.easing)}}}function l(){let v=[...r.values()].sort(s);for(let x of v)m(x)}function y(v){let x=Pp(v,n);if("ok"in x&&x.ok===!1)return x;let $=xp(x,t),j=r.get($.idempotencyKey);if(j&&(j.phase==="scheduled"||j.phase==="active")){if(j.onDuplicate==="reject"||$.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${$.idempotencyKey} is already ${j.phase}`};if(j.onDuplicate==="ignore"||$.onDuplicate==="ignore")return{ok:!0,cue:_r(j)};j.phase="cancelled",j.progress=j.progress,a(j,Yt),r.delete(j.idempotencyKey)}r.set($.idempotencyKey,$),m($);let D=r.get($.idempotencyKey)??$;return{ok:!0,cue:_r(D)}}function k(v){let x=r.get(v);return!x||x.phase==="completed"||x.phase==="cancelled"?!1:(x.phase="cancelled",a(x,vn),r.delete(v),!0)}function C(){for(let v of[...r.values()].sort(s))(v.phase==="scheduled"||v.phase==="active")&&(v.phase="cancelled",a(v,vn));r.clear(),i.length=0,n=e.originFrame??0}function T(v=1){let x=Number.isFinite(v)?Math.max(0,Math.floor(v)):0,$=i.length;for(let j=0;j<x;j++)n+=1,l();return i.slice($).map(td)}return{play:y,step:T,cancel:k,reset:C,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(s).map(_r),events:i.map(td)}},get(v){let x=r.get(v);return x?_r(x):void 0},setReducedMotion(v){t=!!v},get frame(){return n},get reducedMotion(){return t}}}var rd="audio.cue.scheduled",ao="audio.cue.started",id="audio.cue.skipped",Kn="audio.cue.failed";var Fr=1,Tp=["scheduled","active","completed","cancelled"],Dp=["linear","ease-out"],Op=["locked","unlocking","unlocked","failed"],Mp=["scheduled","started","skipped"];function Np(e){return e===rd||e===ao||e===id||e===Kn}function Sn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Mt(e){return typeof e=="string"&&e.length>0}function Ot(e){return typeof e=="number"&&Number.isFinite(e)}function _p(e){return e==="scheduled"||e==="started"||e==="skipped"||e==="failed"||e==="completed"}function nd(e){return e==="reduced-sensory"||e==="muted"||e==="unauthorized"||e==="asset-failed"||e==="torn-down"||e==="invalid"}function be(e,t,n){let r={code:e,detail:t};return n&&(r.path=n),r}function Gn(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[be("invalid-json","snapshot JSON is invalid")]}}if(!Sn(t))return{ok:!1,errors:[be("invalid-snapshot","snapshot must be a JSON object")]};let n=[];t.schemaVersion!==Fr&&n.push(be("unsupported-schema",`unsupported audio cue snapshot schemaVersion ${String(t.schemaVersion)}`,"schemaVersion")),Ot(t.frame)||n.push(be("invalid-snapshot","frame must be finite","frame")),typeof t.reducedSensory!="boolean"&&n.push(be("invalid-snapshot","reducedSensory must be a boolean","reducedSensory")),t.muted!==void 0&&typeof t.muted!="boolean"&&n.push(be("invalid-snapshot","muted must be a boolean","muted")),t.unlock!==void 0&&(!Sn(t.unlock)||!Op.includes(t.unlock.state)?n.push(be("invalid-snapshot","unlock.state must be locked, unlocking, unlocked, or failed","unlock")):t.unlock.error!==void 0&&typeof t.unlock.error!="string"&&n.push(be("invalid-snapshot","unlock.error must be a string","unlock.error"))),Array.isArray(t.cues)||n.push(be("invalid-snapshot","cues must be an array","cues")),Array.isArray(t.events)||n.push(be("invalid-snapshot","events must be an array","events"));let r=new Set,i=[];Array.isArray(t.cues)&&t.cues.forEach((a,d)=>{let m=`cues[${d}]`,l=Lp(a,m,n);if(l){if(r.has(l.idempotencyKey)){n.push(be("unknown-cue",`duplicate cue idempotencyKey "${l.idempotencyKey}"`,m));return}r.add(l.idempotencyKey),i.push(l)}});let o=[];return Array.isArray(t.events)&&t.events.forEach((a,d)=>{let m=`events[${d}]`,l=$p(a,m,n);l&&o.push(l)}),n.length>0?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:Fr,frame:t.frame,reducedSensory:t.reducedSensory,cues:i,events:o}}}function Lp(e,t,n){if(!Sn(e)){n.push(be("invalid-snapshot","cue must be an object",t));return}if(!Mt(e.idempotencyKey)){n.push(be("unknown-cue","cue idempotencyKey is required",`${t}.idempotencyKey`));return}if(!Mt(e.name)){n.push(be("invalid-snapshot","cue name is required",`${t}.name`));return}if(!Mt(e.assetId)){n.push(be("invalid-snapshot","cue assetId is required",`${t}.assetId`));return}if(!Mt(e.channelId)){n.push(be("invalid-snapshot","cue channelId is required",`${t}.channelId`));return}if(!_p(e.audioPhase)){n.push(be("invalid-snapshot","cue audioPhase is invalid",`${t}.audioPhase`));return}if(e.audioPhase==="completed"||e.audioPhase==="failed"){n.push(be("invalid-snapshot","completed and failed cues belong in the event log, not the live cues array",`${t}.audioPhase`));return}if(!Tp.includes(e.phase)){n.push(be("invalid-snapshot","cue phase is invalid",`${t}.phase`));return}if(!Dp.includes(e.easing)){n.push(be("invalid-snapshot","cue easing is invalid",`${t}.easing`));return}if(!Ot(e.startFrame)){n.push(be("invalid-snapshot","cue startFrame must be finite",`${t}.startFrame`));return}if(!Ot(e.durationFrames)||e.durationFrames<0){n.push(be("invalid-snapshot","cue durationFrames must be a non-negative finite number",`${t}.durationFrames`));return}if(!Ot(e.delayFrames)||e.delayFrames<0){n.push(be("invalid-snapshot","cue delayFrames must be a non-negative finite number",`${t}.delayFrames`));return}if(!Ot(e.progress)){n.push(be("invalid-snapshot","cue progress must be finite",`${t}.progress`));return}if(!Ot(e.repeatIndex)){n.push(be("invalid-snapshot","cue repeatIndex must be finite",`${t}.repeatIndex`));return}if(!Ot(e.priority)){n.push(be("invalid-snapshot","cue priority must be finite",`${t}.priority`));return}if(e.participantId!==void 0&&!Mt(e.participantId)){n.push(be("invalid-snapshot","cue participantId must be a non-empty string",`${t}.participantId`));return}let r=Vp(e.repeat,`${t}.repeat`,n);if(e.repeat!==void 0&&r===void 0)return;let i={name:e.name,idempotencyKey:e.idempotencyKey,phase:e.phase,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,progress:e.progress,repeatIndex:e.repeatIndex,assetId:e.assetId,channelId:e.channelId,priority:e.priority,audioPhase:e.audioPhase};return typeof e.participantId=="string"&&(i.participantId=e.participantId),r&&(i.repeat=r),i}function Vp(e,t,n){if(e!==void 0){if(!Sn(e)){n.push(be("invalid-snapshot","repeat must be an object",t));return}if(e.forever===!0)return{forever:!0};if("count"in e){if(!Ot(e.count)||e.count<0){n.push(be("invalid-snapshot","repeat.count must be a non-negative finite number",t));return}return{count:e.count}}n.push(be("invalid-snapshot","repeat must be { count } or { forever: true }",t))}}function Fp(e){if(e.repeat){if("forever"in e.repeat&&e.repeat.forever)return{forever:!0};if("count"in e.repeat)return{count:Math.max(0,Math.floor(e.repeat.count)-Math.floor(e.repeatIndex))}}}function $p(e,t,n){if(!Sn(e)){n.push(be("invalid-snapshot","event must be an object",t));return}if(!Np(e.type)){n.push(be("invalid-snapshot","event type is unknown",`${t}.type`));return}if(!Mt(e.idempotencyKey)){n.push(be("unknown-cue","event idempotencyKey is required",`${t}.idempotencyKey`));return}if(!Mt(e.name)){n.push(be("invalid-snapshot","event name is required",`${t}.name`));return}if(!Mt(e.assetId)){n.push(be("invalid-snapshot","event assetId is required",`${t}.assetId`));return}if(!Mt(e.channelId)){n.push(be("invalid-snapshot","event channelId is required",`${t}.channelId`));return}if(!Ot(e.atFrame)){n.push(be("invalid-snapshot","event atFrame must be finite",`${t}.atFrame`));return}if(!Ot(e.progress)){n.push(be("invalid-snapshot","event progress must be finite",`${t}.progress`));return}if(e.participantId!==void 0&&!Mt(e.participantId)){n.push(be("invalid-snapshot","event participantId must be a non-empty string",`${t}.participantId`));return}if(e.reason!==void 0&&!nd(e.reason)){n.push(be("invalid-snapshot","event reason is unknown",`${t}.reason`));return}let r={type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,assetId:e.assetId,channelId:e.channelId,progress:e.progress};return typeof e.participantId=="string"&&(r.participantId=e.participantId),nd(e.reason)&&(r.reason=e.reason),r}function Lr(e){let t={type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,assetId:e.assetId,channelId:e.channelId,progress:e.progress};return e.participantId!==void 0&&(t.participantId=e.participantId),e.reason!==void 0&&(t.reason=e.reason),t}function Hp(e){return{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,repeat:e.repeat,reducedMotion:e.reducedMotion,onDuplicate:e.onDuplicate}}function Vr(e,t,n){let r={name:e.name,idempotencyKey:e.idempotencyKey,phase:t?.phase??(e.audioPhase==="started"?"active":"scheduled"),startFrame:t?.startFrame??n,durationFrames:t?.durationFrames??0,delayFrames:t?.delayFrames??0,easing:t?.easing??"linear",progress:t?.progress??0,repeatIndex:t?.repeatIndex??0,assetId:e.assetId,channelId:e.channelId,participantId:e.participantId,priority:e.priority,audioPhase:e.audioPhase};return e.repeat&&(r.repeat=e.repeat),r}function Bp(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=Vt({originFrame:e.originFrame}),i=new Map,o=[],s=new Set,a=0;function d(p){o.push(p)}function m(p,E,c){let f=r.get(E.idempotencyKey);return Lr({type:p,atFrame:r.frame,name:E.name,idempotencyKey:E.idempotencyKey,assetId:E.assetId,channelId:E.channelId,participantId:E.participantId,reason:c?.reason,progress:c?.progress??f?.progress??0})}function l(p,E){s.delete(p.idempotencyKey),t?.noteCueEnded(p.idempotencyKey),p.audioPhase="failed",d(m(Kn,p,{reason:E})),r.cancel(p.idempotencyKey),i.delete(p.idempotencyKey)}function y(p,E){s.delete(p.idempotencyKey),p.audioPhase="skipped",d(m(id,p,{reason:E}))}function k(p){s.delete(p.idempotencyKey),p.audioPhase="started",t?.noteCueStarted({idempotencyKey:p.idempotencyKey,channelId:p.channelId,participantId:p.participantId,priority:p.priority}),d(m(ao,p))}function C(p){if(p.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(p.participantId)){y(p,"unauthorized"),r.cancel(p.idempotencyKey),i.delete(p.idempotencyKey);return}if(n||t?.reducedSensory){y(p,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(p.channelId)===0){y(p,"muted");return}let E=t?.assetStatus(p.assetId);if(!t){k(p);return}if(E==="failed"){l(p,"asset-failed");return}if(E==="ready"){k(p);return}s.add(p.idempotencyKey)}function T(p,E){for(let c of[...s]){let f=i.get(c);if(!f){s.delete(c);continue}if(!(p&&f.assetId!==p)){if(E==="failed"||t?.assetStatus(f.assetId)==="failed"){l(f,"asset-failed");continue}(E==="ready"||t?.assetStatus(f.assetId)==="ready")&&C(f)}}}function v(p){for(let E of[...i.values()])E.participantId===p&&(E.audioPhase==="scheduled"||E.audioPhase==="started")&&l(E,"torn-down")}function x(p){for(let E of p){let c=i.get(E.idempotencyKey);if(c)if(E.type===bn)C(c);else if(E.type===qn){if(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),r.get(c.idempotencyKey)){c.audioPhase="scheduled";continue}c.audioPhase==="scheduled"?l(c,"asset-failed"):(c.audioPhase==="started"&&(c.audioPhase="completed"),i.delete(c.idempotencyKey))}else E.type===vn?(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),(c.audioPhase==="scheduled"||c.audioPhase==="started")&&(c.audioPhase="failed"),i.delete(c.idempotencyKey)):E.type===Yt&&(s.delete(c.idempotencyKey),t?.noteCueEnded(c.idempotencyKey),i.delete(c.idempotencyKey))}}function $(){let p=o.slice(a).map(Lr);return a=o.length,p}let j=t?.onNotice(p=>{if(p.type==="asset"){if(p.status==="failed"){for(let E of[...i.values()])E.assetId===p.id&&(E.audioPhase==="scheduled"||E.audioPhase==="started")&&l(E,"asset-failed");return}T(p.id,p.status);return}if(p.type==="teardown"){v(p.participantId);return}if(p.type==="destroy")for(let E of[...i.values()])(E.audioPhase==="scheduled"||E.audioPhase==="started")&&l(E,"torn-down")});function D(){for(let p of i.values())t?.noteCueEnded(p.idempotencyKey);i.clear(),s.clear(),o.length=0,a=0,r.reset()}function V(p){if(!p||typeof p!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof p.assetId!="string"||p.assetId.length===0)return{ok:!1,reason:"invalid",detail:"assetId is required"};let E=r.snapshot().events.length,c=r.play(Hp(p));if(!c.ok)return c;let f=r.snapshot().events.slice(E),h=f.some(O=>O.type===Yt);if(!h&&i.has(p.idempotencyKey)){let O=i.get(p.idempotencyKey);return{ok:!0,cue:Vr(O,c.cue,r.frame)}}if(h){let O=i.get(p.idempotencyKey);O&&(s.delete(O.idempotencyKey),t?.noteCueEnded(O.idempotencyKey),i.delete(O.idempotencyKey))}let R=p.channelId??p.participantId??"master",M={name:p.name,idempotencyKey:p.idempotencyKey,assetId:p.assetId,channelId:R,participantId:p.participantId,priority:Number.isFinite(p.priority)?p.priority:0,audioPhase:"scheduled"};p.repeat&&(M.repeat=p.repeat),i.set(M.idempotencyKey,M),typeof p.gain=="number"&&t?.setChannelGain(R,p.gain,p.participantId),typeof p.priority=="number"&&t?.setPriority(R,p.priority,p.participantId),d(m(rd,M)),x(f.filter(O=>O.type!==Yt));let P=i.get(M.idempotencyKey);P&&P.audioPhase==="scheduled"&&t?.assetStatus(P.assetId)==="failed"&&l(P,"asset-failed"),$();let F=i.get(M.idempotencyKey)??M,W=r.get(M.idempotencyKey)??c.cue;return{ok:!0,cue:Vr(F,W,r.frame)}}function A(){return{schemaVersion:Fr,frame:r.frame,reducedSensory:n,cues:[...i.values()].map(p=>Vr(p,r.get(p.idempotencyKey),r.frame)).sort((p,E)=>p.name!==E.name?p.name<E.name?-1:1:p.idempotencyKey<E.idempotencyKey?-1:p.idempotencyKey>E.idempotencyKey?1:0),events:o.map(Lr)}}return{play:V,step(p=1){let E=r.step(p);return x(E),$()},cancel(p){let E=i.get(p),c=r.cancel(p);return E&&(s.delete(p),t?.noteCueEnded(p),i.delete(p)),c},reset:D,snapshot(){return A()},restore(p){let E=Gn(p);if(!E.ok)return E;let c=Vt({originFrame:E.snapshot.frame}),f=new Map,h=new Set,R=E.snapshot.events.map(Lr);for(let W=0;W<E.snapshot.cues.length;W+=1){let O=E.snapshot.cues[W],u={name:O.name,idempotencyKey:O.idempotencyKey,assetId:O.assetId,channelId:O.channelId,participantId:O.participantId,priority:O.priority,audioPhase:O.audioPhase};if(O.repeat&&(u.repeat=O.repeat),f.set(u.idempotencyKey,u),Mp.includes(O.audioPhase)){let b=c.play({name:O.name,idempotencyKey:O.idempotencyKey,startFrame:O.startFrame,durationFrames:O.durationFrames,delayFrames:O.delayFrames,easing:O.easing,repeat:Fp(O),onDuplicate:"replace"});if(!b.ok)return{ok:!1,errors:[be("invalid-snapshot",b.detail,`cues[${W}]`)]}}}let M=t?{muted:t.muted,assets:{...t.inspect().assets},started:[...i.values()].filter(W=>W.audioPhase==="started").map(W=>({idempotencyKey:W.idempotencyKey,channelId:W.channelId,participantId:W.participantId,priority:W.priority}))}:null,P={reducedSensory:n,presentation:r,records:new Map(i),pending:new Set(s),events:o.slice(),eventCursor:a},F=W=>{n=P.reducedSensory,r=P.presentation,i.clear();for(let[O,u]of P.records)i.set(O,u);s.clear();for(let O of P.pending)s.add(O);if(o.length=0,o.push(...P.events),a=P.eventCursor,t&&M){M.muted?t.mute():t.unmute();for(let[O,u]of Object.entries(M.assets))t.handleHostEvent({type:u==="ready"?et:Xe,kind:"state",payload:{id:O}});for(let O of[...i.values()])t.noteCueEnded(O.idempotencyKey);for(let O of M.started)t.noteCueStarted(O)}return{ok:!1,errors:W}};try{for(let u of i.values())t?.noteCueEnded(u.idempotencyKey);i.clear(),s.clear(),o.length=0,n=E.snapshot.reducedSensory,r=c;for(let[u,b]of f)i.set(u,b);o.push(...R),a=o.length;let W=new Set,O=new Set;for(let u of E.snapshot.events)u.type===ao&&W.add(u.assetId),u.type===Kn&&u.reason==="asset-failed"&&O.add(u.assetId);if(t){for(let u of W)t.handleHostEvent({type:et,kind:"state",payload:{id:u}});for(let u of O)t.handleHostEvent({type:Xe,kind:"state",payload:{id:u}})}for(let u of E.snapshot.cues)if(u.audioPhase==="started"&&t?.noteCueStarted({idempotencyKey:u.idempotencyKey,channelId:u.channelId,participantId:u.participantId,priority:u.priority}),u.audioPhase==="scheduled"){let b=r.get(u.idempotencyKey),w=t?.assetStatus(u.assetId);b?.phase==="active"&&w!=="ready"&&w!=="failed"&&h.add(u.idempotencyKey)}for(let u of h)s.add(u);return{ok:!0,snapshot:A()}}catch(W){let O=W instanceof Error?W.message:String(W);return F([be("invalid-snapshot",O)])}},get(p){let E=i.get(p);if(E)return Vr(E,r.get(p),r.frame)},dispose(){j?.(),D()},get frame(){return r.frame},setReducedSensory(p){n=!!p},get reducedSensory(){return n}}}function co(e={}){let t=Da({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=Bp({broker:t,originFrame:e.originFrame,reducedSensory:e.reducedSensory});return{broker:t,timeline:n,unlock(){return t.unlock()},play(r){return n.play(r)},step(r){return n.step(r)},handleHostEvent(r){t.handleHostEvent(r)},snapshot(){return{...n.snapshot(),unlock:t.status(),muted:t.muted}},restore(r){let i=Gn(r);if(!i.ok)return i;let o,s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return i}Sn(s)&&typeof s.muted=="boolean"&&(o=s.muted);let a=t.muted,d=n.restore(i.snapshot);return d.ok?(o===!0?t.mute():o===!1&&t.unmute(),{ok:!0,snapshot:{...n.snapshot(),unlock:t.status(),muted:t.muted}}):(a?t.mute():t.unmute(),d)},setReducedSensory(r){n.setReducedSensory(r)},get reducedSensory(){return n.reducedSensory},destroy(){n.dispose(),t.destroy()}}}var Hr=1,qp=["layer","mask","sprite"],Kp=["show","hide","replace","crossfade"],Gp=":incoming",Wp="visual.layer.revealed",od="visual.layer.hidden",jp="visual.layer.transition-started",Up="visual.layer.transition-completed",sd="visual.layer.failed";var Jp="host.state.accepted";var zp="Visual layer controller has been destroyed",Yp=new Set(qp),Xp=new Set(Kp);function Qp(e){return typeof e=="string"&&Yp.has(e)}function Zp(e){return typeof e=="string"&&Xp.has(e)}function ef(e){return`${e}${Gp}`}function tf(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function nf(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function kn(e){return JSON.parse(JSON.stringify(e))}function $r(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function rf(e){let t=$r(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function of(e){if(!e||typeof e!="object")return;let t=e;if(!(typeof t.id!="string"||typeof t.ref!="string"||typeof t.code!="string"||typeof t.message!="string"))return t}function ct(e,t){if(t)return e.versions.find(n=>n.id===t)}function ad(e){return e?{...e}:null}function uo(e){if(!e?.compositor)throw new Error("createVisualLayerController: compositor is required");if(!e.layers?.length)throw new Error("createVisualLayerController: at least one layer is required");let t=e.compositor,n=e.preloader,r=!!e.reducedMotion,i=e.fallback??"keep-prior",o=Vt({originFrame:e.originFrame,reducedMotion:r}),s=e.sceneId??null,a=!1,d=0,m=new Map,l=new Map,y=new Map,k=new Map,C=[],T=[],v=()=>{if(a)throw new Error(zp)};function x(g){C.push(g),e.dispatch&&e.dispatch({type:g.type,kind:g.type===sd?"diagnostic":"state",payload:g})}function $(g){T.push(g),x({type:sd,atFrame:g.atFrame,layerId:g.layerId,version:g.version,progress:0,code:g.code})}function j(g,S){y.set(g,S)}function D(g){let S=y.get(g);if(S)return S;if(n?.get(g))return"ready";let I=n?.getProgress().items[g];return I?.state==="failed"?"failed":I?.state==="ready"?"ready":"pending"}function V(g){let S=l.get(g);if(S)return S.kind==="canvas"?{kind:"canvas",canvas:S.canvas}:{kind:"image",image:S.image}}function A(g,S){let I=ct(g.declaration,S);return I?D(I.assetId)==="ready"&&!!V(I.assetId):!1}function p(g){return g.overrideVersion&&A(g,g.overrideVersion)?g.overrideVersion:g.committedVersion}function E(g,S){let I=ct(g.declaration,S);return I?ad(k.get(I.assetId))??ad(I.provenance)??null:null}function c(g,S=0){return o.get(g)?.progress??S}function f(g,S,I){try{t.layer(g)}catch{t.addLayer({id:g,order:S,visible:!1,opacity:0,pointerEvents:I.pointerEvents??"none",blend:I.blend,clip:I.clip??void 0,clearPolicy:I.clearPolicy})}}function h(g){try{t.setLayer(g.incomingLayerId,{visible:!1,opacity:0})}catch{}}function R(){for(let g of m.values()){let S=p(g),I=ct(g.declaration,S),N=g.transition,q=N?c(N.cueKey):0,Z=N?.kind==="crossfade"&&N.toVersion!==null&&A(g,N.toVersion);f(g.compositorLayerId,g.order,g);let z=g.visible,ne=1;N?.kind==="hide"?(ne=1-q,q>=1&&(z=!1)):N?.kind==="show"?(z=A(g,N.toVersion),ne=z?N.durationFrames===0?1:q:0):Z&&(ne=1-q);let Q=I?V(I.assetId):void 0;if(t.setLayer(g.compositorLayerId,{order:g.order,visible:z&&!!Q,opacity:ne,blend:g.blend,clip:g.clip??void 0,pointerEvents:g.pointerEvents,clearPolicy:g.clearPolicy,source:Q}),Z&&N){let he=ct(g.declaration,N.toVersion),ke=he?V(he.assetId):void 0;if(ke){try{t.layer(g.incomingLayerId)}catch{t.addLayer({id:g.incomingLayerId,order:g.order+1,visible:!1,opacity:0,pointerEvents:"none",blend:g.blend,clip:g.clip??void 0,clearPolicy:g.clearPolicy})}t.setLayer(g.incomingLayerId,{order:g.order+1,visible:!0,opacity:q,blend:g.blend,clip:g.clip??void 0,pointerEvents:"none",clearPolicy:g.clearPolicy,source:ke});continue}}h(g)}}function M(g){let S=p(g);return{id:g.declaration.id,kind:g.kind,visible:g.visible&&!!(S&&A(g,S)),activeVersion:S,pendingVersion:g.pendingVersion,committedVersion:g.committedVersion,opacity:t.layer(g.compositorLayerId).opacity,order:g.order,provenance:E(g,S),overrideVersion:g.overrideVersion,transition:g.transition?{kind:g.transition.kind,progress:c(g.transition.cueKey),fromVersion:g.transition.fromVersion,toVersion:g.transition.toVersion,cueKey:g.transition.cueKey,startFrame:g.transition.startFrame,durationFrames:g.transition.durationFrames,delayFrames:g.transition.delayFrames,easing:g.transition.easing}:null}}function P(g,S,I){g.committedVersion=S,g.pendingVersion=null,g.transition=null,g.visible=I,R(),x({type:I?Wp:od,atFrame:o.frame,layerId:g.declaration.id,version:S,progress:1})}function F(g){g.visible=!1,g.pendingVersion=null,g.transition=null,R(),x({type:od,atFrame:o.frame,layerId:g.declaration.id,version:g.committedVersion??void 0,progress:1})}function W(g,S,I,N){let q=g.fallback;g.transition=null,g.pendingVersion=null,q==="hide"?g.visible=!1:typeof q=="object"&&q.version&&A(g,q.version)&&(g.committedVersion=q.version,g.visible=!0),R(),$({code:N?"asset-failed":"missing-source",layerId:g.declaration.id,version:S??void 0,assetId:I,message:N?N.message:`visual layer "${g.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:N})}function O(g){let S=g.transition;if(S?.kind==="hide")return F(g),!0;let I=g.pendingVersion??S?.toVersion??null;if(!I)return g.transition=null,!0;if(!ct(g.declaration,I))return W(g,I),!0;if(A(g,I))return P(g,I,!0),!0;let N=ct(g.declaration,I).assetId;return D(N)==="failed"?(W(g,I,N),!0):(g.transition=null,g.pendingVersion=I,R(),!1)}function u(){for(let g of m.values())if(!g.transition&&g.pendingVersion){if(A(g,g.pendingVersion))P(g,g.pendingVersion,!0);else if(D(ct(g.declaration,g.pendingVersion)?.assetId??"")==="failed"){let S=ct(g.declaration,g.pendingVersion);W(g,g.pendingVersion,S?.assetId)}}for(let g of m.values())g.overrideVersion&&A(g,g.overrideVersion)&&g.committedVersion!==g.overrideVersion&&P(g,g.overrideVersion,!0)}function b(g,S){j(g,"failed");for(let I of m.values()){let N=I.declaration.versions.find(Q=>Q.assetId===g);if(!N)continue;let q=ct(I.declaration,I.pendingVersion),Z=ct(I.declaration,I.transition?.toVersion??null),z=ct(I.declaration,I.overrideVersion);if(q?.assetId===g||Z?.assetId===g||z?.assetId===g){I.transition&&o.cancel(I.transition.cueKey),z?.assetId===g&&(I.overrideVersion=null),W(I,N.id,g,S);continue}$({code:"asset-failed",layerId:I.declaration.id,version:N.id,assetId:g,message:S?.message??`asset "${g}" failed; prior frame kept`,atFrame:o.frame,failure:S}),R()}}function w(g){for(let S of g){let I=[...m.values()].find(N=>N.transition?.cueKey===S.idempotencyKey);if(!(!I||!I.transition))if(S.type===bn)x({type:jp,atFrame:S.atFrame,layerId:I.declaration.id,version:I.transition.toVersion??void 0,kind:I.transition.kind,progress:S.progress}),R();else if(S.type===qn){let N=I.transition.kind,q=I.transition.toVersion??void 0;O(I),x({type:Up,atFrame:S.atFrame,layerId:I.declaration.id,version:q,kind:N,progress:1})}else(S.type===vn||S.type===Yt)&&(I.transition=null,R())}}function L(){let g=C.slice(d).map(S=>kn(S));return d=C.length,g}for(let g of e.layers){if(!g?.id)throw new Error("createVisualLayerController: layer id is required");if(m.has(g.id))throw new Error(`createVisualLayerController: duplicate layer id "${g.id}"`);if(!Qp(g.kind))throw new Error(`createVisualLayerController: layer "${g.id}" kind is invalid`);if(!g.versions?.length)throw new Error(`createVisualLayerController: layer "${g.id}" needs versions`);let S=new Set;for(let ne of g.versions){if(!ne?.id||!ne.assetId)throw new Error(`createVisualLayerController: layer "${g.id}" versions need id and assetId`);if(S.has(ne.id))throw new Error(`createVisualLayerController: layer "${g.id}" duplicate version "${ne.id}"`);S.add(ne.id),ne.provenance&&k.set(ne.assetId,{...ne.provenance})}if(g.initialVersion&&!S.has(g.initialVersion))throw new Error(`createVisualLayerController: layer "${g.id}" unknown initialVersion`);let I=g.compositorLayerId??g.id,N=g.incomingLayerId??ef(I),q=g.order??0,Z=g.pointerEvents??(g.kind==="mask"?"none":"auto"),z={declaration:g,compositorLayerId:I,incomingLayerId:N,kind:g.kind,order:q,blend:g.blend??"source-over",clip:g.clip?{...g.clip}:null,pointerEvents:Z,clearPolicy:g.clearPolicy??"opaque",fallback:g.fallback??i,visible:!!g.initialVersion,committedVersion:g.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};m.set(g.id,z),f(I,q,z)}R();function _(g){if(v(),!g||typeof g!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(!g.layerId)return{ok:!1,reason:"invalid",detail:"layerId is required"};let S=m.get(g.layerId);if(!S)return{ok:!1,reason:"invalid",detail:`unknown layer "${g.layerId}"`};if(!Zp(g.kind))return{ok:!1,reason:"invalid",detail:"unsupported kind"};if(g.kind!=="hide"&&!g.toVersion)return{ok:!1,reason:"invalid",detail:"toVersion is required"};if(g.toVersion&&!ct(S.declaration,g.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${g.toVersion}"`};let I={name:g.name,idempotencyKey:g.idempotencyKey,startFrame:g.startFrame,durationFrames:g.durationFrames,delayFrames:g.delayFrames,easing:g.easing,repeat:g.repeat,reducedMotion:g.reducedMotion,onDuplicate:g.onDuplicate??"replace"},N=o.snapshot().events.length,q=o.play(I);if(!q.ok)return q;let Z=o.snapshot().events.slice(N);return S.pendingVersion=g.kind==="hide"?S.committedVersion:g.toVersion??null,S.transition={kind:g.kind,cueKey:g.idempotencyKey,fromVersion:g.fromVersion??S.committedVersion,toVersion:g.kind==="hide"?S.committedVersion:g.toVersion??null,startFrame:q.cue.startFrame,durationFrames:q.cue.durationFrames,delayFrames:q.cue.delayFrames,easing:q.cue.easing},w(Z),R(),L(),q}function G(g){let S=$r(g),I=typeof S?.sceneId=="string"?S.sceneId:void 0;if(e.sceneId&&I&&I!==e.sceneId)return;I&&(s=I);let N=typeof S?.layerId=="string"?S.layerId:typeof S?.overlayId=="string"?S.overlayId:void 0,q=typeof S?.version=="string"?S.version:void 0;if(N&&q){_({name:`visual:${N}:replace`,idempotencyKey:`visual:${N}:accepted`,layerId:N,kind:"replace",toVersion:q,durationFrames:2});return}for(let Z of e.onAccepted??[])_({name:`visual:${Z.layerId}:${Z.kind??"replace"}`,idempotencyKey:Z.idempotencyKey??`visual:${Z.layerId}:accepted`,layerId:Z.layerId,kind:Z.kind??"replace",toVersion:Z.toVersion,durationFrames:Z.durationFrames??2,delayFrames:Z.delayFrames,easing:Z.easing})}function U(){let g=[...m.values()].map(I=>{let N=M(I);return{id:I.declaration.id,kind:I.kind,visible:I.visible,committedVersion:I.committedVersion,pendingVersion:I.pendingVersion,activeVersion:N.activeVersion,opacity:N.opacity,order:I.order,overrideVersion:I.overrideVersion,provenance:N.provenance,fallback:I.fallback,transition:N.transition}}).sort((I,N)=>I.id<N.id?-1:I.id>N.id?1:0),S={};for(let[I,N]of[...y.entries()].sort(([q],[Z])=>q<Z?-1:q>Z?1:0))S[I]=N;return kn({schemaVersion:Hr,frame:o.frame,sceneId:s,reducedMotion:r,layers:g,assets:S,events:C.map(I=>kn(I)),diagnostics:T.map(I=>kn(I))})}function B(g){v();let S=[],I=z=>{let ne={code:"invalid-snapshot",layerId:"",message:z,atFrame:o.frame};return{ok:!1,errors:[...S,ne]}},N=g;if(typeof g=="string")try{N=JSON.parse(g)}catch{return I("snapshot JSON is invalid")}if(!N||typeof N!="object"||Array.isArray(N))return I("snapshot must be an object");let q=N;if(q.schemaVersion!==Hr)return I("unsupported visual layer snapshot schema");if(typeof q.frame!="number"||!Number.isFinite(q.frame))return I("frame must be finite");if(!Array.isArray(q.layers))return I("layers must be an array");if(typeof q.reducedMotion=="boolean"&&(r=q.reducedMotion),o=Vt({originFrame:q.frame,reducedMotion:!1}),s=typeof q.sceneId=="string"||q.sceneId===null?q.sceneId:s,C.length=0,T.length=0,d=0,Array.isArray(q.events)&&(C.push(...q.events.map(z=>kn(z))),d=C.length),Array.isArray(q.diagnostics)&&T.push(...q.diagnostics.map(z=>kn(z))),y.clear(),q.assets&&typeof q.assets=="object")for(let[z,ne]of Object.entries(q.assets))(ne==="ready"||ne==="failed"||ne==="pending")&&y.set(z,ne);let Z=new Map(q.layers.map(z=>[z.id,z]));for(let z of m.values()){let ne=Z.get(z.declaration.id);ne&&(z.visible=!!ne.visible,z.committedVersion=ne.committedVersion??null,z.pendingVersion=ne.pendingVersion??null,z.overrideVersion=ne.overrideVersion??null,z.transition=null,ne.transition&&o.play({name:`visual:${z.declaration.id}:${ne.transition.kind}`,idempotencyKey:ne.transition.cueKey,startFrame:ne.transition.startFrame,durationFrames:ne.transition.durationFrames,delayFrames:ne.transition.delayFrames,easing:ne.transition.easing,onDuplicate:"replace"}).ok&&(z.transition={kind:ne.transition.kind,cueKey:ne.transition.cueKey,fromVersion:ne.transition.fromVersion,toVersion:ne.transition.toVersion,startFrame:ne.transition.startFrame,durationFrames:ne.transition.durationFrames,delayFrames:ne.transition.delayFrames,easing:ne.transition.easing}))}return R(),o.setReducedMotion(r),{ok:!0,snapshot:U()}}return{registerSource(g,S){if(v(),typeof g!="string"||g.length===0)throw new Error("createVisualLayerController: assetId is required");if(S instanceof HTMLCanvasElement)l.set(g,{kind:"canvas",canvas:S});else if(S&&"data"in S&&"width"in S)l.set(g,{kind:"image",image:nf(S)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");u(),R()},handleHostEvent(g){if(v(),!g||typeof g!="object")return;if(g.type===Jp){G(g.payload);return}let S=rf(g.payload);if(S){if(g.type===et){j(S,"ready");let N=$r(g.payload)?.resource;if(N&&typeof N=="object"&&"provenance"in N){let q=N.provenance;q&&k.set(S,{...q})}u(),R();return}if(g.type===Xe){let I=$r(g.payload);b(S,of(I?.failure))}}},override(g,S){v();let I=m.get(g);if(!I)throw new Error(`createVisualLayerController: unknown layer "${g}"`);if(S===null){I.overrideVersion=null,R();return}if(!ct(I.declaration,S))throw new Error(`createVisualLayerController: unknown version "${S}" on "${g}"`);if(I.overrideVersion=S,A(I,S)){I.transition&&o.cancel(I.transition.cueKey),P(I,S,!0);return}R()},play:_,setReducedMotion(g){v(),r=!!g,o.setReducedMotion(r)},step(g=1){v();let S=o.step(g);return w(S),u(),R(),L()},snapshot(){return v(),U()},restore:B,inspect(){return v(),R(),[...m.values()].map(M).sort((g,S)=>g.id<S.id?-1:g.id>S.id?1:0)},captureComposedFrame(){return v(),R(),t.captureComposedFrame()},destroy(){a||(a=!0,o.reset(),C.length=0,T.length=0)},get frame(){return o.frame},get sceneId(){return s},get compositor(){return t},get reducedMotion(){return r}}}var sf=["loading","ready","error","unsupported"],af=["keyboard","pointer","audio","assets","hostChannel"],df=["image","audio","font","spritesheet"],cf=["tone","midi"],po=["source-over","screen"],cd=["transparent","opaque"],uf=["render","calculation"],Wn=["audio","controller","network","persistence","fullscreen"],lf=new Set(sf),ud=new Set(af),dd=new Set(df),ld=new Set(cf),pf=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind","grants"]),ff=new Set(["minContractVersion","features"]),mf=new Set(["kinds","declarations"]),gf=new Set(["id","kind"]),hf=new Set(["emit","subscribe","authoritative"]),pd=new Set(["alpha","clearPolicy"]),fd=new Set(["compositor","blend"]),md=new Set(["refs"]),yf=new Set(["id","version"]),Br=/^[a-z0-9][a-z0-9.-]*$/i,gd=new Set(po),hd=new Set(cd),yd=new Set(uf),lo=new Set(Wn),bf=new Set(["contractVersion","features","integrations","managers","emit","subscribe","surface","layers","modules","kinds","grants"]);function de(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function ut(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function lt(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(de("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function vf(e){if(typeof e!="string"||e.length===0)return!1;let t=e.split(".");return t.some(n=>n.length===0)?!1:t.every(n=>n==="*"||/^[a-z0-9][a-z0-9-]*$/i.test(n))}function Sf(e,t){let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function qr(e,t){for(let n of t)if(e===n||Sf(n,e))return!0;return!1}function En(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function fo(e,t,n){if(!Array.isArray(e))return{ok:!1,errors:[de("invalid-field",`${t} must be an array`,t)]};let r=[],i=[];return e.forEach((o,s)=>{let a=`${t}[${s}]`;if(typeof o!="string"||o.length===0){r.push(de("invalid-field",`${t} entries must be non-empty strings`,a));return}let d=n(o,a);d?r.push(d):i.push(o)}),r.length>0?{ok:!1,errors:r}:{ok:!0,values:i}}function In(e,t){return fo(e,t,(n,r)=>vf(n)?void 0:de("invalid-pattern",`invalid event pattern "${n}"`,r))}function gt(e,t,n,r,i){return fo(e,t,(o,s)=>n.has(o)?void 0:de(r,`invalid ${i} "${o}"`,s))}function bd(e,t){return fo(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:de("invalid-feature",`invalid feature tag "${n}"`,r))}function vd(e,t){if(!Array.isArray(e))return{ok:!1,errors:[de("invalid-module",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!ut(i)){n.push(de("invalid-module","module ref must be an object",s));return}n.push(...lt(i,yf,s)),(typeof i.id!="string"||i.id.length===0||!Br.test(i.id))&&n.push(de("invalid-module",`invalid module id "${String(i.id)}"`,`${s}.id`)),(typeof i.version!="string"||i.version.length===0||!Br.test(i.version))&&n.push(de("invalid-module",`invalid module version "${String(i.version)}"`,`${s}.version`)),typeof i.id=="string"&&Br.test(i.id)&&typeof i.version=="string"&&Br.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function kf(e){let t=new Set,n=[];for(let r of e){let i=`${r.id}@${r.version}`;t.has(i)||(t.add(i),n.push({id:r.id,version:r.version}))}return n}function Ef(e){if(!ut(e))return[de("invalid-manifest","capability manifest must be a JSON object")];let t=[...lt(e,pf,"")];if(e.version!==void 0&&e.version!==1&&t.push(de("invalid-version","capability manifest version must be 1","version")),(typeof e.id!="string"||e.id.length===0)&&t.push(de("invalid-id","id is required","id")),!ut(e.runtime))t.push(de("invalid-runtime","runtime is required","runtime"));else{t.push(...lt(e.runtime,ff,"runtime"));let a=e.runtime.minContractVersion;(typeof a!="number"||!Number.isInteger(a)||a<1)&&t.push(de("invalid-runtime","runtime.minContractVersion must be an integer >= 1","runtime.minContractVersion"));let d=bd(e.runtime.features,"runtime.features");d.ok||t.push(...d.errors)}let n=gt(e.phases,"phases",lf,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=gt(e.managers,"managers",ud,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!ut(e.assets))t.push(de("invalid-assets","assets is required","assets"));else{t.push(...lt(e.assets,mf,"assets"));let a=gt(e.assets.kinds,"assets.kinds",dd,"invalid-asset-kind","asset kind");a.ok||t.push(...a.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((d,m)=>{let l=`assets.declarations[${m}]`;if(!ut(d)){t.push(de("invalid-assets","asset declaration must be an object",l));return}t.push(...lt(d,gf,l)),(typeof d.id!="string"||d.id.length===0)&&t.push(de("invalid-assets","asset declaration id is required",`${l}.id`)),(typeof d.kind!="string"||!dd.has(d.kind))&&t.push(de("invalid-asset-kind",`invalid asset kind "${String(d.kind)}"`,`${l}.kind`))}):t.push(de("invalid-assets","assets.declarations must be an array","assets.declarations"))}let i=In(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=In(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!ut(e.permissions))t.push(de("invalid-permissions","permissions is required","permissions"));else{t.push(...lt(e.permissions,hf,"permissions"));let a=In(e.permissions.emit,"permissions.emit");a.ok||t.push(...a.errors);let d=In(e.permissions.subscribe,"permissions.subscribe");d.ok||t.push(...d.errors),e.permissions.authoritative!==void 0&&typeof e.permissions.authoritative!="boolean"&&t.push(de("invalid-permissions","permissions.authoritative must be a boolean","permissions.authoritative"))}let s=gt(e.integrations,"integrations",ld,"invalid-integration","integration");if(s.ok||t.push(...s.errors),e.surface!==void 0&&(ut(e.surface)?(t.push(...lt(e.surface,pd,"surface")),e.surface.alpha!==void 0&&typeof e.surface.alpha!="boolean"&&t.push(de("invalid-surface","surface.alpha must be a boolean","surface.alpha")),e.surface.clearPolicy!==void 0&&(typeof e.surface.clearPolicy!="string"||!hd.has(e.surface.clearPolicy))&&t.push(de("invalid-clear-policy",`invalid clear policy "${String(e.surface.clearPolicy)}"`,"surface.clearPolicy"))):t.push(de("invalid-surface","surface must be an object","surface"))),e.layers!==void 0){if(!ut(e.layers))t.push(de("invalid-layers","layers must be an object","layers"));else if(t.push(...lt(e.layers,fd,"layers")),e.layers.compositor!==void 0&&typeof e.layers.compositor!="boolean"&&t.push(de("invalid-layers","layers.compositor must be a boolean","layers.compositor")),e.layers.blend!==void 0){let a=gt(e.layers.blend,"layers.blend",gd,"invalid-blend","blend mode");a.ok||t.push(...a.errors)}}if(e.modules!==void 0){if(!ut(e.modules))t.push(de("invalid-module","modules must be an object","modules"));else if(t.push(...lt(e.modules,md,"modules")),e.modules.refs!==void 0){let a=vd(e.modules.refs,"modules.refs");a.ok||t.push(...a.errors)}}if(e.kind!==void 0&&(typeof e.kind!="string"||!yd.has(e.kind))&&t.push(de("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),e.grants!==void 0){let a=gt(e.grants,"grants",lo,"invalid-grant","grant");a.ok||t.push(...a.errors)}return t}function If(e){let t=[];return e.emittedEvents.forEach((n,r)=>{qr(n,e.permissions.emit)||t.push(de("undeclared-permission",`emitted event "${n}" is not covered by permissions.emit`,`emittedEvents[${r}]`))}),e.acceptedEvents.forEach((n,r)=>{qr(n,e.permissions.subscribe)||t.push(de("undeclared-permission",`accepted event "${n}" is not covered by permissions.subscribe`,`acceptedEvents[${r}]`))}),t}function Rf(e){let t=En(e.assets.kinds),n=e.assets.declarations.map(o=>({id:o.id,kind:o.kind})),r={emit:[...e.permissions.emit],subscribe:[...e.permissions.subscribe]};e.permissions.authoritative===!0&&(r.authoritative=!0);let i={version:1,id:e.id,runtime:{minContractVersion:e.runtime.minContractVersion,features:[...e.runtime.features]},phases:En(e.phases),managers:En(e.managers),assets:{kinds:t,declarations:n},acceptedEvents:[...e.acceptedEvents],emittedEvents:[...e.emittedEvents],permissions:r,integrations:En(e.integrations)};if(e.surface){let o={};e.surface.alpha===!0&&(o.alpha=!0),e.surface.clearPolicy&&(o.clearPolicy=e.surface.clearPolicy),(o.alpha!==void 0||o.clearPolicy!==void 0)&&(i.surface=o)}if(e.layers){let o={};e.layers.compositor===!0&&(o.compositor=!0),e.layers.blend&&e.layers.blend.length>0&&(o.blend=En(e.layers.blend)),(o.compositor!==void 0||o.blend!==void 0)&&(i.layers=o)}if(e.modules?.refs&&e.modules.refs.length>0){let o=kf(e.modules.refs);o.length>0&&(i.modules={refs:o})}return e.kind==="calculation"&&(i.kind="calculation"),e.grants&&e.grants.length>0&&(i.grants=En(e.grants)),i}function mo(e){let t=Ef(e);if(t.length>0)return{ok:!1,errors:t};let n=Rf(e);return t.push(...If(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function Kr(e,t){let n=mo(e),r=n.ok?[]:[...n.errors];if(!ut(t))return{ok:!1,errors:[de("invalid-host","host capabilities must be a JSON object")]};r.push(...lt(t,bf,"host")),typeof t.contractVersion!="number"||!Number.isInteger(t.contractVersion)||t.contractVersion<1?r.push(de("invalid-host","host.contractVersion must be an integer >= 1","host.contractVersion")):n.ok&&t.contractVersion<n.manifest.runtime.minContractVersion&&r.push(de("unsupported-runtime",`host contract version ${t.contractVersion} is below required ${n.manifest.runtime.minContractVersion}`,"runtime.minContractVersion"));let i=bd(t.features,"host.features");if(!i.ok)r.push(...i.errors);else if(n.ok){let a=new Set(i.values);n.manifest.runtime.features.forEach((d,m)=>{a.has(d)||r.push(de("unsupported-feature",`host does not support required feature "${d}"`,`runtime.features[${m}]`))})}let o=gt(t.integrations,"host.integrations",ld,"invalid-integration","integration");if(!o.ok)r.push(...o.errors);else if(n.ok){let a=new Set(o.values);n.manifest.integrations.forEach((d,m)=>{a.has(d)||r.push(de("missing-integration",`host does not provide required integration "${d}"`,`integrations[${m}]`))})}if(t.managers!==void 0){let a=gt(t.managers,"host.managers",ud,"invalid-manager","manager");if(!a.ok)r.push(...a.errors);else if(n.ok){let d=new Set(a.values);n.manifest.managers.forEach((m,l)=>{d.has(m)||r.push(de("missing-manager",`host does not provide required manager "${m}"`,`managers[${l}]`))})}}if(t.emit!==void 0){let a=In(t.emit,"host.emit");a.ok?n.ok&&n.manifest.permissions.emit.forEach((d,m)=>{qr(d,a.values)||r.push(de("unknown-permission",`host does not allow emit permission "${d}"`,`permissions.emit[${m}]`))}):r.push(...a.errors)}if(t.subscribe!==void 0){let a=In(t.subscribe,"host.subscribe");a.ok?n.ok&&n.manifest.permissions.subscribe.forEach((d,m)=>{qr(d,a.values)||r.push(de("unknown-permission",`host does not allow subscribe permission "${d}"`,`permissions.subscribe[${m}]`))}):r.push(...a.errors)}if(t.surface!==void 0&&(ut(t.surface)?(r.push(...lt(t.surface,pd,"host.surface")),t.surface.alpha!==void 0&&typeof t.surface.alpha!="boolean"&&r.push(de("invalid-host","host.surface.alpha must be a boolean","host.surface.alpha")),t.surface.clearPolicy!==void 0&&(Array.isArray(t.surface.clearPolicy)?t.surface.clearPolicy:[t.surface.clearPolicy]).forEach((d,m)=>{(typeof d!="string"||!hd.has(d))&&r.push(de("invalid-clear-policy",`invalid clear policy "${String(d)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${m}]`:"host.surface.clearPolicy"))})):r.push(de("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!ut(t.layers))r.push(de("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...lt(t.layers,fd,"host.layers")),t.layers.compositor!==void 0&&typeof t.layers.compositor!="boolean"&&r.push(de("invalid-host","host.layers.compositor must be a boolean","host.layers.compositor")),t.layers.blend!==void 0){let a=gt(t.layers.blend,"host.layers.blend",gd,"invalid-blend","blend mode");a.ok||r.push(...a.errors)}}let s;if(t.modules!==void 0)if(!ut(t.modules))r.push(de("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...lt(t.modules,md,"host.modules")),t.modules.refs!==void 0){let a=vd(t.modules.refs,"host.modules.refs");a.ok?s=a.values:r.push(...a.errors)}else s=[];if(n.ok&&n.manifest.surface){let a=n.manifest.surface,d=t.surface;a.alpha===!0&&d?.alpha!==!0&&r.push(de("unsupported-surface","host does not provide an alpha-capable surface","surface.alpha")),a.clearPolicy&&((Array.isArray(d?.clearPolicy)?d.clearPolicy:d?.clearPolicy?[d.clearPolicy]:[]).includes(a.clearPolicy)||r.push(de("unsupported-surface",`host does not provide clear policy "${a.clearPolicy}"`,"surface.clearPolicy")))}if(n.ok&&n.manifest.layers){let a=n.manifest.layers,d=t.layers;if(a.compositor===!0&&d?.compositor!==!0&&r.push(de("unsupported-layer","host does not provide a compositor","layers.compositor")),a.blend){let m=new Set(d?.blend??[]);a.blend.forEach((l,y)=>{m.has(l)||r.push(de("unsupported-layer",`host does not provide blend mode "${l}"`,`layers.blend[${y}]`))})}}if(n.ok&&n.manifest.modules?.refs){let a=t.modules===void 0?[]:s??[];n.manifest.modules.refs.forEach((d,m)=>{a.some(l=>l.id===d.id&&l.version===d.version)||r.push(de("unsupported-module",`host does not provide required module "${d.id}@${d.version}"`,`modules.refs[${m}]`))})}if(n.ok&&n.manifest.grants&&n.manifest.grants.length>0){let a=t.grants===void 0?{ok:!0,values:[]}:gt(t.grants,"host.grants",lo,"invalid-grant","grant");if(!a.ok)r.push(...a.errors);else{let d=new Set(a.values);n.manifest.grants.forEach((m,l)=>{d.has(m)||r.push(de("ungranted-capability",`host does not grant "${m}"`,`grants[${l}]`))})}}else if(t.grants!==void 0){let a=gt(t.grants,"host.grants",lo,"invalid-grant","grant");a.ok||r.push(...a.errors)}if(t.kinds!==void 0){let a=gt(t.kinds,"host.kinds",yd,"invalid-kind","cart kind");if(!a.ok)r.push(...a.errors);else if(n.ok){let d=n.manifest.kind??"render";a.values.includes(d)||r.push(de("unsupported-kind",`host does not support cart kind "${d}"`,"kind"))}}return r.length>0?{ok:!1,errors:r}:{ok:!0}}var Rd=po;var Cf="Compositor has been destroyed";function Af(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function wf(e){let t=e.trim().toLowerCase();if(t[0]!=="#")throw new Error(`createCompositor: host.color must be #rgb or #rrggbb, got "${e}"`);let n=t.slice(1);if(n.length===3)return{r:parseInt(n[0]+n[0],16),g:parseInt(n[1]+n[1],16),b:parseInt(n[2]+n[2],16),a:255};if(n.length===6)return{r:parseInt(n.slice(0,2),16),g:parseInt(n.slice(2,4),16),b:parseInt(n.slice(4,6),16),a:255};throw new Error(`createCompositor: host.color must be #rgb or #rrggbb, got "${e}"`)}function Pf(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function xf(e,t){if(e===void 0||e.kind==="participant")return{kind:"participant"};if(e.kind==="canvas"){if(!e.canvas)throw new Error(`createCompositor: layer "${t}" canvas source is required`);return{kind:"canvas",canvas:e.canvas}}if(e.kind==="image"){if(!e.image||!e.image.data)throw new Error(`createCompositor: layer "${t}" image source is required`);return{kind:"image",image:Pf(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function go(e,t){if(!e.id)throw new Error("createCompositor: layer id is required");if(!Number.isFinite(e.order))throw new Error(`createCompositor: layer "${e.id}" order is required`);let n=e.blend??"source-over";if(n!=="source-over"&&n!=="screen")throw new Error(`createCompositor: layer "${e.id}" blend must be source-over or screen`);let r=e.pointerEvents??"auto";if(r!=="auto"&&r!=="none")throw new Error(`createCompositor: layer "${e.id}" pointerEvents must be auto or none`);let i=e.clearPolicy??t;if(i!=="transparent"&&i!=="opaque")throw new Error(`createCompositor: layer "${e.id}" clearPolicy is invalid`);let o=xf(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:Af(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function Sd(e){return{id:e.id,order:e.order,visible:e.visible,opacity:e.opacity,blend:e.blend,clip:e.clip?{...e.clip}:null,pointerEvents:e.pointerEvents,clearPolicy:e.clearPolicy,sourceKind:e.source.kind}}function kd(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function ho(e,t){return 255-Math.round((255-e)*(255-t)/255)}function Tf(e,t,n,r,i,o,s,a){let d=o/255*s;if(d<=0)return;let m=e[t],l=e[t+1],y=e[t+2],k=e[t+3]/255,C=n,T=r,v=i;a==="screen"&&(C=ho(m,n),T=ho(l,r),v=ho(y,i));let x=d+k*(1-d);if(x<=0){e[t]=0,e[t+1]=0,e[t+2]=0,e[t+3]=0;return}e[t]=Math.round((C*d+m*k*(1-d))/x),e[t+1]=Math.round((T*d+l*k*(1-d))/x),e[t+2]=Math.round((v*d+y*k*(1-d))/x),e[t+3]=Math.round(x*255)}function Df(e,t,n){if(e.width===t&&e.height===n)return{data:new Uint8ClampedArray(e.data),width:t,height:n,colorSpace:e.colorSpace??"srgb"};let r=new Uint8ClampedArray(t*n*4);for(let i=0;i<n;i++){let o=Math.min(e.height-1,Math.floor(i*e.height/n));for(let s=0;s<t;s++){let a=Math.min(e.width-1,Math.floor(s*e.width/t)),d=(o*e.width+a)*4,m=(i*t+s)*4;r[m]=e.data[d],r[m+1]=e.data[d+1],r[m+2]=e.data[d+2],r[m+3]=e.data[d+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function Of(e,t){for(let n=0;n<e.length;n+=4)e[n]=t.r,e[n+1]=t.g,e[n+2]=t.b,e[n+3]=t.a}function Ed(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function Id(e){let t=e.getContext("2d");if(!t)throw new Error("createCompositor: layer canvas has no 2d context");return t.getImageData(0,0,e.width,e.height)}function Gr(e,t){e&&(e.style.zIndex=String(t.order),e.style.pointerEvents=t.pointerEvents==="none"?"none":"auto",e.style.visibility=t.visible?"visible":"hidden")}function Cd(e){if(!e.layers.length)throw new Error("createCompositor: at least one layer is required");let t=new Set,n=e.clearPolicy??"transparent";if(n!=="transparent"&&n!=="opaque")throw new Error("createCompositor: clearPolicy must be transparent or opaque");let r=new Map;for(let p of e.layers){let E=go(p,n);if(t.has(E.id))throw new Error(`createCompositor: duplicate layer id "${E.id}"`);t.add(E.id),r.set(E.id,E)}let i=e.group,o=e.dpr&&e.dpr>0?e.dpr:1,s=Math.max(1,(e.width??320)|0),a=Math.max(1,(e.height??180)|0),d=o,m=e.offscreen!==!1,l=!e.target;if(!m&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let y=e.target??document.createElement("canvas"),k=y.getContext("2d",{alpha:!0});if(!k)throw new Error("createCompositor: host canvas has no 2d context");let C=!1,T=()=>{if(C)throw new Error(Cf)},v=()=>({width:Math.max(1,Math.round(s*d)),height:Math.max(1,Math.round(a*d))}),x=()=>{let p=v();y.width!==p.width&&(y.width=p.width),y.height!==p.height&&(y.height=p.height),y.style.width=`${s}px`,y.style.height=`${a}px`},$=()=>kd([...r.values()]).map(Sd),j=p=>{if(p.source.kind==="image")return p.source.image;if(p.source.kind==="canvas")try{return Id(p.source.canvas)}catch{return}try{let c=i.participant(p.id).cart.canvas;return c?(Gr(c,p),Id(c)):void 0}catch{return}},D=(p,E,c)=>{if(p.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&p.fill(0),e.host?.image){let f=Df(e.host.image,E,c);p.set(f.data);return}e.host?.color&&Of(p,wf(e.host.color))},V=()=>{let{width:p,height:E}=v();x();let c=k.createImageData(p,E);D(c.data,p,E);for(let f of kd([...r.values()])){if(!f.visible||f.opacity<=0)continue;let h=j(f);if(!h)continue;let R=f.clearPolicy==="transparent",M=Math.min(p,h.width),P=Math.min(E,h.height);for(let F=0;F<P;F++)for(let W=0;W<M;W++){if(!Ed(f.clip,W,F))continue;let O=(F*h.width+W)*4,u=h.data[O],b=h.data[O+1],w=h.data[O+2],L=h.data[O+3];R&&u===0&&b===0&&w===0||L<=0||Tf(c.data,(F*p+W)*4,u,b,w,L,f.opacity,f.blend)}}return k.putImageData(c,0,0),c};x();for(let p of $())try{Gr(i.participant(p.id).cart.canvas,p)}catch{}return{get canvas(){return y},get width(){return s},get height(){return a},get dpr(){return d},compose(){return T(),V()},captureComposedFrame(){T();let p=V();return{imageData:p,pngDataUrl:y.toDataURL("image/png"),width:p.width,height:p.height,declaredOrder:$()}},resize(p,E,c){T(),s=Math.max(1,p|0),a=Math.max(1,E|0),c!==void 0&&(d=c>0?c:1);let f=v();i.resize(f.width,f.height),x()},setLayer(p,E){T();let c=r.get(p);if(!c)throw new Error(`createCompositor: unknown layer "${p}"`);let f=go({id:p,order:E.order??c.order,visible:E.visible??c.visible,opacity:E.opacity??c.opacity,blend:E.blend??c.blend,clip:E.clip===void 0?c.clip??void 0:E.clip,pointerEvents:E.pointerEvents??c.pointerEvents,clearPolicy:E.clearPolicy??c.clearPolicy,source:E.source??c.source},n);r.set(p,f);try{Gr(i.participant(p).cart.canvas,f)}catch{}},addLayer(p){if(T(),r.has(p.id))throw new Error(`createCompositor: duplicate layer id "${p.id}"`);let E=go(p,n);r.set(E.id,E);try{Gr(i.participant(E.id).cart.canvas,E)}catch{}},layer(p){T();let E=r.get(p);if(!E)throw new Error(`createCompositor: unknown layer "${p}"`);return Sd(E)},layers(){return T(),$()},pointerTarget(p,E){T();let c=p|0,f=E|0,h=[...$()].reverse();for(let R of h){if(!R.visible||R.pointerEvents==="none"||!Ed(R.clip,c,f))continue;let M=r.get(R.id);if(M&&M.source.kind!=="participant")return R.id;try{i.participant(R.id)}catch{continue}return R.id}},unmountLayer(p){if(T(),!r.has(p))throw new Error(`createCompositor: unknown layer "${p}"`);r.delete(p);try{i.detach(p)}catch{}},inspect(){T();let p=$();return{viewport:{width:s,height:a,dpr:d},clearPolicy:n,layers:p,declaredOrder:p.map(E=>E.id)}},destroy(){C||(C=!0,l&&y.parentNode&&y.remove())}}}function wd(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:s}=e,a=i/n,d=o/r,m=s==="contain"?Math.min(a,d):Math.max(a,d),l=n*m,y=r*m,k=(i-l)/2,C=(o-y)/2,T=Wr(-k/l),v=Wr(-C/y),x=Wr(i/l),$=Wr(o/y);return{mode:s,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:m,offsetX:k,offsetY:C,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x:T,y:v,width:Math.min(x,1-T),height:Math.min($,1-v)}}}function Mf(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function Rn(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function Nf(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function _f(e,t){return Rn(Nf(e,t),t)}function Lf(e,t){let n=Mf({x:e.x,y:e.y},t);return{x:n.x,y:n.y,width:e.width*t.contentWidth*t.scale,height:e.height*t.contentHeight*t.scale}}function Ur(e,t,n,r){let o=(r?.space??"canvas")==="css"?Rn(e,t):_f(e,t),s=[];for(let a of n.regions)Cn(a,o)&&s.push(a);if(s.length!==0)return s.length===1||!r?.precedence||s.sort((a,d)=>{let m=r.precedence[a.id]??Number.NEGATIVE_INFINITY,l=r.precedence[d.id]??Number.NEGATIVE_INFINITY;return l!==m?l-m:a.id<d.id?-1:a.id>d.id?1:0}),s[0]}function Pd(e,t){let n=jr(e);if(n)return Lf(n,t)}function xd(e){let t=[];e.version!==1&&t.push({code:"version-mismatch",detail:`expected version 1, got ${String(e.version)}`});let n=new Set,r=i=>{if(n.has(i)){t.push({code:"duplicate-id",id:i,detail:`duplicate id ${i}`});return}n.add(i)};for(let i of e.landmarks)r(i.id),Ad(i.point)||t.push({code:"out-of-bounds",id:i.id,detail:`landmark ${i.id} is outside 0\u20131`});for(let i of e.regions){r(i.id);let o=jr(i);if(!i.rect&&!i.polygon){t.push({code:"invalid-shape",id:i.id,detail:`region ${i.id} has neither rect nor polygon`});continue}if(i.polygon&&i.polygon.length<3&&t.push({code:"invalid-shape",id:i.id,detail:`region ${i.id} polygon needs at least 3 points`}),o&&!Vf(o)&&t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} is outside 0\u20131`}),i.polygon){for(let s of i.polygon)if(!Ad(s)){t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} has a vertex outside 0\u20131`});break}}}for(let i=0;i<e.regions.length;i+=1){let o=e.regions[i],s=jr(o);if(s)for(let a=i+1;a<e.regions.length;a+=1){let d=e.regions[a],m=jr(d);m&&Ff(s,m)&&t.push({code:"overlap",id:o.id,with:d.id,detail:`region ${o.id} overlaps ${d.id}`})}}return{ok:t.length===0,diagnostics:t}}function Wr(e){return e<=0?0:e>=1?1:e}function Ad(e){return e.x>=0&&e.x<=1&&e.y>=0&&e.y<=1}function Vf(e){return e.x>=0&&e.y>=0&&e.width>=0&&e.height>=0&&e.x+e.width<=1&&e.y+e.height<=1}function Ff(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function jr(e){if(e.rect)return e.rect;if(!e.polygon||e.polygon.length===0)return;let t=1/0,n=1/0,r=-1/0,i=-1/0;for(let o of e.polygon)t=Math.min(t,o.x),n=Math.min(n,o.y),r=Math.max(r,o.x),i=Math.max(i,o.y);return{x:t,y:n,width:r-t,height:i-n}}function Cn(e,t){return e.polygon&&e.polygon.length>=3?$f(t,e.polygon):e.rect?t.x>=e.rect.x&&t.x<e.rect.x+e.rect.width&&t.y>=e.rect.y&&t.y<e.rect.y+e.rect.height:!1}function $f(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r,r+=1){let o=t[r],s=t[i];o.y>e.y!=s.y>e.y&&e.x<(s.x-o.x)*(e.y-o.y)/(s.y-o.y)+o.x&&(n=!n)}return n}var Jr=1,Hf=["mask","polygon","rect","depth"],Bf=["pass-through","absorb","exclusive","depth-ordered"];var qf=["idle","hover","focus","selected"],Kf="Semantic layer controller has been destroyed",Lv=new Set(Hf),Gf=new Set(Bf),Wf=new Set(Rd);function Td(e){return typeof e=="string"&&Gf.has(e)}function bo(e){return typeof e=="string"&&Wf.has(e)}function Vd(e){let t=[];return e.mask&&t.push("mask"),e.polygon&&e.polygon.length>=3&&t.push("polygon"),e.rect&&t.push("rect"),typeof e.depth=="number"&&Number.isFinite(e.depth)&&t.push("depth"),t}function Dd(e){return e.selected?"selected":e.focus?"focus":e.hover?"hover":"idle"}function vo(e){return JSON.parse(JSON.stringify(e))}function Od(){return{hover:!1,focus:!1,selected:!1}}function yo(e,t){return{hover:t?.hover??e.hover,focus:t?.focus??e.focus,selected:t?.selected??e.selected}}function An(e){return vo(e)}function jn(e){return vo(e??{})}function Md(e,t){let n=e.visuals[t]??e.visuals.idle;return{opacity:n?.opacity??1,blend:n?.blend??e.blend,version:n?.version}}function jf(e,t){let n=e.bounds??{x:0,y:0,width:1,height:1};if(t.x<n.x||t.x>=n.x+n.width||t.y<n.y||t.y>=n.y+n.height||!Number.isInteger(e.width)||!Number.isInteger(e.height)||e.width<1||e.height<1||e.alpha.length!==e.width*e.height)return!1;let r=(t.x-n.x)/n.width,i=(t.y-n.y)/n.height,o=Math.min(e.width-1,Math.max(0,Math.floor(r*e.width))),s=Math.min(e.height-1,Math.max(0,Math.floor(i*e.height)));return(e.alpha[s*e.width+o]??0)>.5}function Uf(e,t){return e.mask?jf(e.mask,t):e.polygon&&e.polygon.length>=3?Cn({id:"",polygon:e.polygon},t):e.rect?Cn({id:"",rect:e.rect},t):typeof e.depth=="number"&&Number.isFinite(e.depth)?t.x>=0&&t.x<=1&&t.y>=0&&t.y<=1:!1}function Jf(e,t){let n=e.hitTest==="exclusive"?1:0,r=t.hitTest==="exclusive"?1:0;if(n!==r)return r-n;let i=e.geometry.depth??0,o=t.geometry.depth??0;return i!==o?o-i:t.order-e.order}function zf(e,t){if(!Number.isInteger(t.width)||!Number.isInteger(t.height)||t.width<1||t.height<1)throw new Error(`region "${e}" mask size is invalid`);if(!Array.isArray(t.alpha)||t.alpha.length!==t.width*t.height)throw new Error(`region "${e}" mask alpha length must be width*height`)}function Nd(e,t){if(!t||typeof t!="object")throw new Error(`region "${e}" geometry is required`);if(t.mask&&zf(e,t.mask),t.polygon&&t.polygon.length>0&&t.polygon.length<3)throw new Error(`region "${e}" polygon needs 3+ points`);if(Vd(t).length===0)throw new Error(`region "${e}" needs mask, polygon, rect, or depth`)}function _d(e,t){if(t!==void 0){if(!t||typeof t!="object")throw new Error(`region "${e}" visuals must be an object`);for(let n of qf){let r=t[n];if(r&&r.blend!==void 0&&!bo(r.blend))throw new Error(`region "${e}" ${n} blend is invalid`)}}}function Ld(e,t){return e instanceof Error?e.message:t}function Yf(e,t){try{return e.layer(t),!0}catch{return!1}}function So(e){if(!e?.regions?.length)throw new Error("createSemanticLayerController: at least one region is required");let t=e.compositor,n=e.visualLayers,r=e.originFrame??0,i=!1,o=new Map,s=()=>{if(i)throw new Error(Kf)};function a(v){let x=Dd(v.state);return{id:v.declaration.id,geometryKinds:Vd(v.geometry),hitTest:v.hitTest,blend:v.blend,order:v.order,depth:v.geometry.depth??0,state:{...v.state},appearance:x,a11y:v.a11y?{...v.a11y}:null,visual:Md(v,x)}}function d(v){let x=Dd(v.state),$=Md(v,x);if(v.visualLayerId&&n&&$.version&&n.override(v.visualLayerId,$.version),v.compositorLayerId&&t){if(!Yf(t,v.compositorLayerId))return;t.setLayer(v.compositorLayerId,{opacity:$.opacity,blend:$.blend,pointerEvents:v.hitTest==="pass-through"?"none":"auto"})}}function m(v){return{geometry:An(v.geometry),hitTest:v.hitTest,blend:v.blend,order:v.order,compositorLayerId:v.compositorLayerId,visualLayerId:v.visualLayerId,visuals:jn(v.visuals),state:{...v.state},a11y:v.a11y?{...v.a11y}:null}}function l(v,x){v.geometry=An(x.geometry),v.hitTest=x.hitTest,v.blend=x.blend,v.order=x.order,v.compositorLayerId=x.compositorLayerId,v.visualLayerId=x.visualLayerId,v.visuals=jn(x.visuals),v.state={...x.state},v.a11y=x.a11y?{...x.a11y}:null}for(let v of e.regions){if(!v?.id)throw new Error("createSemanticLayerController: region id is required");if(o.has(v.id))throw new Error(`createSemanticLayerController: duplicate region id "${v.id}"`);if(Nd(v.id,v.geometry),_d(v.id,v.visuals),v.hitTest&&!Td(v.hitTest))throw new Error(`createSemanticLayerController: region "${v.id}" hitTest is invalid`);if(v.blend&&!bo(v.blend))throw new Error(`createSemanticLayerController: region "${v.id}" blend is invalid`);let x={declaration:v,geometry:An(v.geometry),hitTest:v.hitTest??"absorb",blend:v.blend??"source-over",order:v.order??0,compositorLayerId:v.compositorLayerId??null,visualLayerId:v.visualLayerId??null,visuals:jn(v.visuals),state:yo(Od(),v.initialState),a11y:null};o.set(v.id,x),d(x)}function y(){return[...o.values()].map(a).sort((v,x)=>v.id<x.id?-1:v.id>x.id?1:0)}function k(v){let x=[...o.values()].filter($=>$.hitTest!=="pass-through"&&Uf($.geometry,v));return x.sort(Jf),x[0]?.hitTest==="exclusive"?x.filter($=>$.hitTest==="exclusive"):x[0]?.hitTest==="absorb"?[x[0]]:x}function C(){let v=[...o.values()].map(x=>({id:x.declaration.id,geometry:An(x.geometry),hitTest:x.hitTest,blend:x.blend,order:x.order,compositorLayerId:x.compositorLayerId,visualLayerId:x.visualLayerId,visuals:jn(x.visuals),state:{...x.state},a11y:x.a11y?{...x.a11y}:null})).sort((x,$)=>x.id<$.id?-1:x.id>$.id?1:0);return vo({schemaVersion:Jr,frame:r,regions:v})}function T(v){s();let x=[],$=f=>({ok:!1,errors:[...x,f]}),j=v;if(typeof v=="string")try{j=JSON.parse(v)}catch{return $("snapshot JSON is invalid")}if(!j||typeof j!="object"||Array.isArray(j))return $("snapshot must be an object");let D=j;if(D.schemaVersion!==Jr)return $("unsupported semantic layer snapshot schema");if(typeof D.frame!="number"||!Number.isFinite(D.frame))return $("frame must be finite");if(!Array.isArray(D.regions))return $("regions must be an array");let V=D.regions,A=new Map;for(let f of V){if(!f||typeof f.id!="string"||f.id.length===0){x.push("region id is required");continue}A.has(f.id)&&x.push(`duplicate region "${f.id}"`),A.set(f.id,f),o.has(f.id)||x.push(`unknown region "${f.id}"`),Td(f.hitTest)||x.push(`region "${f.id}" hitTest is invalid`),bo(f.blend)||x.push(`region "${f.id}" blend is invalid`),(typeof f.order!="number"||!Number.isFinite(f.order))&&x.push(`region "${f.id}" order must be finite`);try{Nd(f.id,f.geometry),_d(f.id,f.visuals)}catch(h){x.push(Ld(h,`region "${f.id}" is invalid`))}}for(let f of o.keys())A.has(f)||x.push(`missing region "${f}"`);if(x.length>0)return{ok:!1,errors:x};let p=r,E=new Map;for(let f of o.values())E.set(f.declaration.id,m(f));let c=()=>{r=p;for(let f of o.values()){let h=E.get(f.declaration.id);h&&l(f,h)}for(let f of o.values())d(f)};r=D.frame;for(let f of o.values()){let h=A.get(f.declaration.id);f.geometry=An(h.geometry),f.hitTest=h.hitTest,f.blend=h.blend,f.order=h.order,f.compositorLayerId=h.compositorLayerId??null,f.visualLayerId=h.visualLayerId??null,f.visuals=jn(h.visuals),f.state=yo(Od(),h.state),f.a11y=h.a11y&&typeof h.a11y.name=="string"&&typeof h.a11y.role=="string"?{name:h.a11y.name,role:h.a11y.role}:null}try{for(let f of o.values())d(f)}catch(f){return c(),$(Ld(f,"visual layer apply failed"))}return{ok:!0,snapshot:C()}}return{list(){return s(),y()},inspect(){return s(),y()},inspectPublished(){return s(),y().map(v=>({id:v.id,geometryKinds:v.geometryKinds,a11y:v.a11y}))},get(v){s();let x=o.get(v);return x?a(x):void 0},geometryOf(v){s();let x=o.get(v);return x?An(x.geometry):void 0},setRegionState(v,x){s();let $=o.get(v);if(!$)throw new Error(`createSemanticLayerController: unknown region "${v}"`);let j={...$.state};$.state=yo($.state,x);try{d($)}catch(D){throw $.state=j,D}},setRegionA11y(v,x){s();let $=o.get(v);if(!$)throw new Error(`createSemanticLayerController: unknown region "${v}"`);$.a11y=x?{name:x.name,role:x.role}:null},hitTest(v){s();let x=k(v);return x[0]?a(x[0]):void 0},hitTestAll(v){return s(),k(v).map(a)},snapshot(){return s(),C()},restore:T,destroy(){i||(i=!0,o.clear())},get frame(){return r}}}var Xf=new Set(["string","number","boolean","object","array"]);function pt(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Qf(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if(Tr(t))return t}}function Zf(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function em(e){let t=[];if(!e||typeof e!="object")return[pt("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(pt("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(pt("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(pt("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!Xf.has(r.type))&&t.push(pt("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function tm(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?"array":typeof e=="string"?"string":typeof e=="number"&&Number.isFinite(e)?"number":typeof e=="boolean"?"boolean":typeof e=="object"?"object":"other"}function nm(e,t){if(t===void 0){let i=Object.entries(e.fields).filter(([,o])=>o.optional!==!0);return i.length===0?{ok:!0,payload:void 0}:{ok:!1,errors:i.map(([o])=>pt("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[pt("invalid-payload","payload must be a JSON object")]};let n=t,r=[];for(let[i,o]of Object.entries(e.fields)){if(!(i in n)||n[i]===void 0){o.optional!==!0&&r.push(pt("missing-field",`payload is missing required field "${i}"`,i));continue}let s=tm(n[i]);s!==o.type&&r.push(pt("field-type",`payload.${i} expected ${o.type}, got ${s}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function rm(e,t,n){let r=Zf(e);return{type:e,kind:t,payloadSchema:{version:n.version,fields:{...n.fields}},emitPattern:r,subscribePattern:r,toManifest(){let i={};for(let[o,s]of Object.entries(this.payloadSchema.fields))i[o]={type:s.type,optional:s.optional===!0};return{type:this.type,kind:this.kind,version:this.payloadSchema.version,fields:i,emitPattern:this.emitPattern,subscribePattern:this.subscribePattern}},validatePayload(i){return nm(this.payloadSchema,i)}}}function ko(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(pt("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(pt("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=Qf(t);i?i!==e&&r.push(pt("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(pt("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(...em(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:rm(t,e,n)}}function Fd(e,t){return ko("intent",e,t)}function me(e,t){return ko("state",e,t)}function it(e,t){return ko("diagnostic",e,t)}var zr=1,Io="presentation.sequence.state.requested",Ro="presentation.sequence.state.preloading",Co="presentation.sequence.state.ready",Ao="presentation.sequence.state.started",wo="presentation.sequence.state.step-started",Po="presentation.sequence.state.step-completed",xo="presentation.sequence.state.skipped",To="presentation.sequence.state.interrupted",Hd="presentation.sequence.state.failed",Do="presentation.sequence.state.completed",Bd="presentation.sequence.diagnostic.lifecycle",im=[Io,Ro,Co,Ao,wo,Po,xo,To,Hd,Do,Bd],om=["audio","caption","semantic-region","visual-layer","cue"],sm=["replace","queue","reject","ignore"],am=["duration","immediate"],dm=["unavailable","failed","unauthorized","muted"],cm=["requested","preloading","ready","playing","paused","skipped","interrupted","failed","completed"],um=new Set(om),lm=new Set(sm),pm=new Set(am),fm=new Set(dm),mm=new Set(im),gm="Presentation sequence player has been destroyed";function ae(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function qe(e){return JSON.parse(JSON.stringify(e))}function Ke(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Me(e){return typeof e=="string"&&e.length>0}function Eo(e,t,n){if(typeof e=="function"){n.push(ae("callbacks-forbidden","authored sequences must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Eo(r,`${t}[${i}]`,n));return}if(Ke(e))for(let[r,i]of Object.entries(e))Eo(i,t?`${t}.${r}`:r,n)}function wn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function Ct(){return{version:1,fields:{sequenceId:{type:"string"},invocationId:{type:"string"},idempotencyKey:{type:"string"},stepId:{type:"string",optional:!0},fallbackId:{type:"string",optional:!0},reason:{type:"string",optional:!0}}}}function At(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function hm(){return[At(me(Io,Ct())),At(me(Ro,Ct())),At(me(Co,Ct())),At(me(Ao,Ct())),At(me(wo,Ct())),At(me(Po,Ct())),At(me(xo,Ct())),At(me(To,Ct())),At(me(Hd,Ct())),At(me(Do,Ct())),At(it(Bd,Ct()))]}function ym(e){return typeof e=="string"&&mm.has(e)}function bm(e){if(e)return"timeline"in e?e.timeline:e}function vm(e,t,n){return n?!t||t==="skip"||t==="complete"?0:t.durationFrames:e}function Sm(e,t){return(e.kind==="relative"||e.kind==="simultaneous"?e.delayFrames??0:0)+t}function km(e,t,n){if(!Ke(e)||!Me(e.kind)){n.push(ae("invalid-timing","timing.kind is required",t));return}if(e.kind==="absolute"){wn(e.atFrame)||n.push(ae("invalid-timing","timing.atFrame must be >= 0",t));return}if(e.kind==="relative"){e.afterStepId!==void 0&&!Me(e.afterStepId)&&n.push(ae("invalid-timing","timing.afterStepId must be a string",t)),e.delayFrames!==void 0&&!wn(e.delayFrames)&&n.push(ae("invalid-timing","timing.delayFrames must be >= 0",t));return}if(e.kind==="simultaneous"){Me(e.withStepId)||n.push(ae("invalid-timing","timing.withStepId is required",t)),e.order!==void 0&&!wn(e.order)&&n.push(ae("invalid-timing","timing.order must be >= 0",t)),e.delayFrames!==void 0&&!wn(e.delayFrames)&&n.push(ae("invalid-timing","timing.delayFrames must be >= 0",t));return}n.push(ae("invalid-timing",`unsupported timing.kind "${String(e.kind)}"`,t))}function Em(e,t,n,r){if(!Ke(e)||!Me(e.kind)){r.push(ae("invalid-effect","effect.kind is required",n));return}e.kind!==t&&r.push(ae("kind-mismatch",`effect.kind "${e.kind}" must match track kind "${t}"`,n)),e.kind==="audio"&&!Me(e.assetBinding)&&r.push(ae("invalid-effect","assetBinding is required",n)),e.kind==="caption"&&(Me(e.textBinding)||r.push(ae("invalid-effect","textBinding is required",n)),typeof e.visible!="boolean"&&r.push(ae("invalid-effect","visible must be boolean",n))),e.kind==="semantic-region"&&(Me(e.regionBinding)||r.push(ae("invalid-effect","regionBinding is required",n)),Ke(e.state)||r.push(ae("invalid-effect","state is required",n))),e.kind==="visual-layer"&&(Me(e.layerBinding)||r.push(ae("invalid-effect","layerBinding is required",n)),e.transition!=="show"&&e.transition!=="hide"&&r.push(ae("invalid-effect","transition must be show or hide",n))),e.kind==="cue"&&!Me(e.name)&&r.push(ae("invalid-effect","cue name is required",n))}function Im(e){let t=new Map;for(let n of e.tracks)for(let r of n.steps)t.set(r.id,{track:n,step:r});return t}function Un(e){let t=[];if(Eo(e,"",t),!Ke(e))return{ok:!1,errors:[ae("invalid-definition","sequence must be a JSON object")]};if(Me(e.id)||t.push(ae("invalid-id","id is required","id")),!Array.isArray(e.tracks)||e.tracks.length===0)return t.push(ae("invalid-tracks","tracks must be a non-empty array","tracks")),{ok:!1,errors:t};let n=e.interruptionPolicy??"replace";lm.has(String(n))||t.push(ae("invalid-policy","unsupported interruptionPolicy","interruptionPolicy"));let r=new Set,i=new Set,o=[];e.tracks.forEach((l,y)=>{let k=`tracks[${y}]`;if(!Ke(l)){t.push(ae("invalid-track","track must be an object",k));return}if(!Me(l.id)){t.push(ae("invalid-track","track id is required",`${k}.id`));return}if(i.has(l.id)&&t.push(ae("duplicate-track",`duplicate track id "${l.id}"`,k)),i.add(l.id),!um.has(String(l.kind))){t.push(ae("invalid-kind","unsupported track kind",`${k}.kind`));return}if(!Array.isArray(l.steps)||l.steps.length===0){t.push(ae("invalid-steps","track steps are required",`${k}.steps`));return}let C=[];l.steps.forEach((T,v)=>{let x=`${k}.steps[${v}]`;if(!Ke(T)){t.push(ae("invalid-step","step must be an object",x));return}if(!Me(T.id)){t.push(ae("invalid-step","step id is required",`${x}.id`));return}r.has(T.id)&&t.push(ae("duplicate-step",`duplicate step id "${T.id}"`,x)),r.add(T.id),wn(T.durationFrames)||t.push(ae("invalid-duration","durationFrames must be >= 0",`${x}.durationFrames`)),T.delayFrames!==void 0&&!wn(T.delayFrames)&&t.push(ae("invalid-delay","delayFrames must be >= 0",`${x}.delayFrames`)),T.completion!==void 0&&!pm.has(String(T.completion))&&t.push(ae("invalid-completion","unsupported completion rule",`${x}.completion`)),km(T.timing,`${x}.timing`,t),Em(T.effect,String(l.kind),`${x}.effect`,t),C.push(qe(T))}),o.push({id:l.id,kind:l.kind,steps:C})});let s=[],a=new Set;e.fallbacks!==void 0&&(Array.isArray(e.fallbacks)?e.fallbacks.forEach((l,y)=>{let k=`fallbacks[${y}]`;if(!Ke(l)||!Me(l.id)){t.push(ae("invalid-fallback","fallback id is required",k));return}a.has(l.id)&&t.push(ae("duplicate-fallback",`duplicate fallback id "${l.id}"`,k)),a.add(l.id);let C=l.when;if((!Ke(C)||C.capability!=="audio"||!fm.has(String(C.status)))&&t.push(ae("invalid-fallback","unsupported fallback.when",`${k}.when`)),l.omitTrackIds!==void 0)if(!Array.isArray(l.omitTrackIds))t.push(ae("invalid-fallback","omitTrackIds must be an array",k));else for(let T of l.omitTrackIds)i.has(String(T))||t.push(ae("unknown-track",`omitTrackIds references unknown track "${String(T)}"`,k));s.push(qe(l))}):t.push(ae("invalid-fallbacks","fallbacks must be an array","fallbacks")));let d={id:String(e.id??""),tracks:o,interruptionPolicy:n,fallbacks:s},m=Im(d);for(let{step:l}of m.values())l.timing.kind==="relative"&&l.timing.afterStepId&&(m.has(l.timing.afterStepId)||t.push(ae("unknown-step",`afterStepId "${l.timing.afterStepId}" does not exist`,`steps.${l.id}`))),l.timing.kind==="simultaneous"&&!m.has(l.timing.withStepId)&&t.push(ae("unknown-step",`withStepId "${l.timing.withStepId}" does not exist`,`steps.${l.id}`));return t.length>0?{ok:!1,errors:t}:{ok:!0,sequence:qe(d)}}function $d(e,t,n,r){let i=[];for(let l of e.tracks)if(!t.has(l.id))for(let y of l.steps)i.push({track:l,step:y});let o=new Map(i.map(l=>[l.step.id,l])),s=new Map,a=new Set;function d(l){let y=s.get(l);if(y!==void 0)return y;let k=o.get(l);if(!k||a.has(l))return n;a.add(l);let C=Sm(k.step.timing,k.step.delayFrames??0),T=n+C;if(k.step.timing.kind==="absolute")T=n+k.step.timing.atFrame+(k.step.delayFrames??0);else if(k.step.timing.kind==="relative"&&k.step.timing.afterStepId){let v=o.get(k.step.timing.afterStepId);if(v){let x=d(v.step.id),$=m(v.step);T=x+$+C}}else k.step.timing.kind==="simultaneous"&&(T=d(k.step.timing.withStepId)+C);return a.delete(l),s.set(l,T),T}function m(l){return l.completion==="immediate"?0:vm(l.durationFrames,l.reducedMotion,r)}return i.map(({track:l,step:y})=>{let k=d(y.id),C=m(y),T=y.timing.kind==="simultaneous"?y.timing.order??0:0;return{id:y.id,trackId:l.id,trackKind:l.kind,order:T,startFrame:k,durationFrames:C,endFrame:k+C,effect:qe(y.effect),restoreOnComplete:y.restoreOnComplete===!0,reducedSensory:y.reducedSensory??"keep"}}).sort(qd)}function qd(e,t){return e.startFrame!==t.startFrame?e.startFrame-t.startFrame:e.order!==t.order?e.order-t.order:e.trackId!==t.trackId?e.trackId<t.trackId?-1:1:e.id<t.id?-1:e.id>t.id?1:0}function Ht(e,t){if(!t)return;let n=e?.[t];return Me(n)?n:void 0}function Rm(e,t){let n=e.snapshot().events;for(let r=n.length-1;r>=0;r--){let i=n[r];if(i&&i.idempotencyKey===t&&i.type===Kn)return i.reason??"asset-failed"}}function Cm(e,t,n,r){if(!t.tracks.some(s=>s.kind==="audio"))return"ok";if(!e)return"unavailable";let o=(r&&"broker"in r?r:void 0)?.broker;if(o?.muted)return"muted";for(let s of t.tracks)if(s.kind==="audio")for(let a of s.steps){if(a.effect.kind!=="audio")continue;let d=Ht(n.assets,a.effect.assetBinding);if(!d)continue;let m=Ht(n.channels,a.effect.channelBinding);if(o&&!o.isAuthorized(m)&&o.inspect().authorized.length>0)return"unauthorized";if(o?.assetStatus(d)==="failed")return"failed"}return"ok"}function Oo(e={}){let t=e.originFrame??0,n=!!e.reducedMotion,r=!!e.reducedSensory,i=e.semantic,o=e.visual,s=bm(e.audio),a=e.audio,d=new Map,m=Vt({originFrame:t,reducedMotion:n}),l=t,y=!1,k=!1,C=null,T=null,v=[],x=new Map,$=[],j=new Map;for(let S of e.sequences??[]){let I=Un(S);I.ok&&d.set(I.sequence.id,I.sequence)}function D(){if(k)throw new Error(gm)}function V(S){$.push(qe(S))}function A(S,I,N){let q={type:I,atFrame:l,sequenceId:S.sequenceId,invocationId:S.invocationId,idempotencyKey:S.idempotencyKey};N?.stepId&&(q.stepId=N.stepId),S.selectedFallbackId&&(q.fallbackId=S.selectedFallbackId),N?.reason&&(q.reason=N.reason),V(q)}function p(S){let I=[...S.steps.values()].filter(q=>q.phase==="completed").map(q=>q.resolved.id).sort(),N=[...S.steps.values()].filter(q=>q.phase==="active").map(q=>q.resolved.id).sort();return{sequenceId:S.sequenceId,invocationId:S.invocationId,idempotencyKey:S.idempotencyKey,phase:S.phase,playhead:Math.max(0,l-S.startedAtFrame),startedAtFrame:S.startedAtFrame,completedStepIds:I,activeStepIds:N,selectedFallbackId:S.selectedFallbackId,compiledReducedMotion:S.compiledReducedMotion}}function E(S,I){return qd(S.resolved,I.resolved)}function c(S,I){return`${S.invocationId}:${I}`}function f(S,I){return`${S.invocationId}:${I}`}function h(S){if(S.audioKey&&s?.cancel(S.audioKey),S.captionId){let I=x.get(S.captionId);I&&x.set(S.captionId,{...I,visible:!1})}if(S.regionId&&S.regionKeys&&i){let I={};for(let N of S.regionKeys)I[N]=!1;i.setRegionState(S.regionId,I)}S.visualLayerId&&o&&S.visualTransition==="hide"?o.play({name:`sequence:${S.visualLayerId}:restore`,idempotencyKey:`sequence:${S.visualLayerId}:restore:${l}`,layerId:S.visualLayerId,kind:"show",toVersion:S.visualVersion,durationFrames:0,onDuplicate:"replace"}):S.visualLayerId&&o&&S.visualTransition==="show"&&o.play({name:`sequence:${S.visualLayerId}:restore`,idempotencyKey:`sequence:${S.visualLayerId}:restore:${l}`,layerId:S.visualLayerId,kind:"hide",durationFrames:0,onDuplicate:"replace"}),S.cueKey&&m.cancel(S.cueKey)}function R(S,I){let{resolved:N}=I,q={},Z=r||N.reducedSensory==="skip-audio"||N.reducedSensory==="complete";if(N.effect.kind==="audio"){let z=Ht(S.bindings.assets,N.effect.assetBinding);if(z&&s&&!Z){let ne=f(S,N.id);s.play({name:N.id,idempotencyKey:ne,assetId:z,channelId:Ht(S.bindings.channels,N.effect.channelBinding),durationFrames:N.durationFrames,onDuplicate:"replace"}),q.audioKey=ne,Rm(s,ne)&&(I.applied=q,P(S,"failed"),s.cancel(ne),q.audioKey=void 0)}}else if(N.effect.kind==="caption"){let z=Ht(S.bindings.captions,N.effect.textBinding)??"",ne=c(S,N.effect.textBinding);x.set(ne,{id:ne,text:z,visible:N.effect.visible}),q.captionId=ne}else if(N.effect.kind==="semantic-region"){let z=Ht(S.bindings.regions,N.effect.regionBinding);z&&i&&(i.setRegionState(z,N.effect.state),q.regionId=z,q.regionKeys=["hover","focus","selected"].filter(ne=>N.effect.kind==="semantic-region"&&N.effect.state[ne]!==void 0))}else if(N.effect.kind==="visual-layer"){let z=Ht(S.bindings.layers,N.effect.layerBinding),ne=Ht(S.bindings.versions,N.effect.versionBinding);z&&o&&(o.play({name:`sequence:${N.id}`,idempotencyKey:f(S,N.id),layerId:z,kind:N.effect.transition,toVersion:N.effect.transition==="hide"?void 0:ne,durationFrames:N.durationFrames,onDuplicate:"replace"}),q.visualLayerId=z,q.visualVersion=ne??o.inspect().find(Q=>Q.id===z)?.committedVersion??void 0,q.visualTransition=N.effect.transition)}else if(N.effect.kind==="cue"){let z=f(S,N.id);m.play({name:N.effect.name,idempotencyKey:z,durationFrames:N.durationFrames,easing:N.effect.easing,onDuplicate:"replace"}),q.cueKey=z}I.applied=q}function M(S,I,N){if(I.phase==="active"){if(N){I.applied&&h(I.applied),I.phase="skipped";return}I.resolved.restoreOnComplete&&I.applied?h(I.applied):I.applied?.audioKey&&I.resolved.effect.kind,I.phase="completed",A(S,Po,{stepId:I.resolved.id})}}function P(S,I){let N=d.get(S.sequenceId);if(!N)return!1;let q=(N.fallbacks??[]).find(z=>z.when.capability==="audio"&&z.when.status===I);if(!q)return!1;if(S.selectedFallbackId===q.id)return!0;S.selectedFallbackId=q.id;let Z=new Set(q.omitTrackIds??[]);for(let z of S.steps.values())Z.has(z.resolved.trackId)&&(z.phase==="pending"?z.phase="skipped":z.phase==="active"&&M(S,z,!0));return!0}function F(S){let I=[...S.steps.values()].filter(N=>N.phase==="pending"&&N.resolved.startFrame<=l).sort(E);for(let N of I)N.phase="active",A(S,wo,{stepId:N.resolved.id}),R(S,N),N.resolved.durationFrames===0&&N.phase==="active"&&M(S,N,!1)}function W(S){let I=[...S.steps.values()].filter(N=>N.phase==="active"&&l>=N.resolved.endFrame).sort(E);for(let N of I)M(S,N,!1)}function O(S){return S.phase==="playing"||S.phase==="paused"||S.phase==="ready"||S.phase==="preloading"||S.phase==="requested"}function u(S){!O(S)||[...S.steps.values()].some(N=>N.phase==="pending"||N.phase==="active")||(S.phase="completed",S.nextAvailable=!0,A(S,Do),C===S&&(C=null,y=!1),G())}function b(S,I){for(let N of[...S.steps.values()].sort(E))N.phase==="active"?M(S,N,!0):N.phase==="pending"&&(N.phase="skipped")}function w(S,I,N,q,Z=l,z=n){let ne=$d(S,q,Z,z),Q=new Map;for(let he of ne)Q.set(he.id,{resolved:he,phase:"pending",applied:null});return{sequenceId:S.id,invocationId:I.invocationId,idempotencyKey:I.idempotencyKey??I.invocationId,bindings:qe(I.bindings??{}),interruptionPolicy:S.interruptionPolicy??"replace",selectedFallbackId:N,phase:"requested",startedAtFrame:l,steps:Q,nextAvailable:!1,compiledReducedMotion:z}}function L(S,I){if(!Me(I.invocationId))return{ok:!1,reason:"invalid",detail:"invocationId is required"};let N=I.idempotencyKey??I.invocationId;if(j.get(N)&&C&&C.idempotencyKey===N)return{ok:!0,invocation:p(C)};let Z=I.bindings??{};V({type:Io,atFrame:l,sequenceId:S.id,invocationId:I.invocationId,idempotencyKey:N});let z={sequenceId:S.id,invocationId:I.invocationId,idempotencyKey:N,bindings:qe(Z),interruptionPolicy:S.interruptionPolicy??"replace",selectedFallbackId:null,phase:"preloading",startedAtFrame:l,steps:new Map,nextAvailable:!1,compiledReducedMotion:n};A(z,Ro);let Q=Cm(s,S,Z,a),he=null,ke=new Set;if(Q!=="ok"){let Pe=(S.fallbacks??[]).find(H=>H.when.capability==="audio"&&H.when.status===Q);if(Pe){he=Pe.id;for(let H of Pe.omitTrackIds??[])ke.add(H)}else if(Q==="unavailable"||Q==="failed")for(let H of S.tracks)H.kind==="audio"&&ke.add(H.id)}if(r)for(let Pe of S.tracks)Pe.kind==="audio"&&ke.add(Pe.id);let Ce=w(S,{...I,idempotencyKey:N},he,ke);return Ce.phase="ready",A(Ce,Co),Ce.phase="playing",A(Ce,Ao),C=Ce,T={sequenceId:S.id,options:{...I,idempotencyKey:N}},j.set(N,Ce.invocationId),W(Ce),F(Ce),u(Ce),{ok:!0,invocation:p(Ce)}}function _(S){if(!C||!O(C))return;let I=C;b(I,!0),I.phase="interrupted",I.nextAvailable=!0,A(I,To,{reason:S}),C=null,y=!1}function G(){if(C||y)return;let S=v.shift();if(!S)return;let I=d.get(S.sequenceId);I&&L(I,S.options)}function U(S,I){let N=new Set;if(I){let q=(S.fallbacks??[]).find(Z=>Z.id===I);for(let Z of q?.omitTrackIds??[])N.add(Z)}return $d(S,N,t,n).map(q=>({sequenceId:S.id,stepId:q.id,trackId:q.trackId,kind:q.trackKind,startFrame:q.startFrame,durationFrames:q.durationFrames,order:q.order,effect:qe(q.effect)}))}function B(){return qe({schemaVersion:zr,frame:l,reducedMotion:n,reducedSensory:r,paused:y,active:C?p(C):null,queue:v.map(S=>({sequenceId:S.sequenceId,invocationId:S.options.invocationId,idempotencyKey:S.options.idempotencyKey??S.options.invocationId,bindings:qe(S.options.bindings??{})})),captions:[...x.values()].sort((S,I)=>S.id<I.id?-1:1),events:$.map(S=>qe(S)),bindings:C?qe(C.bindings):null})}function g(S){for(let I of[...S.steps.values()].sort(E)){if(I.phase!=="active")continue;let N=Math.max(0,I.resolved.endFrame-l);I.resolved={...I.resolved,durationFrames:N,endFrame:l+N},R(S,I)}}return{define(S){D();let I=Un(S);return I.ok&&d.set(I.sequence.id,I.sequence),I},playSequence(S,I){D();let N=d.get(S);if(!N)return{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${S}"`};let q=I.idempotencyKey??I.invocationId;if(C&&O(C)&&C.idempotencyKey===q)return{ok:!0,invocation:p(C)};if(C&&O(C)){let Z=C.interruptionPolicy;if(Z==="reject")return{ok:!1,reason:"busy",detail:"sequence is already playing"};if(Z==="ignore")return{ok:!0,invocation:p(C)};if(Z==="queue")return v.push({sequenceId:S,options:{...I,idempotencyKey:q}}),{ok:!0,invocation:{sequenceId:S,invocationId:I.invocationId,idempotencyKey:q,phase:"requested",playhead:0,startedAtFrame:l,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n}};_("replace")}return L(N,{...I,idempotencyKey:q})},skip(S){if(D(),!C||!O(C)||S&&C.invocationId!==S)return!1;let I=C;return b(I,!0),I.phase="skipped",I.nextAvailable=!0,A(I,xo),C=null,y=!1,G(),!0},replay(S){D();let I=C&&O(C)?C:null,N=I?{sequenceId:I.sequenceId,options:{invocationId:I.invocationId,idempotencyKey:I.idempotencyKey,bindings:qe(I.bindings)}}:T;if(!N)return{ok:!1,reason:"invalid",detail:"no sequence to replay"};if(S&&N.options.invocationId!==S)return{ok:!1,reason:"invalid",detail:"unknown invocation"};let q=d.get(N.sequenceId);return q?(j.delete(N.options.idempotencyKey??N.options.invocationId),I&&(b(I,!0),C=null,y=!1),L(q,N.options)):{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${N.sequenceId}"`}},pause(){return D(),!C||C.phase!=="playing"?!1:(y=!0,C.phase="paused",!0)},resume(){return D(),!C||C.phase!=="paused"?!1:(y=!1,C.phase="playing",!0)},cancel(S){return D(),!C||!O(C)||S&&C.invocationId!==S?!1:(_("cancel"),G(),!0)},step(S=1){D();let I=Number.isFinite(S)?Math.max(0,Math.floor(S)):0,N=$.length;if(y)return[];for(let q=0;q<I;q++)l+=1,m.step(1),s?.step(1),o?.step(1),C&&O(C)?(W(C),F(C),u(C)):G();return $.slice(N).map(q=>qe(q))},snapshot(){return D(),B()},restore(S){D();let I={frame:l,paused:y,active:C,queue:v.slice(),captions:new Map(x),events:$.slice(),seenKeys:new Map(j),presentation:m,reducedMotion:n,reducedSensory:r},N=Q=>{l=I.frame,y=I.paused,C=I.active,v.length=0,v.push(...I.queue),x.clear();for(let[he,ke]of I.captions)x.set(he,ke);$.length=0,$.push(...I.events),j.clear();for(let[he,ke]of I.seenKeys)j.set(he,ke);return m=I.presentation,n=I.reducedMotion,r=I.reducedSensory,{ok:!1,errors:Q}},q=S;if(typeof S=="string")try{q=JSON.parse(S)}catch{return N([ae("invalid-json","snapshot JSON is invalid")])}if(!Ke(q))return N([ae("invalid-snapshot","snapshot must be a JSON object")]);let Z=[];q.schemaVersion!==zr&&Z.push(ae("unsupported-schema","unsupported presentation sequence snapshot schema")),(typeof q.frame!="number"||!Number.isFinite(q.frame))&&Z.push(ae("invalid-snapshot","frame must be finite","frame"));let z=q.active;if(z!=null&&(!Ke(z)||!Me(z.sequenceId)?Z.push(ae("invalid-snapshot","active.sequenceId is required","active")):d.has(z.sequenceId)||Z.push(ae("unknown-sequence",`unknown sequence "${z.sequenceId}"`,"active.sequenceId"))),q.queue!==void 0&&(Array.isArray(q.queue)?q.queue.forEach((Q,he)=>{let ke=`queue[${he}]`;if(!Ke(Q)||!Me(Q.sequenceId)){Z.push(ae("invalid-snapshot","queue item sequenceId is required",ke));return}d.has(Q.sequenceId)||Z.push(ae("unknown-sequence",`unknown sequence "${Q.sequenceId}"`,ke)),Me(Q.invocationId)||Z.push(ae("invalid-snapshot","queue item invocationId is required",ke))}):Z.push(ae("invalid-snapshot","queue must be an array","queue"))),Z.length>0)return N(Z);let ne=q.frame;if(typeof ne!="number"||!Number.isFinite(ne))return N([ae("invalid-snapshot","frame must be finite","frame")]);try{if(C&&O(C)&&b(C,!0),x.clear(),v.length=0,$.length=0,j.clear(),y=q.paused===!0,l=ne,typeof q.reducedMotion=="boolean"&&(n=q.reducedMotion),typeof q.reducedSensory=="boolean"&&(r=q.reducedSensory),m=Vt({originFrame:l,reducedMotion:!1}),Array.isArray(q.events))for(let Q of q.events)Ke(Q)&&ym(Q.type)&&$.push(qe(Q));if(Array.isArray(q.captions))for(let Q of q.captions)Ke(Q)&&Me(Q.id)&&x.set(Q.id,{id:Q.id,text:typeof Q.text=="string"?Q.text:"",visible:Q.visible===!0});if(Array.isArray(q.queue))for(let Q of q.queue)!Ke(Q)||!Me(Q.sequenceId)||!Me(Q.invocationId)||d.has(Q.sequenceId)&&v.push({sequenceId:Q.sequenceId,options:{invocationId:Q.invocationId,idempotencyKey:Me(Q.idempotencyKey)?Q.idempotencyKey:Q.invocationId,bindings:Ke(Q.bindings)?qe(Q.bindings):{}}});if(C=null,Ke(z)&&Me(z.sequenceId)){let Q=d.get(z.sequenceId),he=typeof z.compiledReducedMotion=="boolean"?z.compiledReducedMotion:n,ke=cm.includes(z.phase)?z.phase:"playing";if(ke==="skipped"||ke==="completed"||ke==="interrupted"||ke==="failed"){let Ce=typeof z.startedAtFrame=="number"?z.startedAtFrame:t,Pe=w(Q,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:Ke(q.bindings)?qe(q.bindings):{}},Me(z.selectedFallbackId)?z.selectedFallbackId:null,new Set(ke==="skipped"?Q.tracks.map(H=>H.id):[]),Ce,he);Pe.phase=ke,Pe.startedAtFrame=Ce;for(let H of Pe.steps.values())H.phase="skipped";Pe.nextAvailable=!0,C=null,j.set(Pe.idempotencyKey,Pe.invocationId)}else{let Ce=new Set,Pe=Me(z.selectedFallbackId)?z.selectedFallbackId:null;if(Pe){let X=(Q.fallbacks??[]).find(ee=>ee.id===Pe);for(let ee of X?.omitTrackIds??[])Ce.add(ee)}let H=w(Q,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:Ke(q.bindings)?qe(q.bindings):{}},Pe,Ce,typeof z.startedAtFrame=="number"?z.startedAtFrame:t,he);H.phase=y?"paused":"playing",H.startedAtFrame=typeof z.startedAtFrame=="number"?z.startedAtFrame:t;let Y=new Set(Array.isArray(z.completedStepIds)?z.completedStepIds.filter(X=>typeof X=="string"):[]),re=new Set(Array.isArray(z.activeStepIds)?z.activeStepIds.filter(X=>typeof X=="string"):[]);for(let X of H.steps.values())Y.has(X.resolved.id)?X.phase="completed":re.has(X.resolved.id)||X.resolved.startFrame<=l?X.resolved.endFrame<=l?X.phase="completed":X.phase="active":X.phase="pending";C=H,j.set(H.idempotencyKey,H.invocationId),g(H)}}return m.setReducedMotion(n),{ok:!0,snapshot:B()}}catch(Q){return N([ae("restore-failed",Q instanceof Error?Q.message:String(Q))])}},inspect(){D();let S=C?d.get(C.sequenceId):void 0;return{frame:l,paused:y,reducedMotion:n,reducedSensory:r,active:C?p(C):null,queue:v.map(I=>({sequenceId:I.sequenceId,invocationId:I.options.invocationId,idempotencyKey:I.options.idempotencyKey??I.options.invocationId,phase:"requested",playhead:0,startedAtFrame:l,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n})),captions:[...x.values()].sort((I,N)=>I.id<N.id?-1:1),cueIntent:S?U(S,C?.selectedFallbackId??void 0):[]}},inspectCueIntent(S,I){D();let N=d.get(S);return N?U(N,I?.fallbackId):[]},get(S){D();let I=d.get(S);return I?qe(I):void 0},destroy(){k||(C&&O(C)&&b(C,!0),k=!0,C=null,v.length=0,x.clear(),$.length=0)},setReducedMotion(S){D(),n=!!S,m.setReducedMotion(n)},get frame(){return l},get reducedMotion(){return n},get reducedSensory(){return r}}}var Jn=1,Mo=1,ti="presentation.binding.state.applied",Qr="presentation.binding.state.rejected",Zr="presentation.binding.diagnostic.lifecycle",Am=[ti,Qr,Zr],wm=["visual-layer","presence","prop","semantic-region","hotspot","sequence","asset"],Pm=["invalid-manifest","invalid-schema","invalid-version","invalid-id","unknown-field","unknown-resource","unknown-selector","duplicate-id","duplicate-priority","uncovered-default","impossible-target","callbacks-forbidden","invalid-predicate","invalid-projection","invalid-snapshot","destroyed"],xm=new Set(wm),Uv=new Set(Am),Jv=new Set(Pm),Tm="Presentation binding runtime has been destroyed",Lo=/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/,Dm=new Set(["show","hide","replace"]),Om=new Set(["id","schemaVersion","bindings","defaults","resources"]),Mm=new Set(["id","priority","when","targets"]),Nm=new Set(["layers","versions","regions","sequences","hotspots","entities","props","assets"]),_m=new Set(["labels","reducedSensory","reducedMotion"]);function oe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function ot(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ne(e){return typeof e=="string"&&e.length>0}function Ge(e){return JSON.parse(JSON.stringify(e))}function ei(e,t,n){if(typeof e=="function"){n.push(oe("callbacks-forbidden","authored bindings must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>ei(r,`${t}[${i}]`,n));return}if(ot(e))for(let[r,i]of Object.entries(e))ei(i,t?`${t}.${r}`:r,n)}function Ue(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(oe("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function Kd(e){return e===null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function No(){return{version:1,fields:{manifestId:{type:"string"},revision:{type:"string",optional:!0},selectedBindingIds:{type:"array",optional:!0},reason:{type:"string",optional:!0},usedFallback:{type:"boolean",optional:!0}}}}function _o(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Lm(){return[_o(me(ti,No())),_o(me(Qr,No())),_o(it(Zr,No()))]}function Bt(e){switch(e.kind){case"visual-layer":return`visual-layer:${e.layerId}`;case"presence":return`presence:${e.entityId}`;case"prop":return`prop:${e.propId}`;case"semantic-region":return`semantic-region:${e.regionId}`;case"hotspot":return`hotspot:${e.hotspotId}`;case"sequence":return`sequence:${e.sequenceId}`;case"asset":return`asset:${e.bindingId}`}}function Vm(e){if(e==null)return"missing";if(!ot(e))return"invalid";let t=[];if(ei(e,"",t),t.length>0)return"invalid";try{return Ge(e)}catch{return"invalid"}}function Fm(e,t){if(!Lo.test(t))return{found:!1,value:void 0};let n=e;for(let r of t.split(".")){if(!ot(n)||!Object.prototype.hasOwnProperty.call(n,r))return{found:!1,value:void 0};n=n[r]}return{found:!0,value:n}}function $m(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="function"?n:void 0}function Yr(e,t,n){if("all"in e){for(let i of e.all){let o=Yr(i,t,n);if(!o.ok)return o}return{ok:!0}}if("any"in e){let i={ok:!1,detail:"no alternative matched"};for(let o of e.any){let s=Yr(o,t,n);if(s.ok)return s;i=s}return i}if("not"in e){let i=Yr(e.not,t,n);return{ok:!i.ok,detail:i.ok?"negation failed":void 0}}if("selector"in e){let i=$m(n,e.selector);if(!i)return{ok:!1,detail:`unknown selector "${e.selector}"`};try{return{ok:!!i(t)}}catch(o){return{ok:!1,detail:o instanceof Error?o.message:"selector threw"}}}let r=Fm(t,e.path);return"present"in e?{ok:(r.found&&r.value!==null&&r.value!==void 0)===e.present}:"neq"in e?r.found?{ok:r.value!==e.neq}:{ok:!0,detail:"path missing"}:r.found?{ok:r.value===e.eq}:{ok:!1,detail:`missing path "${e.path}"`}}function Xr(e,t,n){if(!ot(e)){n.push(oe("invalid-predicate","predicate must be an object",t));return}if("all"in e||"any"in e||"not"in e){if("all"in e){if(Ue(e,new Set(["all"]),t,n),!Array.isArray(e.all)||e.all.length===0){n.push(oe("invalid-predicate","all requires a non-empty array",`${t}.all`));return}return{all:e.all.map((a,d)=>Xr(a,`${t}.all[${d}]`,n)).filter(a=>!!a)}}if("any"in e){if(Ue(e,new Set(["any"]),t,n),!Array.isArray(e.any)||e.any.length===0){n.push(oe("invalid-predicate","any requires a non-empty array",`${t}.any`));return}return{any:e.any.map((a,d)=>Xr(a,`${t}.any[${d}]`,n)).filter(a=>!!a)}}Ue(e,new Set(["not"]),t,n);let o=Xr(e.not,`${t}.not`,n);return o?{not:o}:void 0}if("selector"in e){if(Ue(e,new Set(["selector"]),t,n),!Ne(e.selector)){n.push(oe("invalid-predicate","selector is required",`${t}.selector`));return}return{selector:e.selector}}if(Ue(e,new Set(["path","eq","neq","present"]),t,n),(!Ne(e.path)||!Lo.test(e.path))&&n.push(oe("invalid-predicate","path must be a dotted identifier",`${t}.path`)),[e.eq!==void 0,e.neq!==void 0,e.present!==void 0].filter(Boolean).length!==1){n.push(oe("invalid-predicate","predicate needs exactly one of eq, neq, or present",t));return}if(!(!Ne(e.path)||!Lo.test(e.path))){if(e.present!==void 0){if(typeof e.present!="boolean"){n.push(oe("invalid-predicate","present must be a boolean",`${t}.present`));return}return{path:e.path,present:e.present}}if(e.neq!==void 0){if(!Kd(e.neq)){n.push(oe("invalid-predicate","neq must be a JSON primitive",`${t}.neq`));return}return{path:e.path,neq:e.neq}}if(!Kd(e.eq)){n.push(oe("invalid-predicate","eq must be a JSON primitive",`${t}.eq`));return}return{path:e.path,eq:e.eq}}}function Hm(e,t,n){if(e===void 0)return;if(!ot(e)){n.push(oe("impossible-target","region state must be an object",t));return}Ue(e,new Set(["hover","focus","selected"]),t,n);let r={};for(let i of["hover","focus","selected"]){let o=e[i];if(o!==void 0){if(typeof o!="boolean"){n.push(oe("impossible-target",`${i} must be a boolean`,`${t}.${i}`));continue}r[i]=o}}return r}function Vo(e,t,n,r){if(!ot(e)){n.push(oe("impossible-target","target must be an object",t));return}if(!xm.has(String(e.kind))){n.push(oe("impossible-target",`unsupported target kind "${String(e.kind)}"`,`${t}.kind`));return}let i=e.kind;if(i==="visual-layer"){if(Ue(e,new Set(["kind","layerId","version","transition"]),t,n),!Ne(e.layerId)){n.push(oe("impossible-target","layerId is required",`${t}.layerId`));return}if(!Ne(e.version)){n.push(oe("impossible-target","version is required",`${t}.version`));return}e.transition!==void 0&&!Dm.has(String(e.transition))&&n.push(oe("impossible-target","transition must be show, hide, or replace",`${t}.transition`)),r?.layers&&!r.layers.includes(e.layerId)&&n.push(oe("unknown-resource",`unknown layer "${e.layerId}"`,`${t}.layerId`));let o=r?.versions?.[e.layerId];o&&!o.includes(e.version)&&n.push(oe("unknown-resource",`unknown version "${e.version}" on "${e.layerId}"`,`${t}.version`));let s={kind:"visual-layer",layerId:e.layerId,version:e.version};return(e.transition==="show"||e.transition==="hide"||e.transition==="replace")&&(s.transition=e.transition),s}if(i==="presence"){if(Ue(e,new Set(["kind","entityId","present","regionId"]),t,n),!Ne(e.entityId)){n.push(oe("impossible-target","entityId is required",`${t}.entityId`));return}if(typeof e.present!="boolean"){n.push(oe("impossible-target","present must be a boolean",`${t}.present`));return}r?.entities&&!r.entities.includes(e.entityId)&&n.push(oe("unknown-resource",`unknown entity "${e.entityId}"`,`${t}.entityId`)),e.regionId!==void 0&&!Ne(e.regionId)&&n.push(oe("impossible-target","regionId must be a string",`${t}.regionId`));let o={kind:"presence",entityId:e.entityId,present:e.present};return Ne(e.regionId)&&(o.regionId=e.regionId),o}if(i==="prop"){if(Ue(e,new Set(["kind","propId","visible","layerId"]),t,n),!Ne(e.propId)){n.push(oe("impossible-target","propId is required",`${t}.propId`));return}if(typeof e.visible!="boolean"){n.push(oe("impossible-target","visible must be a boolean",`${t}.visible`));return}r?.props&&!r.props.includes(e.propId)&&n.push(oe("unknown-resource",`unknown prop "${e.propId}"`,`${t}.propId`));let o={kind:"prop",propId:e.propId,visible:e.visible};return Ne(e.layerId)&&(o.layerId=e.layerId),o}if(i==="semantic-region"){if(Ue(e,new Set(["kind","regionId","state","hitTestEnabled"]),t,n),!Ne(e.regionId)){n.push(oe("impossible-target","regionId is required",`${t}.regionId`));return}r?.regions&&!r.regions.includes(e.regionId)&&n.push(oe("unknown-resource",`unknown region "${e.regionId}"`,`${t}.regionId`)),e.hitTestEnabled!==void 0&&typeof e.hitTestEnabled!="boolean"&&n.push(oe("impossible-target","hitTestEnabled must be a boolean",`${t}.hitTestEnabled`));let o=Hm(e.state,`${t}.state`,n),s={kind:"semantic-region",regionId:e.regionId};return o&&(s.state=o),typeof e.hitTestEnabled=="boolean"&&(s.hitTestEnabled=e.hitTestEnabled),s}if(i==="hotspot"){if(Ue(e,new Set(["kind","hotspotId","enabled","regionId"]),t,n),!Ne(e.hotspotId)){n.push(oe("impossible-target","hotspotId is required",`${t}.hotspotId`));return}if(typeof e.enabled!="boolean"){n.push(oe("impossible-target","enabled must be a boolean",`${t}.enabled`));return}r?.hotspots&&!r.hotspots.includes(e.hotspotId)&&n.push(oe("unknown-resource",`unknown hotspot "${e.hotspotId}"`,`${t}.hotspotId`));let o={kind:"hotspot",hotspotId:e.hotspotId,enabled:e.enabled};return Ne(e.regionId)&&(o.regionId=e.regionId),o}if(i==="sequence"){if(Ue(e,new Set(["kind","sequenceId","play"]),t,n),!Ne(e.sequenceId)){n.push(oe("impossible-target","sequenceId is required",`${t}.sequenceId`));return}e.play!==void 0&&typeof e.play!="boolean"&&n.push(oe("impossible-target","play must be a boolean",`${t}.play`)),r?.sequences&&!r.sequences.includes(e.sequenceId)&&n.push(oe("unknown-resource",`unknown sequence "${e.sequenceId}"`,`${t}.sequenceId`));let o={kind:"sequence",sequenceId:e.sequenceId};return typeof e.play=="boolean"&&(o.play=e.play),o}if(Ue(e,new Set(["kind","bindingId","assetId"]),t,n),!Ne(e.bindingId)){n.push(oe("impossible-target","bindingId is required",`${t}.bindingId`));return}if(!Ne(e.assetId)){n.push(oe("impossible-target","assetId is required",`${t}.assetId`));return}return r?.assets&&!r.assets.includes(e.assetId)&&n.push(oe("unknown-resource",`unknown asset "${e.assetId}"`,`${t}.assetId`)),{kind:"asset",bindingId:e.bindingId,assetId:e.assetId}}function Bm(e,t,n){if(e===void 0)return;if(!ot(e)){n.push(oe("invalid-manifest","resources must be an object",t));return}Ue(e,Nm,t,n);let r={},i=(k,C)=>{if(k!==void 0){if(!Array.isArray(k)||k.some(T=>!Ne(T))){n.push(oe("invalid-manifest",`${C} must be a string array`,`${t}.${C}`));return}return k.slice()}},o=i(e.layers,"layers");o&&(r.layers=o);let s=i(e.regions,"regions");s&&(r.regions=s);let a=i(e.sequences,"sequences");a&&(r.sequences=a);let d=i(e.hotspots,"hotspots");d&&(r.hotspots=d);let m=i(e.entities,"entities");m&&(r.entities=m);let l=i(e.props,"props");l&&(r.props=l);let y=i(e.assets,"assets");if(y&&(r.assets=y),e.versions!==void 0)if(!ot(e.versions))n.push(oe("invalid-manifest","versions must be an object",`${t}.versions`));else{let k={};for(let[C,T]of Object.entries(e.versions)){if(!Array.isArray(T)||T.some(v=>!Ne(v))){n.push(oe("invalid-manifest",`versions.${C} must be a string array`,`${t}.versions.${C}`));continue}k[C]=T.slice()}r.versions=k}return r}function ni(e){let t=[];if(ei(e,"",t),!ot(e))return{ok:!1,errors:[oe("invalid-manifest","bindings manifest must be a JSON object")]};Ue(e,Om,"",t),Ne(e.id)||t.push(oe("invalid-id","id is required","id")),e.schemaVersion!==Mo&&t.push(oe("invalid-version",`schemaVersion must be ${Mo}`,"schemaVersion")),Array.isArray(e.bindings)||t.push(oe("invalid-manifest","bindings must be an array","bindings")),(!Array.isArray(e.defaults)||e.defaults.length===0)&&t.push(oe("uncovered-default","defaults must cover required presentation targets","defaults"));let n=Bm(e.resources,"resources",t),r=new Set,i=[];Array.isArray(e.bindings)&&e.bindings.forEach((m,l)=>{let y=`bindings[${l}]`;if(!ot(m)){t.push(oe("invalid-manifest","binding must be an object",y));return}if(Ue(m,Mm,y,t),!Ne(m.id)){t.push(oe("invalid-id","binding id is required",`${y}.id`));return}r.has(m.id)&&t.push(oe("duplicate-id",`duplicate binding id "${m.id}"`,`${y}.id`)),r.add(m.id),(typeof m.priority!="number"||!Number.isFinite(m.priority))&&t.push(oe("invalid-manifest","priority must be a finite number",`${y}.priority`));let k=Xr(m.when,`${y}.when`,t);if(!Array.isArray(m.targets)||m.targets.length===0){t.push(oe("impossible-target","binding targets are required",`${y}.targets`));return}let C=m.targets.map((T,v)=>Vo(T,`${y}.targets[${v}]`,t,n)).filter(T=>!!T);!k||typeof m.priority!="number"||!Number.isFinite(m.priority)||i.push({id:m.id,priority:m.priority,when:k,targets:C})});let o=[],s=new Set;Array.isArray(e.defaults)&&e.defaults.forEach((m,l)=>{let y=Vo(m,`defaults[${l}]`,t,n);if(!y)return;let k=Bt(y);s.has(k)&&t.push(oe("duplicate-priority",`duplicate default target "${k}"`,`defaults[${l}]`)),s.add(k),o.push(y)});let a=new Map,d=new Set;for(let m of i){let l=new Set;for(let y of m.targets){let k=Bt(y);d.add(k),l.has(k)&&t.push(oe("duplicate-priority",`binding "${m.id}" repeats target "${k}"`,`bindings.${m.id}`)),l.add(k);let C=a.get(k);C||(C=new Map,a.set(k,C));let T=C.get(m.priority);T?t.push(oe("duplicate-priority",`bindings "${T}" and "${m.id}" share priority ${m.priority} on "${k}"`,`bindings.${m.id}`)):C.set(m.priority,m.id)}}for(let m of d)s.has(m)||t.push(oe("uncovered-default",`required target "${m}" has no default`,"defaults"));return t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:Ge({id:String(e.id),schemaVersion:Mo,bindings:i,defaults:o,...n?{resources:n}:{}})}}function jd(e){return{considered:[],winners:{},rejected:[],fallbacks:[],fallbackReason:e}}function Gd(e,t){let n=jd(t==="uncovered-default"?null:t),r=[],i={};for(let o of e.defaults){let s=Bt(o);r.push(Ge(o)),i[s]={bindingId:null,target:Ge(o)},n.fallbacks.push({targetKey:s,reason:t})}return n.winners=i,{selectedBindingIds:[],targets:r,usedFallback:t!=="uncovered-default",fallbackReason:t==="uncovered-default"?null:t,explanation:n}}function Fo(e,t,n={}){let r=Vm(t);if(r==="missing")return Gd(e,"missing-state");if(r==="invalid")return Gd(e,"invalid-projection");let i=jd(null),o=[];for(let l of e.bindings){let y=Yr(l.when,r,n);if(i.considered.push({bindingId:l.id,predicateResult:y.ok,...y.detail?{detail:y.detail}:{}}),y.ok)o.push(l);else for(let k of l.targets)i.rejected.push({bindingId:l.id,targetKey:Bt(k),reason:"predicate-false"})}o.sort((l,y)=>y.priority-l.priority||(l.id<y.id?-1:l.id>y.id?1:0));let s=new Map;for(let l of o)for(let y of l.targets){let k=Bt(y),C=s.get(k);if(!C){s.set(k,{bindingId:l.id,priority:l.priority,target:Ge(y)});continue}l.priority<C.priority&&i.rejected.push({bindingId:l.id,targetKey:k,reason:"lower-priority"})}for(let l of e.defaults){let y=Bt(l);s.has(y)||(i.fallbacks.push({targetKey:y,reason:"uncovered-default"}),i.winners[y]={bindingId:null,target:Ge(l)})}for(let[l,y]of s)i.winners[l]={bindingId:y.bindingId,target:Ge(y.target)};let a=[...new Set([...s.values()].sort((l,y)=>y.priority-l.priority||(l.bindingId<y.bindingId?-1:1)).map(l=>l.bindingId))],d=[],m=new Set;for(let l of e.defaults){let y=Bt(l),k=s.get(y),C=k?k.target:l;m.has(y)||(m.add(y),d.push(Ge(C)))}for(let[l,y]of s)m.has(l)||(m.add(l),d.push(Ge(y.target)));return{selectedBindingIds:a,targets:d,usedFallback:!1,fallbackReason:null,explanation:i}}function qm(e,t){let n={},r={},i={},o={},s={},a={},d={},m=t.sequences?.inspect().active;for(let l of e){if(l.kind==="visual-layer"&&(n[l.layerId]=l.version),l.kind==="presence"&&(r[l.entityId]=l.present),l.kind==="prop"&&(i[l.propId]=l.visible),l.kind==="semantic-region"&&(o[l.regionId]={...l.state??{},...l.hitTestEnabled!==void 0?{hitTestEnabled:l.hitTestEnabled}:{}}),l.kind==="hotspot"&&(s[l.hotspotId]=l.enabled),l.kind==="sequence"){let y=l.play!==!1,k=y&&m&&m.sequenceId===l.sequenceId&&(m.phase==="playing"||m.phase==="paused"||m.phase==="requested"||m.phase==="preloading"||m.phase==="ready");a[l.sequenceId]=k?"playing":"idle",y&&k&&(a[l.sequenceId]="playing")}l.kind==="asset"&&(d[l.bindingId]=l.assetId)}return{revision:t.revision,selectedBindingIds:t.selectedBindingIds.slice(),layers:n,presence:r,props:i,regions:o,hotspots:s,sequences:a,assets:d,override:t.override?Ge(t.override):null,usedFallback:t.usedFallback,fallbackReason:t.fallbackReason,explanation:t.explanation?Ge(t.explanation):null}}function Km(e,t){return e?JSON.stringify(e)===JSON.stringify(t):!1}function Wd(e,t){if(e===null)return null;if(e===void 0)return;if(!ot(e)){t.push(oe("invalid-snapshot","override must be an object"));return}Ue(e,_m,"override",t);let n={};if(e.reducedSensory!==void 0&&(typeof e.reducedSensory!="boolean"?t.push(oe("invalid-snapshot","reducedSensory must be a boolean","override.reducedSensory")):n.reducedSensory=e.reducedSensory),e.reducedMotion!==void 0&&(typeof e.reducedMotion!="boolean"?t.push(oe("invalid-snapshot","reducedMotion must be a boolean","override.reducedMotion")):n.reducedMotion=e.reducedMotion),e.labels!==void 0)if(!ot(e.labels))t.push(oe("invalid-snapshot","labels must be an object","override.labels"));else{let r={};for(let[i,o]of Object.entries(e.labels)){if(typeof o=="string"){r[i]=o;continue}if(ot(o)&&Ne(o.name)&&Ne(o.role)){r[i]={name:o.name,role:o.role};continue}t.push(oe("invalid-snapshot",`label "${i}" must be a string or { name, role }`,`override.labels.${i}`))}n.labels=r}return n}function $o(e){let t=ni(e.manifest);if(!t.ok)throw new Error(`createPresentationBindingRuntime: ${t.errors.map(O=>O.detail).join("; ")}`);let n=t.manifest,r=e.visual,i=e.semantic,o=e.sequences,s=e.selectors??{},a=!1,d=null,m=0,l=[],y=new Map,k=!1,C=null,T=null,v=null,x=!1,$=new Map,j=[],D=()=>{if(a)throw new Error(Tm)};function V(O,u){j.push({type:O,atRevision:d,manifestId:n.id,selectedBindingIds:l.slice(),reason:typeof u.reason=="string"?u.reason:void 0});let b=O.includes(".diagnostic.")?"diagnostic":"state",w={type:O,kind:b,payload:Ge(u)};e.onEvent?.(w),e.router?.publish(w)}function A(){return qm([...y.values()],{revision:d,selectedBindingIds:l,override:v,usedFallback:k,fallbackReason:C,explanation:T,sequences:o})}function p(O){let u=[];for(let b of O)b.kind==="visual-layer"&&r&&(r.inspect().find(L=>L.id===b.layerId)||u.push(oe("unknown-resource",`unknown live layer "${b.layerId}"`,b.layerId))),b.kind==="semantic-region"&&i&&!i.get(b.regionId)&&u.push(oe("unknown-resource",`unknown live region "${b.regionId}"`,b.regionId)),b.kind==="hotspot"&&b.regionId&&i&&!i.get(b.regionId)&&u.push(oe("unknown-resource",`unknown live region "${b.regionId}"`,b.regionId)),b.kind==="presence"&&b.regionId&&i&&!i.get(b.regionId)&&u.push(oe("unknown-resource",`unknown live region "${b.regionId}"`,b.regionId)),b.kind==="sequence"&&o&&!o.get(b.sequenceId)&&u.push(oe("unknown-resource",`unknown live sequence "${b.sequenceId}"`,b.sequenceId));return u}function E(){if(!(!i||!v?.labels)){for(let[O,u]of Object.entries(v.labels))if(i.get(O))if(typeof u=="string"){let b=i.get(O)?.a11y;i.setRegionA11y(O,{name:u,role:b?.role??"region"})}else i.setRegionA11y(O,{name:u.name,role:u.role})}}function c(){return v?.reducedSensory===!0}function f(O){let u=o?.inspect().active;return!!(u&&u.sequenceId===O&&(u.phase==="playing"||u.phase==="paused"||u.phase==="requested"||u.phase==="preloading"||u.phase==="ready"))}function h(O,u){if(!o)return;let b=c(),w=O.play!==!1&&!b,L=f(O.sequenceId);if(w&&!L&&(!u||x!==b)){let G=o.playSequence(O.sequenceId,{invocationId:`presentation-binding:${O.sequenceId}`,idempotencyKey:`presentation-binding:${O.sequenceId}`});if(!G.ok&&G.reason!=="duplicate")return oe("unknown-resource",G.detail,O.sequenceId)}!w&&L&&o.skip()}function R(){for(let O of y.values())O.kind==="sequence"&&h(O,!0);x=c()}function M(O){if(!i)return[];let u=new Map;for(let U of O)U.kind==="hotspot"&&U.regionId&&u.set(U.regionId,U.enabled);for(let U of O)U.kind==="semantic-region"&&U.hitTestEnabled!==void 0&&u.set(U.regionId,U.hitTestEnabled);if(u.size===0)return[];let b=new Map,w=!1;for(let[U,B]of u){let g=i.get(U);if(!g)continue;g.hitTest!=="pass-through"&&$.set(U,g.hitTest);let S=$.get(U)??"absorb",I=B?S:"pass-through";b.set(U,I),g.hitTest!==I&&(w=!0)}if(!w)return[];let L=i.snapshot(),_={...L,regions:L.regions.map(U=>{let B=b.get(U.id);return B&&B!==U.hitTest?{...U,hitTest:B}:U})},G=i.restore(_);return G.ok?[]:G.errors.map(U=>oe("unknown-resource",U))}function P(O){let u=r?.snapshot(),b=i?.snapshot(),w=o?.snapshot(),L=new Map($),_=B=>{$.clear();for(let[g,S]of L)$.set(g,S);return o&&w&&o.restore(w),r&&u&&r.restore(u),i&&b&&i.restore(b),B},G=new Map;for(let B of O)G.set(Bt(B),Ge(B));let U=M(O);if(U.length>0)return _(U);for(let[B,g]of G){let S=y.get(B),I=Km(S,g);if(g.kind==="visual-layer"&&r&&!I){let N=g.transition??"replace",q=r.play({name:`presentation-binding:${g.layerId}:${N}`,idempotencyKey:`presentation-binding:${g.layerId}:${g.version}:${N}`,layerId:g.layerId,kind:N,...N==="hide"?{}:{toVersion:g.version},durationFrames:0,onDuplicate:"ignore"});if(!q.ok&&q.reason!=="duplicate")return _([oe("unknown-resource",q.detail,g.layerId)])}if(g.kind==="semantic-region"&&i){let N=g.state??{},q=i.get(g.regionId)?.state,Z={hover:N.hover??q?.hover??!1,focus:N.focus??q?.focus??!1,selected:N.selected??q?.selected??!1};(!q||q.hover!==Z.hover||q.focus!==Z.focus||q.selected!==Z.selected)&&i.setRegionState(g.regionId,Z)}if(g.kind==="hotspot"&&g.regionId&&i){let N=i.get(g.regionId)?.state;(!N||N.selected!==g.enabled)&&i.setRegionState(g.regionId,{selected:g.enabled})}if(g.kind==="presence"&&g.regionId&&i){let N=i.get(g.regionId)?.state;(!N||N.selected!==g.present)&&i.setRegionState(g.regionId,{selected:g.present})}if(g.kind==="sequence"){let N=h(g,I);if(N)return _([N])}}return y=G,x=c(),E(),[]}function F(O,u){let b=p(O.targets);if(b.length>0)return V(Qr,{manifestId:n.id,revision:String(u),reason:b[0]?.code,selectedBindingIds:l}),V(Zr,{manifestId:n.id,revision:String(u),reason:b[0]?.code}),{ok:!1,errors:b,inspect:A()};let w=P(O.targets);return w.length>0?(V(Qr,{manifestId:n.id,revision:String(u),reason:w[0]?.code,selectedBindingIds:l}),V(Zr,{manifestId:n.id,revision:String(u),reason:w[0]?.code}),{ok:!1,errors:w,inspect:A()}):(d=u,l=O.selectedBindingIds.slice(),k=O.usedFallback,C=O.fallbackReason,T=Ge(O.explanation),V(ti,{manifestId:n.id,revision:String(u),selectedBindingIds:l,usedFallback:k,reason:C??void 0}),{ok:!0,revision:u,selectedBindingIds:l.slice(),usedFallback:k,fallbackReason:C,explanation:Ge(O.explanation),inspect:A()})}function W(){return{schemaVersion:Jn,manifestId:n.id,projectionRevision:d,selectedBindingIds:l.slice(),targets:[...y.values()].map(O=>Ge(O)),usedFallback:k,fallbackReason:C,override:v?Ge(v):null}}return{get manifest(){return Ge(n)},apply(O,u){D();let b=u?.revision??m+1;typeof b=="number"&&(m=Math.max(m,b));let w=Fo(n,O,s);return F(w,b)},setOverride(O){D();let u=c();if(O===null)v=null;else{let b=[],w=Wd(O,b);if(b.length>0||w===void 0)throw new Error(`createPresentationBindingRuntime: ${b.map(L=>L.detail).join("; ")||"invalid override"}`);v=w?Ge(w):null,E()}c()!==u&&R()},evaluate(O){return D(),Fo(n,O,s)},inspect(){return D(),A()},snapshot(){return D(),W()},restore(O){D();let u=I=>({ok:!1,errors:I}),b=O;if(typeof O=="string")try{b=JSON.parse(O)}catch{return u([oe("invalid-snapshot","snapshot JSON is invalid")])}if(!ot(b))return u([oe("invalid-snapshot","snapshot must be a JSON object")]);if(b.schemaVersion!==Jn)return u([oe("invalid-schema",`unsupported snapshot schemaVersion ${String(b.schemaVersion)}`,"schemaVersion")]);if(b.manifestId!==n.id)return u([oe("invalid-snapshot",`snapshot manifestId "${String(b.manifestId)}" does not match "${n.id}"`,"manifestId")]);if(!Array.isArray(b.selectedBindingIds))return u([oe("invalid-snapshot","selectedBindingIds must be an array","selectedBindingIds")]);let w=new Set(n.bindings.map(I=>I.id));for(let I of b.selectedBindingIds)if(!Ne(I)||!w.has(I))return u([oe("unknown-resource",`unknown selected binding "${String(I)}"`,"selectedBindingIds")]);if(!Array.isArray(b.targets))return u([oe("invalid-snapshot","targets must be an array","targets")]);let L=[],_=b.targets.map((I,N)=>Vo(I,`targets[${N}]`,L,n.resources)).filter(I=>!!I);if(L.length>0)return u(L);let G=[],U=Wd(b.override??null,G);if(G.length>0)return u(G);let B=p(_);if(B.length>0)return u(B);let g=typeof b.projectionRevision=="string"||typeof b.projectionRevision=="number"?b.projectionRevision:b.projectionRevision===null?null:void 0;if(g===void 0)return u([oe("invalid-snapshot","projectionRevision must be a string, number, or null","projectionRevision")]);let S=P(_);return S.length>0?u(S):(d=g,typeof g=="number"&&(m=Math.max(m,g)),l=b.selectedBindingIds.filter(I=>Ne(I)),k=b.usedFallback===!0,C=b.fallbackReason==="missing-state"||b.fallbackReason==="invalid-projection"?b.fallbackReason:null,v=U??null,E(),R(),{ok:!0,snapshot:W()})},destroy(){a||(a=!0,y.clear(),j.length=0)}}}var Ud="executable module host has been destroyed";var Gm=/^[a-z0-9][a-z0-9.-]*$/i,Wm=/^[a-z0-9][a-z0-9-]*$/i;function Xt(e){return{id:e.id,version:e.version}}function Ho(e){return`${e.id}@${e.version}`}function zn(e){return typeof e=="string"&&e.length>0&&Gm.test(e)}function jm(e){if(typeof e!="string"||e.length===0)return!1;let t=e.split(".");return t.some(n=>n.length===0)?!1:t.every(n=>n==="*"||Wm.test(n))}function Yd(e,t){if(e===t)return!0;if(!e.includes("*"))return!1;let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function Um(e,t){return t.some(n=>n.version===e.version&&Yd(n.id,e.id))}function Yn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Jm(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function Jd(e){return e instanceof Error&&e.message?e.message:String(e)}function Xn(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>Xn(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=Xn(e[n]);return Object.freeze(t)}function zd(e){if(!Yn(e))return;let t=e.id,n=e.version;if(!(!zn(t)||!zn(n)))return{id:t,version:n}}function zm(e){if(e===void 0)return{};if(!Yn(e))throw new Error("createExecutableModuleHost: limits must be an object");let t={};if(e.maxInvokeMs!==void 0){if(typeof e.maxInvokeMs!="number"||!Number.isInteger(e.maxInvokeMs)||e.maxInvokeMs<1)throw new Error("createExecutableModuleHost: limits.maxInvokeMs must be an integer >= 1");t.maxInvokeMs=e.maxInvokeMs}if(e.maxInvokesPerTurn!==void 0){if(typeof e.maxInvokesPerTurn!="number"||!Number.isInteger(e.maxInvokesPerTurn)||e.maxInvokesPerTurn<1)throw new Error("createExecutableModuleHost: limits.maxInvokesPerTurn must be an integer >= 1");t.maxInvokesPerTurn=e.maxInvokesPerTurn}return t}function Xd(e){if(!Yn(e))throw new Error("createExecutableModuleHost: options are required");if(!Array.isArray(e.allowlist))throw new Error("createExecutableModuleHost: allowlist must be an array");if(!Array.isArray(e.modules))throw new Error("createExecutableModuleHost: modules must be an array");let t=e.allowlist.map((A,p)=>{if(!Yn(A))throw new Error(`createExecutableModuleHost: allowlist[${p}] must be an object`);if(!jm(A.id))throw new Error(`createExecutableModuleHost: allowlist[${p}].id is not a valid id or pattern`);if(!zn(A.version)||A.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${p}].version must be an exact version`);return{id:A.id,version:A.version}}),n=new Map,r=new Map;for(let[A,p]of e.modules.entries()){if(!Yn(p))throw new Error(`createExecutableModuleHost: modules[${A}] must be an object`);if(!zn(p.id))throw new Error(`createExecutableModuleHost: modules[${A}].id is invalid`);if(!zn(p.version))throw new Error(`createExecutableModuleHost: modules[${A}].version is invalid`);if(typeof p.create!="function")throw new Error(`createExecutableModuleHost: modules[${A}].create must be a function`);let E=`${p.id}@${p.version}`;if(n.has(E))throw new Error(`createExecutableModuleHost: duplicate module ${E}`);n.set(E,{id:p.id,version:p.version,create:p.create,capabilities:p.capabilities});let c=r.get(p.id)??[];c.push(p.version),r.set(p.id,c)}let i=zm(e.limits),o=e.capabilities,s=new Map,a=new Set,d=[],m=0,l=0,y=!1;function k(A,p,E){let c=E?{code:A,detail:p,ref:Xt(E)}:{code:A,detail:p};return d.push(c),d.length>256&&d.shift(),c}function C(A,p,E){return{ok:!1,error:k(A,p,E)}}function T(A){if(y){let R=zd(A);return C("destroyed",Ud,R)}let p=zd(A);if(!p)return C("invalid-ref","module ref requires exact id and version");let E=n.get(Ho(p)),c=r.has(p.id),f=Um(p,t),h=t.some(R=>Yd(R.id,p.id)&&R.version!==p.version);return f?E?{ok:!0,ref:p,registration:E}:c?C("version-mismatch",`no factory for ${p.id}@${p.version}`,p):C("unknown-module",`unknown module "${p.id}"`,p):h||c&&!E?C("version-mismatch",`no allowlisted factory for ${p.id}@${p.version}`,p):!E&&!c?C("unknown-module",`unknown module "${p.id}"`,p):C("not-allowlisted",`${p.id}@${p.version} is not allowlisted`,p)}function v(A,p){let E=Ho(A);if(s.has(E))return{ok:!0,ref:Xt(A)};let c=Xn({...o??{},...p.capabilities??{}});try{let f=p.create(c);return!f||typeof f.invoke!="function"?C("load-failed",`factory for ${A.id}@${A.version} did not return an invoke() module`,A):(s.set(E,{ref:Xt(A),instance:f}),{ok:!0,ref:Xt(A)})}catch(f){return C("load-failed",Jd(f),A)}}function x(A){let p=T(A);return p.ok?v(p.ref,p.registration):p}function $(A,p){let E=T(A);if(!E.ok)return Promise.resolve(E);if(i.maxInvokesPerTurn!==void 0&&l>=i.maxInvokesPerTurn)return Promise.resolve(C("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,E.ref));l+=1;let c=v(E.ref,E.registration);if(!c.ok)return Promise.resolve(c);let f=s.get(Ho(E.ref));if(!f)return Promise.resolve(C("load-failed","module instance was not retained",E.ref));let h=new AbortController;a.add(h);let R=Date.now(),M=i.maxInvokeMs,P;M!==void 0&&(P=setTimeout(()=>h.abort(),M));let F=O=>(P!==void 0&&clearTimeout(P),a.delete(h),y?C("destroyed",Ud,E.ref):O),W=O=>h.signal.aborted&&M!==void 0?C("timeout",`invoke exceeded ${M}ms`,E.ref):C("invoke-failed",Jd(O),E.ref);try{let O=f.instance.invoke(p,{signal:h.signal,turn:m});return Jm(O)?new Promise(u=>{let b=!1,w=L=>{b||(b=!0,u(F(L)))};if(M!==void 0){let L=P;L!==void 0&&clearTimeout(L),P=setTimeout(()=>{h.abort(),w(C("timeout",`invoke exceeded ${M}ms`,E.ref))},Math.max(0,M-(Date.now()-R)))}Promise.resolve(O).then(L=>w({ok:!0,value:L}),L=>w(W(L)))}):M!==void 0&&Date.now()-R>=M?(h.abort(),Promise.resolve(F(C("timeout",`invoke exceeded ${M}ms`,E.ref)))):Promise.resolve(F({ok:!0,value:O}))}catch(O){return Promise.resolve(F(W(O)))}}function j(){y||(m+=1,l=0)}function D(){return{allowlist:t.map(Xt),registered:[...n.values()].map(A=>({id:A.id,version:A.version})),loaded:[...s.values()].map(A=>Xt(A.ref)),turn:m,invokesThisTurn:l,diagnostics:d.map(A=>A.ref?{...A,ref:Xt(A.ref)}:{...A})}}function V(){if(!y){y=!0;for(let A of a)A.abort();a.clear();for(let A of s.values())try{A.instance.destroy?.()}catch{}s.clear(),n.clear(),r.clear(),t.length=0}}return{load:x,invoke:$,beginTurn:j,inspect:D,destroy:V}}var Bo=1,Qd="hmac-sha256",Zt=1,ic=Wn;var qo=class extends Error{constructor(n,r){super(`${r} requires grant "${n}"`);this.code="capability-denied";this.name="RemoteCartCapabilityError",this.grant=n}};function ve(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function en(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function st(e){return typeof e=="string"&&e.length>0}var Ko=new Set(ic),Zd=new Set(["image","audio","font","spritesheet"]),Ym=new Set(["version","id","cartVersion","publisher","assets","requestedGrants","module","capabilities"]),Xm=new Set(["id","kind","url","hash","alg"]),Qm=new Set(["alg","keyId","mac"]),ec=/^[a-z0-9][a-z0-9.-]*$/i,Zm=256;function oc(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}var eg=/^[0-9a-f]+$/i;function tc(e){if(e.length%2!==0||e.length===0||!eg.test(e))return;let t=new Uint8Array(e.length/2);for(let n=0;n<t.length;n++)t[n]=Number.parseInt(e.slice(n*2,n*2+2),16);return t}function tg(e,t){let n=tc(e),r=tc(t),i=n??new Uint8Array(32),o=r??new Uint8Array(32),s=Math.max(i.length,o.length),a=n&&r&&n.length===r.length?0:1;for(let d=0;d<s;d++)a|=(i[d]??0)^(o[d]??0);return a===0}async function ri(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=await crypto.subtle.digest("SHA-256",t);return oc(new Uint8Array(n))}async function ng(e,t){let n=await crypto.subtle.importKey("raw",new TextEncoder().encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),r=await crypto.subtle.sign("HMAC",n,new TextEncoder().encode(t));return oc(new Uint8Array(r))}function Go(e){if(Array.isArray(e))return e.map(Go);if(!en(e))return e;let t={};for(let n of Object.keys(e).sort())t[n]=Go(e[n]);return t}function rg(e){return JSON.stringify(Go(e))}function ii(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(ve("invalid-manifest",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function ig(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function sc(e,t){if(!Array.isArray(e))return{ok:!1,errors:[ve("invalid-manifest",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;typeof i!="string"||!Ko.has(i)?n.push(ve("invalid-manifest",`invalid grant "${String(i)}"`,s)):r.push(i)}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:ig(r)}}function og(e){if(!Array.isArray(e))return{ok:!1,errors:[ve("invalid-manifest","assets must be an array","assets")]};let t=[],n=[],r=new Set;return e.forEach((i,o)=>{let s=`assets[${o}]`;if(!en(i)){t.push(ve("invalid-manifest","asset must be an object",s));return}t.push(...ii(i,Xm,s)),st(i.id)?r.has(i.id)?t.push(ve("invalid-manifest",`duplicate asset id "${i.id}"`,`${s}.id`)):r.add(i.id):t.push(ve("invalid-manifest","asset id is required",`${s}.id`)),(typeof i.kind!="string"||!Zd.has(i.kind))&&t.push(ve("invalid-manifest",`invalid asset kind "${String(i.kind)}"`,`${s}.kind`)),st(i.url)||t.push(ve("invalid-manifest","asset url is required",`${s}.url`)),st(i.hash)||t.push(ve("unsigned-bytes","asset hash is required",`${s}.hash`)),i.alg!=="sha256"&&t.push(ve("invalid-manifest","asset alg must be sha256",`${s}.alg`)),st(i.id)&&typeof i.kind=="string"&&Zd.has(i.kind)&&st(i.url)&&st(i.hash)&&i.alg==="sha256"&&n.push({id:i.id,kind:i.kind,url:i.url,hash:i.hash,alg:"sha256"})}),t.length>0?{ok:!1,errors:t}:{ok:!0,values:n}}function sg(e){return e===void 0?{ok:!0}:en(e)?!st(e.id)||!ec.test(e.id)?{ok:!1,errors:[ve("invalid-manifest","module.id is invalid","module.id")]}:!st(e.version)||!ec.test(e.version)?{ok:!1,errors:[ve("invalid-manifest","module.version is invalid","module.version")]}:{ok:!0,value:{id:e.id,version:e.version}}:{ok:!1,errors:[ve("invalid-manifest","module must be an object","module")]}}function ag(e){if(!en(e))return{ok:!1,errors:[ve("invalid-manifest","remote cart body must be a JSON object")]};let t=ii(e,Ym,"");e.version!==void 0&&e.version!==Bo&&t.push(ve("invalid-version",`remote cart manifest version must be ${Bo}`,"version")),st(e.id)||t.push(ve("invalid-manifest","id is required","id")),st(e.cartVersion)||t.push(ve("invalid-manifest","cartVersion is required","cartVersion")),st(e.publisher)||t.push(ve("unknown-publisher","publisher is required","publisher"));let n=og(e.assets);n.ok||t.push(...n.errors);let r=sc(e.requestedGrants,"requestedGrants");r.ok||t.push(...r.errors);let i=sg(e.module);i.ok||t.push(...i.errors);let o;if(e.capabilities!==void 0){let a=mo(e.capabilities);if(a.ok)o=a.manifest;else for(let d of a.errors)t.push(ve(d.code,d.detail,d.path?`capabilities.${d.path}`:"capabilities"))}if(t.length>0)return{ok:!1,errors:t};let s={version:Bo,id:e.id,cartVersion:e.cartVersion,publisher:e.publisher,assets:n.ok?n.values:[],requestedGrants:r.ok?r.values:[]};return i.ok&&i.value&&(s.module=i.value),o&&(s.capabilities=o),{ok:!0,body:s}}function dg(e){if(!en(e))return{ok:!1,errors:[ve("invalid-signature","signature must be an object","signature")]};let t=ii(e,Qm,"signature");return e.alg!==Qd&&t.push(ve("invalid-signature","signature.alg must be hmac-sha256","signature.alg")),st(e.keyId)||t.push(ve("unknown-key","signature.keyId is required","signature.keyId")),(!st(e.mac)||!/^[0-9a-f]+$/i.test(e.mac))&&t.push(ve("invalid-signature","signature.mac must be hex","signature.mac")),t.length>0?{ok:!1,errors:t}:{ok:!0,signature:{alg:Qd,keyId:e.keyId,mac:e.mac.toLowerCase()}}}function ac(e){if(!en(e))return{ok:!1,errors:[ve("invalid-manifest","signed remote cart must be a JSON object")]};let t=ag(e.body),n=dg(e.signature),r=[];t.ok||r.push(...t.errors),n.ok||r.push(...n.errors);let i=ii(e,new Set(["body","signature"]),"");return r.push(...i),r.length>0?{ok:!1,errors:r}:{ok:!0,manifest:{body:t.ok?t.body:void 0,signature:n.ok?n.signature:void 0}}}async function Wo(e,t,n){let r=ac(e);if(!r.ok)return r;let i=t[r.manifest.signature.keyId];if(!st(i))return{ok:!1,errors:[ve("unknown-key",`unknown signature key "${r.manifest.signature.keyId}"`,"signature.keyId")]};let o=await ng(i,rg(r.manifest.body));return tg(o,r.manifest.signature.mac)?n!==void 0&&r.manifest.body.cartVersion!==n?{ok:!1,errors:[ve("invalid-version",`cartVersion ${r.manifest.body.cartVersion} does not match ${n}`,"body.cartVersion")]}:{ok:!0,manifest:r.manifest}:{ok:!1,errors:[ve("invalid-signature","HMAC does not match canonical body","signature.mac")]}}function dc(e){return[...e.body.requestedGrants]}function Pn(e){let t=new Set;if(e)for(let o of e)Ko.has(o)&&t.add(o);function n(){return{schemaVersion:Zt,grants:ic.filter(o=>t.has(o))}}function r(o){let s=o;if(typeof o=="string")try{s=JSON.parse(o)}catch{return{ok:!1,errors:[ve("invalid-json","grant snapshot JSON is not parseable")]}}if(!en(s))return{ok:!1,errors:[ve("invalid-manifest","grant snapshot must be an object")]};if(s.schemaVersion!==Zt)return{ok:!1,errors:[ve("invalid-version",`grant snapshot schema must be ${Zt}`,"schemaVersion")]};let a=sc(s.grants,"grants");if(!a.ok)return a;t.clear();for(let d of a.values)t.add(d);return{ok:!0,grants:n().grants}}function i(o,s){return Ko.has(o)?(s?t.add(o):t.delete(o),{ok:!0,grants:n().grants}):{ok:!1,errors:[ve("invalid-manifest",`invalid grant "${String(o)}"`)]}}return{grant:o=>i(o,!0),revoke:o=>i(o,!1),has:o=>t.has(o),list:()=>n().grants,inspect:n,restore:r}}function Qt(e,t){return e.push(t),e.length>Zm&&e.shift(),t}function nc(e){return e.code==="undeclared"?ve("undeclared-asset",e.message,e.ref):e.code==="hash-mismatch"?ve("hash-mismatch",e.message,e.ref):e.code==="unsigned"?ve("unsigned-bytes",e.message,e.ref):ve("load-failed",e.message,e.ref)}function rc(e,t,n,r){let i=(s,a)=>{if(!e.has(s))throw new qo(s,a)},o={grants:e.list(),network:{fetch(s){if(i("network","network.fetch"),!t.has(s))return Promise.reject(Object.assign(new Error(`undeclared network url "${s}"`),{code:"undeclared-asset"}));let a=n[s];return a?Promise.resolve(a.slice()):Promise.reject(Object.assign(new Error(`no signed bytes for "${s}"`),{code:"unsigned-bytes"}))}},storage:{getItem(s){return i("persistence","storage.getItem"),r.get(s)??null},setItem(s,a){i("persistence","storage.setItem"),r.set(s,a)},removeItem(s){i("persistence","storage.removeItem"),r.delete(s)},clear(){i("persistence","storage.clear"),r.clear()}},audio:{request(){return i("audio","audio.request"),{ok:!0}}},controller:{request(){return i("controller","controller.request"),{ok:!0}}},fullscreen:{request(){return i("fullscreen","fullscreen.request"),{ok:!0}}}};return Xn(o)}function cg(e,t){return{source:`remote-cart:${e.body.id}`,publisher:e.body.publisher,version:e.body.cartVersion,signature:{id:e.signature.keyId,alg:e.signature.alg},grants:[...t]}}function ug(e){let t=ac(e.manifest);if(!t.ok)throw new Error(t.errors.map($=>$.detail).join("; "));let n=t.manifest,r=Pn(e.grants),i=[],o=new Map,s=new Set(n.body.assets.map($=>$.url)),a={};for(let $ of n.body.assets)a[$.id]={url:$.url,hash:$.hash,alg:$.alg};let d=!1,m=!1,l=!1,y;function k(){return Qt(i,ve("destroyed","remote cart sandbox has been destroyed"))}async function C(){if(l)return{ok:!0};let $=await Wo(n,e.keys);if(!$.ok){for(let j of $.errors)Qt(i,j);return{ok:!1,errors:$.errors}}return l=!0,{ok:!0}}async function T(){if(m)return{ok:!1,errors:[k()]};let $=await C();if(!$.ok)return $;if(n.body.capabilities){let A=n.body.capabilities,p=Kr(A,{contractVersion:Math.max(1,A.runtime.minContractVersion),features:[...A.runtime.features],integrations:[...A.integrations],grants:r.list()});if(!p.ok){let E=p.errors.map(c=>ve(c.code,c.detail,c.path));for(let c of E)Qt(i,c);return{ok:!1,errors:E}}}let j=Ar({declared:a,fetchBytes:async A=>e.bytesByUrl[A],hashBytes:ri}),D=hn({resolver:j,emitEvents:!1,wallClockTimeout:!1}),V=n.body.assets.map(A=>({id:A.id,ref:A.id,type:A.kind,integrity:`sha256-${A.hash}`,provenance:{publisher:n.body.publisher,version:n.body.cartVersion}}));try{let A=await D.preload(V);if(A.failed>0)return{ok:!1,errors:A.failures.map(E=>Qt(i,nc(E)))};if(d=!0,n.body.module&&e.modules){y=Xd({allowlist:[n.body.module],modules:e.modules,capabilities:rc(r,s,e.bytesByUrl,o)});let p=y.load(n.body.module);if(!p.ok){let E=ve("load-failed",p.error.detail,`${p.error.ref?.id}@${p.error.ref?.version}`);return Qt(i,E),{ok:!1,errors:[E]}}}return{ok:!0,snapshot:A}}catch(A){return Hn(A)?{ok:!1,errors:[Qt(i,nc(A))]}:{ok:!1,errors:[Qt(i,ve("load-failed",A instanceof Error?A.message:String(A)))]}}finally{D.dispose()}}function v(){return m?{ok:!1,errors:[k()]}:l?rc(r,s,e.bytesByUrl,o):{ok:!1,errors:[ve("invalid-signature","verify the manifest HMAC via loadAssets before using capabilities")]}}function x(){return{id:n.body.id,cartVersion:n.body.cartVersion,publisher:n.body.publisher,signature:{id:n.signature.keyId,alg:n.signature.alg},requestedGrants:[...n.body.requestedGrants],grants:r.list(),assets:n.body.assets.map($=>({id:$.id,url:$.url,hash:$.hash})),loaded:d,destroyed:m,diagnostics:i.map($=>({...$}))}}return{listRequestedGrants:()=>[...n.body.requestedGrants],grants:r,loadAssets:T,capabilities:v,inspect:x,snapshotProvenance:()=>cg(n,r.list()),destroy(){m||(m=!0,y?.destroy(),o.clear())}}}var oi=1,si=1,lg=8,pg=["cabinet","painting","dream","wormhole","book","nested-world"],fg=["completed","aborted"],uc=["audio","controller","fullscreen"],xn="portal.lifecycle.entered",jo="portal.lifecycle.exited",Uo="portal.lifecycle.aborted";var mg=new Set(pg),gg=new Set(fg),hg=new Set(uc),yg=new Set(Wn),bg="Portal lifecycle has been destroyed";function Ee(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Jo(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function tn(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function cc(e){return typeof e=="string"&&mg.has(e)}function vg(e){return hg.has(e)}function Yo(e){return[...e].sort()}function lc(e){return Yo([...e.childGrantsBefore,...e.transferred,...e.extraChildGrants])}function zo(e){return{id:e.id,parentId:e.parentId,childId:e.childId,metaphor:e.metaphor,seed:e.seed,clock:e.clock,parentState:tn(e.parentState),parentGrants:[...e.parentGrants],childGrants:lc(e),childGrantsBefore:[...e.childGrantsBefore],extraChildGrants:[...e.extraChildGrants],persistence:tn(e.persistence),transferred:[...e.transferred],enterCue:e.enterCue,exitCue:e.exitCue}}function Sg(e){return{enter:t=>e.enter({...t,metaphor:"cabinet"}),exit:e.exit,abort:e.abort}}function kg(e){return{enter:t=>e.enter({...t,metaphor:"painting"}),exit:e.exit,abort:e.abort}}function Eg(e={}){let t=e.group,n=e.audioBroker??t?.audioBroker,r=e.maxDepth??lg,i=new Map((e.declarations??[]).map(u=>[u.id,u])),o=new Map;if(e.grants)for(let[u,b]of Object.entries(e.grants))o.set(u,b);let s=0,a=e.createId??(()=>`portal-${++s}`),d=[],m=[],l=null,y=!1,k=e.rootId??null,C=()=>{if(y)throw new Error(bg)},T=u=>{let b=o.get(u);return b||(b=Pn(),o.set(u,b)),b},v=()=>d.length===0?k:d[d.length-1].childId,x=(u,b)=>{if(m.push(u),!t)return;let w={type:u,kind:"state",payload:b};try{t.publish(w)}catch{}},$=u=>{if(!t)return null;try{return tn(t.participant(u).cart.getCartState())}catch{return null}},j=()=>{if(!t)return;let u=new Set;for(let w of d)u.add(w.parentId);let b=new Set(t.inspectParticipants().map(w=>w.id));for(let w of b)u.has(w)?t.isParticipantSuspended(w)||t.suspendParticipant(w):t.isParticipantSuspended(w)&&t.resumeParticipant(w)},D=(u,b,w)=>{let L=T(u),_=T(b),G=L.list(),U=_.list(),B=[];for(let g of uc)L.has(g)&&(L.revoke(g),_.grant(g),B.push(g));if(w)for(let g of w)_.grant(g);return V(u,b,B,w??[]),{transferred:B,parentBefore:G,childBefore:U}},V=(u,b,w,L)=>{n&&(w.includes("audio")||L.includes("audio"))&&(n.revoke(u),n.authorize(b))},A=u=>{for(let b of u)V(b.parentId,b.childId,b.transferred,b.extraChildGrants)},p=()=>n?n.inspect().authorized.slice():[],E=u=>{if(!n)return;let b=new Set(u);for(let w of n.inspect().authorized)b.has(w)||n.revoke(w);for(let w of u)n.authorize(w)},c=()=>t?t.inspectParticipants().map(u=>u.id).filter(u=>t.isParticipantSuspended(u)).sort():[],f=u=>{if(!t)return;let b=new Set(u);for(let w of t.inspectParticipants()){let L=t.isParticipantSuspended(w.id);b.has(w.id)&&!L&&t.suspendParticipant(w.id),!b.has(w.id)&&L&&t.resumeParticipant(w.id)}},h=u=>{let b=T(u.parentId),w=T(u.childId);for(let L of u.transferred)w.revoke(L),b.grant(L);for(let L of u.extraChildGrants)u.childGrantsBefore.includes(L)||w.revoke(L);n&&(u.transferred.includes("audio")||u.extraChildGrants.includes("audio"))&&(n.revoke(u.childId),n.authorize(u.parentId))},R=()=>{let u={};for(let[b,w]of o)u[b]=w.list();return{destroyed:y,activeId:y?null:v(),stack:d.map(zo),lastOutcome:l,cues:[...m],grants:u}},M=(u,b)=>{if(C(),d.length===0)return{ok:!1,errors:[Ee("empty-stack","no portal is open")]};let w=d[d.length-1],L={schemaVersion:si,kind:u,payload:b},_=u==="aborted"?Uo:jo;return w.exitCue=_,h(w),d.pop(),l=L,j(),x(_,{parentId:w.parentId,childId:w.childId,metaphor:w.metaphor,kind:u}),{ok:!0,inspect:R(),outcome:L}},P=(u,b)=>u===null?{ok:!0,outcome:null}:Jo(u)?u.schemaVersion!==si?{ok:!1,errors:[Ee("invalid-version",`outcome schema must be ${si}`,`${b}.schemaVersion`)]}:typeof u.kind!="string"||!gg.has(u.kind)?{ok:!1,errors:[Ee("invalid-snapshot","outcome.kind is required",`${b}.kind`)]}:{ok:!0,outcome:{schemaVersion:si,kind:u.kind,payload:u.payload}}:{ok:!1,errors:[Ee("invalid-snapshot","outcome must be an object or null",b)]},F=(u,b)=>{if(!Array.isArray(u))return{ok:!1,errors:[Ee("invalid-snapshot","grants must be an array",b)]};let w=[];for(let L=0;L<u.length;L++){let _=u[L];if(typeof _!="string"||!yg.has(_))return{ok:!1,errors:[Ee("invalid-snapshot",typeof _=="string"?`unknown grant "${_}"`:"grant must be a string",`${b}[${L}]`)]};w.push(_)}return{ok:!0,grants:w}},W=(u,b)=>{if(!Jo(u))return{ok:!1,errors:[Ee("invalid-snapshot","frame must be an object",b)]};if(typeof u.id!="string"||u.id.length===0)return{ok:!1,errors:[Ee("invalid-snapshot","frame.id is required",`${b}.id`)]};if(typeof u.parentId!="string"||typeof u.childId!="string")return{ok:!1,errors:[Ee("invalid-snapshot","parentId and childId are required",b)]};if(!cc(u.metaphor))return{ok:!1,errors:[Ee("invalid-snapshot","unknown metaphor",`${b}.metaphor`)]};let w=F(u.parentGrants,`${b}.parentGrants`);if(!w.ok)return w;let L=F(u.childGrants,`${b}.childGrants`);if(!L.ok)return L;if(!Array.isArray(u.transferred))return{ok:!1,errors:[Ee("invalid-snapshot","transferred must be an array",`${b}.transferred`)]};let _=[];for(let S=0;S<u.transferred.length;S++){let I=u.transferred[S];if(typeof I!="string"||!vg(I))return{ok:!1,errors:[Ee("invalid-snapshot","invalid exclusive grant",`${b}.transferred[${S}]`)]};_.push(I)}if(u.enterCue!==xn)return{ok:!1,errors:[Ee("invalid-snapshot","enterCue mismatch",`${b}.enterCue`)]};let G=u.exitCue;if(G!==null&&G!==jo&&G!==Uo)return{ok:!1,errors:[Ee("invalid-snapshot","invalid exitCue",`${b}.exitCue`)]};if(u.seed!==null&&typeof u.seed!="string")return{ok:!1,errors:[Ee("invalid-snapshot","seed must be string or null",`${b}.seed`)]};if(u.clock!==null&&typeof u.clock!="number")return{ok:!1,errors:[Ee("invalid-snapshot","clock must be number or null",`${b}.clock`)]};let U=u.extraChildGrants===void 0?{ok:!0,grants:[]}:F(u.extraChildGrants,`${b}.extraChildGrants`);if(!U.ok)return U;let B=u.childGrantsBefore===void 0?{ok:!0,grants:L.grants}:F(u.childGrantsBefore,`${b}.childGrantsBefore`);if(!B.ok)return B;let g=u.childGrantsBefore===void 0?lc({childGrantsBefore:B.grants,transferred:_,extraChildGrants:U.grants}):L.grants;return{ok:!0,frame:{id:u.id,parentId:u.parentId,childId:u.childId,metaphor:u.metaphor,seed:u.seed,clock:u.clock,parentState:u.parentState,parentGrants:w.grants,childGrants:g,childGrantsBefore:B.grants,extraChildGrants:U.grants,persistence:u.persistence??null,transferred:_,enterCue:xn,exitCue:G}}},O=u=>{let b=u;if(typeof u=="string")try{b=JSON.parse(u)}catch{return{ok:!1,errors:[Ee("invalid-json","portal snapshot JSON is not parseable")]}}if(!Jo(b))return{ok:!1,errors:[Ee("invalid-snapshot","snapshot must be an object")]};if(b.schemaVersion!==oi)return{ok:!1,errors:[Ee("invalid-version",`portal snapshot schema must be ${oi}`,"schemaVersion")]};if(!Array.isArray(b.stack))return{ok:!1,errors:[Ee("invalid-snapshot","stack must be an array","stack")]};let w=[];for(let U=0;U<b.stack.length;U++){let B=W(b.stack[U],`stack[${U}]`);if(!B.ok)return B;w.push(B.frame)}if(w.length>r)return{ok:!1,errors:[Ee("max-depth",`stack exceeds maxDepth ${r}`,"stack")]};let L=P(b.lastOutcome,"lastOutcome");if(!L.ok)return L;if(b.activeId!==null&&typeof b.activeId!="string")return{ok:!1,errors:[Ee("invalid-snapshot","activeId must be string or null","activeId")]};if(!Array.isArray(b.cues))return{ok:!1,errors:[Ee("invalid-snapshot","cues must be an array","cues")]};let _=[];for(let U=0;U<b.cues.length;U++){let B=b.cues[U];if(B!==xn&&B!==jo&&B!==Uo)return{ok:!1,errors:[Ee("invalid-snapshot","unknown cue",`cues[${U}]`)]};_.push(B)}let G=w.length===0?k:w[w.length-1].childId;return b.activeId!==G&&b.activeId!==null&&w.length>0&&b.activeId!==w[w.length-1].childId?{ok:!1,errors:[Ee("invalid-snapshot","activeId must be the top child when the stack is non-empty","activeId")]}:{ok:!0,snapshot:{schemaVersion:oi,activeId:b.activeId??G,stack:w,lastOutcome:L.outcome,cues:_}}};return{enter(u){C();let b=[];(!u.from||!u.to)&&b.push(Ee("invalid-enter","from and to are required")),u.from===u.to&&b.push(Ee("invalid-enter","cannot enter the same cart")),u.metaphor!==void 0&&!cc(u.metaphor)&&b.push(Ee("invalid-enter","unknown metaphor","metaphor")),d.length>=r&&b.push(Ee("max-depth",`portal stack is at maxDepth ${r}`));let w=v();w&&u.from!==w&&b.push(Ee("stack-order",`enter must start from the active cart "${w}"`,"from"));let L=i.get(u.from);if(L&&!L.targets.includes(u.to)&&b.push(Ee("undeclared-target",`"${u.from}" does not declare target "${u.to}"`,"to")),t){try{t.participant(u.from)}catch{b.push(Ee("unknown-parent",`unknown parent "${u.from}"`,"from"))}try{t.participant(u.to)}catch{b.push(Ee("unknown-child",`unknown child "${u.to}"`,"to"))}}if(b.length)return{ok:!1,errors:b};let _=u.state!==void 0?tn(u.state):$(u.from),G=u.grants??[],{transferred:U,parentBefore:B,childBefore:g}=D(u.from,u.to,G),S={id:a(),parentId:u.from,childId:u.to,metaphor:u.metaphor??"nested-world",seed:u.seed??null,clock:u.clock??null,parentState:_,parentGrants:Yo(B),childGrantsBefore:Yo(g),transferred:U,extraChildGrants:[...G],persistence:u.persistence??null,enterCue:xn,exitCue:null};return d.push(S),j(),x(xn,{parentId:S.parentId,childId:S.childId,metaphor:S.metaphor,seed:S.seed}),{ok:!0,inspect:R()}},exit(u){return M("completed",u)},abort(u){return M("aborted",u)},stack(){return C(),d.map(zo)},activeId(){return C(),v()},inspect(){return R()},snapshot(){return C(),{schemaVersion:oi,activeId:v(),stack:d.map(zo),lastOutcome:l,cues:[...m]}},restore(u){C();let b=O(u);if(!b.ok)return b;let w=b.snapshot;if(t){let _=[];for(let G=0;G<w.stack.length;G++){let U=w.stack[G];try{t.participant(U.parentId)}catch{_.push(Ee("unknown-parent",`unknown parent "${U.parentId}"`,`stack[${G}].parentId`))}try{t.participant(U.childId)}catch{_.push(Ee("unknown-child",`unknown child "${U.childId}"`,`stack[${G}].childId`))}}if(_.length)return{ok:!1,errors:_}}let L={stack:d.map(_=>({..._})),lastOutcome:l,cues:[...m],grants:new Map([...o].map(([_,G])=>[_,G.list()])),authorized:p(),suspended:c()};try{d.length=0;for(let _ of w.stack)d.push({id:_.id,parentId:_.parentId,childId:_.childId,metaphor:_.metaphor,seed:_.seed,clock:_.clock,parentState:tn(_.parentState),parentGrants:[..._.parentGrants],childGrantsBefore:[..._.childGrantsBefore],transferred:[..._.transferred],extraChildGrants:[..._.extraChildGrants],persistence:tn(_.persistence),enterCue:xn,exitCue:_.exitCue});l=w.lastOutcome,m.length=0,m.push(...w.cues);for(let _ of d)T(_.parentId).restore({schemaVersion:Zt,grants:_.parentGrants}),T(_.childId).restore({schemaVersion:Zt,grants:_.childGrantsBefore});for(let _ of d){let G=T(_.parentId),U=T(_.childId);for(let B of _.transferred)G.revoke(B),U.grant(B);for(let B of _.extraChildGrants)U.grant(B)}return A(d),j(),{ok:!0,snapshot:tn(w)}}catch(_){d.length=0,d.push(...L.stack),l=L.lastOutcome,m.length=0,m.push(...L.cues);for(let[G,U]of L.grants)T(G).restore({schemaVersion:Zt,grants:U});try{E(L.authorized),f(L.suspended)}catch{}return{ok:!1,errors:[Ee("restore-failed",_ instanceof Error?_.message:String(_))]}}},grantsOf:T,destroy(){if(!y){for(y=!0;d.length>0;){let u=d.pop();h(u)}if(t)try{j()}catch{}m.length=0,l=null}}}}var ai=1,Ig=1,Rg=["queued","claimed","awaiting-evaluation","retry-scheduled","ready","applied","failed","canceled","superseded"],Cg=["retryable","permanent","unknown"],Ag=["accept","reject","revise"],mc="job.intent.submitted",Qo="job.state.queued",gc="job.state.claimed",hc="job.state.progress",yc="job.state.awaiting-evaluation",bc="job.state.retry-scheduled",vc="job.state.ready",Sc="job.state.applied",kc="job.state.failed",Ec="job.state.canceled",Ic="job.state.superseded",wg="job.diagnostic.lifecycle";var Pg=zt,xg=new Set(Rg),Tg=new Set(Cg),Dg=new Set(Ag),Og="Job coordinator has been destroyed",Mg=512,Ng=8;function pe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function nn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function _e(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Xo(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Xo(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?It:Xo(o,t);return r}function ht(){return{version:1,fields:{jobId:{type:"string"},state:{type:"string"},definitionId:{type:"string"},correlationId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function yt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function _g(){return[yt(Fd(mc,ht())),yt(me(Qo,ht())),yt(me(gc,ht())),yt(me(hc,ht())),yt(me(yc,ht())),yt(me(bc,ht())),yt(me(vc,ht())),yt(me(Sc,ht())),yt(me(kc,ht())),yt(me(Ec,ht())),yt(me(Ic,ht())),yt(it(wg,ht()))]}function Rc(){let e=new Map,t=new Map;return{save(n){let r=_e(n);e.set(r.jobId,r),t.set(r.idempotencyKey,r.jobId)},get(n){let r=e.get(n);return r?_e(r):void 0},getByIdempotencyKey(n){let r=t.get(n);return r?this.get(r):void 0},list(){return[...e.values()].map(n=>_e(n))},replaceAll(n){e.clear(),t.clear();for(let r of n)this.save(r)}}}function Lg(){let e,t=new Set;return{bind(n){e=n},start(n){t.add(n.jobId)},cancel(n){t.delete(n)},complete(n,r){return e?(t.delete(n),e.complete(n,r)):{ok:!1,errors:[pe("unbound-worker","worker is not bound")]}},fail(n,r){return e?(t.delete(n),e.fail(n,r)):{ok:!1,errors:[pe("unbound-worker","worker is not bound")]}},started(){return[...t]}}}function Zo(e){return nn(e)?e.schemaVersion===Ig&&typeof e.kind=="string"&&e.kind.length>0&&typeof e.uri=="string"&&e.uri.length>0&&(e.contentType===void 0||typeof e.contentType=="string")&&(e.bytes===void 0||typeof e.bytes=="number"&&Number.isFinite(e.bytes)):!1}function Cc(e){return nn(e)?typeof e.value=="number"&&Number.isFinite(e.value)&&typeof e.stage=="string"&&e.stage.length>0&&(e.message===void 0||typeof e.message=="string"):!1}function pc(e){return e===null||typeof e=="string"}function fc(e){return e===null||typeof e=="number"&&Number.isFinite(e)}function Vg(e){return nn(e)?typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&typeof e.code=="string"&&e.code.length>0&&typeof e.retryability=="string"&&Tg.has(e.retryability)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.detail===void 0||typeof e.detail=="string"):!1}function Fg(e){return nn(e)?typeof e.decision=="string"&&Dg.has(e.decision)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.correction===void 0||typeof e.correction=="string"):!1}function $g(e){return!nn(e)||typeof e.reasonCode!="string"||e.reasonCode.length===0?!1:e.resultRef===void 0||Zo(e.resultRef)}function Hg(e,t){if(!nn(e))return{ok:!1,errors:[pe("invalid-job","job must be an object",t)]};let n=[],r=(i,o,s)=>{o||n.push(pe("invalid-job-field",s,`${t}.${i}`))};return r("jobId",typeof e.jobId=="string"&&e.jobId.length>0,"jobId is required"),r("definitionId",typeof e.definitionId=="string"&&e.definitionId.length>0,"definitionId is required"),r("definitionVersion",typeof e.definitionVersion=="number"&&Number.isInteger(e.definitionVersion),"definitionVersion must be an integer"),r("idempotencyKey",typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0,"idempotencyKey is required"),r("state",typeof e.state=="string"&&xg.has(e.state),"unknown job state"),r("attempt",typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&e.attempt>=0,"attempt must be an integer >= 0"),r("correlationId",typeof e.correlationId=="string"&&e.correlationId.length>0,"correlationId is required"),r("createdAt",typeof e.createdAt=="number"&&Number.isFinite(e.createdAt),"createdAt must be a number"),r("updatedAt",typeof e.updatedAt=="number"&&Number.isFinite(e.updatedAt),"updatedAt must be a number"),r("timeoutAt",typeof e.timeoutAt=="number"&&Number.isFinite(e.timeoutAt),"timeoutAt must be a number"),r("workerId",pc(e.workerId),"workerId must be a string or null"),r("leaseUntil",fc(e.leaseUntil),"leaseUntil must be a number or null"),r("nextRetryAt",fc(e.nextRetryAt),"nextRetryAt must be a number or null"),r("supersededBy",pc(e.supersededBy),"supersededBy must be a string or null"),r("fallbackApplied",typeof e.fallbackApplied=="boolean","fallbackApplied must be a boolean"),r("causationId",e.causationId===void 0||typeof e.causationId=="string","causationId must be a string when present"),e.resultRef!=null&&!Zo(e.resultRef)&&n.push(pe("invalid-result-ref","resultRef is invalid",`${t}.resultRef`)),Cc(e.progress)||n.push(pe("invalid-progress","progress is invalid",`${t}.progress`)),(!Array.isArray(e.failureHistory)||!e.failureHistory.every(Vg))&&n.push(pe("invalid-failure-history","failureHistory entries are invalid",`${t}.failureHistory`)),(!Array.isArray(e.evaluatorHistory)||!e.evaluatorHistory.every(Fg))&&n.push(pe("invalid-evaluator-history","evaluatorHistory entries are invalid",`${t}.evaluatorHistory`)),e.fallback!==void 0&&!$g(e.fallback)&&n.push(pe("invalid-fallback","fallback is invalid",`${t}.fallback`)),n.length?{ok:!1,errors:n}:{ok:!0,job:_e(e)}}function Bg(e){if(!nn(e))return{ok:!1,errors:[pe("invalid-snapshot","snapshot must be a JSON object")]};if(e.schemaVersion!==ai)return{ok:!1,errors:[pe("schema-mismatch",`expected schemaVersion ${ai}`,"schemaVersion")]};if(!Array.isArray(e.jobs))return{ok:!1,errors:[pe("invalid-jobs","jobs must be an array","jobs")]};if(!Array.isArray(e.hostAcceptedJobIds)||e.hostAcceptedJobIds.some(r=>typeof r!="string"))return{ok:!1,errors:[pe("invalid-accepted","hostAcceptedJobIds must be string[]","hostAcceptedJobIds")]};let t=[],n=[];for(let r=0;r<e.jobs.length;r++){let i=Hg(e.jobs[r],`jobs[${r}]`);i.ok?t.push(i.job):n.push(...i.errors)}return n.length?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:ai,jobs:t,hostAcceptedJobIds:[...e.hostAcceptedJobIds]}}}function qg(e){let t=[];return e.id||t.push(pe("invalid-definition","definition id is required")),(!Number.isInteger(e.version)||e.version<1)&&t.push(pe("invalid-definition","definition version must be an integer >= 1",e.id)),(!Number.isInteger(e.retry.maxAttempts)||e.retry.maxAttempts<1)&&t.push(pe("invalid-retry","maxAttempts must be >= 1",e.id)),(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)&&t.push(pe("invalid-timeout","timeoutMs must be > 0",e.id)),(!Number.isFinite(e.leaseMs)||e.leaseMs<=0)&&t.push(pe("invalid-lease","leaseMs must be > 0",e.id)),e.fallback?.reasonCode||t.push(pe("invalid-fallback","fallback.reasonCode is required",e.id)),t}function Kg(e){switch(e){case"queued":return Qo;case"claimed":return gc;case"awaiting-evaluation":return yc;case"retry-scheduled":return bc;case"ready":return vc;case"applied":return Sc;case"failed":return kc;case"canceled":return Ec;case"superseded":return Ic}}function Gg(e){let t=new Map;for(let c of e.definitions){let f=qg(c);if(f.length)throw new Error(f.map(h=>h.detail).join("; "));t.set(c.id,_e(c))}let n=e.persistence??Rc(),r=e.now??(()=>Date.now()),i=0,o=e.createId??(()=>`job-${++i}`),s=e.maxCorrectionChars??Mg,a=e.maxFailureHistory??Ng,d=new Set(Pg),m=!1,l=[],y=new Set,k=e.worker,C=()=>{if(m)throw new Error(Og)},T=c=>{n.save(c)},v=(c,f,h)=>{l.push(c);let R={jobId:f.jobId,state:f.state,definitionId:f.definitionId,correlationId:f.correlationId};h&&(R.reasonCode=h);let M={type:c,kind:c.includes(".intent.")?"intent":c.includes(".diagnostic.")?"diagnostic":"state",payload:R,correlationId:f.correlationId,causationId:f.causationId,idempotencyKey:`${c}:${f.jobId}:${f.updatedAt}`};e.router?.publish(M)},x=(c,f,h)=>(c.state=f,c.updatedAt=r(),T(c),v(Kg(f),c,h),c),$=c=>c==="applied"||c==="failed"||c==="canceled"||c==="superseded",j=(c,f)=>{let h=c.retry.backoffMs;return h.length?h[Math.min(f-1,h.length-1)]??0:0},D=(c,f)=>f.retryability==="permanent"?"permanent":c.retry.retryableCodes.includes(f.code)||f.retryability==="retryable"?"retryable":f.retryability,V=(c,f)=>(c.fallbackApplied=!0,c.fallback=_e(f.fallback),f.fallback.resultRef&&(c.resultRef=_e(f.fallback.resultRef)),x(c,"failed",f.fallback.reasonCode)),A=(c,f,h)=>(c.failureHistory=[...c.failureHistory,h].slice(-a),c.workerId=null,c.leaseUntil=null,c.attempt>=f.retry.maxAttempts||h.retryability==="permanent"?V(c,f):(c.nextRetryAt=r()+j(f,c.attempt),x(c,"retry-scheduled",h.code))),p=(c,f,h)=>{c.workerId=f,c.leaseUntil=r()+h.leaseMs,c.nextRetryAt=null,c.attempt+=1;let R=x(c,"claimed");return k?.start({jobId:R.jobId,workerId:f,definitionId:R.definitionId,request:_e(R.request),attempt:R.attempt}),R},E={submit(c){C();let f=[];c.idempotencyKey||f.push(pe("missing-idempotency","idempotencyKey is required")),c.correlationId||f.push(pe("missing-correlation","correlationId is required"));let h=t.get(c.definitionId);if(h||f.push(pe("unknown-definition",`unknown definition "${c.definitionId}"`)),f.length||!h)return{ok:!1,errors:f};let R=n.getByIdempotencyKey(c.idempotencyKey);if(R)return{ok:!0,job:R};let M=r(),P={jobId:o(),definitionId:h.id,definitionVersion:h.version,idempotencyKey:c.idempotencyKey,state:"queued",request:_e(c.request),resultRef:null,progress:{value:0,stage:"queued"},attempt:0,failureHistory:[],evaluatorHistory:[],correlationId:c.correlationId,causationId:c.causationId,workerId:null,leaseUntil:null,createdAt:M,updatedAt:M,timeoutAt:M+h.timeoutMs,nextRetryAt:null,supersededBy:null,fallbackApplied:!1};if(T(P),v(mc,P),v(Qo,P),c.supersedeJobId){let F=n.get(c.supersedeJobId);F&&!$(F.state)&&(F.supersededBy=P.jobId,k?.cancel?.(F.jobId),x(F,"superseded","superseded"))}return{ok:!0,job:_e(P)}},claim(c){if(C(),!c)return{ok:!1,errors:[pe("missing-worker","workerId is required")]};E.tick();let h=n.list().filter(M=>M.state==="queued"||M.state==="retry-scheduled"&&(M.nextRetryAt??0)<=r()).sort((M,P)=>M.createdAt-P.createdAt)[0];if(!h)return{ok:!1,errors:[pe("empty-queue","no claimable jobs")]};let R=t.get(h.definitionId);return R?{ok:!0,job:_e(p(h,c,R))}:{ok:!1,errors:[pe("unknown-definition",h.definitionId)]}},reportProgress(c,f){C();let h=n.get(c);return h?h.state!=="claimed"?{ok:!1,errors:[pe("invalid-state",`cannot report progress in ${h.state}`)]}:Cc(f)?f.value<h.progress.value?{ok:!1,errors:[pe("non-monotonic","progress.value must not decrease")]}:(h.progress=_e(f),h.updatedAt=r(),T(h),v(hc,h),{ok:!0,job:_e(h)}):{ok:!1,errors:[pe("invalid-progress","progress value/stage required")]}:{ok:!1,errors:[pe("unknown-job",c)]}},heartbeat(c){C();let f=n.get(c);if(!f)return{ok:!1,errors:[pe("unknown-job",c)]};if(f.state!=="claimed"||!f.workerId)return{ok:!1,errors:[pe("invalid-state","heartbeat requires a claimed job")]};let h=t.get(f.definitionId);return h?(f.leaseUntil=r()+h.leaseMs,f.updatedAt=r(),T(f),{ok:!0,job:_e(f)}):{ok:!1,errors:[pe("unknown-definition",f.definitionId)]}},complete(c,f){C();let h=n.get(c);if(!h)return{ok:!1,errors:[pe("unknown-job",c)]};if(h.state!=="claimed")return{ok:!1,errors:[pe("invalid-state",`cannot complete in ${h.state}`)]};if(!Zo(f))return{ok:!1,errors:[pe("invalid-result-ref","result must be a reference")]};let R=t.get(h.definitionId);return R&&f.kind!==R.resultKind?{ok:!1,errors:[pe("result-kind",`expected result kind "${R.resultKind}"`)]}:(h.resultRef=_e(f),h.workerId=null,h.leaseUntil=null,h.progress={value:Math.max(h.progress.value,1),stage:"awaiting-evaluation"},{ok:!0,job:_e(x(h,"awaiting-evaluation"))})},fail(c,f){C();let h=n.get(c);if(!h)return{ok:!1,errors:[pe("unknown-job",c)]};if(h.state!=="claimed"&&h.state!=="queued")return{ok:!1,errors:[pe("invalid-state",`cannot fail in ${h.state}`)]};let R=t.get(h.definitionId);if(!R)return{ok:!1,errors:[pe("unknown-definition",h.definitionId)]};let M=D(R,f),P={attempt:h.attempt,code:f.code,retryability:M,at:r(),detail:f.detail};return k?.cancel?.(h.jobId),{ok:!0,job:_e(A(h,R,P))}},evaluate(c,f,h){C();let R=n.get(c);if(!R)return{ok:!1,errors:[pe("unknown-job",c)]};if(R.state!=="awaiting-evaluation")return{ok:!1,errors:[pe("invalid-state","evaluate requires awaiting-evaluation")]};let M=t.get(R.definitionId);if(!M)return{ok:!1,errors:[pe("unknown-definition",R.definitionId)]};if(h!==void 0&&h.length>s)return{ok:!1,errors:[pe("correction-bound",`correction exceeds ${s} chars`)]};if(R.evaluatorHistory=[...R.evaluatorHistory,{decision:f,at:r(),correction:h?.slice(0,s)}],f==="accept")return R.progress={value:1,stage:"ready"},{ok:!0,job:_e(x(R,"ready"))};let P={attempt:R.attempt,code:f==="revise"?"evaluator-revise":"evaluator-reject",retryability:"retryable",at:r(),detail:h};return{ok:!0,job:_e(A(R,M,P))}},cancel(c){C();let f=n.get(c);return f?$(f.state)||f.state==="applied"?{ok:!1,errors:[pe("invalid-state",`cannot cancel ${f.state}`)]}:(k?.cancel?.(f.jobId),f.workerId=null,f.leaseUntil=null,{ok:!0,job:_e(x(f,"canceled","canceled"))}):{ok:!1,errors:[pe("unknown-job",c)]}},recoverStale(){C();let c=[],f=r();for(let h of n.list()){if(h.state!=="claimed"||h.leaseUntil==null||h.leaseUntil>f)continue;let R=t.get(h.definitionId);if(!R)continue;k?.cancel?.(h.jobId);let M={attempt:h.attempt,code:"stale-lease",retryability:"retryable",at:f};c.push(_e(A(h,R,M)))}return c},tick(){C();let c=[];c.push(...E.recoverStale());let f=r();for(let h of n.list())if(!($(h.state)||h.state==="ready"||h.state==="applied")&&f>=h.timeoutAt){let R=t.get(h.definitionId);if(!R)continue;let M={attempt:h.attempt,code:"timeout",retryability:"permanent",at:f};k?.cancel?.(h.jobId),c.push(_e(A(h,R,M)))}return c},accept(c){C();let f=n.get(c);return f?f.state!=="ready"?{ok:!1,errors:[pe("not-ready","host may accept only ready jobs")]}:(y.add(f.jobId),{ok:!0,job:_e(x(f,"applied"))}):{ok:!1,errors:[pe("unknown-job",c)]}},get(c){return C(),n.get(c)},getByIdempotencyKey(c){return C(),n.getByIdempotencyKey(c)},inspect(){return C(),{destroyed:!1,jobs:n.list(),events:[...l]}},snapshot(){return C(),{schemaVersion:ai,jobs:n.list(),hostAcceptedJobIds:[...y]}},restore(c){C();let f=Bg(c);if(!f.ok)return f;let h=n.list(),R=[...y];try{n.replaceAll(f.snapshot.jobs),y.clear();for(let M of f.snapshot.hostAcceptedJobIds)y.add(M);return{ok:!0,snapshot:_e(f.snapshot)}}catch{n.replaceAll(h),y.clear();for(let M of R)y.add(M);return{ok:!1,errors:[pe("restore-failed","restore rolled back")]}}},exportTrace(){return C(),{jobs:n.list().map(c=>Xo(c,d)),events:[...l]}},destroy(){m=!0}};return k?.bind({reportProgress:(c,f)=>E.reportProgress(c,f),complete:(c,f)=>E.complete(c,f),fail:(c,f)=>E.fail(c,f),heartbeat:c=>E.heartbeat(c)}),E}var er=1,rs=["room","region","landmark","frontier"],Wg=["local","regional"],jg=["canonical","discoverable","hidden"],Ug=["open","locked","disabled"],Jg=["character","party"],zg=["available","busy","traveling"],wc="world.graph.state.node-added",Pc="world.graph.state.edge-added",xc="world.graph.state.discovered",ts="world.graph.state.transit",ns="world.graph.diagnostic.lifecycle";var Yg=new Set(rs),Xg=new Set(Wg),Qg=new Set(jg),Tc=new Set(Ug),Zg=new Set(Jg),Dc=new Set(zg),eh="World graph has been destroyed",th=4096;function ie(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Nt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function bt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Tn(e){return typeof e=="number"&&Number.isFinite(e)}function rt(e){return typeof e=="string"&&e.length>0}function is(e,t,n){if(e!==void 0){if(!Nt(e)){n.push(ie("invalid-metadata","metadata must be a JSON object",t));return}return bt(e)}}function nh(e,t,n){if(e!==void 0){if(!Nt(e)){n.push(ie("invalid-requirements","requirements must be a JSON object",t));return}return bt(e)}}function rh(e,t,n){if(e===void 0)return;if(!Nt(e)){n.push(ie("invalid-cost","cost must be a JSON object",t));return}let r={};for(let[i,o]of Object.entries(e)){if(!Tn(o)){n.push(ie("invalid-cost",`cost.${i} must be finite`,t));continue}r[i]=o}return r}function Oc(e,t){if(!Nt(e))return{ok:!1,errors:[ie("invalid-node","node must be an object",t)]};let n=[];rt(e.id)||n.push(ie("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(ie("invalid-version","version must be an integer \u2265 1",`${t}.version`)),Yg.has(e.kind)||n.push(ie("invalid-kind","unknown node kind",`${t}.kind`)),Xg.has(e.mapLayer)||n.push(ie("invalid-map-layer","unknown mapLayer",`${t}.mapLayer`)),e.frontier!==void 0&&typeof e.frontier!="boolean"&&n.push(ie("invalid-frontier","frontier must be boolean",`${t}.frontier`));let r=is(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let i={id:e.id,version:e.version,kind:e.kind,mapLayer:e.mapLayer};return e.frontier===!0&&(i.frontier=!0),r&&(i.metadata=r),{ok:!0,node:i}}function Mc(e,t){if(!Nt(e))return{ok:!1,errors:[ie("invalid-edge","edge must be an object",t)]};let n=[];rt(e.id)||n.push(ie("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(ie("invalid-version","version must be an integer \u2265 1",`${t}.version`)),rt(e.from)||n.push(ie("invalid-from","from is required",`${t}.from`)),rt(e.to)||n.push(ie("invalid-to","to is required",`${t}.to`)),typeof e.directed!="boolean"&&n.push(ie("invalid-directed","directed must be boolean",`${t}.directed`)),rt(e.kind)||n.push(ie("invalid-kind","kind is required",`${t}.kind`)),Qg.has(e.visibility)||n.push(ie("invalid-visibility","unknown visibility",`${t}.visibility`)),Tc.has(e.access)||n.push(ie("invalid-access","unknown access",`${t}.access`));let r=nh(e.requirements,`${t}.requirements`,n),i=rh(e.cost,`${t}.cost`,n),o=is(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let s={id:e.id,version:e.version,from:e.from,to:e.to,directed:e.directed,kind:e.kind,visibility:e.visibility,access:e.access};return r&&(s.requirements=r),i&&(s.cost=i),o&&(s.metadata=o),{ok:!0,edge:s}}function Nc(e,t){if(!Nt(e))return{ok:!1,errors:[ie("invalid-transit","transit must be an object",t)]};let n=[];return rt(e.originNodeId)||n.push(ie("invalid-origin","originNodeId is required",`${t}.originNodeId`)),rt(e.destinationNodeId)||n.push(ie("invalid-destination","destinationNodeId is required",`${t}.destinationNodeId`)),(!Array.isArray(e.routeEdgeIds)||e.routeEdgeIds.some(r=>!rt(r)))&&n.push(ie("invalid-route","routeEdgeIds must be strings",`${t}.routeEdgeIds`)),Tn(e.departedAt)||n.push(ie("invalid-time","departedAt must be finite semantic time",`${t}.departedAt`)),Tn(e.expectedArrival)||n.push(ie("invalid-time","expectedArrival must be finite semantic time",`${t}.expectedArrival`)),n.length?{ok:!1,errors:n}:{ok:!0,transit:{originNodeId:e.originNodeId,destinationNodeId:e.destinationNodeId,routeEdgeIds:[...e.routeEdgeIds],departedAt:e.departedAt,expectedArrival:e.expectedArrival}}}function _c(e,t){if(!Nt(e))return{ok:!1,errors:[ie("invalid-entity","entity must be an object",t)]};let n=[];rt(e.id)||n.push(ie("invalid-id","id is required",`${t}.id`)),Zg.has(e.kind)||n.push(ie("invalid-kind","unknown entity kind",`${t}.kind`)),Dc.has(e.status)||n.push(ie("invalid-status","unknown status",`${t}.status`)),e.locationNodeId!==null&&!rt(e.locationNodeId)&&n.push(ie("invalid-location","locationNodeId must be string or null",`${t}.locationNodeId`));let r=null;if(e.transit!==null&&e.transit!==void 0){let s=Nc(e.transit,`${t}.transit`);s.ok?r=s.transit:n.push(...s.errors)}let i=is(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let o={id:e.id,kind:e.kind,status:e.status,locationNodeId:e.locationNodeId??null,transit:r};return i&&(o.metadata=i),{ok:!0,entity:o}}function ih(e,t){if(!Nt(e))return{ok:!1,errors:[ie("invalid-discovery","discovery must be an object",t)]};let n=[];return rt(e.observerId)||n.push(ie("invalid-observer","observerId is required",`${t}.observerId`)),(!Array.isArray(e.nodeIds)||e.nodeIds.some(r=>!rt(r)))&&n.push(ie("invalid-node-ids","nodeIds must be strings",`${t}.nodeIds`)),(!Array.isArray(e.edgeIds)||e.edgeIds.some(r=>!rt(r)))&&n.push(ie("invalid-edge-ids","edgeIds must be strings",`${t}.edgeIds`)),n.length?{ok:!1,errors:n}:{ok:!0,discovery:{observerId:e.observerId,nodeIds:[...e.nodeIds],edgeIds:[...e.edgeIds]}}}function oh(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[ie("invalid-json","snapshot JSON is invalid")]}}if(!Nt(n))return{ok:!1,errors:[ie("invalid-snapshot","snapshot must be a JSON object")]};let r=n.schemaVersion;if(typeof r=="number"&&r<er){let T=n,v=r;for(;v<er;){let x=t.find($=>$.from===v&&$.to===v+1);if(!x)return{ok:!1,errors:[ie("unsupported-schema",`no migration from schema ${v}`)]};T=x.migrate(T),v+=1}if(n=T,!Nt(n))return{ok:!1,errors:[ie("invalid-snapshot","migrated snapshot must be an object")]};r=n.schemaVersion}if(r!==er)return{ok:!1,errors:[ie("unsupported-schema","unsupported world graph snapshot schema")]};if(!rt(n.graphId))return{ok:!1,errors:[ie("invalid-graph-id","graphId is required","graphId")]};if(!Array.isArray(n.nodes))return{ok:!1,errors:[ie("invalid-nodes","nodes must be an array","nodes")]};if(!Array.isArray(n.edges))return{ok:!1,errors:[ie("invalid-edges","edges must be an array","edges")]};if(!Array.isArray(n.entities))return{ok:!1,errors:[ie("invalid-entities","entities must be an array","entities")]};if(!Array.isArray(n.discovery))return{ok:!1,errors:[ie("invalid-discovery","discovery must be an array","discovery")]};let i=[],o=[],s=new Set;n.nodes.forEach((T,v)=>{let x=Oc(T,`nodes[${v}]`);if(!x.ok){i.push(...x.errors);return}if(s.has(x.node.id)){i.push(ie("duplicate-id","duplicate node id",`nodes[${v}].id`));return}s.add(x.node.id),o.push(x.node)});let a=[],d=new Set;n.edges.forEach((T,v)=>{let x=Mc(T,`edges[${v}]`);if(!x.ok){i.push(...x.errors);return}if(d.has(x.edge.id)){i.push(ie("duplicate-id","duplicate edge id",`edges[${v}].id`));return}s.has(x.edge.id)&&i.push(ie("id-collision","edge id collides with a node id",`edges[${v}].id`)),d.add(x.edge.id),a.push(x.edge)});let m=[],l=new Set;n.entities.forEach((T,v)=>{let x=_c(T,`entities[${v}]`);if(!x.ok){i.push(...x.errors);return}if(l.has(x.entity.id)){i.push(ie("duplicate-id","duplicate entity id",`entities[${v}].id`));return}l.add(x.entity.id),m.push(x.entity)});let y=[],k=new Set;if(n.discovery.forEach((T,v)=>{let x=ih(T,`discovery[${v}]`);if(!x.ok){i.push(...x.errors);return}if(k.has(x.discovery.observerId)){i.push(ie("duplicate-observer","duplicate observerId",`discovery[${v}].observerId`));return}k.add(x.discovery.observerId),y.push(x.discovery)}),i.length)return{ok:!1,errors:i};let C=di(o,a,m,y);return C.length?{ok:!1,errors:C}:{ok:!0,snapshot:{schemaVersion:er,graphId:n.graphId,nodes:o,edges:a,entities:m,discovery:y}}}function di(e,t,n,r){let i=new Set(e.map(a=>a.id)),o=new Set(t.map(a=>a.id)),s=[];for(let a of t)i.has(a.from)||s.push(ie("missing-node",`edge ${a.id} from unknown node`,`edges.${a.id}.from`)),i.has(a.to)||s.push(ie("missing-node",`edge ${a.id} to unknown node`,`edges.${a.id}.to`));for(let a of n)if(a.locationNodeId&&!i.has(a.locationNodeId)&&s.push(ie("missing-node",`entity ${a.id} location unknown`,`entities.${a.id}.locationNodeId`)),a.transit){i.has(a.transit.originNodeId)||s.push(ie("missing-node","transit origin unknown",`entities.${a.id}.transit.originNodeId`)),i.has(a.transit.destinationNodeId)||s.push(ie("missing-node","transit destination unknown",`entities.${a.id}.transit.destinationNodeId`));for(let d of a.transit.routeEdgeIds)o.has(d)||s.push(ie("missing-edge",`transit route missing ${d}`,`entities.${a.id}.transit.routeEdgeIds`))}for(let a of r){for(let d of a.nodeIds)i.has(d)||s.push(ie("missing-node",`discovery references unknown node ${d}`,`discovery.${a.observerId}`));for(let d of a.edgeIds)o.has(d)||s.push(ie("missing-edge",`discovery references unknown edge ${d}`,`discovery.${a.observerId}`))}return s}function es(e){return[...e].map(t=>bt(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Ac(e){return[...e].map(t=>bt(t)).sort((t,n)=>t.id.localeCompare(n.id))}function sh(e){return e.directed?[{from:e.from,to:e.to}]:[{from:e.from,to:e.to},{from:e.to,to:e.from}]}function Qn(){return{version:1,fields:{graphId:{type:"string",optional:!0},nodeId:{type:"string",optional:!0},edgeId:{type:"string",optional:!0},observerId:{type:"string",optional:!0},entityId:{type:"string",optional:!0}}}}function Zn(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function ah(){return[Zn(me(wc,Qn())),Zn(me(Pc,Qn())),Zn(me(xc,Qn())),Zn(me(ts,Qn())),Zn(it(ns,Qn()))]}function dh(e={}){let t=e.migrations??[],n=e.maxPathVisits??th,r=e.source??"world-graph",i=e.graphId??"world",o=!1,s=new Map,a=new Map,d=new Map,m=new Map,l=[],y=[];function k(){if(o)throw new Error(eh)}function C(c,f){let h={type:c,payload:f,source:r,kind:c===ns?"diagnostic":void 0};l.push(h),y.push(c),e.router?.publish(h)}function T(c){return C(ns,{graphId:i}),{ok:!1,errors:c}}function v(){let c=new Map,f=h=>(c.has(h)||c.set(h,[]),c.get(h));for(let h of s.values())f(h.id);for(let h of a.values())for(let R of sh(h))f(R.from).push({edge:h,to:R.to});for(let h of c.values())h.sort((R,M)=>R.edge.id.localeCompare(M.edge.id)||R.to.localeCompare(M.to));return c}function x(c,f){let h=Oc(c,`nodes.${c.id??"?"}`);return h.ok?s.get(h.node.id)?(f.push(ie("duplicate-id",`node ${h.node.id} already exists`,`nodes.${h.node.id}`)),!1):a.has(h.node.id)?(f.push(ie("id-collision","node id collides with an edge id",`nodes.${h.node.id}`)),!1):(s.set(h.node.id,h.node),C(wc,{graphId:i,nodeId:h.node.id}),!0):(f.push(...h.errors),!1)}function $(c,f){let h=Mc(c,`edges.${c.id??"?"}`);return h.ok?a.has(h.edge.id)?(f.push(ie("duplicate-id",`edge ${h.edge.id} already exists`,`edges.${h.edge.id}`)),!1):s.has(h.edge.id)?(f.push(ie("id-collision","edge id collides with a node id",`edges.${h.edge.id}`)),!1):!s.has(h.edge.from)||!s.has(h.edge.to)?(f.push(ie("missing-node",`edge ${h.edge.id} references unknown node`,`edges.${h.edge.id}`)),!1):(a.set(h.edge.id,h.edge),C(Pc,{graphId:i,edgeId:h.edge.id}),!0):(f.push(...h.errors),!1)}function j(c){let f=m.get(c);return f||(f={nodeIds:new Set,edgeIds:new Set},m.set(c,f)),f}function D(c,f){return f.visibility==="canonical"?!0:m.get(c)?.edgeIds.has(f.id)===!0}function V(c,f){if(m.get(c)?.nodeIds.has(f.id))return!0;if(f.kind==="frontier"||f.frontier){for(let h of a.values())if(D(c,h)&&(h.from===f.id||h.to===f.id)){let R=h.from===f.id?h.to:h.from;if(m.get(c)?.nodeIds.has(R))return!0}}return!1}function A(c,f,h,R){let M=new Map;for(let O of s.values())h(O,null)&&M.set(O.id,bt(O));let P=[];for(let O of a.values())!M.has(O.from)||!M.has(O.to)||h(M.get(O.from),O)&&P.push(bt(O));let F=es([...M.values()].filter(O=>O.kind==="frontier"||O.frontier===!0)),W=[...d.values()].filter(O=>!!(O.locationNodeId&&M.has(O.locationNodeId)||O.transit&&(M.has(O.transit.originNodeId)||M.has(O.transit.destinationNodeId)))).map(O=>bt(O)).sort((O,u)=>O.id.localeCompare(u.id));return{kind:c,observerId:f,focusNodeId:R,nodes:es(M.values()),edges:Ac(P),frontiers:F,entities:W}}function p(c,f,h){let R=new Set;if(!s.has(c))return R;let M=v(),P=[{id:c,dist:0}],F=new Set([c]);for(R.add(c);P.length;){let W=P.shift();if(!(W.dist>=f))for(let O of M.get(W.id)??[]){if(!D(h,O.edge)&&O.edge.visibility!=="canonical"||F.has(O.to))continue;let u=s.get(O.to);u&&(u.mapLayer!=="local"&&u.kind!=="frontier"&&!u.frontier||(F.add(O.to),R.add(O.to),P.push({id:O.to,dist:W.dist+1})))}}return R}function E(c,f,h,R,M){let P=R?.maxVisits??n,F=v(),W=new Map([[c,0]]),O=new Map,u=new Set,b=0;for(;b<P;){let w=null,L=1/0;for(let[_,G]of W)u.has(_)||(G<L||G===L&&(w===null||_.localeCompare(w)<0))&&(w=_,L=G);if(w===null||M!==null&&w===M)break;u.add(w),b+=1;for(let _ of F.get(w)??[]){if(!f.canTraverse(_.edge,w,_.to,h))continue;let G=f.cost(_.edge,w,_.to,h);if(!Number.isFinite(G)||G<0)continue;let U=L+G,B=W.get(_.to);(B===void 0||U<B||U===B&&_.edge.id.localeCompare(O.get(_.to)?.edge.id??_.edge.id)<0)&&(W.set(_.to,U),O.set(_.to,{node:w,edge:_.edge,cost:G}))}}return{dist:W,prev:O}}return{addNode(c){k();let f=[];return x(c,f),f.length?T(f):{ok:!0}},addEdge(c){k();let f=[];return $(c,f),f.length?T(f):{ok:!0}},applyPatch(c){k();let f=new Map(s),h=new Map(a),R=l.length,M=y.length,P=[];for(let F of c.nodes??[])x(F,P);for(let F of c.edges??[])$(F,P);if(P.length){s.clear(),a.clear();for(let[F,W]of f)s.set(F,W);for(let[F,W]of h)a.set(F,W);return l.length=R,y.length=M,T(P)}return{ok:!0}},removeNode(c){if(k(),!s.has(c))return T([ie("unknown-node",c)]);let f=di([...s.values()].filter(R=>R.id!==c),[...a.values()].filter(R=>R.from!==c&&R.to!==c),[...d.values()],[...m.entries()].map(([R,M])=>({observerId:R,nodeIds:[...M.nodeIds].filter(P=>P!==c),edgeIds:[...M.edgeIds]}))).filter(R=>R.code!=="missing-node"||!R.detail.includes(c));if(f.length)return T(f);let h=[...a.values()].filter(R=>R.from===c||R.to===c);if(h.length)return T([ie("node-in-use",`remove incident edges first (${h[0].id})`)]);for(let R of d.values())if(R.locationNodeId===c||R.transit?.originNodeId===c||R.transit?.destinationNodeId===c)return T([ie("node-in-use",`entity ${R.id} still references node`)]);s.delete(c);for(let R of m.values())R.nodeIds.delete(c);return{ok:!0}},removeEdge(c){if(k(),!a.has(c))return T([ie("unknown-edge",c)]);for(let f of d.values())if(f.transit?.routeEdgeIds.includes(c))return T([ie("edge-in-use",`entity ${f.id} still references edge`)]);a.delete(c);for(let f of m.values())f.edgeIds.delete(c);return{ok:!0}},setEdgeAccess(c,f){k();let h=a.get(c);return h?Tc.has(f)?(a.set(c,{...h,access:f}),{ok:!0}):T([ie("invalid-access",f)]):T([ie("unknown-edge",c)])},discover(c,f){if(k(),!rt(c))return T([ie("invalid-observer","observerId is required")]);let h=[];for(let M of f.nodeIds??[])s.has(M)||h.push(ie("unknown-node",M));for(let M of f.edgeIds??[])a.has(M)||h.push(ie("unknown-edge",M));if(h.length)return T(h);let R=j(c);for(let M of f.nodeIds??[])R.nodeIds.add(M);for(let M of f.edgeIds??[])R.edgeIds.add(M);return C(xc,{graphId:i,observerId:c}),{ok:!0}},upsertEntity(c){k();let f=_c(c,`entities.${c.id??"?"}`);if(!f.ok)return T(f.errors);let h=di([...s.values()],[...a.values()],[f.entity],[]);return h.length?T(h):(d.set(f.entity.id,f.entity),{ok:!0})},startTransit(c,f,h="traveling"){k();let R=d.get(c);if(!R)return T([ie("unknown-entity",c)]);let M=Nc(f,"transit");if(!M.ok)return T(M.errors);let P={...R,status:h,locationNodeId:null,transit:M.transit},F=di([...s.values()],[...a.values()],[P],[]);return F.length?T(F):(d.set(c,P),C(ts,{graphId:i,entityId:c}),{ok:!0})},completeTransit(c,f){k();let h=d.get(c);return h?h.transit?Tn(f)?(d.set(c,{...h,status:"available",locationNodeId:h.transit.destinationNodeId,transit:null}),C(ts,{graphId:i,entityId:c,semanticTime:f}),{ok:!0}):T([ie("invalid-time","semanticTime must be finite")]):T([ie("not-traveling",c)]):T([ie("unknown-entity",c)])},setEntityStatus(c,f){k();let h=d.get(c);return h?Dc.has(f)?(d.set(c,{...h,status:f}),{ok:!0}):T([ie("invalid-status",f)]):T([ie("unknown-entity",c)])},getNode(c){k();let f=s.get(c);return f?bt(f):void 0},getEdge(c){k();let f=a.get(c);return f?bt(f):void 0},getEntity(c){k();let f=d.get(c);return f?bt(f):void 0},projectCanonical(){return k(),A("canonical",void 0,()=>!0)},projectKnown(c){return k(),A("known",c,(f,h)=>h?D(c,h):V(c,f))},projectLocal(c,f,h=8){k();let R=p(f,h,c);return A("local",c,(M,P)=>R.has(M.id)?P?D(c,P)||P.visibility==="canonical":V(c,M)||R.has(M.id):!1,f)},projectRegional(c){return k(),A("regional",c,(f,h)=>f.mapLayer!=="regional"&&f.kind!=="frontier"&&!f.frontier?!1:h?D(c,h):V(c,f))},findPath(c,f,h,R,M){if(k(),!s.has(c))return{ok:!1,errors:[ie("unknown-node",c)]};if(!s.has(f))return{ok:!1,errors:[ie("unknown-node",f)]};if(!Tn(R.semanticTime))return{ok:!1,errors:[ie("invalid-time","semanticTime must be finite")]};if(c===f)return{ok:!0,path:{from:c,to:f,nodeIds:[c],steps:[],totalCost:0}};let{dist:P,prev:F}=E(c,h,R,M,f);if(!P.has(f))return{ok:!1,errors:[ie("unreachable",f)]};let W=[],O=[f],u=f;for(;u!==c;){let b=F.get(u);if(!b)return{ok:!1,errors:[ie("unreachable",f)]};W.push({edgeId:b.edge.id,from:b.node,to:u,cost:b.cost}),u=b.node,O.push(u)}return W.reverse(),O.reverse(),{ok:!0,path:{from:c,to:f,nodeIds:O,steps:W,totalCost:P.get(f)}}},reachable(c,f,h,R){if(k(),!s.has(c)||!Tn(h.semanticTime))return{nodeIds:[]};let{dist:M}=E(c,f,h,R,null);return{nodeIds:[...M.keys()].sort((P,F)=>P.localeCompare(F))}},inspect(){return k(),{destroyed:!1,graphId:i,nodeCount:s.size,edgeCount:a.size,entityCount:d.size,observerCount:m.size,events:[...y]}},snapshot(){return k(),{schemaVersion:er,graphId:i,nodes:es(s.values()),edges:Ac(a.values()),entities:[...d.values()].map(c=>bt(c)).sort((c,f)=>c.id.localeCompare(f.id)),discovery:[...m.entries()].map(([c,f])=>({observerId:c,nodeIds:[...f.nodeIds].sort((h,R)=>h.localeCompare(R)),edgeIds:[...f.edgeIds].sort((h,R)=>h.localeCompare(R))})).sort((c,f)=>c.observerId.localeCompare(f.observerId))}},restore(c){k();let f=oh(c,t);if(!f.ok)return f;let h={graphId:i,nodes:new Map(s),edges:new Map(a),entities:new Map(d),discovery:new Map([...m.entries()].map(([R,M])=>[R,{nodeIds:new Set(M.nodeIds),edgeIds:new Set(M.edgeIds)}]))};try{i=f.snapshot.graphId,s.clear(),a.clear(),d.clear(),m.clear();for(let R of f.snapshot.nodes)s.set(R.id,R);for(let R of f.snapshot.edges)a.set(R.id,R);for(let R of f.snapshot.entities)d.set(R.id,R);for(let R of f.snapshot.discovery)m.set(R.observerId,{nodeIds:new Set(R.nodeIds),edgeIds:new Set(R.edgeIds)});return{ok:!0,snapshot:bt(f.snapshot)}}catch{i=h.graphId,s.clear(),a.clear(),d.clear(),m.clear();for(let[R,M]of h.nodes)s.set(R,M);for(let[R,M]of h.edges)a.set(R,M);for(let[R,M]of h.entities)d.set(R,M);for(let[R,M]of h.discovery)m.set(R,M);return{ok:!1,errors:[ie("restore-failed","restore rolled back")]}}},events(){return k(),[...l]},destroy(){o=!0,s.clear(),a.clear(),d.clear(),m.clear()}}}var pi=1,mi=1,ch=["add","replace","revise","remove","tombstone","link","unlink"],uh=["base-revision","entity-revision","entity-hash","identity-required","identity-absent","capability","schema"],us="world.patch.state.accepted",Hc="world.patch.state.rejected",Bc="world.patch.state.superseded",fi="world.patch.diagnostic.lifecycle";var lh=["invalid-schema","unknown-field","unknown-op","missing-field","missing-ref","referential-integrity","stale-base","precondition-failed","asset-unavailable","content-unavailable","binding-unavailable","cycle","over-limit","idempotency-conflict","superseded","invalid-snapshot","invalid-version","destroyed","domain","capability-denied","schema-mismatch","identity-required","identity-absent","entity-revision","entity-hash","duplicate-id","graph-apply-failed","publish-failed"],ph=zt,Lc=new Set(ch),fh=new Set(uh),pS=new Set(lh),ss=new Set(rs),as=new Set(["exit","edge","graph-edge"]),mh="World patch applier has been destroyed",gh=new Set(["patchId","schemaVersion","baseRevision","idempotencyKey","preconditions","operations","provenance","supersedes"]),hh=new Set(["op","kind","id","value","from","to","order","refs"]),yh=new Set(["jobId","producer","contentRevisions"]),bh={"base-revision":new Set(["type","revision"]),"entity-revision":new Set(["type","kind","id","revision"]),"entity-hash":new Set(["type","kind","id","hash"]),"identity-required":new Set(["type","kind","id"]),"identity-absent":new Set(["type","kind","id"]),capability:new Set(["type","name"]),schema:new Set(["type","schemaVersion"])},vh=256,Sh=32,kh=4096,Eh=262144;function te(e,t,n,r){let i=n?{code:e,detail:t,path:n}:{code:e,detail:t};return r?.expectedRevision!==void 0&&(i.expectedRevision=r.expectedRevision),r?.actualRevision!==void 0&&(i.actualRevision=r.actualRevision),i}function We(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function we(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ge(e){return typeof e=="string"&&e.length>0}function at(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)}function tr(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(te("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function ds(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(ds);let t=e,n={};for(let r of Object.keys(t).sort())n[r]=ds(t[r]);return n}function Vc(e){let t=JSON.stringify(ds(e)??null),n=2166136261;for(let r=0;r<t.length;r++)n^=t.charCodeAt(r),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function cs(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>cs(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?It:cs(o,t);return r}function Ih(){return{revision:0,entities:[],links:[],accepted:[]}}function qc(e){return[...e].map(t=>we(t)).sort((t,n)=>{let r=t.kind.localeCompare(n.kind);return r!==0?r:t.id.localeCompare(n.id)})}function Kc(e){return[...e].map(t=>we(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Rh(e){return[...e].map(t=>we(t)).sort((t,n)=>t.revision!==n.revision?t.revision-n.revision:t.patchId.localeCompare(n.patchId))}function gi(e){return{revision:e.revision,entities:qc(e.entities),links:Kc(e.links),accepted:Rh(e.accepted)}}function ci(e,t){return e.length<=t?e:[...e.slice(0,t),te("over-limit",`truncated ${e.length-t} additional diagnostics`)]}function Gc(e,t){let n=e.order??0,r=t.order??0;return n!==r?n-r:e.op!==t.op?e.op.localeCompare(t.op):e.kind!==t.kind?e.kind.localeCompare(t.kind):e.id.localeCompare(t.id)}function ui(){return{version:1,fields:{patchId:{type:"string"},oldRevision:{type:"number",optional:!0},newRevision:{type:"number",optional:!0},revision:{type:"number",optional:!0},producer:{type:"string",optional:!0},jobId:{type:"string",optional:!0},contentRevisions:{type:"array",optional:!0},reasonCode:{type:"string",optional:!0},supersededBy:{type:"string",optional:!0},changedIdentities:{type:"array",optional:!0}}}}function li(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Ch(){return[li(me(us,ui())),li(me(Hc,ui())),li(me(Bc,ui())),li(it(fi,ui()))]}function Wc(){let e=Ih();return{current(){return we(e)},begin(){let t=we(e),n=null;return{applyWorldRevision(r){n=gi(r)},commit(){n&&(e=n),n=null},rollback(){e=we(t),n=null}}}}}function jc(e,t,n){if(e===void 0)return;if(!We(e)){n.push(te("invalid-schema","refs must be an object",t));return}tr(e,new Set(["contentId","contentRevision","binding","asset","identity"]),t,n);let r={};for(let i of["contentId","contentRevision","binding","asset","identity"]){let o=e[i];if(o!==void 0){if(!ge(o)){n.push(te("invalid-schema",`refs.${i} must be a non-empty string`,`${t}.${i}`));continue}r[i]=o}}return r}function Ah(e,t,n){if(!We(e)){n.push(te("invalid-schema","operation must be an object",t));return}tr(e,hh,t,n),(!ge(e.op)||!Lc.has(e.op))&&n.push(te("unknown-op",`unknown op "${String(e.op)}"`,`${t}.op`)),ge(e.kind)||n.push(te("missing-field","kind is required",`${t}.kind`));let r=e.id;ge(r)||((e.op==="link"||e.op==="unlink")&&ge(e.from)&&ge(e.to)?r=`${e.kind??"link"}:${e.from}:${e.to}`:n.push(te("missing-field","id is required",`${t}.id`))),e.order!==void 0&&!at(e.order)&&n.push(te("invalid-schema","order must be an integer",`${t}.order`)),e.from!==void 0&&!ge(e.from)&&n.push(te("invalid-schema","from must be a non-empty string",`${t}.from`)),e.to!==void 0&&!ge(e.to)&&n.push(te("invalid-schema","to must be a non-empty string",`${t}.to`));let i=jc(e.refs,`${t}.refs`,n);if(!ge(e.op)||!Lc.has(e.op)||!ge(e.kind)||!ge(r))return;(e.op==="link"||e.op==="unlink")&&(!ge(e.from)||!ge(e.to))&&n.push(te("missing-field","link/unlink require from and to",t));let o={op:e.op,kind:e.kind,id:r};return at(e.order)&&(o.order=e.order),e.value!==void 0&&(o.value=we(e.value)),ge(e.from)&&(o.from=e.from),ge(e.to)&&(o.to=e.to),i&&Object.keys(i).length&&(o.refs=i),o}function wh(e,t,n){if(!We(e)){n.push(te("invalid-schema","precondition must be an object",t));return}if(!ge(e.type)||!fh.has(e.type)){n.push(te("invalid-schema",`unknown precondition type "${String(e.type)}"`,`${t}.type`));return}let r=e.type;switch(tr(e,bh[r],t,n),r){case"base-revision":if(!at(e.revision)||e.revision<0){n.push(te("invalid-schema","revision must be an integer \u2265 0",`${t}.revision`));return}return{type:r,revision:e.revision};case"entity-revision":if(!ge(e.kind)||!ge(e.id)||!at(e.revision)||e.revision<1){n.push(te("invalid-schema","kind, id, and revision \u2265 1 are required",t));return}return{type:r,kind:e.kind,id:e.id,revision:e.revision};case"entity-hash":if(!ge(e.kind)||!ge(e.id)||!ge(e.hash)){n.push(te("invalid-schema","kind, id, and hash are required",t));return}return{type:r,kind:e.kind,id:e.id,hash:e.hash};case"identity-required":case"identity-absent":if(!ge(e.kind)||!ge(e.id)){n.push(te("invalid-schema","kind and id are required",t));return}return{type:r,kind:e.kind,id:e.id};case"capability":if(!ge(e.name)){n.push(te("invalid-schema","capability name is required",`${t}.name`));return}return{type:r,name:e.name};case"schema":if(!at(e.schemaVersion)||e.schemaVersion<1){n.push(te("invalid-schema","schemaVersion must be an integer \u2265 1",`${t}.schemaVersion`));return}return{type:r,schemaVersion:e.schemaVersion}}}function Uc(e,t,n){if(!We(e)){n.push(te("invalid-schema","provenance is required",t));return}if(tr(e,yh,t,n),!ge(e.producer)){n.push(te("missing-field","producer is required",`${t}.producer`));return}let r={producer:e.producer};return e.jobId!==void 0&&(ge(e.jobId)?r.jobId=e.jobId:n.push(te("invalid-schema","jobId must be a non-empty string",`${t}.jobId`))),e.contentRevisions!==void 0&&(!Array.isArray(e.contentRevisions)||e.contentRevisions.some(i=>!ge(i))?n.push(te("invalid-schema","contentRevisions must be string[]",`${t}.contentRevisions`)):r.contentRevisions=[...e.contentRevisions]),r}function Ph(e,t){let n=[],r="";try{r=JSON.stringify(e)??""}catch{return{errors:[te("invalid-schema","patch is not JSON-serializable")]}}if(r.length>t.maxBytes&&n.push(te("over-limit",`patch exceeds ${t.maxBytes} bytes`)),!We(e))return{errors:[te("invalid-schema","patch must be an object"),...n]};tr(e,gh,"",n),ge(e.patchId)||n.push(te("missing-field","patchId is required","patchId")),e.schemaVersion!==pi&&n.push(te("schema-mismatch",`schemaVersion must be ${pi}`,"schemaVersion")),(!at(e.baseRevision)||e.baseRevision<0)&&n.push(te("invalid-schema","baseRevision must be an integer \u2265 0","baseRevision")),ge(e.idempotencyKey)||n.push(te("missing-field","idempotencyKey is required","idempotencyKey")),e.supersedes!==void 0&&!ge(e.supersedes)&&n.push(te("invalid-schema","supersedes must be a non-empty string","supersedes"));let i=Uc(e.provenance,"provenance",n);Array.isArray(e.operations)?e.operations.length>t.maxOperations&&n.push(te("over-limit",`operations exceed ${t.maxOperations}`,"operations")):n.push(te("invalid-schema","operations must be an array","operations"));let o=[];if(Array.isArray(e.operations))for(let d=0;d<e.operations.length;d++){let m=Ah(e.operations[d],`operations[${d}]`,n);m&&o.push(m)}let s=[];if(e.preconditions!==void 0)if(!Array.isArray(e.preconditions))n.push(te("invalid-schema","preconditions must be an array","preconditions"));else for(let d=0;d<e.preconditions.length;d++){let m=wh(e.preconditions[d],`preconditions[${d}]`,n);m&&s.push(m)}if(n.length)return{errors:n};let a={patchId:e.patchId,schemaVersion:pi,baseRevision:e.baseRevision,idempotencyKey:e.idempotencyKey,operations:o,provenance:i};return s.length&&(a.preconditions=s),ge(e.supersedes)&&(a.supersedes=e.supersedes),{patch:a,errors:n}}function xh(e){let t=new Map;for(let r of e.entities)t.set(r.id,we(r));let n=new Map;for(let r of e.links)n.set(r.id,we(r));return{revision:e.revision,entities:t,links:n,accepted:e.accepted.map(r=>we(r))}}function Dn(e,t,n){let r=e.get(t);if(r&&!(n&&r.kind!==n))return r}function Th(e,t,n){let r=xh(e),i=[],o=[],s=[...t].sort(Gc),a=(m,l)=>{let y={kind:m.kind,id:m.id,revision:l?l.revision+1:1,hash:Vc(m.value??null),value:m.value===void 0?null:we(m.value),tombstoned:!1};m.refs&&(y.refs=we(m.refs)),r.entities.set(m.id,y),i.push({op:m.op,kind:m.kind,id:m.id})},d=m=>{!m.from||!m.to||r.links.set(m.id,{id:m.id,kind:m.kind,from:m.from,to:m.to,...m.value!==void 0?{value:we(m.value)}:{}})};for(let m=0;m<s.length;m++){let l=s[m],y=`operations[${m}]`,k=r.entities.get(l.id);switch(l.op){case"add":if(k&&!k.tombstoned){o.push(te("duplicate-id",`identity "${l.id}" already exists`,y));break}a(l),l.from&&l.to&&d(l);break;case"replace":case"revise":if(!k||k.tombstoned){o.push(te("missing-ref",`identity "${l.id}" is absent`,y));break}if(k.kind!==l.kind){o.push(te("missing-ref",`identity "${l.id}" is kind "${k.kind}"`,y));break}a(l,k),l.from&&l.to&&d(l);break;case"remove":if(!k){o.push(te("missing-ref",`identity "${l.id}" is absent`,y));break}r.entities.delete(l.id),r.links.delete(l.id);for(let[C,T]of[...r.links])(T.from===l.id||T.to===l.id)&&r.links.delete(C);i.push({op:l.op,kind:l.kind,id:l.id});break;case"tombstone":if(!k){o.push(te("missing-ref",`identity "${l.id}" is absent`,y));break}k.tombstoned=!0,k.revision+=1,k.hash=Vc(null),k.value=null,r.links.delete(l.id);for(let[C,T]of[...r.links])(T.from===l.id||T.to===l.id)&&r.links.delete(C);i.push({op:l.op,kind:l.kind,id:l.id});break;case"link":if(k&&k.kind!==l.kind&&!k.tombstoned){o.push(te("duplicate-id",`identity "${l.id}" already exists`,y));break}a(l,k&&!k.tombstoned?k:void 0),d(l);break;case"unlink":if(!r.links.has(l.id)&&!k){o.push(te("missing-ref",`link "${l.id}" is absent`,y));break}r.links.delete(l.id),k&&(k.tombstoned=!0,k.revision+=1),i.push({op:l.op,kind:l.kind,id:l.id});break}}r.entities.size>n.maxEntities&&o.push(te("over-limit",`entities exceed ${n.maxEntities}`));for(let m of r.links.values()){let l=r.entities.get(m.from),y=r.entities.get(m.to);(!l||l.tombstoned)&&o.push(te("referential-integrity",`link "${m.id}" from "${m.from}" is absent`,`links.${m.id}.from`)),(!y||y.tombstoned)&&o.push(te("referential-integrity",`link "${m.id}" to "${m.to}" is absent`,`links.${m.id}.to`))}return{world:r,changed:i,errors:o}}function Dh(e,t,n,r){let i=[];e.baseRevision!==t.revision&&i.push(te("stale-base",`baseRevision ${e.baseRevision} is stale; current revision is ${t.revision}`,"baseRevision",{expectedRevision:t.revision,actualRevision:e.baseRevision}));for(let o=0;o<(e.preconditions??[]).length;o++){let s=e.preconditions[o],a=`preconditions[${o}]`;switch(s.type){case"base-revision":s.revision!==t.revision&&i.push(te("stale-base",`expected base revision ${s.revision}, current is ${t.revision}`,a,{expectedRevision:t.revision,actualRevision:s.revision}));break;case"entity-revision":{let d=Dn(n,s.id,s.kind);d?d.revision!==s.revision&&i.push(te("entity-revision",`identity "${s.id}" revision is ${d.revision}, expected ${s.revision}`,a)):i.push(te("identity-required",`identity "${s.id}" is absent`,a));break}case"entity-hash":{let d=Dn(n,s.id,s.kind);d?d.hash!==s.hash&&i.push(te("entity-hash",`identity "${s.id}" hash is ${d.hash}, expected ${s.hash}`,a)):i.push(te("identity-required",`identity "${s.id}" is absent`,a));break}case"identity-required":(!Dn(n,s.id,s.kind)||Dn(n,s.id,s.kind)?.tombstoned)&&i.push(te("identity-required",`identity "${s.id}" is required`,a));break;case"identity-absent":Dn(n,s.id,s.kind)&&!Dn(n,s.id,s.kind)?.tombstoned&&i.push(te("identity-absent",`identity "${s.id}" must be absent`,a));break;case"capability":r.has(s.name)||i.push(te("capability-denied",`capability "${s.name}" is not granted`,a));break;case"schema":s.schemaVersion!==pi&&i.push(te("schema-mismatch",`schema requirement ${s.schemaVersion} is unsupported`,a));break}}return i}function Oh(e){let t=new Map;for(let o of e){let s=t.get(o.from)??[];s.push(o.to),t.set(o.from,s),t.has(o.to)||t.set(o.to,t.get(o.to)??[])}let n=new Set,r=new Set,i=o=>{if(n.has(o))return!0;if(r.has(o))return!1;n.add(o);for(let s of t.get(o)??[])if(i(s))return!0;return n.delete(o),r.add(o),!1};for(let o of[...t.keys()].sort())if(i(o))return!0;return!1}function Fc(e,t,n){return e?e.hasRevision?.(t??"",n)?!0:(e.available??[]).some(r=>r.revision===n&&(t===void 0||!r.contentId||r.contentId===t)):!1}function Mh(e,t,n,r,i,o){let s=[],a=i?.listedIds?new Set(i.listedIds):void 0,d=o?.availableIds?new Set(o.availableIds):void 0,m=new Set(n.entities.filter(l=>!l.tombstoned).map(l=>l.id));for(let l of t)m.add(l.id);for(let l of e.provenance.contentRevisions??[])r&&!Fc(r,void 0,l)&&s.push(te("content-unavailable",`content revision "${l}" is not available`,"provenance.contentRevisions"));for(let l=0;l<t.length;l++){let y=t[l],k=`operations[${l}]`,C=y.refs?.contentRevision,T=y.refs?.contentId;C&&r&&!Fc(r,T,C)&&s.push(te("content-unavailable",`content revision "${C}" is not available`,`${k}.refs`));let v=y.refs?.binding??(y.kind==="presentation-binding"?y.id:void 0);v&&a&&!a.has(v)&&s.push(te("binding-unavailable",`binding "${v}" is not listed`,`${k}`));let x=y.refs?.asset??(y.kind==="asset"?y.id:void 0);x&&d&&!d.has(x)&&s.push(te("asset-unavailable",`asset "${x}" is not available`,`${k}`));let $=y.refs?.identity;$&&!m.has($)&&s.push(te("missing-ref",`ref identity "${$}" is absent`,`${k}.refs`))}return s}function $c(e){if(!ss.has(e.kind))return;let t=We(e.value)?e.value:{},n={id:e.id,version:at(t.version)&&t.version>=1?t.version:1,kind:ge(t.kind)&&ss.has(t.kind)?t.kind:e.kind,mapLayer:t.mapLayer==="regional"?"regional":"local"};return t.frontier===!0&&(n.frontier=!0),We(t.metadata)&&(n.metadata=we(t.metadata)),n}function os(e){if(!as.has(e.kind)||!e.from||!e.to)return;let t=We(e.value)?e.value:{},n=t.visibility==="canonical"||t.visibility==="hidden"?t.visibility:"discoverable",r=t.access==="locked"||t.access==="disabled"?t.access:"open",i={id:e.id,version:at(t.version)&&t.version>=1?t.version:1,from:e.from,to:e.to,directed:t.directed===!0,kind:ge(t.kind)?t.kind:"door",visibility:n,access:r};if(We(t.requirements)&&(i.requirements=we(t.requirements)),We(t.cost)){let o={};for(let[s,a]of Object.entries(t.cost))typeof a=="number"&&Number.isFinite(a)&&(o[s]=a);Object.keys(o).length&&(i.cost=o)}return We(t.metadata)&&(i.metadata=we(t.metadata)),i}function Nh(e,t){let n=e.snapshot(),r=new Map(n.nodes.map(d=>[d.id,we(d)])),i=new Map(n.edges.map(d=>[d.id,we(d)])),o=[...t].sort(Gc),s=d=>{r.delete(d);for(let[m,l]of[...i])(l.from===d||l.to===d)&&i.delete(m)};for(let d of o)switch(d.op){case"add":{let m=$c(d);m&&!r.has(m.id)&&r.set(m.id,m);let l=os(d);l&&!i.has(l.id)&&i.set(l.id,l);break}case"replace":case"revise":{let m=$c(d);m&&r.set(m.id,m);let l=os(d);l&&i.set(l.id,l);break}case"link":{let m=os(d);m&&i.set(m.id,m);break}case"remove":case"tombstone":ss.has(d.kind)&&s(d.id),as.has(d.kind)&&i.delete(d.id);break;case"unlink":as.has(d.kind)&&i.delete(d.id);break}let a=e.restore({...n,nodes:[...r.values()],edges:[...i.values()]});return a.ok?[]:a.errors.map(d=>te("graph-apply-failed",d.detail,d.path))}function _h(e,t){let n=[];if(!We(e))return{errors:[te("invalid-snapshot","world must be an object",t)]};if((!at(e.revision)||e.revision<0)&&n.push(te("invalid-snapshot","revision must be an integer \u2265 0",`${t}.revision`)),!Array.isArray(e.entities)||!Array.isArray(e.links)||!Array.isArray(e.accepted))return n.push(te("invalid-snapshot","entities, links, and accepted must be arrays",t)),{errors:n};let r=[];for(let s=0;s<e.entities.length;s++){let a=e.entities[s],d=`${t}.entities[${s}]`;if(!We(a)){n.push(te("invalid-snapshot","entity must be an object",d));continue}if(!ge(a.kind)||!ge(a.id)||!at(a.revision)||a.revision<1){n.push(te("invalid-snapshot","kind, id, and revision are required",d));continue}if(!ge(a.hash)||typeof a.tombstoned!="boolean"){n.push(te("invalid-snapshot","hash and tombstoned are required",d));continue}let m={kind:a.kind,id:a.id,revision:a.revision,hash:a.hash,value:a.value??null,tombstoned:a.tombstoned};if(a.refs!==void 0){let l=jc(a.refs,`${d}.refs`,n);l&&(m.refs=l)}r.push(m)}let i=[];for(let s=0;s<e.links.length;s++){let a=e.links[s],d=`${t}.links[${s}]`;if(!We(a)||!ge(a.id)||!ge(a.kind)||!ge(a.from)||!ge(a.to)){n.push(te("invalid-snapshot","link id, kind, from, and to are required",d));continue}i.push({id:a.id,kind:a.kind,from:a.from,to:a.to,...a.value!==void 0?{value:a.value}:{}})}let o=[];for(let s=0;s<e.accepted.length;s++){let a=e.accepted[s],d=`${t}.accepted[${s}]`;if(!We(a)||!ge(a.patchId)||!ge(a.idempotencyKey)||!at(a.revision)||a.revision<1){n.push(te("invalid-snapshot","accepted patch identity is invalid",d));continue}let m=Uc(a.provenance,`${d}.provenance`,n);if(!m)continue;let l={patchId:a.patchId,idempotencyKey:a.idempotencyKey,revision:a.revision,provenance:m};ge(a.supersededBy)&&(l.supersededBy=a.supersededBy),o.push(l)}return n.length?{errors:n}:{errors:[],world:gi({revision:e.revision,entities:r,links:i,accepted:o})}}function Lh(e,t,n){if(!We(e)){n.push(te("invalid-snapshot","audit record must be an object",t));return}if(e.outcome!=="accepted"&&e.outcome!=="rejected"&&e.outcome!=="superseded"){n.push(te("invalid-snapshot","audit outcome is invalid",`${t}.outcome`));return}if(!ge(e.patchId)||!ge(e.idempotencyKey)||!at(e.at)){n.push(te("invalid-snapshot","audit identity is invalid",t));return}if(!at(e.oldRevision)||!at(e.newRevision)||!Array.isArray(e.reasonCodes)){n.push(te("invalid-snapshot","audit revisions are invalid",t));return}return{outcome:e.outcome,patchId:e.patchId,idempotencyKey:e.idempotencyKey,at:e.at,oldRevision:e.oldRevision,newRevision:e.newRevision,reasonCodes:e.reasonCodes.filter(r=>typeof r=="string"),changedIdentities:Array.isArray(e.changedIdentities)?e.changedIdentities:[],provenance:We(e.provenance)?e.provenance:{producer:"unknown"},patch:e.patch??null}}function Vh(e){if(!We(e))return{ok:!1,errors:[te("invalid-snapshot","snapshot must be an object")]};if(e.schemaVersion!==mi)return{ok:!1,errors:[te("invalid-version","unknown snapshot schema version","schemaVersion")]};let t=_h(e.world,"world");if(!t.world)return{ok:!1,errors:t.errors};let n=[...t.errors??[]];Array.isArray(e.audit)||n.push(te("invalid-snapshot","audit must be an array","audit"));let r=[];if(Array.isArray(e.audit))for(let o=0;o<e.audit.length;o++){let s=Lh(e.audit[o],`audit[${o}]`,n);s&&r.push(s)}if(n.length)return{ok:!1,errors:n};let i={schemaVersion:mi,world:t.world,audit:r};return e.graph!==void 0&&(i.graph=we(e.graph)),{ok:!0,snapshot:i}}function Fh(e={}){let t=e.persistence??Wc(),n=e.now??(()=>Date.now()),r=e.source??"world-patch",i={maxOperations:e.limits?.maxOperations??vh,maxDiagnostics:e.limits?.maxDiagnostics??Sh,maxEntities:e.limits?.maxEntities??kh,maxBytes:e.limits?.maxBytes??Eh},o=new Set([...ph,...e.redact??[]]),s=new Set(e.capabilities??[]),a=e.graphPolicy??{},d=!1,m=[],l=[],y=[],k=null;function C(){if(d)throw new Error(mh)}function T(){let p=t.current();return{destroyed:d,revision:p.revision,entities:qc(p.entities),links:Kc(p.links),acceptedPatchIds:p.accepted.map(E=>E.patchId),events:[...y],lastRejection:k?we(k):null}}function v(p,E){let c={type:p,payload:E,source:r,kind:p===fi?"diagnostic":"state"};l.push(c),y.push(p),e.onEvent?.(c),e.router?.publish(c)}function x(p){m.push(p)}function $(p){let E=Ph(p,i);if(!E.patch)return{ok:!1,errors:ci(E.errors,i.maxDiagnostics)};let c=E.patch,f=t.current(),h=f.accepted.find(L=>L.patchId===c.patchId);if(h&&!h.supersededBy)return{ok:!0,patch:c,next:we(f),changed:[],idempotent:!0};if(h?.supersededBy)return{ok:!1,patch:c,errors:[te("superseded",`patch "${c.patchId}" was superseded by "${h.supersededBy}"`)]};let R=f.accepted.find(L=>L.idempotencyKey===c.idempotencyKey&&!L.supersededBy);if(R&&R.patchId!==c.patchId)return{ok:!1,patch:c,errors:[te("idempotency-conflict",`idempotencyKey already used by patch "${R.patchId}"`,"idempotencyKey")]};if(c.supersedes&&!f.accepted.find(_=>_.patchId===c.supersedes))return{ok:!1,patch:c,errors:[te("missing-ref",`superseded patch "${c.supersedes}" is unknown`,"supersedes")]};let M=new Map(f.entities.map(L=>[L.id,L])),P=Dh(c,f,M,s),F=Th(f,c.operations,i),W=Mh(c,c.operations,f,e.content,e.bindings,e.assets),O=[...P,...F.errors,...W];if(!F.world)return{ok:!1,patch:c,errors:ci(O,i.maxDiagnostics)};let u=gi({revision:f.revision+1,entities:F.world.entities.values(),links:F.world.links.values(),accepted:[...F.world.accepted.map(L=>c.supersedes&&L.patchId===c.supersedes?{...L,supersededBy:c.patchId}:L),{patchId:c.patchId,idempotencyKey:c.idempotencyKey,revision:f.revision+1,provenance:we(c.provenance)}]});(a.detectCycle?.(u)??(!a.allowCycles&&Oh(u.links)))&&O.push(te("cycle","patch would introduce a link cycle"));for(let L of e.domainValidators??[])O.push(...L({patch:c,current:f,preview:u}).map(_=>_.code?_:te("domain",_.detail,_.path)));if(O.length)return{ok:!1,patch:c,errors:ci(O,i.maxDiagnostics)};let w=c.supersedes?f.accepted.find(L=>L.patchId===c.supersedes):void 0;return{ok:!0,patch:c,next:u,changed:F.changed,supersede:w}}function j(p,E,c){let f=ci(p,i.maxDiagnostics);k=f;let h=t.current(),R=f[0]?.code??"invalid-schema";return E?(x({outcome:"rejected",patchId:E.patchId,idempotencyKey:E.idempotencyKey,at:n(),oldRevision:c?.oldRevision??h.revision,newRevision:c?.oldRevision??h.revision,reasonCodes:f.map(M=>M.code),changedIdentities:[],provenance:we(E.provenance),patch:we(E)}),v(Hc,{patchId:E.patchId,reasonCode:R,revision:h.revision}),v(fi,{patchId:E.patchId,reasonCode:R,revision:h.revision})):v(fi,{reasonCode:R,revision:h.revision}),{ok:!1,errors:f,inspect:T()}}function D(p){if(!e.graph||!p)return[];let E=e.graph.restore(p);return E.ok?[]:E.errors.map(c=>te("graph-apply-failed",c.detail,c.path))}function V(p){let E=t.begin();E.applyWorldRevision(p),E.commit()}return{dryRun(p){C();let E=$(p);return E.ok?E.idempotent?{ok:!0,previewRevision:E.next.revision,changedIdentities:[],diagnostics:[]}:{ok:!0,previewRevision:E.next.revision,changedIdentities:E.changed,diagnostics:[]}:{ok:!1,errors:E.errors}},commit(p){C();let E=$(p);if(!E.ok)return j(E.errors,E.patch);let c=E.patch,f=t.current();if(E.idempotent)return{ok:!0,patchId:c.patchId,oldRevision:f.revision,newRevision:f.revision,changedIdentities:[],idempotent:!0,inspect:T()};let h=e.graph?.snapshot(),R=t.begin();try{if(R.applyWorldRevision(E.next),e.graph){let P=Nh(e.graph,c.operations);if(P.length){try{R.rollback()}catch{}return V(f),D(h),j(P,c,{oldRevision:f.revision})}}R.commit()}catch(P){try{R.rollback()}catch{}return V(f),D(h),j([te("publish-failed",P instanceof Error?P.message:"persistence failed")],c,{oldRevision:f.revision})}let M={patchId:c.patchId,oldRevision:f.revision,newRevision:E.next.revision,changedIdentities:E.changed,producer:c.provenance.producer,jobId:c.provenance.jobId,contentRevisions:c.provenance.contentRevisions};try{t.publish?.(M),E.supersede&&(v(Bc,{patchId:E.supersede.patchId,supersededBy:c.patchId,revision:E.next.revision}),x({outcome:"superseded",patchId:E.supersede.patchId,idempotencyKey:E.supersede.idempotencyKey,at:n(),oldRevision:f.revision,newRevision:E.next.revision,reasonCodes:["superseded"],changedIdentities:[],provenance:we(E.supersede.provenance),patch:{supersededBy:c.patchId}})),v(us,{patchId:M.patchId,oldRevision:M.oldRevision,newRevision:M.newRevision,producer:M.producer,jobId:M.jobId,contentRevisions:M.contentRevisions,changedIdentities:M.changedIdentities}),k=null,x({outcome:"accepted",patchId:c.patchId,idempotencyKey:c.idempotencyKey,at:n(),oldRevision:f.revision,newRevision:E.next.revision,reasonCodes:[],changedIdentities:E.changed,provenance:we(c.provenance),patch:we(c)})}catch(P){return V(f),D(h),j([te("publish-failed",P instanceof Error?P.message:"publication failed")],c,{oldRevision:f.revision})}return{ok:!0,patchId:c.patchId,oldRevision:f.revision,newRevision:E.next.revision,changedIdentities:E.changed,inspect:T()}},inspect(){return C(),T()},snapshot(){C();let p={schemaVersion:mi,world:gi(t.current()),audit:we(m)};return e.graph&&(p.graph=e.graph.snapshot()),p},restore(p){C();let E=Vh(p);if(!E.ok)return E;let c=t.current(),f=m,h=e.graph?.snapshot();try{if(V(E.snapshot.world),m=we(E.snapshot.audit),k=null,E.snapshot.graph){let R=D(E.snapshot.graph);if(R.length)return V(c),D(h),m=f,{ok:!1,errors:R}}return{ok:!0,snapshot:E.snapshot}}catch{return V(c),D(h),m=f,{ok:!1,errors:[te("invalid-snapshot","restore failed to persist")]}}},audit(p){C();let E=p?.redact!==!1,c=we(m);return E?cs(c,o):c},events(){return C(),l.map(p=>we(p))},destroy(){d=!0,l.length=0,y.length=0}}}var rr=1,Gt=1,ps="content.revision.state.discovered",Jc="content.revision.state.staging",zc="content.revision.state.validated",Yc="content.revision.state.rejected",ms="content.revision.state.activated",hi="content.revision.state.rolled-back",yi="content.revision.state.superseded",fs="content.revision.diagnostic.lifecycle";var $h=["invalid-manifest","invalid-schema","invalid-version","invalid-snapshot","unknown-revision","unknown-adapter","hash-mismatch","capability-denied","pinned","staging-failed","activation-failed","health-check-failed","stale-health-check","superseded","destroyed","adapter-missing","asset-failed","unsigned"],bS=new Set($h),Hh="Content revision activator has been destroyed",Bh=/^[0-9a-f]+$/i;function ce(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Pt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Te(e){return typeof e=="string"&&e.length>0}function Le(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function wt(e,t){return`${e}@${t}`}function qh(e,t){return e.localeCompare(t,"en",{numeric:!0,sensitivity:"base"})>0}function nr(e,t){return e===t?!0:!e||!t?!1:e.bundleId===t.bundleId&&e.adapterId===t.adapterId}function qt(){return{version:1,fields:{contentId:{type:"string"},revision:{type:"string"},adapterId:{type:"string"},bundleId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function Kt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Kh(){return[Kt(me(ps,qt())),Kt(me(Jc,qt())),Kt(me(zc,qt())),Kt(me(Yc,qt())),Kt(me(ms,qt())),Kt(me(hi,qt())),Kt(me(yi,qt())),Kt(it(fs,qt()))]}function gs(e){return typeof e=="string"&&e.length===64&&Bh.test(e)}function Gh(e,t){return e===void 0?{ok:!0,fallback:void 0}:Pt(e)?!Te(e.id)||!Bn(e.kind)||!Te(e.url)||!gs(e.hash)||e.alg!=="sha256"?{ok:!1,errors:[ce("invalid-schema","fallback is missing id, kind, url, or sha256 hash",t)]}:{ok:!0,fallback:{id:e.id,kind:e.kind,url:e.url,hash:e.hash.toLowerCase(),alg:"sha256"}}:{ok:!1,errors:[ce("invalid-schema","fallback must be an object",t)]}}function hs(e){if(!Pt(e))return{ok:!1,errors:[ce("invalid-manifest","catalog must be an object")]};let t=[];Te(e.contentId)||t.push(ce("invalid-schema","contentId is required","contentId")),(!Te(e.revision)||e.revision==="latest")&&t.push(ce("unknown-revision",'revision must be an exact id, not "latest"',"revision")),e.manifestVersion!==Gt&&t.push(ce("invalid-version",`manifestVersion must be ${Gt}`,"manifestVersion")),Te(e.publisher)||t.push(ce("invalid-schema","publisher is required","publisher")),Te(e.source)||t.push(ce("invalid-schema","source is required","source")),Te(e.adapterId)||t.push(ce("invalid-schema","adapterId is required","adapterId")),(!Array.isArray(e.assets)||e.assets.length===0)&&t.push(ce("invalid-schema","assets must be a non-empty array","assets"));let n=[],r=new Set;if(Array.isArray(e.assets)&&e.assets.forEach((o,s)=>{let a=`assets[${s}]`;if(!Pt(o)){t.push(ce("invalid-schema","asset must be an object",a));return}if(!Te(o.id)||!Bn(o.kind)||!Te(o.url)){t.push(ce("invalid-schema","asset needs id, kind, and url",a));return}if(!gs(o.hash)||o.alg!=="sha256"){t.push(ce("hash-mismatch","asset hash must be sha256 hex",`${a}.hash`));return}if(r.has(o.id)){t.push(ce("invalid-schema",`duplicate asset id "${o.id}"`,`${a}.id`));return}r.add(o.id);let d=Gh(o.fallback,`${a}.fallback`);if(!d.ok){t.push(...d.errors);return}n.push({id:o.id,kind:o.kind,url:o.url,hash:o.hash.toLowerCase(),alg:"sha256",optional:o.optional===!0,fallback:d.fallback})}),t.length>0)return{ok:!1,errors:t};let i;if(e.signature!==void 0){if(!Pt(e.signature)||!Te(e.signature.id)||!Te(e.signature.alg))return{ok:!1,errors:[ce("unsigned","signature must include id and alg","signature")]};i={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,catalog:{contentId:e.contentId,revision:e.revision,manifestVersion:Gt,publisher:e.publisher,source:e.source,adapterId:e.adapterId,assets:n,requestedGrants:Array.isArray(e.requestedGrants)?e.requestedGrants:void 0,capabilities:e.capabilities,signature:i}}}function Wh(e,t){return{contentId:e.body.id,revision:e.body.cartVersion,manifestVersion:Gt,publisher:e.body.publisher,source:"remote",adapterId:t,assets:e.body.assets.map(n=>({id:n.id,kind:n.kind,url:n.url,hash:n.hash.toLowerCase(),alg:"sha256"})),requestedGrants:dc(e),capabilities:e.body.capabilities,signature:{id:e.signature.keyId,alg:e.signature.alg}}}function jh(e,t){return`https://registry.test/worlds/${e}/revisions/${t??"current"}.json`}function Uh(e){let t=e.id??"static",n=new Map,r=new Map;for(let o of e.revisions){let s=hs({...o,adapterId:o.adapterId||t}),a=Te(o.contentId)?o.contentId:"",d=Te(o.revision)?o.revision:"";if(!(!a||!d))if(s.ok){let m={...s.catalog,adapterId:t,source:s.catalog.source||"static"};n.set(wt(a,d),{ok:!0,catalog:m});let l=r.get(a);(!l||qh(m.revision,l.revision))&&r.set(a,m)}else n.set(wt(a,d),s)}let i=e.fetchBytes??(async o=>e.bytesByUrl[o]);return{id:t,hasRevision(o,s){return!!n.get(wt(o,s))?.ok},async discover(o){let s=r.get(o);if(s)return{contentId:s.contentId,revision:s.revision,adapterId:t,publisher:s.publisher,source:s.source}},async loadRevision(o,s){let a=n.get(wt(o,s));return a?a.ok?{ok:!0,catalog:Le(a.catalog)}:a:{ok:!1,errors:[ce("unknown-revision",`static adapter has no ${o}@${s}`)]}},fetchBytes:i}}function Jh(e){let t=e.id??"remote",n=e.catalogUrl??jh,r=new Set((e.known??[]).map(s=>wt(s.contentId,s.revision))),i=e.fetchBytes??(async s=>e.bytesByUrl?.[s]);async function o(s,a,d){let m=a!=="current",l;try{l=await e.fetch(n(s,m?a:void 0),d)}catch(v){return{ok:!1,errors:[ce("staging-failed",v instanceof Error?v.message:String(v))]}}let y=l;if(Pt(l)&&Pt(l.manifest)){if(Te(l.world)&&l.world!==s)return{ok:!1,errors:[ce("invalid-manifest",`remote world "${String(l.world)}" does not match "${s}"`,"world")]};if(m&&Te(l.revision)&&l.revision!==a)return{ok:!1,errors:[ce("unknown-revision",`remote revision "${String(l.revision)}" does not match "${a}"`,"revision")]};y=l.manifest}let k=await Wo(y,e.keys,m?a:void 0);if(!k.ok)return{ok:!1,errors:k.errors.map(v=>ce(v.code,v.detail,v.path))};if(k.manifest.body.id!==s)return{ok:!1,errors:[ce("invalid-manifest",`signed id "${k.manifest.body.id}" does not match "${s}"`,"body.id")]};let C=Wh(k.manifest,t);return r.add(wt(C.contentId,C.revision)),hs(C)}return{id:t,hasRevision(s,a){return r.has(wt(s,a))},async discover(s){let a=await o(s,"current");if(a.ok)return{contentId:a.catalog.contentId,revision:a.catalog.revision,adapterId:t,publisher:a.catalog.publisher,source:a.catalog.source}},loadRevision:o,fetchBytes:i}}function zh(e,t){return Pt(e)?!Te(e.id)||!Bn(e.kind)||!Te(e.ref)||!gs(e.hash)||!Te(e.url)||typeof e.optional!="boolean"||typeof e.usedFallback!="boolean"?{ok:!1,errors:[ce("invalid-snapshot","resource fields are invalid",t)]}:{ok:!0,resource:{id:e.id,kind:e.kind,ref:e.ref,hash:e.hash.toLowerCase(),url:e.url,optional:e.optional,usedFallback:e.usedFallback}}:{ok:!1,errors:[ce("invalid-snapshot","resource must be an object",t)]}}function ls(e,t){if(e===null)return{ok:!0,bundle:null};if(!Pt(e))return{ok:!1,errors:[ce("invalid-snapshot","bundle must be an object or null",t)]};if(!Te(e.contentId)||!Te(e.revision)||e.revision==="latest")return{ok:!1,errors:[ce("unknown-revision","snapshot bundle must record an exact revision",`${t}.revision`)]};if(e.manifestVersion!==Gt)return{ok:!1,errors:[ce("invalid-version",`bundle manifestVersion must be ${Gt}`,`${t}.manifestVersion`)]};if(!Te(e.publisher)||!Te(e.source)||!Te(e.adapterId)||!Te(e.bundleId))return{ok:!1,errors:[ce("invalid-snapshot","bundle identity is incomplete",t)]};if(!Pt(e.resources))return{ok:!1,errors:[ce("invalid-snapshot","bundle resources must be an object",`${t}.resources`)]};let n={};for(let[i,o]of Object.entries(e.resources)){let s=zh(o,`${t}.resources.${i}`);if(!s.ok)return s;if(s.resource.id!==i)return{ok:!1,errors:[ce("invalid-snapshot",`resource key "${i}" does not match id`,`${t}.resources.${i}`)]};n[i]=s.resource}let r;if(e.signature!==void 0){if(!Pt(e.signature)||!Te(e.signature.id)||!Te(e.signature.alg))return{ok:!1,errors:[ce("invalid-snapshot","signature must include id and alg",`${t}.signature`)]};r={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,bundle:{bundleId:e.bundleId,contentId:e.contentId,revision:e.revision,manifestVersion:Gt,publisher:e.publisher,source:e.source,adapterId:e.adapterId,signature:r,resources:n}}}function Yh(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[ce("invalid-snapshot","snapshot JSON is not parseable")]}}if(!Pt(t))return{ok:!1,errors:[ce("invalid-snapshot","snapshot must be an object")]};if(t.schemaVersion!==rr)return{ok:!1,errors:[ce("invalid-version",`snapshot schema must be ${rr}`,"schemaVersion")]};if(typeof t.pinned!="boolean")return{ok:!1,errors:[ce("invalid-snapshot","pinned must be a boolean","pinned")]};let n=ls(t.active,"active");if(!n.ok)return n;let r=ls(t.lastKnownGood,"lastKnownGood");if(!r.ok)return r;let i=ls(t.previous,"previous");return i.ok?{ok:!0,snapshot:{schemaVersion:rr,pinned:t.pinned,active:n.bundle,lastKnownGood:r.bundle,previous:i.bundle}}:i}function Xh(e,t,n){return{id:e.id,kind:e.kind,ref:t.ref,hash:n&&e.fallback?e.fallback.hash:e.hash,url:t.url,optional:e.optional===!0,usedFallback:n}}function Qh(e){let t=[...e.adapters],n=e.grants??Pn(),r=new Map,i=e.pin===!0,o=!1,s=null,a=null,d=null,m=null,l=null,y=[],k=0,C=null;function T(){if(o)throw new Error(Hh)}function v(c){return c?t.find(f=>f.id===c):t[0]}function x(c,f,h){return(h?t.filter(M=>M.id===h):t).some(M=>M.hasRevision(c,f))}function $(c,f){y.push(c);let h=c.includes(".diagnostic.")?"diagnostic":"state",R={type:c,kind:h,payload:Le(f)};e.onEvent?.(R),e.router?.publish(R)}function j(c,f){return l=c.map(h=>Le(h)),$(Yc,{...f,reasonCode:c[0]?.code}),$(fs,{...f,reasonCode:c[0]?.code}),{ok:!1,errors:l}}function D(){return{destroyed:o,pinned:i,active:Le(s),lastKnownGood:Le(a),staging:m?Le(m):null,events:[...y],lastRejection:l?Le(l):null}}async function V(c,f,h){if(c.requestedGrants){for(let w of c.requestedGrants)if(!n.has(w))return{ok:!1,errors:[ce("capability-denied",`host did not grant "${w}"`,"requestedGrants")]}}if(c.capabilities){let w=e.hostCapabilities??{contractVersion:1,features:[],integrations:[],grants:n.list()},L=Kr(c.capabilities,{...w,grants:n.list()});if(!L.ok)return{ok:!1,errors:L.errors.map(_=>ce(_.code==="missing-grant"||_.code==="capability-denied"||_.code==="ungranted-capability"?"capability-denied":"invalid-schema",_.detail,_.path))}}let R={},M=[];for(let w of c.assets)R[w.url]={url:w.url,hash:w.hash,alg:"sha256"},w.fallback&&(R[w.fallback.url]={url:w.fallback.url,hash:w.fallback.hash,alg:"sha256"}),M.push({id:w.id,ref:w.url,type:w.kind,integrity:`sha256-${w.hash}`,provenance:{contentId:c.contentId,revision:c.revision,publisher:c.publisher,adapterId:c.adapterId},fallback:w.fallback?{id:w.id,ref:w.fallback.url,type:w.fallback.kind,integrity:`sha256-${w.fallback.hash}`}:void 0});let P=Ar({declared:R,fetchBytes:async w=>{if(h.aborted)return;let L=Object.values(R).find(B=>B.url===w);if(!L)return;let G=r.get(L.hash)??await f.fetchBytes(w,h);if(!G||h.aborted)return;let U=await ri(G);if(U!==L.hash)throw Oe({id:"",ref:w,code:"hash-mismatch",message:`hash mismatch for "${w}"`});return r.set(U,G),G},hashBytes:ri}),F=hn({resolver:P,emitEvents:!1,wallClockTimeout:!1});if(h.aborted)return F.dispose(),{ok:!1,errors:[ce("superseded","staging aborted")]};let W=()=>{F.abort(),F.dispose()};h.addEventListener("abort",W,{once:!0});let O;try{O=await F.preload(M)}finally{h.removeEventListener("abort",W),F.dispose()}if(h.aborted)return{ok:!1,errors:[ce("superseded","staging aborted")]};let u={},b=[];for(let w of c.assets){let L=O.items[w.id];if(L?.state==="ready"){u[w.id]=Xh(w,L.resource,L.resource.usedFallback===!0||!!L.failure);continue}if(w.optional)continue;let _=L?.state==="failed"?L.failure:O.failures.find(G=>G.id===w.id);b.push(ce(_?.code==="hash-mismatch"?"hash-mismatch":"asset-failed",_?.message??`required asset "${w.id}" failed`,w.id))}return b.length>0?{ok:!1,errors:b}:{ok:!0,bundle:{bundleId:wt(c.contentId,c.revision),contentId:c.contentId,revision:c.revision,manifestVersion:Gt,publisher:c.publisher,source:c.source,adapterId:c.adapterId,signature:c.signature,resources:u}}}function A(c,f,h){return $(fs,{...c,reasonCode:f}),{ok:!1,errors:[ce("stale-health-check",h)]}}async function p(c,f){let h=Le(c),R=s;s=h;let M=!0;try{M=e.healthCheck?await e.healthCheck(h):!0}catch(P){return nr(s,h)?(s=R,$(hi,{...f,revision:R?.revision??"",reasonCode:"activation-failed"}),j([ce("activation-failed",P instanceof Error?P.message:String(P))],f)):A(f,"stale-health-check","stale health check ignored; a newer revision is active")}return M?nr(s,h)?(d=R,a=Le(s),l=null,$(ms,f),{ok:!0,bundle:Le(s)}):A(f,"stale-health-check","stale health check ignored; a newer revision is active"):nr(s,h)?(s=R,$(hi,{...f,revision:R?.revision??"",reasonCode:"health-check-failed"}),j([ce("health-check-failed","post-activation health check failed")],f)):A(f,"stale-health-check","stale health check ignored; a newer revision is active")}let E={pin(c=!0){T(),i=c},unpin(){T(),i=!1},isPinned(){return T(),i},async discover(c,f){T();let h=v(f);if(!h)return;let R=await h.discover(c);return R&&$(ps,{contentId:R.contentId,revision:R.revision,adapterId:R.adapterId,bundleId:wt(R.contentId,R.revision)}),R?Le(R):void 0},async activate(c){T();let f=v(c.adapterId);if(!f)return j([ce("unknown-adapter",`unknown adapter "${String(c.adapterId)}"`)],{contentId:c.contentId,revision:c.revision??"",adapterId:c.adapterId??""});let h=c.revision;if(!h){let F=await f.discover(c.contentId);h=F?.revision,F&&$(ps,{contentId:F.contentId,revision:F.revision,adapterId:F.adapterId,bundleId:wt(F.contentId,F.revision)})}if(!Te(h)||h==="latest")return j([ce("unknown-revision","activation requires an exact revision")],{contentId:c.contentId,revision:String(h??""),adapterId:f.id});let R={contentId:c.contentId,revision:h,adapterId:f.id,bundleId:wt(c.contentId,h)};if(s&&s.contentId===c.contentId&&s.revision===h&&s.adapterId===f.id)return{ok:!0,bundle:Le(s),idempotent:!0};if(i&&s)return j([ce("pinned","activator is pinned; live revision movement is frozen")],R);let M=++k;C?.abort();let P=new AbortController;C=P,m={contentId:c.contentId,revision:h,adapterId:f.id,bundleId:R.bundleId},$(Jc,R);try{let F=await f.loadRevision(c.contentId,h,P.signal);if(M!==k||P.signal.aborted)return $(yi,R),{ok:!1,errors:[ce("superseded",`revision ${h} was superseded`)]};if(!F.ok)return j(F.errors,R);let W=F.catalog,O=hs(W);if(!O.ok)return j(O.errors,R);let u=await V(O.catalog,f,P.signal);return M!==k||P.signal.aborted?($(yi,R),{ok:!1,errors:[ce("superseded",`revision ${h} was superseded`)]}):u.ok?($(zc,R),M!==k||P.signal.aborted?($(yi,R),{ok:!1,errors:[ce("superseded",`revision ${h} was superseded`)]}):await p(u.bundle,R)):j(u.errors,R)}finally{M===k&&(m=null,C===P&&(C=null))}},rollback(){T();let c=d??a;if(nr(s,c))return{ok:!0,bundle:Le(s),idempotent:!0};if(i)return{ok:!1,errors:[ce("pinned","activator is pinned; live revision movement is frozen")]};let f=s;return s=Le(c),a=Le(c),d=Le(c),$(hi,{contentId:s?.contentId??f?.contentId??"",revision:s?.revision??"",adapterId:s?.adapterId??f?.adapterId??"",bundleId:s?.bundleId,reasonCode:"rolled-back"}),{ok:!0,bundle:Le(s)}},inspect(){return T(),D()},activeBundle(){return T(),Le(s)},snapshot(){return T(),{schemaVersion:rr,pinned:i,active:Le(s),lastKnownGood:Le(a),previous:Le(d)}},restore(c){T();let f=Yh(c);if(!f.ok)return f;let h=f.snapshot,R=[h.active,h.lastKnownGood,h.previous];for(let M of R)if(M&&!x(M.contentId,M.revision,M.adapterId))return{ok:!1,errors:[ce("unknown-revision",`unknown revision ${M.contentId}@${M.revision}`,"revision")]};return i&&!nr(s,h.active)?{ok:!1,errors:[ce("pinned","activator is pinned; live revision movement is frozen")]}:(i=h.pinned,s=Le(h.active),a=Le(h.lastKnownGood),d=Le(h.previous),l=null,{ok:!0,snapshot:E.snapshot()})},provenance(){if(T(),!!s)return{source:s.source,publisher:s.publisher,version:s.revision,signature:s.signature}},destroy(){o=!0,C?.abort(),C=null,m=null}};return E}function Zh(e,t){return{width:e,height:t,data:new Uint8ClampedArray(e*t*4),colorSpace:"srgb"}}function ey(){return{putImageData:()=>{}}}function ty(e,t,n,r={}){let i=r.frames??30,o=r.warmupFrames??5,s=r.frameStepMs??1e3/60,a=r.width??1920,d=r.height??1080,m=r.tokenId??"18009999",l=new ln({hash:t,tokenId:m}),y=ur(a,d),k=new lr,C=e.getDefaultFeatureState?.(l,y,n,k),T=e.getDefaultState(l,y,n,k,void 0,void 0,void 0,C);r.prepareState?.(T,C);let v=Zh(a,d),x=r.drawingContext??ey(),$=typeof e.render=="function",j=null,D=null,V=0,A=0,p=0,E=0,c=0;for(let P=1;P<=o+i;P++){let F=V+P*s,W=Mn(F,V,j,D),O=performance.now();e.update(l,P,n,y,T,k,void 0,void 0,W,C);let u=performance.now(),b=0;if($){let L=Mn(F,V,j,D);e.render(l,P,n,y,T,x,v,void 0,void 0,L,C),b=performance.now()-u}let w=u-O;j=F,D=F,P>o&&(A+=w,p+=b,w>E&&(E=w),b>c&&(c=b))}k.destroy();let f=A+p,h=A/i,R=p/i,M=f/i;return{frames:i,updateAvgMs:h,renderAvgMs:R,totalAvgMs:M,updateMaxMs:E,renderMaxMs:c,estFps:M>0?1e3/M:1/0,updatePct:f>0?100*A/f:0,renderPct:f>0?100*p/f:0}}function ny(e,t=2){let n=r=>Number.isFinite(r)?Number(r.toFixed(t)):r;return{frames:e.frames,updateAvgMs:n(e.updateAvgMs),renderAvgMs:n(e.renderAvgMs),totalAvgMs:n(e.totalAvgMs),updateMaxMs:n(e.updateMaxMs),renderMaxMs:n(e.renderMaxMs),estFps:n(e.estFps),updatePct:n(e.updatePct),renderPct:n(e.renderPct)}}var ys={width:320,height:180,deviceScaleFactor:1},ry="Browser harness has been destroyed";function iy(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function bs(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function vs(e){return e===void 0?void 0:JSON.parse(JSON.stringify(e))}function Ss(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function ks(e,t,n,r,i){let o={x:t,y:n,width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,toJSON(){return this}};e.getBoundingClientRect=()=>o}function Xc(e){return!e||!(e instanceof HTMLElement)||e===document.body?{tag:"body",id:"",role:null,name:""}:{tag:e.tagName.toLowerCase(),id:e.id,role:e.getAttribute("role"),name:e.getAttribute("aria-label")??e.textContent?.trim()??""}}function oy(e){return e.querySelector("[aria-live]")?.textContent??""}function Qc(e,t,n){let r={bubbles:!0,cancelable:!0,clientX:t,clientY:n},i=globalThis.PointerEvent;typeof i=="function"?(e.dispatchEvent(new i("pointerdown",{...r,pointerId:1,pointerType:"mouse",buttons:1})),e.dispatchEvent(new i("pointerup",{...r,pointerId:1,pointerType:"mouse",buttons:0}))):(e.dispatchEvent(new MouseEvent("mousedown",r)),e.dispatchEvent(new MouseEvent("mouseup",r))),e.dispatchEvent(new MouseEvent("click",r))}function sy(e,t,n){let r=Array.from(e.querySelectorAll("*")),i=null,o=Number.POSITIVE_INFINITY;for(let s of r){if(!(s instanceof HTMLElement))continue;let a=s.getBoundingClientRect();if(t>=a.left&&t<a.right&&n>=a.top&&n<a.bottom){let d=Math.max(1,a.width*a.height);d<=o&&(i=s,o=d)}}return i??e}function Zc(e){let t=window.matchMedia;return window.matchMedia=n=>({matches:e&&/prefers-reduced-motion:\s*reduce/i.test(n),media:n,onchange:null,addListener(){},removeListener(){},addEventListener(){},removeEventListener(){},dispatchEvent(){return!1}}),()=>{window.matchMedia=t}}function eu(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=vs(e.geometry),r=e.semanticLayers,i=e.viewport?.width??ys.width,o=e.viewport?.height??ys.height,s=e.viewport?.deviceScaleFactor??ys.deviceScaleFactor,a=e.reducedMotion===!0,d=e.inputModality??"pointer",m=e.origin??0,l=e.fit??"contain",y=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),k=Object.getOwnPropertyDescriptor(window,"innerWidth"),C=Object.getOwnPropertyDescriptor(window,"innerHeight"),T=Zc(a),v=()=>{Object.defineProperty(window,"devicePixelRatio",{value:s,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:i,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:o,configurable:!0})};v();let x=document.createElement("div");x.setAttribute("data-cyberart-browser-harness",""),x.style.position="relative",x.style.overflow="auto",x.tabIndex=-1,document.body.appendChild(x);let $=[],j=[],D=!1,V=0,A=e.createId??(()=>`br-${++V}`),p=()=>wd({contentWidth:e.contentWidth??i,contentHeight:e.contentHeight??o,viewportWidth:i,viewportHeight:o,mode:l,devicePixelRatio:s}),E=p(),c=()=>Math.max(1,Math.round(i*s)),f=()=>Math.max(1,Math.round(o*s)),h=B=>{n=vs(B)},R=(B,g)=>{let S=n?.regions.find(N=>N.id===B);if(!S)return;let I=Pd(S,E);if(I)return g.style.position=g.style.position||"absolute",g.style.left=`${I.x}px`,g.style.top=`${I.y}px`,g.style.width=`${I.width}px`,g.style.height=`${I.height}px`,ks(g,I.x,I.y,I.width,I.height),{...I}},M=()=>{E=p(),x.style.width=`${i}px`,x.style.height=`${o}px`,Ss(x,i,o),ks(x,0,0,i,o),x.dataset.inputModality=d,x.dataset.reducedMotion=a?"true":"false",v()};M();let P=()=>({root:x,get layout(){return bs(E)},get reducedMotion(){return a},get inputModality(){return d},placeRegion:R,setGeometry(B){h(B)}}),F=e.mount?.(P())??{},W=F.participants??[],O,u,b=()=>{};if(W.length>0){for(let B of W)B.container&&Ss(B.container,c(),f());O=Dr({origin:m,width:c(),height:f(),createId:A,now:()=>m,participants:W.map(B=>({...B,seed:B.seed??t,width:B.width??c(),height:B.height??f()}))}),b=O.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",Lt],B=>{j.push(B)}),F.compositor&&(u=Cd({...F.compositor,group:O,width:i,height:o,dpr:s}))}let w=()=>({...P(),group:O,compositor:u,publish(B){if(!O)throw new Error("Browser harness: publish requires mounted carts");return O.publish(B)}}),L=()=>{if(M(),O){let B=c(),g=f();for(let S of W){S.container&&(Ss(S.container,B,g),S.container.style.width=`${i}px`,S.container.style.height=`${o}px`);try{let I=O.participant(S.id).cart.canvas;I&&(I.style.width=`${i}px`,I.style.height=`${o}px`,ks(I,0,0,i,o))}catch{}}}},_=()=>{if(D)throw new Error(ry)};L(),F.ready?.(w());let G=(B,g,S)=>{if($.push({type:"click",x:B,y:g,...S?{selector:S}:{}}),S){let Q=x.querySelector(S);if(!(Q instanceof HTMLElement))throw new Error(`No element matches ${S}`);Qc(Q,B,g);return}let I=n?new Set(n.regions.map(Q=>Q.id)):void 0,N=r?r.hitTest(Rn({x:B,y:g},E)):void 0,q=N&&(!I||I.has(N.id))?N:void 0,Z=q===void 0&&n!==void 0?Ur({x:B,y:g},E,n,{space:"css"}):q?{id:q.id}:void 0,ne=(Z?x.querySelector(`#${iy(Z.id)}`):null)??sy(x,B,g);Qc(ne,B,g)};return{root:x,get group(){return O},get compositor(){return u},get layout(){return bs(E)},get events(){return j.slice()},get geometry(){return vs(n)},goto(){_()},setGeometry(B){_(),h(B),F.relayout?.(w())},setViewport(B,g,S){_(),i=Math.max(1,B|0),o=Math.max(1,g|0),S!==void 0&&(s=S>0?S:1),$.push({type:"viewport",width:i,height:o,dpr:s}),u?u.resize(i,o,s):O&&O.resize(c(),f()),L(),F.relayout?.(w())},setReducedMotion(B){_(),a=B,T(),T=Zc(a),$.push({type:"reducedMotion",value:B}),L(),F.relayout?.(w())},setInputModality(B){_(),d=B,$.push({type:"inputModality",value:B}),L()},click(B,g){if(_(),typeof B=="string"){let S=x.querySelector(B);if(!(S instanceof HTMLElement))throw new Error(`No element matches ${B}`);let I=S.getBoundingClientRect();G(I.left+I.width/2,I.top+I.height/2,B);return}if(g===void 0)throw new Error("click(x, y) requires a y coordinate");G(B,g)},key(B){_(),$.push({type:"key",key:B}),(document.activeElement instanceof HTMLElement?document.activeElement:x).dispatchEvent(new KeyboardEvent("keydown",{key:B,bubbles:!0,cancelable:!0}))},focus(B){_();let g=x.querySelector(B);if(!(g instanceof HTMLElement))throw new Error(`No element matches ${B}`);g.focus()},async step(B=1){_(),$.push({type:"step",frames:B}),O&&await O.step(B)},async advance(B){_(),$.push({type:"advance",ms:B}),O&&await O.step(Math.max(0,Math.round(B/1e3*30)))},screenshot(){if(_(),u){let B=u.captureComposedFrame();return{imageData:B.imageData,pngDataUrl:B.pngDataUrl,html:x.outerHTML,declaredOrder:B.declaredOrder.map(g=>g.id)}}return{imageData:null,pngDataUrl:null,html:x.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return _(),{focus:Xc(document.activeElement),live:oy(x),html:x.outerHTML,publishedRegions:(r?.inspectPublished()??[]).map(B=>({id:B.id,geometryKinds:[...B.geometryKinds],name:B.a11y?.name??null,role:B.a11y?.role??null}))}},async inspect(){_();let B={},g={},S=0;if(O){let I=await O.inspect();for(let N of I.diagnostics.participantIds)B[N]=O.participant(N).events.slice(),g[N]=I.participants[N]?.state,S=I.diagnostics.clocks[N]?.framesElapsed??S}return{host:F.hostState?.()??null,layout:bs(E),events:j.slice(),participantEvents:B,state:g,focus:Xc(document.activeElement),publishedRegions:(r?.inspectPublished()??[]).map(I=>({id:I.id,geometryKinds:[...I.geometryKinds],name:I.a11y?.name??null,role:I.a11y?.role??null})),scrollTop:x.scrollTop,clock:{framesElapsed:S}}},reproduction(){return _(),{seed:t,viewport:{width:i,height:o,dpr:s},reducedMotion:a,inputModality:d,actions:$.map(B=>({...B}))}},captureComposedFrame(){if(_(),!u)throw new Error("Browser harness: captureComposedFrame requires a compositor");return u.captureComposedFrame()},destroy(){if(!D){D=!0,b(),document.activeElement instanceof HTMLElement&&x.contains(document.activeElement)&&document.activeElement.blur();try{F.destroy?.()}finally{try{u?.destroy()}finally{try{O?.destroy()}finally{x.remove(),T(),y&&Object.defineProperty(window,"devicePixelRatio",y),k&&Object.defineProperty(window,"innerWidth",k),C&&Object.defineProperty(window,"innerHeight",C)}}}}}}}var Cs=1,vi=1,ws="production.scenario.state.observed",Si="production.scenario.state.failed",Ps="production.scenario.diagnostic.lifecycle",ay=[ws,Si,Ps],su=["input","reducer","routing","binding","cue","pixels","caption","audio","save-replay"],dy=["invalid-scenario","invalid-schema","unknown-field","missing-field","callbacks-forbidden","missing-participant","missing-layer","destroyed","assertion-failed","invalid-host-audio","invalid-audio-sidecar","invalid-visual-sidecar","invalid-semantic-sidecar","invalid-binding-sidecar","invalid-sequence-sidecar","invalid-host-sidecar","unsupported-preference","invalid-geometry","ambiguous-geometry","stale-geometry"],au=["invoked","completed","failed","skipped","fallback"],cy=["desktop","mobile"],ki={desktop:{width:64,height:48,deviceScaleFactor:1},mobile:{width:48,height:64,deviceScaleFactor:2}},uy="Production scenario runner has been destroyed",jS=new Set(ay),US=new Set(dy),JS=new Set(su),ly=new Set(au),py=new Set(["invoked","completed"]),du=new Set(cy),fy=new Set(["id","schemaVersion","seed","required","matrix","steps"]),my=new Set(["participants","layers"]),gy=new Set(["viewport","width","height","dpr","reducedMotion","mute","failedAssetIds","fallback","inputModality"]),hy=new Set(["click","key","focus","step","viewport","reducedMotion","mute","failAsset","save","reload","replay"]),cu="continue",yy=["browser","visual","sequence","audio","semantic"];function Fe(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r&&(i.boundary=r),i}function He(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Je(e){return typeof e=="string"&&e.length>0}function $e(e){return JSON.parse(JSON.stringify(e))}function As(e,t,n){if(typeof e=="function"){n.push(Fe("callbacks-forbidden","authored scenarios must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>As(r,`${t}[${i}]`,n));return}if(He(e))for(let[r,i]of Object.entries(e))As(i,t?`${t}.${r}`:r,n)}function Es(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(Fe("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function tu(e,t,n){if(!Array.isArray(e))return n.push(Fe("invalid-schema","must be an array of strings",t)),[];let r=[];return e.forEach((i,o)=>{if(!Je(i)){n.push(Fe("invalid-schema","id must be a non-empty string",`${t}[${o}]`));return}r.push(i)}),r}function Is(){return{version:1,fields:{scenarioId:{type:"string"},seed:{type:"string",optional:!0},boundary:{type:"string",optional:!0},reason:{type:"string",optional:!0},code:{type:"string",optional:!0},missing:{type:"array",optional:!0}}}}function Rs(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function by(){return[Rs(me(ws,Is())),Rs(me(Si,Is())),Rs(it(Ps,Is()))]}function uu(e){return typeof e=="string"&&ly.has(e)}function vy(e,t,n){if(!He(e)||!Je(e.type)){n.push(Fe("invalid-schema","step.type is required",t));return}if(!hy.has(e.type)){n.push(Fe("unknown-field",`unknown step type "${e.type}"`,`${t}.type`));return}let r=n.length,i=a=>{Je(e[a])||n.push(Fe("missing-field",`${e.type} step requires ${a}`,`${t}.${a}`))},o=a=>{(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push(Fe("missing-field",`${e.type} step requires numeric ${a}`,`${t}.${a}`))},s=a=>{typeof e[a]!="boolean"&&n.push(Fe("missing-field",`${e.type} step requires boolean ${a}`,`${t}.${a}`))};switch(e.type){case"click":{let a=Je(e.selector),d=typeof e.x=="number"&&typeof e.y=="number";!a&&!d&&n.push(Fe("missing-field","click step requires selector or x and y",t));break}case"key":i("key");break;case"focus":i("selector");break;case"step":o("frames");break;case"viewport":{let a=e.kind!==void 0;a&&!du.has(String(e.kind))&&n.push(Fe("invalid-schema","viewport.kind must be desktop or mobile",`${t}.kind`));let d=typeof e.width=="number"&&typeof e.height=="number";!a&&!d&&n.push(Fe("missing-field","viewport step requires kind or width and height",t));break}case"reducedMotion":case"mute":s("value");break;case"failAsset":i("assetId");break;default:break}if(n.length===r)return $e(e)}function lu(e){let t=[];if(As(e,"",t),!He(e))return{ok:!1,errors:[Fe("invalid-scenario","scenario must be an object")]};if(Es(e,fy,"",t),Je(e.id)||t.push(Fe("missing-field","id is required","id")),e.schemaVersion!==Cs&&t.push(Fe("invalid-schema","schemaVersion must be 1","schemaVersion")),Je(e.seed)||t.push(Fe("missing-field","seed is required","seed")),!He(e.required))t.push(Fe("missing-field","required participants and layers are required","required"));else{Es(e.required,my,"required",t);let o=tu(e.required.participants,"required.participants",t),s=tu(e.required.layers,"required.layers",t);o.length===0&&t.push(Fe("missing-field","required.participants must not be empty","required.participants")),s.length===0&&t.push(Fe("missing-field","required.layers must not be empty","required.layers"))}let n;e.matrix!==void 0&&(He(e.matrix)?(Es(e.matrix,gy,"matrix",t),e.matrix.viewport!==void 0&&!du.has(String(e.matrix.viewport))&&t.push(Fe("invalid-schema","matrix.viewport must be desktop or mobile","matrix.viewport")),n=$e(e.matrix)):t.push(Fe("invalid-schema","matrix must be an object","matrix")));let r;if(e.steps!==void 0&&(Array.isArray(e.steps)?(r=[],e.steps.forEach((o,s)=>{let a=vy(o,`steps[${s}]`,t);a&&r.push(a)})):t.push(Fe("invalid-schema","steps must be an array","steps"))),t.length>0)return{ok:!1,errors:t};let i={id:e.id,schemaVersion:Cs,seed:e.seed,required:{participants:[...e.required.participants],layers:[...e.required.layers]}};return n&&(i.matrix=n),r&&(i.steps=r),{ok:!0,scenario:i}}function rn(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=2166136261;for(let r=0;r<t.length;r++)n^=t[r],n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function ir(e){return JSON.stringify(e)}function bi(e,t){let n=new Set(t);return e.filter(r=>!n.has(r))}function pu(e,t={}){let n=(r,i,o)=>({boundary:r,code:i,detail:o});if(t.inputDispatched===!0&&!e.inputDispatched)return n("input","assertion-failed","input was not dispatched");if(t.reducerAccepted===!0&&e.reducerAccepted!==!0)return n("reducer","assertion-failed","host reducer did not accept");if(t.reducerRejected===!0&&e.reducerRejected!==!0)return n("reducer","assertion-failed","host reducer did not reject");if(t.routedTypes){for(let r of t.routedTypes)if(!e.routedTypes.includes(r))return n("routing","assertion-failed",`missing routed type "${r}"`)}if(t.requiredParticipantsPresent===!0&&!e.requiredParticipantsPresent)return n("routing","missing-participant",`missing participants: ${e.missingParticipants.join(", ")}`);if(t.selectedBindingIds){for(let r of t.selectedBindingIds)if(!e.selectedBindingIds.includes(r))return n("binding","assertion-failed",`missing binding "${r}"`)}if(t.sequenceId&&e.sequenceId!==t.sequenceId)return n("cue","assertion-failed",`expected sequence "${t.sequenceId}"`);if(t.requiredLayersPresent===!0&&!e.requiredLayersPresent)return n("pixels","missing-layer",`missing layers: ${e.missingLayers.join(", ")}`);if(t.captions){for(let r of t.captions)if(!e.captions.includes(r))return n("caption","assertion-failed",`missing caption "${r}"`)}return t.audioInvoked===!0&&!e.audioInvoked?n("audio","assertion-failed","audio was not invoked"):t.audioFailed===!0&&!e.audioFailed?n("audio","assertion-failed","audio did not fail as required"):t.audioRestoreOk===!0&&e.audioRestoreOk!==!0?n("audio","invalid-audio-sidecar","audio sidecar was not restored"):t.snapshotOk===!0&&e.snapshotOk!==!0?n("save-replay","assertion-failed","snapshot was not valid"):t.replayMatch===!0&&e.replayMatch!==!0?n("save-replay","assertion-failed","replay traces did not match"):null}function Sy(e){let t=e?.viewport==="mobile"?"mobile":"desktop",n=ki[t];return{preset:t,viewport:{width:e?.width??n.width,height:e?.height??n.height,deviceScaleFactor:e?.dpr??n.deviceScaleFactor}}}function ky(e){return{type:"host.intent.select",kind:"intent",payload:{id:e}}}function Ey(e){return{type:"host.intent.key",kind:"intent",payload:{key:e}}}function or(e){return{boundary:"audio",code:"invalid-host-audio",detail:e}}function nu(e){return!!e&&typeof e=="object"&&typeof e.setReducedMotion=="function"}function Iy(e){return!!e&&typeof e=="object"&&typeof e.setReducedSensory=="function"}function Ry(e){if(!He(e)||!uu(e.kind))return null;let t={kind:e.kind};return typeof e.atFrame=="number"&&Number.isFinite(e.atFrame)&&(t.atFrame=e.atFrame),Je(e.name)&&(t.name=e.name),typeof e.caption=="string"&&(t.caption=e.caption),Je(e.assetId)&&(t.assetId=e.assetId),Je(e.reason)&&(t.reason=e.reason),Je(e.id)&&(t.id=e.id),Je(e.correlationId)&&(t.correlationId=e.correlationId),Je(e.causationId)&&(t.causationId=e.causationId),t}function ru(e){let t=[];for(let n of e.captions??[])typeof n=="string"&&n.length>0&&!t.includes(n)&&t.push(n);for(let n of e.events)n.caption&&n.caption.length>0&&!t.includes(n.caption)&&t.push(n.caption);return t}function Cy(e){if(e===void 0)return{ok:!0,supplied:!1,snapshot:{events:[]}};if(!He(e))return{ok:!1,error:or("hostAudio must be an object")};let t=e.snapshot,n=e.collect,r=e.inspect,i=typeof t=="function";if(!i&&!(typeof n=="function"))return{ok:!1,error:or("hostAudio requires snapshot() or collect()")};try{typeof r=="function"&&r.call(e);let s=i?t.call(e):n.call(e);if(!He(s)||!Array.isArray(s.events))return{ok:!1,error:or("hostAudio snapshot.events must be an array")};let a=[];for(let m=0;m<s.events.length;m++){let l=Ry(s.events[m]);if(!l)return{ok:!1,error:or(`hostAudio snapshot.events[${m}] is invalid`)};a.push(l)}let d={events:a};return Array.isArray(s.captions)&&(d.captions=s.captions.filter(m=>typeof m=="string")),typeof s.muted=="boolean"&&(d.muted=s.muted),{ok:!0,supplied:!0,snapshot:d}}catch(s){let a=s instanceof Error?s.message:String(s);return{ok:!1,error:or(`hostAudio inspect failed: ${a}`)}}}function Ay(e,t,n,r){return{version:1,cartId:e,seed:t,framesElapsed:n,state:r}}function wy(){return{version:1,landmarks:[],regions:[]}}function ft(e,t){return{boundary:"input",code:e,detail:t}}function fu(e){let t={};for(let n of e)n.priority!==void 0&&(t[n.id]=n.priority);return t}function Py(e,t){let n=fu(e);for(let r of t){if(r.code!=="overlap"||!r.id||!r.with)continue;let i=n[r.id],o=n[r.with];if(i===void 0||o===void 0)return{ok:!1,detail:`overlapping regions "${r.id}" and "${r.with}" require explicit control priority`};if(i===o)return{ok:!1,detail:`overlapping regions "${r.id}" and "${r.with}" have equal priority ${i}`}}return{ok:!0}}function xy(e,t,n,r,i){let o=Ur({x:e,y:t},n,r,{space:"css",precedence:Object.keys(i).length>0?i:void 0});if(!o)return null;let s=Rn({x:e,y:t},n),a=[];for(let d of r.regions)d.id!==o.id&&Cn(d,s)&&a.push(d.id);return a.sort(),{x:e,y:t,selectedControlId:o.id,rejectedControlIds:a}}function Ty(e,t){if(typeof e=="string")return e.length===0?{ok:!1,error:ft("invalid-geometry",`controls[${t}] id is required`)}:{ok:!0,control:{id:e}};if(!He(e)||!Je(e.id))return{ok:!1,error:ft("invalid-geometry",`controls[${t}] id is required`)};let n={id:e.id};if(Je(e.name)&&(n.name=e.name),Je(e.role)&&(n.role=e.role),e.priority!==void 0){if(typeof e.priority!="number"||!Number.isFinite(e.priority))return{ok:!1,error:ft("invalid-geometry",`controls[${t}].priority must be a finite number`)};n.priority=e.priority}return{ok:!0,control:n}}function iu(e,t){if(!Array.isArray(e))return{ok:!1,error:ft("invalid-geometry","controls must be an array")};let n=[],r=new Set;for(let a=0;a<e.length;a++){let d=Ty(e[a],a);if(!d.ok)return d;if(r.has(d.control.id))return{ok:!1,error:ft("ambiguous-geometry",`duplicate control id "${d.control.id}"`)};r.add(d.control.id),n.push(d.control)}if(!He(t))return{ok:!1,error:ft("invalid-geometry","geometry document is required")};if(t.version!==1||!Array.isArray(t.landmarks)||!Array.isArray(t.regions))return{ok:!1,error:ft("invalid-geometry","geometry document is invalid")};let i=$e(t),o=xd(i);if(!o.ok){let a=o.diagnostics.filter(m=>m.code==="overlap"),d=o.diagnostics.filter(m=>m.code!=="overlap");if(d.length>0){let m=d.some(l=>l.code==="duplicate-id");return{ok:!1,error:ft(m?"ambiguous-geometry":"invalid-geometry",o.diagnostics.map(l=>l.detail).join("; "))}}if(a.length>0){let m=Py(n,a);if(!m.ok)return{ok:!1,error:ft("ambiguous-geometry",m.detail)}}else return{ok:!1,error:ft("invalid-geometry",o.diagnostics.map(m=>m.detail).join("; "))}}let s=new Set(i.regions.map(a=>a.id));for(let a of n)if(!s.has(a.id))return{ok:!1,error:ft("stale-geometry",`control "${a.id}" has no region in the active geometry`)};return{ok:!0,surface:{controls:n,geometry:i}}}function xe(e,t,n){return{boundary:e,code:t,detail:n}}function Dy(e){return e==null?null:He(e)?e.schemaVersion!==Hr?xe("pixels","invalid-visual-sidecar","unsupported visual layer snapshot schema"):typeof e.frame!="number"||!Number.isFinite(e.frame)?xe("pixels","invalid-visual-sidecar","visual sidecar frame must be finite"):Array.isArray(e.layers)?null:xe("pixels","invalid-visual-sidecar","visual sidecar layers must be an array"):xe("pixels","invalid-visual-sidecar","visual sidecar must be an object")}function Oy(e){return e==null?null:He(e)?e.schemaVersion!==Jr?xe("caption","invalid-semantic-sidecar","unsupported semantic layer snapshot schema"):typeof e.frame!="number"||!Number.isFinite(e.frame)?xe("caption","invalid-semantic-sidecar","semantic sidecar frame must be finite"):Array.isArray(e.regions)?null:xe("caption","invalid-semantic-sidecar","semantic sidecar regions must be an array"):xe("caption","invalid-semantic-sidecar","semantic sidecar must be an object")}function My(e,t){return e==null?null:He(e)?e.schemaVersion!==Jn?xe("binding","invalid-binding-sidecar","unsupported presentation binding snapshot schema"):t&&e.manifestId!==t?xe("binding","invalid-binding-sidecar",`snapshot manifestId "${String(e.manifestId)}" does not match "${t}"`):Array.isArray(e.selectedBindingIds)?Array.isArray(e.targets)?null:xe("binding","invalid-binding-sidecar","binding sidecar targets must be an array"):xe("binding","invalid-binding-sidecar","binding sidecar selectedBindingIds must be an array"):xe("binding","invalid-binding-sidecar","binding sidecar must be an object")}function Ny(e,t){if(e==null)return null;if(!He(e))return xe("cue","invalid-sequence-sidecar","sequence sidecar must be an object");if(e.schemaVersion!==zr)return xe("cue","invalid-sequence-sidecar","unsupported presentation sequence snapshot schema");if(typeof e.frame!="number"||!Number.isFinite(e.frame))return xe("cue","invalid-sequence-sidecar","sequence sidecar frame must be finite");let n=e.active;if(n!=null){if(!He(n)||!Je(n.sequenceId))return xe("cue","invalid-sequence-sidecar","active.sequenceId is required");if(!t(n.sequenceId))return xe("cue","invalid-sequence-sidecar",`unknown sequence "${n.sequenceId}"`)}if(e.queue!==void 0){if(!Array.isArray(e.queue))return xe("cue","invalid-sequence-sidecar","sequence sidecar queue must be an array");for(let r=0;r<e.queue.length;r++){let i=e.queue[r];if(!He(i)||!Je(i.sequenceId))return xe("cue","invalid-sequence-sidecar",`queue[${r}] sequenceId is required`);if(!t(i.sequenceId))return xe("cue","invalid-sequence-sidecar",`unknown sequence "${i.sequenceId}"`)}}return null}function _y(e){let t=Gn(e);return t.ok?null:xe("audio","invalid-audio-sidecar",t.errors[0]?.detail??"audio sidecar is invalid")}function mu(e){let t=lu(e.scenario);if(!t.ok)throw new Error(`createProductionScenarioRunner: ${t.errors.map(K=>K.detail).join("; ")}`);let n=t.scenario,r=n.matrix??{},{preset:i,viewport:o}=Sy(r),s=e.host,a=$e(s.initialState),d=null,m,l,y,k=null,C=null,T=null,v=r.reducedMotion===!0,x=null,$=!1,j=[],D=0,V=0,A=e.createId??(()=>`ps-${++D}`),p=e.mapClick??ky,E=e.mapKey??Ey,c=e.sequenceBindings??{},f=e.origin??0,h=e.semanticRegions&&e.semanticRegions.length>0?So({originFrame:0,regions:e.semanticRegions}):void 0,R,M,P,F=co({originFrame:0,reducedSensory:r.reducedMotion===!0||r.mute===!0}),W=Mr(),O,u=null,b=null,w=[],L=[],_={},G=null,U=null,B=()=>{},g=()=>{},S=()=>{},I=K=>s.project?s.project(K):$e(K),N=()=>{let K=new Set,J=[];for(let se of[...e.geometry?.regions.map(Se=>Se.id)??[],...(e.semanticRegions??[]).map(Se=>Se.id)])K.has(se)||(K.add(se),J.push({id:se}));return J},q=K=>{if(s.projectInputSurface){let se;try{se=s.projectInputSurface(K)}catch(Se){let ye=Se instanceof Error?Se.message:String(Se);return{ok:!1,error:ft("invalid-geometry",`projectInputSurface failed: ${ye}`)}}return He(se)?iu(se.controls,se.geometry):{ok:!1,error:ft("invalid-geometry","projectInputSurface must return { controls, geometry }")}}let J=N();return e.geometry?iu(J,e.geometry):{ok:!0,surface:{controls:J,geometry:wy()}}},Z=()=>{let K=q(a);if(!K.ok){b=K.error,u=K.error,S(K.error);return}b&&u===b&&(u=null),b=null,L=K.surface.controls.map(J=>({...J})),w=L.map(J=>J.id),_=fu(L),U=$e(K.surface.geometry),g(K.surface.geometry),B(K.surface.controls)},z=K=>O?O.publish(K):X.group?.publish(K),ne=K=>{Z();let J=I(a),se=typeof J.worldRevision=="string"||typeof J.worldRevision=="number"?J.worldRevision:void 0;P?.apply(J,se!==void 0?{revision:se}:void 0);let Se=K;if(Se&&M){V+=1;let ye=`${n.id}:${Se}:${V}`;M.playSequence(Se,{invocationId:ye,idempotencyKey:ye,bindings:c[Se]??{}})}Ce()},Q=K=>{let J=s.reduce($e(a),K);d=J,a=$e(J.state);let se=He(K.payload)?K.payload:{};return J.accepted?z({type:"host.state.accepted",kind:"state",payload:{...se,reason:J.reason??"accepted"}}):z({type:"host.state.rejected",kind:"state",payload:{...se,reason:J.reason??"rejected"}}),ne(J.playSequence),J},he=document.createElement("div");he.setAttribute("aria-live","polite"),he.id="status",he.textContent="";let ke=()=>Cy(e.hostAudio),Ce=()=>{let K=M?.inspect().captions.filter(ue=>ue.visible).map(ue=>ue.text)??[],J=typeof a.caption=="string"?a.caption:"",se=ke(),Se=se.ok?ru(se.snapshot):[],ye=Se[Se.length-1]??"";he.textContent=K[0]||J||ye},Pe=()=>{let K=X.group,J=X.compositor,se=K?K.inspectParticipants().map(Ie=>Ie.id):[],Se=J?J.layers().map(Ie=>Ie.id):[],ye=bi(n.required.participants,se);if(ye.length>0)return{boundary:"routing",code:"missing-participant",detail:`missing participants: ${ye.join(", ")}`};let ue=bi(n.required.layers,Se);return ue.length>0?{boundary:"pixels",code:"missing-layer",detail:`missing layers: ${ue.join(", ")}`}:null},H=K=>({scenarioId:n.id,seed:n.seed,boundary:K.boundary,reason:K.detail}),Y=K=>{let J={type:Ps,kind:"diagnostic",payload:{...H(K),code:K.code}};z(J),e.router?.publish(J)},re=K=>{let J={type:Si,kind:"state",payload:H(K)};z(J),e.router?.publish(J),Y(K)},X=eu({seed:n.seed,viewport:o,reducedMotion:r.reducedMotion===!0,inputModality:r.inputModality??"pointer",origin:f,createId:A,geometry:e.geometry,semanticLayers:h,contentWidth:e.contentWidth??o.width,contentHeight:e.contentHeight??o.height,mount(K){let J=new Map;return g=se=>{K.setGeometry(se)},B=se=>{let Se=new Set(se.map(ue=>ue.id));for(let[ue,Ie]of[...J])Se.has(ue)||(document.activeElement===Ie&&Ie.blur(),Ie.remove(),J.delete(ue));let ye=[...se].sort((ue,Ie)=>{let xt=ue.priority??0,St=Ie.priority??0;return xt!==St?xt-St:ue.id<Ie.id?-1:ue.id>Ie.id?1:0});for(let ue of ye){let Ie=J.get(ue.id);Ie||(Ie=document.createElement("button"),Ie.type="button",Ie.id=ue.id,Ie.setAttribute("data-testid",ue.id),Ie.addEventListener("click",()=>{Q(p(ue.id))}),J.set(ue.id,Ie)),K.root.insertBefore(Ie,he),Ie.setAttribute("aria-label",ue.name??ue.id),ue.role?Ie.setAttribute("role",ue.role):Ie.removeAttribute("role"),K.placeRegion(ue.id,Ie)}},K.root.append(he),{participants:e.participants,compositor:{layers:e.compositorLayers},hostState:()=>$e(a),ready(se){if(se.group&&(O=W.bind(se.group)),se.compositor&&e.visualLayers&&e.visualLayers.length>0){R=uo({compositor:se.compositor,originFrame:0,reducedMotion:r.reducedMotion===!0,sceneId:n.id,layers:e.visualLayers});for(let[ye,ue]of Object.entries(e.visualSources??{}))R.registerSource(ye,ue),R.handleHostEvent({type:et,kind:"state",payload:{id:ye}})}let Se=[];for(let ye of e.sequences??[]){let ue=Un(ye);if(!ue.ok)throw new Error(`createProductionScenarioRunner: sequence ${ue.errors.map(Ie=>Ie.detail).join("; ")}`);Se.push(ue.sequence)}if(M=Se.length>0?Oo({originFrame:0,reducedMotion:r.reducedMotion===!0,reducedSensory:r.mute===!0||r.fallback===!0,audio:F,semantic:h,visual:R,sequences:Se}):void 0,e.bindings!==void 0){let ye=ni(e.bindings);if(!ye.ok)throw new Error(`createProductionScenarioRunner: ${ye.errors.map(ue=>ue.detail).join("; ")}`);P=$o({manifest:ye.manifest,visual:R,semantic:h,sequences:M})}K.root.addEventListener("keydown",ye=>{let ue=E(ye.key);ue&&Q(ue)}),ne()},relayout(se){for(let[Se,ye]of J)se.placeRegion(Se,ye)},destroy(){he.remove();for(let se of J.values())se.remove();J.clear()}}}}),ee=()=>{if($)throw new Error(uy)};F.unlock(),r.mute===!0&&F.broker.mute();let fe=new Set(r.failedAssetIds??[]),je=new Set([...fe]);for(let K of Object.values(c))for(let J of Object.values(K.assets??{}))J&&je.add(J);for(let K of je){let J={type:fe.has(K)?Xe:et,kind:"state",payload:{id:K}};F.handleHostEvent(J),R?.handleHostEvent(J)}if(u=Pe(),u||(u=b),!u){let K=ke();K.ok||(u=K.error)}S=re,u&&re(u);let Be=K=>({boundary:"cue",code:"unsupported-preference",detail:K}),ze=K=>{T=Be(K),u=T,re(T)},vt=K=>{let J=v;v=K,X.setReducedMotion(K);let se=[{id:"browser",applied:!0,reducedMotion:X.reproduction().reducedMotion}];R?nu(R)?(R.setReducedMotion(K),se.push({id:"visual",applied:!0,reducedMotion:R.reducedMotion})):(ze("visual does not support setReducedMotion"),se.push({id:"visual",applied:!1,reason:"setReducedMotion is not supported"})):se.push({id:"visual",applied:!1,reason:"participant-not-mounted"}),M?nu(M)?(M.setReducedMotion(K),se.push({id:"sequence",applied:!0,reducedMotion:M.reducedMotion})):(ze("sequence does not support setReducedMotion"),se.push({id:"sequence",applied:!1,reason:"setReducedMotion is not supported"})):se.push({id:"sequence",applied:!1,reason:"participant-not-mounted"});let Se=K||F.broker.muted;Iy(F)?(F.setReducedSensory(Se),se.push({id:"audio",applied:!0,reducedMotion:K,reducedSensory:F.reducedSensory})):(ze("audio does not support setReducedSensory"),se.push({id:"audio",applied:!1,reason:"setReducedSensory is not supported"})),h?se.push({id:"semantic",applied:!1,reason:"no-reduced-motion-policy"}):se.push({id:"semantic",applied:!1,reason:"participant-not-mounted"});let ye={from:J,to:K,activeSequencePolicy:cu,participants:se};return x=ye,ye},Wt=async K=>{O?await O.step(K):await X.step(K),R?.step(K),M?.step(K),F.step(K),Ce()},gu=(K=ke())=>{let J=X.group,se=X.compositor,Se=J?J.inspectParticipants().map(De=>De.id):[],ye=se?se.layers().map(De=>De.id):[],ue=bi(n.required.participants,Se),Ie=bi(n.required.layers,ye),xt=X.events,St=K.ok?K.snapshot:{events:[]},on=K.ok?ru(St):[],kt=[...M?.inspect().captions.filter(De=>De.visible).map(De=>De.text)??[],...on],jt=typeof a.caption=="string"?a.caption:"";jt&&!kt.includes(jt)&&kt.push(jt);let le=F.snapshot(),Et=St.events,Ut=X.screenshot(),bu=j.find(De=>De.type==="click");return{inputDispatched:j.some(De=>De.type==="click"||De.type==="key"),inputTarget:bu?.selector,reducerAccepted:d?.accepted===!0,reducerRejected:d?d.accepted===!1:void 0,reducerReason:d?.reason,routedTypes:xt.map(De=>De.type),rejected:xt.some(De=>De.type===Lt),selectedBindingIds:P?.inspect().selectedBindingIds??[],sequenceId:M?.inspect().active?.sequenceId??d?.playSequence??null,sequencePhase:M?.inspect().active?.phase??null,captions:kt,declaredOrder:Ut.declaredOrder,requiredParticipantsPresent:ue.length===0,requiredLayersPresent:Ie.length===0,missingParticipants:ue,missingLayers:Ie,audioInvoked:le.events.some(De=>De.type==="audio.cue.scheduled"||De.type==="audio.cue.started")||Et.some(De=>py.has(De.kind)),audioFailed:le.events.some(De=>De.type==="audio.cue.failed")||Et.some(De=>De.kind==="failed")||(r.failedAssetIds?.length??0)>0,muted:le.muted||St.muted===!0,replayMatch:l?.ok,snapshotOk:m!==void 0,audioRestoreOk:y,reducedMotion:v,reducedMotionPropagation:x,activeControlIds:w.slice(),inputHitTest:G?{...G}:void 0}},xs=K=>{u=Pe();let J=ke();!u&&b&&(u=b),!u&&C&&(u=C),!u&&k&&(u=k),!u&&T&&(u=T),!u&&!J.ok&&(u=J.error);let se=gu(J),Se={requiredParticipantsPresent:!0,requiredLayersPresent:!0,...K},ye=u??pu(se,Se),ue=X.screenshot(),Ie=X.accessibilitySnapshot(),xt=h?.inspectPublished()??[],St=W.records(),on=m?ir(m):"",kt=ue.imageData?new Uint8Array(ue.imageData.data):new Uint8Array,jt=Object.keys(e.visualSources??{}).sort(),le=typeof a.worldRevision=="string"||typeof a.worldRevision=="number"?a.worldRevision:null,Et={schemaVersion:vi,scenarioId:n.id,seed:n.seed,matrix:{viewport:i,width:o.width,height:o.height,dpr:o.deviceScaleFactor??1,...r},hashes:{pixels:rn(kt),semantic:rn(ir(xt)),a11y:rn(ir(Ie)),trace:rn(ir(St)),snapshot:on?rn(on):"0".repeat(8),assets:rn(ir(jt))},revisions:{world:le,bindings:P?.inspect().revision??null,snapshot:Qe},traces:{envelopes:X.events.slice(),inspector:St,audio:F.snapshot().events.slice(),hostAudio:J.ok?[...J.snapshot.events]:[],actions:j.slice()},screenshot:{pngDataUrl:ue.pngDataUrl,declaredOrder:ue.declaredOrder.slice(),width:ue.imageData?.width??o.width,height:ue.imageData?.height??o.height},semantic:xt,a11y:Ie,firstBrokenBoundary:ye?.boundary??null,localization:ye,participants:X.group?.inspectParticipants().map(Ut=>Ut.id)??[],layers:X.compositor?.layers().map(Ut=>Ut.id)??[],observation:se};return z({type:ye?Si:ws,kind:"state",payload:{scenarioId:n.id,seed:n.seed,boundary:ye?.boundary,reason:ye?.detail}}),ye&&Y(ye),Et},hu=()=>({schemaVersion:vi,host:$e(a),lastDecision:d?$e(d):null,visual:R?.snapshot()??null,semantic:h?.snapshot()??null,bindings:P?.snapshot()??null,sequences:M?.snapshot()??null,audio:F.snapshot()}),Ts=()=>{let K=Ui({cart:{id:n.id,version:"1"},seed:n.seed,clock:{framesElapsed:0},engineState:Ay(n.id,n.seed,0,$e(a)),hostState:hu(),createdAt:"2026-09-05T00:00:00.000Z"});if(!K.ok)throw new Error(K.errors.map(J=>J.detail).join("; "));return m=K.snapshot,K.snapshot},Ds=K=>{let J=K.hostState;if(!He(J)||!He(J.host))throw new Error("Production scenario reload: hostState.host is required");let se=$e(J.host),Se=J.audio!==void 0&&J.audio!==null,ye=le=>{le.code==="invalid-audio-sidecar"?(y=!1,k=le):k=null,C=le,u=le,re(le)};if(J.schemaVersion!==void 0&&J.schemaVersion!==vi){ye(xe("save-replay","invalid-schema","unsupported production scenario sidecar schemaVersion"));return}if(s.validateRestoreState){let le=s.validateRestoreState(se);if(!le.ok){ye(xe("save-replay","invalid-host-sidecar",le.detail));return}}let ue=q(se);if(!ue.ok){ye(ue.error);return}let Ie=P?.snapshot().manifestId,xt=[J.visual!==void 0&&J.visual!==null&&R?Dy(J.visual):null,J.semantic!==void 0&&J.semantic!==null&&h?Oy(J.semantic):null,J.bindings!==void 0&&J.bindings!==null&&P?My(J.bindings,Ie):null,J.sequences!==void 0&&J.sequences!==null&&M?Ny(J.sequences,le=>!!M?.get(le)):null,Se?_y(J.audio):null];for(let le of xt)if(le){ye(le);return}Se||(y=!1,k=null);let St=()=>({hostState:$e(a),lastDecision:d?$e(d):null,visual:R?R.snapshot():null,semantic:h?h.snapshot():null,bindings:P?P.snapshot():null,sequences:M?M.snapshot():null,audio:F.snapshot()}),on=le=>{a=$e(le.hostState),d=le.lastDecision?$e(le.lastDecision):null;let Et=[];return R&&le.visual!==null&&Et.push(R.restore(le.visual)),h&&le.semantic!==null&&Et.push(h.restore(le.semantic)),P&&le.bindings!==null&&Et.push(P.restore(le.bindings)),M&&le.sequences!==null&&Et.push(M.restore(le.sequences)),Et.push(F.restore(le.audio)),Et.every(Ut=>Ut.ok)},kt=le=>{if(!on(jt)){ye(xe("save-replay","invalid-schema","reload rollback failed after sidecar restore"));return}ye(le)},jt=St();if(a=se,d=He(J.lastDecision)?$e(J.lastDecision):null,J.visual&&R){let le=R.restore(J.visual);if(!le.ok){kt(xe("pixels","invalid-visual-sidecar",le.errors[0]?.message??"visual sidecar restore failed"));return}}if(J.semantic&&h){let le=h.restore(J.semantic);if(!le.ok){kt(xe("caption","invalid-semantic-sidecar",le.errors[0]??"semantic sidecar restore failed"));return}}if(J.bindings&&P){let le=P.restore(J.bindings);if(!le.ok){kt(xe("binding","invalid-binding-sidecar",le.errors[0]?.detail??"binding sidecar restore failed"));return}}if(J.sequences&&M){let le=M.restore(J.sequences);if(!le.ok){kt(xe("cue","invalid-sequence-sidecar",le.errors[0]?.detail??"sequence sidecar restore failed"));return}}if(Se){let le=F.restore(J.audio);if(!le.ok){kt(xe("audio","invalid-audio-sidecar",le.errors[0]?.detail??"audio sidecar restore failed"));return}y=!0,k=null}C=null,Z(),Ce(),u&&u!==b&&(u=b),m=K},Os=(K,J)=>{if(U){let se=xy(K,J,X.layout,U,_);if(se){G=se,X.click(`#${se.selectedControlId}`);return}}G=null,X.click(K,J)},Ms=async()=>{let K=X.group;if(!O||!K)return l={ok:!1,detail:"replay requires a mounted runtime group"},l;let J=await O.exportTrace(),se=mu({...e,scenario:n,createId:(()=>{let Se=0;return()=>`ps-${++Se}`})()});try{let Se=await io(J,se.harness.group);return l=ro(J.records,Se.report.records),Se.inspector.destroy(),l}finally{se.destroy()}},yu=async K=>{switch(j.push($e(K)),K.type){case"click":if(typeof K.selector=="string")X.click(K.selector);else if(typeof K.x=="number"&&typeof K.y=="number")Os(K.x,K.y);else throw new Error("click step requires selector or x,y");return;case"key":X.root.focus(),X.key(K.key);return;case"focus":X.focus(K.selector);return;case"step":await Wt(K.frames);return;case"viewport":{let J=K.kind==="mobile"?ki.mobile:K.kind==="desktop"?ki.desktop:o;X.setViewport(K.width??J.width,K.height??J.height,K.dpr??J.deviceScaleFactor);return}case"reducedMotion":vt(K.value);return;case"mute":K.value?F.broker.mute():F.broker.unmute();return;case"failAsset":{let J={type:Xe,kind:"state",payload:{id:K.assetId}};F.handleHostEvent(J),R?.handleHostEvent(J);return}case"save":Ts();return;case"reload":if(!m)throw new Error("reload requires a prior save");Ds(m);return;case"replay":await Ms();return}};return{scenario:n,harness:X,audio:F,inspector:W,goto(){ee(),X.goto()},click(K,J){ee(),j.push(typeof K=="string"?{type:"click",selector:K}:{type:"click",x:K,y:J}),typeof K=="string"?X.click(K):Os(K,J)},key(K){ee(),j.push({type:"key",key:K}),X.root.focus(),X.key(K)},focus(K){ee(),j.push({type:"focus",selector:K}),X.focus(K)},setViewport(K,J,se){ee(),j.push({type:"viewport",width:K,height:J,dpr:se}),X.setViewport(K,J,se)},setReducedMotion(K){ee(),j.push({type:"reducedMotion",value:K}),vt(K)},mute(K=!0){ee(),j.push({type:"mute",value:K}),K?F.broker.mute():F.broker.unmute()},failAsset(K){ee(),j.push({type:"failAsset",assetId:K});let J={type:Xe,kind:"state",payload:{id:K}};F.handleHostEvent(J),R?.handleHostEvent(J)},async step(K=1){ee(),j.push({type:"step",frames:K}),await Wt(K)},applyHostIntent(K){return ee(),Q(K)},playSequence(K,J=`${n.id}:${K}`){ee(),M?.playSequence(K,{invocationId:J,idempotencyKey:J,bindings:c[K]??{}}),Ce()},publish(K){return ee(),z(K)},save(){return ee(),j.push({type:"save"}),Ts()},reload(K){ee();let J=K??m;if(!J)throw new Error("reload requires a prior save or an explicit snapshot");j.push({type:"reload"}),Ds(J)},async replay(){return ee(),j.push({type:"replay"}),Ms()},async run(K){ee(),X.goto();let J=K??n.steps??[];for(let se of J)await yu(se);return xs()},captureEvidence(K){return ee(),xs(K)},inspect(){return ee(),{host:$e(a),lastDecision:d,bindings:P?.inspect()??null,sequences:M?.inspect()??null,visual:R?.inspect()??null,semantic:h?.inspect()??null,audio:F.snapshot(),hostAudio:(()=>{let K=ke();return K.ok&&K.supplied?K.snapshot:null})(),participants:X.group?.inspectParticipants().map(K=>K.id)??[],layers:X.compositor?.layers().map(K=>K.id)??[],composition:(()=>{let K=Pe();if(K)return K;if(b)return b;if(C)return C;if(T)return T;let J=ke();return J.ok?null:J.error})(),reducedMotion:v,reducedMotionPropagation:x,inputSurface:{controlIds:w.slice(),controls:L.map(K=>({...K})),geometry:U?$e(U):null}}},destroy(){$||($=!0,O?.unbind(),W.destroy(),P?.destroy(),M?.destroy(),R?.destroy(),h?.destroy(),F.destroy(),X.destroy())}}}async function XS(e,t){let n=e.captureComposedFrame();if(!t)return n;let{writeFile:r}=await import("node:fs/promises");return await r(t,cr(n.pngDataUrl)),{...n,path:t}}export{Fr as AUDIO_CUE_SNAPSHOT_SCHEMA_VERSION,ms as CONTENT_REVISION_ACTIVATED_EVENT,rr as CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION,_a as DEFAULT_HEADLESS_HEIGHT,Na as DEFAULT_HEADLESS_WIDTH,Ya as DEFAULT_MAX_SELECTION_RECORDS,ki as DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS,Ma as HEADLESS_PNG_DATA_URL,au as HOST_OWNED_AUDIO_EVENT_KINDS,Ae as HeadlessUnsupportedOperationError,ti as PRESENTATION_BINDING_APPLIED_EVENT,Jn as PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION,su as PRODUCTION_SCENARIO_BOUNDARIES,Cs as PRODUCTION_SCENARIO_SCHEMA_VERSION,vi as PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION,cu as REDUCED_MOTION_ACTIVE_SEQUENCE_POLICY,yy as REDUCED_MOTION_PARTICIPANT_IDS,Xa as SELECTION_DECISION_KINDS,oo as SELECTION_REASON_CODES,Nr as SELECTION_TRACE_SCHEMA_VERSION,Qa as SELECTION_TRACE_SENSITIVE_KEYS,Va as UPDATE_GOLDEN_ENV,us as WORLD_PATCH_ACCEPTED_EVENT,mi as WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION,Ha as assertPixelsEqual,$l as assertPngDataUrlsEqual,xi as attachHeadlessCanvas2D,Cp as attachSelectionTrace,ty as benchmarkCartFrames,Sg as cabinetPortal,tf as captureVisualLayers,$a as compareImageData,ro as compareReplayTraces,Kh as contentRevisionEventContracts,Qh as createContentRevisionActivator,Ks as createDefaultGlyphAtlas,co as createHeadlessAudioAdapter,Fl as createHeadlessHarness,Lg as createHeadlessJobWorker,ap as createHeadlessMultiCartHarness,Pn as createHostGrantSet,Eu as createImageFixture,Gg as createJobCoordinator,Rc as createMemoryJobPersistence,Wc as createMemoryWorldPersistence,Eg as createPortalLifecycle,$o as createPresentationBindingRuntime,Oo as createPresentationSequencePlayer,mu as createProductionScenarioRunner,ug as createRemoteCartSandbox,Jh as createRemoteContentAdapter,Mr as createReplayInspector,Ap as createSelectionTrace,So as createSemanticLayerController,Uh as createStaticContentAdapter,uo as createVisualLayerController,dh as createWorldGraph,Fh as createWorldPatchApplier,Ti as decodePng,ni as definePresentationBindings,Un as definePresentationSequence,lu as defineProductionScenario,an as encodePng,dn as encodePngDataUrl,Fo as evaluatePresentationBindings,rn as fnv1aHex,ny as formatFrameBenchmarkResult,Iu as getHeadlessSurface,Xi as imageDataFromPngDataUrl,Pr as installHeadlessCanvas,uu as isHostOwnedAudioEventKind,Sp as isSelectionDecisionKind,vp as isSelectionReasonCode,_g as jobEventContracts,pu as localizeProductionScenarioFailure,_t as makeImageData,kg as paintingPortal,Gn as parseAudioCueSnapshot,Lm as presentationBindingEventContracts,hm as presentationSequenceEventContracts,by as productionScenarioEventContracts,Rp as recordSelectionDecision,io as replayExportedTrace,Pi as setDefaultGlyphAtlas,Fa as shouldUpdateGolden,ah as worldGraphEventContracts,Ch as worldPatchEventContracts,XS as writeComposedFrame,Bl as writeVisualArtifacts};
|