@cyberart-io/engine 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/headless.d.ts +126 -60
- package/dist/headless.js +1 -1
- package/dist/index.d.ts +86 -67
- package/dist/index.js +1 -1
- package/docs/frame-benchmark.md +107 -0
- package/docs/headless-harness.md +5 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
* Not an OSI open-source license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
var _o=Object.defineProperty;var gr=(e,t)=>()=>(e&&(t=e(e=0)),t);var Vo=(e,t)=>{for(var n in t)_o(e,n,{get:t[n],enumerable:!0})};var Go={};function Uo(e,t){let n=e.indexOf(Tr);if(n===-1)return null;let r=n+Tr.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 mn,Tt,$o,st,Tr,Mr=gr(()=>{"use strict";mn=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,Tt="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[Tt]&&(window.addEventListener("error",e=>{let t=e?.message??"";mn.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";mn.test(n)&&e.preventDefault()}),window[Tt]=!0);$o=!1,st=(...e)=>{$o&&console.log("[workletPatch]",...e)},Tr="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[Tt]){let e=new WeakMap,t=/registerProcessor\s*\(\s*['"`]([^'"`]+)['"`]/g,n=AudioWorklet.prototype.addModule,r=0;AudioWorklet.prototype.addModule=async function(o,a){let d=++r,c=e.get(this);c||(c=new Set,e.set(this,c)),st(`#${d} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...c]});let E=o,v=null;if(o.startsWith("blob:")){let b=null;try{b=await(await fetch(o)).text()}catch(x){st(`#${d} blob fetch failed`,x)}if(b!==null){let x=new Set;for(let I of b.matchAll(t))x.add(I[1]);if(x.size>0){let I=[...x].filter(h=>c.has(h)),M=[...x].filter(h=>!c.has(h));if(I.length>0&&M.length===0){st(`#${d} short-circuit \u2014 all processors already registered`,I);return}if(I.length>0&&M.length>0){let h=Uo(b,I);if(h!==null){let P=new Blob([h],{type:"application/javascript"});v=URL.createObjectURL(P),E=v,st(`#${d} rewrote blob; skipping`,I,"allowing",M)}else st(`#${d} blob rewrite failed; passing original through`)}M.forEach(h=>c.add(h))}}}return n.call(this,E,a).then(()=>{v&&URL.revokeObjectURL(v)},b=>{v&&URL.revokeObjectURL(v);let x=(b&&b.message)??"";if(!(mn.test(x)||/already registered/i.test(x)))throw b})},AudioWorklet.prototype[Tt]=!0}});var Dr={};Vo(Dr,{AUDIO_LIBRARIES:()=>yn,adaptersFor:()=>Dt,importTone:()=>Mt,normalizeAudioLibraries:()=>Lt});async function Mt(){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 Lt(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in yn)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function Dt(e){return e.map(t=>yn[t])}var Lr,yn,hn=gr(()=>{"use strict";Lr={id:"tone",async load(){await Promise.resolve().then(()=>(Mr(),Go))},async unlock(){await Lr.load(),await(await Mt()).start()},async resumeIfSuspended(){let e=await Mt();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await Mt()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},yn={tone:Lr}});var br=()=>{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"]},le=window.devicePixelRatio||1,Fe=/Headless/i.test(navigator.userAgent),Au=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function vr(){return Math.min(window.innerWidth,window.innerHeight)}var Ct="data-cyberart-canvas",He=class{constructor(t,n,r=1,i={}){this.width=t,this.height=n;let o=i.container,a=i.adoptFromDocument??!o,d=o?o.querySelector(`canvas[${Ct}]`)??o.querySelector("canvas"):null;if(d)this.canvas=d,this.adopted=!0;else if(a){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(Ct)||this.canvas.setAttribute(Ct,""),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/le}px`,this.canvas.style.height=`${n/le}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 Er(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 Sr(e,t=window.innerWidth,n=window.innerHeight){let r=vr(),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 At=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={}}},Cr=At;var wt=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))}},Ar=wt;function Ke(){return{now:()=>performance.now()}}function kt(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var wr=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),Rt=class{constructor(t,n,r,i,o,a={}){this.startTime=0;this.lastUpdateAt=null;this.lastRenderAt=null;this.clockOffsetMs=0;this.pauseStartedAt=null;this.renderAnimation=this.renderAnimation.bind(this),this.dimensionContext=Er(t,n),this.R=r,this.gameManager=a.gameManager,this.hostChannel=a.hostChannel,this.clock=a.clock??Ke(),this.kind=a.kind??"render",this.keyboardManager=new Cr(!1,a.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new He(this.dimensionContext.width,this.dimensionContext.height,1,a.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new Ar(this.canvas.canvas,{listen:a.listenToPointer!==!1})),this.animationCart=o;let d=a.customState;this.featureState=o.getDefaultFeatureState?.(this.R,this.dimensionContext,i,this.keyboardManager,d,this.pointerManager,this.gameManager,this.hostChannel),this.cartState=o.getDefaultState(this.R,this.dimensionContext,i,this.keyboardManager,d,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=wr(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=wr(i,this.startTime,this.lastUpdateAt,this.lastRenderAt),a=this.drawingContext,d=this.canvas?.imageData;this.kind!=="calculation"&&this.animationCart.render&&a&&d&&this.animationCart.render(this.R,t,n,this.dimensionContext,this.cartState,a,d,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 xt=class extends He{constructor(t,n,r=1,i=!0,o={}){if(super(t,n,r,o),this.adopted)return;let a=o.container;if(a){this.canvas.parentNode!==a&&a.appendChild(this.canvas);return}if(i){let d=document.getElementById("canvas");d&&d!==this.canvas&&d.parentNode===document.body&&document.body.removeChild(d),document.body.appendChild(this.canvas)}}};function kr(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 a=(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+a|0,(a>>>0)/4294967296},getRegs:()=>({a:t,b:n,c:r,d:i}),setRegs:a=>{t=a.a,n=a.b,r=a.c,i=a.d}}}var it=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=kr(t.hash.substring(2,32)),this.genB=kr(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 xr="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",Rr="https://ipfs.io/ipfs/";function Oo(e){return e.endsWith("/")?e:`${e}/`}var ot=null;function No(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function Fo(e){return e&&e.length>0?e:[{cid:xr}]}function Ho(e){return e.startsWith("0x")?e:`0x${e}`}var Ir=/^(0[xX])?[0-9a-fA-F]{64}$/;function Ko(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 It(e){let t=typeof e=="number"?String(e):e;return Ir.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:Ko(t)}function Pt(e,t){if(typeof e=="number"||t==="deterministic")return It(e);let n=String(e);return Ir.test(n)?It(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function Bo(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:Fo(tokenData.externalAssetDependencies),preferredIPFSGateway:Oo(tokenData.preferredIPFSGateway||Rr),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?Ho(e):t.get("hash")||`0x${No(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:xr}],preferredIPFSGateway:Rr}}function fn(e){let t=e?.useCache!==!1;if(t&&ot&&!e?.hash)return ot;let n=Bo(e?.hash);return t?ot=n:ot||(ot=n),n}function Pr(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}hn();var _t="$cyberartTa",oe=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},gn={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function jo(e){for(let t of Object.keys(gn))if(e instanceof gn[t])return t}function Vr(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function he(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function bn(e){return he(e)?typeof e[_t]=="string"&&Array.isArray(e.d):!1}function qo(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||Vr(e)||he(e))}var zo=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function _r(e){return e===null?"null":bn(e)?String(e[_t]):Array.isArray(e)?"array":he(e)?"object":typeof e}function Yo(e,t){return e===t||e==="null"||t==="null"}function Ie(e){return e.trim().toLowerCase().replace(/^0x/,"")}function Or(e,t,n,r){if(!(!n&&!r)&&Ie(e)!==Ie(t))throw new oe(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function Be(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Nr(e,t){let n=e.dimensions;if(n&&Be(n.width)&&Be(n.height))return n;if(t&&Be(t.width)&&Be(t.height))return{width:t.width,height:t.height};if(he(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(Be(r)&&Be(i))return{width:r,height:i}}return null}function $e(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(Vr(e)){let n=jo(e);return n?{[_t]: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 a of e){let d=$e(a,t);d!==void 0&&(i.push(d),o++)}return e.length>0&&o===0?void 0:i}if(!he(e)||qo(e))return;let n=Object.keys(e),r={};for(let i of n){if(zo.has(i))continue;let o=$e(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 at(e){if(bn(e)){let t=gn[e[_t]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>at(t));if(he(e)){let t={};for(let n of Object.keys(e))t[n]=at(e[n]);return t}return e}function vn(e,t,n,r,i=!0){if(i&&n&&r&&n!==r)throw new oe(`Cart state is for "${r}", but the live cart is "${n}"`);if(!he(t)){if(i)throw new oe("Cart state snapshot is empty");return}let o=Object.keys(t);if(o.length===0){if(i)throw new oe("Cart state snapshot is empty");return}let a=$e(e);if(!he(a)||Object.keys(a).length===0){if(i)throw new oe("Live cart has no serializable state");return}let d=o.filter(c=>c in a);if(d.length===0){if(i)throw new oe("Cart state snapshot does not overlap the live cart shape");return}for(let c of d){let E=_r(a[c]),v=_r(t[c]);if(!Yo(E,v))throw new oe(`Cart state field "${c}" has type ${v}, live cart expects ${E}`);if(E==="object"){let b=t[c],x=e[c];he(b)&&!bn(b)&&vn(x,b,void 0,void 0,!1)}}}function Fr(e,t){if(!he(e)||!he(t))return;let n=$e(e);if(he(n))for(let r of Object.keys(t))r in n&&(e[r]=at(t[r]))}function ce(e){let t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object")throw new oe("Cart state bundle is not an object");if(t.version!==1)throw new oe(`Unsupported cart state version ${String(t.version)}`);if(typeof t.seed!="string"||typeof t.framesElapsed!="number")throw new oe("Cart state bundle is missing seed or framesElapsed");return t}var ve="cyberart.asset.ready",Ee="cyberart.asset.failed";function Pe(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ge(e){try{return JSON.stringify(e)}catch{return String(e)}}function En(e,t,n){let r=t??[],i=n??[],o=Math.max(r.length,i.length);for(let a=0;a<o;a++)if(ge(r[a])!==ge(i[a]))return`${e}[${a}]: ${ge(r[a])} vs ${ge(i[a])}`}function Hr(e,t){let n=[];e.seed!==t.seed&&n.push(`seed: ${e.seed} vs ${t.seed}`),e.clock.framesElapsed!==t.clock.framesElapsed&&n.push(`framesElapsed: ${e.clock.framesElapsed} vs ${t.clock.framesElapsed}`),e.clock.now!==t.clock.now&&n.push(`now: ${e.clock.now} vs ${t.clock.now}`),e.clock.frameRate!==t.clock.frameRate&&n.push(`frameRate: ${e.clock.frameRate} vs ${t.clock.frameRate}`),ge(e.rng)!==ge(t.rng)&&n.push(`rng: ${ge(e.rng)} vs ${ge(t.rng)}`);let r=En("actions",e.actions,t.actions);r&&n.push(r);let i=En("applied",e.applied,t.applied);i&&n.push(i);let o=En("events",e.events,t.events);return o&&n.push(o),ge(e.state)!==ge(t.state)&&n.push(`state: ${ge(e.state)} vs ${ge(t.state)}`),n}function Kr(e){return{type:e.status==="ready"?ve:Ee,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function Jo(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 Xo(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 Qo=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],Cn=Qo[0],Zo=Cn[0]/Cn[1],Sn=30,es=120,ts=3840/2160,ns=2160/3840,Vt=class{constructor(t=Sn,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,a,d={}){this.framesElapsed=0;this.frameRate=Sn;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=d.container,this.seed=d.seed,this.captureKeyboard=d.captureKeyboard??!0,this.customState=d.customState,this.hostChannel=d.hostChannel,this.fallbackAudio=Lt(d.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=d.kind??"render";let c=d.deterministic;this.deterministic=!!c;let E=c&&typeof c=="object"?c:{};if(this.deterministic){if(d.clock){let v=d.clock;if(typeof v.advance!="function")throw new Error("deterministic mode requires a virtual clock with advance()");this.virtualClock=v,this.clock=v}else this.virtualClock=kt(E.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=Pe(E.actions??[]),this.scriptedActions=Pe(this.initialScriptedActions)}else this.clock=d.clock??Ke();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=Zo,this.selectedAsp=Cn,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=Fe,this.containerWidth=r,this.containerHeight=i,this.gameManager=a,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?fn({hash:this.seed,useCache:!1}):fn(),this.rawParams=Pr(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]=Sr(n,this.containerWidth,this.containerHeight);r*=le,i*=le,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 xt(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 it(this.tokenData),o=new Rt(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=Pe(this.initialScriptedActions),this.appliedActions=[],this.consumedActionIndexes=new Set,this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.deterministic&&this.hostChannel&&(this.outboundUnsubscribe=this.hostChannel.onEvent(a=>{this.outboundEvents.push(a)})),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??Sn,o=n.cartState?.visualMode??n.featureState?.visualMode,a=o&&r?.frameRateByVisualMode?r.frameRateByVisualMode[o]:void 0;this.updateFrameRate(typeof a=="number"&&a>0?a:i)}get audioLibraries(){return this.audioLibrariesInternal}get needsAudio(){return this.audioLibrariesInternal.length>0}resolveAudioLibraries(t){this.audioLibrariesInternal=Lt(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=Dt(this.audioLibrariesInternal);if(Fe){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||Fe))for(let t of Dt(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(Pe(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:Pe(this.scriptedActions),applied:Pe(this.appliedActions),events:Pe(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(Kr(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:le},state:$e(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=ce(t),o=this._paused,a=this.loopRunning;this.paused=!0,await this.waitUntilUpdateIdle(),vn(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),Or(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let d=Nr(i,n?.framebuffer??this.lastExportedFramebuffer);if(d){this.pinOutputSize(d);let v=d.cssWidth??d.width/le,b=d.cssHeight??d.height/le;Xo(v,b),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let c=this.customState,E=!1;try{if(this.customState=at(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&Fr(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let v=this.animation,b=v.cartState,x=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:Jo(b);v.restoreClock(x,typeof b?.startTime=="number"?b.startTime:void 0),o&&v.setPaused(!0);let I=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(I&&v.restoreFramebuffer(I)?b.keepRatioPrimed=!0:await v.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),E=!0}catch(v){throw this.clearPinnedOutput(),this.customState=c,this.paused=o,this.animationCart&&(this.syncContainerFromDom(),this.init(),this.reloadCart()),v}finally{this.importing=!1,E&&(this.customState=c,this.paused=o,a&&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&&!Fe&&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/le,h:t.cssHeight??t.height/le}}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/le,a=t.height/le;if(o<1||a<1||r<1||i<1)return;let d=Math.min(r/o,i/a),c=o*d,E=a*d;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=`${E}px`,n.style.imageRendering=Math.abs(d-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,a,d="update";try{if(r||!this.paused||this.tempUnpause){if(!Fe&&!r&&this.tuneFramerate(t),!this.animation)return;if(d="update",this.updateInProgress=!0,await this.animation.updateAnimationState(this.framesElapsed,this.rawParams,t),this.updateInProgress=!1,this.kind!=="calculation"&&(d="render",await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t)),this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let v=localStorage.getItem("goodones"),b=JSON.stringify(v?[...JSON.parse(v),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)}d="draw",this.drawIt()}catch(c){o=!0,a=c,this.handleFrameError(c,d)}finally{this.updateInProgress=!1}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=es&&(this.loopRunning=!1,this.onError?.(a,{phase:d,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(ts,Math.max(ns,o))}else this.aspectRatio=t[0]/t[1]}};var rs="HostChannel has been destroyed",Ue=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(rs)}};var ae=2,Nt=1,Ft="0.0.5",wn="0",$r="1970-01-01T00:00:00.000Z";function ie(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Ge(e){return JSON.parse(JSON.stringify(e))}function te(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function Ur(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){te(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{te(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function se(e){return typeof e=="string"&&e.length>0}function Ot(e){return typeof e=="number"&&Number.isFinite(e)}function is(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function je(e){return!ie(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function os(e){return ie(e)&&e.schemaVersion===ae&&ie(e.engineState)}function ss(e){return ie(e)&&typeof e.schemaVersion=="number"&&ie(e.engineState)}function dt(e){if(ie(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if(je(e))return Nt}}function An(e,t,n){try{return Ge(ce(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";te(n,"invalid-engine-state",i,t);return}}function as(e,t,n){if(!ie(e)){te(n,"invalid-field","cart must be an object",t);return}se(e.id)||te(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),se(e.version)||te(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"?te(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function ds(e,t,n){if(!ie(e)){te(n,"invalid-field","clock must be an object",t);return}if(!Ot(e.framesElapsed)){te(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(Ot(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:te(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(Ot(e.now)?r.now=e.now:te(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(Ot(e.frameRate)?r.frameRate=e.frameRate:te(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function us(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){te(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let a=`${t}[${o}]`;if(!ie(i)||!se(i.id)||!se(i.version)){te(n,"invalid-field","module refs need non-empty id and version",a);return}r.push({id:i.id,version:i.version})}),r}function cs(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){te(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let a=`${t}[${o}]`;if(!ie(i)||!se(i.id)){te(n,"invalid-field","asset refs need a non-empty id",a);return}let d={id:i.id};i.version!==void 0&&(se(i.version)?d.version=i.version:te(n,"invalid-field","asset.version must be a non-empty string",`${a}.version`)),i.ref!==void 0&&(se(i.ref)?d.ref=i.ref:te(n,"invalid-field","asset.ref must be a non-empty string",`${a}.ref`)),r.push(d)}),r}function ls(e,t,n){if(e===void 0)return;if(!ie(e)||!se(e.seed)){te(n,"invalid-field","rng must include a seed",t);return}if(!ie(e.prngA)||!ie(e.prngB)){te(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){te(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return Ur(e,t,n)}function ps(e,t,n){if(e===void 0)return;if(!ie(e)){te(n,"invalid-field","provenance must be an object",t);return}let r={};return e.source!==void 0&&(se(e.source)?r.source=e.source:te(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!ie(e.integrity)||!se(e.integrity.alg)||!se(e.integrity.hash)?te(n,"invalid-field","provenance.integrity needs alg and hash strings",`${t}.integrity`):r.integrity={alg:e.integrity.alg,hash:e.integrity.hash}),r}function Gr(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==ae&&te(t,"invalid-schema",`defineSnapshot produces schema ${ae}`,"schemaVersion"),se(e.seed)||te(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?Ft:e.runtimeVersion;se(n)||te(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;is(r)||te(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=as(e.cart,"cart",t),o=ds(e.clock,"clock",t),a=An(e.engineState,"engineState",t),d=us(e.modules,"modules",t),c=cs(e.assets,"assets",t),E=ls(e.rng,"rng",t),v=ps(e.provenance,"provenance",t),b;if(e.hostState!==void 0&&(b=Ur(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!se(e.hostStateRef)&&te(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!a||!se(e.seed))return;let x={schemaVersion:ae,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:a,createdAt:r};return d&&d.length>0&&(x.modules=d),E&&(x.rng=E),b!==void 0&&(x.hostState=b),se(e.hostStateRef)&&(x.hostStateRef=e.hostStateRef),c&&c.length>0&&(x.assets=c),v&&(v.source||v.integrity)&&(x.provenance=v),x}function jr(e){if(!ie(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=Gr(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function ut(e,t){return se(e.cartId)?jr({cart:{id:e.cartId,version:t?.cartVersion??wn,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 Br(e){let t=Ge(e),n={schemaVersion:Nt,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:wn,generative:t.generative}),n}function Ht(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(!ie(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(je(t))try{return{ok:!0,snapshot:Br(ce(t))}}catch(r){return{ok:!1,errors:[{code:"invalid-engine-state",detail:r instanceof Error?r.message:"Cart state bundle is invalid"}]}}let n=dt(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===Nt){let r=[],i=An(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:Br(i)}}if(n!==ae){if(n>ae)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${n} is newer than ${ae}`,path:"schemaVersion"}]};let r=[],i=An(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 qe(t)}function qe(e){if(!ie(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(e.schemaVersion!==ae)return{ok:!1,errors:[{code:"invalid-schema",detail:`Expected snapshot schema ${ae}`,path:"schemaVersion"}]};let t=[],n=Gr(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function _e(e){return e.map(t=>t.detail).join("; ")}function qr(e){if(je(e))return ce(e);if(ie(e)&&e.engineState!==void 0)return ce(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function fs(e){return ce(Ge(e.engineState))}function Yr(){return[{from:1,to:2,migrate:ys}]}function Wr(e){let t=[...e?.migrations??Yr()],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 ms=Wr();function Jr(){return ms}function ys(e){let t=qr(e),n=ut(t,{createdAt:$r,runtimeVersion:Ft});if(n.ok===!1)throw new Error(_e(n.errors));return n.snapshot}function zr(e){try{return Ge(e)}catch{return}}function ct(e,t=Jr()){let n=zr(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=dt(r);if(i===void 0){let o=Ht(r);if(o.ok===!1)return o;r=o.snapshot,i=o.snapshot.schemaVersion}if(i>ae)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${i} is newer than ${ae}`,path:"schemaVersion"}]};if(i===ae)return qe(r);for(;i<ae;){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 a;try{a=o.migrate(zr(r))}catch(c){let E=c instanceof Error?c.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${E}`,path:"schemaVersion"}]}}let d=dt(a);if(d!==o.to)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} produced schema ${String(d)}`,path:"schemaVersion"}]};if(o.to===ae){let c=qe(a);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=a;i=o.to}return qe(r)}function kn(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=ct(n,t);if(i.ok===!1)return i;try{return{ok:!0,bundle:ce(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:ce(n)}}catch(i){return{ok:!1,errors:[{code:"invalid-engine-state",detail:i instanceof Error?i.message:"Cart state bundle is invalid"}]}}}function Rn(e,t){let n=Ht(e);return n.ok===!1?n:ct(n.snapshot,t)}var ti=["image","audio","font","spritesheet"],ni=["timeout","cors","not-found","invalid","aborted","resolver"],ze="cyberart:fallback/silent",Xr="Asset preloader has been destroyed",hs=4,gs=new Set(ti),bs=new Set(ni),vs={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"};function ri(e){return typeof e=="string"&&gs.has(e)}function ii(e){return typeof e=="string"&&bs.has(e)}function Kt(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&ii(t.code)&&typeof t.message=="string"}function re(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:vs[e.code]}}function Ve(e,t){return{type:e==="ready"?ve:Ee,kind:"state",payload:t}}function oi(e){if(!e?.aborted)return;let t=new Error("aborted");throw t.name="AbortError",t}function Es(e){return e instanceof Error&&e.name==="AbortError"||typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"}function xn(e){return e?{...e}:void 0}function Se(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=xn(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function lt(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function Ss(e){if(e.state==="ready"){let t={state:"ready",resource:Se(e.resource)};return e.failure&&(t.failure=lt(e.failure)),t}return e.state==="failed"?{state:"failed",failure:lt(e.failure)}:{state:e.state}}function Cs(e){return/^https?:/i.test(e)}function si(e){return e.endsWith("/")?e:`${e}/`}function ai(e,t){let n=si(t);if(/^(https?:|data:|blob:)/i.test(e))return e;let r=/^moltazine:post\/([^#]+)#(.+)$/.exec(e);if(r)return`${n}moltazine/${encodeURIComponent(r[1])}/${r[2]}`;let i=/^world:asset\/(.+)$/.exec(e);if(i)return`${n}world/${i[1]}`;let o=/^library:(.+)$/.exec(e);return o?`${n}library/${o[1]}`:`${n}${e.replace(/^\//,"")}`}function As(e){return{async resolve(t,n){oi(n);let r=e[t.ref];if(!r)throw re({id:t.id,ref:t.ref,code:"not-found",message:`no fixture for ${t.ref}`});if("error"in r)throw re({id:t.id,ref:t.ref,code:r.error,message:r.message});return{id:t.id,ref:t.ref,type:t.type,url:r.url,integrity:r.integrity??t.integrity,cors:r.cors??"omit",provenance:r.provenance??t.provenance}}}}function ws(e){let t=si(e.cdnBase);return{async resolve(n,r){oi(r);let i=e.failures?.[n.ref];if(i){let a=typeof i=="string"?i:i.code,d=typeof i=="string"?void 0:i.message;throw re({id:n.id,ref:n.ref,code:a,message:d})}let o=ai(n.ref,t);return{id:n.id,ref:n.ref,type:n.type,url:o,integrity:n.integrity,cors:Cs(o)?"anonymous":"omit",provenance:n.provenance}}}}function ks(e){if(!e||typeof e!="object")return re({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return re({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 re({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!ri(e.type))return re({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return re({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 re({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function Qr(e){return{id:e.id,ref:ze,type:e.type,url:ze,usedFallback:!0,cors:"omit"}}function Zr(e,t){return Kt(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:Es(t)?re({id:e.id,ref:e.ref,code:"aborted"}):re({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function ei(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw re({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw re({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=Se(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=xn(e.provenance)),n}function In(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,a=new Map,d=new Map,c=new Map,E=new Map,v=new Set,b=!1;function x(p){return p.code==="aborted"||p.code==="timeout"}function I(p,k,R){let K=Zr(p,R);return K.code==="timeout"?K:k.aborted?re({id:p.id,ref:p.ref,code:"aborted"}):K}function M(p,k){let R=E.get(p);R||(R=new Set,E.set(p,R)),R.add(k)}function h(p){if(p?.state==="ready")return`${p.resource.type}\0${p.resource.ref}`}function P(p,k){for(let[R,K]of E)if(R!==k&&K.has(p))return!0;for(let[R,K]of r)if(R!==k&&h(K)===p)return!0;return!1}function G(p,k){let R=new Set(E.get(p)),K=h(k);K&&R.add(K),E.delete(p);for(let Z of R)P(Z,p)||d.delete(Z)}function B(){let p=0,k=0,R=0,K=0,Z={};for(let[J,$]of r)Z[J]=Ss($),$.state==="pending"||$.state==="loading"?p+=1:$.state==="failed"?R+=1:(k+=1,($.resource.usedFallback||$.failure)&&(K+=1));return{total:r.size,pending:p,ready:k,failed:R,fallbacks:K,items:Z,failures:i.map(lt)}}function m(){if(v.size===0)return;let p=B();for(let k of v)k(p)}function g(p){i.push(lt(p))}function l(p){b||!t||!e.dispatch||e.dispatch(p)}function s(p){if(p?.managed&&p.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(p.url)}catch{}}function f(p,k){if(b)return;let R=r.get(p);R?.state==="ready"&&s(R.resource),r.set(p,k),m()}function C(p){if(p.fallback!==void 0)return p.fallback==="silent"?{id:`${p.id}::fallback`,ref:ze,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 H(p,k,R){let K=`${p.type}\0${p.ref}`,Z=d.get(K);if(Z)return k.aborted?Promise.reject(re({id:p.id,ref:p.ref,code:"aborted"})):(M(R,K),Promise.resolve(Se(Z.resource)));if(k.aborted)return Promise.reject(re({id:p.id,ref:p.ref,code:"aborted"}));let J=c.get(K);if(!J){let j=new AbortController,ne={id:p.id,ref:p.ref,type:p.type};p.integrity!==void 0&&(ne.integrity=p.integrity),p.provenance&&(ne.provenance=xn(p.provenance)),J={promise:Promise.resolve().then(()=>e.resolver.resolve(ne,j.signal)).then(Y=>{let X=ei(p,Y);if(j.signal.aborted)throw re({id:p.id,ref:p.ref,code:"aborted"});return d.set(K,{resource:Se(X)}),X}).catch(Y=>{throw Zr(p,Y)}).finally(()=>{c.delete(K)}),controller:j,waiters:0},c.set(K,J)}let $=J;return $.waiters+=1,new Promise((j,ne)=>{let _=!1,Y=(u,S)=>{_||(_=!0,k.removeEventListener("abort",X),$.waiters-=1,S&&$.waiters<=0&&$.controller.abort(),u())},X=()=>{Y(()=>ne(re({id:p.id,ref:p.ref,code:"aborted"})),!0)};if(k.aborted){X();return}k.addEventListener("abort",X,{once:!0}),$.promise.then(u=>{if(!_){if(k.aborted){X();return}M(R,K),Y(()=>j(Se(u)),!1)}},u=>{if(!_){if(k.aborted){X();return}Y(()=>ne(u),!1)}})})}function T(p,k,R){if(k.aborted)return Promise.reject(re({id:p.id,ref:p.ref,code:"aborted"}));if(p.ref===ze)return Promise.resolve(Qr(p));let K=new AbortController,Z=()=>K.abort();k.addEventListener("abort",Z,{once:!0});let J=p.timeoutMs??e.timeoutMs,$,j=!1;return n&&J!==void 0&&J>0&&Number.isFinite(J)&&($=setTimeout(()=>{j=!0,K.abort()},J)),H(p,K.signal,R).then(ne=>{let _=ei(p,ne);return _.id=p.id,_}).catch(ne=>{throw j?re({id:p.id,ref:p.ref,code:"timeout"}):ne}).finally(()=>{$!==void 0&&clearTimeout($),k.removeEventListener("abort",Z)})}async function D(p,k,R,K){try{return{resource:await T(p,k,K)}}catch(Z){let J=I(p,k,Z);if(x(J)||k.aborted||R>=hs)throw J;let $=C(p);if(!$)throw J;if(k.aborted)throw re({id:p.id,ref:p.ref,code:"aborted"});if(p.fallback==="silent"||$.ref===ze)return{resource:Qr(p),failure:J};try{let j=await D($,k,R+1,K);return{resource:{...Se(j.resource),id:p.id,usedFallback:!0},failure:J}}catch(j){let ne=Kt(j)&&!x(j)&&!k.aborted?j:I(p,k,j);throw!x(ne)&&!k.aborted&&g(J),ne}}}async function L(p,k){if(b)throw new Error(Xr);let R=r.get(p.id);if(R?.state==="ready"||R?.state==="failed")return;let K=o.get(p.id);if(K){await K;return}let Z=(async()=>{let J=ks(p);if(J){f(p.id,{state:"failed",failure:J}),g(J),l(Ve("failed",{id:p.id,ref:p.ref,failure:J}));return}f(p.id,{state:"loading"});let $=a.get(p.id)??new AbortController;a.has(p.id)||a.set(p.id,$);try{let j=await D(p,$.signal,k,p.id);if(b)return;if($.signal.aborted){let ne=re({id:p.id,ref:p.ref,code:"aborted"});f(p.id,{state:"failed",failure:ne}),g(ne),l(Ve("failed",{id:p.id,ref:p.ref,failure:ne}));return}if(j.resource.id=p.id,j.failure){f(p.id,{state:"ready",resource:j.resource,failure:j.failure}),g(j.failure),l(Ve("failed",{id:p.id,ref:p.ref,failure:j.failure,resource:Se(j.resource)})),l(Ve("ready",{id:p.id,ref:j.resource.ref,resource:Se(j.resource),failure:j.failure}));return}f(p.id,{state:"ready",resource:j.resource}),l(Ve("ready",{id:p.id,ref:p.ref,resource:Se(j.resource)}))}catch(j){if(b)return;let ne=Kt(j)&&!x(j)&&!$.signal.aborted?{...lt(j),id:p.id}:I(p,$.signal,j);f(p.id,{state:"failed",failure:ne}),g(ne),l(Ve("failed",{id:p.id,ref:p.ref,failure:ne}))}finally{a.get(p.id)===$&&a.delete(p.id)}})();o.set(p.id,Z);try{await Z}finally{o.delete(p.id)}}return{async preload(p){if(b)throw new Error(Xr);let k=Array.isArray(p)?p:[];for(let R of k)R&&typeof R.id=="string"&&R.id.length>0&&(r.has(R.id)||r.set(R.id,{state:"pending"}),a.has(R.id)||a.set(R.id,new AbortController));return m(),await Promise.all(k.map(R=>L(R,0))),B()},get(p){let k=r.get(p);if(k?.state==="ready")return Se(k.resource)},getProgress(){return B()},onProgress(p){return v.add(p),()=>{v.delete(p)}},abort(p){if(!b){if(p!==void 0){a.get(p)?.abort();return}for(let k of a.values())k.abort()}},forget(p){if(b)return;if(p===void 0){for(let R of r.values())R.state==="ready"&&s(R.resource);r.clear(),i.length=0,d.clear(),E.clear(),m();return}let k=r.get(p);k?.state==="ready"&&s(k.resource),G(p,k),r.delete(p);for(let R=i.length-1;R>=0;R--)i[R].id===p&&i.splice(R,1);m()},dispose(){if(!b){b=!0;for(let p of a.values())p.abort();a.clear();for(let p of r.values())p.state==="ready"&&s(p.resource);r.clear(),i.length=0,o.clear();for(let p of c.values())p.controller.abort();d.clear(),c.clear(),E.clear(),v.clear()}}}}var Tn=.25;function Ye(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function Pn(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function Rs(e){return e instanceof Error&&e.message?e.message:String(e)}async function xs(){let{adaptersFor:e}=await Promise.resolve().then(()=>(hn(),Dr)),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 Is(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function Mn(e={}){let t=e.toneStart??xs,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,a=new Map,d=[],c={state:"locked"},E,v=!1,b=!1;function x(m){for(let g of d.slice())g(m)}function I(m,g){let l=i.get(m);if(l)return g&&!l.participantId&&(l.participantId=g),l;let s={id:m,participantId:g,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(m,s),s}function M(m){return v||m.muted?0:Pn(m.gain*m.duckGain)}function h(m){return{id:m.id,participantId:m.participantId,gain:m.gain,muted:m.muted,duckGain:m.duckGain,priority:m.priority,effectiveGain:M(m)}}function P(){let m=-1/0;for(let g of a.values())g.priority>m&&(m=g.priority);for(let g of i.values())if(!g.manualDuck){if(m===-1/0){g.duckGain=1;continue}g.duckGain=g.priority<m?Tn:1}}async function G(){if(b||c.state==="unlocked")return Ye(c);if(E)return await E,Ye(c);c={state:"unlocking"},E=(async()=>{try{await t(),c={state:"unlocked"}}catch(m){c={state:"failed",error:Rs(m)}}})();try{await E}finally{E=void 0}return Ye(c)}return{unlock:G,status(){return Ye(c)},authorize(m){b||typeof m!="string"||m.length===0||r.add(m)},revoke(m){b||r.delete(m)},isAuthorized(m){return m===void 0||m.length===0?r.size===0:r.size===0?!0:r.has(m)},setChannelGain(m,g,l){b||typeof m!="string"||m.length===0||(I(m,l).gain=Pn(g))},setPriority(m,g,l){b||typeof m!="string"||m.length===0||(I(m,l).priority=Number.isFinite(g)?g:0,P())},mute(){b||(v=!0,x({type:"mute"}))},unmute(){b||(v=!1,x({type:"mute"}))},muteChannel(m,g){b||typeof m!="string"||m.length===0||(I(m,g).muted=!0,x({type:"mute"}))},unmuteChannel(m){if(b)return;let g=i.get(m);g&&(g.muted=!1,x({type:"mute"}))},duck(m,g=Tn){if(b||typeof m!="string"||m.length===0)return;let l=I(m);l.manualDuck=!0,l.duckGain=Pn(g)},unduck(m){if(b)return;let g=i.get(m);g&&(g.manualDuck=!1,P())},effectiveGain(m){let g=i.get(m);return g?M(g):v?0:1},handleHostEvent(m){if(b||!m||typeof m!="object")return;let g=Is(m.payload);if(g){if(m.type===ve){o.set(g,"ready"),x({type:"asset",id:g,status:"ready"});return}m.type===Ee&&(o.set(g,"failed"),x({type:"asset",id:g,status:"failed"}))}},assetStatus(m){return o.get(m)},noteCueStarted(m){if(b)return;a.set(m.idempotencyKey,{idempotencyKey:m.idempotencyKey,channelId:m.channelId,participantId:m.participantId,priority:m.priority});let g=I(m.channelId,m.participantId);m.priority>g.priority&&(g.priority=m.priority),P()},noteCueEnded(m){a.delete(m)&&P()},teardown(m){if(!b&&!(typeof m!="string"||m.length===0)){r.delete(m);for(let[g,l]of[...a.entries()])l.participantId===m&&a.delete(g);for(let[g,l]of[...i.entries()])l.participantId===m&&i.delete(g);P(),x({type:"teardown",participantId:m})}},onNotice(m){return d.push(m),()=>{let g=d.indexOf(m);g>=0&&d.splice(g,1)}},inspect(){let m=[...o.entries()].sort(([l],[s])=>l<s?-1:l>s?1:0),g={};for(let[l,s]of m)g[l]=s;return{status:Ye(c),reducedSensory:n,muted:v,authorized:[...r].sort(),channels:[...i.values()].sort((l,s)=>l.id<s.id?-1:l.id>s.id?1:0).map(h),assets:g}},destroy(){b||(b=!0,a.clear(),i.clear(),r.clear(),x({type:"destroy"}),d.length=0)},get reducedSensory(){return n},get muted(){return v}}}function di(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function Ln(e){br();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:a,audioBroker:d,audioParticipantId:c,kind:E="render"}=e,v=n===void 0?void 0:Pt(n,o?"deterministic":"live"),b=new Ue;if(d&&(di(b,d),c&&d.authorize(c)),a&&typeof a.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let x=a?In({resolver:a.resolver,timeoutMs:a.timeoutMs,emitEvents:a.emitEvents??!o,wallClockTimeout:!o,dispatch:f=>b.dispatch(f)}):void 0,I=!1,M=null,h,P=!1,G=t.clientWidth||window.innerWidth,B=t.clientHeight||window.innerHeight,m=new Vt(30,!1,G,B,!1,void 0,{container:t,seed:v,captureKeyboard:r,hostChannel:b,audio:i,deterministic:o,kind:E}),g=()=>{let f=t.clientWidth||window.innerWidth,C=t.clientHeight||window.innerHeight;return f===m.containerWidth&&C===m.containerHeight?!1:(m.containerWidth=f,m.containerHeight=C,!0)},l=null;return!m.isDeterministic&&typeof ResizeObserver<"u"&&(l=new ResizeObserver(()=>{if(I||!M)return;g()&&P&&m.reinit()}),l.observe(t)),m.onError=(f,C)=>{h?.(f,C)},{get tokenData(){return m.tokenData},get hostChannel(){return b},get assets(){return x},get audioBroker(){return d},get kind(){return E},get onError(){return h},set onError(f){h=f},mount(f,C={}){if(I)throw new Error("createRuntime: cannot mount on a destroyed runtime");M?.destroy(),P=!1,m.customState=C.initialState,m.setGameManager(C.gameManager);let H=C.onEvent?b.onEvent(C.onEvent):()=>{};if(d&&c&&d.authorize(c),!m.prepareCart(f))throw H(),new Error("createRuntime: failed to prepare cart");let T=!1,D={async start(){if(!T){if(g()&&m.isPrepared&&(m.init(),m.unloadCart(),!m.prepareCart(f)))throw new Error("createRuntime: failed to prepare cart");m.needsAudio&&(d?await d.unlock():await m.unlockAudio(),T)||(P=!0,m.beginPlayback())}},pause(){T||(m.paused=!0)},resume(){T||(m.paused=!1)},dispatch(L){T||b.dispatch(L)},snapshot(){if(T)return{seed:"",pngDataUrl:""};let L=m.canvas;return{seed:m.tokenData.hash,metadata:f.metadata,pngDataUrl:L?L.toDataURL("image/png"):""}},destroy(){T||(T=!0,P=!1,H(),b.clearInbound(),m.unloadCart(),M===D&&(M=null))},reload(){if(!T){if(!P){if(m.isPrepared&&(m.unloadCart(),!m.prepareCart(f)))throw new Error("createRuntime: failed to prepare cart");return}m.reloadCart()}},reinit(L){if(!T){if(!P){g();return}m.reinit(L)}},getCartState(){return m.animation?.cartState},exportState(){return T?Promise.reject(new Error("Cart handle has been destroyed")):m.exportState()},exportStateJSON(){return T?Promise.reject(new Error("Cart handle has been destroyed")):m.exportStateJSON()},async importState(L,p){if(T)throw new Error("Cart handle has been destroyed");let k=L,R=L;if(typeof L=="string")try{R=JSON.parse(L)}catch{await m.importState(L,p);return}if(R&&typeof R=="object"&&typeof R.schemaVersion=="number"){let K=kn(R);if(K.ok===!1)throw new oe(_e(K.errors));await m.importState(K.bundle,p);return}await m.importState(typeof k=="string"?k:R,p)},async exportSnapshot(L){if(T)throw new Error("Cart handle has been destroyed");let p=await m.exportState(),k=m.getClock(),R=ut(p,{...L,rng:m.getRandomState(),clock:{framesElapsed:p.framesElapsed,elapsedSinceStart:p.elapsedSinceStart,now:k.now,frameRate:k.frameRate}});if(R.ok===!1)throw new oe(_e(R.errors));return R.snapshot},async exportSnapshotJSON(L){return JSON.stringify(await D.exportSnapshot(L))},async importSnapshot(L,p){if(T)throw new Error("Cart handle has been destroyed");let k=Rn(L);if(k.ok===!1)throw new oe(_e(k.errors));await m.importState(k.snapshot.engineState,p)},peekExportedFramebuffer(){return T?null:m.peekExportedFramebuffer()},peekSeed(){if(!T)return m.peekSeed()},isGenerative(){return T?!1:m.isGenerative()},async step(L=1){if(T)throw new Error("Cart handle has been destroyed");await m.step(L)},async advance(L){if(T)throw new Error("Cart handle has been destroyed");await m.advance(L)},schedule(L){T||m.schedule(L)},getClock(){if(T)throw new Error("Cart handle has been destroyed");return m.getClock()},getRandomState(){if(T)throw new Error("Cart handle has been destroyed");return m.getRandomState()},getReplayMetadata(){return T?Promise.reject(new Error("Cart handle has been destroyed")):m.getReplayMetadata()},get canvas(){return m.canvas},get paused(){return m.paused},set paused(L){T||(m.paused=L)},get tokenData(){return m.tokenData},get isPrepared(){return m.isPrepared},get isLoopRunning(){return m.isLoopRunning},get needsAudio(){return m.needsAudio},get audioLibraries(){return m.audioLibraries}};return M=D,D},async unlockAudio(){if(d){m.needsAudio&&await d.unlock();return}await m.unlockAudio()},destroy(){I||(I=!0,M?.destroy(),M=null,d&&c&&d.teardown(c),l?.disconnect(),l=null,x?.dispose(),b.close(),m.destroy())}}}var We="cyberart.state.save",Je="cyberart.state.load";function Ps(e,t,n={}){let r=n.persist,i=r?{persist:r}:void 0,o=()=>{t.emit({type:We,payload:i})},a=()=>{t.emit({type:Je,payload:i})};e.registerAction("w",o,!0),e.registerAction("W",o,!0),e.registerAction("e",a,!0),e.registerAction("E",a,!0)}function ui(e){if(e.type!==We&&e.type!==Je)return;let t=e.payload?.persist;return t==="localStorage"?t:void 0}var Ts="cyberart-io",Ms=1,Te="framebuffers";function Dn(e,t){return`${e||"unknown"}:${t?Ie(t):"none"}`}function li(e,t){return`${e||"unknown"}:${t||"none"}`}function _n(){return new Promise((e,t)=>{let n=indexedDB.open(Ts,Ms);n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains(Te)||r.createObjectStore(Te)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error??new Error("indexedDB open failed"))})}function Ls(e){let t=e.data;return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function ci(e,t){return new Promise((n,r)=>{let o=e.transaction(Te,"readonly").objectStore(Te).get(t);o.onsuccess=()=>n(o.result),o.onerror=()=>r(o.error??new Error("indexedDB read failed"))})}async function pi(e,t,n){if(typeof indexedDB>"u")return;let r=await _n(),i={width:n.width,height:n.height,data:Ls(n)};try{await new Promise((o,a)=>{let d=r.transaction(Te,"readwrite");d.oncomplete=()=>o(),d.onerror=()=>a(d.error??new Error("indexedDB write failed")),d.objectStore(Te).put(i,Dn(e,t))})}finally{r.close()}}async function fi(e,t){if(typeof indexedDB>"u")return null;let n=await _n();try{let r=Dn(e,t),i=li(e,t),o=await ci(n,r)??(r===i?void 0:await ci(n,i));if(!o||!o.data||o.width<1||o.height<1)return null;let a=new ImageData(o.width,o.height);return a.data.set(new Uint8ClampedArray(o.data)),a}finally{n.close()}}async function mi(e,t){if(typeof indexedDB>"u")return;let n=await _n();try{await new Promise((r,i)=>{let o=n.transaction(Te,"readwrite");o.oncomplete=()=>r(),o.onerror=()=>i(o.error??new Error("indexedDB delete failed"));let a=o.objectStore(Te);a.delete(Dn(e,t)),a.delete(li(e,t))})}finally{n.close()}}var Vn="cyberart.state.",Ds="Saved state",_s="Loaded state",yi="Failed to save state",Vs="Failed to load state",Os="No saved state";function Me(e,t){let n=e||"unknown";return t?Vn+n+"."+Ie(t):Vn+n}function Ns(e,t,n){return r=>{if(ui(r)==="localStorage"){if(r.type===We){Fs(e,t,n);return}r.type===Je&&Hs(e,t,n)}}}function gi(e){return!!e&&typeof e=="object"&&typeof e.schemaVersion=="number"}function hi(e){if(gi(e)){let t=ct(e);if(t.ok===!1)return null;try{return ce(t.snapshot.engineState)}catch{return null}}if(je(e))try{return ce(e)}catch{return null}return null}function Xe(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;if(typeof n.savedAt=="number"&&n.bundle&&typeof n.bundle=="object"){let o=hi(n.bundle);return o?{savedAt:n.savedAt,bundle:o}:null}let r=hi(t);if(r)return{savedAt:0,bundle:r};if(gi(t))return null;let i=t;return typeof i.seed=="string"&&typeof i.version=="number"?{savedAt:0,bundle:i}:null}catch{return null}}async function Fs(e,t,n){let r=e();if(r)try{let i=await r.exportState(),o=i.cartId??t?.();if(!o){console.error("Refusing to persist cart state without cartId"),n?.(yi,"transient");return}i.generative===!0?(qs(o),Bt(Me(o,i.seed),i)):Bt(Me(o),i);let a=r.peekExportedFramebuffer?.();if(a)try{await pi(o,i.seed,a)}catch(d){console.warn("Failed to save cart framebuffer",d)}n?.(Ds,"transient")}catch(i){console.error("Failed to save cart state",i),n?.(yi,"transient")}}async function Hs(e,t,n){let r=e();if(!r)return;let i=t?.(),o=r.peekSeed?.(),a=r.isGenerative?.()===!0,d=Gs(i,a,o);if(!d){console.warn("No saved cart state for",i||"unknown",a&&o?`(hash ${o})`:""),n?.(Os,"transient");return}try{let c=await fi(i,d.bundle.seed).catch(()=>null);await r.importState(d.bundle,{framebuffer:c}),n?.(_s,"transient")}catch(c){console.error("Failed to load cart state",c),n?.(Vs,"transient")}}function Bt(e,t){let n=JSON.stringify({savedAt:Date.now(),bundle:t});Ks(e,n)}function Ks(e,t){for(;;)try{localStorage.setItem(e,t);return}catch(n){if(!Bs(n)||!$s(e))throw n}}function Bs(e){if(!e||typeof e!="object")return!1;let t=e.name,n=e.code;return t==="QuotaExceededError"||t==="NS_ERROR_DOM_QUOTA_REACHED"||n===22||n===1014}function $s(e){let t=null,n=1/0;for(let o of Us()){if(o===e)continue;let a=localStorage.getItem(o);if(!a)continue;let c=Xe(a)?.savedAt??0;c<n&&(n=c,t=o)}if(!t)return!1;let r=localStorage.getItem(t),i=r?Xe(r):null;return localStorage.removeItem(t),i?.bundle&&mi(i.bundle.cartId,i.bundle.seed).catch(()=>{}),!0}function Us(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(Vn)&&e.push(n)}return e}function Gs(e,t,n){if(t&&n){let i=localStorage.getItem(Me(e,n));if(i)return Xe(i);let o=localStorage.getItem(Me(e));if(!o)return null;let a=Xe(o);if(!a||!js(a.bundle,n))return null;try{Bt(Me(e,n),a.bundle)}catch{}return a}let r=localStorage.getItem(Me(e));return r?Xe(r):null}function js(e,t){return typeof e.seed=="string"&&Ie(e.seed)===Ie(t)}function qs(e){let t=Me(e),n=localStorage.getItem(t);if(!n)return;let r=Xe(n);if(r&&typeof r.bundle.seed=="string"){let i=Me(e,r.bundle.seed);if(!localStorage.getItem(i))try{Bt(i,r.bundle)}catch{return}}localStorage.removeItem(t)}var pt=1,Ce="cyberart.diagnostic.rejected",Ut=8,zs=new Set(["intent","state","diagnostic"]),Ys=new Set([We,Je]);function $t(e){return typeof e=="string"&&zs.has(e)}function bi(e){if(e.kind!==void 0)return $t(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(Ys.has(e.type))return"intent";for(let t of e.type.split("."))if($t(t))return t}}function vi(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 Le(e,t){for(let n of e)if(vi(n,t))return!0;return!1}function Qe(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 Gt(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!==pt)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=bi(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=Qe(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,a=typeof e.causationId=="string"&&e.causationId.length>0?e.causationId:t.causationId,d=typeof e.target=="string"&&e.target.length>0?e.target:void 0,c=t.maxHops??Ut,E=t.parentHops===void 0?c:Math.max(0,t.parentHops-1),v=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,b={schemaVersion:pt,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:E};return d&&(b.target=d),a&&(b.causationId=a),v&&(b.idempotencyKey=v),r.value!==void 0&&(b.payload=r.value),{ok:!0,envelope:b}}var Ws=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),Js=8,Xs=8,Qs=16,Zs=256,ea=256,ta=["*.intent.*"];function On(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??Js,i=e.maxCausationDepth??Xs,o=e.maxHops??Ut,a=e.maxCorrelationPerTurn??Qs,d=e.maxIndex??Zs,c=e.maxDecisions??ea,E=e.maxPerWindow,v=e.windowMs??1e3,b=e.now??Date.now,x=0,I=e.createId??(()=>`evt-${++x}`),M=new Map,h=[],P=[],G=new Map,B=new Map,m=new Map,g=[],l=0,s=0,f=0;function C(y){try{return JSON.parse(JSON.stringify(y))}catch{return y}}function H(y){for(g.push(y);g.length>c;)g.shift();for(let w of P)try{w(C(y))}catch{}}function T(y,w){let V={outcome:w.outcome,source:w.source,type:y.type,kind:y.kind,envelopeId:y.id,deliveredTo:w.deliveredTo,hops:y.hops,seq:y.seq,correlationId:y.correlationId,schemaVersion:y.schemaVersion,turn:f,time:b()};return w.reason&&(V.reason=w.reason),w.detail&&(V.detail=w.detail),w.priorEnvelopeId&&(V.priorEnvelopeId=w.priorEnvelopeId),y.target&&(V.target=y.target),y.causationId&&(V.causationId=y.causationId),y.idempotencyKey&&(V.idempotencyKey=y.idempotencyKey),y.payload!==void 0&&(V.payload=C(y.payload)),V}let D=[],L=!1;function p(y,w,V){for(y.set(w,V);y.size>d;){let N=y.keys().next().value;if(N===void 0)break;y.delete(N)}}function k(y){p(G,y.id,{type:y.type,source:y.source,causationId:y.causationId,hops:y.hops,correlationId:y.correlationId,idempotencyKey:y.idempotencyKey})}function R(y,w){w&&(y.correlationId||(y.correlationId=w.correlationId),y.causationId||(y.causationId=w.id),!y.idempotencyKey&&w.idempotencyKey&&(y.idempotencyKey=`${w.idempotencyKey}::${y.type}`))}function K(y,w){if(y){let V=G.get(y);return V?V.hops:o}return w}function Z(y,w){return`${y}\0${w}`}function J(y,w){y.idempotencyKey&&p(m,Z(y.source,y.idempotencyKey),w)}function $(y,w){if(w)return m.get(Z(y,w))}function j(y){return $(y.source,y.idempotencyKey)}function ne(y){return y.seq+=1,y.seq}function _(y,w){if(!(typeof w.causationId=="string"&&w.causationId.length>0))return y.lastDelivered}function Y(y){let w=new Set,V=new Set([`${y.type}\0${y.source}`]),N=y.causationId,F=0;for(;N;){if(F+=1,F>i||w.has(N))return!0;w.add(N);let W=G.get(N);if(!W)break;let ye=`${W.type}\0${W.source}`;if(V.has(ye))return!0;V.add(ye),N=W.causationId}return!1}function X(y){let w=(B.get(y)??0)+1;return B.set(y,w),w}function u(y,w){E!==void 0&&(y.emitTimestamps=y.emitTimestamps.filter(V=>w-V<v))}function S(y,w){return(w.kind==="state"||w.kind==="diagnostic")&&!y.authoritative?!1:Le(y.emit,w.type)}function A(y){for(let w of h)if(Le(w.patterns,y.type))try{w.listener(y)}catch{}}function O(y){let w=[];if(y.target){let V=M.get(y.target);return!V||!Le(V.subscribe,y.type)||(V.channel.dispatch(y),V.lastDelivered={id:y.id,hops:y.hops,correlationId:y.correlationId,idempotencyKey:y.idempotencyKey},w.push(V.id)),w}for(let V of M.values())Le(V.subscribe,y.type)&&(V.channel.dispatch(y),V.lastDelivered={id:y.id,hops:y.hops,correlationId:y.correlationId,idempotencyKey:y.idempotencyKey},w.push(V.id));return w}function U(y,w,V,N,F,W,ye){let be={reason:N,eventType:w,source:V};F&&(be.detail=F),s+=1;let rt=I(),Ne={schemaVersion:pt,type:Ce,kind:"diagnostic",source:n,id:rt,correlationId:W??rt,seq:s,hops:0,payload:be};ye&&(Ne.causationId=ye),k(Ne);let hr=M.get(y);hr&&hr.channel.dispatch(Ne),A(Ne)}function Q(y,w,V,N,F){if(U(y,F?.type??(typeof w.type=="string"?w.type:""),F?.source??y,V,N,F?.correlationId,F?.id),F?.idempotencyKey&&!Ws.has(V)&&J(F,{status:"rejected"}),F)H(T(F,{outcome:"rejected",reason:V,detail:N,source:y,deliveredTo:[]}));else{let W={outcome:"rejected",reason:V,source:y,type:typeof w.type=="string"?w.type:"",deliveredTo:[],turn:f,time:b()};N&&(W.detail=N),typeof w.idempotencyKey=="string"&&(W.idempotencyKey=w.idempotencyKey),H(W)}}function ee(y,w){k(y),J(y,{status:"accepted",envelope:y}),X(y.correlationId),A(y);let V=O(y);H(T(y,{outcome:"accepted",source:w,deliveredTo:V}))}function z(y,w,V,N){let F=N?.type??(typeof w.type=="string"?w.type:""),W={outcome:"duplicate",reason:"duplicate",detail:V.status==="accepted"?"idempotent accepted":"idempotent rejected",source:y,type:F,deliveredTo:[],turn:f,time:b()};N?(W.kind=N.kind,W.envelopeId=N.id,W.hops=N.hops,W.seq=N.seq,W.correlationId=N.correlationId,W.schemaVersion=N.schemaVersion,N.target&&(W.target=N.target),N.causationId&&(W.causationId=N.causationId),N.idempotencyKey&&(W.idempotencyKey=N.idempotencyKey),N.payload!==void 0&&(W.payload=C(N.payload))):typeof w.idempotencyKey=="string"&&(W.idempotencyKey=w.idempotencyKey),V.status==="accepted"&&(W.priorEnvelopeId=V.envelope.id,W.envelopeId||(W.envelopeId=V.envelope.id)),H(W)}function xe(y,w,V,N){if(!V.ok){Q(y,w,"malformed",V.detail);return}let F=V.envelope,W=j(F);if(W)return z(y,w,W,F),W.status==="accepted"?W.envelope:void 0;if(F.hops<1){Q(y,w,"hop-limit","no hops remaining",F);return}if(F.target&&F.target!==t){let ye=M.get(F.target);if(!ye){Q(y,w,"unknown-target",`unknown target "${F.target}"`,F);return}if(!Le(ye.subscribe,F.type)){Q(y,w,"not-subscribed",`target "${F.target}" does not subscribe to ${F.type}`,F);return}}if(N){if(!S(N,F)){Q(y,w,"unauthorized","source may not emit this event",F);return}if(N.emitsThisTurn+=1,N.emitsThisTurn>r){Q(y,w,"rate-limited","maxPerTurn exceeded",F);return}if(E!==void 0){let be=b();if(u(N,be),N.emitTimestamps.push(be),N.emitTimestamps.length>E){Q(y,w,"rate-limited","maxPerWindow exceeded",F);return}}if(Y(F)){Q(y,w,"loop-detected","causation chain cycle or depth exceeded",F);return}if((B.get(F.correlationId)??0)+1>a){Q(y,w,"storm-detected","correlationId storm",F);return}if(e.validate){let be;try{be=e.validate(F)}catch(rt){let Ne=rt instanceof Error?rt.message:"validate threw";Q(y,w,"host-rejected",Ne,F);return}if(be!==!0){Q(y,w,"host-rejected",be.detail,F);return}}}else{if(Y(F)){Q(y,w,"loop-detected","causation chain cycle or depth exceeded",F);return}if((B.get(F.correlationId)??0)+1>a){Q(y,w,"storm-detected","correlationId storm",F);return}}return ee(F,y),F}function Et(y,w){let V=M.get(y);if(!V)return;let N={...w},F=_(V,N);R(N,F);let W=$(V.id,N.idempotencyKey);if(W){z(y,N,W);return}let ye=ne(V),be=Gt(N,{source:V.id,createId:I,seq:ye,causationId:F?.id,maxHops:o,parentHops:K(N.causationId??F?.id,F?.hops)});xe(y,N,be,V)}function St(y,w){let V=w?.cause,N={...y};R(N,V);let F=$(t,N.idempotencyKey);if(F)return z(t,N,F),F.status==="accepted"?F.envelope:void 0;l+=1;let W=Gt(N,{source:t,createId:I,seq:l,causationId:N.causationId,maxHops:o,parentHops:K(N.causationId,V?.hops)});return xe(t,N,W,void 0)}function Do(){if(!L){L=!0;try{for(;D.length>0;){let y=D.shift();y&&(y.kind==="cart"?Et(y.participantId,y.event):y.result=St(y.event,y.extras))}}finally{L=!1}}}function yr(y){D.push(y),Do()}return{attach(y,w,V={}){if(y===t||y===n)throw new Error(`createEventRouter: "${y}" is a reserved participant id`);for(let W of M.values())if(W.channel===w&&W.id!==y)throw new Error(`createEventRouter: channel already attached as "${W.id}"`);M.get(y)?.unsubscribe();let F={id:y,channel:w,emit:V.emit??ta,subscribe:V.subscribe??[],authoritative:V.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};F.unsubscribe=w.onEvent(W=>{yr({kind:"cart",participantId:y,event:W})}),M.set(y,F)},detach(y){let w=M.get(y);w&&(w.unsubscribe(),M.delete(y))},publish(y,w){let V={kind:"publish",event:y,extras:w};return yr(V),V.result},subscribe(y,w){let V={patterns:y,listener:w};return h.push(V),()=>{let N=h.indexOf(V);N>=0&&h.splice(N,1)}},subscribeDecision(y){return P.push(y),()=>{let w=P.indexOf(y);w>=0&&P.splice(w,1)}},inspectParticipants(){return[...M.values()].map(y=>({id:y.id,emit:y.emit.slice(),subscribe:y.subscribe.slice(),authoritative:y.authoritative}))},inspectDecisions(){return g.map(y=>C(y))},turn(){f+=1,B.clear();for(let y of M.values())y.emitsThisTurn=0,y.lastDelivered=void 0,E!==void 0&&u(y,b())}}}var na=new Set(["string","number","boolean","object","array"]);function de(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Ei(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if($t(t))return t}}function Si(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function Nn(e){let t=[];if(!e||typeof e!="object")return[de("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(de("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(de("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(de("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!na.has(r.type))&&t.push(de("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function ra(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 ia(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])=>de("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[de("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(de("missing-field",`payload is missing required field "${i}"`,i));continue}let a=ra(n[i]);a!==o.type&&r.push(de("field-type",`payload.${i} expected ${o.type}, got ${a}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function oa(e,t,n){let r=Si(e);return{type:e,kind:t,payloadSchema:{version:n.version,fields:{...n.fields}},emitPattern:r,subscribePattern:r,toManifest(){let i={};for(let[o,a]of Object.entries(this.payloadSchema.fields))i[o]={type:a.type,optional:a.optional===!0};return{type:this.type,kind:this.kind,version:this.payloadSchema.version,fields:i,emitPattern:this.emitPattern,subscribePattern:this.subscribePattern}},validatePayload(i){return ia(this.payloadSchema,i)}}}function Fn(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(de("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(de("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=Ei(t);i?i!==e&&r.push(de("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(de("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(...Nn(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:oa(t,e,n)}}function sa(e,t){return Fn("intent",e,t)}function aa(e,t){return Fn("state",e,t)}function da(e,t){return Fn("diagnostic",e,t)}function ua(e,t){let n=Nn(e),r=Nn(t);if(n.length>0||r.length>0||t.version<e.version)return"breaking";let i=Object.keys(e.fields),o=Object.keys(t.fields),a=new Set(i),d=new Set(o);for(let v of i){if(!d.has(v))return"breaking";let b=e.fields[v],x=t.fields[v];if(b.type!==x.type)return"breaking";let I=b.optional!==!0,M=x.optional===!0;if(I&&M||!I&&x.optional!==!0&&b.optional===!0)return"breaking"}let c=!1;for(let v of o)if(!a.has(v)){if(t.fields[v].optional!==!0)return"breaking";c=!0}let E=i.length===o.length&&i.every(v=>t.fields[v].type===e.fields[v].type&&t.fields[v].optional===!0==(e.fields[v].optional===!0));return E&&t.version===e.version?"identical":t.version>e.version&&(c||E)?"backward-compatible":t.version===e.version&&c?"breaking":E?"identical":"breaking"}function ca(e,t){let n=[],r=[],i=new Set,o=new Set;for(let a of e)(t==="authoritative"||a.kind==="intent")&&!i.has(a.emitPattern)&&(i.add(a.emitPattern),n.push(a.emitPattern)),a.kind!=="intent"&&!o.has(a.subscribePattern)&&(o.add(a.subscribePattern),r.push(a.subscribePattern));return{emit:n,subscribe:r,authoritative:t==="authoritative"}}function la(e,t){let n=e.emit??["*.intent.*"],r=e.authoritative===!0,i=[];for(let o of t)Le(n,o.type)&&(o.kind==="state"||o.kind==="diagnostic")&&!r&&i.push(de("unauthorized-emit",`emit pattern allows ${o.kind} "${o.type}" but attach is not authoritative`,o.type));return i.length>0?{ok:!1,errors:i}:{ok:!0}}function pa(e){let t=new Map;for(let i of e)t.set(i.type,i);let n=i=>{let o=t.get(i.type);return o?o.kind!==i.kind?{ok:!1,errors:[de("kind-mismatch",`envelope kind "${i.kind}" does not match contract "${o.kind}"`,i.type)]}:o.validatePayload(i.payload):{ok:!1,errors:[de("unknown-type",`no contract registered for "${i.type}"`,i.type)]}};return{get(i){return t.get(i)},manifest(){return[...t.values()].sort((i,o)=>i.type.localeCompare(o.type)).map(i=>i.toManifest())},validateEnvelope:n,asRouterValidate:i=>{let o=n(i);return o.ok?!0:{reason:"host-rejected",detail:o.errors.map(a=>a.detail).join("; ")}}}}var Ze=1,Kn="presentation.state.model",Ai="presentation.intent.unsupported",wi=["loading","ready","error","unsupported"],fa=["presentation.state.*",Ce],ma="Presentation adapter has been destroyed",ki="Presentation adapter: model is invalid or not JSON-serializable",ya=new Set(wi);function Ri(e){return typeof e=="string"&&ya.has(e)}function Bn(e){if(e===null||typeof e!="object")return!1;let t=e;return!(t.contractVersion!==Ze||!Ri(t.phase)||t.reason!==void 0&&typeof t.reason!="string"||t.view!==void 0&&(t.view===null||typeof t.view!="object"))}function Hn(e,t){let n={type:Kn,kind:"state",payload:e};return t?.correlationId&&(n.correlationId=t.correlationId),t?.causationId&&(n.causationId=t.causationId),t?.idempotencyKey&&(n.idempotencyKey=t.idempotencyKey),n}function $n(){return{contractVersion:Ze,phase:"loading"}}function Un(e){return{contractVersion:Ze,phase:"unsupported",reason:e}}function Gn(e){let t=Qe(e);return t.ok?Bn(t.value)?{ok:!0,model:t.value}:t.value!==null&&typeof t.value=="object"&&"contractVersion"in t.value&&t.value.contractVersion!==Ze?{ok:!1,reason:"unknown-contract-version",contractVersion:t.value.contractVersion}:{ok:!1,reason:"invalid-model"}:{ok:!1,reason:"model-not-serializable"}}function jt(e){let t=Gn(e);if(!t.ok)throw new Error(ki);return t.model}function ha(e){let t=Qe(e);return t.ok&&Bn(t.value)?t.value:Un("model-not-serializable")}function ga(e,t){if(e.type!==Kn)return{model:t};let n=Gn(e.payload);return n.ok?{model:n.model}:{model:Un(n.reason),rejected:{reason:n.reason,contractVersion:n.contractVersion}}}function ba(e){if(e===null||typeof e!="object"||!("regions"in e))return[];let t=e.regions;return Array.isArray(t)?t:[]}function va(e,t,n){return e>=n.x&&e<n.x+n.width&&t>=n.y&&t<n.y+n.height}function Ea(e,t){let n=t.intent;if(!n||typeof n.type!="string"||n.type.length===0)return;let r={type:n.type,kind:"intent"};if(n.payload!==void 0){let i=Qe(n.payload);if(!i.ok)return;r.payload=i.value}n.target&&(r.target=n.target),n.correlationId&&(r.correlationId=n.correlationId),n.idempotencyKey&&(r.idempotencyKey=n.idempotencyKey),e.emit(r)}function xi(e,t,n){let r={reason:t};if(n!==void 0){let i=Qe(n);i.ok&&(r.contractVersion=i.value)}e.emit({type:Ai,kind:"intent",payload:r})}function Ci(e,t,n){let r=t;for(let i of e){let o=ga(i,r);o.rejected&&n&&xi(n,o.rejected.reason,o.rejected.contractVersion),r=o.model}return r}function Ii(){return{metadata:{id:"cyberart.presentation.reference",name:"Reference presentation",frameRate:30},getDefaultState:(e,t,n,r,i,o,a,d,c)=>{let E=i?.model;if(E===void 0)return{model:$n()};let v=Gn(E);return v.ok?{model:v.model}:(c&&xi(c,v.reason,v.contractVersion),{model:Un(v.reason)})},update:(e,t,n,r,i,o,a,d,c,E,v)=>{let b=Ci(v?.consume()??[],i.model,v);for(;a?.hasClick();){let x=a.consumeClick();if(!(!x||b.phase!=="ready"||!v)){for(let I of ba(b.view))if(va(x.x,x.y,I)){Ea(v,I);break}}}return v&&(b=Ci(v.consume(),b,v)),b===i.model?i:{...i,model:b}},render:(e,t,n,r,i,o)=>{let a=i.model.view?.background;o.fillStyle=a??"#111",o.fillRect(0,0,r.width,r.height)}}}function Pi(e,t={}){let n=e,r=t.model?jt(t.model):$n(),i=!1,o=t.present??t.model!==void 0,a=()=>{if(i)throw new Error(ma)},d=c=>{a(),r=jt(c),n.dispatch(Hn(r))};return o&&n.dispatch(Hn(r)),{version:Ze,get target(){return n},get model(){return ha(r)},get phase(){return r.phase},get paused(){return n.paused===!0},present:d,async start(){return a(),n.start()},pause(){a(),n.pause()},resume(){a(),n.resume()},retarget(c){a(),n=c},destroy(){i||(i=!0,n.destroy())}}}function Sa(e,t={}){let n=t.model?jt(t.model):t.initialState?.model!==void 0?jt(t.initialState.model):$n(),r=t.cart??Ii(),i=e.mount(r,{initialState:{...t.initialState,model:n},onEvent:t.onEvent});return Pi(i,{model:n,present:!1})}var we="cue.started",De="cue.completed",ke="cue.cancelled",Ae="cue.replaced",Ca=[we,De,ke,Ae];function Aa(e){return e===we||e===De||e===ke||e===Ae}function Mi(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function Ti(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function qt(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 jn(e){return e.startFrame+e.delayFrames}function wa(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 a=0;if(e.repeat)if("forever"in e.repeat&&e.repeat.forever)a="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"};a=Math.floor(e.repeat.count)}else return{ok:!1,reason:"invalid",detail:"unsupported repeat"};let d=e.reducedMotion??"complete";return d!=="skip"&&d!=="complete"&&(typeof d!="object"||typeof d.durationFrames!="number"||!Number.isFinite(d.durationFrames)||d.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:a,repeatIndex:0,reducedMotion:d,onDuplicate:o,phase:"scheduled",progress:0}}function ka(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 et(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(h){i.push(h)}function a(h,P){let G=jn(h)-jn(P);return G!==0?G:h.name<P.name?-1:h.name>P.name?1:h.idempotencyKey<P.idempotencyKey?-1:h.idempotencyKey>P.idempotencyKey?1:0}function d(h,P){o({type:P,atFrame:n,name:h.name,idempotencyKey:h.idempotencyKey,progress:h.progress})}function c(h){if(h.phase="completed",h.progress=1,d(h,De),h.repeatRemaining==="forever"||h.repeatRemaining>0){if(typeof h.repeatRemaining=="number"&&(h.repeatRemaining-=1),h.repeatIndex+=1,h.phase="scheduled",h.progress=0,h.startFrame=n,h.delayFrames=0,h.durationFrames===0){r.delete(h.idempotencyKey);return}h.phase="active",d(h,we)}else r.delete(h.idempotencyKey)}function E(h){if(h.phase==="cancelled"||h.phase==="completed")return;let P=jn(h);if(!(n<P)){if(h.phase==="scheduled"&&(h.phase="active",h.progress=h.durationFrames===0?1:0,d(h,we),h.durationFrames===0)){c(h);return}if(h.phase==="active"){let G=n-P;G>=h.durationFrames?(h.progress=1,c(h)):h.progress=Mi(h.durationFrames===0?1:G/h.durationFrames,h.easing)}}}function v(){let h=[...r.values()].sort(a);for(let P of h)E(P)}function b(h){let P=wa(h,n);if("ok"in P&&P.ok===!1)return P;let G=ka(P,t),B=r.get(G.idempotencyKey);if(B&&(B.phase==="scheduled"||B.phase==="active")){if(B.onDuplicate==="reject"||G.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${G.idempotencyKey} is already ${B.phase}`};if(B.onDuplicate==="ignore"||G.onDuplicate==="ignore")return{ok:!0,cue:qt(B)};B.phase="cancelled",B.progress=B.progress,d(B,Ae),r.delete(B.idempotencyKey)}r.set(G.idempotencyKey,G),E(G);let m=r.get(G.idempotencyKey)??G;return{ok:!0,cue:qt(m)}}function x(h){let P=r.get(h);return!P||P.phase==="completed"||P.phase==="cancelled"?!1:(P.phase="cancelled",d(P,ke),r.delete(h),!0)}function I(){for(let h of[...r.values()].sort(a))(h.phase==="scheduled"||h.phase==="active")&&(h.phase="cancelled",d(h,ke));r.clear(),i.length=0,n=e.originFrame??0}function M(h=1){let P=Number.isFinite(h)?Math.max(0,Math.floor(h)):0,G=i.length;for(let B=0;B<P;B++)n+=1,v();return i.slice(G).map(Ti)}return{play:b,step:M,cancel:x,reset:I,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(a).map(qt),events:i.map(Ti)}},get(h){let P=r.get(h);return P?qt(P):void 0},get frame(){return n},get reducedMotion(){return t}}}var Yt="audio.cue.scheduled",Wt="audio.cue.started",Jt="audio.cue.skipped",Xt="audio.cue.failed",Ra=[Yt,Wt,Jt,Xt];function xa(e){return e===Yt||e===Wt||e===Jt||e===Xt}function qn(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 Ia(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 zt(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 Li(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=et({originFrame:e.originFrame}),i=new Map,o=[],a=new Set,d=0;function c(l){o.push(l)}function E(l,s,f){let C=r.get(s.idempotencyKey);return qn({type:l,atFrame:r.frame,name:s.name,idempotencyKey:s.idempotencyKey,assetId:s.assetId,channelId:s.channelId,participantId:s.participantId,reason:f?.reason,progress:f?.progress??C?.progress??0})}function v(l,s){a.delete(l.idempotencyKey),t?.noteCueEnded(l.idempotencyKey),l.audioPhase="failed",c(E(Xt,l,{reason:s})),r.cancel(l.idempotencyKey),i.delete(l.idempotencyKey)}function b(l,s){a.delete(l.idempotencyKey),l.audioPhase="skipped",c(E(Jt,l,{reason:s}))}function x(l){a.delete(l.idempotencyKey),l.audioPhase="started",t?.noteCueStarted({idempotencyKey:l.idempotencyKey,channelId:l.channelId,participantId:l.participantId,priority:l.priority}),c(E(Wt,l))}function I(l){if(l.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(l.participantId)){b(l,"unauthorized"),r.cancel(l.idempotencyKey),i.delete(l.idempotencyKey);return}if(n||t?.reducedSensory){b(l,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(l.channelId)===0){b(l,"muted");return}let s=t?.assetStatus(l.assetId);if(!t){x(l);return}if(s==="failed"){v(l,"asset-failed");return}if(s==="ready"){x(l);return}a.add(l.idempotencyKey)}function M(l,s){for(let f of[...a]){let C=i.get(f);if(!C){a.delete(f);continue}if(!(l&&C.assetId!==l)){if(s==="failed"||t?.assetStatus(C.assetId)==="failed"){v(C,"asset-failed");continue}(s==="ready"||t?.assetStatus(C.assetId)==="ready")&&I(C)}}}function h(l){for(let s of[...i.values()])s.participantId===l&&(s.audioPhase==="scheduled"||s.audioPhase==="started")&&v(s,"torn-down")}function P(l){for(let s of l){let f=i.get(s.idempotencyKey);if(f)if(s.type===we)I(f);else if(s.type===De){if(a.delete(f.idempotencyKey),t?.noteCueEnded(f.idempotencyKey),r.get(f.idempotencyKey)){f.audioPhase="scheduled";continue}f.audioPhase==="scheduled"?v(f,"asset-failed"):(f.audioPhase==="started"&&(f.audioPhase="completed"),i.delete(f.idempotencyKey))}else s.type===ke?(a.delete(f.idempotencyKey),t?.noteCueEnded(f.idempotencyKey),(f.audioPhase==="scheduled"||f.audioPhase==="started")&&(f.audioPhase="failed"),i.delete(f.idempotencyKey)):s.type===Ae&&(a.delete(f.idempotencyKey),t?.noteCueEnded(f.idempotencyKey),i.delete(f.idempotencyKey))}}function G(){let l=o.slice(d).map(qn);return d=o.length,l}let B=t?.onNotice(l=>{if(l.type==="asset"){if(l.status==="failed"){for(let s of[...i.values()])s.assetId===l.id&&(s.audioPhase==="scheduled"||s.audioPhase==="started")&&v(s,"asset-failed");return}M(l.id,l.status);return}if(l.type==="teardown"){h(l.participantId);return}if(l.type==="destroy")for(let s of[...i.values()])(s.audioPhase==="scheduled"||s.audioPhase==="started")&&v(s,"torn-down")});function m(){for(let l of i.values())t?.noteCueEnded(l.idempotencyKey);i.clear(),a.clear(),o.length=0,d=0,r.reset()}function g(l){if(!l||typeof l!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof l.assetId!="string"||l.assetId.length===0)return{ok:!1,reason:"invalid",detail:"assetId is required"};let s=r.snapshot().events.length,f=r.play(Ia(l));if(!f.ok)return f;let C=r.snapshot().events.slice(s),H=C.some(R=>R.type===Ae);if(!H&&i.has(l.idempotencyKey)){let R=i.get(l.idempotencyKey);return{ok:!0,cue:zt(R,f.cue,r.frame)}}if(H){let R=i.get(l.idempotencyKey);R&&(a.delete(R.idempotencyKey),t?.noteCueEnded(R.idempotencyKey),i.delete(R.idempotencyKey))}let T=l.channelId??l.participantId??"master",D={name:l.name,idempotencyKey:l.idempotencyKey,assetId:l.assetId,channelId:T,participantId:l.participantId,priority:Number.isFinite(l.priority)?l.priority:0,audioPhase:"scheduled"};i.set(D.idempotencyKey,D),typeof l.gain=="number"&&t?.setChannelGain(T,l.gain,l.participantId),typeof l.priority=="number"&&t?.setPriority(T,l.priority,l.participantId),c(E(Yt,D)),P(C.filter(R=>R.type!==Ae));let L=i.get(D.idempotencyKey);L&&L.audioPhase==="scheduled"&&t?.assetStatus(L.assetId)==="failed"&&v(L,"asset-failed"),G();let p=i.get(D.idempotencyKey)??D,k=r.get(D.idempotencyKey)??f.cue;return{ok:!0,cue:zt(p,k,r.frame)}}return{play:g,step(l=1){let s=r.step(l);return P(s),G()},cancel(l){let s=i.get(l),f=r.cancel(l);return s&&(a.delete(l),t?.noteCueEnded(l),i.delete(l)),f},reset:m,snapshot(){return{frame:r.frame,reducedSensory:n,cues:[...i.values()].map(l=>zt(l,r.get(l.idempotencyKey),r.frame)).sort((l,s)=>l.name!==s.name?l.name<s.name?-1:1:l.idempotencyKey<s.idempotencyKey?-1:l.idempotencyKey>s.idempotencyKey?1:0),events:o.map(qn)}},get(l){let s=i.get(l);if(s)return zt(s,r.get(l),r.frame)},dispose(){B?.(),m()},get frame(){return r.frame},get reducedSensory(){return n}}}function Pa(e,t){return e.play(t)}function Ta(e={}){let t=Mn({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=Li({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 Ma=1,_i=["loading","ready","error","unsupported"],Vi=["keyboard","pointer","audio","assets","hostChannel"],Oi=["image","audio","font","spritesheet"],Ni=["tone","midi"],en=["source-over","screen"],tn=["transparent","opaque"],Fi=["render","calculation"],La=new Set(_i),Hi=new Set(Vi),Di=new Set(Oi),Ki=new Set(Ni),Da=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind"]),_a=new Set(["minContractVersion","features"]),Va=new Set(["kinds","declarations"]),Oa=new Set(["id","kind"]),Na=new Set(["emit","subscribe","authoritative"]),Bi=new Set(["alpha","clearPolicy"]),$i=new Set(["compositor","blend"]),Ui=new Set(["refs"]),Fa=new Set(["id","version"]),Qt=/^[a-z0-9][a-z0-9.-]*$/i,Gi=new Set(en),ji=new Set(tn),qi=new Set(Fi),Ha=new Set(["contractVersion","features","integrations","managers","emit","subscribe","surface","layers","modules","kinds"]);function q(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function pe(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function fe(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(q("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function Ka(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 Ba(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 Zt(e,t){for(let n of t)if(e===n||Ba(n,e))return!0;return!1}function ft(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function zn(e,t,n){if(!Array.isArray(e))return{ok:!1,errors:[q("invalid-field",`${t} must be an array`,t)]};let r=[],i=[];return e.forEach((o,a)=>{let d=`${t}[${a}]`;if(typeof o!="string"||o.length===0){r.push(q("invalid-field",`${t} entries must be non-empty strings`,d));return}let c=n(o,d);c?r.push(c):i.push(o)}),r.length>0?{ok:!1,errors:r}:{ok:!0,values:i}}function tt(e,t){return zn(e,t,(n,r)=>Ka(n)?void 0:q("invalid-pattern",`invalid event pattern "${n}"`,r))}function Re(e,t,n,r,i){return zn(e,t,(o,a)=>n.has(o)?void 0:q(r,`invalid ${i} "${o}"`,a))}function zi(e,t){return zn(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:q("invalid-feature",`invalid feature tag "${n}"`,r))}function Yi(e,t){if(!Array.isArray(e))return{ok:!1,errors:[q("invalid-module",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let a=`${t}[${o}]`;if(!pe(i)){n.push(q("invalid-module","module ref must be an object",a));return}n.push(...fe(i,Fa,a)),(typeof i.id!="string"||i.id.length===0||!Qt.test(i.id))&&n.push(q("invalid-module",`invalid module id "${String(i.id)}"`,`${a}.id`)),(typeof i.version!="string"||i.version.length===0||!Qt.test(i.version))&&n.push(q("invalid-module",`invalid module version "${String(i.version)}"`,`${a}.version`)),typeof i.id=="string"&&Qt.test(i.id)&&typeof i.version=="string"&&Qt.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function $a(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 Ua(e){if(!pe(e))return[q("invalid-manifest","capability manifest must be a JSON object")];let t=[...fe(e,Da,"")];if(e.version!==void 0&&e.version!==1&&t.push(q("invalid-version","capability manifest version must be 1","version")),(typeof e.id!="string"||e.id.length===0)&&t.push(q("invalid-id","id is required","id")),!pe(e.runtime))t.push(q("invalid-runtime","runtime is required","runtime"));else{t.push(...fe(e.runtime,_a,"runtime"));let d=e.runtime.minContractVersion;(typeof d!="number"||!Number.isInteger(d)||d<1)&&t.push(q("invalid-runtime","runtime.minContractVersion must be an integer >= 1","runtime.minContractVersion"));let c=zi(e.runtime.features,"runtime.features");c.ok||t.push(...c.errors)}let n=Re(e.phases,"phases",La,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=Re(e.managers,"managers",Hi,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!pe(e.assets))t.push(q("invalid-assets","assets is required","assets"));else{t.push(...fe(e.assets,Va,"assets"));let d=Re(e.assets.kinds,"assets.kinds",Di,"invalid-asset-kind","asset kind");d.ok||t.push(...d.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((c,E)=>{let v=`assets.declarations[${E}]`;if(!pe(c)){t.push(q("invalid-assets","asset declaration must be an object",v));return}t.push(...fe(c,Oa,v)),(typeof c.id!="string"||c.id.length===0)&&t.push(q("invalid-assets","asset declaration id is required",`${v}.id`)),(typeof c.kind!="string"||!Di.has(c.kind))&&t.push(q("invalid-asset-kind",`invalid asset kind "${String(c.kind)}"`,`${v}.kind`))}):t.push(q("invalid-assets","assets.declarations must be an array","assets.declarations"))}let i=tt(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=tt(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!pe(e.permissions))t.push(q("invalid-permissions","permissions is required","permissions"));else{t.push(...fe(e.permissions,Na,"permissions"));let d=tt(e.permissions.emit,"permissions.emit");d.ok||t.push(...d.errors);let c=tt(e.permissions.subscribe,"permissions.subscribe");c.ok||t.push(...c.errors),e.permissions.authoritative!==void 0&&typeof e.permissions.authoritative!="boolean"&&t.push(q("invalid-permissions","permissions.authoritative must be a boolean","permissions.authoritative"))}let a=Re(e.integrations,"integrations",Ki,"invalid-integration","integration");if(a.ok||t.push(...a.errors),e.surface!==void 0&&(pe(e.surface)?(t.push(...fe(e.surface,Bi,"surface")),e.surface.alpha!==void 0&&typeof e.surface.alpha!="boolean"&&t.push(q("invalid-surface","surface.alpha must be a boolean","surface.alpha")),e.surface.clearPolicy!==void 0&&(typeof e.surface.clearPolicy!="string"||!ji.has(e.surface.clearPolicy))&&t.push(q("invalid-clear-policy",`invalid clear policy "${String(e.surface.clearPolicy)}"`,"surface.clearPolicy"))):t.push(q("invalid-surface","surface must be an object","surface"))),e.layers!==void 0){if(!pe(e.layers))t.push(q("invalid-layers","layers must be an object","layers"));else if(t.push(...fe(e.layers,$i,"layers")),e.layers.compositor!==void 0&&typeof e.layers.compositor!="boolean"&&t.push(q("invalid-layers","layers.compositor must be a boolean","layers.compositor")),e.layers.blend!==void 0){let d=Re(e.layers.blend,"layers.blend",Gi,"invalid-blend","blend mode");d.ok||t.push(...d.errors)}}if(e.modules!==void 0){if(!pe(e.modules))t.push(q("invalid-module","modules must be an object","modules"));else if(t.push(...fe(e.modules,Ui,"modules")),e.modules.refs!==void 0){let d=Yi(e.modules.refs,"modules.refs");d.ok||t.push(...d.errors)}}return e.kind!==void 0&&(typeof e.kind!="string"||!qi.has(e.kind))&&t.push(q("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),t}function Ga(e){let t=[];return e.emittedEvents.forEach((n,r)=>{Zt(n,e.permissions.emit)||t.push(q("undeclared-permission",`emitted event "${n}" is not covered by permissions.emit`,`emittedEvents[${r}]`))}),e.acceptedEvents.forEach((n,r)=>{Zt(n,e.permissions.subscribe)||t.push(q("undeclared-permission",`accepted event "${n}" is not covered by permissions.subscribe`,`acceptedEvents[${r}]`))}),t}function ja(e){let t=ft(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:ft(e.phases),managers:ft(e.managers),assets:{kinds:t,declarations:n},acceptedEvents:[...e.acceptedEvents],emittedEvents:[...e.emittedEvents],permissions:r,integrations:ft(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=ft(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=$a(e.modules.refs);o.length>0&&(i.modules={refs:o})}return e.kind==="calculation"&&(i.kind="calculation"),i}function Yn(e){let t=Ua(e);if(t.length>0)return{ok:!1,errors:t};let n=ja(e);return t.push(...Ga(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function qa(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[q("invalid-json","capability manifest JSON is not parseable")]}}return Yn(t)}function za(e){return JSON.parse(JSON.stringify(e))}function Ya(e,t){let n=Yn(e),r=n.ok?[]:[...n.errors];if(!pe(t))return{ok:!1,errors:[q("invalid-host","host capabilities must be a JSON object")]};r.push(...fe(t,Ha,"host")),typeof t.contractVersion!="number"||!Number.isInteger(t.contractVersion)||t.contractVersion<1?r.push(q("invalid-host","host.contractVersion must be an integer >= 1","host.contractVersion")):n.ok&&t.contractVersion<n.manifest.runtime.minContractVersion&&r.push(q("unsupported-runtime",`host contract version ${t.contractVersion} is below required ${n.manifest.runtime.minContractVersion}`,"runtime.minContractVersion"));let i=zi(t.features,"host.features");if(!i.ok)r.push(...i.errors);else if(n.ok){let d=new Set(i.values);n.manifest.runtime.features.forEach((c,E)=>{d.has(c)||r.push(q("unsupported-feature",`host does not support required feature "${c}"`,`runtime.features[${E}]`))})}let o=Re(t.integrations,"host.integrations",Ki,"invalid-integration","integration");if(!o.ok)r.push(...o.errors);else if(n.ok){let d=new Set(o.values);n.manifest.integrations.forEach((c,E)=>{d.has(c)||r.push(q("missing-integration",`host does not provide required integration "${c}"`,`integrations[${E}]`))})}if(t.managers!==void 0){let d=Re(t.managers,"host.managers",Hi,"invalid-manager","manager");if(!d.ok)r.push(...d.errors);else if(n.ok){let c=new Set(d.values);n.manifest.managers.forEach((E,v)=>{c.has(E)||r.push(q("missing-manager",`host does not provide required manager "${E}"`,`managers[${v}]`))})}}if(t.emit!==void 0){let d=tt(t.emit,"host.emit");d.ok?n.ok&&n.manifest.permissions.emit.forEach((c,E)=>{Zt(c,d.values)||r.push(q("unknown-permission",`host does not allow emit permission "${c}"`,`permissions.emit[${E}]`))}):r.push(...d.errors)}if(t.subscribe!==void 0){let d=tt(t.subscribe,"host.subscribe");d.ok?n.ok&&n.manifest.permissions.subscribe.forEach((c,E)=>{Zt(c,d.values)||r.push(q("unknown-permission",`host does not allow subscribe permission "${c}"`,`permissions.subscribe[${E}]`))}):r.push(...d.errors)}if(t.surface!==void 0&&(pe(t.surface)?(r.push(...fe(t.surface,Bi,"host.surface")),t.surface.alpha!==void 0&&typeof t.surface.alpha!="boolean"&&r.push(q("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,E)=>{(typeof c!="string"||!ji.has(c))&&r.push(q("invalid-clear-policy",`invalid clear policy "${String(c)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${E}]`:"host.surface.clearPolicy"))})):r.push(q("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!pe(t.layers))r.push(q("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...fe(t.layers,$i,"host.layers")),t.layers.compositor!==void 0&&typeof t.layers.compositor!="boolean"&&r.push(q("invalid-host","host.layers.compositor must be a boolean","host.layers.compositor")),t.layers.blend!==void 0){let d=Re(t.layers.blend,"host.layers.blend",Gi,"invalid-blend","blend mode");d.ok||r.push(...d.errors)}}let a;if(t.modules!==void 0)if(!pe(t.modules))r.push(q("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...fe(t.modules,Ui,"host.modules")),t.modules.refs!==void 0){let d=Yi(t.modules.refs,"host.modules.refs");d.ok?a=d.values:r.push(...d.errors)}else a=[];if(n.ok&&n.manifest.surface){let d=n.manifest.surface,c=t.surface;d.alpha===!0&&c?.alpha!==!0&&r.push(q("unsupported-surface","host does not provide an alpha-capable surface","surface.alpha")),d.clearPolicy&&((Array.isArray(c?.clearPolicy)?c.clearPolicy:c?.clearPolicy?[c.clearPolicy]:[]).includes(d.clearPolicy)||r.push(q("unsupported-surface",`host does not provide clear policy "${d.clearPolicy}"`,"surface.clearPolicy")))}if(n.ok&&n.manifest.layers){let d=n.manifest.layers,c=t.layers;if(d.compositor===!0&&c?.compositor!==!0&&r.push(q("unsupported-layer","host does not provide a compositor","layers.compositor")),d.blend){let E=new Set(c?.blend??[]);d.blend.forEach((v,b)=>{E.has(v)||r.push(q("unsupported-layer",`host does not provide blend mode "${v}"`,`layers.blend[${b}]`))})}}if(n.ok&&n.manifest.modules?.refs){let d=t.modules===void 0?[]:a??[];n.manifest.modules.refs.forEach((c,E)=>{d.some(v=>v.id===c.id&&v.version===c.version)||r.push(q("unsupported-module",`host does not provide required module "${c.id}@${c.version}"`,`modules.refs[${E}]`))})}if(t.kinds!==void 0){let d=Re(t.kinds,"host.kinds",qi,"invalid-kind","cart kind");if(!d.ok)r.push(...d.errors);else if(n.ok){let c=n.manifest.kind??"render";d.values.includes(c)||r.push(q("unsupported-kind",`host does not support cart kind "${c}"`,"kind"))}}return r.length>0?{ok:!1,errors:r}:{ok:!0}}var Wa=1,Ja=1e-6,Xa=.5,Qa=["normalized","asset","canvas","css","viewport"],Za=["center","top-left","top-right","bottom-left","bottom-right","top","bottom","left","right"],ed={center:{x:.5,y:.5},"top-left":{x:0,y:0},"top-right":{x:1,y:0},"bottom-left":{x:0,y:1},"bottom-right":{x:1,y:1},top:{x:.5,y:0},bottom:{x:.5,y:1},left:{x:0,y:.5},right:{x:1,y:.5}};function td(e){let t=ed[e];return{x:t.x,y:t.y}}function Wn(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:a}=e,d=i/n,c=o/r,E=a==="contain"?Math.min(d,c):Math.max(d,c),v=n*E,b=r*E,x=(i-v)/2,I=(o-b)/2,M=nn(-x/v),h=nn(-I/b),P=nn(i/v),G=nn(o/b);return{mode:a,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:E,offsetX:x,offsetY:I,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x:M,y:h,width:Math.min(P,1-M),height:Math.min(G,1-h)}}}function nd(e,t){return{x:e.x*t.contentWidth,y:e.y*t.contentHeight}}function rd(e,t){return{x:e.x/t.contentWidth,y:e.y/t.contentHeight}}function Jn(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function Xn(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function Ji(e,t){return{x:e.x*t.devicePixelRatio,y:e.y*t.devicePixelRatio}}function Xi(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function id(e,t){return Ji(Jn(e,t),t)}function Qi(e,t){return Xn(Xi(e,t),t)}function Qn(e,t){let n=Jn({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 Zi(e,t){let n=Qn(e,t),r=t.devicePixelRatio;return{x:n.x*r,y:n.y*r,width:n.width*r,height:n.height*r}}function Zn(e,t,n,r){let o=(r?.space??"canvas")==="css"?Xn(e,t):Qi(e,t);for(let a of n.regions)if(pd(a,o))return a}function er(e,t){let n=mt(e);if(n)return Qn(n,t)}function od(e){let t=new Map,n=r=>{if(t.has(r.id))return{ok:!1,error:"duplicate-id",id:r.id};let i={id:r.id,point:{x:r.point.x,y:r.point.y},...r.origin!==void 0?{origin:r.origin}:{}};return t.set(i.id,i),{ok:!0,landmark:i}};if(e)for(let r of e){let i=n(r);if(!i.ok)throw new Error(`Duplicate landmark id: ${i.id}`)}return{register:n,get:r=>t.get(r),list:()=>[...t.values()]}}function sd(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),Wi(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=mt(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&&!cd(o)&&t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} is outside 0\u20131`}),i.polygon){for(let a of i.polygon)if(!Wi(a)){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],a=mt(o);if(a)for(let d=i+1;d<e.regions.length;d+=1){let c=e.regions[d],E=mt(c);E&&ld(a,E)&&t.push({code:"overlap",id:o.id,with:c.id,detail:`region ${o.id} overlaps ${c.id}`})}}return{ok:t.length===0,diagnostics:t}}function ad(e,t,n,r=[]){let i=[],o=(a,d,c)=>{i.push({method:a,id:c,args:d})};for(let a of n.regions){let d=mt(a);if(!d)continue;let c=Zi(d,t);e.fillStyle="rgba(0, 180, 255, 0.15)",e.strokeStyle="#00b4ff",e.fillRect&&e.fillRect(c.x,c.y,c.width,c.height),o("fillRect",[c.x,c.y,c.width,c.height],a.id),e.strokeRect&&e.strokeRect(c.x,c.y,c.width,c.height),o("strokeRect",[c.x,c.y,c.width,c.height],a.id),e.font="12px sans-serif";let E=a.id;e.fillText&&e.fillText(E,c.x+4,c.y+14),o("fillText",[E,c.x+4,c.y+14],a.id)}for(let a of r){let d=a.id?`${a.id}: ${a.code}`:a.code,c=16+i.filter(E=>E.method==="fillText").length*14;e.fillText&&e.fillText(d,8,c),o("fillText",[d,8,c],a.id)}return i}function dd(e){return JSON.stringify(e)}function ud(e){return JSON.parse(e)}function nn(e){return e<=0?0:e>=1?1:e}function Wi(e){return e.x>=0&&e.x<=1&&e.y>=0&&e.y<=1}function cd(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 ld(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 mt(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 pd(e,t){return e.polygon&&e.polygon.length>=3?fd(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 fd(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r,r+=1){let o=t[r],a=t[i];o.y>e.y!=a.y>e.y&&e.x<(a.x-o.x)*(e.y-o.y)/(a.y-o.y)+o.x&&(n=!n)}return n}var to=320,no=180,md=1024,yd="Runtime group has been destroyed";function hd(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 gd(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 ro(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 eo(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function bd(e){let t=new Set([Ce,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=ro(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function tr(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let s of e.participants){if(!s.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(s.id))throw new Error(`createRuntimeGroup: duplicate participant id "${s.id}"`);t.add(s.id)}let n=e.origin??0,r=e.width??to,i=e.height??no,o=e.maxTrace??md,a=[...e.participants].sort((s,f)=>s.id.localeCompare(f.id)),d=[],c=new Map,E=0,v=e.createId??e.router?.createId??(()=>`evt-${++E}`),b=e.now??e.router?.now??(()=>{let s=d[0];if(!s)return n;try{return s.cart.getClock().now}catch{return n}}),x=On({...e.router,createId:v,now:b,validate:e.validate??e.router?.validate}),I=[],M=!1,h=!1,P=()=>{},G=s=>f=>{s.events.push(f),s.userOnEvent?.(f)},B=()=>{if(h)throw new Error(yd)},m=()=>{P();for(let s of d){try{x.detach(s.id)}catch{}try{s.runtime.destroy()}catch{}s.ownsContainer&&s.container.remove()}d.length=0,c.clear()};try{for(let s of a){let f=s.width??r,C=s.height??i,H=!s.container,T=s.container??gd(f,C),D=Ln({container:T,seed:s.seed??hd(s.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?s.id:void 0,kind:s.kind??"render"}),L={id:s.id,kind:s.kind??"render",cartDef:s.cart,initialState:s.initialState,gameManager:s.gameManager,userOnEvent:s.onEvent,runtime:D,container:T,ownsContainer:H,cart:void 0,events:[],errors:[]};D.onError=(p,k)=>{L.errors.push({error:p,info:k})},x.attach(s.id,D.hostChannel,ro(s)),L.cart=D.mount(s.cart,{initialState:s.initialState,gameManager:s.gameManager,onEvent:G(L)}),d.push(L),c.set(L.id,L)}P=x.subscribe(bd(a),s=>{for(I.push(eo(s));I.length>o;)I.shift()})}catch(s){throw m(),s}let g=s=>({id:s.id,kind:s.kind,runtime:s.runtime,container:s.container,get events(){return s.events.slice()},get errors(){return s.errors.slice()},get cart(){return s.cart}});return{router:x,origin:n,get paused(){return M},get audioBroker(){return e.audioBroker},participant(s){B();let f=c.get(s);if(!f)throw new Error(`createRuntimeGroup: unknown participant "${s}"`);return g(f)},async step(s=1){if(B(),M)return;let f=Math.max(0,Math.floor(s));for(let C=0;C<f;C++){x.turn();for(let H of d)try{await H.cart.step(1)}catch(T){H.errors.push({error:T,info:{phase:"update",consecutive:H.errors.length+1,stopped:!1}})}}},pause(){B(),M=!0;for(let s of d)s.cart.pause()},resume(){B(),M=!1;for(let s of d)s.cart.resume()},reset(){B(),I.length=0;for(let s of d)s.events.length=0,s.errors.length=0,s.cart=s.runtime.mount(s.cartDef,{initialState:s.initialState,gameManager:s.gameManager,onEvent:G(s)});x.turn()},resize(s,f){B();let C=Math.max(1,s|0),H=Math.max(1,f|0);for(let T of d){Object.defineProperty(T.container,"clientWidth",{value:C,configurable:!0}),Object.defineProperty(T.container,"clientHeight",{value:H,configurable:!0});let D=T.cart.canvas;D&&(D.width=C,D.height=H)}},detach(s){B();let f=c.get(s);if(!f)throw new Error(`createRuntimeGroup: unknown participant "${s}"`);try{x.detach(f.id)}catch{}try{f.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(f.id),f.ownsContainer&&f.container.remove();let C=d.indexOf(f);C>=0&&d.splice(C,1),c.delete(s)},dispatch(s,f){B();let C=c.get(s);if(!C)throw new Error(`createRuntimeGroup: unknown participant "${s}"`);C.cart.dispatch(f)},publish(s,f){return B(),x.publish(s,f)},inspectParticipants(){B();let s=new Map(d.map(f=>[f.id,f.kind]));return x.inspectParticipants().map(f=>({...f,kind:s.get(f.id)??"render"}))},async inspect(){B();let s={},f={},C=new Map(x.inspectParticipants().map(T=>[T.id,T]));for(let T of d){let D=await T.cart.getReplayMetadata(),L=T.cart.getClock();f[T.id]=L;let p=C.get(T.id);s[T.id]={state:D.state,events:T.events.slice(),errors:T.errors.slice(),kind:T.kind,clock:L,emit:p?.emit.slice()??[],subscribe:p?.subscribe.slice()??[],authoritative:p?.authoritative===!0}}let H=I.map(T=>eo(T));return{participants:s,trace:H,diagnostics:{paused:M,participantIds:d.map(T=>T.id),clocks:f,rejections:H.filter(T=>T.type===Ce).map(T=>T.payload)}}},destroy(){if(!h){h=!0,M=!1;try{m()}finally{I.length=0}}}}}var rn=1,ao=512,uo="[REDACTED]",vd=new Set([ve,Ee]);function ue(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function on(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>on(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)?uo:on(o,t);return r}function Ed(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function Sd(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 io(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 Cd(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=io(e[n]),i=io(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function oo(e){let t=new Map,n=[];for(let o of e){if(o.outcome==="duplicate"){n.push(void 0);continue}let a={envelopeId:o.envelopeId,type:o.type,source:o.source,outcome:o.outcome,children:[]};o.reason&&(a.reason=o.reason),n.push(a),o.envelopeId&&!t.has(o.envelopeId)&&t.set(o.envelopeId,a)}let r=new Set;for(let o=0;o<e.length;o++){let a=e[o],d=n[o];if(!d)continue;let c=a.causationId?t.get(a.causationId):void 0;c&&c!==d&&(c.children.push(d),r.add(d))}let i=[];for(let o of n)o&&!r.has(o)&&i.push(o);return i}function so(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 Ad(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:ue(t.clock),state:on(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=Ed(r.error)),i}function co(e={}){let t=new Set(e.redactedKeys??[]),n=e.maxRecords??ao,r=e.registry,i=0,o=0,a=!1,d=[],c=[],E,v=[],b=0,x=[],I={},M=()=>{},h=()=>{if(a)throw new Error("Replay inspector has been destroyed")},P=g=>{let l=r?.get(g.type),s={index:o,turn:g.turn,time:g.time,outcome:g.outcome,source:g.source,type:g.type,deliveredTo:g.deliveredTo.slice(),payload:on(g.payload,t)};for(o+=1,g.reason&&(s.reason=g.reason),g.detail&&(s.detail=g.detail),g.target&&(s.target=g.target),g.kind&&(s.kind=g.kind),g.envelopeId&&(s.envelopeId=g.envelopeId),g.priorEnvelopeId&&(s.priorEnvelopeId=g.priorEnvelopeId),g.correlationId&&(s.correlationId=g.correlationId),g.causationId&&(s.causationId=g.causationId),g.hops!==void 0&&(s.hops=g.hops),g.seq!==void 0&&(s.seq=g.seq),g.idempotencyKey&&(s.idempotencyKey=g.idempotencyKey),g.schemaVersion!==void 0&&(s.schemaVersion=g.schemaVersion),l&&(s.payloadSchemaVersion=l.payloadSchema.version),d.push(s);d.length>n;)d.shift(),i+=1},G=g=>d.filter(l=>Sd(l,g)).map(l=>ue(l)),B=g=>g?g.inspectParticipants().map(l=>so(l,l.kind)):x.map(l=>ue(l)),m={watchRouter(g){if(h(),M(),x=g.inspectParticipants().map(s=>so(s)),d.length===0)for(let s of g.inspectDecisions())P(s);let l=g.subscribeDecision(s=>P(s));return M=()=>{l(),M=()=>{}},c.push(M),M},bind(g){h(),E&&M(),E=g,b=g.origin,m.watchRouter(g.router),x=B(g);let l={publish(s,f){h();let C={kind:"publish",event:ue(s)};return f?.cause&&(C.extras={cause:ue(f.cause)}),v.push(C),g.publish(s,f)},dispatch(s,f){h();let C=ue(f);typeof C.type=="string"&&vd.has(C.type)?v.push({kind:"asset",participantId:s,event:C}):v.push({kind:"dispatch",participantId:s,event:C}),g.dispatch(s,f)},async step(s=1){h(),v.push({kind:"step",frames:s}),await g.step(s)},async report(){h();let s=await g.inspect(),f=[];for(let C of Object.keys(s.participants).sort())f.push(Ad(C,s.participants[C],t));x=f,I={};for(let C of f)I[C.id]=ue(C.state);return m.report()},async exportTrace(s){return await l.report(),m.exportTrace(s)},unbind(){M(),E=void 0}};return l},importTrace(g){h();let l=typeof g=="string"?JSON.parse(g):g;if(l.schemaVersion!==rn)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,d.length=0,v=ue(l.tape??[]),b=l.origin??0,x=ue(l.participants??[]),I=ue(l.snapshots??{});for(let s of l.records??[])P({outcome:s.outcome,reason:s.reason,detail:s.detail,source:s.source,type:s.type,kind:s.kind,envelopeId:s.envelopeId,priorEnvelopeId:s.priorEnvelopeId,target:s.target,deliveredTo:s.deliveredTo,hops:s.hops,seq:s.seq,correlationId:s.correlationId,causationId:s.causationId,idempotencyKey:s.idempotencyKey,schemaVersion:s.schemaVersion,payload:s.payload,turn:s.turn,time:s.time})},exportTrace(g){return h(),{schemaVersion:rn,origin:b,redactedKeys:[...t],participants:ue(x),tape:ue(v),records:G(g),snapshots:ue(I)}},report(g){h();let l=G(g);return{schemaVersion:rn,participants:ue(x),records:l,trees:oo(l),dropped:i}},causationTree(g){h();let l=G(g?{correlationId:g}:void 0);return oo(l)},records(){return h(),d.map(g=>ue(g))},reset(){h(),d.length=0,v=[],i=0,o=0,I={},E&&(x=B(E))},destroy(){if(!a){for(a=!0,M();c.length>0;)c.pop()?.();d.length=0,v=[],x=[],I={},E=void 0}}};return m}async function wd(e,t,n={}){let r=co({redactedKeys:n.redactedKeys??e.redactedKeys,maxRecords:n.maxRecords,registry:n.registry}),i=r.bind(t);try{for(let a of e.tape)a.kind==="publish"?i.publish(a.event,a.extras):a.kind==="dispatch"||a.kind==="asset"?i.dispatch(a.participantId,a.event):await i.step(a.frames);let o=await i.report();return{inspector:r,report:o}}catch(o){throw r.destroy(),o}}var kd=en,Rd=tn,xd=["participant","image","canvas"],Id="Compositor has been destroyed";function Pd(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function Td(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 Md(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Ld(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:Md(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function nr(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=Ld(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:Pd(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function lo(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 po(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function rr(e,t){return 255-Math.round((255-e)*(255-t)/255)}function Dd(e,t,n,r,i,o,a,d){let c=o/255*a;if(c<=0)return;let E=e[t],v=e[t+1],b=e[t+2],x=e[t+3]/255,I=n,M=r,h=i;d==="screen"&&(I=rr(E,n),M=rr(v,r),h=rr(b,i));let P=c+x*(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((I*c+E*x*(1-c))/P),e[t+1]=Math.round((M*c+v*x*(1-c))/P),e[t+2]=Math.round((h*c+b*x*(1-c))/P),e[t+3]=Math.round(P*255)}function _d(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 a=0;a<t;a++){let d=Math.min(e.width-1,Math.floor(a*e.width/t)),c=(o*e.width+d)*4,E=(i*t+a)*4;r[E]=e.data[c],r[E+1]=e.data[c+1],r[E+2]=e.data[c+2],r[E+3]=e.data[c+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function Vd(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 fo(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function mo(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 sn(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 ir(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 s of e.layers){let f=nr(s,n);if(t.has(f.id))throw new Error(`createCompositor: duplicate layer id "${f.id}"`);t.add(f.id),r.set(f.id,f)}let i=e.group,o=e.dpr&&e.dpr>0?e.dpr:1,a=Math.max(1,(e.width??320)|0),d=Math.max(1,(e.height??180)|0),c=o,E=e.offscreen!==!1,v=!e.target;if(!E&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let b=e.target??document.createElement("canvas"),x=b.getContext("2d",{alpha:!0});if(!x)throw new Error("createCompositor: host canvas has no 2d context");let I=!1,M=()=>{if(I)throw new Error(Id)},h=()=>({width:Math.max(1,Math.round(a*c)),height:Math.max(1,Math.round(d*c))}),P=()=>{let s=h();b.width!==s.width&&(b.width=s.width),b.height!==s.height&&(b.height=s.height),b.style.width=`${a}px`,b.style.height=`${d}px`},G=()=>po([...r.values()]).map(lo),B=s=>{if(s.source.kind==="image")return s.source.image;if(s.source.kind==="canvas")try{return mo(s.source.canvas)}catch{return}try{let C=i.participant(s.id).cart.canvas;return C?(sn(C,s),mo(C)):void 0}catch{return}},m=(s,f,C)=>{if(s.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&s.fill(0),e.host?.image){let H=_d(e.host.image,f,C);s.set(H.data);return}e.host?.color&&Vd(s,Td(e.host.color))},g=()=>{let{width:s,height:f}=h();P();let C=x.createImageData(s,f);m(C.data,s,f);for(let H of po([...r.values()])){if(!H.visible||H.opacity<=0)continue;let T=B(H);if(!T)continue;let D=H.clearPolicy==="transparent",L=Math.min(s,T.width),p=Math.min(f,T.height);for(let k=0;k<p;k++)for(let R=0;R<L;R++){if(!fo(H.clip,R,k))continue;let K=(k*T.width+R)*4,Z=T.data[K],J=T.data[K+1],$=T.data[K+2],j=T.data[K+3];D&&Z===0&&J===0&&$===0||j<=0||Dd(C.data,(k*s+R)*4,Z,J,$,j,H.opacity,H.blend)}}return x.putImageData(C,0,0),C};P();for(let s of G())try{sn(i.participant(s.id).cart.canvas,s)}catch{}return{get canvas(){return b},get width(){return a},get height(){return d},get dpr(){return c},compose(){return M(),g()},captureComposedFrame(){M();let s=g();return{imageData:s,pngDataUrl:b.toDataURL("image/png"),width:s.width,height:s.height,declaredOrder:G()}},resize(s,f,C){M(),a=Math.max(1,s|0),d=Math.max(1,f|0),C!==void 0&&(c=C>0?C:1);let H=h();i.resize(H.width,H.height),P()},setLayer(s,f){M();let C=r.get(s);if(!C)throw new Error(`createCompositor: unknown layer "${s}"`);let H=nr({id:s,order:f.order??C.order,visible:f.visible??C.visible,opacity:f.opacity??C.opacity,blend:f.blend??C.blend,clip:f.clip===void 0?C.clip??void 0:f.clip,pointerEvents:f.pointerEvents??C.pointerEvents,clearPolicy:f.clearPolicy??C.clearPolicy,source:f.source??C.source},n);r.set(s,H);try{sn(i.participant(s).cart.canvas,H)}catch{}},addLayer(s){if(M(),r.has(s.id))throw new Error(`createCompositor: duplicate layer id "${s.id}"`);let f=nr(s,n);r.set(f.id,f);try{sn(i.participant(f.id).cart.canvas,f)}catch{}},layer(s){M();let f=r.get(s);if(!f)throw new Error(`createCompositor: unknown layer "${s}"`);return lo(f)},layers(){return M(),G()},pointerTarget(s,f){M();let C=s|0,H=f|0,T=[...G()].reverse();for(let D of T){if(!D.visible||D.pointerEvents==="none"||!fo(D.clip,C,H))continue;let L=r.get(D.id);if(L&&L.source.kind!=="participant")return D.id;try{i.participant(D.id)}catch{continue}return D.id}},unmountLayer(s){if(M(),!r.has(s))throw new Error(`createCompositor: unknown layer "${s}"`);r.delete(s);try{i.detach(s)}catch{}},inspect(){M();let s=G();return{viewport:{width:a,height:d,dpr:c},clearPolicy:n,layers:s,declaredOrder:s.map(f=>f.id)}},destroy(){I||(I=!0,v&&b.parentNode&&b.remove())}}}var or=1,ho=["layer","mask","sprite"],go=["show","hide","replace","crossfade"],bo=":incoming",dn="visual.layer.revealed",yt="visual.layer.hidden",un="visual.layer.transition-started",cn="visual.layer.transition-completed",ht="visual.layer.failed",Od=[dn,yt,un,cn,ht],vo="host.state.accepted",Nd=["asset-failed","missing-source","unknown-layer","unknown-version","invalid-snapshot"],Fd="Visual layer controller has been destroyed",Hd=new Set(ho),Kd=new Set(go);function Eo(e){return typeof e=="string"&&Hd.has(e)}function So(e){return typeof e=="string"&&Kd.has(e)}function Bd(e){return e===dn||e===yt||e===un||e===cn||e===ht}function Co(e){return`${e}${bo}`}function $d(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function Ud(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function nt(e){return JSON.parse(JSON.stringify(e))}function an(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function Gd(e){let t=an(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function jd(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 me(e,t){if(t)return e.versions.find(n=>n.id===t)}function yo(e){return e?{...e}:null}function qd(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=et({originFrame:e.originFrame,reducedMotion:r}),a=e.sceneId??null,d=!1,c=0,E=new Map,v=new Map,b=new Map,x=new Map,I=[],M=[],h=()=>{if(d)throw new Error(Fd)};function P(u){I.push(u),e.dispatch&&e.dispatch({type:u.type,kind:u.type===ht?"diagnostic":"state",payload:u})}function G(u){M.push(u),P({type:ht,atFrame:u.atFrame,layerId:u.layerId,version:u.version,progress:0,code:u.code})}function B(u,S){b.set(u,S)}function m(u){let S=b.get(u);if(S)return S;if(n?.get(u))return"ready";let A=n?.getProgress().items[u];return A?.state==="failed"?"failed":A?.state==="ready"?"ready":"pending"}function g(u){let S=v.get(u);if(S)return S.kind==="canvas"?{kind:"canvas",canvas:S.canvas}:{kind:"image",image:S.image}}function l(u,S){let A=me(u.declaration,S);return A?m(A.assetId)==="ready"&&!!g(A.assetId):!1}function s(u){return u.overrideVersion&&l(u,u.overrideVersion)?u.overrideVersion:u.committedVersion}function f(u,S){let A=me(u.declaration,S);return A?yo(x.get(A.assetId))??yo(A.provenance)??null:null}function C(u,S=0){return o.get(u)?.progress??S}function H(u,S,A){try{t.layer(u)}catch{t.addLayer({id:u,order:S,visible:!1,opacity:0,pointerEvents:A.pointerEvents??"none",blend:A.blend,clip:A.clip??void 0,clearPolicy:A.clearPolicy})}}function T(u){try{t.setLayer(u.incomingLayerId,{visible:!1,opacity:0})}catch{}}function D(){for(let u of E.values()){let S=s(u),A=me(u.declaration,S),O=u.transition,U=O?C(O.cueKey):0,Q=O?.kind==="crossfade"&&O.toVersion!==null&&l(u,O.toVersion);H(u.compositorLayerId,u.order,u);let ee=u.visible,z=1;O?.kind==="hide"?(z=1-U,U>=1&&(ee=!1)):O?.kind==="show"?(ee=l(u,O.toVersion),z=ee?O.durationFrames===0?1:U:0):Q&&(z=1-U);let xe=A?g(A.assetId):void 0;if(t.setLayer(u.compositorLayerId,{order:u.order,visible:ee&&!!xe,opacity:z,blend:u.blend,clip:u.clip??void 0,pointerEvents:u.pointerEvents,clearPolicy:u.clearPolicy,source:xe}),Q&&O){let Et=me(u.declaration,O.toVersion),St=Et?g(Et.assetId):void 0;if(St){try{t.layer(u.incomingLayerId)}catch{t.addLayer({id:u.incomingLayerId,order:u.order+1,visible:!1,opacity:0,pointerEvents:"none",blend:u.blend,clip:u.clip??void 0,clearPolicy:u.clearPolicy})}t.setLayer(u.incomingLayerId,{order:u.order+1,visible:!0,opacity:U,blend:u.blend,clip:u.clip??void 0,pointerEvents:"none",clearPolicy:u.clearPolicy,source:St});continue}}T(u)}}function L(u){let S=s(u);return{id:u.declaration.id,kind:u.kind,visible:u.visible&&!!(S&&l(u,S)),activeVersion:S,pendingVersion:u.pendingVersion,committedVersion:u.committedVersion,opacity:t.layer(u.compositorLayerId).opacity,order:u.order,provenance:f(u,S),overrideVersion:u.overrideVersion,transition:u.transition?{kind:u.transition.kind,progress:C(u.transition.cueKey),fromVersion:u.transition.fromVersion,toVersion:u.transition.toVersion,cueKey:u.transition.cueKey,startFrame:u.transition.startFrame,durationFrames:u.transition.durationFrames,delayFrames:u.transition.delayFrames,easing:u.transition.easing}:null}}function p(u,S,A){u.committedVersion=S,u.pendingVersion=null,u.transition=null,u.visible=A,D(),P({type:A?dn:yt,atFrame:o.frame,layerId:u.declaration.id,version:S,progress:1})}function k(u){u.visible=!1,u.pendingVersion=null,u.transition=null,D(),P({type:yt,atFrame:o.frame,layerId:u.declaration.id,version:u.committedVersion??void 0,progress:1})}function R(u,S,A,O){let U=u.fallback;u.transition=null,u.pendingVersion=null,U==="hide"?u.visible=!1:typeof U=="object"&&U.version&&l(u,U.version)&&(u.committedVersion=U.version,u.visible=!0),D(),G({code:O?"asset-failed":"missing-source",layerId:u.declaration.id,version:S??void 0,assetId:A,message:O?O.message:`visual layer "${u.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:O})}function K(u){let S=u.transition;if(S?.kind==="hide")return k(u),!0;let A=u.pendingVersion??S?.toVersion??null;if(!A)return u.transition=null,!0;if(!me(u.declaration,A))return R(u,A),!0;if(l(u,A))return p(u,A,!0),!0;let O=me(u.declaration,A).assetId;return m(O)==="failed"?(R(u,A,O),!0):(u.transition=null,u.pendingVersion=A,D(),!1)}function Z(){for(let u of E.values())if(!u.transition&&u.pendingVersion){if(l(u,u.pendingVersion))p(u,u.pendingVersion,!0);else if(m(me(u.declaration,u.pendingVersion)?.assetId??"")==="failed"){let S=me(u.declaration,u.pendingVersion);R(u,u.pendingVersion,S?.assetId)}}for(let u of E.values())u.overrideVersion&&l(u,u.overrideVersion)&&u.committedVersion!==u.overrideVersion&&p(u,u.overrideVersion,!0)}function J(u,S){B(u,"failed");for(let A of E.values()){let O=A.declaration.versions.find(xe=>xe.assetId===u);if(!O)continue;let U=me(A.declaration,A.pendingVersion),Q=me(A.declaration,A.transition?.toVersion??null),ee=me(A.declaration,A.overrideVersion);if(U?.assetId===u||Q?.assetId===u||ee?.assetId===u){A.transition&&o.cancel(A.transition.cueKey),ee?.assetId===u&&(A.overrideVersion=null),R(A,O.id,u,S);continue}G({code:"asset-failed",layerId:A.declaration.id,version:O.id,assetId:u,message:S?.message??`asset "${u}" failed; prior frame kept`,atFrame:o.frame,failure:S}),D()}}function $(u){for(let S of u){let A=[...E.values()].find(O=>O.transition?.cueKey===S.idempotencyKey);if(!(!A||!A.transition))if(S.type===we)P({type:un,atFrame:S.atFrame,layerId:A.declaration.id,version:A.transition.toVersion??void 0,kind:A.transition.kind,progress:S.progress}),D();else if(S.type===De){let O=A.transition.kind,U=A.transition.toVersion??void 0;K(A),P({type:cn,atFrame:S.atFrame,layerId:A.declaration.id,version:U,kind:O,progress:1})}else(S.type===ke||S.type===Ae)&&(A.transition=null,D())}}function j(){let u=I.slice(c).map(S=>nt(S));return c=I.length,u}for(let u of e.layers){if(!u?.id)throw new Error("createVisualLayerController: layer id is required");if(E.has(u.id))throw new Error(`createVisualLayerController: duplicate layer id "${u.id}"`);if(!Eo(u.kind))throw new Error(`createVisualLayerController: layer "${u.id}" kind is invalid`);if(!u.versions?.length)throw new Error(`createVisualLayerController: layer "${u.id}" needs versions`);let S=new Set;for(let z of u.versions){if(!z?.id||!z.assetId)throw new Error(`createVisualLayerController: layer "${u.id}" versions need id and assetId`);if(S.has(z.id))throw new Error(`createVisualLayerController: layer "${u.id}" duplicate version "${z.id}"`);S.add(z.id),z.provenance&&x.set(z.assetId,{...z.provenance})}if(u.initialVersion&&!S.has(u.initialVersion))throw new Error(`createVisualLayerController: layer "${u.id}" unknown initialVersion`);let A=u.compositorLayerId??u.id,O=u.incomingLayerId??Co(A),U=u.order??0,Q=u.pointerEvents??(u.kind==="mask"?"none":"auto"),ee={declaration:u,compositorLayerId:A,incomingLayerId:O,kind:u.kind,order:U,blend:u.blend??"source-over",clip:u.clip?{...u.clip}:null,pointerEvents:Q,clearPolicy:u.clearPolicy??"opaque",fallback:u.fallback??i,visible:!!u.initialVersion,committedVersion:u.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};E.set(u.id,ee),H(A,U,ee)}D();function ne(u){if(h(),!u||typeof u!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(!u.layerId)return{ok:!1,reason:"invalid",detail:"layerId is required"};let S=E.get(u.layerId);if(!S)return{ok:!1,reason:"invalid",detail:`unknown layer "${u.layerId}"`};if(!So(u.kind))return{ok:!1,reason:"invalid",detail:"unsupported kind"};if(u.kind!=="hide"&&!u.toVersion)return{ok:!1,reason:"invalid",detail:"toVersion is required"};if(u.toVersion&&!me(S.declaration,u.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${u.toVersion}"`};let A={name:u.name,idempotencyKey:u.idempotencyKey,startFrame:u.startFrame,durationFrames:u.durationFrames,delayFrames:u.delayFrames,easing:u.easing,repeat:u.repeat,reducedMotion:u.reducedMotion,onDuplicate:u.onDuplicate??"replace"},O=o.snapshot().events.length,U=o.play(A);if(!U.ok)return U;let Q=o.snapshot().events.slice(O);return S.pendingVersion=u.kind==="hide"?S.committedVersion:u.toVersion??null,S.transition={kind:u.kind,cueKey:u.idempotencyKey,fromVersion:u.fromVersion??S.committedVersion,toVersion:u.kind==="hide"?S.committedVersion:u.toVersion??null,startFrame:U.cue.startFrame,durationFrames:U.cue.durationFrames,delayFrames:U.cue.delayFrames,easing:U.cue.easing},$(Q),D(),j(),U}function _(u){let S=an(u),A=typeof S?.sceneId=="string"?S.sceneId:void 0;if(e.sceneId&&A&&A!==e.sceneId)return;A&&(a=A);let O=typeof S?.layerId=="string"?S.layerId:typeof S?.overlayId=="string"?S.overlayId:void 0,U=typeof S?.version=="string"?S.version:void 0;if(O&&U){ne({name:`visual:${O}:replace`,idempotencyKey:`visual:${O}:accepted`,layerId:O,kind:"replace",toVersion:U,durationFrames:2});return}for(let Q of e.onAccepted??[])ne({name:`visual:${Q.layerId}:${Q.kind??"replace"}`,idempotencyKey:Q.idempotencyKey??`visual:${Q.layerId}:accepted`,layerId:Q.layerId,kind:Q.kind??"replace",toVersion:Q.toVersion,durationFrames:Q.durationFrames??2,delayFrames:Q.delayFrames,easing:Q.easing})}function Y(){let u=[...E.values()].map(A=>{let O=L(A);return{id:A.declaration.id,kind:A.kind,visible:A.visible,committedVersion:A.committedVersion,pendingVersion:A.pendingVersion,activeVersion:O.activeVersion,opacity:O.opacity,order:A.order,overrideVersion:A.overrideVersion,provenance:O.provenance,fallback:A.fallback,transition:O.transition}}).sort((A,O)=>A.id<O.id?-1:A.id>O.id?1:0),S={};for(let[A,O]of[...b.entries()].sort(([U],[Q])=>U<Q?-1:U>Q?1:0))S[A]=O;return nt({schemaVersion:or,frame:o.frame,sceneId:a,reducedMotion:r,layers:u,assets:S,events:I.map(A=>nt(A)),diagnostics:M.map(A=>nt(A))})}function X(u){h();let S=[],A=ee=>{let z={code:"invalid-snapshot",layerId:"",message:ee,atFrame:o.frame};return{ok:!1,errors:[...S,z]}},O=u;if(typeof u=="string")try{O=JSON.parse(u)}catch{return A("snapshot JSON is invalid")}if(!O||typeof O!="object"||Array.isArray(O))return A("snapshot must be an object");let U=O;if(U.schemaVersion!==or)return A("unsupported visual layer snapshot schema");if(typeof U.frame!="number"||!Number.isFinite(U.frame))return A("frame must be finite");if(!Array.isArray(U.layers))return A("layers must be an array");if(o=et({originFrame:U.frame,reducedMotion:r}),a=typeof U.sceneId=="string"||U.sceneId===null?U.sceneId:a,I.length=0,M.length=0,c=0,Array.isArray(U.events)&&(I.push(...U.events.map(ee=>nt(ee))),c=I.length),Array.isArray(U.diagnostics)&&M.push(...U.diagnostics.map(ee=>nt(ee))),b.clear(),U.assets&&typeof U.assets=="object")for(let[ee,z]of Object.entries(U.assets))(z==="ready"||z==="failed"||z==="pending")&&b.set(ee,z);let Q=new Map(U.layers.map(ee=>[ee.id,ee]));for(let ee of E.values()){let z=Q.get(ee.declaration.id);z&&(ee.visible=!!z.visible,ee.committedVersion=z.committedVersion??null,ee.pendingVersion=z.pendingVersion??null,ee.overrideVersion=z.overrideVersion??null,ee.transition=null,z.transition&&o.play({name:`visual:${ee.declaration.id}:${z.transition.kind}`,idempotencyKey:z.transition.cueKey,startFrame:z.transition.startFrame,durationFrames:z.transition.durationFrames,delayFrames:z.transition.delayFrames,easing:z.transition.easing,onDuplicate:"replace"}).ok&&(ee.transition={kind:z.transition.kind,cueKey:z.transition.cueKey,fromVersion:z.transition.fromVersion,toVersion:z.transition.toVersion,startFrame:z.transition.startFrame,durationFrames:z.transition.durationFrames,delayFrames:z.transition.delayFrames,easing:z.transition.easing}))}return D(),{ok:!0,snapshot:Y()}}return{registerSource(u,S){if(h(),typeof u!="string"||u.length===0)throw new Error("createVisualLayerController: assetId is required");if(S instanceof HTMLCanvasElement)v.set(u,{kind:"canvas",canvas:S});else if(S&&"data"in S&&"width"in S)v.set(u,{kind:"image",image:Ud(S)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");Z(),D()},handleHostEvent(u){if(h(),!u||typeof u!="object")return;if(u.type===vo){_(u.payload);return}let S=Gd(u.payload);if(S){if(u.type===ve){B(S,"ready");let O=an(u.payload)?.resource;if(O&&typeof O=="object"&&"provenance"in O){let U=O.provenance;U&&x.set(S,{...U})}Z(),D();return}if(u.type===Ee){let A=an(u.payload);J(S,jd(A?.failure))}}},override(u,S){h();let A=E.get(u);if(!A)throw new Error(`createVisualLayerController: unknown layer "${u}"`);if(S===null){A.overrideVersion=null,D();return}if(!me(A.declaration,S))throw new Error(`createVisualLayerController: unknown version "${S}" on "${u}"`);if(A.overrideVersion=S,l(A,S)){A.transition&&o.cancel(A.transition.cueKey),p(A,S,!0);return}D()},play:ne,step(u=1){h();let S=o.step(u);return $(S),Z(),D(),j()},snapshot(){return h(),Y()},restore:X,inspect(){return h(),D(),[...E.values()].map(L).sort((u,S)=>u.id<S.id?-1:u.id>S.id?1:0)},captureComposedFrame(){return h(),D(),t.captureComposedFrame()},destroy(){d||(d=!0,o.reset(),I.length=0,M.length=0)},get frame(){return o.frame},get sceneId(){return a},get compositor(){return t}}}var zd=["invalid-ref","unknown-module","version-mismatch","not-allowlisted","load-failed","invoke-failed","timeout","rate-limited","destroyed"],Ao="executable module host has been destroyed";var Yd=/^[a-z0-9][a-z0-9.-]*$/i,Wd=/^[a-z0-9][a-z0-9-]*$/i;function Oe(e){return{id:e.id,version:e.version}}function sr(e){return`${e.id}@${e.version}`}function gt(e){return typeof e=="string"&&e.length>0&&Yd.test(e)}function Jd(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==="*"||Wd.test(n))}function Ro(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 Xd(e,t){return t.some(n=>n.version===e.version&&Ro(n.id,e.id))}function bt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Qd(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function wo(e){return e instanceof Error&&e.message?e.message:String(e)}function ar(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>ar(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=ar(e[n]);return Object.freeze(t)}function ko(e){if(!bt(e))return;let t=e.id,n=e.version;if(!(!gt(t)||!gt(n)))return{id:t,version:n}}function Zd(e){if(e===void 0)return{};if(!bt(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 eu(e){if(!bt(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((l,s)=>{if(!bt(l))throw new Error(`createExecutableModuleHost: allowlist[${s}] must be an object`);if(!Jd(l.id))throw new Error(`createExecutableModuleHost: allowlist[${s}].id is not a valid id or pattern`);if(!gt(l.version)||l.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${s}].version must be an exact version`);return{id:l.id,version:l.version}}),n=new Map,r=new Map;for(let[l,s]of e.modules.entries()){if(!bt(s))throw new Error(`createExecutableModuleHost: modules[${l}] must be an object`);if(!gt(s.id))throw new Error(`createExecutableModuleHost: modules[${l}].id is invalid`);if(!gt(s.version))throw new Error(`createExecutableModuleHost: modules[${l}].version is invalid`);if(typeof s.create!="function")throw new Error(`createExecutableModuleHost: modules[${l}].create must be a function`);let f=`${s.id}@${s.version}`;if(n.has(f))throw new Error(`createExecutableModuleHost: duplicate module ${f}`);n.set(f,{id:s.id,version:s.version,create:s.create,capabilities:s.capabilities});let C=r.get(s.id)??[];C.push(s.version),r.set(s.id,C)}let i=Zd(e.limits),o=e.capabilities,a=new Map,d=new Set,c=[],E=0,v=0,b=!1;function x(l,s,f){let C=f?{code:l,detail:s,ref:Oe(f)}:{code:l,detail:s};return c.push(C),c.length>256&&c.shift(),C}function I(l,s,f){return{ok:!1,error:x(l,s,f)}}function M(l){if(b){let D=ko(l);return I("destroyed",Ao,D)}let s=ko(l);if(!s)return I("invalid-ref","module ref requires exact id and version");let f=n.get(sr(s)),C=r.has(s.id),H=Xd(s,t),T=t.some(D=>Ro(D.id,s.id)&&D.version!==s.version);return H?f?{ok:!0,ref:s,registration:f}:C?I("version-mismatch",`no factory for ${s.id}@${s.version}`,s):I("unknown-module",`unknown module "${s.id}"`,s):T||C&&!f?I("version-mismatch",`no allowlisted factory for ${s.id}@${s.version}`,s):!f&&!C?I("unknown-module",`unknown module "${s.id}"`,s):I("not-allowlisted",`${s.id}@${s.version} is not allowlisted`,s)}function h(l,s){let f=sr(l);if(a.has(f))return{ok:!0,ref:Oe(l)};let C=ar({...o??{},...s.capabilities??{}});try{let H=s.create(C);return!H||typeof H.invoke!="function"?I("load-failed",`factory for ${l.id}@${l.version} did not return an invoke() module`,l):(a.set(f,{ref:Oe(l),instance:H}),{ok:!0,ref:Oe(l)})}catch(H){return I("load-failed",wo(H),l)}}function P(l){let s=M(l);return s.ok?h(s.ref,s.registration):s}function G(l,s){let f=M(l);if(!f.ok)return Promise.resolve(f);if(i.maxInvokesPerTurn!==void 0&&v>=i.maxInvokesPerTurn)return Promise.resolve(I("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,f.ref));v+=1;let C=h(f.ref,f.registration);if(!C.ok)return Promise.resolve(C);let H=a.get(sr(f.ref));if(!H)return Promise.resolve(I("load-failed","module instance was not retained",f.ref));let T=new AbortController;d.add(T);let D=Date.now(),L=i.maxInvokeMs,p;L!==void 0&&(p=setTimeout(()=>T.abort(),L));let k=K=>(p!==void 0&&clearTimeout(p),d.delete(T),b?I("destroyed",Ao,f.ref):K),R=K=>T.signal.aborted&&L!==void 0?I("timeout",`invoke exceeded ${L}ms`,f.ref):I("invoke-failed",wo(K),f.ref);try{let K=H.instance.invoke(s,{signal:T.signal,turn:E});return Qd(K)?new Promise(Z=>{let J=!1,$=j=>{J||(J=!0,Z(k(j)))};if(L!==void 0){let j=p;j!==void 0&&clearTimeout(j),p=setTimeout(()=>{T.abort(),$(I("timeout",`invoke exceeded ${L}ms`,f.ref))},Math.max(0,L-(Date.now()-D)))}Promise.resolve(K).then(j=>$({ok:!0,value:j}),j=>$(R(j)))}):L!==void 0&&Date.now()-D>=L?(T.abort(),Promise.resolve(k(I("timeout",`invoke exceeded ${L}ms`,f.ref)))):Promise.resolve(k({ok:!0,value:K}))}catch(K){return Promise.resolve(k(R(K)))}}function B(){b||(E+=1,v=0)}function m(){return{allowlist:t.map(Oe),registered:[...n.values()].map(l=>({id:l.id,version:l.version})),loaded:[...a.values()].map(l=>Oe(l.ref)),turn:E,invokesThisTurn:v,diagnostics:c.map(l=>l.ref?{...l,ref:Oe(l.ref)}:{...l})}}function g(){if(!b){b=!0;for(let l of d)l.abort();d.clear();for(let l of a.values())try{l.instance.destroy?.()}catch{}a.clear(),n.clear(),r.clear(),t.length=0}}return{load:P,invoke:G,beginTurn:B,inspect:m,destroy:g}}var ln={width:320,height:180,deviceScaleFactor:1},tu="Browser harness has been destroyed";function nu(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function dr(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function ur(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function cr(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 xo(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 ru(e){return e.querySelector("[aria-live]")?.textContent??""}function Io(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 iu(e,t,n){let r=Array.from(e.querySelectorAll("*")),i=null,o=Number.POSITIVE_INFINITY;for(let a of r){if(!(a instanceof HTMLElement))continue;let d=a.getBoundingClientRect();if(t>=d.left&&t<d.right&&n>=d.top&&n<d.bottom){let c=Math.max(1,d.width*d.height);c<=o&&(i=a,o=c)}}return i??e}function Po(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 ou(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=e.geometry,r=e.viewport?.width??ln.width,i=e.viewport?.height??ln.height,o=e.viewport?.deviceScaleFactor??ln.deviceScaleFactor,a=e.reducedMotion===!0,d=e.inputModality??"pointer",c=e.origin??0,E=e.fit??"contain",v=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),b=Object.getOwnPropertyDescriptor(window,"innerWidth"),x=Object.getOwnPropertyDescriptor(window,"innerHeight"),I=Po(a),M=()=>{Object.defineProperty(window,"devicePixelRatio",{value:o,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:r,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:i,configurable:!0})};M();let h=document.createElement("div");h.setAttribute("data-cyberart-browser-harness",""),h.style.position="relative",h.style.overflow="auto",h.tabIndex=-1,document.body.appendChild(h);let P=[],G=[],B=!1,m=0,g=e.createId??(()=>`br-${++m}`),l=()=>Wn({contentWidth:e.contentWidth??r,contentHeight:e.contentHeight??i,viewportWidth:r,viewportHeight:i,mode:E,devicePixelRatio:o}),s=l(),f=()=>Math.max(1,Math.round(r*o)),C=()=>Math.max(1,Math.round(i*o)),H=(_,Y)=>{let X=n?.regions.find(S=>S.id===_);if(!X)return;let u=er(X,s);if(u)return Y.style.position=Y.style.position||"absolute",Y.style.left=`${u.x}px`,Y.style.top=`${u.y}px`,Y.style.width=`${u.width}px`,Y.style.height=`${u.height}px`,cr(Y,u.x,u.y,u.width,u.height),{...u}},T=()=>{s=l(),h.style.width=`${r}px`,h.style.height=`${i}px`,ur(h,r,i),cr(h,0,0,r,i),h.dataset.inputModality=d,h.dataset.reducedMotion=a?"true":"false",M()};T();let D=()=>({root:h,get layout(){return dr(s)},get reducedMotion(){return a},get inputModality(){return d},placeRegion:H}),L=e.mount?.(D())??{},p=L.participants??[],k,R,K=()=>{};if(p.length>0){for(let _ of p)_.container&&ur(_.container,f(),C());k=tr({origin:c,width:f(),height:C(),createId:g,now:()=>c,participants:p.map(_=>({..._,seed:_.seed??t,width:_.width??f(),height:_.height??C()}))}),K=k.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",Ce],_=>{G.push(_)}),L.compositor&&(R=ir({...L.compositor,group:k,width:r,height:i,dpr:o}))}let Z=()=>({...D(),group:k,compositor:R,publish(_){if(!k)throw new Error("Browser harness: publish requires mounted carts");return k.publish(_)}}),J=()=>{if(T(),k){let _=f(),Y=C();for(let X of p){X.container&&(ur(X.container,_,Y),X.container.style.width=`${r}px`,X.container.style.height=`${i}px`);try{let u=k.participant(X.id).cart.canvas;u&&(u.style.width=`${r}px`,u.style.height=`${i}px`,cr(u,0,0,r,i))}catch{}}}},$=()=>{if(B)throw new Error(tu)};J(),L.ready?.(Z());let j=(_,Y,X)=>{if(P.push({type:"click",x:_,y:Y,...X?{selector:X}:{}}),X){let O=h.querySelector(X);if(!(O instanceof HTMLElement))throw new Error(`No element matches ${X}`);Io(O,_,Y);return}let u=n!==void 0?Zn({x:_,y:Y},s,n,{space:"css"}):void 0,A=(u?h.querySelector(`#${nu(u.id)}`):null)??iu(h,_,Y);Io(A,_,Y)};return{root:h,get group(){return k},get compositor(){return R},get layout(){return dr(s)},get events(){return G.slice()},goto(){$()},setViewport(_,Y,X){$(),r=Math.max(1,_|0),i=Math.max(1,Y|0),X!==void 0&&(o=X>0?X:1),P.push({type:"viewport",width:r,height:i,dpr:o}),R?R.resize(r,i,o):k&&k.resize(f(),C()),J(),L.relayout?.(Z())},setReducedMotion(_){$(),a=_,I(),I=Po(a),P.push({type:"reducedMotion",value:_}),J(),L.relayout?.(Z())},setInputModality(_){$(),d=_,P.push({type:"inputModality",value:_}),J()},click(_,Y){if($(),typeof _=="string"){let X=h.querySelector(_);if(!(X instanceof HTMLElement))throw new Error(`No element matches ${_}`);let u=X.getBoundingClientRect();j(u.left+u.width/2,u.top+u.height/2,_);return}if(Y===void 0)throw new Error("click(x, y) requires a y coordinate");j(_,Y)},key(_){$(),P.push({type:"key",key:_}),(document.activeElement instanceof HTMLElement?document.activeElement:h).dispatchEvent(new KeyboardEvent("keydown",{key:_,bubbles:!0,cancelable:!0}))},focus(_){$();let Y=h.querySelector(_);if(!(Y instanceof HTMLElement))throw new Error(`No element matches ${_}`);Y.focus()},async step(_=1){$(),P.push({type:"step",frames:_}),k&&await k.step(_)},async advance(_){$(),P.push({type:"advance",ms:_}),k&&await k.step(Math.max(0,Math.round(_/1e3*30)))},screenshot(){if($(),R){let _=R.captureComposedFrame();return{imageData:_.imageData,pngDataUrl:_.pngDataUrl,html:h.outerHTML,declaredOrder:_.declaredOrder.map(Y=>Y.id)}}return{imageData:null,pngDataUrl:null,html:h.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return $(),{focus:xo(document.activeElement),live:ru(h),html:h.outerHTML}},async inspect(){$();let _={},Y={},X=0;if(k){let u=await k.inspect();for(let S of u.diagnostics.participantIds)_[S]=k.participant(S).events.slice(),Y[S]=u.participants[S]?.state,X=u.diagnostics.clocks[S]?.framesElapsed??X}return{host:L.hostState?.()??null,layout:dr(s),events:G.slice(),participantEvents:_,state:Y,focus:xo(document.activeElement),scrollTop:h.scrollTop,clock:{framesElapsed:X}}},reproduction(){return $(),{seed:t,viewport:{width:r,height:i,dpr:o},reducedMotion:a,inputModality:d,actions:P.map(_=>({..._}))}},captureComposedFrame(){if($(),!R)throw new Error("Browser harness: captureComposedFrame requires a compositor");return R.captureComposedFrame()},destroy(){if(!B){B=!0,K(),document.activeElement instanceof HTMLElement&&h.contains(document.activeElement)&&document.activeElement.blur();try{L.destroy?.()}finally{try{R?.destroy()}finally{try{k?.destroy()}finally{h.remove(),I(),v&&Object.defineProperty(window,"devicePixelRatio",v),b&&Object.defineProperty(window,"innerWidth",b),x&&Object.defineProperty(window,"innerHeight",x)}}}}}}}function su(e){return{async goto(){e.goto()},async setViewportSize(t){e.setViewport(t.width,t.height,t.deviceScaleFactor)},async click(t){e.click(t)},async screenshot(){return e.screenshot()},keyboard:{async press(t){e.key(t)}},locator(t){return{async click(){e.click(t)},async focus(){e.focus(t)}}},async close(){e.destroy()}}}var au=128,du=144,uu=176,cu=224,lu=0,pu=15,fu=127,mu=8192,yu=16383;function Lo(e){return Number.isInteger(e)&&e>=0&&e<=15}function vt(e){return Number.isInteger(e)&&e>=0&&e<=127}function pn(e,t){return e&240|t&15}function hu(e){return e&15}function mr(e){if(!Lo(e.channel))return;let t=e.channel;if(e.kind==="noteon"||e.kind==="noteoff"){let n=e.velocity??(e.kind==="noteon"?100:0);if(!vt(e.note)||!vt(n))return;let r=e.kind==="noteon"?144:128;return Uint8Array.from([pn(r,t),e.note,n])}if(e.kind==="cc")return!vt(e.controller)||!vt(e.value)?void 0:Uint8Array.from([pn(176,t),e.controller,e.value]);if(e.kind==="pitch"&&!(!Number.isInteger(e.value)||e.value<0||e.value>16383))return Uint8Array.from([pn(224,t),e.value&127,e.value>>7&127])}function lr(e){let t=pr(e);if(t.length===0)return;let n=t[0],r=n&240,i=n&15;if(n>=128&&t.length>=3){if(r===144||r===128){let o=t[1],a=t[2];return{kind:r===128||a===0?"noteoff":"noteon",channel:i,note:o,velocity:a,status:n,data:t}}if(r===176)return{kind:"cc",channel:i,controller:t[1],value:t[2],status:n,data:t};if(r===224){let o=t[1]|t[2]<<7;return{kind:"pitch",channel:i,value:o,status:n,data:t}}}return{kind:"raw",channel:n>=128?i:void 0,status:n,data:t}}function pr(e){return e instanceof Uint8Array?new Uint8Array(e):Uint8Array.from(e)}function gu(e){return Array.from(e)}function bu(e){if(!("kind"in e))return!1;let t=e.kind;return t==="noteon"||t==="noteoff"||t==="cc"||t==="pitch"}function To(e){if(e instanceof Uint8Array)return pr(e);if(Array.isArray(e))return e.every(t=>Number.isInteger(t)&&t>=0&&t<=255)?Uint8Array.from(e):void 0;if(!(typeof e!="object"||e===null)){if("data"in e&&e.data instanceof Uint8Array&&e.data.length>0)return pr(e.data);if(bu(e))return mr(e)}}function vu(e,t){return e==="*"?!0:e==="note"?t.kind==="noteon"||t.kind==="noteoff":t.kind===e}function Eu(e){return{send(t,n){e.send(Array.from(t),n)}}}function Su(e){if(typeof navigator>"u")return;let t=navigator.requestMIDIAccess;if(typeof t=="function")return t.call(navigator,e)}function Mo(e){if(e instanceof Error&&e.message)return e.message;if(typeof e=="string"&&e.length>0)return e}var fr=class{constructor(t={}){this.listeners=[];this.attachedInputs=new Set;this.inputCount=0;this.outputCount=0;this.destroyed=!1;this.output=t.output,this.outputOwned=t.output!=null,this.requestMIDIAccess=t.requestMIDIAccess,this.onHardwareMessage=this.onHardwareMessage.bind(this),this.onAccessStateChange=this.onAccessStateChange.bind(this)}subscribe(t,n){if(this.destroyed)return()=>{};let r={kind:t,listener:n};return this.listeners.push(r),()=>{this.listeners=this.listeners.filter(i=>i!==r)}}inject(t){if(this.destroyed)return;let n=To(t);if(!n)return;let r=lr(n);r&&this.dispatch(r)}sendNoteOn(t,n,r=100){return this.sendEncoded({kind:"noteon",channel:t,note:n,velocity:r})}sendNoteOff(t,n,r=0){return this.sendEncoded({kind:"noteoff",channel:t,note:n,velocity:r})}sendCc(t,n,r){return this.sendEncoded({kind:"cc",channel:t,controller:n,value:r})}sendPitch(t,n){return this.sendEncoded({kind:"pitch",channel:t,value:n})}send(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};let n=To(t);return!n||n.length===0?{ok:!1,reason:"invalid",detail:"empty MIDI payload"}:this.write(n)}async requestAccess(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};if(this.access)return{ok:!0,inputs:this.inputCount,outputs:this.outputCount,sysexEnabled:this.access.sysexEnabled};let n=this.requestMIDIAccess??Su,r=typeof n=="function"?n({sysex:t?.sysex===!0}):void 0;if(r==null)return{ok:!1,reason:"unavailable",detail:"navigator.requestMIDIAccess is not available"};try{let i=await r;return this.destroyed?{ok:!1,reason:"destroyed"}:(this.attachAccess(i),{ok:!0,inputs:this.inputCount,outputs:this.outputCount,sysexEnabled:i.sysexEnabled})}catch(i){return{ok:!1,reason:"denied",detail:Mo(i)}}}destroy(){this.destroyed||(this.destroyed=!0,this.detachHardware(),this.listeners=[],this.access=void 0,this.outputOwned||(this.output=void 0))}sendEncoded(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};let n=mr(t);return n?this.write(n):{ok:!1,reason:"invalid",detail:"channel, data, or pitch out of range"}}write(t){if(!this.output)return{ok:!1,reason:"no-port"};try{this.output.send(gu(t))}catch(n){return{ok:!1,reason:"invalid",detail:Mo(n)}}return{ok:!0,data:t}}dispatch(t){for(let n of this.listeners)vu(n.kind,t)&&n.listener(t)}deliverBytes(t){let n=lr(t);n&&this.dispatch(n)}onHardwareMessage(t){if(this.destroyed)return;let n="data"in t?t.data:void 0;!n||n.length===0||this.deliverBytes(n)}onAccessStateChange(){this.destroyed||!this.access||this.syncPorts(this.access)}attachAccess(t){this.access=t,this.syncPorts(t),t.addEventListener?.("statechange",this.onAccessStateChange)}syncPorts(t){let n=new Set;t.inputs.forEach(d=>n.add(d));for(let d of[...this.attachedInputs])n.has(d)||(d.removeEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.delete(d));t.inputs.forEach(d=>{this.attachedInputs.has(d)||(d.addEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.add(d))});let r=new Set,i=0;t.inputs.forEach(()=>{i+=1});let o=0;if(t.outputs.forEach(d=>{o+=1,r.add(d)}),this.inputCount=i,this.outputCount=o,this.outputOwned||(this.adoptedHardwareOutput&&!r.has(this.adoptedHardwareOutput)&&(this.output=void 0,this.adoptedHardwareOutput=void 0),this.output))return;let a;t.outputs.forEach(d=>{a||(a=d)}),a&&(this.adoptedHardwareOutput=a,this.output=Eu(a))}detachHardware(){for(let t of this.attachedInputs)t.removeEventListener("midimessage",this.onHardwareMessage);this.attachedInputs.clear(),this.access?.removeEventListener?.("statechange",this.onAccessStateChange),this.outputOwned||(this.output=void 0,this.adoptedHardwareOutput=void 0),this.inputCount=0,this.outputCount=0}};export{Za as ANCHOR_ORIGINS,Ee as ASSET_FAILED_EVENT,ni as ASSET_FAILURE_CODES,ti as ASSET_KINDS,ve as ASSET_READY_EVENT,Ra as AUDIO_CUE_EVENTS,Xt as AUDIO_CUE_FAILED_EVENT,Yt as AUDIO_CUE_SCHEDULED_EVENT,Jt as AUDIO_CUE_SKIPPED_EVENT,Wt as AUDIO_CUE_STARTED_EVENT,Oi as CAPABILITY_ASSET_KINDS,en as CAPABILITY_BLEND_MODES,Fi as CAPABILITY_CART_KINDS,tn as CAPABILITY_CLEAR_POLICIES,Ni as CAPABILITY_INTEGRATIONS,Vi as CAPABILITY_MANAGERS,Ma as CAPABILITY_MANIFEST_VERSION,_i as CAPABILITY_PHASES,kd as COMPOSITOR_BLEND_MODES,Rd as COMPOSITOR_CLEAR_POLICIES,xd as COMPOSITOR_SOURCE_KINDS,Qa as COORDINATE_SPACES,ke as CUE_CANCELLED_EVENT,De as CUE_COMPLETED_EVENT,Ca as CUE_LIFECYCLE_EVENTS,Ae as CUE_REPLACED_EVENT,we as CUE_STARTED_EVENT,Ct as CYBERART_CANVAS_ATTR,ln as DEFAULT_BROWSER_VIEWPORT,Tn as DEFAULT_DUCK_GAIN,no as DEFAULT_GROUP_HEIGHT,to as DEFAULT_GROUP_WIDTH,Ut as DEFAULT_MAX_HOPS,ao as DEFAULT_MAX_INSPECTOR_RECORDS,Ft as ENGINE_SNAPSHOT_RUNTIME,pt as EVENT_ENVELOPE_VERSION,zd as EXECUTABLE_MODULE_ERROR_CODES,Wa as GEOMETRY_CONTRACT_VERSION,vo as HOST_STATE_ACCEPTED_EVENT,Ue as HostChannel,ki as INVALID_PRESENTATION_MODEL_MESSAGE,oe as IncompatibleCartStateError,At as KeyboardManager,Nt as LEGACY_SNAPSHOT_SCHEMA_VERSION,pu as MIDI_CHANNEL_MAX,lu as MIDI_CHANNEL_MIN,uu as MIDI_CONTROL_CHANGE,fu as MIDI_DATA_MAX,au as MIDI_NOTE_OFF,du as MIDI_NOTE_ON,cu as MIDI_PITCH_BEND,mu as MIDI_PITCH_CENTER,yu as MIDI_PITCH_MAX,fr as MidiManager,Ze as PRESENTATION_ADAPTER_VERSION,Kn as PRESENTATION_MODEL_EVENT,wi as PRESENTATION_PHASES,fa as PRESENTATION_SUBSCRIBE_PATTERNS,Ai as PRESENTATION_UNSUPPORTED_EVENT,wt as PointerManager,uo as REDACTED_VALUE,Ce as REJECTED_EVENT_TYPE,rn as REPLAY_INSPECTOR_SCHEMA_VERSION,Ja as ROUND_TRIP_TOLERANCE,Xa as ROUND_TRIP_TOLERANCE_CANVAS_PX,it as Random,ze as SILENT_ASSET_FALLBACK_REF,ae as SNAPSHOT_SCHEMA_VERSION,wn as UNVERSIONED_CART_VERSION,Od as VISUAL_LAYER_EVENTS,ht as VISUAL_LAYER_FAILED_EVENT,Nd as VISUAL_LAYER_FAILURE_CODES,yt as VISUAL_LAYER_HIDDEN_EVENT,bo as VISUAL_LAYER_INCOMING_SUFFIX,ho as VISUAL_LAYER_KINDS,dn as VISUAL_LAYER_REVEALED_EVENT,or as VISUAL_LAYER_SNAPSHOT_SCHEMA_VERSION,go as VISUAL_LAYER_TRANSITIONS,cn as VISUAL_LAYER_TRANSITION_COMPLETED_EVENT,un as VISUAL_LAYER_TRANSITION_STARTED_EVENT,Mi as applyCueEasing,ct as applySnapshotMigrations,Ve as assetStatusEvent,rd as assetToNormalized,Ns as attachCartStatePersistence,Pi as attachPresentationAdapter,It as canonicalizeSeed,Xi as canvasToCss,Qi as canvasToNormalized,za as capabilityManifestToJSON,$d as captureVisualLayers,Ge as cloneSnapshotJson,ua as comparePayloadSchemas,Cd as compareReplayTraces,re as createAssetFailure,In as createAssetPreloader,Mn as createAudioBroker,Li as createAudioCueTimeline,ou as createBrowserHarness,ir as createCompositor,pa as createContractRegistry,Yr as createEngineSnapshotMigrations,On as createEventRouter,eu as createExecutableModuleHost,As as createFixtureAssetResolver,Ta as createHeadlessAudioAdapter,ws as createHostedAssetResolver,od as createLandmarkRegistry,su as createPlaywrightCompatibleAdapter,Wn as createPresentationLayout,Hn as createPresentationModelEvent,et as createPresentationTimeline,Ii as createReferencePresentationCart,co as createReplayInspector,Ln as createRuntime,tr as createRuntimeGroup,Wr as createSnapshotMigrationRegistry,kt as createVirtualClock,qd as createVisualLayerController,Ke as createWallClock,Ji as cssToCanvas,Xn as cssToNormalized,Jr as defaultSnapshotMigrationRegistry,Yn as defineCapabilityManifest,da as defineDiagnostic,sa as defineIntent,jr as defineSnapshot,aa as defineStateEvent,ca as deriveAttachOptions,Hr as describeReplayMismatch,dt as detectSnapshotSchemaVersion,ad as drawGeometryDebug,mr as encodeMidiMessage,fs as engineStateFromEnvelope,Si as familyPatternForType,bi as inferEventKind,Kt as isAssetFailure,ii as isAssetFailureCode,ri as isAssetKind,xa as isAudioCueEventType,Aa as isCueLifecycleType,je as isLegacyCartStateBundle,Lo as isMidiChannel,vt as isMidiData,Bn as isPresentationModel,Ri as isPresentationPhase,os as isSnapshotEnvelope,ss as isVersionedSnapshot,Bd as isVisualLayerEventType,Eo as isVisualLayerKind,So as isVisualLayerTransitionKind,Ei as kindSegmentInType,vi as matchEventPattern,hu as midiChannelFromStatus,pn as midiStatus,Sa as mountPresentationAdapter,Gt as normalizeEvent,nd as normalizedToAsset,id as normalizedToCanvas,Jn as normalizedToCss,qa as parseCapabilityManifest,ud as parseGeometry,lr as parseMidiBytes,Ht as parseSnapshot,td as pointFromOrigin,Zn as pointerToRegion,Zi as rectToCanvas,Qn as rectToCss,er as regionToViewport,Ps as registerCartStateHotkeys,wd as replayExportedTrace,kn as resolveImportableCartState,Pt as resolveRuntimeSeed,Rn as restoreSnapshotFromUnknown,ai as rewriteHostedAssetRef,Pa as scheduleAudioCue,dd as serializeGeometry,_e as snapshotErrorsToMessage,ut as snapshotFromCartBundle,Ya as validateCapabilityManifest,sd as validateGeometry,qe as validateSnapshot,la as verifyAttachOptions,Co as visualIncomingLayerId};
|
|
8
|
+
var _o=Object.defineProperty;var gr=(e,t)=>()=>(e&&(t=e(e=0)),t);var Vo=(e,t)=>{for(var n in t)_o(e,n,{get:t[n],enumerable:!0})};var Go={};function Uo(e,t){let n=e.indexOf(Tr);if(n===-1)return null;let r=n+Tr.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 mn,Tt,$o,st,Tr,Mr=gr(()=>{"use strict";mn=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,Tt="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[Tt]&&(window.addEventListener("error",e=>{let t=e?.message??"";mn.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";mn.test(n)&&e.preventDefault()}),window[Tt]=!0);$o=!1,st=(...e)=>{$o&&console.log("[workletPatch]",...e)},Tr="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[Tt]){let e=new WeakMap,t=/registerProcessor\s*\(\s*['"`]([^'"`]+)['"`]/g,n=AudioWorklet.prototype.addModule,r=0;AudioWorklet.prototype.addModule=async function(o,a){let d=++r,l=e.get(this);l||(l=new Set,e.set(this,l)),st(`#${d} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...l]});let b=o,g=null;if(o.startsWith("blob:")){let v=null;try{v=await(await fetch(o)).text()}catch(w){st(`#${d} blob fetch failed`,w)}if(v!==null){let w=new Set;for(let I of v.matchAll(t))w.add(I[1]);if(w.size>0){let I=[...w].filter(y=>l.has(y)),T=[...w].filter(y=>!l.has(y));if(I.length>0&&T.length===0){st(`#${d} short-circuit \u2014 all processors already registered`,I);return}if(I.length>0&&T.length>0){let y=Uo(v,I);if(y!==null){let P=new Blob([y],{type:"application/javascript"});g=URL.createObjectURL(P),b=g,st(`#${d} rewrote blob; skipping`,I,"allowing",T)}else st(`#${d} blob rewrite failed; passing original through`)}T.forEach(y=>l.add(y))}}}return n.call(this,b,a).then(()=>{g&&URL.revokeObjectURL(g)},v=>{g&&URL.revokeObjectURL(g);let w=(v&&v.message)??"";if(!(mn.test(w)||/already registered/i.test(w)))throw v})},AudioWorklet.prototype[Tt]=!0}});var Dr={};Vo(Dr,{AUDIO_LIBRARIES:()=>yn,adaptersFor:()=>Dt,importTone:()=>Mt,normalizeAudioLibraries:()=>Lt});async function Mt(){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 Lt(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in yn)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function Dt(e){return e.map(t=>yn[t])}var Lr,yn,hn=gr(()=>{"use strict";Lr={id:"tone",async load(){await Promise.resolve().then(()=>(Mr(),Go))},async unlock(){await Lr.load(),await(await Mt()).start()},async resumeIfSuspended(){let e=await Mt();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await Mt()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},yn={tone:Lr}});var br=()=>{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"]},le=window.devicePixelRatio||1,Fe=/Headless/i.test(navigator.userAgent),Au=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function vr(){return Math.min(window.innerWidth,window.innerHeight)}var Ct="data-cyberart-canvas",He=class{constructor(t,n,r=1,i={}){this.width=t,this.height=n;let o=i.container,a=i.adoptFromDocument??!o,d=o?o.querySelector(`canvas[${Ct}]`)??o.querySelector("canvas"):null;if(d)this.canvas=d,this.adopted=!0;else if(a){let l=document.getElementById("canvas")??document.querySelector("canvas");l?(this.canvas=l,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(Ct)||this.canvas.setAttribute(Ct,""),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/le}px`,this.canvas.style.height=`${n/le}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 Er(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 Sr(e,t=window.innerWidth,n=window.innerHeight){let r=vr(),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 At=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={}}},Cr=At;var wt=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))}},Ar=wt;function Ke(){return{now:()=>performance.now()}}function kt(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var wr=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),Rt=class{constructor(t,n,r,i,o,a={}){this.startTime=0;this.lastUpdateAt=null;this.lastRenderAt=null;this.clockOffsetMs=0;this.pauseStartedAt=null;this.renderAnimation=this.renderAnimation.bind(this),this.dimensionContext=Er(t,n),this.R=r,this.gameManager=a.gameManager,this.hostChannel=a.hostChannel,this.clock=a.clock??Ke(),this.kind=a.kind??"render",this.keyboardManager=new Cr(!1,a.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new He(this.dimensionContext.width,this.dimensionContext.height,1,a.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new Ar(this.canvas.canvas,{listen:a.listenToPointer!==!1})),this.animationCart=o;let d=a.customState;this.featureState=o.getDefaultFeatureState?.(this.R,this.dimensionContext,i,this.keyboardManager,d,this.pointerManager,this.gameManager,this.hostChannel),this.cartState=o.getDefaultState(this.R,this.dimensionContext,i,this.keyboardManager,d,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=wr(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=wr(i,this.startTime,this.lastUpdateAt,this.lastRenderAt),a=this.drawingContext,d=this.canvas?.imageData;this.kind!=="calculation"&&this.animationCart.render&&a&&d&&this.animationCart.render(this.R,t,n,this.dimensionContext,this.cartState,a,d,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 xt=class extends He{constructor(t,n,r=1,i=!0,o={}){if(super(t,n,r,o),this.adopted)return;let a=o.container;if(a){this.canvas.parentNode!==a&&a.appendChild(this.canvas);return}if(i){let d=document.getElementById("canvas");d&&d!==this.canvas&&d.parentNode===document.body&&document.body.removeChild(d),document.body.appendChild(this.canvas)}}};function kr(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 a=(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+a|0,(a>>>0)/4294967296},getRegs:()=>({a:t,b:n,c:r,d:i}),setRegs:a=>{t=a.a,n=a.b,r=a.c,i=a.d}}}var it=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=kr(t.hash.substring(2,32)),this.genB=kr(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 xr="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",Rr="https://ipfs.io/ipfs/";function Oo(e){return e.endsWith("/")?e:`${e}/`}var ot=null;function No(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function Fo(e){return e&&e.length>0?e:[{cid:xr}]}function Ho(e){return e.startsWith("0x")?e:`0x${e}`}var Ir=/^(0[xX])?[0-9a-fA-F]{64}$/;function Ko(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 It(e){let t=typeof e=="number"?String(e):e;return Ir.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:Ko(t)}function Pt(e,t){if(typeof e=="number"||t==="deterministic")return It(e);let n=String(e);return Ir.test(n)?It(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function Bo(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:Fo(tokenData.externalAssetDependencies),preferredIPFSGateway:Oo(tokenData.preferredIPFSGateway||Rr),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?Ho(e):t.get("hash")||`0x${No(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:xr}],preferredIPFSGateway:Rr}}function fn(e){let t=e?.useCache!==!1;if(t&&ot&&!e?.hash)return ot;let n=Bo(e?.hash);return t?ot=n:ot||(ot=n),n}function Pr(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}hn();var _t="$cyberartTa",oe=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},gn={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function jo(e){for(let t of Object.keys(gn))if(e instanceof gn[t])return t}function Vr(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function he(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function bn(e){return he(e)?typeof e[_t]=="string"&&Array.isArray(e.d):!1}function qo(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||Vr(e)||he(e))}var zo=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function _r(e){return e===null?"null":bn(e)?String(e[_t]):Array.isArray(e)?"array":he(e)?"object":typeof e}function Yo(e,t){return e===t||e==="null"||t==="null"}function Ie(e){return e.trim().toLowerCase().replace(/^0x/,"")}function Or(e,t,n,r){if(!(!n&&!r)&&Ie(e)!==Ie(t))throw new oe(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function Be(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Nr(e,t){let n=e.dimensions;if(n&&Be(n.width)&&Be(n.height))return n;if(t&&Be(t.width)&&Be(t.height))return{width:t.width,height:t.height};if(he(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(Be(r)&&Be(i))return{width:r,height:i}}return null}function $e(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(Vr(e)){let n=jo(e);return n?{[_t]: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 a of e){let d=$e(a,t);d!==void 0&&(i.push(d),o++)}return e.length>0&&o===0?void 0:i}if(!he(e)||qo(e))return;let n=Object.keys(e),r={};for(let i of n){if(zo.has(i))continue;let o=$e(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 at(e){if(bn(e)){let t=gn[e[_t]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>at(t));if(he(e)){let t={};for(let n of Object.keys(e))t[n]=at(e[n]);return t}return e}function vn(e,t,n,r,i=!0){if(i&&n&&r&&n!==r)throw new oe(`Cart state is for "${r}", but the live cart is "${n}"`);if(!he(t)){if(i)throw new oe("Cart state snapshot is empty");return}let o=Object.keys(t);if(o.length===0){if(i)throw new oe("Cart state snapshot is empty");return}let a=$e(e);if(!he(a)||Object.keys(a).length===0){if(i)throw new oe("Live cart has no serializable state");return}let d=o.filter(l=>l in a);if(d.length===0){if(i)throw new oe("Cart state snapshot does not overlap the live cart shape");return}for(let l of d){let b=_r(a[l]),g=_r(t[l]);if(!Yo(b,g))throw new oe(`Cart state field "${l}" has type ${g}, live cart expects ${b}`);if(b==="object"){let v=t[l],w=e[l];he(v)&&!bn(v)&&vn(w,v,void 0,void 0,!1)}}}function Fr(e,t){if(!he(e)||!he(t))return;let n=$e(e);if(he(n))for(let r of Object.keys(t))r in n&&(e[r]=at(t[r]))}function ce(e){let t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object")throw new oe("Cart state bundle is not an object");if(t.version!==1)throw new oe(`Unsupported cart state version ${String(t.version)}`);if(typeof t.seed!="string"||typeof t.framesElapsed!="number")throw new oe("Cart state bundle is missing seed or framesElapsed");return t}var ve="cyberart.asset.ready",Ee="cyberart.asset.failed";function Pe(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ge(e){try{return JSON.stringify(e)}catch{return String(e)}}function En(e,t,n){let r=t??[],i=n??[],o=Math.max(r.length,i.length);for(let a=0;a<o;a++)if(ge(r[a])!==ge(i[a]))return`${e}[${a}]: ${ge(r[a])} vs ${ge(i[a])}`}function Hr(e,t){let n=[];e.seed!==t.seed&&n.push(`seed: ${e.seed} vs ${t.seed}`),e.clock.framesElapsed!==t.clock.framesElapsed&&n.push(`framesElapsed: ${e.clock.framesElapsed} vs ${t.clock.framesElapsed}`),e.clock.now!==t.clock.now&&n.push(`now: ${e.clock.now} vs ${t.clock.now}`),e.clock.frameRate!==t.clock.frameRate&&n.push(`frameRate: ${e.clock.frameRate} vs ${t.clock.frameRate}`),ge(e.rng)!==ge(t.rng)&&n.push(`rng: ${ge(e.rng)} vs ${ge(t.rng)}`);let r=En("actions",e.actions,t.actions);r&&n.push(r);let i=En("applied",e.applied,t.applied);i&&n.push(i);let o=En("events",e.events,t.events);return o&&n.push(o),ge(e.state)!==ge(t.state)&&n.push(`state: ${ge(e.state)} vs ${ge(t.state)}`),n}function Kr(e){return{type:e.status==="ready"?ve:Ee,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function Jo(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 Xo(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 Qo=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],Cn=Qo[0],Zo=Cn[0]/Cn[1],Sn=30,es=120,ts=3840/2160,ns=2160/3840,Vt=class{constructor(t=Sn,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,a,d={}){this.framesElapsed=0;this.frameRate=Sn;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=d.container,this.seed=d.seed,this.captureKeyboard=d.captureKeyboard??!0,this.customState=d.customState,this.hostChannel=d.hostChannel,this.fallbackAudio=Lt(d.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=d.kind??"render",this.onFrameTiming=d.onFrameTiming;let l=d.deterministic;this.deterministic=!!l;let b=l&&typeof l=="object"?l:{};if(this.deterministic){if(d.clock){let g=d.clock;if(typeof g.advance!="function")throw new Error("deterministic mode requires a virtual clock with advance()");this.virtualClock=g,this.clock=g}else this.virtualClock=kt(b.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=Pe(b.actions??[]),this.scriptedActions=Pe(this.initialScriptedActions)}else this.clock=d.clock??Ke();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=Zo,this.selectedAsp=Cn,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=Fe,this.containerWidth=r,this.containerHeight=i,this.gameManager=a,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?fn({hash:this.seed,useCache:!1}):fn(),this.rawParams=Pr(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]=Sr(n,this.containerWidth,this.containerHeight);r*=le,i*=le,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 xt(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 it(this.tokenData),o=new Rt(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=Pe(this.initialScriptedActions),this.appliedActions=[],this.consumedActionIndexes=new Set,this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.deterministic&&this.hostChannel&&(this.outboundUnsubscribe=this.hostChannel.onEvent(a=>{this.outboundEvents.push(a)})),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??Sn,o=n.cartState?.visualMode??n.featureState?.visualMode,a=o&&r?.frameRateByVisualMode?r.frameRateByVisualMode[o]:void 0;this.updateFrameRate(typeof a=="number"&&a>0?a:i)}get audioLibraries(){return this.audioLibrariesInternal}get needsAudio(){return this.audioLibrariesInternal.length>0}resolveAudioLibraries(t){this.audioLibrariesInternal=Lt(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=Dt(this.audioLibrariesInternal);if(Fe){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||Fe))for(let t of Dt(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(Pe(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:Pe(this.scriptedActions),applied:Pe(this.appliedActions),events:Pe(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(Kr(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:le},state:$e(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=ce(t),o=this._paused,a=this.loopRunning;this.paused=!0,await this.waitUntilUpdateIdle(),vn(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),Or(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let d=Nr(i,n?.framebuffer??this.lastExportedFramebuffer);if(d){this.pinOutputSize(d);let g=d.cssWidth??d.width/le,v=d.cssHeight??d.height/le;Xo(g,v),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let l=this.customState,b=!1;try{if(this.customState=at(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&Fr(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let g=this.animation,v=g.cartState,w=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:Jo(v);g.restoreClock(w,typeof v?.startTime=="number"?v.startTime:void 0),o&&g.setPaused(!0);let I=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(I&&g.restoreFramebuffer(I)?v.keepRatioPrimed=!0:await g.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),b=!0}catch(g){throw this.clearPinnedOutput(),this.customState=l,this.paused=o,this.animationCart&&(this.syncContainerFromDom(),this.init(),this.reloadCart()),g}finally{this.importing=!1,b&&(this.customState=l,this.paused=o,a&&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&&!Fe&&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/le,h:t.cssHeight??t.height/le}}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/le,a=t.height/le;if(o<1||a<1||r<1||i<1)return;let d=Math.min(r/o,i/a),l=o*d,b=a*d;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=`${l}px`,n.style.height=`${b}px`,n.style.imageRendering=Math.abs(d-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,a,d="update",l=this.onFrameTiming,b=0,g=0,v=0;try{if(r||!this.paused||this.tempUnpause){if(!Fe&&!r&&this.tuneFramerate(t),!this.animation)return;d="update",this.updateInProgress=!0;let I=l?performance.now():0;if(await this.animation.updateAnimationState(this.framesElapsed,this.rawParams,t),l&&(b=performance.now()-I),this.updateInProgress=!1,this.kind!=="calculation"){d="render";let T=l?performance.now():0;await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t),l&&(g=performance.now()-T)}if(this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let P=localStorage.getItem("goodones"),$=JSON.stringify(P?[...JSON.parse(P),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)}d="draw";let w=l?performance.now():0;this.drawIt(),l&&(v=performance.now()-w)}catch(w){o=!0,a=w,this.handleFrameError(w,d)}finally{this.updateInProgress=!1,l&&!o&&l({frame:this.framesElapsed,updateMs:b,renderMs:g,drawMs:v,totalMs:b+g+v})}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=es&&(this.loopRunning=!1,this.onError?.(a,{phase:d,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(ts,Math.max(ns,o))}else this.aspectRatio=t[0]/t[1]}};var rs="HostChannel has been destroyed",Ue=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(rs)}};var ae=2,Nt=1,Ft="0.0.5",wn="0",$r="1970-01-01T00:00:00.000Z";function ie(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Ge(e){return JSON.parse(JSON.stringify(e))}function te(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function Ur(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){te(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{te(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function se(e){return typeof e=="string"&&e.length>0}function Ot(e){return typeof e=="number"&&Number.isFinite(e)}function is(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function je(e){return!ie(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function os(e){return ie(e)&&e.schemaVersion===ae&&ie(e.engineState)}function ss(e){return ie(e)&&typeof e.schemaVersion=="number"&&ie(e.engineState)}function dt(e){if(ie(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if(je(e))return Nt}}function An(e,t,n){try{return Ge(ce(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";te(n,"invalid-engine-state",i,t);return}}function as(e,t,n){if(!ie(e)){te(n,"invalid-field","cart must be an object",t);return}se(e.id)||te(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),se(e.version)||te(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"?te(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function ds(e,t,n){if(!ie(e)){te(n,"invalid-field","clock must be an object",t);return}if(!Ot(e.framesElapsed)){te(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(Ot(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:te(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(Ot(e.now)?r.now=e.now:te(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(Ot(e.frameRate)?r.frameRate=e.frameRate:te(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function us(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){te(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let a=`${t}[${o}]`;if(!ie(i)||!se(i.id)||!se(i.version)){te(n,"invalid-field","module refs need non-empty id and version",a);return}r.push({id:i.id,version:i.version})}),r}function cs(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){te(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let a=`${t}[${o}]`;if(!ie(i)||!se(i.id)){te(n,"invalid-field","asset refs need a non-empty id",a);return}let d={id:i.id};i.version!==void 0&&(se(i.version)?d.version=i.version:te(n,"invalid-field","asset.version must be a non-empty string",`${a}.version`)),i.ref!==void 0&&(se(i.ref)?d.ref=i.ref:te(n,"invalid-field","asset.ref must be a non-empty string",`${a}.ref`)),r.push(d)}),r}function ls(e,t,n){if(e===void 0)return;if(!ie(e)||!se(e.seed)){te(n,"invalid-field","rng must include a seed",t);return}if(!ie(e.prngA)||!ie(e.prngB)){te(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){te(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return Ur(e,t,n)}function ps(e,t,n){if(e===void 0)return;if(!ie(e)){te(n,"invalid-field","provenance must be an object",t);return}let r={};return e.source!==void 0&&(se(e.source)?r.source=e.source:te(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!ie(e.integrity)||!se(e.integrity.alg)||!se(e.integrity.hash)?te(n,"invalid-field","provenance.integrity needs alg and hash strings",`${t}.integrity`):r.integrity={alg:e.integrity.alg,hash:e.integrity.hash}),r}function Gr(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==ae&&te(t,"invalid-schema",`defineSnapshot produces schema ${ae}`,"schemaVersion"),se(e.seed)||te(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?Ft:e.runtimeVersion;se(n)||te(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;is(r)||te(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=as(e.cart,"cart",t),o=ds(e.clock,"clock",t),a=An(e.engineState,"engineState",t),d=us(e.modules,"modules",t),l=cs(e.assets,"assets",t),b=ls(e.rng,"rng",t),g=ps(e.provenance,"provenance",t),v;if(e.hostState!==void 0&&(v=Ur(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!se(e.hostStateRef)&&te(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!a||!se(e.seed))return;let w={schemaVersion:ae,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:a,createdAt:r};return d&&d.length>0&&(w.modules=d),b&&(w.rng=b),v!==void 0&&(w.hostState=v),se(e.hostStateRef)&&(w.hostStateRef=e.hostStateRef),l&&l.length>0&&(w.assets=l),g&&(g.source||g.integrity)&&(w.provenance=g),w}function jr(e){if(!ie(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=Gr(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function ut(e,t){return se(e.cartId)?jr({cart:{id:e.cartId,version:t?.cartVersion??wn,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 Br(e){let t=Ge(e),n={schemaVersion:Nt,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:wn,generative:t.generative}),n}function Ht(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(!ie(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(je(t))try{return{ok:!0,snapshot:Br(ce(t))}}catch(r){return{ok:!1,errors:[{code:"invalid-engine-state",detail:r instanceof Error?r.message:"Cart state bundle is invalid"}]}}let n=dt(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===Nt){let r=[],i=An(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:Br(i)}}if(n!==ae){if(n>ae)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${n} is newer than ${ae}`,path:"schemaVersion"}]};let r=[],i=An(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 qe(t)}function qe(e){if(!ie(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(e.schemaVersion!==ae)return{ok:!1,errors:[{code:"invalid-schema",detail:`Expected snapshot schema ${ae}`,path:"schemaVersion"}]};let t=[],n=Gr(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function _e(e){return e.map(t=>t.detail).join("; ")}function qr(e){if(je(e))return ce(e);if(ie(e)&&e.engineState!==void 0)return ce(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function fs(e){return ce(Ge(e.engineState))}function Yr(){return[{from:1,to:2,migrate:ys}]}function Wr(e){let t=[...e?.migrations??Yr()],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 ms=Wr();function Jr(){return ms}function ys(e){let t=qr(e),n=ut(t,{createdAt:$r,runtimeVersion:Ft});if(n.ok===!1)throw new Error(_e(n.errors));return n.snapshot}function zr(e){try{return Ge(e)}catch{return}}function ct(e,t=Jr()){let n=zr(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=dt(r);if(i===void 0){let o=Ht(r);if(o.ok===!1)return o;r=o.snapshot,i=o.snapshot.schemaVersion}if(i>ae)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${i} is newer than ${ae}`,path:"schemaVersion"}]};if(i===ae)return qe(r);for(;i<ae;){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 a;try{a=o.migrate(zr(r))}catch(l){let b=l instanceof Error?l.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${b}`,path:"schemaVersion"}]}}let d=dt(a);if(d!==o.to)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} produced schema ${String(d)}`,path:"schemaVersion"}]};if(o.to===ae){let l=qe(a);if(l.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"},...l.errors]};r=l.snapshot}else r=a;i=o.to}return qe(r)}function kn(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=ct(n,t);if(i.ok===!1)return i;try{return{ok:!0,bundle:ce(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:ce(n)}}catch(i){return{ok:!1,errors:[{code:"invalid-engine-state",detail:i instanceof Error?i.message:"Cart state bundle is invalid"}]}}}function Rn(e,t){let n=Ht(e);return n.ok===!1?n:ct(n.snapshot,t)}var ti=["image","audio","font","spritesheet"],ni=["timeout","cors","not-found","invalid","aborted","resolver"],ze="cyberart:fallback/silent",Xr="Asset preloader has been destroyed",hs=4,gs=new Set(ti),bs=new Set(ni),vs={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"};function ri(e){return typeof e=="string"&&gs.has(e)}function ii(e){return typeof e=="string"&&bs.has(e)}function Kt(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&ii(t.code)&&typeof t.message=="string"}function re(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:vs[e.code]}}function Ve(e,t){return{type:e==="ready"?ve:Ee,kind:"state",payload:t}}function oi(e){if(!e?.aborted)return;let t=new Error("aborted");throw t.name="AbortError",t}function Es(e){return e instanceof Error&&e.name==="AbortError"||typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"}function xn(e){return e?{...e}:void 0}function Se(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=xn(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function lt(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function Ss(e){if(e.state==="ready"){let t={state:"ready",resource:Se(e.resource)};return e.failure&&(t.failure=lt(e.failure)),t}return e.state==="failed"?{state:"failed",failure:lt(e.failure)}:{state:e.state}}function Cs(e){return/^https?:/i.test(e)}function si(e){return e.endsWith("/")?e:`${e}/`}function ai(e,t){let n=si(t);if(/^(https?:|data:|blob:)/i.test(e))return e;let r=/^moltazine:post\/([^#]+)#(.+)$/.exec(e);if(r)return`${n}moltazine/${encodeURIComponent(r[1])}/${r[2]}`;let i=/^world:asset\/(.+)$/.exec(e);if(i)return`${n}world/${i[1]}`;let o=/^library:(.+)$/.exec(e);return o?`${n}library/${o[1]}`:`${n}${e.replace(/^\//,"")}`}function As(e){return{async resolve(t,n){oi(n);let r=e[t.ref];if(!r)throw re({id:t.id,ref:t.ref,code:"not-found",message:`no fixture for ${t.ref}`});if("error"in r)throw re({id:t.id,ref:t.ref,code:r.error,message:r.message});return{id:t.id,ref:t.ref,type:t.type,url:r.url,integrity:r.integrity??t.integrity,cors:r.cors??"omit",provenance:r.provenance??t.provenance}}}}function ws(e){let t=si(e.cdnBase);return{async resolve(n,r){oi(r);let i=e.failures?.[n.ref];if(i){let a=typeof i=="string"?i:i.code,d=typeof i=="string"?void 0:i.message;throw re({id:n.id,ref:n.ref,code:a,message:d})}let o=ai(n.ref,t);return{id:n.id,ref:n.ref,type:n.type,url:o,integrity:n.integrity,cors:Cs(o)?"anonymous":"omit",provenance:n.provenance}}}}function ks(e){if(!e||typeof e!="object")return re({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return re({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 re({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!ri(e.type))return re({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return re({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 re({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function Qr(e){return{id:e.id,ref:ze,type:e.type,url:ze,usedFallback:!0,cors:"omit"}}function Zr(e,t){return Kt(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:Es(t)?re({id:e.id,ref:e.ref,code:"aborted"}):re({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function ei(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw re({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw re({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=Se(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=xn(e.provenance)),n}function In(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,a=new Map,d=new Map,l=new Map,b=new Map,g=new Set,v=!1;function w(p){return p.code==="aborted"||p.code==="timeout"}function I(p,S,x){let N=Zr(p,x);return N.code==="timeout"?N:S.aborted?re({id:p.id,ref:p.ref,code:"aborted"}):N}function T(p,S){let x=b.get(p);x||(x=new Set,b.set(p,x)),x.add(S)}function y(p){if(p?.state==="ready")return`${p.resource.type}\0${p.resource.ref}`}function P(p,S){for(let[x,N]of b)if(x!==S&&N.has(p))return!0;for(let[x,N]of r)if(x!==S&&y(N)===p)return!0;return!1}function $(p,S){let x=new Set(b.get(p)),N=y(S);N&&x.add(N),b.delete(p);for(let W of x)P(W,p)||d.delete(W)}function H(){let p=0,S=0,x=0,N=0,W={};for(let[Y,U]of r)W[Y]=Ss(U),U.state==="pending"||U.state==="loading"?p+=1:U.state==="failed"?x+=1:(S+=1,(U.resource.usedFallback||U.failure)&&(N+=1));return{total:r.size,pending:p,ready:S,failed:x,fallbacks:N,items:W,failures:i.map(lt)}}function E(){if(g.size===0)return;let p=H();for(let S of g)S(p)}function h(p){i.push(lt(p))}function u(p){v||!t||!e.dispatch||e.dispatch(p)}function s(p){if(p?.managed&&p.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(p.url)}catch{}}function f(p,S){if(v)return;let x=r.get(p);x?.state==="ready"&&s(x.resource),r.set(p,S),E()}function R(p){if(p.fallback!==void 0)return p.fallback==="silent"?{id:`${p.id}::fallback`,ref:ze,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 L(p,S,x){let N=`${p.type}\0${p.ref}`,W=d.get(N);if(W)return S.aborted?Promise.reject(re({id:p.id,ref:p.ref,code:"aborted"})):(T(x,N),Promise.resolve(Se(W.resource)));if(S.aborted)return Promise.reject(re({id:p.id,ref:p.ref,code:"aborted"}));let Y=l.get(N);if(!Y){let j=new AbortController,ne={id:p.id,ref:p.ref,type:p.type};p.integrity!==void 0&&(ne.integrity=p.integrity),p.provenance&&(ne.provenance=xn(p.provenance)),Y={promise:Promise.resolve().then(()=>e.resolver.resolve(ne,j.signal)).then(J=>{let Q=ei(p,J);if(j.signal.aborted)throw re({id:p.id,ref:p.ref,code:"aborted"});return d.set(N,{resource:Se(Q)}),Q}).catch(J=>{throw Zr(p,J)}).finally(()=>{l.delete(N)}),controller:j,waiters:0},l.set(N,Y)}let U=Y;return U.waiters+=1,new Promise((j,ne)=>{let _=!1,J=(c,C)=>{_||(_=!0,S.removeEventListener("abort",Q),U.waiters-=1,C&&U.waiters<=0&&U.controller.abort(),c())},Q=()=>{J(()=>ne(re({id:p.id,ref:p.ref,code:"aborted"})),!0)};if(S.aborted){Q();return}S.addEventListener("abort",Q,{once:!0}),U.promise.then(c=>{if(!_){if(S.aborted){Q();return}T(x,N),J(()=>j(Se(c)),!1)}},c=>{if(!_){if(S.aborted){Q();return}J(()=>ne(c),!1)}})})}function D(p,S,x){if(S.aborted)return Promise.reject(re({id:p.id,ref:p.ref,code:"aborted"}));if(p.ref===ze)return Promise.resolve(Qr(p));let N=new AbortController,W=()=>N.abort();S.addEventListener("abort",W,{once:!0});let Y=p.timeoutMs??e.timeoutMs,U,j=!1;return n&&Y!==void 0&&Y>0&&Number.isFinite(Y)&&(U=setTimeout(()=>{j=!0,N.abort()},Y)),L(p,N.signal,x).then(ne=>{let _=ei(p,ne);return _.id=p.id,_}).catch(ne=>{throw j?re({id:p.id,ref:p.ref,code:"timeout"}):ne}).finally(()=>{U!==void 0&&clearTimeout(U),S.removeEventListener("abort",W)})}async function V(p,S,x,N){try{return{resource:await D(p,S,N)}}catch(W){let Y=I(p,S,W);if(w(Y)||S.aborted||x>=hs)throw Y;let U=R(p);if(!U)throw Y;if(S.aborted)throw re({id:p.id,ref:p.ref,code:"aborted"});if(p.fallback==="silent"||U.ref===ze)return{resource:Qr(p),failure:Y};try{let j=await V(U,S,x+1,N);return{resource:{...Se(j.resource),id:p.id,usedFallback:!0},failure:Y}}catch(j){let ne=Kt(j)&&!w(j)&&!S.aborted?j:I(p,S,j);throw!w(ne)&&!S.aborted&&h(Y),ne}}}async function M(p,S){if(v)throw new Error(Xr);let x=r.get(p.id);if(x?.state==="ready"||x?.state==="failed")return;let N=o.get(p.id);if(N){await N;return}let W=(async()=>{let Y=ks(p);if(Y){f(p.id,{state:"failed",failure:Y}),h(Y),u(Ve("failed",{id:p.id,ref:p.ref,failure:Y}));return}f(p.id,{state:"loading"});let U=a.get(p.id)??new AbortController;a.has(p.id)||a.set(p.id,U);try{let j=await V(p,U.signal,S,p.id);if(v)return;if(U.signal.aborted){let ne=re({id:p.id,ref:p.ref,code:"aborted"});f(p.id,{state:"failed",failure:ne}),h(ne),u(Ve("failed",{id:p.id,ref:p.ref,failure:ne}));return}if(j.resource.id=p.id,j.failure){f(p.id,{state:"ready",resource:j.resource,failure:j.failure}),h(j.failure),u(Ve("failed",{id:p.id,ref:p.ref,failure:j.failure,resource:Se(j.resource)})),u(Ve("ready",{id:p.id,ref:j.resource.ref,resource:Se(j.resource),failure:j.failure}));return}f(p.id,{state:"ready",resource:j.resource}),u(Ve("ready",{id:p.id,ref:p.ref,resource:Se(j.resource)}))}catch(j){if(v)return;let ne=Kt(j)&&!w(j)&&!U.signal.aborted?{...lt(j),id:p.id}:I(p,U.signal,j);f(p.id,{state:"failed",failure:ne}),h(ne),u(Ve("failed",{id:p.id,ref:p.ref,failure:ne}))}finally{a.get(p.id)===U&&a.delete(p.id)}})();o.set(p.id,W);try{await W}finally{o.delete(p.id)}}return{async preload(p){if(v)throw new Error(Xr);let S=Array.isArray(p)?p:[];for(let x of S)x&&typeof x.id=="string"&&x.id.length>0&&(r.has(x.id)||r.set(x.id,{state:"pending"}),a.has(x.id)||a.set(x.id,new AbortController));return E(),await Promise.all(S.map(x=>M(x,0))),H()},get(p){let S=r.get(p);if(S?.state==="ready")return Se(S.resource)},getProgress(){return H()},onProgress(p){return g.add(p),()=>{g.delete(p)}},abort(p){if(!v){if(p!==void 0){a.get(p)?.abort();return}for(let S of a.values())S.abort()}},forget(p){if(v)return;if(p===void 0){for(let x of r.values())x.state==="ready"&&s(x.resource);r.clear(),i.length=0,d.clear(),b.clear(),E();return}let S=r.get(p);S?.state==="ready"&&s(S.resource),$(p,S),r.delete(p);for(let x=i.length-1;x>=0;x--)i[x].id===p&&i.splice(x,1);E()},dispose(){if(!v){v=!0;for(let p of a.values())p.abort();a.clear();for(let p of r.values())p.state==="ready"&&s(p.resource);r.clear(),i.length=0,o.clear();for(let p of l.values())p.controller.abort();d.clear(),l.clear(),b.clear(),g.clear()}}}}var Tn=.25;function Ye(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function Pn(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function Rs(e){return e instanceof Error&&e.message?e.message:String(e)}async function xs(){let{adaptersFor:e}=await Promise.resolve().then(()=>(hn(),Dr)),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 Is(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function Mn(e={}){let t=e.toneStart??xs,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,a=new Map,d=[],l={state:"locked"},b,g=!1,v=!1;function w(E){for(let h of d.slice())h(E)}function I(E,h){let u=i.get(E);if(u)return h&&!u.participantId&&(u.participantId=h),u;let s={id:E,participantId:h,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(E,s),s}function T(E){return g||E.muted?0:Pn(E.gain*E.duckGain)}function y(E){return{id:E.id,participantId:E.participantId,gain:E.gain,muted:E.muted,duckGain:E.duckGain,priority:E.priority,effectiveGain:T(E)}}function P(){let E=-1/0;for(let h of a.values())h.priority>E&&(E=h.priority);for(let h of i.values())if(!h.manualDuck){if(E===-1/0){h.duckGain=1;continue}h.duckGain=h.priority<E?Tn:1}}async function $(){if(v||l.state==="unlocked")return Ye(l);if(b)return await b,Ye(l);l={state:"unlocking"},b=(async()=>{try{await t(),l={state:"unlocked"}}catch(E){l={state:"failed",error:Rs(E)}}})();try{await b}finally{b=void 0}return Ye(l)}return{unlock:$,status(){return Ye(l)},authorize(E){v||typeof E!="string"||E.length===0||r.add(E)},revoke(E){v||r.delete(E)},isAuthorized(E){return E===void 0||E.length===0?r.size===0:r.size===0?!0:r.has(E)},setChannelGain(E,h,u){v||typeof E!="string"||E.length===0||(I(E,u).gain=Pn(h))},setPriority(E,h,u){v||typeof E!="string"||E.length===0||(I(E,u).priority=Number.isFinite(h)?h:0,P())},mute(){v||(g=!0,w({type:"mute"}))},unmute(){v||(g=!1,w({type:"mute"}))},muteChannel(E,h){v||typeof E!="string"||E.length===0||(I(E,h).muted=!0,w({type:"mute"}))},unmuteChannel(E){if(v)return;let h=i.get(E);h&&(h.muted=!1,w({type:"mute"}))},duck(E,h=Tn){if(v||typeof E!="string"||E.length===0)return;let u=I(E);u.manualDuck=!0,u.duckGain=Pn(h)},unduck(E){if(v)return;let h=i.get(E);h&&(h.manualDuck=!1,P())},effectiveGain(E){let h=i.get(E);return h?T(h):g?0:1},handleHostEvent(E){if(v||!E||typeof E!="object")return;let h=Is(E.payload);if(h){if(E.type===ve){o.set(h,"ready"),w({type:"asset",id:h,status:"ready"});return}E.type===Ee&&(o.set(h,"failed"),w({type:"asset",id:h,status:"failed"}))}},assetStatus(E){return o.get(E)},noteCueStarted(E){if(v)return;a.set(E.idempotencyKey,{idempotencyKey:E.idempotencyKey,channelId:E.channelId,participantId:E.participantId,priority:E.priority});let h=I(E.channelId,E.participantId);E.priority>h.priority&&(h.priority=E.priority),P()},noteCueEnded(E){a.delete(E)&&P()},teardown(E){if(!v&&!(typeof E!="string"||E.length===0)){r.delete(E);for(let[h,u]of[...a.entries()])u.participantId===E&&a.delete(h);for(let[h,u]of[...i.entries()])u.participantId===E&&i.delete(h);P(),w({type:"teardown",participantId:E})}},onNotice(E){return d.push(E),()=>{let h=d.indexOf(E);h>=0&&d.splice(h,1)}},inspect(){let E=[...o.entries()].sort(([u],[s])=>u<s?-1:u>s?1:0),h={};for(let[u,s]of E)h[u]=s;return{status:Ye(l),reducedSensory:n,muted:g,authorized:[...r].sort(),channels:[...i.values()].sort((u,s)=>u.id<s.id?-1:u.id>s.id?1:0).map(y),assets:h}},destroy(){v||(v=!0,a.clear(),i.clear(),r.clear(),w({type:"destroy"}),d.length=0)},get reducedSensory(){return n},get muted(){return g}}}function di(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function Ln(e){br();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:a,audioBroker:d,audioParticipantId:l,kind:b="render",onFrameTiming:g}=e,v=n===void 0?void 0:Pt(n,o?"deterministic":"live"),w=new Ue;if(d&&(di(w,d),l&&d.authorize(l)),a&&typeof a.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let I=a?In({resolver:a.resolver,timeoutMs:a.timeoutMs,emitEvents:a.emitEvents??!o,wallClockTimeout:!o,dispatch:L=>w.dispatch(L)}):void 0,T=!1,y=null,P,$=g,H=!1,E=t.clientWidth||window.innerWidth,h=t.clientHeight||window.innerHeight,u=new Vt(30,!1,E,h,!1,void 0,{container:t,seed:v,captureKeyboard:r,hostChannel:w,audio:i,deterministic:o,kind:b,onFrameTiming:g}),s=()=>{let L=t.clientWidth||window.innerWidth,D=t.clientHeight||window.innerHeight;return L===u.containerWidth&&D===u.containerHeight?!1:(u.containerWidth=L,u.containerHeight=D,!0)},f=null;return!u.isDeterministic&&typeof ResizeObserver<"u"&&(f=new ResizeObserver(()=>{if(T||!y)return;s()&&H&&u.reinit()}),f.observe(t)),u.onError=(L,D)=>{P?.(L,D)},{get tokenData(){return u.tokenData},get hostChannel(){return w},get assets(){return I},get audioBroker(){return d},get kind(){return b},get onError(){return P},set onError(L){P=L},get onFrameTiming(){return $},set onFrameTiming(L){$=L,u.onFrameTiming=L},mount(L,D={}){if(T)throw new Error("createRuntime: cannot mount on a destroyed runtime");y?.destroy(),H=!1,u.customState=D.initialState,u.setGameManager(D.gameManager);let V=D.onEvent?w.onEvent(D.onEvent):()=>{};if(d&&l&&d.authorize(l),!u.prepareCart(L))throw V(),new Error("createRuntime: failed to prepare cart");let M=!1,p={async start(){if(!M){if(s()&&u.isPrepared&&(u.init(),u.unloadCart(),!u.prepareCart(L)))throw new Error("createRuntime: failed to prepare cart");u.needsAudio&&(d?await d.unlock():await u.unlockAudio(),M)||(H=!0,u.beginPlayback())}},pause(){M||(u.paused=!0)},resume(){M||(u.paused=!1)},dispatch(S){M||w.dispatch(S)},snapshot(){if(M)return{seed:"",pngDataUrl:""};let S=u.canvas;return{seed:u.tokenData.hash,metadata:L.metadata,pngDataUrl:S?S.toDataURL("image/png"):""}},destroy(){M||(M=!0,H=!1,V(),w.clearInbound(),u.unloadCart(),y===p&&(y=null))},reload(){if(!M){if(!H){if(u.isPrepared&&(u.unloadCart(),!u.prepareCart(L)))throw new Error("createRuntime: failed to prepare cart");return}u.reloadCart()}},reinit(S){if(!M){if(!H){s();return}u.reinit(S)}},getCartState(){return u.animation?.cartState},exportState(){return M?Promise.reject(new Error("Cart handle has been destroyed")):u.exportState()},exportStateJSON(){return M?Promise.reject(new Error("Cart handle has been destroyed")):u.exportStateJSON()},async importState(S,x){if(M)throw new Error("Cart handle has been destroyed");let N=S,W=S;if(typeof S=="string")try{W=JSON.parse(S)}catch{await u.importState(S,x);return}if(W&&typeof W=="object"&&typeof W.schemaVersion=="number"){let Y=kn(W);if(Y.ok===!1)throw new oe(_e(Y.errors));await u.importState(Y.bundle,x);return}await u.importState(typeof N=="string"?N:W,x)},async exportSnapshot(S){if(M)throw new Error("Cart handle has been destroyed");let x=await u.exportState(),N=u.getClock(),W=ut(x,{...S,rng:u.getRandomState(),clock:{framesElapsed:x.framesElapsed,elapsedSinceStart:x.elapsedSinceStart,now:N.now,frameRate:N.frameRate}});if(W.ok===!1)throw new oe(_e(W.errors));return W.snapshot},async exportSnapshotJSON(S){return JSON.stringify(await p.exportSnapshot(S))},async importSnapshot(S,x){if(M)throw new Error("Cart handle has been destroyed");let N=Rn(S);if(N.ok===!1)throw new oe(_e(N.errors));await u.importState(N.snapshot.engineState,x)},peekExportedFramebuffer(){return M?null:u.peekExportedFramebuffer()},peekSeed(){if(!M)return u.peekSeed()},isGenerative(){return M?!1:u.isGenerative()},async step(S=1){if(M)throw new Error("Cart handle has been destroyed");await u.step(S)},async advance(S){if(M)throw new Error("Cart handle has been destroyed");await u.advance(S)},schedule(S){M||u.schedule(S)},getClock(){if(M)throw new Error("Cart handle has been destroyed");return u.getClock()},getRandomState(){if(M)throw new Error("Cart handle has been destroyed");return u.getRandomState()},getReplayMetadata(){return M?Promise.reject(new Error("Cart handle has been destroyed")):u.getReplayMetadata()},get canvas(){return u.canvas},get paused(){return u.paused},set paused(S){M||(u.paused=S)},get tokenData(){return u.tokenData},get isPrepared(){return u.isPrepared},get isLoopRunning(){return u.isLoopRunning},get needsAudio(){return u.needsAudio},get audioLibraries(){return u.audioLibraries}};return y=p,p},async unlockAudio(){if(d){u.needsAudio&&await d.unlock();return}await u.unlockAudio()},destroy(){T||(T=!0,y?.destroy(),y=null,d&&l&&d.teardown(l),f?.disconnect(),f=null,I?.dispose(),w.close(),u.destroy())}}}var We="cyberart.state.save",Je="cyberart.state.load";function Ps(e,t,n={}){let r=n.persist,i=r?{persist:r}:void 0,o=()=>{t.emit({type:We,payload:i})},a=()=>{t.emit({type:Je,payload:i})};e.registerAction("w",o,!0),e.registerAction("W",o,!0),e.registerAction("e",a,!0),e.registerAction("E",a,!0)}function ui(e){if(e.type!==We&&e.type!==Je)return;let t=e.payload?.persist;return t==="localStorage"?t:void 0}var Ts="cyberart-io",Ms=1,Te="framebuffers";function Dn(e,t){return`${e||"unknown"}:${t?Ie(t):"none"}`}function li(e,t){return`${e||"unknown"}:${t||"none"}`}function _n(){return new Promise((e,t)=>{let n=indexedDB.open(Ts,Ms);n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains(Te)||r.createObjectStore(Te)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error??new Error("indexedDB open failed"))})}function Ls(e){let t=e.data;return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function ci(e,t){return new Promise((n,r)=>{let o=e.transaction(Te,"readonly").objectStore(Te).get(t);o.onsuccess=()=>n(o.result),o.onerror=()=>r(o.error??new Error("indexedDB read failed"))})}async function pi(e,t,n){if(typeof indexedDB>"u")return;let r=await _n(),i={width:n.width,height:n.height,data:Ls(n)};try{await new Promise((o,a)=>{let d=r.transaction(Te,"readwrite");d.oncomplete=()=>o(),d.onerror=()=>a(d.error??new Error("indexedDB write failed")),d.objectStore(Te).put(i,Dn(e,t))})}finally{r.close()}}async function fi(e,t){if(typeof indexedDB>"u")return null;let n=await _n();try{let r=Dn(e,t),i=li(e,t),o=await ci(n,r)??(r===i?void 0:await ci(n,i));if(!o||!o.data||o.width<1||o.height<1)return null;let a=new ImageData(o.width,o.height);return a.data.set(new Uint8ClampedArray(o.data)),a}finally{n.close()}}async function mi(e,t){if(typeof indexedDB>"u")return;let n=await _n();try{await new Promise((r,i)=>{let o=n.transaction(Te,"readwrite");o.oncomplete=()=>r(),o.onerror=()=>i(o.error??new Error("indexedDB delete failed"));let a=o.objectStore(Te);a.delete(Dn(e,t)),a.delete(li(e,t))})}finally{n.close()}}var Vn="cyberart.state.",Ds="Saved state",_s="Loaded state",yi="Failed to save state",Vs="Failed to load state",Os="No saved state";function Me(e,t){let n=e||"unknown";return t?Vn+n+"."+Ie(t):Vn+n}function Ns(e,t,n){return r=>{if(ui(r)==="localStorage"){if(r.type===We){Fs(e,t,n);return}r.type===Je&&Hs(e,t,n)}}}function gi(e){return!!e&&typeof e=="object"&&typeof e.schemaVersion=="number"}function hi(e){if(gi(e)){let t=ct(e);if(t.ok===!1)return null;try{return ce(t.snapshot.engineState)}catch{return null}}if(je(e))try{return ce(e)}catch{return null}return null}function Xe(e){try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t;if(typeof n.savedAt=="number"&&n.bundle&&typeof n.bundle=="object"){let o=hi(n.bundle);return o?{savedAt:n.savedAt,bundle:o}:null}let r=hi(t);if(r)return{savedAt:0,bundle:r};if(gi(t))return null;let i=t;return typeof i.seed=="string"&&typeof i.version=="number"?{savedAt:0,bundle:i}:null}catch{return null}}async function Fs(e,t,n){let r=e();if(r)try{let i=await r.exportState(),o=i.cartId??t?.();if(!o){console.error("Refusing to persist cart state without cartId"),n?.(yi,"transient");return}i.generative===!0?(qs(o),Bt(Me(o,i.seed),i)):Bt(Me(o),i);let a=r.peekExportedFramebuffer?.();if(a)try{await pi(o,i.seed,a)}catch(d){console.warn("Failed to save cart framebuffer",d)}n?.(Ds,"transient")}catch(i){console.error("Failed to save cart state",i),n?.(yi,"transient")}}async function Hs(e,t,n){let r=e();if(!r)return;let i=t?.(),o=r.peekSeed?.(),a=r.isGenerative?.()===!0,d=Gs(i,a,o);if(!d){console.warn("No saved cart state for",i||"unknown",a&&o?`(hash ${o})`:""),n?.(Os,"transient");return}try{let l=await fi(i,d.bundle.seed).catch(()=>null);await r.importState(d.bundle,{framebuffer:l}),n?.(_s,"transient")}catch(l){console.error("Failed to load cart state",l),n?.(Vs,"transient")}}function Bt(e,t){let n=JSON.stringify({savedAt:Date.now(),bundle:t});Ks(e,n)}function Ks(e,t){for(;;)try{localStorage.setItem(e,t);return}catch(n){if(!Bs(n)||!$s(e))throw n}}function Bs(e){if(!e||typeof e!="object")return!1;let t=e.name,n=e.code;return t==="QuotaExceededError"||t==="NS_ERROR_DOM_QUOTA_REACHED"||n===22||n===1014}function $s(e){let t=null,n=1/0;for(let o of Us()){if(o===e)continue;let a=localStorage.getItem(o);if(!a)continue;let l=Xe(a)?.savedAt??0;l<n&&(n=l,t=o)}if(!t)return!1;let r=localStorage.getItem(t),i=r?Xe(r):null;return localStorage.removeItem(t),i?.bundle&&mi(i.bundle.cartId,i.bundle.seed).catch(()=>{}),!0}function Us(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(Vn)&&e.push(n)}return e}function Gs(e,t,n){if(t&&n){let i=localStorage.getItem(Me(e,n));if(i)return Xe(i);let o=localStorage.getItem(Me(e));if(!o)return null;let a=Xe(o);if(!a||!js(a.bundle,n))return null;try{Bt(Me(e,n),a.bundle)}catch{}return a}let r=localStorage.getItem(Me(e));return r?Xe(r):null}function js(e,t){return typeof e.seed=="string"&&Ie(e.seed)===Ie(t)}function qs(e){let t=Me(e),n=localStorage.getItem(t);if(!n)return;let r=Xe(n);if(r&&typeof r.bundle.seed=="string"){let i=Me(e,r.bundle.seed);if(!localStorage.getItem(i))try{Bt(i,r.bundle)}catch{return}}localStorage.removeItem(t)}var pt=1,Ce="cyberart.diagnostic.rejected",Ut=8,zs=new Set(["intent","state","diagnostic"]),Ys=new Set([We,Je]);function $t(e){return typeof e=="string"&&zs.has(e)}function bi(e){if(e.kind!==void 0)return $t(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(Ys.has(e.type))return"intent";for(let t of e.type.split("."))if($t(t))return t}}function vi(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 Le(e,t){for(let n of e)if(vi(n,t))return!0;return!1}function Qe(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 Gt(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!==pt)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=bi(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=Qe(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,a=typeof e.causationId=="string"&&e.causationId.length>0?e.causationId:t.causationId,d=typeof e.target=="string"&&e.target.length>0?e.target:void 0,l=t.maxHops??Ut,b=t.parentHops===void 0?l:Math.max(0,t.parentHops-1),g=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,v={schemaVersion:pt,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:b};return d&&(v.target=d),a&&(v.causationId=a),g&&(v.idempotencyKey=g),r.value!==void 0&&(v.payload=r.value),{ok:!0,envelope:v}}var Ws=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),Js=8,Xs=8,Qs=16,Zs=256,ea=256,ta=["*.intent.*"];function On(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??Js,i=e.maxCausationDepth??Xs,o=e.maxHops??Ut,a=e.maxCorrelationPerTurn??Qs,d=e.maxIndex??Zs,l=e.maxDecisions??ea,b=e.maxPerWindow,g=e.windowMs??1e3,v=e.now??Date.now,w=0,I=e.createId??(()=>`evt-${++w}`),T=new Map,y=[],P=[],$=new Map,H=new Map,E=new Map,h=[],u=0,s=0,f=0;function R(m){try{return JSON.parse(JSON.stringify(m))}catch{return m}}function L(m){for(h.push(m);h.length>l;)h.shift();for(let k of P)try{k(R(m))}catch{}}function D(m,k){let O={outcome:k.outcome,source:k.source,type:m.type,kind:m.kind,envelopeId:m.id,deliveredTo:k.deliveredTo,hops:m.hops,seq:m.seq,correlationId:m.correlationId,schemaVersion:m.schemaVersion,turn:f,time:v()};return k.reason&&(O.reason=k.reason),k.detail&&(O.detail=k.detail),k.priorEnvelopeId&&(O.priorEnvelopeId=k.priorEnvelopeId),m.target&&(O.target=m.target),m.causationId&&(O.causationId=m.causationId),m.idempotencyKey&&(O.idempotencyKey=m.idempotencyKey),m.payload!==void 0&&(O.payload=R(m.payload)),O}let V=[],M=!1;function p(m,k,O){for(m.set(k,O);m.size>d;){let K=m.keys().next().value;if(K===void 0)break;m.delete(K)}}function S(m){p($,m.id,{type:m.type,source:m.source,causationId:m.causationId,hops:m.hops,correlationId:m.correlationId,idempotencyKey:m.idempotencyKey})}function x(m,k){k&&(m.correlationId||(m.correlationId=k.correlationId),m.causationId||(m.causationId=k.id),!m.idempotencyKey&&k.idempotencyKey&&(m.idempotencyKey=`${k.idempotencyKey}::${m.type}`))}function N(m,k){if(m){let O=$.get(m);return O?O.hops:o}return k}function W(m,k){return`${m}\0${k}`}function Y(m,k){m.idempotencyKey&&p(E,W(m.source,m.idempotencyKey),k)}function U(m,k){if(k)return E.get(W(m,k))}function j(m){return U(m.source,m.idempotencyKey)}function ne(m){return m.seq+=1,m.seq}function _(m,k){if(!(typeof k.causationId=="string"&&k.causationId.length>0))return m.lastDelivered}function J(m){let k=new Set,O=new Set([`${m.type}\0${m.source}`]),K=m.causationId,B=0;for(;K;){if(B+=1,B>i||k.has(K))return!0;k.add(K);let X=$.get(K);if(!X)break;let ye=`${X.type}\0${X.source}`;if(O.has(ye))return!0;O.add(ye),K=X.causationId}return!1}function Q(m){let k=(H.get(m)??0)+1;return H.set(m,k),k}function c(m,k){b!==void 0&&(m.emitTimestamps=m.emitTimestamps.filter(O=>k-O<g))}function C(m,k){return(k.kind==="state"||k.kind==="diagnostic")&&!m.authoritative?!1:Le(m.emit,k.type)}function A(m){for(let k of y)if(Le(k.patterns,m.type))try{k.listener(m)}catch{}}function F(m){let k=[];if(m.target){let O=T.get(m.target);return!O||!Le(O.subscribe,m.type)||(O.channel.dispatch(m),O.lastDelivered={id:m.id,hops:m.hops,correlationId:m.correlationId,idempotencyKey:m.idempotencyKey},k.push(O.id)),k}for(let O of T.values())Le(O.subscribe,m.type)&&(O.channel.dispatch(m),O.lastDelivered={id:m.id,hops:m.hops,correlationId:m.correlationId,idempotencyKey:m.idempotencyKey},k.push(O.id));return k}function G(m,k,O,K,B,X,ye){let be={reason:K,eventType:k,source:O};B&&(be.detail=B),s+=1;let rt=I(),Ne={schemaVersion:pt,type:Ce,kind:"diagnostic",source:n,id:rt,correlationId:X??rt,seq:s,hops:0,payload:be};ye&&(Ne.causationId=ye),S(Ne);let hr=T.get(m);hr&&hr.channel.dispatch(Ne),A(Ne)}function Z(m,k,O,K,B){if(G(m,B?.type??(typeof k.type=="string"?k.type:""),B?.source??m,O,K,B?.correlationId,B?.id),B?.idempotencyKey&&!Ws.has(O)&&Y(B,{status:"rejected"}),B)L(D(B,{outcome:"rejected",reason:O,detail:K,source:m,deliveredTo:[]}));else{let X={outcome:"rejected",reason:O,source:m,type:typeof k.type=="string"?k.type:"",deliveredTo:[],turn:f,time:v()};K&&(X.detail=K),typeof k.idempotencyKey=="string"&&(X.idempotencyKey=k.idempotencyKey),L(X)}}function ee(m,k){S(m),Y(m,{status:"accepted",envelope:m}),Q(m.correlationId),A(m);let O=F(m);L(D(m,{outcome:"accepted",source:k,deliveredTo:O}))}function z(m,k,O,K){let B=K?.type??(typeof k.type=="string"?k.type:""),X={outcome:"duplicate",reason:"duplicate",detail:O.status==="accepted"?"idempotent accepted":"idempotent rejected",source:m,type:B,deliveredTo:[],turn:f,time:v()};K?(X.kind=K.kind,X.envelopeId=K.id,X.hops=K.hops,X.seq=K.seq,X.correlationId=K.correlationId,X.schemaVersion=K.schemaVersion,K.target&&(X.target=K.target),K.causationId&&(X.causationId=K.causationId),K.idempotencyKey&&(X.idempotencyKey=K.idempotencyKey),K.payload!==void 0&&(X.payload=R(K.payload))):typeof k.idempotencyKey=="string"&&(X.idempotencyKey=k.idempotencyKey),O.status==="accepted"&&(X.priorEnvelopeId=O.envelope.id,X.envelopeId||(X.envelopeId=O.envelope.id)),L(X)}function xe(m,k,O,K){if(!O.ok){Z(m,k,"malformed",O.detail);return}let B=O.envelope,X=j(B);if(X)return z(m,k,X,B),X.status==="accepted"?X.envelope:void 0;if(B.hops<1){Z(m,k,"hop-limit","no hops remaining",B);return}if(B.target&&B.target!==t){let ye=T.get(B.target);if(!ye){Z(m,k,"unknown-target",`unknown target "${B.target}"`,B);return}if(!Le(ye.subscribe,B.type)){Z(m,k,"not-subscribed",`target "${B.target}" does not subscribe to ${B.type}`,B);return}}if(K){if(!C(K,B)){Z(m,k,"unauthorized","source may not emit this event",B);return}if(K.emitsThisTurn+=1,K.emitsThisTurn>r){Z(m,k,"rate-limited","maxPerTurn exceeded",B);return}if(b!==void 0){let be=v();if(c(K,be),K.emitTimestamps.push(be),K.emitTimestamps.length>b){Z(m,k,"rate-limited","maxPerWindow exceeded",B);return}}if(J(B)){Z(m,k,"loop-detected","causation chain cycle or depth exceeded",B);return}if((H.get(B.correlationId)??0)+1>a){Z(m,k,"storm-detected","correlationId storm",B);return}if(e.validate){let be;try{be=e.validate(B)}catch(rt){let Ne=rt instanceof Error?rt.message:"validate threw";Z(m,k,"host-rejected",Ne,B);return}if(be!==!0){Z(m,k,"host-rejected",be.detail,B);return}}}else{if(J(B)){Z(m,k,"loop-detected","causation chain cycle or depth exceeded",B);return}if((H.get(B.correlationId)??0)+1>a){Z(m,k,"storm-detected","correlationId storm",B);return}}return ee(B,m),B}function Et(m,k){let O=T.get(m);if(!O)return;let K={...k},B=_(O,K);x(K,B);let X=U(O.id,K.idempotencyKey);if(X){z(m,K,X);return}let ye=ne(O),be=Gt(K,{source:O.id,createId:I,seq:ye,causationId:B?.id,maxHops:o,parentHops:N(K.causationId??B?.id,B?.hops)});xe(m,K,be,O)}function St(m,k){let O=k?.cause,K={...m};x(K,O);let B=U(t,K.idempotencyKey);if(B)return z(t,K,B),B.status==="accepted"?B.envelope:void 0;u+=1;let X=Gt(K,{source:t,createId:I,seq:u,causationId:K.causationId,maxHops:o,parentHops:N(K.causationId,O?.hops)});return xe(t,K,X,void 0)}function Do(){if(!M){M=!0;try{for(;V.length>0;){let m=V.shift();m&&(m.kind==="cart"?Et(m.participantId,m.event):m.result=St(m.event,m.extras))}}finally{M=!1}}}function yr(m){V.push(m),Do()}return{attach(m,k,O={}){if(m===t||m===n)throw new Error(`createEventRouter: "${m}" is a reserved participant id`);for(let X of T.values())if(X.channel===k&&X.id!==m)throw new Error(`createEventRouter: channel already attached as "${X.id}"`);T.get(m)?.unsubscribe();let B={id:m,channel:k,emit:O.emit??ta,subscribe:O.subscribe??[],authoritative:O.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};B.unsubscribe=k.onEvent(X=>{yr({kind:"cart",participantId:m,event:X})}),T.set(m,B)},detach(m){let k=T.get(m);k&&(k.unsubscribe(),T.delete(m))},publish(m,k){let O={kind:"publish",event:m,extras:k};return yr(O),O.result},subscribe(m,k){let O={patterns:m,listener:k};return y.push(O),()=>{let K=y.indexOf(O);K>=0&&y.splice(K,1)}},subscribeDecision(m){return P.push(m),()=>{let k=P.indexOf(m);k>=0&&P.splice(k,1)}},inspectParticipants(){return[...T.values()].map(m=>({id:m.id,emit:m.emit.slice(),subscribe:m.subscribe.slice(),authoritative:m.authoritative}))},inspectDecisions(){return h.map(m=>R(m))},turn(){f+=1,H.clear();for(let m of T.values())m.emitsThisTurn=0,m.lastDelivered=void 0,b!==void 0&&c(m,v())}}}var na=new Set(["string","number","boolean","object","array"]);function de(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Ei(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if($t(t))return t}}function Si(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function Nn(e){let t=[];if(!e||typeof e!="object")return[de("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(de("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(de("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(de("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!na.has(r.type))&&t.push(de("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function ra(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 ia(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])=>de("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[de("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(de("missing-field",`payload is missing required field "${i}"`,i));continue}let a=ra(n[i]);a!==o.type&&r.push(de("field-type",`payload.${i} expected ${o.type}, got ${a}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function oa(e,t,n){let r=Si(e);return{type:e,kind:t,payloadSchema:{version:n.version,fields:{...n.fields}},emitPattern:r,subscribePattern:r,toManifest(){let i={};for(let[o,a]of Object.entries(this.payloadSchema.fields))i[o]={type:a.type,optional:a.optional===!0};return{type:this.type,kind:this.kind,version:this.payloadSchema.version,fields:i,emitPattern:this.emitPattern,subscribePattern:this.subscribePattern}},validatePayload(i){return ia(this.payloadSchema,i)}}}function Fn(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(de("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(de("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=Ei(t);i?i!==e&&r.push(de("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(de("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(...Nn(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:oa(t,e,n)}}function sa(e,t){return Fn("intent",e,t)}function aa(e,t){return Fn("state",e,t)}function da(e,t){return Fn("diagnostic",e,t)}function ua(e,t){let n=Nn(e),r=Nn(t);if(n.length>0||r.length>0||t.version<e.version)return"breaking";let i=Object.keys(e.fields),o=Object.keys(t.fields),a=new Set(i),d=new Set(o);for(let g of i){if(!d.has(g))return"breaking";let v=e.fields[g],w=t.fields[g];if(v.type!==w.type)return"breaking";let I=v.optional!==!0,T=w.optional===!0;if(I&&T||!I&&w.optional!==!0&&v.optional===!0)return"breaking"}let l=!1;for(let g of o)if(!a.has(g)){if(t.fields[g].optional!==!0)return"breaking";l=!0}let b=i.length===o.length&&i.every(g=>t.fields[g].type===e.fields[g].type&&t.fields[g].optional===!0==(e.fields[g].optional===!0));return b&&t.version===e.version?"identical":t.version>e.version&&(l||b)?"backward-compatible":t.version===e.version&&l?"breaking":b?"identical":"breaking"}function ca(e,t){let n=[],r=[],i=new Set,o=new Set;for(let a of e)(t==="authoritative"||a.kind==="intent")&&!i.has(a.emitPattern)&&(i.add(a.emitPattern),n.push(a.emitPattern)),a.kind!=="intent"&&!o.has(a.subscribePattern)&&(o.add(a.subscribePattern),r.push(a.subscribePattern));return{emit:n,subscribe:r,authoritative:t==="authoritative"}}function la(e,t){let n=e.emit??["*.intent.*"],r=e.authoritative===!0,i=[];for(let o of t)Le(n,o.type)&&(o.kind==="state"||o.kind==="diagnostic")&&!r&&i.push(de("unauthorized-emit",`emit pattern allows ${o.kind} "${o.type}" but attach is not authoritative`,o.type));return i.length>0?{ok:!1,errors:i}:{ok:!0}}function pa(e){let t=new Map;for(let i of e)t.set(i.type,i);let n=i=>{let o=t.get(i.type);return o?o.kind!==i.kind?{ok:!1,errors:[de("kind-mismatch",`envelope kind "${i.kind}" does not match contract "${o.kind}"`,i.type)]}:o.validatePayload(i.payload):{ok:!1,errors:[de("unknown-type",`no contract registered for "${i.type}"`,i.type)]}};return{get(i){return t.get(i)},manifest(){return[...t.values()].sort((i,o)=>i.type.localeCompare(o.type)).map(i=>i.toManifest())},validateEnvelope:n,asRouterValidate:i=>{let o=n(i);return o.ok?!0:{reason:"host-rejected",detail:o.errors.map(a=>a.detail).join("; ")}}}}var Ze=1,Kn="presentation.state.model",Ai="presentation.intent.unsupported",wi=["loading","ready","error","unsupported"],fa=["presentation.state.*",Ce],ma="Presentation adapter has been destroyed",ki="Presentation adapter: model is invalid or not JSON-serializable",ya=new Set(wi);function Ri(e){return typeof e=="string"&&ya.has(e)}function Bn(e){if(e===null||typeof e!="object")return!1;let t=e;return!(t.contractVersion!==Ze||!Ri(t.phase)||t.reason!==void 0&&typeof t.reason!="string"||t.view!==void 0&&(t.view===null||typeof t.view!="object"))}function Hn(e,t){let n={type:Kn,kind:"state",payload:e};return t?.correlationId&&(n.correlationId=t.correlationId),t?.causationId&&(n.causationId=t.causationId),t?.idempotencyKey&&(n.idempotencyKey=t.idempotencyKey),n}function $n(){return{contractVersion:Ze,phase:"loading"}}function Un(e){return{contractVersion:Ze,phase:"unsupported",reason:e}}function Gn(e){let t=Qe(e);return t.ok?Bn(t.value)?{ok:!0,model:t.value}:t.value!==null&&typeof t.value=="object"&&"contractVersion"in t.value&&t.value.contractVersion!==Ze?{ok:!1,reason:"unknown-contract-version",contractVersion:t.value.contractVersion}:{ok:!1,reason:"invalid-model"}:{ok:!1,reason:"model-not-serializable"}}function jt(e){let t=Gn(e);if(!t.ok)throw new Error(ki);return t.model}function ha(e){let t=Qe(e);return t.ok&&Bn(t.value)?t.value:Un("model-not-serializable")}function ga(e,t){if(e.type!==Kn)return{model:t};let n=Gn(e.payload);return n.ok?{model:n.model}:{model:Un(n.reason),rejected:{reason:n.reason,contractVersion:n.contractVersion}}}function ba(e){if(e===null||typeof e!="object"||!("regions"in e))return[];let t=e.regions;return Array.isArray(t)?t:[]}function va(e,t,n){return e>=n.x&&e<n.x+n.width&&t>=n.y&&t<n.y+n.height}function Ea(e,t){let n=t.intent;if(!n||typeof n.type!="string"||n.type.length===0)return;let r={type:n.type,kind:"intent"};if(n.payload!==void 0){let i=Qe(n.payload);if(!i.ok)return;r.payload=i.value}n.target&&(r.target=n.target),n.correlationId&&(r.correlationId=n.correlationId),n.idempotencyKey&&(r.idempotencyKey=n.idempotencyKey),e.emit(r)}function xi(e,t,n){let r={reason:t};if(n!==void 0){let i=Qe(n);i.ok&&(r.contractVersion=i.value)}e.emit({type:Ai,kind:"intent",payload:r})}function Ci(e,t,n){let r=t;for(let i of e){let o=ga(i,r);o.rejected&&n&&xi(n,o.rejected.reason,o.rejected.contractVersion),r=o.model}return r}function Ii(){return{metadata:{id:"cyberart.presentation.reference",name:"Reference presentation",frameRate:30},getDefaultState:(e,t,n,r,i,o,a,d,l)=>{let b=i?.model;if(b===void 0)return{model:$n()};let g=Gn(b);return g.ok?{model:g.model}:(l&&xi(l,g.reason,g.contractVersion),{model:Un(g.reason)})},update:(e,t,n,r,i,o,a,d,l,b,g)=>{let v=Ci(g?.consume()??[],i.model,g);for(;a?.hasClick();){let w=a.consumeClick();if(!(!w||v.phase!=="ready"||!g)){for(let I of ba(v.view))if(va(w.x,w.y,I)){Ea(g,I);break}}}return g&&(v=Ci(g.consume(),v,g)),v===i.model?i:{...i,model:v}},render:(e,t,n,r,i,o)=>{let a=i.model.view?.background;o.fillStyle=a??"#111",o.fillRect(0,0,r.width,r.height)}}}function Pi(e,t={}){let n=e,r=t.model?jt(t.model):$n(),i=!1,o=t.present??t.model!==void 0,a=()=>{if(i)throw new Error(ma)},d=l=>{a(),r=jt(l),n.dispatch(Hn(r))};return o&&n.dispatch(Hn(r)),{version:Ze,get target(){return n},get model(){return ha(r)},get phase(){return r.phase},get paused(){return n.paused===!0},present:d,async start(){return a(),n.start()},pause(){a(),n.pause()},resume(){a(),n.resume()},retarget(l){a(),n=l},destroy(){i||(i=!0,n.destroy())}}}function Sa(e,t={}){let n=t.model?jt(t.model):t.initialState?.model!==void 0?jt(t.initialState.model):$n(),r=t.cart??Ii(),i=e.mount(r,{initialState:{...t.initialState,model:n},onEvent:t.onEvent});return Pi(i,{model:n,present:!1})}var we="cue.started",De="cue.completed",ke="cue.cancelled",Ae="cue.replaced",Ca=[we,De,ke,Ae];function Aa(e){return e===we||e===De||e===ke||e===Ae}function Mi(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function Ti(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function qt(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 jn(e){return e.startFrame+e.delayFrames}function wa(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 a=0;if(e.repeat)if("forever"in e.repeat&&e.repeat.forever)a="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"};a=Math.floor(e.repeat.count)}else return{ok:!1,reason:"invalid",detail:"unsupported repeat"};let d=e.reducedMotion??"complete";return d!=="skip"&&d!=="complete"&&(typeof d!="object"||typeof d.durationFrames!="number"||!Number.isFinite(d.durationFrames)||d.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:a,repeatIndex:0,reducedMotion:d,onDuplicate:o,phase:"scheduled",progress:0}}function ka(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 et(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(y){i.push(y)}function a(y,P){let $=jn(y)-jn(P);return $!==0?$:y.name<P.name?-1:y.name>P.name?1:y.idempotencyKey<P.idempotencyKey?-1:y.idempotencyKey>P.idempotencyKey?1:0}function d(y,P){o({type:P,atFrame:n,name:y.name,idempotencyKey:y.idempotencyKey,progress:y.progress})}function l(y){if(y.phase="completed",y.progress=1,d(y,De),y.repeatRemaining==="forever"||y.repeatRemaining>0){if(typeof y.repeatRemaining=="number"&&(y.repeatRemaining-=1),y.repeatIndex+=1,y.phase="scheduled",y.progress=0,y.startFrame=n,y.delayFrames=0,y.durationFrames===0){r.delete(y.idempotencyKey);return}y.phase="active",d(y,we)}else r.delete(y.idempotencyKey)}function b(y){if(y.phase==="cancelled"||y.phase==="completed")return;let P=jn(y);if(!(n<P)){if(y.phase==="scheduled"&&(y.phase="active",y.progress=y.durationFrames===0?1:0,d(y,we),y.durationFrames===0)){l(y);return}if(y.phase==="active"){let $=n-P;$>=y.durationFrames?(y.progress=1,l(y)):y.progress=Mi(y.durationFrames===0?1:$/y.durationFrames,y.easing)}}}function g(){let y=[...r.values()].sort(a);for(let P of y)b(P)}function v(y){let P=wa(y,n);if("ok"in P&&P.ok===!1)return P;let $=ka(P,t),H=r.get($.idempotencyKey);if(H&&(H.phase==="scheduled"||H.phase==="active")){if(H.onDuplicate==="reject"||$.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${$.idempotencyKey} is already ${H.phase}`};if(H.onDuplicate==="ignore"||$.onDuplicate==="ignore")return{ok:!0,cue:qt(H)};H.phase="cancelled",H.progress=H.progress,d(H,Ae),r.delete(H.idempotencyKey)}r.set($.idempotencyKey,$),b($);let E=r.get($.idempotencyKey)??$;return{ok:!0,cue:qt(E)}}function w(y){let P=r.get(y);return!P||P.phase==="completed"||P.phase==="cancelled"?!1:(P.phase="cancelled",d(P,ke),r.delete(y),!0)}function I(){for(let y of[...r.values()].sort(a))(y.phase==="scheduled"||y.phase==="active")&&(y.phase="cancelled",d(y,ke));r.clear(),i.length=0,n=e.originFrame??0}function T(y=1){let P=Number.isFinite(y)?Math.max(0,Math.floor(y)):0,$=i.length;for(let H=0;H<P;H++)n+=1,g();return i.slice($).map(Ti)}return{play:v,step:T,cancel:w,reset:I,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(a).map(qt),events:i.map(Ti)}},get(y){let P=r.get(y);return P?qt(P):void 0},get frame(){return n},get reducedMotion(){return t}}}var Yt="audio.cue.scheduled",Wt="audio.cue.started",Jt="audio.cue.skipped",Xt="audio.cue.failed",Ra=[Yt,Wt,Jt,Xt];function xa(e){return e===Yt||e===Wt||e===Jt||e===Xt}function qn(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 Ia(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 zt(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 Li(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=et({originFrame:e.originFrame}),i=new Map,o=[],a=new Set,d=0;function l(u){o.push(u)}function b(u,s,f){let R=r.get(s.idempotencyKey);return qn({type:u,atFrame:r.frame,name:s.name,idempotencyKey:s.idempotencyKey,assetId:s.assetId,channelId:s.channelId,participantId:s.participantId,reason:f?.reason,progress:f?.progress??R?.progress??0})}function g(u,s){a.delete(u.idempotencyKey),t?.noteCueEnded(u.idempotencyKey),u.audioPhase="failed",l(b(Xt,u,{reason:s})),r.cancel(u.idempotencyKey),i.delete(u.idempotencyKey)}function v(u,s){a.delete(u.idempotencyKey),u.audioPhase="skipped",l(b(Jt,u,{reason:s}))}function w(u){a.delete(u.idempotencyKey),u.audioPhase="started",t?.noteCueStarted({idempotencyKey:u.idempotencyKey,channelId:u.channelId,participantId:u.participantId,priority:u.priority}),l(b(Wt,u))}function I(u){if(u.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(u.participantId)){v(u,"unauthorized"),r.cancel(u.idempotencyKey),i.delete(u.idempotencyKey);return}if(n||t?.reducedSensory){v(u,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(u.channelId)===0){v(u,"muted");return}let s=t?.assetStatus(u.assetId);if(!t){w(u);return}if(s==="failed"){g(u,"asset-failed");return}if(s==="ready"){w(u);return}a.add(u.idempotencyKey)}function T(u,s){for(let f of[...a]){let R=i.get(f);if(!R){a.delete(f);continue}if(!(u&&R.assetId!==u)){if(s==="failed"||t?.assetStatus(R.assetId)==="failed"){g(R,"asset-failed");continue}(s==="ready"||t?.assetStatus(R.assetId)==="ready")&&I(R)}}}function y(u){for(let s of[...i.values()])s.participantId===u&&(s.audioPhase==="scheduled"||s.audioPhase==="started")&&g(s,"torn-down")}function P(u){for(let s of u){let f=i.get(s.idempotencyKey);if(f)if(s.type===we)I(f);else if(s.type===De){if(a.delete(f.idempotencyKey),t?.noteCueEnded(f.idempotencyKey),r.get(f.idempotencyKey)){f.audioPhase="scheduled";continue}f.audioPhase==="scheduled"?g(f,"asset-failed"):(f.audioPhase==="started"&&(f.audioPhase="completed"),i.delete(f.idempotencyKey))}else s.type===ke?(a.delete(f.idempotencyKey),t?.noteCueEnded(f.idempotencyKey),(f.audioPhase==="scheduled"||f.audioPhase==="started")&&(f.audioPhase="failed"),i.delete(f.idempotencyKey)):s.type===Ae&&(a.delete(f.idempotencyKey),t?.noteCueEnded(f.idempotencyKey),i.delete(f.idempotencyKey))}}function $(){let u=o.slice(d).map(qn);return d=o.length,u}let H=t?.onNotice(u=>{if(u.type==="asset"){if(u.status==="failed"){for(let s of[...i.values()])s.assetId===u.id&&(s.audioPhase==="scheduled"||s.audioPhase==="started")&&g(s,"asset-failed");return}T(u.id,u.status);return}if(u.type==="teardown"){y(u.participantId);return}if(u.type==="destroy")for(let s of[...i.values()])(s.audioPhase==="scheduled"||s.audioPhase==="started")&&g(s,"torn-down")});function E(){for(let u of i.values())t?.noteCueEnded(u.idempotencyKey);i.clear(),a.clear(),o.length=0,d=0,r.reset()}function h(u){if(!u||typeof u!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof u.assetId!="string"||u.assetId.length===0)return{ok:!1,reason:"invalid",detail:"assetId is required"};let s=r.snapshot().events.length,f=r.play(Ia(u));if(!f.ok)return f;let R=r.snapshot().events.slice(s),L=R.some(x=>x.type===Ae);if(!L&&i.has(u.idempotencyKey)){let x=i.get(u.idempotencyKey);return{ok:!0,cue:zt(x,f.cue,r.frame)}}if(L){let x=i.get(u.idempotencyKey);x&&(a.delete(x.idempotencyKey),t?.noteCueEnded(x.idempotencyKey),i.delete(x.idempotencyKey))}let D=u.channelId??u.participantId??"master",V={name:u.name,idempotencyKey:u.idempotencyKey,assetId:u.assetId,channelId:D,participantId:u.participantId,priority:Number.isFinite(u.priority)?u.priority:0,audioPhase:"scheduled"};i.set(V.idempotencyKey,V),typeof u.gain=="number"&&t?.setChannelGain(D,u.gain,u.participantId),typeof u.priority=="number"&&t?.setPriority(D,u.priority,u.participantId),l(b(Yt,V)),P(R.filter(x=>x.type!==Ae));let M=i.get(V.idempotencyKey);M&&M.audioPhase==="scheduled"&&t?.assetStatus(M.assetId)==="failed"&&g(M,"asset-failed"),$();let p=i.get(V.idempotencyKey)??V,S=r.get(V.idempotencyKey)??f.cue;return{ok:!0,cue:zt(p,S,r.frame)}}return{play:h,step(u=1){let s=r.step(u);return P(s),$()},cancel(u){let s=i.get(u),f=r.cancel(u);return s&&(a.delete(u),t?.noteCueEnded(u),i.delete(u)),f},reset:E,snapshot(){return{frame:r.frame,reducedSensory:n,cues:[...i.values()].map(u=>zt(u,r.get(u.idempotencyKey),r.frame)).sort((u,s)=>u.name!==s.name?u.name<s.name?-1:1:u.idempotencyKey<s.idempotencyKey?-1:u.idempotencyKey>s.idempotencyKey?1:0),events:o.map(qn)}},get(u){let s=i.get(u);if(s)return zt(s,r.get(u),r.frame)},dispose(){H?.(),E()},get frame(){return r.frame},get reducedSensory(){return n}}}function Pa(e,t){return e.play(t)}function Ta(e={}){let t=Mn({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=Li({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 Ma=1,_i=["loading","ready","error","unsupported"],Vi=["keyboard","pointer","audio","assets","hostChannel"],Oi=["image","audio","font","spritesheet"],Ni=["tone","midi"],en=["source-over","screen"],tn=["transparent","opaque"],Fi=["render","calculation"],La=new Set(_i),Hi=new Set(Vi),Di=new Set(Oi),Ki=new Set(Ni),Da=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind"]),_a=new Set(["minContractVersion","features"]),Va=new Set(["kinds","declarations"]),Oa=new Set(["id","kind"]),Na=new Set(["emit","subscribe","authoritative"]),Bi=new Set(["alpha","clearPolicy"]),$i=new Set(["compositor","blend"]),Ui=new Set(["refs"]),Fa=new Set(["id","version"]),Qt=/^[a-z0-9][a-z0-9.-]*$/i,Gi=new Set(en),ji=new Set(tn),qi=new Set(Fi),Ha=new Set(["contractVersion","features","integrations","managers","emit","subscribe","surface","layers","modules","kinds"]);function q(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function pe(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function fe(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(q("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function Ka(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 Ba(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 Zt(e,t){for(let n of t)if(e===n||Ba(n,e))return!0;return!1}function ft(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function zn(e,t,n){if(!Array.isArray(e))return{ok:!1,errors:[q("invalid-field",`${t} must be an array`,t)]};let r=[],i=[];return e.forEach((o,a)=>{let d=`${t}[${a}]`;if(typeof o!="string"||o.length===0){r.push(q("invalid-field",`${t} entries must be non-empty strings`,d));return}let l=n(o,d);l?r.push(l):i.push(o)}),r.length>0?{ok:!1,errors:r}:{ok:!0,values:i}}function tt(e,t){return zn(e,t,(n,r)=>Ka(n)?void 0:q("invalid-pattern",`invalid event pattern "${n}"`,r))}function Re(e,t,n,r,i){return zn(e,t,(o,a)=>n.has(o)?void 0:q(r,`invalid ${i} "${o}"`,a))}function zi(e,t){return zn(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:q("invalid-feature",`invalid feature tag "${n}"`,r))}function Yi(e,t){if(!Array.isArray(e))return{ok:!1,errors:[q("invalid-module",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let a=`${t}[${o}]`;if(!pe(i)){n.push(q("invalid-module","module ref must be an object",a));return}n.push(...fe(i,Fa,a)),(typeof i.id!="string"||i.id.length===0||!Qt.test(i.id))&&n.push(q("invalid-module",`invalid module id "${String(i.id)}"`,`${a}.id`)),(typeof i.version!="string"||i.version.length===0||!Qt.test(i.version))&&n.push(q("invalid-module",`invalid module version "${String(i.version)}"`,`${a}.version`)),typeof i.id=="string"&&Qt.test(i.id)&&typeof i.version=="string"&&Qt.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function $a(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 Ua(e){if(!pe(e))return[q("invalid-manifest","capability manifest must be a JSON object")];let t=[...fe(e,Da,"")];if(e.version!==void 0&&e.version!==1&&t.push(q("invalid-version","capability manifest version must be 1","version")),(typeof e.id!="string"||e.id.length===0)&&t.push(q("invalid-id","id is required","id")),!pe(e.runtime))t.push(q("invalid-runtime","runtime is required","runtime"));else{t.push(...fe(e.runtime,_a,"runtime"));let d=e.runtime.minContractVersion;(typeof d!="number"||!Number.isInteger(d)||d<1)&&t.push(q("invalid-runtime","runtime.minContractVersion must be an integer >= 1","runtime.minContractVersion"));let l=zi(e.runtime.features,"runtime.features");l.ok||t.push(...l.errors)}let n=Re(e.phases,"phases",La,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=Re(e.managers,"managers",Hi,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!pe(e.assets))t.push(q("invalid-assets","assets is required","assets"));else{t.push(...fe(e.assets,Va,"assets"));let d=Re(e.assets.kinds,"assets.kinds",Di,"invalid-asset-kind","asset kind");d.ok||t.push(...d.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((l,b)=>{let g=`assets.declarations[${b}]`;if(!pe(l)){t.push(q("invalid-assets","asset declaration must be an object",g));return}t.push(...fe(l,Oa,g)),(typeof l.id!="string"||l.id.length===0)&&t.push(q("invalid-assets","asset declaration id is required",`${g}.id`)),(typeof l.kind!="string"||!Di.has(l.kind))&&t.push(q("invalid-asset-kind",`invalid asset kind "${String(l.kind)}"`,`${g}.kind`))}):t.push(q("invalid-assets","assets.declarations must be an array","assets.declarations"))}let i=tt(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=tt(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!pe(e.permissions))t.push(q("invalid-permissions","permissions is required","permissions"));else{t.push(...fe(e.permissions,Na,"permissions"));let d=tt(e.permissions.emit,"permissions.emit");d.ok||t.push(...d.errors);let l=tt(e.permissions.subscribe,"permissions.subscribe");l.ok||t.push(...l.errors),e.permissions.authoritative!==void 0&&typeof e.permissions.authoritative!="boolean"&&t.push(q("invalid-permissions","permissions.authoritative must be a boolean","permissions.authoritative"))}let a=Re(e.integrations,"integrations",Ki,"invalid-integration","integration");if(a.ok||t.push(...a.errors),e.surface!==void 0&&(pe(e.surface)?(t.push(...fe(e.surface,Bi,"surface")),e.surface.alpha!==void 0&&typeof e.surface.alpha!="boolean"&&t.push(q("invalid-surface","surface.alpha must be a boolean","surface.alpha")),e.surface.clearPolicy!==void 0&&(typeof e.surface.clearPolicy!="string"||!ji.has(e.surface.clearPolicy))&&t.push(q("invalid-clear-policy",`invalid clear policy "${String(e.surface.clearPolicy)}"`,"surface.clearPolicy"))):t.push(q("invalid-surface","surface must be an object","surface"))),e.layers!==void 0){if(!pe(e.layers))t.push(q("invalid-layers","layers must be an object","layers"));else if(t.push(...fe(e.layers,$i,"layers")),e.layers.compositor!==void 0&&typeof e.layers.compositor!="boolean"&&t.push(q("invalid-layers","layers.compositor must be a boolean","layers.compositor")),e.layers.blend!==void 0){let d=Re(e.layers.blend,"layers.blend",Gi,"invalid-blend","blend mode");d.ok||t.push(...d.errors)}}if(e.modules!==void 0){if(!pe(e.modules))t.push(q("invalid-module","modules must be an object","modules"));else if(t.push(...fe(e.modules,Ui,"modules")),e.modules.refs!==void 0){let d=Yi(e.modules.refs,"modules.refs");d.ok||t.push(...d.errors)}}return e.kind!==void 0&&(typeof e.kind!="string"||!qi.has(e.kind))&&t.push(q("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),t}function Ga(e){let t=[];return e.emittedEvents.forEach((n,r)=>{Zt(n,e.permissions.emit)||t.push(q("undeclared-permission",`emitted event "${n}" is not covered by permissions.emit`,`emittedEvents[${r}]`))}),e.acceptedEvents.forEach((n,r)=>{Zt(n,e.permissions.subscribe)||t.push(q("undeclared-permission",`accepted event "${n}" is not covered by permissions.subscribe`,`acceptedEvents[${r}]`))}),t}function ja(e){let t=ft(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:ft(e.phases),managers:ft(e.managers),assets:{kinds:t,declarations:n},acceptedEvents:[...e.acceptedEvents],emittedEvents:[...e.emittedEvents],permissions:r,integrations:ft(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=ft(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=$a(e.modules.refs);o.length>0&&(i.modules={refs:o})}return e.kind==="calculation"&&(i.kind="calculation"),i}function Yn(e){let t=Ua(e);if(t.length>0)return{ok:!1,errors:t};let n=ja(e);return t.push(...Ga(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function qa(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[q("invalid-json","capability manifest JSON is not parseable")]}}return Yn(t)}function za(e){return JSON.parse(JSON.stringify(e))}function Ya(e,t){let n=Yn(e),r=n.ok?[]:[...n.errors];if(!pe(t))return{ok:!1,errors:[q("invalid-host","host capabilities must be a JSON object")]};r.push(...fe(t,Ha,"host")),typeof t.contractVersion!="number"||!Number.isInteger(t.contractVersion)||t.contractVersion<1?r.push(q("invalid-host","host.contractVersion must be an integer >= 1","host.contractVersion")):n.ok&&t.contractVersion<n.manifest.runtime.minContractVersion&&r.push(q("unsupported-runtime",`host contract version ${t.contractVersion} is below required ${n.manifest.runtime.minContractVersion}`,"runtime.minContractVersion"));let i=zi(t.features,"host.features");if(!i.ok)r.push(...i.errors);else if(n.ok){let d=new Set(i.values);n.manifest.runtime.features.forEach((l,b)=>{d.has(l)||r.push(q("unsupported-feature",`host does not support required feature "${l}"`,`runtime.features[${b}]`))})}let o=Re(t.integrations,"host.integrations",Ki,"invalid-integration","integration");if(!o.ok)r.push(...o.errors);else if(n.ok){let d=new Set(o.values);n.manifest.integrations.forEach((l,b)=>{d.has(l)||r.push(q("missing-integration",`host does not provide required integration "${l}"`,`integrations[${b}]`))})}if(t.managers!==void 0){let d=Re(t.managers,"host.managers",Hi,"invalid-manager","manager");if(!d.ok)r.push(...d.errors);else if(n.ok){let l=new Set(d.values);n.manifest.managers.forEach((b,g)=>{l.has(b)||r.push(q("missing-manager",`host does not provide required manager "${b}"`,`managers[${g}]`))})}}if(t.emit!==void 0){let d=tt(t.emit,"host.emit");d.ok?n.ok&&n.manifest.permissions.emit.forEach((l,b)=>{Zt(l,d.values)||r.push(q("unknown-permission",`host does not allow emit permission "${l}"`,`permissions.emit[${b}]`))}):r.push(...d.errors)}if(t.subscribe!==void 0){let d=tt(t.subscribe,"host.subscribe");d.ok?n.ok&&n.manifest.permissions.subscribe.forEach((l,b)=>{Zt(l,d.values)||r.push(q("unknown-permission",`host does not allow subscribe permission "${l}"`,`permissions.subscribe[${b}]`))}):r.push(...d.errors)}if(t.surface!==void 0&&(pe(t.surface)?(r.push(...fe(t.surface,Bi,"host.surface")),t.surface.alpha!==void 0&&typeof t.surface.alpha!="boolean"&&r.push(q("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((l,b)=>{(typeof l!="string"||!ji.has(l))&&r.push(q("invalid-clear-policy",`invalid clear policy "${String(l)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${b}]`:"host.surface.clearPolicy"))})):r.push(q("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!pe(t.layers))r.push(q("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...fe(t.layers,$i,"host.layers")),t.layers.compositor!==void 0&&typeof t.layers.compositor!="boolean"&&r.push(q("invalid-host","host.layers.compositor must be a boolean","host.layers.compositor")),t.layers.blend!==void 0){let d=Re(t.layers.blend,"host.layers.blend",Gi,"invalid-blend","blend mode");d.ok||r.push(...d.errors)}}let a;if(t.modules!==void 0)if(!pe(t.modules))r.push(q("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...fe(t.modules,Ui,"host.modules")),t.modules.refs!==void 0){let d=Yi(t.modules.refs,"host.modules.refs");d.ok?a=d.values:r.push(...d.errors)}else a=[];if(n.ok&&n.manifest.surface){let d=n.manifest.surface,l=t.surface;d.alpha===!0&&l?.alpha!==!0&&r.push(q("unsupported-surface","host does not provide an alpha-capable surface","surface.alpha")),d.clearPolicy&&((Array.isArray(l?.clearPolicy)?l.clearPolicy:l?.clearPolicy?[l.clearPolicy]:[]).includes(d.clearPolicy)||r.push(q("unsupported-surface",`host does not provide clear policy "${d.clearPolicy}"`,"surface.clearPolicy")))}if(n.ok&&n.manifest.layers){let d=n.manifest.layers,l=t.layers;if(d.compositor===!0&&l?.compositor!==!0&&r.push(q("unsupported-layer","host does not provide a compositor","layers.compositor")),d.blend){let b=new Set(l?.blend??[]);d.blend.forEach((g,v)=>{b.has(g)||r.push(q("unsupported-layer",`host does not provide blend mode "${g}"`,`layers.blend[${v}]`))})}}if(n.ok&&n.manifest.modules?.refs){let d=t.modules===void 0?[]:a??[];n.manifest.modules.refs.forEach((l,b)=>{d.some(g=>g.id===l.id&&g.version===l.version)||r.push(q("unsupported-module",`host does not provide required module "${l.id}@${l.version}"`,`modules.refs[${b}]`))})}if(t.kinds!==void 0){let d=Re(t.kinds,"host.kinds",qi,"invalid-kind","cart kind");if(!d.ok)r.push(...d.errors);else if(n.ok){let l=n.manifest.kind??"render";d.values.includes(l)||r.push(q("unsupported-kind",`host does not support cart kind "${l}"`,"kind"))}}return r.length>0?{ok:!1,errors:r}:{ok:!0}}var Wa=1,Ja=1e-6,Xa=.5,Qa=["normalized","asset","canvas","css","viewport"],Za=["center","top-left","top-right","bottom-left","bottom-right","top","bottom","left","right"],ed={center:{x:.5,y:.5},"top-left":{x:0,y:0},"top-right":{x:1,y:0},"bottom-left":{x:0,y:1},"bottom-right":{x:1,y:1},top:{x:.5,y:0},bottom:{x:.5,y:1},left:{x:0,y:.5},right:{x:1,y:.5}};function td(e){let t=ed[e];return{x:t.x,y:t.y}}function Wn(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:a}=e,d=i/n,l=o/r,b=a==="contain"?Math.min(d,l):Math.max(d,l),g=n*b,v=r*b,w=(i-g)/2,I=(o-v)/2,T=nn(-w/g),y=nn(-I/v),P=nn(i/g),$=nn(o/v);return{mode:a,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:b,offsetX:w,offsetY:I,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x:T,y,width:Math.min(P,1-T),height:Math.min($,1-y)}}}function nd(e,t){return{x:e.x*t.contentWidth,y:e.y*t.contentHeight}}function rd(e,t){return{x:e.x/t.contentWidth,y:e.y/t.contentHeight}}function Jn(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function Xn(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function Ji(e,t){return{x:e.x*t.devicePixelRatio,y:e.y*t.devicePixelRatio}}function Xi(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function id(e,t){return Ji(Jn(e,t),t)}function Qi(e,t){return Xn(Xi(e,t),t)}function Qn(e,t){let n=Jn({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 Zi(e,t){let n=Qn(e,t),r=t.devicePixelRatio;return{x:n.x*r,y:n.y*r,width:n.width*r,height:n.height*r}}function Zn(e,t,n,r){let o=(r?.space??"canvas")==="css"?Xn(e,t):Qi(e,t);for(let a of n.regions)if(pd(a,o))return a}function er(e,t){let n=mt(e);if(n)return Qn(n,t)}function od(e){let t=new Map,n=r=>{if(t.has(r.id))return{ok:!1,error:"duplicate-id",id:r.id};let i={id:r.id,point:{x:r.point.x,y:r.point.y},...r.origin!==void 0?{origin:r.origin}:{}};return t.set(i.id,i),{ok:!0,landmark:i}};if(e)for(let r of e){let i=n(r);if(!i.ok)throw new Error(`Duplicate landmark id: ${i.id}`)}return{register:n,get:r=>t.get(r),list:()=>[...t.values()]}}function sd(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),Wi(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=mt(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&&!cd(o)&&t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} is outside 0\u20131`}),i.polygon){for(let a of i.polygon)if(!Wi(a)){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],a=mt(o);if(a)for(let d=i+1;d<e.regions.length;d+=1){let l=e.regions[d],b=mt(l);b&&ld(a,b)&&t.push({code:"overlap",id:o.id,with:l.id,detail:`region ${o.id} overlaps ${l.id}`})}}return{ok:t.length===0,diagnostics:t}}function ad(e,t,n,r=[]){let i=[],o=(a,d,l)=>{i.push({method:a,id:l,args:d})};for(let a of n.regions){let d=mt(a);if(!d)continue;let l=Zi(d,t);e.fillStyle="rgba(0, 180, 255, 0.15)",e.strokeStyle="#00b4ff",e.fillRect&&e.fillRect(l.x,l.y,l.width,l.height),o("fillRect",[l.x,l.y,l.width,l.height],a.id),e.strokeRect&&e.strokeRect(l.x,l.y,l.width,l.height),o("strokeRect",[l.x,l.y,l.width,l.height],a.id),e.font="12px sans-serif";let b=a.id;e.fillText&&e.fillText(b,l.x+4,l.y+14),o("fillText",[b,l.x+4,l.y+14],a.id)}for(let a of r){let d=a.id?`${a.id}: ${a.code}`:a.code,l=16+i.filter(b=>b.method==="fillText").length*14;e.fillText&&e.fillText(d,8,l),o("fillText",[d,8,l],a.id)}return i}function dd(e){return JSON.stringify(e)}function ud(e){return JSON.parse(e)}function nn(e){return e<=0?0:e>=1?1:e}function Wi(e){return e.x>=0&&e.x<=1&&e.y>=0&&e.y<=1}function cd(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 ld(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 mt(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 pd(e,t){return e.polygon&&e.polygon.length>=3?fd(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 fd(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r,r+=1){let o=t[r],a=t[i];o.y>e.y!=a.y>e.y&&e.x<(a.x-o.x)*(e.y-o.y)/(a.y-o.y)+o.x&&(n=!n)}return n}var to=320,no=180,md=1024,yd="Runtime group has been destroyed";function hd(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 gd(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 ro(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 eo(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function bd(e){let t=new Set([Ce,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=ro(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function tr(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let s of e.participants){if(!s.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(s.id))throw new Error(`createRuntimeGroup: duplicate participant id "${s.id}"`);t.add(s.id)}let n=e.origin??0,r=e.width??to,i=e.height??no,o=e.maxTrace??md,a=[...e.participants].sort((s,f)=>s.id.localeCompare(f.id)),d=[],l=new Map,b=0,g=e.createId??e.router?.createId??(()=>`evt-${++b}`),v=e.now??e.router?.now??(()=>{let s=d[0];if(!s)return n;try{return s.cart.getClock().now}catch{return n}}),w=On({...e.router,createId:g,now:v,validate:e.validate??e.router?.validate}),I=[],T=!1,y=!1,P=()=>{},$=s=>f=>{s.events.push(f),s.userOnEvent?.(f)},H=()=>{if(y)throw new Error(yd)},E=()=>{P();for(let s of d){try{w.detach(s.id)}catch{}try{s.runtime.destroy()}catch{}s.ownsContainer&&s.container.remove()}d.length=0,l.clear()};try{for(let s of a){let f=s.width??r,R=s.height??i,L=!s.container,D=s.container??gd(f,R),V=Ln({container:D,seed:s.seed??hd(s.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?s.id:void 0,kind:s.kind??"render"}),M={id:s.id,kind:s.kind??"render",cartDef:s.cart,initialState:s.initialState,gameManager:s.gameManager,userOnEvent:s.onEvent,runtime:V,container:D,ownsContainer:L,cart:void 0,events:[],errors:[]};V.onError=(p,S)=>{M.errors.push({error:p,info:S})},w.attach(s.id,V.hostChannel,ro(s)),M.cart=V.mount(s.cart,{initialState:s.initialState,gameManager:s.gameManager,onEvent:$(M)}),d.push(M),l.set(M.id,M)}P=w.subscribe(bd(a),s=>{for(I.push(eo(s));I.length>o;)I.shift()})}catch(s){throw E(),s}let h=s=>({id:s.id,kind:s.kind,runtime:s.runtime,container:s.container,get events(){return s.events.slice()},get errors(){return s.errors.slice()},get cart(){return s.cart}});return{router:w,origin:n,get paused(){return T},get audioBroker(){return e.audioBroker},participant(s){H();let f=l.get(s);if(!f)throw new Error(`createRuntimeGroup: unknown participant "${s}"`);return h(f)},async step(s=1){if(H(),T)return;let f=Math.max(0,Math.floor(s));for(let R=0;R<f;R++){w.turn();for(let L of d)try{await L.cart.step(1)}catch(D){L.errors.push({error:D,info:{phase:"update",consecutive:L.errors.length+1,stopped:!1}})}}},pause(){H(),T=!0;for(let s of d)s.cart.pause()},resume(){H(),T=!1;for(let s of d)s.cart.resume()},reset(){H(),I.length=0;for(let s of d)s.events.length=0,s.errors.length=0,s.cart=s.runtime.mount(s.cartDef,{initialState:s.initialState,gameManager:s.gameManager,onEvent:$(s)});w.turn()},resize(s,f){H();let R=Math.max(1,s|0),L=Math.max(1,f|0);for(let D of d){Object.defineProperty(D.container,"clientWidth",{value:R,configurable:!0}),Object.defineProperty(D.container,"clientHeight",{value:L,configurable:!0});let V=D.cart.canvas;V&&(V.width=R,V.height=L)}},detach(s){H();let f=l.get(s);if(!f)throw new Error(`createRuntimeGroup: unknown participant "${s}"`);try{w.detach(f.id)}catch{}try{f.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(f.id),f.ownsContainer&&f.container.remove();let R=d.indexOf(f);R>=0&&d.splice(R,1),l.delete(s)},dispatch(s,f){H();let R=l.get(s);if(!R)throw new Error(`createRuntimeGroup: unknown participant "${s}"`);R.cart.dispatch(f)},publish(s,f){return H(),w.publish(s,f)},inspectParticipants(){H();let s=new Map(d.map(f=>[f.id,f.kind]));return w.inspectParticipants().map(f=>({...f,kind:s.get(f.id)??"render"}))},async inspect(){H();let s={},f={},R=new Map(w.inspectParticipants().map(D=>[D.id,D]));for(let D of d){let V=await D.cart.getReplayMetadata(),M=D.cart.getClock();f[D.id]=M;let p=R.get(D.id);s[D.id]={state:V.state,events:D.events.slice(),errors:D.errors.slice(),kind:D.kind,clock:M,emit:p?.emit.slice()??[],subscribe:p?.subscribe.slice()??[],authoritative:p?.authoritative===!0}}let L=I.map(D=>eo(D));return{participants:s,trace:L,diagnostics:{paused:T,participantIds:d.map(D=>D.id),clocks:f,rejections:L.filter(D=>D.type===Ce).map(D=>D.payload)}}},destroy(){if(!y){y=!0,T=!1;try{E()}finally{I.length=0}}}}}var rn=1,ao=512,uo="[REDACTED]",vd=new Set([ve,Ee]);function ue(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function on(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>on(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)?uo:on(o,t);return r}function Ed(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function Sd(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 io(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 Cd(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=io(e[n]),i=io(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function oo(e){let t=new Map,n=[];for(let o of e){if(o.outcome==="duplicate"){n.push(void 0);continue}let a={envelopeId:o.envelopeId,type:o.type,source:o.source,outcome:o.outcome,children:[]};o.reason&&(a.reason=o.reason),n.push(a),o.envelopeId&&!t.has(o.envelopeId)&&t.set(o.envelopeId,a)}let r=new Set;for(let o=0;o<e.length;o++){let a=e[o],d=n[o];if(!d)continue;let l=a.causationId?t.get(a.causationId):void 0;l&&l!==d&&(l.children.push(d),r.add(d))}let i=[];for(let o of n)o&&!r.has(o)&&i.push(o);return i}function so(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 Ad(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:ue(t.clock),state:on(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=Ed(r.error)),i}function co(e={}){let t=new Set(e.redactedKeys??[]),n=e.maxRecords??ao,r=e.registry,i=0,o=0,a=!1,d=[],l=[],b,g=[],v=0,w=[],I={},T=()=>{},y=()=>{if(a)throw new Error("Replay inspector has been destroyed")},P=h=>{let u=r?.get(h.type),s={index:o,turn:h.turn,time:h.time,outcome:h.outcome,source:h.source,type:h.type,deliveredTo:h.deliveredTo.slice(),payload:on(h.payload,t)};for(o+=1,h.reason&&(s.reason=h.reason),h.detail&&(s.detail=h.detail),h.target&&(s.target=h.target),h.kind&&(s.kind=h.kind),h.envelopeId&&(s.envelopeId=h.envelopeId),h.priorEnvelopeId&&(s.priorEnvelopeId=h.priorEnvelopeId),h.correlationId&&(s.correlationId=h.correlationId),h.causationId&&(s.causationId=h.causationId),h.hops!==void 0&&(s.hops=h.hops),h.seq!==void 0&&(s.seq=h.seq),h.idempotencyKey&&(s.idempotencyKey=h.idempotencyKey),h.schemaVersion!==void 0&&(s.schemaVersion=h.schemaVersion),u&&(s.payloadSchemaVersion=u.payloadSchema.version),d.push(s);d.length>n;)d.shift(),i+=1},$=h=>d.filter(u=>Sd(u,h)).map(u=>ue(u)),H=h=>h?h.inspectParticipants().map(u=>so(u,u.kind)):w.map(u=>ue(u)),E={watchRouter(h){if(y(),T(),w=h.inspectParticipants().map(s=>so(s)),d.length===0)for(let s of h.inspectDecisions())P(s);let u=h.subscribeDecision(s=>P(s));return T=()=>{u(),T=()=>{}},l.push(T),T},bind(h){y(),b&&T(),b=h,v=h.origin,E.watchRouter(h.router),w=H(h);let u={publish(s,f){y();let R={kind:"publish",event:ue(s)};return f?.cause&&(R.extras={cause:ue(f.cause)}),g.push(R),h.publish(s,f)},dispatch(s,f){y();let R=ue(f);typeof R.type=="string"&&vd.has(R.type)?g.push({kind:"asset",participantId:s,event:R}):g.push({kind:"dispatch",participantId:s,event:R}),h.dispatch(s,f)},async step(s=1){y(),g.push({kind:"step",frames:s}),await h.step(s)},async report(){y();let s=await h.inspect(),f=[];for(let R of Object.keys(s.participants).sort())f.push(Ad(R,s.participants[R],t));w=f,I={};for(let R of f)I[R.id]=ue(R.state);return E.report()},async exportTrace(s){return await u.report(),E.exportTrace(s)},unbind(){T(),b=void 0}};return u},importTrace(h){y();let u=typeof h=="string"?JSON.parse(h):h;if(u.schemaVersion!==rn)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,d.length=0,g=ue(u.tape??[]),v=u.origin??0,w=ue(u.participants??[]),I=ue(u.snapshots??{});for(let s of u.records??[])P({outcome:s.outcome,reason:s.reason,detail:s.detail,source:s.source,type:s.type,kind:s.kind,envelopeId:s.envelopeId,priorEnvelopeId:s.priorEnvelopeId,target:s.target,deliveredTo:s.deliveredTo,hops:s.hops,seq:s.seq,correlationId:s.correlationId,causationId:s.causationId,idempotencyKey:s.idempotencyKey,schemaVersion:s.schemaVersion,payload:s.payload,turn:s.turn,time:s.time})},exportTrace(h){return y(),{schemaVersion:rn,origin:v,redactedKeys:[...t],participants:ue(w),tape:ue(g),records:$(h),snapshots:ue(I)}},report(h){y();let u=$(h);return{schemaVersion:rn,participants:ue(w),records:u,trees:oo(u),dropped:i}},causationTree(h){y();let u=$(h?{correlationId:h}:void 0);return oo(u)},records(){return y(),d.map(h=>ue(h))},reset(){y(),d.length=0,g=[],i=0,o=0,I={},b&&(w=H(b))},destroy(){if(!a){for(a=!0,T();l.length>0;)l.pop()?.();d.length=0,g=[],w=[],I={},b=void 0}}};return E}async function wd(e,t,n={}){let r=co({redactedKeys:n.redactedKeys??e.redactedKeys,maxRecords:n.maxRecords,registry:n.registry}),i=r.bind(t);try{for(let a of e.tape)a.kind==="publish"?i.publish(a.event,a.extras):a.kind==="dispatch"||a.kind==="asset"?i.dispatch(a.participantId,a.event):await i.step(a.frames);let o=await i.report();return{inspector:r,report:o}}catch(o){throw r.destroy(),o}}var kd=en,Rd=tn,xd=["participant","image","canvas"],Id="Compositor has been destroyed";function Pd(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function Td(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 Md(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Ld(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:Md(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function nr(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=Ld(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:Pd(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function lo(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 po(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function rr(e,t){return 255-Math.round((255-e)*(255-t)/255)}function Dd(e,t,n,r,i,o,a,d){let l=o/255*a;if(l<=0)return;let b=e[t],g=e[t+1],v=e[t+2],w=e[t+3]/255,I=n,T=r,y=i;d==="screen"&&(I=rr(b,n),T=rr(g,r),y=rr(v,i));let P=l+w*(1-l);if(P<=0){e[t]=0,e[t+1]=0,e[t+2]=0,e[t+3]=0;return}e[t]=Math.round((I*l+b*w*(1-l))/P),e[t+1]=Math.round((T*l+g*w*(1-l))/P),e[t+2]=Math.round((y*l+v*w*(1-l))/P),e[t+3]=Math.round(P*255)}function _d(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 a=0;a<t;a++){let d=Math.min(e.width-1,Math.floor(a*e.width/t)),l=(o*e.width+d)*4,b=(i*t+a)*4;r[b]=e.data[l],r[b+1]=e.data[l+1],r[b+2]=e.data[l+2],r[b+3]=e.data[l+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function Vd(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 fo(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function mo(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 sn(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 ir(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 s of e.layers){let f=nr(s,n);if(t.has(f.id))throw new Error(`createCompositor: duplicate layer id "${f.id}"`);t.add(f.id),r.set(f.id,f)}let i=e.group,o=e.dpr&&e.dpr>0?e.dpr:1,a=Math.max(1,(e.width??320)|0),d=Math.max(1,(e.height??180)|0),l=o,b=e.offscreen!==!1,g=!e.target;if(!b&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let v=e.target??document.createElement("canvas"),w=v.getContext("2d",{alpha:!0});if(!w)throw new Error("createCompositor: host canvas has no 2d context");let I=!1,T=()=>{if(I)throw new Error(Id)},y=()=>({width:Math.max(1,Math.round(a*l)),height:Math.max(1,Math.round(d*l))}),P=()=>{let s=y();v.width!==s.width&&(v.width=s.width),v.height!==s.height&&(v.height=s.height),v.style.width=`${a}px`,v.style.height=`${d}px`},$=()=>po([...r.values()]).map(lo),H=s=>{if(s.source.kind==="image")return s.source.image;if(s.source.kind==="canvas")try{return mo(s.source.canvas)}catch{return}try{let R=i.participant(s.id).cart.canvas;return R?(sn(R,s),mo(R)):void 0}catch{return}},E=(s,f,R)=>{if(s.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&s.fill(0),e.host?.image){let L=_d(e.host.image,f,R);s.set(L.data);return}e.host?.color&&Vd(s,Td(e.host.color))},h=()=>{let{width:s,height:f}=y();P();let R=w.createImageData(s,f);E(R.data,s,f);for(let L of po([...r.values()])){if(!L.visible||L.opacity<=0)continue;let D=H(L);if(!D)continue;let V=L.clearPolicy==="transparent",M=Math.min(s,D.width),p=Math.min(f,D.height);for(let S=0;S<p;S++)for(let x=0;x<M;x++){if(!fo(L.clip,x,S))continue;let N=(S*D.width+x)*4,W=D.data[N],Y=D.data[N+1],U=D.data[N+2],j=D.data[N+3];V&&W===0&&Y===0&&U===0||j<=0||Dd(R.data,(S*s+x)*4,W,Y,U,j,L.opacity,L.blend)}}return w.putImageData(R,0,0),R};P();for(let s of $())try{sn(i.participant(s.id).cart.canvas,s)}catch{}return{get canvas(){return v},get width(){return a},get height(){return d},get dpr(){return l},compose(){return T(),h()},captureComposedFrame(){T();let s=h();return{imageData:s,pngDataUrl:v.toDataURL("image/png"),width:s.width,height:s.height,declaredOrder:$()}},resize(s,f,R){T(),a=Math.max(1,s|0),d=Math.max(1,f|0),R!==void 0&&(l=R>0?R:1);let L=y();i.resize(L.width,L.height),P()},setLayer(s,f){T();let R=r.get(s);if(!R)throw new Error(`createCompositor: unknown layer "${s}"`);let L=nr({id:s,order:f.order??R.order,visible:f.visible??R.visible,opacity:f.opacity??R.opacity,blend:f.blend??R.blend,clip:f.clip===void 0?R.clip??void 0:f.clip,pointerEvents:f.pointerEvents??R.pointerEvents,clearPolicy:f.clearPolicy??R.clearPolicy,source:f.source??R.source},n);r.set(s,L);try{sn(i.participant(s).cart.canvas,L)}catch{}},addLayer(s){if(T(),r.has(s.id))throw new Error(`createCompositor: duplicate layer id "${s.id}"`);let f=nr(s,n);r.set(f.id,f);try{sn(i.participant(f.id).cart.canvas,f)}catch{}},layer(s){T();let f=r.get(s);if(!f)throw new Error(`createCompositor: unknown layer "${s}"`);return lo(f)},layers(){return T(),$()},pointerTarget(s,f){T();let R=s|0,L=f|0,D=[...$()].reverse();for(let V of D){if(!V.visible||V.pointerEvents==="none"||!fo(V.clip,R,L))continue;let M=r.get(V.id);if(M&&M.source.kind!=="participant")return V.id;try{i.participant(V.id)}catch{continue}return V.id}},unmountLayer(s){if(T(),!r.has(s))throw new Error(`createCompositor: unknown layer "${s}"`);r.delete(s);try{i.detach(s)}catch{}},inspect(){T();let s=$();return{viewport:{width:a,height:d,dpr:l},clearPolicy:n,layers:s,declaredOrder:s.map(f=>f.id)}},destroy(){I||(I=!0,g&&v.parentNode&&v.remove())}}}var or=1,ho=["layer","mask","sprite"],go=["show","hide","replace","crossfade"],bo=":incoming",dn="visual.layer.revealed",yt="visual.layer.hidden",un="visual.layer.transition-started",cn="visual.layer.transition-completed",ht="visual.layer.failed",Od=[dn,yt,un,cn,ht],vo="host.state.accepted",Nd=["asset-failed","missing-source","unknown-layer","unknown-version","invalid-snapshot"],Fd="Visual layer controller has been destroyed",Hd=new Set(ho),Kd=new Set(go);function Eo(e){return typeof e=="string"&&Hd.has(e)}function So(e){return typeof e=="string"&&Kd.has(e)}function Bd(e){return e===dn||e===yt||e===un||e===cn||e===ht}function Co(e){return`${e}${bo}`}function $d(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function Ud(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function nt(e){return JSON.parse(JSON.stringify(e))}function an(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function Gd(e){let t=an(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function jd(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 me(e,t){if(t)return e.versions.find(n=>n.id===t)}function yo(e){return e?{...e}:null}function qd(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=et({originFrame:e.originFrame,reducedMotion:r}),a=e.sceneId??null,d=!1,l=0,b=new Map,g=new Map,v=new Map,w=new Map,I=[],T=[],y=()=>{if(d)throw new Error(Fd)};function P(c){I.push(c),e.dispatch&&e.dispatch({type:c.type,kind:c.type===ht?"diagnostic":"state",payload:c})}function $(c){T.push(c),P({type:ht,atFrame:c.atFrame,layerId:c.layerId,version:c.version,progress:0,code:c.code})}function H(c,C){v.set(c,C)}function E(c){let C=v.get(c);if(C)return C;if(n?.get(c))return"ready";let A=n?.getProgress().items[c];return A?.state==="failed"?"failed":A?.state==="ready"?"ready":"pending"}function h(c){let C=g.get(c);if(C)return C.kind==="canvas"?{kind:"canvas",canvas:C.canvas}:{kind:"image",image:C.image}}function u(c,C){let A=me(c.declaration,C);return A?E(A.assetId)==="ready"&&!!h(A.assetId):!1}function s(c){return c.overrideVersion&&u(c,c.overrideVersion)?c.overrideVersion:c.committedVersion}function f(c,C){let A=me(c.declaration,C);return A?yo(w.get(A.assetId))??yo(A.provenance)??null:null}function R(c,C=0){return o.get(c)?.progress??C}function L(c,C,A){try{t.layer(c)}catch{t.addLayer({id:c,order:C,visible:!1,opacity:0,pointerEvents:A.pointerEvents??"none",blend:A.blend,clip:A.clip??void 0,clearPolicy:A.clearPolicy})}}function D(c){try{t.setLayer(c.incomingLayerId,{visible:!1,opacity:0})}catch{}}function V(){for(let c of b.values()){let C=s(c),A=me(c.declaration,C),F=c.transition,G=F?R(F.cueKey):0,Z=F?.kind==="crossfade"&&F.toVersion!==null&&u(c,F.toVersion);L(c.compositorLayerId,c.order,c);let ee=c.visible,z=1;F?.kind==="hide"?(z=1-G,G>=1&&(ee=!1)):F?.kind==="show"?(ee=u(c,F.toVersion),z=ee?F.durationFrames===0?1:G:0):Z&&(z=1-G);let xe=A?h(A.assetId):void 0;if(t.setLayer(c.compositorLayerId,{order:c.order,visible:ee&&!!xe,opacity:z,blend:c.blend,clip:c.clip??void 0,pointerEvents:c.pointerEvents,clearPolicy:c.clearPolicy,source:xe}),Z&&F){let Et=me(c.declaration,F.toVersion),St=Et?h(Et.assetId):void 0;if(St){try{t.layer(c.incomingLayerId)}catch{t.addLayer({id:c.incomingLayerId,order:c.order+1,visible:!1,opacity:0,pointerEvents:"none",blend:c.blend,clip:c.clip??void 0,clearPolicy:c.clearPolicy})}t.setLayer(c.incomingLayerId,{order:c.order+1,visible:!0,opacity:G,blend:c.blend,clip:c.clip??void 0,pointerEvents:"none",clearPolicy:c.clearPolicy,source:St});continue}}D(c)}}function M(c){let C=s(c);return{id:c.declaration.id,kind:c.kind,visible:c.visible&&!!(C&&u(c,C)),activeVersion:C,pendingVersion:c.pendingVersion,committedVersion:c.committedVersion,opacity:t.layer(c.compositorLayerId).opacity,order:c.order,provenance:f(c,C),overrideVersion:c.overrideVersion,transition:c.transition?{kind:c.transition.kind,progress:R(c.transition.cueKey),fromVersion:c.transition.fromVersion,toVersion:c.transition.toVersion,cueKey:c.transition.cueKey,startFrame:c.transition.startFrame,durationFrames:c.transition.durationFrames,delayFrames:c.transition.delayFrames,easing:c.transition.easing}:null}}function p(c,C,A){c.committedVersion=C,c.pendingVersion=null,c.transition=null,c.visible=A,V(),P({type:A?dn:yt,atFrame:o.frame,layerId:c.declaration.id,version:C,progress:1})}function S(c){c.visible=!1,c.pendingVersion=null,c.transition=null,V(),P({type:yt,atFrame:o.frame,layerId:c.declaration.id,version:c.committedVersion??void 0,progress:1})}function x(c,C,A,F){let G=c.fallback;c.transition=null,c.pendingVersion=null,G==="hide"?c.visible=!1:typeof G=="object"&&G.version&&u(c,G.version)&&(c.committedVersion=G.version,c.visible=!0),V(),$({code:F?"asset-failed":"missing-source",layerId:c.declaration.id,version:C??void 0,assetId:A,message:F?F.message:`visual layer "${c.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:F})}function N(c){let C=c.transition;if(C?.kind==="hide")return S(c),!0;let A=c.pendingVersion??C?.toVersion??null;if(!A)return c.transition=null,!0;if(!me(c.declaration,A))return x(c,A),!0;if(u(c,A))return p(c,A,!0),!0;let F=me(c.declaration,A).assetId;return E(F)==="failed"?(x(c,A,F),!0):(c.transition=null,c.pendingVersion=A,V(),!1)}function W(){for(let c of b.values())if(!c.transition&&c.pendingVersion){if(u(c,c.pendingVersion))p(c,c.pendingVersion,!0);else if(E(me(c.declaration,c.pendingVersion)?.assetId??"")==="failed"){let C=me(c.declaration,c.pendingVersion);x(c,c.pendingVersion,C?.assetId)}}for(let c of b.values())c.overrideVersion&&u(c,c.overrideVersion)&&c.committedVersion!==c.overrideVersion&&p(c,c.overrideVersion,!0)}function Y(c,C){H(c,"failed");for(let A of b.values()){let F=A.declaration.versions.find(xe=>xe.assetId===c);if(!F)continue;let G=me(A.declaration,A.pendingVersion),Z=me(A.declaration,A.transition?.toVersion??null),ee=me(A.declaration,A.overrideVersion);if(G?.assetId===c||Z?.assetId===c||ee?.assetId===c){A.transition&&o.cancel(A.transition.cueKey),ee?.assetId===c&&(A.overrideVersion=null),x(A,F.id,c,C);continue}$({code:"asset-failed",layerId:A.declaration.id,version:F.id,assetId:c,message:C?.message??`asset "${c}" failed; prior frame kept`,atFrame:o.frame,failure:C}),V()}}function U(c){for(let C of c){let A=[...b.values()].find(F=>F.transition?.cueKey===C.idempotencyKey);if(!(!A||!A.transition))if(C.type===we)P({type:un,atFrame:C.atFrame,layerId:A.declaration.id,version:A.transition.toVersion??void 0,kind:A.transition.kind,progress:C.progress}),V();else if(C.type===De){let F=A.transition.kind,G=A.transition.toVersion??void 0;N(A),P({type:cn,atFrame:C.atFrame,layerId:A.declaration.id,version:G,kind:F,progress:1})}else(C.type===ke||C.type===Ae)&&(A.transition=null,V())}}function j(){let c=I.slice(l).map(C=>nt(C));return l=I.length,c}for(let c of e.layers){if(!c?.id)throw new Error("createVisualLayerController: layer id is required");if(b.has(c.id))throw new Error(`createVisualLayerController: duplicate layer id "${c.id}"`);if(!Eo(c.kind))throw new Error(`createVisualLayerController: layer "${c.id}" kind is invalid`);if(!c.versions?.length)throw new Error(`createVisualLayerController: layer "${c.id}" needs versions`);let C=new Set;for(let z of c.versions){if(!z?.id||!z.assetId)throw new Error(`createVisualLayerController: layer "${c.id}" versions need id and assetId`);if(C.has(z.id))throw new Error(`createVisualLayerController: layer "${c.id}" duplicate version "${z.id}"`);C.add(z.id),z.provenance&&w.set(z.assetId,{...z.provenance})}if(c.initialVersion&&!C.has(c.initialVersion))throw new Error(`createVisualLayerController: layer "${c.id}" unknown initialVersion`);let A=c.compositorLayerId??c.id,F=c.incomingLayerId??Co(A),G=c.order??0,Z=c.pointerEvents??(c.kind==="mask"?"none":"auto"),ee={declaration:c,compositorLayerId:A,incomingLayerId:F,kind:c.kind,order:G,blend:c.blend??"source-over",clip:c.clip?{...c.clip}:null,pointerEvents:Z,clearPolicy:c.clearPolicy??"opaque",fallback:c.fallback??i,visible:!!c.initialVersion,committedVersion:c.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};b.set(c.id,ee),L(A,G,ee)}V();function ne(c){if(y(),!c||typeof c!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(!c.layerId)return{ok:!1,reason:"invalid",detail:"layerId is required"};let C=b.get(c.layerId);if(!C)return{ok:!1,reason:"invalid",detail:`unknown layer "${c.layerId}"`};if(!So(c.kind))return{ok:!1,reason:"invalid",detail:"unsupported kind"};if(c.kind!=="hide"&&!c.toVersion)return{ok:!1,reason:"invalid",detail:"toVersion is required"};if(c.toVersion&&!me(C.declaration,c.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${c.toVersion}"`};let A={name:c.name,idempotencyKey:c.idempotencyKey,startFrame:c.startFrame,durationFrames:c.durationFrames,delayFrames:c.delayFrames,easing:c.easing,repeat:c.repeat,reducedMotion:c.reducedMotion,onDuplicate:c.onDuplicate??"replace"},F=o.snapshot().events.length,G=o.play(A);if(!G.ok)return G;let Z=o.snapshot().events.slice(F);return C.pendingVersion=c.kind==="hide"?C.committedVersion:c.toVersion??null,C.transition={kind:c.kind,cueKey:c.idempotencyKey,fromVersion:c.fromVersion??C.committedVersion,toVersion:c.kind==="hide"?C.committedVersion:c.toVersion??null,startFrame:G.cue.startFrame,durationFrames:G.cue.durationFrames,delayFrames:G.cue.delayFrames,easing:G.cue.easing},U(Z),V(),j(),G}function _(c){let C=an(c),A=typeof C?.sceneId=="string"?C.sceneId:void 0;if(e.sceneId&&A&&A!==e.sceneId)return;A&&(a=A);let F=typeof C?.layerId=="string"?C.layerId:typeof C?.overlayId=="string"?C.overlayId:void 0,G=typeof C?.version=="string"?C.version:void 0;if(F&&G){ne({name:`visual:${F}:replace`,idempotencyKey:`visual:${F}:accepted`,layerId:F,kind:"replace",toVersion:G,durationFrames:2});return}for(let Z of e.onAccepted??[])ne({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 J(){let c=[...b.values()].map(A=>{let F=M(A);return{id:A.declaration.id,kind:A.kind,visible:A.visible,committedVersion:A.committedVersion,pendingVersion:A.pendingVersion,activeVersion:F.activeVersion,opacity:F.opacity,order:A.order,overrideVersion:A.overrideVersion,provenance:F.provenance,fallback:A.fallback,transition:F.transition}}).sort((A,F)=>A.id<F.id?-1:A.id>F.id?1:0),C={};for(let[A,F]of[...v.entries()].sort(([G],[Z])=>G<Z?-1:G>Z?1:0))C[A]=F;return nt({schemaVersion:or,frame:o.frame,sceneId:a,reducedMotion:r,layers:c,assets:C,events:I.map(A=>nt(A)),diagnostics:T.map(A=>nt(A))})}function Q(c){y();let C=[],A=ee=>{let z={code:"invalid-snapshot",layerId:"",message:ee,atFrame:o.frame};return{ok:!1,errors:[...C,z]}},F=c;if(typeof c=="string")try{F=JSON.parse(c)}catch{return A("snapshot JSON is invalid")}if(!F||typeof F!="object"||Array.isArray(F))return A("snapshot must be an object");let G=F;if(G.schemaVersion!==or)return A("unsupported visual layer snapshot schema");if(typeof G.frame!="number"||!Number.isFinite(G.frame))return A("frame must be finite");if(!Array.isArray(G.layers))return A("layers must be an array");if(o=et({originFrame:G.frame,reducedMotion:r}),a=typeof G.sceneId=="string"||G.sceneId===null?G.sceneId:a,I.length=0,T.length=0,l=0,Array.isArray(G.events)&&(I.push(...G.events.map(ee=>nt(ee))),l=I.length),Array.isArray(G.diagnostics)&&T.push(...G.diagnostics.map(ee=>nt(ee))),v.clear(),G.assets&&typeof G.assets=="object")for(let[ee,z]of Object.entries(G.assets))(z==="ready"||z==="failed"||z==="pending")&&v.set(ee,z);let Z=new Map(G.layers.map(ee=>[ee.id,ee]));for(let ee of b.values()){let z=Z.get(ee.declaration.id);z&&(ee.visible=!!z.visible,ee.committedVersion=z.committedVersion??null,ee.pendingVersion=z.pendingVersion??null,ee.overrideVersion=z.overrideVersion??null,ee.transition=null,z.transition&&o.play({name:`visual:${ee.declaration.id}:${z.transition.kind}`,idempotencyKey:z.transition.cueKey,startFrame:z.transition.startFrame,durationFrames:z.transition.durationFrames,delayFrames:z.transition.delayFrames,easing:z.transition.easing,onDuplicate:"replace"}).ok&&(ee.transition={kind:z.transition.kind,cueKey:z.transition.cueKey,fromVersion:z.transition.fromVersion,toVersion:z.transition.toVersion,startFrame:z.transition.startFrame,durationFrames:z.transition.durationFrames,delayFrames:z.transition.delayFrames,easing:z.transition.easing}))}return V(),{ok:!0,snapshot:J()}}return{registerSource(c,C){if(y(),typeof c!="string"||c.length===0)throw new Error("createVisualLayerController: assetId is required");if(C instanceof HTMLCanvasElement)g.set(c,{kind:"canvas",canvas:C});else if(C&&"data"in C&&"width"in C)g.set(c,{kind:"image",image:Ud(C)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");W(),V()},handleHostEvent(c){if(y(),!c||typeof c!="object")return;if(c.type===vo){_(c.payload);return}let C=Gd(c.payload);if(C){if(c.type===ve){H(C,"ready");let F=an(c.payload)?.resource;if(F&&typeof F=="object"&&"provenance"in F){let G=F.provenance;G&&w.set(C,{...G})}W(),V();return}if(c.type===Ee){let A=an(c.payload);Y(C,jd(A?.failure))}}},override(c,C){y();let A=b.get(c);if(!A)throw new Error(`createVisualLayerController: unknown layer "${c}"`);if(C===null){A.overrideVersion=null,V();return}if(!me(A.declaration,C))throw new Error(`createVisualLayerController: unknown version "${C}" on "${c}"`);if(A.overrideVersion=C,u(A,C)){A.transition&&o.cancel(A.transition.cueKey),p(A,C,!0);return}V()},play:ne,step(c=1){y();let C=o.step(c);return U(C),W(),V(),j()},snapshot(){return y(),J()},restore:Q,inspect(){return y(),V(),[...b.values()].map(M).sort((c,C)=>c.id<C.id?-1:c.id>C.id?1:0)},captureComposedFrame(){return y(),V(),t.captureComposedFrame()},destroy(){d||(d=!0,o.reset(),I.length=0,T.length=0)},get frame(){return o.frame},get sceneId(){return a},get compositor(){return t}}}var zd=["invalid-ref","unknown-module","version-mismatch","not-allowlisted","load-failed","invoke-failed","timeout","rate-limited","destroyed"],Ao="executable module host has been destroyed";var Yd=/^[a-z0-9][a-z0-9.-]*$/i,Wd=/^[a-z0-9][a-z0-9-]*$/i;function Oe(e){return{id:e.id,version:e.version}}function sr(e){return`${e.id}@${e.version}`}function gt(e){return typeof e=="string"&&e.length>0&&Yd.test(e)}function Jd(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==="*"||Wd.test(n))}function Ro(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 Xd(e,t){return t.some(n=>n.version===e.version&&Ro(n.id,e.id))}function bt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Qd(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function wo(e){return e instanceof Error&&e.message?e.message:String(e)}function ar(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>ar(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=ar(e[n]);return Object.freeze(t)}function ko(e){if(!bt(e))return;let t=e.id,n=e.version;if(!(!gt(t)||!gt(n)))return{id:t,version:n}}function Zd(e){if(e===void 0)return{};if(!bt(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 eu(e){if(!bt(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((u,s)=>{if(!bt(u))throw new Error(`createExecutableModuleHost: allowlist[${s}] must be an object`);if(!Jd(u.id))throw new Error(`createExecutableModuleHost: allowlist[${s}].id is not a valid id or pattern`);if(!gt(u.version)||u.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${s}].version must be an exact version`);return{id:u.id,version:u.version}}),n=new Map,r=new Map;for(let[u,s]of e.modules.entries()){if(!bt(s))throw new Error(`createExecutableModuleHost: modules[${u}] must be an object`);if(!gt(s.id))throw new Error(`createExecutableModuleHost: modules[${u}].id is invalid`);if(!gt(s.version))throw new Error(`createExecutableModuleHost: modules[${u}].version is invalid`);if(typeof s.create!="function")throw new Error(`createExecutableModuleHost: modules[${u}].create must be a function`);let f=`${s.id}@${s.version}`;if(n.has(f))throw new Error(`createExecutableModuleHost: duplicate module ${f}`);n.set(f,{id:s.id,version:s.version,create:s.create,capabilities:s.capabilities});let R=r.get(s.id)??[];R.push(s.version),r.set(s.id,R)}let i=Zd(e.limits),o=e.capabilities,a=new Map,d=new Set,l=[],b=0,g=0,v=!1;function w(u,s,f){let R=f?{code:u,detail:s,ref:Oe(f)}:{code:u,detail:s};return l.push(R),l.length>256&&l.shift(),R}function I(u,s,f){return{ok:!1,error:w(u,s,f)}}function T(u){if(v){let V=ko(u);return I("destroyed",Ao,V)}let s=ko(u);if(!s)return I("invalid-ref","module ref requires exact id and version");let f=n.get(sr(s)),R=r.has(s.id),L=Xd(s,t),D=t.some(V=>Ro(V.id,s.id)&&V.version!==s.version);return L?f?{ok:!0,ref:s,registration:f}:R?I("version-mismatch",`no factory for ${s.id}@${s.version}`,s):I("unknown-module",`unknown module "${s.id}"`,s):D||R&&!f?I("version-mismatch",`no allowlisted factory for ${s.id}@${s.version}`,s):!f&&!R?I("unknown-module",`unknown module "${s.id}"`,s):I("not-allowlisted",`${s.id}@${s.version} is not allowlisted`,s)}function y(u,s){let f=sr(u);if(a.has(f))return{ok:!0,ref:Oe(u)};let R=ar({...o??{},...s.capabilities??{}});try{let L=s.create(R);return!L||typeof L.invoke!="function"?I("load-failed",`factory for ${u.id}@${u.version} did not return an invoke() module`,u):(a.set(f,{ref:Oe(u),instance:L}),{ok:!0,ref:Oe(u)})}catch(L){return I("load-failed",wo(L),u)}}function P(u){let s=T(u);return s.ok?y(s.ref,s.registration):s}function $(u,s){let f=T(u);if(!f.ok)return Promise.resolve(f);if(i.maxInvokesPerTurn!==void 0&&g>=i.maxInvokesPerTurn)return Promise.resolve(I("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,f.ref));g+=1;let R=y(f.ref,f.registration);if(!R.ok)return Promise.resolve(R);let L=a.get(sr(f.ref));if(!L)return Promise.resolve(I("load-failed","module instance was not retained",f.ref));let D=new AbortController;d.add(D);let V=Date.now(),M=i.maxInvokeMs,p;M!==void 0&&(p=setTimeout(()=>D.abort(),M));let S=N=>(p!==void 0&&clearTimeout(p),d.delete(D),v?I("destroyed",Ao,f.ref):N),x=N=>D.signal.aborted&&M!==void 0?I("timeout",`invoke exceeded ${M}ms`,f.ref):I("invoke-failed",wo(N),f.ref);try{let N=L.instance.invoke(s,{signal:D.signal,turn:b});return Qd(N)?new Promise(W=>{let Y=!1,U=j=>{Y||(Y=!0,W(S(j)))};if(M!==void 0){let j=p;j!==void 0&&clearTimeout(j),p=setTimeout(()=>{D.abort(),U(I("timeout",`invoke exceeded ${M}ms`,f.ref))},Math.max(0,M-(Date.now()-V)))}Promise.resolve(N).then(j=>U({ok:!0,value:j}),j=>U(x(j)))}):M!==void 0&&Date.now()-V>=M?(D.abort(),Promise.resolve(S(I("timeout",`invoke exceeded ${M}ms`,f.ref)))):Promise.resolve(S({ok:!0,value:N}))}catch(N){return Promise.resolve(S(x(N)))}}function H(){v||(b+=1,g=0)}function E(){return{allowlist:t.map(Oe),registered:[...n.values()].map(u=>({id:u.id,version:u.version})),loaded:[...a.values()].map(u=>Oe(u.ref)),turn:b,invokesThisTurn:g,diagnostics:l.map(u=>u.ref?{...u,ref:Oe(u.ref)}:{...u})}}function h(){if(!v){v=!0;for(let u of d)u.abort();d.clear();for(let u of a.values())try{u.instance.destroy?.()}catch{}a.clear(),n.clear(),r.clear(),t.length=0}}return{load:P,invoke:$,beginTurn:H,inspect:E,destroy:h}}var ln={width:320,height:180,deviceScaleFactor:1},tu="Browser harness has been destroyed";function nu(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function dr(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function ur(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function cr(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 xo(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 ru(e){return e.querySelector("[aria-live]")?.textContent??""}function Io(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 iu(e,t,n){let r=Array.from(e.querySelectorAll("*")),i=null,o=Number.POSITIVE_INFINITY;for(let a of r){if(!(a instanceof HTMLElement))continue;let d=a.getBoundingClientRect();if(t>=d.left&&t<d.right&&n>=d.top&&n<d.bottom){let l=Math.max(1,d.width*d.height);l<=o&&(i=a,o=l)}}return i??e}function Po(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 ou(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=e.geometry,r=e.viewport?.width??ln.width,i=e.viewport?.height??ln.height,o=e.viewport?.deviceScaleFactor??ln.deviceScaleFactor,a=e.reducedMotion===!0,d=e.inputModality??"pointer",l=e.origin??0,b=e.fit??"contain",g=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),v=Object.getOwnPropertyDescriptor(window,"innerWidth"),w=Object.getOwnPropertyDescriptor(window,"innerHeight"),I=Po(a),T=()=>{Object.defineProperty(window,"devicePixelRatio",{value:o,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:r,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:i,configurable:!0})};T();let y=document.createElement("div");y.setAttribute("data-cyberart-browser-harness",""),y.style.position="relative",y.style.overflow="auto",y.tabIndex=-1,document.body.appendChild(y);let P=[],$=[],H=!1,E=0,h=e.createId??(()=>`br-${++E}`),u=()=>Wn({contentWidth:e.contentWidth??r,contentHeight:e.contentHeight??i,viewportWidth:r,viewportHeight:i,mode:b,devicePixelRatio:o}),s=u(),f=()=>Math.max(1,Math.round(r*o)),R=()=>Math.max(1,Math.round(i*o)),L=(_,J)=>{let Q=n?.regions.find(C=>C.id===_);if(!Q)return;let c=er(Q,s);if(c)return J.style.position=J.style.position||"absolute",J.style.left=`${c.x}px`,J.style.top=`${c.y}px`,J.style.width=`${c.width}px`,J.style.height=`${c.height}px`,cr(J,c.x,c.y,c.width,c.height),{...c}},D=()=>{s=u(),y.style.width=`${r}px`,y.style.height=`${i}px`,ur(y,r,i),cr(y,0,0,r,i),y.dataset.inputModality=d,y.dataset.reducedMotion=a?"true":"false",T()};D();let V=()=>({root:y,get layout(){return dr(s)},get reducedMotion(){return a},get inputModality(){return d},placeRegion:L}),M=e.mount?.(V())??{},p=M.participants??[],S,x,N=()=>{};if(p.length>0){for(let _ of p)_.container&&ur(_.container,f(),R());S=tr({origin:l,width:f(),height:R(),createId:h,now:()=>l,participants:p.map(_=>({..._,seed:_.seed??t,width:_.width??f(),height:_.height??R()}))}),N=S.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",Ce],_=>{$.push(_)}),M.compositor&&(x=ir({...M.compositor,group:S,width:r,height:i,dpr:o}))}let W=()=>({...V(),group:S,compositor:x,publish(_){if(!S)throw new Error("Browser harness: publish requires mounted carts");return S.publish(_)}}),Y=()=>{if(D(),S){let _=f(),J=R();for(let Q of p){Q.container&&(ur(Q.container,_,J),Q.container.style.width=`${r}px`,Q.container.style.height=`${i}px`);try{let c=S.participant(Q.id).cart.canvas;c&&(c.style.width=`${r}px`,c.style.height=`${i}px`,cr(c,0,0,r,i))}catch{}}}},U=()=>{if(H)throw new Error(tu)};Y(),M.ready?.(W());let j=(_,J,Q)=>{if(P.push({type:"click",x:_,y:J,...Q?{selector:Q}:{}}),Q){let F=y.querySelector(Q);if(!(F instanceof HTMLElement))throw new Error(`No element matches ${Q}`);Io(F,_,J);return}let c=n!==void 0?Zn({x:_,y:J},s,n,{space:"css"}):void 0,A=(c?y.querySelector(`#${nu(c.id)}`):null)??iu(y,_,J);Io(A,_,J)};return{root:y,get group(){return S},get compositor(){return x},get layout(){return dr(s)},get events(){return $.slice()},goto(){U()},setViewport(_,J,Q){U(),r=Math.max(1,_|0),i=Math.max(1,J|0),Q!==void 0&&(o=Q>0?Q:1),P.push({type:"viewport",width:r,height:i,dpr:o}),x?x.resize(r,i,o):S&&S.resize(f(),R()),Y(),M.relayout?.(W())},setReducedMotion(_){U(),a=_,I(),I=Po(a),P.push({type:"reducedMotion",value:_}),Y(),M.relayout?.(W())},setInputModality(_){U(),d=_,P.push({type:"inputModality",value:_}),Y()},click(_,J){if(U(),typeof _=="string"){let Q=y.querySelector(_);if(!(Q instanceof HTMLElement))throw new Error(`No element matches ${_}`);let c=Q.getBoundingClientRect();j(c.left+c.width/2,c.top+c.height/2,_);return}if(J===void 0)throw new Error("click(x, y) requires a y coordinate");j(_,J)},key(_){U(),P.push({type:"key",key:_}),(document.activeElement instanceof HTMLElement?document.activeElement:y).dispatchEvent(new KeyboardEvent("keydown",{key:_,bubbles:!0,cancelable:!0}))},focus(_){U();let J=y.querySelector(_);if(!(J instanceof HTMLElement))throw new Error(`No element matches ${_}`);J.focus()},async step(_=1){U(),P.push({type:"step",frames:_}),S&&await S.step(_)},async advance(_){U(),P.push({type:"advance",ms:_}),S&&await S.step(Math.max(0,Math.round(_/1e3*30)))},screenshot(){if(U(),x){let _=x.captureComposedFrame();return{imageData:_.imageData,pngDataUrl:_.pngDataUrl,html:y.outerHTML,declaredOrder:_.declaredOrder.map(J=>J.id)}}return{imageData:null,pngDataUrl:null,html:y.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return U(),{focus:xo(document.activeElement),live:ru(y),html:y.outerHTML}},async inspect(){U();let _={},J={},Q=0;if(S){let c=await S.inspect();for(let C of c.diagnostics.participantIds)_[C]=S.participant(C).events.slice(),J[C]=c.participants[C]?.state,Q=c.diagnostics.clocks[C]?.framesElapsed??Q}return{host:M.hostState?.()??null,layout:dr(s),events:$.slice(),participantEvents:_,state:J,focus:xo(document.activeElement),scrollTop:y.scrollTop,clock:{framesElapsed:Q}}},reproduction(){return U(),{seed:t,viewport:{width:r,height:i,dpr:o},reducedMotion:a,inputModality:d,actions:P.map(_=>({..._}))}},captureComposedFrame(){if(U(),!x)throw new Error("Browser harness: captureComposedFrame requires a compositor");return x.captureComposedFrame()},destroy(){if(!H){H=!0,N(),document.activeElement instanceof HTMLElement&&y.contains(document.activeElement)&&document.activeElement.blur();try{M.destroy?.()}finally{try{x?.destroy()}finally{try{S?.destroy()}finally{y.remove(),I(),g&&Object.defineProperty(window,"devicePixelRatio",g),v&&Object.defineProperty(window,"innerWidth",v),w&&Object.defineProperty(window,"innerHeight",w)}}}}}}}function su(e){return{async goto(){e.goto()},async setViewportSize(t){e.setViewport(t.width,t.height,t.deviceScaleFactor)},async click(t){e.click(t)},async screenshot(){return e.screenshot()},keyboard:{async press(t){e.key(t)}},locator(t){return{async click(){e.click(t)},async focus(){e.focus(t)}}},async close(){e.destroy()}}}var au=128,du=144,uu=176,cu=224,lu=0,pu=15,fu=127,mu=8192,yu=16383;function Lo(e){return Number.isInteger(e)&&e>=0&&e<=15}function vt(e){return Number.isInteger(e)&&e>=0&&e<=127}function pn(e,t){return e&240|t&15}function hu(e){return e&15}function mr(e){if(!Lo(e.channel))return;let t=e.channel;if(e.kind==="noteon"||e.kind==="noteoff"){let n=e.velocity??(e.kind==="noteon"?100:0);if(!vt(e.note)||!vt(n))return;let r=e.kind==="noteon"?144:128;return Uint8Array.from([pn(r,t),e.note,n])}if(e.kind==="cc")return!vt(e.controller)||!vt(e.value)?void 0:Uint8Array.from([pn(176,t),e.controller,e.value]);if(e.kind==="pitch"&&!(!Number.isInteger(e.value)||e.value<0||e.value>16383))return Uint8Array.from([pn(224,t),e.value&127,e.value>>7&127])}function lr(e){let t=pr(e);if(t.length===0)return;let n=t[0],r=n&240,i=n&15;if(n>=128&&t.length>=3){if(r===144||r===128){let o=t[1],a=t[2];return{kind:r===128||a===0?"noteoff":"noteon",channel:i,note:o,velocity:a,status:n,data:t}}if(r===176)return{kind:"cc",channel:i,controller:t[1],value:t[2],status:n,data:t};if(r===224){let o=t[1]|t[2]<<7;return{kind:"pitch",channel:i,value:o,status:n,data:t}}}return{kind:"raw",channel:n>=128?i:void 0,status:n,data:t}}function pr(e){return e instanceof Uint8Array?new Uint8Array(e):Uint8Array.from(e)}function gu(e){return Array.from(e)}function bu(e){if(!("kind"in e))return!1;let t=e.kind;return t==="noteon"||t==="noteoff"||t==="cc"||t==="pitch"}function To(e){if(e instanceof Uint8Array)return pr(e);if(Array.isArray(e))return e.every(t=>Number.isInteger(t)&&t>=0&&t<=255)?Uint8Array.from(e):void 0;if(!(typeof e!="object"||e===null)){if("data"in e&&e.data instanceof Uint8Array&&e.data.length>0)return pr(e.data);if(bu(e))return mr(e)}}function vu(e,t){return e==="*"?!0:e==="note"?t.kind==="noteon"||t.kind==="noteoff":t.kind===e}function Eu(e){return{send(t,n){e.send(Array.from(t),n)}}}function Su(e){if(typeof navigator>"u")return;let t=navigator.requestMIDIAccess;if(typeof t=="function")return t.call(navigator,e)}function Mo(e){if(e instanceof Error&&e.message)return e.message;if(typeof e=="string"&&e.length>0)return e}var fr=class{constructor(t={}){this.listeners=[];this.attachedInputs=new Set;this.inputCount=0;this.outputCount=0;this.destroyed=!1;this.output=t.output,this.outputOwned=t.output!=null,this.requestMIDIAccess=t.requestMIDIAccess,this.onHardwareMessage=this.onHardwareMessage.bind(this),this.onAccessStateChange=this.onAccessStateChange.bind(this)}subscribe(t,n){if(this.destroyed)return()=>{};let r={kind:t,listener:n};return this.listeners.push(r),()=>{this.listeners=this.listeners.filter(i=>i!==r)}}inject(t){if(this.destroyed)return;let n=To(t);if(!n)return;let r=lr(n);r&&this.dispatch(r)}sendNoteOn(t,n,r=100){return this.sendEncoded({kind:"noteon",channel:t,note:n,velocity:r})}sendNoteOff(t,n,r=0){return this.sendEncoded({kind:"noteoff",channel:t,note:n,velocity:r})}sendCc(t,n,r){return this.sendEncoded({kind:"cc",channel:t,controller:n,value:r})}sendPitch(t,n){return this.sendEncoded({kind:"pitch",channel:t,value:n})}send(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};let n=To(t);return!n||n.length===0?{ok:!1,reason:"invalid",detail:"empty MIDI payload"}:this.write(n)}async requestAccess(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};if(this.access)return{ok:!0,inputs:this.inputCount,outputs:this.outputCount,sysexEnabled:this.access.sysexEnabled};let n=this.requestMIDIAccess??Su,r=typeof n=="function"?n({sysex:t?.sysex===!0}):void 0;if(r==null)return{ok:!1,reason:"unavailable",detail:"navigator.requestMIDIAccess is not available"};try{let i=await r;return this.destroyed?{ok:!1,reason:"destroyed"}:(this.attachAccess(i),{ok:!0,inputs:this.inputCount,outputs:this.outputCount,sysexEnabled:i.sysexEnabled})}catch(i){return{ok:!1,reason:"denied",detail:Mo(i)}}}destroy(){this.destroyed||(this.destroyed=!0,this.detachHardware(),this.listeners=[],this.access=void 0,this.outputOwned||(this.output=void 0))}sendEncoded(t){if(this.destroyed)return{ok:!1,reason:"destroyed"};let n=mr(t);return n?this.write(n):{ok:!1,reason:"invalid",detail:"channel, data, or pitch out of range"}}write(t){if(!this.output)return{ok:!1,reason:"no-port"};try{this.output.send(gu(t))}catch(n){return{ok:!1,reason:"invalid",detail:Mo(n)}}return{ok:!0,data:t}}dispatch(t){for(let n of this.listeners)vu(n.kind,t)&&n.listener(t)}deliverBytes(t){let n=lr(t);n&&this.dispatch(n)}onHardwareMessage(t){if(this.destroyed)return;let n="data"in t?t.data:void 0;!n||n.length===0||this.deliverBytes(n)}onAccessStateChange(){this.destroyed||!this.access||this.syncPorts(this.access)}attachAccess(t){this.access=t,this.syncPorts(t),t.addEventListener?.("statechange",this.onAccessStateChange)}syncPorts(t){let n=new Set;t.inputs.forEach(d=>n.add(d));for(let d of[...this.attachedInputs])n.has(d)||(d.removeEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.delete(d));t.inputs.forEach(d=>{this.attachedInputs.has(d)||(d.addEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.add(d))});let r=new Set,i=0;t.inputs.forEach(()=>{i+=1});let o=0;if(t.outputs.forEach(d=>{o+=1,r.add(d)}),this.inputCount=i,this.outputCount=o,this.outputOwned||(this.adoptedHardwareOutput&&!r.has(this.adoptedHardwareOutput)&&(this.output=void 0,this.adoptedHardwareOutput=void 0),this.output))return;let a;t.outputs.forEach(d=>{a||(a=d)}),a&&(this.adoptedHardwareOutput=a,this.output=Eu(a))}detachHardware(){for(let t of this.attachedInputs)t.removeEventListener("midimessage",this.onHardwareMessage);this.attachedInputs.clear(),this.access?.removeEventListener?.("statechange",this.onAccessStateChange),this.outputOwned||(this.output=void 0,this.adoptedHardwareOutput=void 0),this.inputCount=0,this.outputCount=0}};export{Za as ANCHOR_ORIGINS,Ee as ASSET_FAILED_EVENT,ni as ASSET_FAILURE_CODES,ti as ASSET_KINDS,ve as ASSET_READY_EVENT,Ra as AUDIO_CUE_EVENTS,Xt as AUDIO_CUE_FAILED_EVENT,Yt as AUDIO_CUE_SCHEDULED_EVENT,Jt as AUDIO_CUE_SKIPPED_EVENT,Wt as AUDIO_CUE_STARTED_EVENT,Oi as CAPABILITY_ASSET_KINDS,en as CAPABILITY_BLEND_MODES,Fi as CAPABILITY_CART_KINDS,tn as CAPABILITY_CLEAR_POLICIES,Ni as CAPABILITY_INTEGRATIONS,Vi as CAPABILITY_MANAGERS,Ma as CAPABILITY_MANIFEST_VERSION,_i as CAPABILITY_PHASES,kd as COMPOSITOR_BLEND_MODES,Rd as COMPOSITOR_CLEAR_POLICIES,xd as COMPOSITOR_SOURCE_KINDS,Qa as COORDINATE_SPACES,ke as CUE_CANCELLED_EVENT,De as CUE_COMPLETED_EVENT,Ca as CUE_LIFECYCLE_EVENTS,Ae as CUE_REPLACED_EVENT,we as CUE_STARTED_EVENT,Ct as CYBERART_CANVAS_ATTR,ln as DEFAULT_BROWSER_VIEWPORT,Tn as DEFAULT_DUCK_GAIN,no as DEFAULT_GROUP_HEIGHT,to as DEFAULT_GROUP_WIDTH,Ut as DEFAULT_MAX_HOPS,ao as DEFAULT_MAX_INSPECTOR_RECORDS,Ft as ENGINE_SNAPSHOT_RUNTIME,pt as EVENT_ENVELOPE_VERSION,zd as EXECUTABLE_MODULE_ERROR_CODES,Wa as GEOMETRY_CONTRACT_VERSION,vo as HOST_STATE_ACCEPTED_EVENT,Ue as HostChannel,ki as INVALID_PRESENTATION_MODEL_MESSAGE,oe as IncompatibleCartStateError,At as KeyboardManager,Nt as LEGACY_SNAPSHOT_SCHEMA_VERSION,pu as MIDI_CHANNEL_MAX,lu as MIDI_CHANNEL_MIN,uu as MIDI_CONTROL_CHANGE,fu as MIDI_DATA_MAX,au as MIDI_NOTE_OFF,du as MIDI_NOTE_ON,cu as MIDI_PITCH_BEND,mu as MIDI_PITCH_CENTER,yu as MIDI_PITCH_MAX,fr as MidiManager,Ze as PRESENTATION_ADAPTER_VERSION,Kn as PRESENTATION_MODEL_EVENT,wi as PRESENTATION_PHASES,fa as PRESENTATION_SUBSCRIBE_PATTERNS,Ai as PRESENTATION_UNSUPPORTED_EVENT,wt as PointerManager,uo as REDACTED_VALUE,Ce as REJECTED_EVENT_TYPE,rn as REPLAY_INSPECTOR_SCHEMA_VERSION,Ja as ROUND_TRIP_TOLERANCE,Xa as ROUND_TRIP_TOLERANCE_CANVAS_PX,it as Random,ze as SILENT_ASSET_FALLBACK_REF,ae as SNAPSHOT_SCHEMA_VERSION,wn as UNVERSIONED_CART_VERSION,Od as VISUAL_LAYER_EVENTS,ht as VISUAL_LAYER_FAILED_EVENT,Nd as VISUAL_LAYER_FAILURE_CODES,yt as VISUAL_LAYER_HIDDEN_EVENT,bo as VISUAL_LAYER_INCOMING_SUFFIX,ho as VISUAL_LAYER_KINDS,dn as VISUAL_LAYER_REVEALED_EVENT,or as VISUAL_LAYER_SNAPSHOT_SCHEMA_VERSION,go as VISUAL_LAYER_TRANSITIONS,cn as VISUAL_LAYER_TRANSITION_COMPLETED_EVENT,un as VISUAL_LAYER_TRANSITION_STARTED_EVENT,Mi as applyCueEasing,ct as applySnapshotMigrations,Ve as assetStatusEvent,rd as assetToNormalized,Ns as attachCartStatePersistence,Pi as attachPresentationAdapter,It as canonicalizeSeed,Xi as canvasToCss,Qi as canvasToNormalized,za as capabilityManifestToJSON,$d as captureVisualLayers,Ge as cloneSnapshotJson,ua as comparePayloadSchemas,Cd as compareReplayTraces,re as createAssetFailure,In as createAssetPreloader,Mn as createAudioBroker,Li as createAudioCueTimeline,ou as createBrowserHarness,ir as createCompositor,pa as createContractRegistry,Yr as createEngineSnapshotMigrations,On as createEventRouter,eu as createExecutableModuleHost,As as createFixtureAssetResolver,Ta as createHeadlessAudioAdapter,ws as createHostedAssetResolver,od as createLandmarkRegistry,su as createPlaywrightCompatibleAdapter,Wn as createPresentationLayout,Hn as createPresentationModelEvent,et as createPresentationTimeline,Ii as createReferencePresentationCart,co as createReplayInspector,Ln as createRuntime,tr as createRuntimeGroup,Wr as createSnapshotMigrationRegistry,kt as createVirtualClock,qd as createVisualLayerController,Ke as createWallClock,Ji as cssToCanvas,Xn as cssToNormalized,Jr as defaultSnapshotMigrationRegistry,Yn as defineCapabilityManifest,da as defineDiagnostic,sa as defineIntent,jr as defineSnapshot,aa as defineStateEvent,ca as deriveAttachOptions,Hr as describeReplayMismatch,dt as detectSnapshotSchemaVersion,ad as drawGeometryDebug,mr as encodeMidiMessage,fs as engineStateFromEnvelope,Si as familyPatternForType,bi as inferEventKind,Kt as isAssetFailure,ii as isAssetFailureCode,ri as isAssetKind,xa as isAudioCueEventType,Aa as isCueLifecycleType,je as isLegacyCartStateBundle,Lo as isMidiChannel,vt as isMidiData,Bn as isPresentationModel,Ri as isPresentationPhase,os as isSnapshotEnvelope,ss as isVersionedSnapshot,Bd as isVisualLayerEventType,Eo as isVisualLayerKind,So as isVisualLayerTransitionKind,Ei as kindSegmentInType,vi as matchEventPattern,hu as midiChannelFromStatus,pn as midiStatus,Sa as mountPresentationAdapter,Gt as normalizeEvent,nd as normalizedToAsset,id as normalizedToCanvas,Jn as normalizedToCss,qa as parseCapabilityManifest,ud as parseGeometry,lr as parseMidiBytes,Ht as parseSnapshot,td as pointFromOrigin,Zn as pointerToRegion,Zi as rectToCanvas,Qn as rectToCss,er as regionToViewport,Ps as registerCartStateHotkeys,wd as replayExportedTrace,kn as resolveImportableCartState,Pt as resolveRuntimeSeed,Rn as restoreSnapshotFromUnknown,ai as rewriteHostedAssetRef,Pa as scheduleAudioCue,dd as serializeGeometry,_e as snapshotErrorsToMessage,ut as snapshotFromCartBundle,Ya as validateCapabilityManifest,sd as validateGeometry,qe as validateSnapshot,la as verifyAttachOptions,Co as visualIncomingLayerId};
|