@cyberart-io/engine 0.0.9 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/headless.d.ts +136 -8
- package/dist/headless.js +1 -1
- package/dist/index.d.ts +146 -8
- package/dist/index.js +1 -1
- package/docs/audio.md +24 -0
- package/docs/browser-harness.md +2 -1
- package/docs/production-scenario.md +92 -6
- 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 nl=Object.defineProperty;var ua=(e,t)=>()=>(e&&(t=e(e=0)),t);var rl=(e,t)=>{for(var n in t)nl(e,n,{get:t[n],enumerable:!0})};var pl={};function ll(e,t){let n=e.indexOf(Ra);if(n===-1)return null;let r=n+Ra.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 uo,Ir,ul,Tn,Ra,Ia=ua(()=>{"use strict";uo=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,Ir="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[Ir]&&(window.addEventListener("error",e=>{let t=e?.message??"";uo.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";uo.test(n)&&e.preventDefault()}),window[Ir]=!0);ul=!1,Tn=(...e)=>{ul&&console.log("[workletPatch]",...e)},Ra="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[Ir]){let e=new WeakMap,t=/registerProcessor\s*\(\s*['"`]([^'"`]+)['"`]/g,n=AudioWorklet.prototype.addModule,r=0;AudioWorklet.prototype.addModule=async function(o,s){let a=++r,c=e.get(this);c||(c=new Set,e.set(this,c)),Tn(`#${a} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...c]});let m=o,u=null;if(o.startsWith("blob:")){let E=null;try{E=await(await fetch(o)).text()}catch(v){Tn(`#${a} blob fetch failed`,v)}if(E!==null){let v=new Set;for(let R of E.matchAll(t))v.add(R[1]);if(v.size>0){let R=[...v].filter(h=>c.has(h)),x=[...v].filter(h=>!c.has(h));if(R.length>0&&x.length===0){Tn(`#${a} short-circuit \u2014 all processors already registered`,R);return}if(R.length>0&&x.length>0){let h=ll(E,R);if(h!==null){let P=new Blob([h],{type:"application/javascript"});u=URL.createObjectURL(P),m=u,Tn(`#${a} rewrote blob; skipping`,R,"allowing",x)}else Tn(`#${a} blob rewrite failed; passing original through`)}x.forEach(h=>c.add(h))}}}return n.call(this,m,s).then(()=>{u&&URL.revokeObjectURL(u)},E=>{u&&URL.revokeObjectURL(u);let v=(E&&E.message)??"";if(!(uo.test(v)||/already registered/i.test(v)))throw E})},AudioWorklet.prototype[Ir]=!0}});var Aa={};rl(Aa,{AUDIO_LIBRARIES:()=>lo,adaptersFor:()=>Pr,importTone:()=>Cr,normalizeAudioLibraries:()=>Ar});async function Cr(){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 Ar(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in lo)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function Pr(e){return e.map(t=>lo[t])}var Ca,lo,po=ua(()=>{"use strict";Ca={id:"tone",async load(){await Promise.resolve().then(()=>(Ia(),pl))},async unlock(){await Ca.load(),await(await Cr()).start()},async resumeIfSuspended(){let e=await Cr();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await Cr()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},lo={tone:Ca}});var la=()=>{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"]},ze=window.devicePixelRatio||1,Gt=/Headless/i.test(navigator.userAgent),Qh=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function pa(){return Math.min(window.innerWidth,window.innerHeight)}var yr="data-cyberart-canvas",jt=class{constructor(t,n,r=1,i={}){this.width=t,this.height=n;let o=i.container,s=i.adoptFromDocument??!o,a=o?o.querySelector(`canvas[${yr}]`)??o.querySelector("canvas"):null;if(a)this.canvas=a,this.adopted=!0;else if(s){let c=document.getElementById("canvas")??document.querySelector("canvas");c?(this.canvas=c,this.adopted=!0):(this.canvas=document.createElement("canvas"),this.canvas.setAttribute("id","canvas"),this.adopted=!1)}else this.canvas=document.createElement("canvas"),this.adopted=!1;this.canvas.hasAttribute(yr)||this.canvas.setAttribute(yr,""),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/ze}px`,this.canvas.style.height=`${n/ze}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 fa(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 ma(e,t=window.innerWidth,n=window.innerHeight){let r=pa(),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 hr=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={}}},ga=hr;var br=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))}},ya=br;function Ut(){return{now:()=>performance.now()}}function vr(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var ha=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),Er=class{constructor(t,n,r,i,o,s={}){this.startTime=0;this.lastUpdateAt=null;this.lastRenderAt=null;this.clockOffsetMs=0;this.pauseStartedAt=null;this.renderAnimation=this.renderAnimation.bind(this),this.dimensionContext=fa(t,n),this.R=r,this.gameManager=s.gameManager,this.hostChannel=s.hostChannel,this.clock=s.clock??Ut(),this.kind=s.kind??"render",this.keyboardManager=new ga(!1,s.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new jt(this.dimensionContext.width,this.dimensionContext.height,1,s.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new ya(this.canvas.canvas,{listen:s.listenToPointer!==!1})),this.animationCart=o;let a=s.customState;this.featureState=o.getDefaultFeatureState?.(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.hostChannel),this.cartState=o.getDefaultState(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.featureState,this.hostChannel),this.startTime=this.clock.now(),this.canvas?.clearAll()}captureFramebuffer(){let t=this.canvas?.imageData;if(!t)return new ImageData(this.dimensionContext.width,this.dimensionContext.height);let n=new ImageData(t.width,t.height);return n.data.set(t.data),n}restoreFramebuffer(t){let n=this.canvas?.imageData,r=this.drawingContext;return!n||!r||n.width!==t.width||n.height!==t.height||n.data.length!==t.data.length?!1:(n.data.set(t.data),r.putImageData(n,0,0),!0)}setPaused(t){let n=this.clock.now();if(t){this.pauseStartedAt===null&&(this.pauseStartedAt=n);return}this.pauseStartedAt!==null&&(this.clockOffsetMs+=n-this.pauseStartedAt,this.pauseStartedAt=null)}resolveNow(t){let n=this.pauseStartedAt!==null?t-this.pauseStartedAt:0;return t-this.clockOffsetMs-n}getElapsedSinceStart(t=this.clock.now()){return Math.max(0,this.resolveNow(t)-this.startTime)}restoreClock(t,n){this.pauseStartedAt=null,this.lastUpdateAt=null,this.lastRenderAt=null;let r=Math.max(0,t);if(typeof n=="number"&&Number.isFinite(n)){this.startTime=n,this.clockOffsetMs=this.clock.now()-n-r;return}this.clockOffsetMs=0,this.startTime=this.clock.now()-r}getRandomState(){return this.R.getState()}injectKey(t){this.keyboardManager.inject(t)}injectPointer(t,n,r){this.pointerManager?.inject(t,n,r)}async updateAnimationState(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=ha(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=ha(i,this.startTime,this.lastUpdateAt,this.lastRenderAt),s=this.drawingContext,a=this.canvas?.imageData;this.kind!=="calculation"&&this.animationCart.render&&s&&a&&this.animationCart.render(this.R,t,n,this.dimensionContext,this.cartState,s,a,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastRenderAt=i}getCanvas(){return this.canvas?.canvas}getDrawDetails(){let t=this.canvas?.canvas;if(!t)throw new Error("calculation cart has no canvas");return[t,0,0,this.dimensionContext.width,this.dimensionContext.height]}teardown(){try{this.animationCart.teardown?.(this.cartState,this.featureState)}catch(t){console.error("Error during cart teardown",t)}this.keyboardManager.destroy(),this.pointerManager?.destroy()}};var Sr=class extends jt{constructor(t,n,r=1,i=!0,o={}){if(super(t,n,r,o),this.adopted)return;let s=o.container;if(s){this.canvas.parentNode!==s&&s.appendChild(this.canvas);return}if(i){let a=document.getElementById("canvas");a&&a!==this.canvas&&a.parentNode===document.body&&document.body.removeChild(a),document.body.appendChild(this.canvas)}}};function ba(e){let t=parseInt(e.substring(0,8),16),n=parseInt(e.substring(8,8),16),r=parseInt(e.substring(16,8),16),i=parseInt(e.substring(24,8),16);return{next:()=>{t|=0,n|=0,r|=0,i|=0;let s=(t+n|0)+i|0;return i=i+1|0,t=n^n>>>9,n=r+(r<<3)|0,r=r<<21|r>>>11,r=r+s|0,(s>>>0)/4294967296},getRegs:()=>({a:t,b:n,c:r,d:i}),setRegs:s=>{t=s.a,n=s.b,r=s.c,i=s.d}}}var An=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=ba(t.hash.substring(2,32)),this.genB=ba(t.hash.substring(34,32)),this.prngA=this.genA.next,this.prngB=this.genB.next;for(let n=0;n<1e6;n+=2)this.prngA(),this.prngB()}getState(){let t=this.genA.getRegs(),n=this.genB.getRegs();return{seed:this.seed,useA:this.useA,prngA:{a:t.a,b:t.b,c:t.c,d:t.d},prngB:{a:n.a,b:n.b,c:n.c,d:n.d}}}setState(t){if(t.seed!==this.seed)throw new Error(`Random.setState: seed ${t.seed} does not match ${this.seed}`);this.useA=t.useA,this.genA.setRegs(t.prngA),this.genB.setRegs(t.prngB)}r_zero_one(){return this.useA=!this.useA,this.useA?this.prngA():this.prngB()}dec(t,n){return t===void 0?this.r_zero_one():n===void 0?t*this.r_zero_one():t+(n-t)*this.r_zero_one()}int(t,n){return n===void 0&&(n=t,t=0),Math.floor(this.dec(t,n))}bool(t=.5){return this.r_zero_one()<t}sign(){return this.bool()?1:-1}choose(t){return t[this.int(t.length)]}};var Ea="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",va="https://salmon-just-firefly-671.mypinata.cloud/ipfs/";function il(e){return e.endsWith("/")?e:`${e}/`}var Pn=null;function ol(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function sl(e){return e&&e.length>0?e:[{cid:Ea}]}function al(e){return e.startsWith("0x")?e:`0x${e}`}var Sa=/^(0[xX])?[0-9a-fA-F]{64}$/;function dl(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 kr(e){let t=typeof e=="number"?String(e):e;return Sa.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:dl(t)}function Rr(e,t){if(typeof e=="number"||t==="deterministic")return kr(e);let n=String(e);return Sa.test(n)?kr(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function cl(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:sl(tokenData.externalAssetDependencies),preferredIPFSGateway:il(tokenData.preferredIPFSGateway||va),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?al(e):t.get("hash")||`0x${ol(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:Ea}],preferredIPFSGateway:va}}function co(e){let t=e?.useCache!==!1;if(t&&Pn&&!e?.hash)return Pn;let n=cl(e?.hash);return t?Pn=n:Pn||(Pn=n),n}function ka(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}po();var Tr="$cyberartTa",Oe=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},fo={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function fl(e){for(let t of Object.keys(fo))if(e instanceof fo[t])return t}function Ta(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function et(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function mo(e){return et(e)?typeof e[Tr]=="string"&&Array.isArray(e.d):!1}function ml(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||Ta(e)||et(e))}var gl=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function Pa(e){return e===null?"null":mo(e)?String(e[Tr]):Array.isArray(e)?"array":et(e)?"object":typeof e}function yl(e,t){return e===t||e==="null"||t==="null"}function Rt(e){return e.trim().toLowerCase().replace(/^0x/,"")}function wa(e,t,n,r){if(!(!n&&!r)&&Rt(e)!==Rt(t))throw new Oe(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function Jt(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function xa(e,t){let n=e.dimensions;if(n&&Jt(n.width)&&Jt(n.height))return n;if(t&&Jt(t.width)&&Jt(t.height))return{width:t.width,height:t.height};if(et(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(Jt(r)&&Jt(i))return{width:r,height:i}}return null}function Yt(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(Ta(e)){let n=fl(e);return n?{[Tr]:n,d:Array.from(e)}:void 0}if(typeof e=="object"&&!t.has(e)){t.add(e);try{if(Array.isArray(e)){let i=[],o=0;for(let s of e){let a=Yt(s,t);a!==void 0&&(i.push(a),o++)}return e.length>0&&o===0?void 0:i}if(!et(e)||ml(e))return;let n=Object.keys(e),r={};for(let i of n){if(gl.has(i))continue;let o=Yt(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 wn(e){if(mo(e)){let t=fo[e[Tr]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>wn(t));if(et(e)){let t={};for(let n of Object.keys(e))t[n]=wn(e[n]);return t}return e}function go(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(!et(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 s=Yt(e);if(!et(s)||Object.keys(s).length===0){if(i)throw new Oe("Live cart has no serializable state");return}let a=o.filter(c=>c in s);if(a.length===0){if(i)throw new Oe("Cart state snapshot does not overlap the live cart shape");return}for(let c of a){let m=Pa(s[c]),u=Pa(t[c]);if(!yl(m,u))throw new Oe(`Cart state field "${c}" has type ${u}, live cart expects ${m}`);if(m==="object"){let E=t[c],v=e[c];et(E)&&!mo(E)&&go(v,E,void 0,void 0,!1)}}}function _a(e,t){if(!et(e)||!et(t))return;let n=Yt(e);if(et(n))for(let r of Object.keys(t))r in n&&(e[r]=wn(t[r]))}function Ge(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 je="cyberart.asset.ready",$e="cyberart.asset.failed";function It(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function tt(e){try{return JSON.stringify(e)}catch{return String(e)}}function yo(e,t,n){let r=t??[],i=n??[],o=Math.max(r.length,i.length);for(let s=0;s<o;s++)if(tt(r[s])!==tt(i[s]))return`${e}[${s}]: ${tt(r[s])} vs ${tt(i[s])}`}function Oa(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}`),tt(e.rng)!==tt(t.rng)&&n.push(`rng: ${tt(e.rng)} vs ${tt(t.rng)}`);let r=yo("actions",e.actions,t.actions);r&&n.push(r);let i=yo("applied",e.applied,t.applied);i&&n.push(i);let o=yo("events",e.events,t.events);return o&&n.push(o),tt(e.state)!==tt(t.state)&&n.push(`state: ${tt(e.state)} vs ${tt(t.state)}`),n}function Da(e){return{type:e.status==="ready"?je:$e,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function bl(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 vl(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 El=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],bo=El[0],Sl=bo[0]/bo[1],ho=30,kl=120,Rl=3840/2160,Il=2160/3840,wr=class{constructor(t=ho,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,s,a={}){this.framesElapsed=0;this.frameRate=ho;this._paused=!1;this.savedToken=!1;this.prepared=!1;this.loopRunning=!1;this.fallbackAudio=[];this.audioLibrariesInternal=[];this.virtualClock=null;this.scriptedActions=[];this.initialScriptedActions=[];this.appliedActions=[];this.consumedActionIndexes=new Set;this.outboundEvents=[];this.consecutiveErrorCount=0;this.lastErrorLogAt=0;this.reinitStayPaused=!1;this.reinitPending=!1;this.lastExportedFramebuffer=null;this.pinnedOutput=null;this.pinViewportAtImport=null;this.importing=!1;this.drawLoop=this.drawLoop.bind(this),this.loadCart=this.loadCart.bind(this),this.prepareCart=this.prepareCart.bind(this),this.beginPlayback=this.beginPlayback.bind(this),this.reinit=this.reinit.bind(this),this.tuneFramerate=this.tuneFramerate.bind(this),this.container=a.container,this.seed=a.seed,this.captureKeyboard=a.captureKeyboard??!0,this.customState=a.customState,this.hostChannel=a.hostChannel,this.fallbackAudio=Ar(a.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=a.kind??"render",this.onFrameTiming=a.onFrameTiming;let c=a.deterministic;this.deterministic=!!c;let m=c&&typeof c=="object"?c:{};if(this.deterministic){if(a.clock){let u=a.clock;if(typeof u.advance!="function")throw new Error("deterministic mode requires a virtual clock with advance()");this.virtualClock=u,this.clock=u}else this.virtualClock=vr(m.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=It(m.actions??[]),this.scriptedActions=It(this.initialScriptedActions)}else this.clock=a.clock??Ut();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=Sl,this.selectedAsp=bo,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=Gt,this.containerWidth=r,this.containerHeight=i,this.gameManager=s,this.init(!0)}setGameManager(t){this.gameManager=t}reinit(t){if(!this.importing){if(this.shouldKeepPinnedOutput()){this.fitPinnedCanvas();return}this.reinitPending||(this.reinitStayPaused=this._paused,this.reinitPending=!0),this.paused=!0,clearTimeout(this.reinitTimeout),this.reinitTimeout=setTimeout(()=>{if(this.importing){this.paused=this.reinitStayPaused,this.reinitPending=!1;return}this.updateInProgress?this.reinit(t):(this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.clearPinnedOutput(),this.init(),this.reloadCart(),this.paused=this.reinitStayPaused,this.reinitPending=!1)},150)}}initSeed(){this.tokenData=this.seed?co({hash:this.seed,useCache:!1}):co(),this.rawParams=ka(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]=ma(n,this.containerWidth,this.containerHeight);r*=ze,i*=ze,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 Sr(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 An(this.tokenData),o=new Er(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=It(this.initialScriptedActions),this.appliedActions=[],this.consumedActionIndexes=new Set,this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.deterministic&&this.hostChannel&&(this.outboundUnsubscribe=this.hostChannel.onEvent(s=>{this.outboundEvents.push(s)})),this.R=i,this.applyCartFrameRate(t,o),this.resolveAudioLibraries(t),this.prepared=!0,!0}catch(n){return console.error(n),!1}}applyCartFrameRate(t,n){let r=t.metadata,i=r?.frameRate??ho,o=n.cartState?.visualMode??n.featureState?.visualMode,s=o&&r?.frameRateByVisualMode?r.frameRateByVisualMode[o]:void 0;this.updateFrameRate(typeof s=="number"&&s>0?s:i)}get audioLibraries(){return this.audioLibrariesInternal}get needsAudio(){return this.audioLibrariesInternal.length>0}resolveAudioLibraries(t){this.audioLibrariesInternal=Ar(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=Pr(this.audioLibrariesInternal);if(Gt){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||Gt))for(let t of Pr(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(It(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:It(this.scriptedActions),applied:It(this.appliedActions),events:It(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(Da(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:ze},state:Yt(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=Ge(t),o=this._paused,s=this.loopRunning;this.paused=!0,await this.waitUntilUpdateIdle(),go(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),wa(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let a=xa(i,n?.framebuffer??this.lastExportedFramebuffer);if(a){this.pinOutputSize(a);let u=a.cssWidth??a.width/ze,E=a.cssHeight??a.height/ze;vl(u,E),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let c=this.customState,m=!1;try{if(this.customState=wn(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&_a(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let u=this.animation,E=u.cartState,v=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:bl(E);u.restoreClock(v,typeof E?.startTime=="number"?E.startTime:void 0),o&&u.setPaused(!0);let R=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(R&&u.restoreFramebuffer(R)?E.keepRatioPrimed=!0:await u.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),m=!0}catch(u){throw this.clearPinnedOutput(),this.customState=c,this.paused=o,this.animationCart&&(this.syncContainerFromDom(),this.init(),this.reloadCart()),u}finally{this.importing=!1,m&&(this.customState=c,this.paused=o,s&&this.beginPlayback())}}unloadCart(){this.loopRunning=!1,this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.drawLoopTimeout&&clearTimeout(this.drawLoopTimeout),this.animation?.teardown(),this.animation=void 0,this.prepared=!1,this.audioLibrariesInternal=this.fallbackAudio,this.mainCanvas?.clearAll()}reloadCart(t=!1){let n=this.animationCart;if(!n)return;this.pinnedOutput&&(this.clearPinnedOutput(),this.syncContainerFromDom(),this.init());let r=this.reinitPending?this.reinitStayPaused:this._paused;this.unloadCart(),t&&this.initSeed(),this.loadCart(n),this.paused=r,!this.paused&&!Gt&&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/ze,h:t.cssHeight??t.height/ze}}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/ze,s=t.height/ze;if(o<1||s<1||r<1||i<1)return;let a=Math.min(r/o,i/s),c=o*a,m=s*a;n.style.position="absolute",n.style.left="50%",n.style.top="50%",n.style.transform="translate(-50%, -50%)",n.style.margin="0",n.style.width=`${c}px`,n.style.height=`${m}px`,n.style.imageRendering=Math.abs(a-1)<.01?"auto":"pixelated"}clearPinnedOutput(){let t=this.canvas;this.pinnedOutput=null,this.pinViewportAtImport=null,t&&(t.style.position="",t.style.left="",t.style.top="",t.style.transform="",t.style.imageRendering="",t.style.width="",t.style.height="",t.style.margin="auto")}get canvas(){return this.animation?.getCanvas()??this.mainCanvas?.canvas}destroy(){this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.clearPinnedOutput(),this.unloadCart(),clearTimeout(this.reinitTimeout),this.mainCanvas&&!this.mainCanvas.adopted&&this.mainCanvas.canvas.remove()}drawIt(){}tuneFramerate(t){let n=this.lastCall||t;this.lastCall=t,this.drawTime=Math.max(0,this.drawTime+this.targetDrawTime-this.lastCall+n)}async processFrame(t,n={}){let r=n.ignorePause===!0,i=n.scheduleNext!==!1;if(!this.loopRunning&&!r)return;let o=!1,s,a="update",c=this.onFrameTiming,m=0,u=0,E=0;try{if(r||!this.paused||this.tempUnpause){if(!Gt&&!r&&this.tuneFramerate(t),!this.animation)return;a="update",this.updateInProgress=!0;let R=c?performance.now():0;if(await this.animation.updateAnimationState(this.framesElapsed,this.rawParams,t),c&&(m=performance.now()-R),this.updateInProgress=!1,this.kind!=="calculation"){a="render";let x=c?performance.now():0;await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t),c&&(u=performance.now()-x)}if(this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let P=localStorage.getItem("goodones"),V=JSON.stringify(P?[...JSON.parse(P),this.tokenData.hash]:[this.tokenData.hash]);localStorage.setItem("goodones",V),this.savedToken=!0,this.mainCanvas&&localStorage.setItem(this.tokenData.hash,this.mainCanvas.canvas.toDataURL("image/png")),window.location.reload(),this.loopRunning=!1;return}this.framesElapsed++,this.tempUnpause&&(this.tempUnpause=!1)}a="draw";let v=c?performance.now():0;this.drawIt(),c&&(E=performance.now()-v)}catch(v){o=!0,s=v,this.handleFrameError(v,a)}finally{this.updateInProgress=!1,c&&!o&&c({frame:this.framesElapsed,updateMs:m,renderMs:u,drawMs:E,totalMs:m+u+E})}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=kl&&(this.loopRunning=!1,this.onError?.(s,{phase:a,consecutive:this.consecutiveErrorCount,stopped:!0}))):this.consecutiveErrorCount=0,!(!this.loopRunning||!i)&&(this.drawLoopTimeout=setTimeout(()=>{this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)},this.drawTime))}async drawLoop(t){await this.processFrame(t,{scheduleNext:!0})}handleFrameError(t,n){let r=performance.now();r-this.lastErrorLogAt>=1e3&&(this.lastErrorLogAt=r,console.error(`Animation ${n} error:`,t)),this.consecutiveErrorCount===0&&this.onError?.(t,{phase:n,consecutive:1,stopped:!1})}pureAspectUpdate(t){if(t[0]===0&&t[1]===0){let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=r/i;this.aspectRatio=Math.min(Rl,Math.max(Il,o))}else this.aspectRatio=t[0]/t[1]}};var Cl="HostChannel has been destroyed",zt=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(Cl)}};var De=2,_r=1,Or="0.0.5",Eo="0",Ma="1970-01-01T00:00:00.000Z";function Te(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Xt(e){return JSON.parse(JSON.stringify(e))}function ye(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function La(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){ye(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{ye(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function Ce(e){return typeof e=="string"&&e.length>0}function xr(e){return typeof e=="number"&&Number.isFinite(e)}function Al(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function Qt(e){return!Te(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function Pl(e){return Te(e)&&e.schemaVersion===De&&Te(e.engineState)}function Tl(e){return Te(e)&&typeof e.schemaVersion=="number"&&Te(e.engineState)}function xn(e){if(Te(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if(Qt(e))return _r}}function vo(e,t,n){try{return Xt(Ge(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";ye(n,"invalid-engine-state",i,t);return}}function wl(e,t,n){if(!Te(e)){ye(n,"invalid-field","cart must be an object",t);return}Ce(e.id)||ye(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),Ce(e.version)||ye(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"?ye(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function xl(e,t,n){if(!Te(e)){ye(n,"invalid-field","clock must be an object",t);return}if(!xr(e.framesElapsed)){ye(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(xr(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:ye(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(xr(e.now)?r.now=e.now:ye(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(xr(e.frameRate)?r.frameRate=e.frameRate:ye(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function _l(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){ye(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Te(i)||!Ce(i.id)||!Ce(i.version)){ye(n,"invalid-field","module refs need non-empty id and version",s);return}r.push({id:i.id,version:i.version})}),r}function Ol(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){ye(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Te(i)||!Ce(i.id)){ye(n,"invalid-field","asset refs need a non-empty id",s);return}let a={id:i.id};i.version!==void 0&&(Ce(i.version)?a.version=i.version:ye(n,"invalid-field","asset.version must be a non-empty string",`${s}.version`)),i.ref!==void 0&&(Ce(i.ref)?a.ref=i.ref:ye(n,"invalid-field","asset.ref must be a non-empty string",`${s}.ref`)),r.push(a)}),r}function Dl(e,t,n){if(e===void 0)return;if(!Te(e)||!Ce(e.seed)){ye(n,"invalid-field","rng must include a seed",t);return}if(!Te(e.prngA)||!Te(e.prngB)){ye(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){ye(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return La(e,t,n)}function Nl(e,t,n){if(e===void 0)return;if(!Te(e)){ye(n,"invalid-field","provenance must be an object",t);return}let r={};if(e.source!==void 0&&(Ce(e.source)?r.source=e.source:ye(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!Te(e.integrity)||!Ce(e.integrity.alg)||!Ce(e.integrity.hash)?ye(n,"invalid-field","provenance.integrity needs alg and hash strings",`${t}.integrity`):r.integrity={alg:e.integrity.alg,hash:e.integrity.hash}),e.publisher!==void 0&&(Ce(e.publisher)?r.publisher=e.publisher:ye(n,"invalid-field","provenance.publisher must be a non-empty string",`${t}.publisher`)),e.version!==void 0&&(Ce(e.version)?r.version=e.version:ye(n,"invalid-field","provenance.version must be a non-empty string",`${t}.version`)),e.signature!==void 0&&(!Te(e.signature)||!Ce(e.signature.id)||!Ce(e.signature.alg)?ye(n,"invalid-field","provenance.signature needs id and alg strings",`${t}.signature`):r.signature={id:e.signature.id,alg:e.signature.alg}),e.grants!==void 0)if(!Array.isArray(e.grants))ye(n,"invalid-field","provenance.grants must be an array",`${t}.grants`);else{let i=[];e.grants.forEach((o,s)=>{Ce(o)?i.push(o):ye(n,"invalid-field","provenance.grants entries must be non-empty strings",`${t}.grants[${s}]`)}),r.grants=i}return r}function Va(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==De&&ye(t,"invalid-schema",`defineSnapshot produces schema ${De}`,"schemaVersion"),Ce(e.seed)||ye(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?Or:e.runtimeVersion;Ce(n)||ye(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;Al(r)||ye(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=wl(e.cart,"cart",t),o=xl(e.clock,"clock",t),s=vo(e.engineState,"engineState",t),a=_l(e.modules,"modules",t),c=Ol(e.assets,"assets",t),m=Dl(e.rng,"rng",t),u=Nl(e.provenance,"provenance",t),E;if(e.hostState!==void 0&&(E=La(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!Ce(e.hostStateRef)&&ye(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!s||!Ce(e.seed))return;let v={schemaVersion:De,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:s,createdAt:r};return a&&a.length>0&&(v.modules=a),m&&(v.rng=m),E!==void 0&&(v.hostState=E),Ce(e.hostStateRef)&&(v.hostStateRef=e.hostStateRef),c&&c.length>0&&(v.assets=c),u&&(u.source||u.integrity||u.publisher||u.version||u.signature||u.grants)&&(v.provenance=u),v}function Dr(e){if(!Te(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=Va(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function _n(e,t){return Ce(e.cartId)?Dr({cart:{id:e.cartId,version:t?.cartVersion??Eo,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 Na(e){let t=Xt(e),n={schemaVersion:_r,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:Eo,generative:t.generative}),n}function Nr(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(!Te(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(Qt(t))try{return{ok:!0,snapshot:Na(Ge(t))}}catch(r){return{ok:!1,errors:[{code:"invalid-engine-state",detail:r instanceof Error?r.message:"Cart state bundle is invalid"}]}}let n=xn(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===_r){let r=[],i=vo(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:Na(i)}}if(n!==De){if(n>De)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${n} is newer than ${De}`,path:"schemaVersion"}]};let r=[],i=vo(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 Zt(t)}function Zt(e){if(!Te(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(e.schemaVersion!==De)return{ok:!1,errors:[{code:"invalid-schema",detail:`Expected snapshot schema ${De}`,path:"schemaVersion"}]};let t=[],n=Va(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function Mt(e){return e.map(t=>t.detail).join("; ")}function Ba(e){if(Qt(e))return Ge(e);if(Te(e)&&e.engineState!==void 0)return Ge(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function Ml(e){return Ge(Xt(e.engineState))}function $a(){return[{from:1,to:2,migrate:Vl}]}function Ha(e){let t=[...e?.migrations??$a()],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 Ll=Ha();function qa(){return Ll}function Vl(e){let t=Ba(e),n=_n(t,{createdAt:Ma,runtimeVersion:Or});if(n.ok===!1)throw new Error(Mt(n.errors));return n.snapshot}function Fa(e){try{return Xt(e)}catch{return}}function On(e,t=qa()){let n=Fa(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=xn(r);if(i===void 0){let o=Nr(r);if(o.ok===!1)return o;r=o.snapshot,i=o.snapshot.schemaVersion}if(i>De)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${i} is newer than ${De}`,path:"schemaVersion"}]};if(i===De)return Zt(r);for(;i<De;){let o=t.get(i);if(!o)return{ok:!1,errors:[{code:"missing-migration",detail:`No snapshot migration from schema ${i} to ${i+1}`,path:"schemaVersion"}]};let s;try{s=o.migrate(Fa(r))}catch(c){let m=c instanceof Error?c.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${m}`,path:"schemaVersion"}]}}let a=xn(s);if(a!==o.to)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} produced schema ${String(a)}`,path:"schemaVersion"}]};if(o.to===De){let c=Zt(s);if(c.ok===!1)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} did not produce a valid snapshot`,path:"schemaVersion"},...c.errors]};r=c.snapshot}else r=s;i=o.to}return Zt(r)}function So(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=On(n,t);if(i.ok===!1)return i;try{return{ok:!0,bundle:Ge(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:Ge(n)}}catch(i){return{ok:!1,errors:[{code:"invalid-engine-state",detail:i instanceof Error?i.message:"Cart state bundle is invalid"}]}}}function ko(e,t){let n=Nr(e);return n.ok===!1?n:On(n.snapshot,t)}var Ua=["image","audio","font","spritesheet"],Ja=["timeout","cors","not-found","invalid","aborted","resolver","undeclared","hash-mismatch","unsigned"],en="cyberart:fallback/silent",Wa="Asset preloader has been destroyed",Bl=4,Fl=new Set(Ua),$l=new Set(Ja),Hl={timeout:"asset load timed out",cors:"CORS blocked this asset","not-found":"asset was not found",invalid:"asset declaration or resource is invalid",aborted:"asset load was aborted",resolver:"asset resolver failed",undeclared:"asset is not declared on the cart manifest","hash-mismatch":"asset bytes do not match the declared hash",unsigned:"asset bytes are missing or unsigned"};function nn(e){return typeof e=="string"&&Fl.has(e)}function Ya(e){return typeof e=="string"&&$l.has(e)}function tn(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&Ya(t.code)&&typeof t.message=="string"}function ve(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:Hl[e.code]}}function Lt(e,t){return{type:e==="ready"?je:$e,kind:"state",payload:t}}function Mr(e){if(!e?.aborted)return;let t=new Error("aborted");throw t.name="AbortError",t}function ql(e){return e instanceof Error&&e.name==="AbortError"||typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"}function Ro(e){return e?{...e}:void 0}function ft(e){let t={id:e.id,ref:e.ref,type:e.type,url:e.url};return e.integrity!==void 0&&(t.integrity=e.integrity),e.provenance&&(t.provenance=Ro(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function Dn(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function Wl(e){if(e.state==="ready"){let t={state:"ready",resource:ft(e.resource)};return e.failure&&(t.failure=Dn(e.failure)),t}return e.state==="failed"?{state:"failed",failure:Dn(e.failure)}:{state:e.state}}function Kl(e){return/^https?:/i.test(e)}function za(e){return e.endsWith("/")?e:`${e}/`}function Xa(e,t){let n=za(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 Gl(e){return{async resolve(t,n){Mr(n);let r=e[t.ref];if(!r)throw ve({id:t.id,ref:t.ref,code:"not-found",message:`no fixture for ${t.ref}`});if("error"in r)throw ve({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 jl(e){let t=za(e.cdnBase);return{async resolve(n,r){Mr(r);let i=e.failures?.[n.ref];if(i){let s=typeof i=="string"?i:i.code,a=typeof i=="string"?void 0:i.message;throw ve({id:n.id,ref:n.ref,code:s,message:a})}let o=Xa(n.ref,t);return{id:n.id,ref:n.ref,type:n.type,url:o,integrity:n.integrity,cors:Kl(o)?"anonymous":"omit",provenance:n.provenance}}}}function Ul(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}async function Jl(e){let t=await crypto.subtle.digest("SHA-256",e);return Ul(new Uint8Array(t))}function Yl(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return`data:application/octet-stream;base64,${typeof btoa=="function"?btoa(t):Buffer.from(e).toString("base64")}`}function Nn(e){let t=e.declared,n=e.fetchBytes,r=e.hashBytes??Jl;return{async resolve(i,o){Mr(o);let s=t[i.ref];if(!s)throw ve({id:i.id,ref:i.ref,code:"undeclared",message:`undeclared asset ref "${i.ref}"`});if(!s.hash||typeof s.hash!="string")throw ve({id:i.id,ref:i.ref,code:"unsigned",message:`unsigned asset "${i.ref}"`});let a=await n(s.url);if(Mr(o),!a)throw ve({id:i.id,ref:i.ref,code:"unsigned",message:`no signed bytes for "${s.url}"`});if(await r(a)!==s.hash)throw ve({id:i.id,ref:i.ref,code:"hash-mismatch",message:`hash mismatch for "${i.ref}"`});return{id:i.id,ref:i.ref,type:i.type,url:Yl(a),integrity:`sha256-${s.hash}`,cors:"omit",provenance:i.provenance}}}}function zl(e){if(!e||typeof e!="object")return ve({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return ve({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 ve({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!nn(e.type))return ve({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return ve({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 ve({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function Ka(e){return{id:e.id,ref:en,type:e.type,url:en,usedFallback:!0,cors:"omit"}}function Ga(e,t){return tn(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:ql(t)?ve({id:e.id,ref:e.ref,code:"aborted"}):ve({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function ja(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw ve({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw ve({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=ft(t);return n.id=e.id,n.ref=t.ref||e.ref,n.type=e.type,!n.integrity&&e.integrity&&(n.integrity=e.integrity),!n.provenance&&e.provenance&&(n.provenance=Ro(e.provenance)),n}function Vt(e){if(typeof e?.resolver?.resolve!="function")throw new Error("createAssetPreloader: resolver is required");let t=e.emitEvents!==!1,n=e.wallClockTimeout!==!1,r=new Map,i=[],o=new Map,s=new Map,a=new Map,c=new Map,m=new Map,u=new Set,E=!1;function v(A){return A.code==="aborted"||A.code==="timeout"}function R(A,B,W){let D=Ga(A,W);return D.code==="timeout"?D:B.aborted?ve({id:A.id,ref:A.ref,code:"aborted"}):D}function x(A,B){let W=m.get(A);W||(W=new Set,m.set(A,W)),W.add(B)}function h(A){if(A?.state==="ready")return`${A.resource.type}\0${A.resource.ref}`}function P(A,B){for(let[W,D]of m)if(W!==B&&D.has(A))return!0;for(let[W,D]of r)if(W!==B&&h(D)===A)return!0;return!1}function V(A,B){let W=new Set(m.get(A)),D=h(B);D&&W.add(D),m.delete(A);for(let C of W)P(C,A)||a.delete(C)}function j(){let A=0,B=0,W=0,D=0,C={};for(let[w,M]of r)C[w]=Wl(M),M.state==="pending"||M.state==="loading"?A+=1:M.state==="failed"?W+=1:(B+=1,(M.resource.usedFallback||M.failure)&&(D+=1));return{total:r.size,pending:A,ready:B,failed:W,fallbacks:D,items:C,failures:i.map(Dn)}}function T(){if(u.size===0)return;let A=j();for(let B of u)B(A)}function _(A){i.push(Dn(A))}function f(A){E||!t||!e.dispatch||e.dispatch(A)}function p(A){if(A?.managed&&A.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(A.url)}catch{}}function S(A,B){if(E)return;let W=r.get(A);W?.state==="ready"&&p(W.resource),r.set(A,B),T()}function d(A){if(A.fallback!==void 0)return A.fallback==="silent"?{id:`${A.id}::fallback`,ref:en,type:A.type}:typeof A.fallback=="string"?{id:`${A.id}::fallback`,ref:A.fallback,type:A.type}:{...A.fallback,id:typeof A.fallback.id=="string"&&A.fallback.id.length>0?A.fallback.id:`${A.id}::fallback`}}function l(A,B,W){let D=`${A.type}\0${A.ref}`,C=a.get(D);if(C)return B.aborted?Promise.reject(ve({id:A.id,ref:A.ref,code:"aborted"})):(x(W,D),Promise.resolve(ft(C.resource)));if(B.aborted)return Promise.reject(ve({id:A.id,ref:A.ref,code:"aborted"}));let w=c.get(D);if(!w){let F=new AbortController,G={id:A.id,ref:A.ref,type:A.type};A.integrity!==void 0&&(G.integrity=A.integrity),A.provenance&&(G.provenance=Ro(A.provenance)),w={promise:Promise.resolve().then(()=>e.resolver.resolve(G,F.signal)).then($=>{let X=ja(A,$);if(F.signal.aborted)throw ve({id:A.id,ref:A.ref,code:"aborted"});return a.set(D,{resource:ft(X)}),X}).catch($=>{throw Ga(A,$)}).finally(()=>{c.delete(D)}),controller:F,waiters:0},c.set(D,w)}let M=w;return M.waiters+=1,new Promise((F,G)=>{let J=!1,$=(y,b)=>{J||(J=!0,B.removeEventListener("abort",X),M.waiters-=1,b&&M.waiters<=0&&M.controller.abort(),y())},X=()=>{$(()=>G(ve({id:A.id,ref:A.ref,code:"aborted"})),!0)};if(B.aborted){X();return}B.addEventListener("abort",X,{once:!0}),M.promise.then(y=>{if(!J){if(B.aborted){X();return}x(W,D),$(()=>F(ft(y)),!1)}},y=>{if(!J){if(B.aborted){X();return}$(()=>G(y),!1)}})})}function g(A,B,W){if(B.aborted)return Promise.reject(ve({id:A.id,ref:A.ref,code:"aborted"}));if(A.ref===en)return Promise.resolve(Ka(A));let D=new AbortController,C=()=>D.abort();B.addEventListener("abort",C,{once:!0});let w=A.timeoutMs??e.timeoutMs,M,F=!1;return n&&w!==void 0&&w>0&&Number.isFinite(w)&&(M=setTimeout(()=>{F=!0,D.abort()},w)),l(A,D.signal,W).then(G=>{let J=ja(A,G);return J.id=A.id,J}).catch(G=>{throw F?ve({id:A.id,ref:A.ref,code:"timeout"}):G}).finally(()=>{M!==void 0&&clearTimeout(M),B.removeEventListener("abort",C)})}async function k(A,B,W,D){try{return{resource:await g(A,B,D)}}catch(C){let w=R(A,B,C);if(v(w)||B.aborted||W>=Bl)throw w;let M=d(A);if(!M)throw w;if(B.aborted)throw ve({id:A.id,ref:A.ref,code:"aborted"});if(A.fallback==="silent"||M.ref===en)return{resource:Ka(A),failure:w};try{let F=await k(M,B,W+1,D);return{resource:{...ft(F.resource),id:A.id,usedFallback:!0},failure:w}}catch(F){let G=tn(F)&&!v(F)&&!B.aborted?F:R(A,B,F);throw!v(G)&&!B.aborted&&_(w),G}}}async function N(A,B){if(E)throw new Error(Wa);let W=r.get(A.id);if(W?.state==="ready"||W?.state==="failed")return;let D=o.get(A.id);if(D){await D;return}let C=(async()=>{let w=zl(A);if(w){S(A.id,{state:"failed",failure:w}),_(w),f(Lt("failed",{id:A.id,ref:A.ref,failure:w}));return}S(A.id,{state:"loading"});let M=s.get(A.id)??new AbortController;s.has(A.id)||s.set(A.id,M);try{let F=await k(A,M.signal,B,A.id);if(E)return;if(M.signal.aborted){let G=ve({id:A.id,ref:A.ref,code:"aborted"});S(A.id,{state:"failed",failure:G}),_(G),f(Lt("failed",{id:A.id,ref:A.ref,failure:G}));return}if(F.resource.id=A.id,F.failure){S(A.id,{state:"ready",resource:F.resource,failure:F.failure}),_(F.failure),f(Lt("failed",{id:A.id,ref:A.ref,failure:F.failure,resource:ft(F.resource)})),f(Lt("ready",{id:A.id,ref:F.resource.ref,resource:ft(F.resource),failure:F.failure}));return}S(A.id,{state:"ready",resource:F.resource}),f(Lt("ready",{id:A.id,ref:A.ref,resource:ft(F.resource)}))}catch(F){if(E)return;let G=tn(F)&&!v(F)&&!M.signal.aborted?{...Dn(F),id:A.id}:R(A,M.signal,F);S(A.id,{state:"failed",failure:G}),_(G),f(Lt("failed",{id:A.id,ref:A.ref,failure:G}))}finally{s.get(A.id)===M&&s.delete(A.id)}})();o.set(A.id,C);try{await C}finally{o.delete(A.id)}}return{async preload(A){if(E)throw new Error(Wa);let B=Array.isArray(A)?A:[];for(let W of B)W&&typeof W.id=="string"&&W.id.length>0&&(r.has(W.id)||r.set(W.id,{state:"pending"}),s.has(W.id)||s.set(W.id,new AbortController));return T(),await Promise.all(B.map(W=>N(W,0))),j()},get(A){let B=r.get(A);if(B?.state==="ready")return ft(B.resource)},getProgress(){return j()},onProgress(A){return u.add(A),()=>{u.delete(A)}},abort(A){if(!E){if(A!==void 0){s.get(A)?.abort();return}for(let B of s.values())B.abort()}},forget(A){if(E)return;if(A===void 0){for(let W of r.values())W.state==="ready"&&p(W.resource);r.clear(),i.length=0,a.clear(),m.clear(),T();return}let B=r.get(A);B?.state==="ready"&&p(B.resource),V(A,B),r.delete(A);for(let W=i.length-1;W>=0;W--)i[W].id===A&&i.splice(W,1);T()},dispose(){if(!E){E=!0;for(let A of s.values())A.abort();s.clear();for(let A of r.values())A.state==="ready"&&p(A.resource);r.clear(),i.length=0,o.clear();for(let A of c.values())A.controller.abort();a.clear(),c.clear(),m.clear(),u.clear()}}}}var Co=.25;function rn(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function Io(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function Xl(e){return e instanceof Error&&e.message?e.message:String(e)}async function Ql(){let{adaptersFor:e}=await Promise.resolve().then(()=>(po(),Aa)),t=e(["tone"]),n=typeof navigator<"u"&&/Headless/i.test(navigator.userAgent);for(let r of t)n?await r.load():await r.unlock()}function Zl(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function Ao(e={}){let t=e.toneStart??Ql,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,s=new Map,a=[],c={state:"locked"},m,u=!1,E=!1;function v(T){for(let _ of a.slice())_(T)}function R(T,_){let f=i.get(T);if(f)return _&&!f.participantId&&(f.participantId=_),f;let p={id:T,participantId:_,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(T,p),p}function x(T){return u||T.muted?0:Io(T.gain*T.duckGain)}function h(T){return{id:T.id,participantId:T.participantId,gain:T.gain,muted:T.muted,duckGain:T.duckGain,priority:T.priority,effectiveGain:x(T)}}function P(){let T=-1/0;for(let _ of s.values())_.priority>T&&(T=_.priority);for(let _ of i.values())if(!_.manualDuck){if(T===-1/0){_.duckGain=1;continue}_.duckGain=_.priority<T?Co:1}}async function V(){if(E||c.state==="unlocked")return rn(c);if(m)return await m,rn(c);c={state:"unlocking"},m=(async()=>{try{await t(),c={state:"unlocked"}}catch(T){c={state:"failed",error:Xl(T)}}})();try{await m}finally{m=void 0}return rn(c)}return{unlock:V,status(){return rn(c)},authorize(T){E||typeof T!="string"||T.length===0||r.add(T)},revoke(T){E||r.delete(T)},isAuthorized(T){return T===void 0||T.length===0?r.size===0:r.size===0?!0:r.has(T)},setChannelGain(T,_,f){E||typeof T!="string"||T.length===0||(R(T,f).gain=Io(_))},setPriority(T,_,f){E||typeof T!="string"||T.length===0||(R(T,f).priority=Number.isFinite(_)?_:0,P())},mute(){E||(u=!0,v({type:"mute"}))},unmute(){E||(u=!1,v({type:"mute"}))},muteChannel(T,_){E||typeof T!="string"||T.length===0||(R(T,_).muted=!0,v({type:"mute"}))},unmuteChannel(T){if(E)return;let _=i.get(T);_&&(_.muted=!1,v({type:"mute"}))},duck(T,_=Co){if(E||typeof T!="string"||T.length===0)return;let f=R(T);f.manualDuck=!0,f.duckGain=Io(_)},unduck(T){if(E)return;let _=i.get(T);_&&(_.manualDuck=!1,P())},effectiveGain(T){let _=i.get(T);return _?x(_):u?0:1},handleHostEvent(T){if(E||!T||typeof T!="object")return;let _=Zl(T.payload);if(_){if(T.type===je){o.set(_,"ready"),v({type:"asset",id:_,status:"ready"});return}T.type===$e&&(o.set(_,"failed"),v({type:"asset",id:_,status:"failed"}))}},assetStatus(T){return o.get(T)},noteCueStarted(T){if(E)return;s.set(T.idempotencyKey,{idempotencyKey:T.idempotencyKey,channelId:T.channelId,participantId:T.participantId,priority:T.priority});let _=R(T.channelId,T.participantId);T.priority>_.priority&&(_.priority=T.priority),P()},noteCueEnded(T){s.delete(T)&&P()},teardown(T){if(!E&&!(typeof T!="string"||T.length===0)){r.delete(T);for(let[_,f]of[...s.entries()])f.participantId===T&&s.delete(_);for(let[_,f]of[...i.entries()])f.participantId===T&&i.delete(_);P(),v({type:"teardown",participantId:T})}},onNotice(T){return a.push(T),()=>{let _=a.indexOf(T);_>=0&&a.splice(_,1)}},inspect(){let T=[...o.entries()].sort(([f],[p])=>f<p?-1:f>p?1:0),_={};for(let[f,p]of T)_[f]=p;return{status:rn(c),reducedSensory:n,muted:u,authorized:[...r].sort(),channels:[...i.values()].sort((f,p)=>f.id<p.id?-1:f.id>p.id?1:0).map(h),assets:_}},destroy(){E||(E=!0,s.clear(),i.clear(),r.clear(),v({type:"destroy"}),a.length=0)},get reducedSensory(){return n},get muted(){return u}}}function Qa(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function Po(e){la();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:s,audioBroker:a,audioParticipantId:c,kind:m="render",onFrameTiming:u}=e,E=n===void 0?void 0:Rr(n,o?"deterministic":"live"),v=new zt;if(a&&(Qa(v,a),c&&a.authorize(c)),s&&typeof s.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let R=s?Vt({resolver:s.resolver,timeoutMs:s.timeoutMs,emitEvents:s.emitEvents??!o,wallClockTimeout:!o,dispatch:l=>v.dispatch(l)}):void 0,x=!1,h=null,P,V=u,j=!1,T=t.clientWidth||window.innerWidth,_=t.clientHeight||window.innerHeight,f=new wr(30,!1,T,_,!1,void 0,{container:t,seed:E,captureKeyboard:r,hostChannel:v,audio:i,deterministic:o,kind:m,onFrameTiming:u}),p=()=>{let l=t.clientWidth||window.innerWidth,g=t.clientHeight||window.innerHeight;return l===f.containerWidth&&g===f.containerHeight?!1:(f.containerWidth=l,f.containerHeight=g,!0)},S=null;return!f.isDeterministic&&typeof ResizeObserver<"u"&&(S=new ResizeObserver(()=>{if(x||!h)return;p()&&j&&f.reinit()}),S.observe(t)),f.onError=(l,g)=>{P?.(l,g)},{get tokenData(){return f.tokenData},get hostChannel(){return v},get assets(){return R},get audioBroker(){return a},get kind(){return m},get onError(){return P},set onError(l){P=l},get onFrameTiming(){return V},set onFrameTiming(l){V=l,f.onFrameTiming=l},mount(l,g={}){if(x)throw new Error("createRuntime: cannot mount on a destroyed runtime");h?.destroy(),j=!1,f.customState=g.initialState,f.setGameManager(g.gameManager);let k=g.onEvent?v.onEvent(g.onEvent):()=>{};if(a&&c&&a.authorize(c),!f.prepareCart(l))throw k(),new Error("createRuntime: failed to prepare cart");let N=!1,A={async start(){if(!N){if(p()&&f.isPrepared&&(f.init(),f.unloadCart(),!f.prepareCart(l)))throw new Error("createRuntime: failed to prepare cart");f.needsAudio&&(a?await a.unlock():await f.unlockAudio(),N)||(j=!0,f.beginPlayback())}},pause(){N||(f.paused=!0)},resume(){N||(f.paused=!1)},dispatch(B){N||v.dispatch(B)},snapshot(){if(N)return{seed:"",pngDataUrl:""};let B=f.canvas;return{seed:f.tokenData.hash,metadata:l.metadata,pngDataUrl:B?B.toDataURL("image/png"):""}},destroy(){N||(N=!0,j=!1,k(),v.clearInbound(),f.unloadCart(),h===A&&(h=null))},reload(){if(!N){if(!j){if(f.isPrepared&&(f.unloadCart(),!f.prepareCart(l)))throw new Error("createRuntime: failed to prepare cart");return}f.reloadCart()}},reinit(B){if(!N){if(!j){p();return}f.reinit(B)}},getCartState(){return f.animation?.cartState},exportState(){return N?Promise.reject(new Error("Cart handle has been destroyed")):f.exportState()},exportStateJSON(){return N?Promise.reject(new Error("Cart handle has been destroyed")):f.exportStateJSON()},async importState(B,W){if(N)throw new Error("Cart handle has been destroyed");let D=B,C=B;if(typeof B=="string")try{C=JSON.parse(B)}catch{await f.importState(B,W);return}if(C&&typeof C=="object"&&typeof C.schemaVersion=="number"){let w=So(C);if(w.ok===!1)throw new Oe(Mt(w.errors));await f.importState(w.bundle,W);return}await f.importState(typeof D=="string"?D:C,W)},async exportSnapshot(B){if(N)throw new Error("Cart handle has been destroyed");let W=await f.exportState(),D=f.getClock(),C=_n(W,{...B,rng:f.getRandomState(),clock:{framesElapsed:W.framesElapsed,elapsedSinceStart:W.elapsedSinceStart,now:D.now,frameRate:D.frameRate}});if(C.ok===!1)throw new Oe(Mt(C.errors));return C.snapshot},async exportSnapshotJSON(B){return JSON.stringify(await A.exportSnapshot(B))},async importSnapshot(B,W){if(N)throw new Error("Cart handle has been destroyed");let D=ko(B);if(D.ok===!1)throw new Oe(Mt(D.errors));await f.importState(D.snapshot.engineState,W)},peekExportedFramebuffer(){return N?null:f.peekExportedFramebuffer()},peekSeed(){if(!N)return f.peekSeed()},isGenerative(){return N?!1:f.isGenerative()},async step(B=1){if(N)throw new Error("Cart handle has been destroyed");await f.step(B)},async advance(B){if(N)throw new Error("Cart handle has been destroyed");await f.advance(B)},schedule(B){N||f.schedule(B)},getClock(){if(N)throw new Error("Cart handle has been destroyed");return f.getClock()},getRandomState(){if(N)throw new Error("Cart handle has been destroyed");return f.getRandomState()},getReplayMetadata(){return N?Promise.reject(new Error("Cart handle has been destroyed")):f.getReplayMetadata()},get canvas(){return f.canvas},get paused(){return f.paused},set paused(B){N||(f.paused=B)},get tokenData(){return f.tokenData},get isPrepared(){return f.isPrepared},get isLoopRunning(){return f.isLoopRunning},get needsAudio(){return f.needsAudio},get audioLibraries(){return f.audioLibraries}};return h=A,A},async unlockAudio(){if(a){f.needsAudio&&await a.unlock();return}await f.unlockAudio()},destroy(){x||(x=!0,h?.destroy(),h=null,a&&c&&a.teardown(c),S?.disconnect(),S=null,R?.dispose(),v.close(),f.destroy())}}}var on="cyberart.state.save",sn="cyberart.state.load";function ep(e,t,n={}){let r=n.persist,i=r?{persist:r}:void 0,o=()=>{t.emit({type:on,payload:i})},s=()=>{t.emit({type:sn,payload:i})};e.registerAction("w",o,!0),e.registerAction("W",o,!0),e.registerAction("e",s,!0),e.registerAction("E",s,!0)}function Za(e){if(e.type!==on&&e.type!==sn)return;let t=e.payload?.persist;return t==="localStorage"?t:void 0}var tp="cyberart-io",np=1,Ct="framebuffers";function To(e,t){return`${e||"unknown"}:${t?Rt(t):"none"}`}function td(e,t){return`${e||"unknown"}:${t||"none"}`}function wo(){return new Promise((e,t)=>{let n=indexedDB.open(tp,np);n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains(Ct)||r.createObjectStore(Ct)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error??new Error("indexedDB open failed"))})}function rp(e){let t=e.data;return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function ed(e,t){return new Promise((n,r)=>{let o=e.transaction(Ct,"readonly").objectStore(Ct).get(t);o.onsuccess=()=>n(o.result),o.onerror=()=>r(o.error??new Error("indexedDB read failed"))})}async function nd(e,t,n){if(typeof indexedDB>"u")return;let r=await wo(),i={width:n.width,height:n.height,data:rp(n)};try{await new Promise((o,s)=>{let a=r.transaction(Ct,"readwrite");a.oncomplete=()=>o(),a.onerror=()=>s(a.error??new Error("indexedDB write failed")),a.objectStore(Ct).put(i,To(e,t))})}finally{r.close()}}async function rd(e,t){if(typeof indexedDB>"u")return null;let n=await wo();try{let r=To(e,t),i=td(e,t),o=await ed(n,r)??(r===i?void 0:await ed(n,i));if(!o||!o.data||o.width<1||o.height<1)return null;let s=new ImageData(o.width,o.height);return s.data.set(new Uint8ClampedArray(o.data)),s}finally{n.close()}}async function id(e,t){if(typeof indexedDB>"u")return;let n=await wo();try{await new Promise((r,i)=>{let o=n.transaction(Ct,"readwrite");o.oncomplete=()=>r(),o.onerror=()=>i(o.error??new Error("indexedDB delete failed"));let s=o.objectStore(Ct);s.delete(To(e,t)),s.delete(td(e,t))})}finally{n.close()}}var xo="cyberart.state.",ip="Saved state",op="Loaded state",od="Failed to save state",sp="Failed to load state",ap="No saved state";function At(e,t){let n=e||"unknown";return t?xo+n+"."+Rt(t):xo+n}function dp(e,t,n){return r=>{if(Za(r)==="localStorage"){if(r.type===on){cp(e,t,n);return}r.type===sn&&up(e,t,n)}}}function ad(e){return!!e&&typeof e=="object"&&typeof e.schemaVersion=="number"}function sd(e){if(ad(e)){let t=On(e);if(t.ok===!1)return null;try{return Ge(t.snapshot.engineState)}catch{return null}}if(Qt(e))try{return Ge(e)}catch{return null}return null}function an(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=sd(n.bundle);return o?{savedAt:n.savedAt,bundle:o}:null}let r=sd(t);if(r)return{savedAt:0,bundle:r};if(ad(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 cp(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?.(od,"transient");return}i.generative===!0?(hp(o),Lr(At(o,i.seed),i)):Lr(At(o),i);let s=r.peekExportedFramebuffer?.();if(s)try{await nd(o,i.seed,s)}catch(a){console.warn("Failed to save cart framebuffer",a)}n?.(ip,"transient")}catch(i){console.error("Failed to save cart state",i),n?.(od,"transient")}}async function up(e,t,n){let r=e();if(!r)return;let i=t?.(),o=r.peekSeed?.(),s=r.isGenerative?.()===!0,a=gp(i,s,o);if(!a){console.warn("No saved cart state for",i||"unknown",s&&o?`(hash ${o})`:""),n?.(ap,"transient");return}try{let c=await rd(i,a.bundle.seed).catch(()=>null);await r.importState(a.bundle,{framebuffer:c}),n?.(op,"transient")}catch(c){console.error("Failed to load cart state",c),n?.(sp,"transient")}}function Lr(e,t){let n=JSON.stringify({savedAt:Date.now(),bundle:t});lp(e,n)}function lp(e,t){for(;;)try{localStorage.setItem(e,t);return}catch(n){if(!pp(n)||!fp(e))throw n}}function pp(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 fp(e){let t=null,n=1/0;for(let o of mp()){if(o===e)continue;let s=localStorage.getItem(o);if(!s)continue;let c=an(s)?.savedAt??0;c<n&&(n=c,t=o)}if(!t)return!1;let r=localStorage.getItem(t),i=r?an(r):null;return localStorage.removeItem(t),i?.bundle&&id(i.bundle.cartId,i.bundle.seed).catch(()=>{}),!0}function mp(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(xo)&&e.push(n)}return e}function gp(e,t,n){if(t&&n){let i=localStorage.getItem(At(e,n));if(i)return an(i);let o=localStorage.getItem(At(e));if(!o)return null;let s=an(o);if(!s||!yp(s.bundle,n))return null;try{Lr(At(e,n),s.bundle)}catch{}return s}let r=localStorage.getItem(At(e));return r?an(r):null}function yp(e,t){return typeof e.seed=="string"&&Rt(e.seed)===Rt(t)}function hp(e){let t=At(e),n=localStorage.getItem(t);if(!n)return;let r=an(n);if(r&&typeof r.bundle.seed=="string"){let i=At(e,r.bundle.seed);if(!localStorage.getItem(i))try{Lr(i,r.bundle)}catch{return}}localStorage.removeItem(t)}var Mn=1,nt="cyberart.diagnostic.rejected",Br=8,bp=new Set(["intent","state","diagnostic"]),vp=new Set([on,sn]);function Vr(e){return typeof e=="string"&&bp.has(e)}function dd(e){if(e.kind!==void 0)return Vr(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(vp.has(e.type))return"intent";for(let t of e.type.split("."))if(Vr(t))return t}}function cd(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 Pt(e,t){for(let n of e)if(cd(n,t))return!0;return!1}function dn(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 Fr(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!==Mn)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=dd(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=dn(e.payload);if(!r.ok)return{ok:!1,reason:"malformed",detail:"payload is not JSON-serializable"};let i=t.createId(),o=typeof e.correlationId=="string"&&e.correlationId.length>0?e.correlationId:i,s=typeof e.causationId=="string"&&e.causationId.length>0?e.causationId:t.causationId,a=typeof e.target=="string"&&e.target.length>0?e.target:void 0,c=t.maxHops??Br,m=t.parentHops===void 0?c:Math.max(0,t.parentHops-1),u=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,E={schemaVersion:Mn,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:m};return a&&(E.target=a),s&&(E.causationId=s),u&&(E.idempotencyKey=u),r.value!==void 0&&(E.payload=r.value),{ok:!0,envelope:E}}var Ep=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),Sp=8,kp=8,Rp=16,Ip=256,Cp=256,Ap=["*.intent.*"];function _o(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??Sp,i=e.maxCausationDepth??kp,o=e.maxHops??Br,s=e.maxCorrelationPerTurn??Rp,a=e.maxIndex??Ip,c=e.maxDecisions??Cp,m=e.maxPerWindow,u=e.windowMs??1e3,E=e.now??Date.now,v=0,R=e.createId??(()=>`evt-${++v}`),x=new Map,h=[],P=[],V=new Map,j=new Map,T=new Map,_=[],f=0,p=0,S=0;function d(O){try{return JSON.parse(JSON.stringify(O))}catch{return O}}function l(O){for(_.push(O);_.length>c;)_.shift();for(let K of P)try{K(d(O))}catch{}}function g(O,K){let Y={outcome:K.outcome,source:K.source,type:O.type,kind:O.kind,envelopeId:O.id,deliveredTo:K.deliveredTo,hops:O.hops,seq:O.seq,correlationId:O.correlationId,schemaVersion:O.schemaVersion,turn:S,time:E()};return K.reason&&(Y.reason=K.reason),K.detail&&(Y.detail=K.detail),K.priorEnvelopeId&&(Y.priorEnvelopeId=K.priorEnvelopeId),O.target&&(Y.target=O.target),O.causationId&&(Y.causationId=O.causationId),O.idempotencyKey&&(Y.idempotencyKey=O.idempotencyKey),O.payload!==void 0&&(Y.payload=d(O.payload)),Y}let k=[],N=!1;function A(O,K,Y){for(O.set(K,Y);O.size>a;){let Q=O.keys().next().value;if(Q===void 0)break;O.delete(Q)}}function B(O){A(V,O.id,{type:O.type,source:O.source,causationId:O.causationId,hops:O.hops,correlationId:O.correlationId,idempotencyKey:O.idempotencyKey})}function W(O,K){K&&(O.correlationId||(O.correlationId=K.correlationId),O.causationId||(O.causationId=K.id),!O.idempotencyKey&&K.idempotencyKey&&(O.idempotencyKey=`${K.idempotencyKey}::${O.type}`))}function D(O,K){if(O){let Y=V.get(O);return Y?Y.hops:o}return K}function C(O,K){return`${O}\0${K}`}function w(O,K){O.idempotencyKey&&A(T,C(O.source,O.idempotencyKey),K)}function M(O,K){if(K)return T.get(C(O,K))}function F(O){return M(O.source,O.idempotencyKey)}function G(O){return O.seq+=1,O.seq}function J(O,K){if(!(typeof K.causationId=="string"&&K.causationId.length>0))return O.lastDelivered}function $(O){let K=new Set,Y=new Set([`${O.type}\0${O.source}`]),Q=O.causationId,re=0;for(;Q;){if(re+=1,re>i||K.has(Q))return!0;K.add(Q);let de=V.get(Q);if(!de)break;let Le=`${de.type}\0${de.source}`;if(Y.has(Le))return!0;Y.add(Le),Q=de.causationId}return!1}function X(O){let K=(j.get(O)??0)+1;return j.set(O,K),K}function y(O,K){m!==void 0&&(O.emitTimestamps=O.emitTimestamps.filter(Y=>K-Y<u))}function b(O,K){return(K.kind==="state"||K.kind==="diagnostic")&&!O.authoritative?!1:Pt(O.emit,K.type)}function I(O){for(let K of h)if(Pt(K.patterns,O.type))try{K.listener(O)}catch{}}function L(O){let K=[];if(O.target){let Y=x.get(O.target);return!Y||!Pt(Y.subscribe,O.type)||(Y.channel.dispatch(O),Y.lastDelivered={id:O.id,hops:O.hops,correlationId:O.correlationId,idempotencyKey:O.idempotencyKey},K.push(Y.id)),K}for(let Y of x.values())Pt(Y.subscribe,O.type)&&(Y.channel.dispatch(O),Y.lastDelivered={id:O.id,hops:O.hops,correlationId:O.correlationId,idempotencyKey:O.idempotencyKey},K.push(Y.id));return K}function H(O,K,Y,Q,re,de,Le){let Fe={reason:Q,eventType:K,source:Y};re&&(Fe.detail=re),p+=1;let be=R(),kt={schemaVersion:Mn,type:nt,kind:"diagnostic",source:n,id:be,correlationId:de??be,seq:p,hops:0,payload:Fe};Le&&(kt.causationId=Le),B(kt);let Kt=x.get(O);Kt&&Kt.channel.dispatch(kt),I(kt)}function ne(O,K,Y,Q,re){if(H(O,re?.type??(typeof K.type=="string"?K.type:""),re?.source??O,Y,Q,re?.correlationId,re?.id),re?.idempotencyKey&&!Ep.has(Y)&&w(re,{status:"rejected"}),re)l(g(re,{outcome:"rejected",reason:Y,detail:Q,source:O,deliveredTo:[]}));else{let de={outcome:"rejected",reason:Y,source:O,type:typeof K.type=="string"?K.type:"",deliveredTo:[],turn:S,time:E()};Q&&(de.detail=Q),typeof K.idempotencyKey=="string"&&(de.idempotencyKey=K.idempotencyKey),l(de)}}function z(O,K){B(O),w(O,{status:"accepted",envelope:O}),X(O.correlationId),I(O);let Y=L(O);l(g(O,{outcome:"accepted",source:K,deliveredTo:Y}))}function ie(O,K,Y,Q){let re=Q?.type??(typeof K.type=="string"?K.type:""),de={outcome:"duplicate",reason:"duplicate",detail:Y.status==="accepted"?"idempotent accepted":"idempotent rejected",source:O,type:re,deliveredTo:[],turn:S,time:E()};Q?(de.kind=Q.kind,de.envelopeId=Q.id,de.hops=Q.hops,de.seq=Q.seq,de.correlationId=Q.correlationId,de.schemaVersion=Q.schemaVersion,Q.target&&(de.target=Q.target),Q.causationId&&(de.causationId=Q.causationId),Q.idempotencyKey&&(de.idempotencyKey=Q.idempotencyKey),Q.payload!==void 0&&(de.payload=d(Q.payload))):typeof K.idempotencyKey=="string"&&(de.idempotencyKey=K.idempotencyKey),Y.status==="accepted"&&(de.priorEnvelopeId=Y.envelope.id,de.envelopeId||(de.envelopeId=Y.envelope.id)),l(de)}function oe(O,K,Y,Q){if(!Y.ok){ne(O,K,"malformed",Y.detail);return}let re=Y.envelope,de=F(re);if(de)return ie(O,K,de,re),de.status==="accepted"?de.envelope:void 0;if(re.hops<1){ne(O,K,"hop-limit","no hops remaining",re);return}if(re.target&&re.target!==t){let Le=x.get(re.target);if(!Le){ne(O,K,"unknown-target",`unknown target "${re.target}"`,re);return}if(!Pt(Le.subscribe,re.type)){ne(O,K,"not-subscribed",`target "${re.target}" does not subscribe to ${re.type}`,re);return}}if(Q){if(!b(Q,re)){ne(O,K,"unauthorized","source may not emit this event",re);return}if(Q.emitsThisTurn+=1,Q.emitsThisTurn>r){ne(O,K,"rate-limited","maxPerTurn exceeded",re);return}if(m!==void 0){let Fe=E();if(y(Q,Fe),Q.emitTimestamps.push(Fe),Q.emitTimestamps.length>m){ne(O,K,"rate-limited","maxPerWindow exceeded",re);return}}if($(re)){ne(O,K,"loop-detected","causation chain cycle or depth exceeded",re);return}if((j.get(re.correlationId)??0)+1>s){ne(O,K,"storm-detected","correlationId storm",re);return}if(e.validate){let Fe;try{Fe=e.validate(re)}catch(be){let kt=be instanceof Error?be.message:"validate threw";ne(O,K,"host-rejected",kt,re);return}if(Fe!==!0){ne(O,K,"host-rejected",Fe.detail,re);return}}}else{if($(re)){ne(O,K,"loop-detected","causation chain cycle or depth exceeded",re);return}if((j.get(re.correlationId)??0)+1>s){ne(O,K,"storm-detected","correlationId storm",re);return}}return z(re,O),re}function Pe(O,K){let Y=x.get(O);if(!Y)return;let Q={...K},re=J(Y,Q);W(Q,re);let de=M(Y.id,Q.idempotencyKey);if(de){ie(O,Q,de);return}let Le=G(Y),Fe=Fr(Q,{source:Y.id,createId:R,seq:Le,causationId:re?.id,maxHops:o,parentHops:D(Q.causationId??re?.id,re?.hops)});oe(O,Q,Fe,Y)}function q(O,K){let Y=K?.cause,Q={...O};W(Q,Y);let re=M(t,Q.idempotencyKey);if(re)return ie(t,Q,re),re.status==="accepted"?re.envelope:void 0;f+=1;let de=Fr(Q,{source:t,createId:R,seq:f,causationId:Q.causationId,maxHops:o,parentHops:D(Q.causationId,Y?.hops)});return oe(t,Q,de,void 0)}function U(){if(!N){N=!0;try{for(;k.length>0;){let O=k.shift();O&&(O.kind==="cart"?Pe(O.participantId,O.event):O.result=q(O.event,O.extras))}}finally{N=!1}}}function le(O){k.push(O),U()}return{attach(O,K,Y={}){if(O===t||O===n)throw new Error(`createEventRouter: "${O}" is a reserved participant id`);for(let de of x.values())if(de.channel===K&&de.id!==O)throw new Error(`createEventRouter: channel already attached as "${de.id}"`);x.get(O)?.unsubscribe();let re={id:O,channel:K,emit:Y.emit??Ap,subscribe:Y.subscribe??[],authoritative:Y.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};re.unsubscribe=K.onEvent(de=>{le({kind:"cart",participantId:O,event:de})}),x.set(O,re)},detach(O){let K=x.get(O);K&&(K.unsubscribe(),x.delete(O))},publish(O,K){let Y={kind:"publish",event:O,extras:K};return le(Y),Y.result},subscribe(O,K){let Y={patterns:O,listener:K};return h.push(Y),()=>{let Q=h.indexOf(Y);Q>=0&&h.splice(Q,1)}},subscribeDecision(O){return P.push(O),()=>{let K=P.indexOf(O);K>=0&&P.splice(K,1)}},inspectParticipants(){return[...x.values()].map(O=>({id:O.id,emit:O.emit.slice(),subscribe:O.subscribe.slice(),authoritative:O.authoritative}))},inspectDecisions(){return _.map(O=>d(O))},turn(){S+=1,j.clear();for(let O of x.values())O.emitsThisTurn=0,O.lastDelivered=void 0,m!==void 0&&y(O,E())}}}var Pp=new Set(["string","number","boolean","object","array"]);function Ve(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function ud(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if(Vr(t))return t}}function ld(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function Oo(e){let t=[];if(!e||typeof e!="object")return[Ve("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(Ve("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(Ve("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(Ve("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!Pp.has(r.type))&&t.push(Ve("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function Tp(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 wp(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])=>Ve("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[Ve("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(Ve("missing-field",`payload is missing required field "${i}"`,i));continue}let s=Tp(n[i]);s!==o.type&&r.push(Ve("field-type",`payload.${i} expected ${o.type}, got ${s}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function xp(e,t,n){let r=ld(e);return{type:e,kind:t,payloadSchema:{version:n.version,fields:{...n.fields}},emitPattern:r,subscribePattern:r,toManifest(){let i={};for(let[o,s]of Object.entries(this.payloadSchema.fields))i[o]={type:s.type,optional:s.optional===!0};return{type:this.type,kind:this.kind,version:this.payloadSchema.version,fields:i,emitPattern:this.emitPattern,subscribePattern:this.subscribePattern}},validatePayload(i){return wp(this.payloadSchema,i)}}}function Do(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(Ve("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(Ve("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=ud(t);i?i!==e&&r.push(Ve("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(Ve("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(...Oo(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:xp(t,e,n)}}function No(e,t){return Do("intent",e,t)}function pe(e,t){return Do("state",e,t)}function He(e,t){return Do("diagnostic",e,t)}function _p(e,t){let n=Oo(e),r=Oo(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),s=new Set(i),a=new Set(o);for(let u of i){if(!a.has(u))return"breaking";let E=e.fields[u],v=t.fields[u];if(E.type!==v.type)return"breaking";let R=E.optional!==!0,x=v.optional===!0;if(R&&x||!R&&v.optional!==!0&&E.optional===!0)return"breaking"}let c=!1;for(let u of o)if(!s.has(u)){if(t.fields[u].optional!==!0)return"breaking";c=!0}let m=i.length===o.length&&i.every(u=>t.fields[u].type===e.fields[u].type&&t.fields[u].optional===!0==(e.fields[u].optional===!0));return m&&t.version===e.version?"identical":t.version>e.version&&(c||m)?"backward-compatible":t.version===e.version&&c?"breaking":m?"identical":"breaking"}function Op(e,t){let n=[],r=[],i=new Set,o=new Set;for(let s of e)(t==="authoritative"||s.kind==="intent")&&!i.has(s.emitPattern)&&(i.add(s.emitPattern),n.push(s.emitPattern)),s.kind!=="intent"&&!o.has(s.subscribePattern)&&(o.add(s.subscribePattern),r.push(s.subscribePattern));return{emit:n,subscribe:r,authoritative:t==="authoritative"}}function Dp(e,t){let n=e.emit??["*.intent.*"],r=e.authoritative===!0,i=[];for(let o of t)Pt(n,o.type)&&(o.kind==="state"||o.kind==="diagnostic")&&!r&&i.push(Ve("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 Np(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:[Ve("kind-mismatch",`envelope kind "${i.kind}" does not match contract "${o.kind}"`,i.type)]}:o.validatePayload(i.payload):{ok:!1,errors:[Ve("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(s=>s.detail).join("; ")}}}}var cn=1,Lo="presentation.state.model",fd="presentation.intent.unsupported",md=["loading","ready","error","unsupported"],Mp=["presentation.state.*",nt],Lp="Presentation adapter has been destroyed",gd="Presentation adapter: model is invalid or not JSON-serializable",Vp=new Set(md);function yd(e){return typeof e=="string"&&Vp.has(e)}function Vo(e){if(e===null||typeof e!="object")return!1;let t=e;return!(t.contractVersion!==cn||!yd(t.phase)||t.reason!==void 0&&typeof t.reason!="string"||t.view!==void 0&&(t.view===null||typeof t.view!="object"))}function Mo(e,t){let n={type:Lo,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 Bo(){return{contractVersion:cn,phase:"loading"}}function Fo(e){return{contractVersion:cn,phase:"unsupported",reason:e}}function $o(e){let t=dn(e);return t.ok?Vo(t.value)?{ok:!0,model:t.value}:t.value!==null&&typeof t.value=="object"&&"contractVersion"in t.value&&t.value.contractVersion!==cn?{ok:!1,reason:"unknown-contract-version",contractVersion:t.value.contractVersion}:{ok:!1,reason:"invalid-model"}:{ok:!1,reason:"model-not-serializable"}}function $r(e){let t=$o(e);if(!t.ok)throw new Error(gd);return t.model}function Bp(e){let t=dn(e);return t.ok&&Vo(t.value)?t.value:Fo("model-not-serializable")}function Fp(e,t){if(e.type!==Lo)return{model:t};let n=$o(e.payload);return n.ok?{model:n.model}:{model:Fo(n.reason),rejected:{reason:n.reason,contractVersion:n.contractVersion}}}function $p(e){if(e===null||typeof e!="object"||!("regions"in e))return[];let t=e.regions;return Array.isArray(t)?t:[]}function Hp(e,t,n){return e>=n.x&&e<n.x+n.width&&t>=n.y&&t<n.y+n.height}function qp(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=dn(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 hd(e,t,n){let r={reason:t};if(n!==void 0){let i=dn(n);i.ok&&(r.contractVersion=i.value)}e.emit({type:fd,kind:"intent",payload:r})}function pd(e,t,n){let r=t;for(let i of e){let o=Fp(i,r);o.rejected&&n&&hd(n,o.rejected.reason,o.rejected.contractVersion),r=o.model}return r}function bd(){return{metadata:{id:"cyberart.presentation.reference",name:"Reference presentation",frameRate:30},getDefaultState:(e,t,n,r,i,o,s,a,c)=>{let m=i?.model;if(m===void 0)return{model:Bo()};let u=$o(m);return u.ok?{model:u.model}:(c&&hd(c,u.reason,u.contractVersion),{model:Fo(u.reason)})},update:(e,t,n,r,i,o,s,a,c,m,u)=>{let E=pd(u?.consume()??[],i.model,u);for(;s?.hasClick();){let v=s.consumeClick();if(!(!v||E.phase!=="ready"||!u)){for(let R of $p(E.view))if(Hp(v.x,v.y,R)){qp(u,R);break}}}return u&&(E=pd(u.consume(),E,u)),E===i.model?i:{...i,model:E}},render:(e,t,n,r,i,o)=>{let s=i.model.view?.background;o.fillStyle=s??"#111",o.fillRect(0,0,r.width,r.height)}}}function vd(e,t={}){let n=e,r=t.model?$r(t.model):Bo(),i=!1,o=t.present??t.model!==void 0,s=()=>{if(i)throw new Error(Lp)},a=c=>{s(),r=$r(c),n.dispatch(Mo(r))};return o&&n.dispatch(Mo(r)),{version:cn,get target(){return n},get model(){return Bp(r)},get phase(){return r.phase},get paused(){return n.paused===!0},present:a,async start(){return s(),n.start()},pause(){s(),n.pause()},resume(){s(),n.resume()},retarget(c){s(),n=c},destroy(){i||(i=!0,n.destroy())}}}function Wp(e,t={}){let n=t.model?$r(t.model):t.initialState?.model!==void 0?$r(t.initialState.model):Bo(),r=t.cart??bd(),i=e.mount(r,{initialState:{...t.initialState,model:n},onEvent:t.onEvent});return vd(i,{model:n,present:!1})}var yt="cue.started",Tt="cue.completed",ht="cue.cancelled",mt="cue.replaced",Kp=[yt,Tt,ht,mt];function Gp(e){return e===yt||e===Tt||e===ht||e===mt}function Sd(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function Ed(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function Hr(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 Ho(e){return e.startFrame+e.delayFrames}function jp(e,t){if(!e||typeof e!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof e.name!="string"||e.name.length===0)return{ok:!1,reason:"invalid",detail:"name is required"};if(typeof e.idempotencyKey!="string"||e.idempotencyKey.length===0)return{ok:!1,reason:"invalid",detail:"idempotencyKey is required"};if(typeof e.durationFrames!="number"||!Number.isFinite(e.durationFrames)||e.durationFrames<0)return{ok:!1,reason:"invalid",detail:"durationFrames must be a non-negative finite number"};let n=e.startFrame===void 0?t:e.startFrame;if(typeof n!="number"||!Number.isFinite(n))return{ok:!1,reason:"invalid",detail:"startFrame must be finite"};let r=e.delayFrames??0;if(typeof r!="number"||!Number.isFinite(r)||r<0)return{ok:!1,reason:"invalid",detail:"delayFrames must be a non-negative finite number"};let i=e.easing??"linear";if(i!=="linear"&&i!=="ease-out")return{ok:!1,reason:"invalid",detail:"unsupported easing"};let o=e.onDuplicate??"replace";if(o!=="ignore"&&o!=="replace"&&o!=="reject")return{ok:!1,reason:"invalid",detail:"unsupported onDuplicate"};let s=0;if(e.repeat)if("forever"in e.repeat&&e.repeat.forever)s="forever";else if("count"in e.repeat){if(typeof e.repeat.count!="number"||!Number.isFinite(e.repeat.count)||e.repeat.count<0)return{ok:!1,reason:"invalid",detail:"repeat.count must be >= 0"};s=Math.floor(e.repeat.count)}else return{ok:!1,reason:"invalid",detail:"unsupported repeat"};let a=e.reducedMotion??"complete";return a!=="skip"&&a!=="complete"&&(typeof a!="object"||typeof a.durationFrames!="number"||!Number.isFinite(a.durationFrames)||a.durationFrames<0)?{ok:!1,reason:"invalid",detail:"unsupported reducedMotion"}:{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:n,durationFrames:e.durationFrames,delayFrames:r,easing:i,repeatRemaining:s,repeatIndex:0,reducedMotion:a,onDuplicate:o,phase:"scheduled",progress:0}}function Up(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 bt(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(h){i.push(h)}function s(h,P){let V=Ho(h)-Ho(P);return V!==0?V:h.name<P.name?-1:h.name>P.name?1:h.idempotencyKey<P.idempotencyKey?-1:h.idempotencyKey>P.idempotencyKey?1:0}function a(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,a(h,Tt),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",a(h,yt)}else r.delete(h.idempotencyKey)}function m(h){if(h.phase==="cancelled"||h.phase==="completed")return;let P=Ho(h);if(!(n<P)){if(h.phase==="scheduled"&&(h.phase="active",h.progress=h.durationFrames===0?1:0,a(h,yt),h.durationFrames===0)){c(h);return}if(h.phase==="active"){let V=n-P;V>=h.durationFrames?(h.progress=1,c(h)):h.progress=Sd(h.durationFrames===0?1:V/h.durationFrames,h.easing)}}}function u(){let h=[...r.values()].sort(s);for(let P of h)m(P)}function E(h){let P=jp(h,n);if("ok"in P&&P.ok===!1)return P;let V=Up(P,t),j=r.get(V.idempotencyKey);if(j&&(j.phase==="scheduled"||j.phase==="active")){if(j.onDuplicate==="reject"||V.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${V.idempotencyKey} is already ${j.phase}`};if(j.onDuplicate==="ignore"||V.onDuplicate==="ignore")return{ok:!0,cue:Hr(j)};j.phase="cancelled",j.progress=j.progress,a(j,mt),r.delete(j.idempotencyKey)}r.set(V.idempotencyKey,V),m(V);let T=r.get(V.idempotencyKey)??V;return{ok:!0,cue:Hr(T)}}function v(h){let P=r.get(h);return!P||P.phase==="completed"||P.phase==="cancelled"?!1:(P.phase="cancelled",a(P,ht),r.delete(h),!0)}function R(){for(let h of[...r.values()].sort(s))(h.phase==="scheduled"||h.phase==="active")&&(h.phase="cancelled",a(h,ht));r.clear(),i.length=0,n=e.originFrame??0}function x(h=1){let P=Number.isFinite(h)?Math.max(0,Math.floor(h)):0,V=i.length;for(let j=0;j<P;j++)n+=1,u();return i.slice(V).map(Ed)}return{play:E,step:x,cancel:v,reset:R,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(s).map(Hr),events:i.map(Ed)}},get(h){let P=r.get(h);return P?Hr(P):void 0},get frame(){return n},get reducedMotion(){return t}}}var Wr="audio.cue.scheduled",Kr="audio.cue.started",Gr="audio.cue.skipped",un="audio.cue.failed",Jp=[Wr,Kr,Gr,un];function Yp(e){return e===Wr||e===Kr||e===Gr||e===un}function qo(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 zp(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 qr(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 kd(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=bt({originFrame:e.originFrame}),i=new Map,o=[],s=new Set,a=0;function c(f){o.push(f)}function m(f,p,S){let d=r.get(p.idempotencyKey);return qo({type:f,atFrame:r.frame,name:p.name,idempotencyKey:p.idempotencyKey,assetId:p.assetId,channelId:p.channelId,participantId:p.participantId,reason:S?.reason,progress:S?.progress??d?.progress??0})}function u(f,p){s.delete(f.idempotencyKey),t?.noteCueEnded(f.idempotencyKey),f.audioPhase="failed",c(m(un,f,{reason:p})),r.cancel(f.idempotencyKey),i.delete(f.idempotencyKey)}function E(f,p){s.delete(f.idempotencyKey),f.audioPhase="skipped",c(m(Gr,f,{reason:p}))}function v(f){s.delete(f.idempotencyKey),f.audioPhase="started",t?.noteCueStarted({idempotencyKey:f.idempotencyKey,channelId:f.channelId,participantId:f.participantId,priority:f.priority}),c(m(Kr,f))}function R(f){if(f.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(f.participantId)){E(f,"unauthorized"),r.cancel(f.idempotencyKey),i.delete(f.idempotencyKey);return}if(n||t?.reducedSensory){E(f,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(f.channelId)===0){E(f,"muted");return}let p=t?.assetStatus(f.assetId);if(!t){v(f);return}if(p==="failed"){u(f,"asset-failed");return}if(p==="ready"){v(f);return}s.add(f.idempotencyKey)}function x(f,p){for(let S of[...s]){let d=i.get(S);if(!d){s.delete(S);continue}if(!(f&&d.assetId!==f)){if(p==="failed"||t?.assetStatus(d.assetId)==="failed"){u(d,"asset-failed");continue}(p==="ready"||t?.assetStatus(d.assetId)==="ready")&&R(d)}}}function h(f){for(let p of[...i.values()])p.participantId===f&&(p.audioPhase==="scheduled"||p.audioPhase==="started")&&u(p,"torn-down")}function P(f){for(let p of f){let S=i.get(p.idempotencyKey);if(S)if(p.type===yt)R(S);else if(p.type===Tt){if(s.delete(S.idempotencyKey),t?.noteCueEnded(S.idempotencyKey),r.get(S.idempotencyKey)){S.audioPhase="scheduled";continue}S.audioPhase==="scheduled"?u(S,"asset-failed"):(S.audioPhase==="started"&&(S.audioPhase="completed"),i.delete(S.idempotencyKey))}else p.type===ht?(s.delete(S.idempotencyKey),t?.noteCueEnded(S.idempotencyKey),(S.audioPhase==="scheduled"||S.audioPhase==="started")&&(S.audioPhase="failed"),i.delete(S.idempotencyKey)):p.type===mt&&(s.delete(S.idempotencyKey),t?.noteCueEnded(S.idempotencyKey),i.delete(S.idempotencyKey))}}function V(){let f=o.slice(a).map(qo);return a=o.length,f}let j=t?.onNotice(f=>{if(f.type==="asset"){if(f.status==="failed"){for(let p of[...i.values()])p.assetId===f.id&&(p.audioPhase==="scheduled"||p.audioPhase==="started")&&u(p,"asset-failed");return}x(f.id,f.status);return}if(f.type==="teardown"){h(f.participantId);return}if(f.type==="destroy")for(let p of[...i.values()])(p.audioPhase==="scheduled"||p.audioPhase==="started")&&u(p,"torn-down")});function T(){for(let f of i.values())t?.noteCueEnded(f.idempotencyKey);i.clear(),s.clear(),o.length=0,a=0,r.reset()}function _(f){if(!f||typeof f!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof f.assetId!="string"||f.assetId.length===0)return{ok:!1,reason:"invalid",detail:"assetId is required"};let p=r.snapshot().events.length,S=r.play(zp(f));if(!S.ok)return S;let d=r.snapshot().events.slice(p),l=d.some(W=>W.type===mt);if(!l&&i.has(f.idempotencyKey)){let W=i.get(f.idempotencyKey);return{ok:!0,cue:qr(W,S.cue,r.frame)}}if(l){let W=i.get(f.idempotencyKey);W&&(s.delete(W.idempotencyKey),t?.noteCueEnded(W.idempotencyKey),i.delete(W.idempotencyKey))}let g=f.channelId??f.participantId??"master",k={name:f.name,idempotencyKey:f.idempotencyKey,assetId:f.assetId,channelId:g,participantId:f.participantId,priority:Number.isFinite(f.priority)?f.priority:0,audioPhase:"scheduled"};i.set(k.idempotencyKey,k),typeof f.gain=="number"&&t?.setChannelGain(g,f.gain,f.participantId),typeof f.priority=="number"&&t?.setPriority(g,f.priority,f.participantId),c(m(Wr,k)),P(d.filter(W=>W.type!==mt));let N=i.get(k.idempotencyKey);N&&N.audioPhase==="scheduled"&&t?.assetStatus(N.assetId)==="failed"&&u(N,"asset-failed"),V();let A=i.get(k.idempotencyKey)??k,B=r.get(k.idempotencyKey)??S.cue;return{ok:!0,cue:qr(A,B,r.frame)}}return{play:_,step(f=1){let p=r.step(f);return P(p),V()},cancel(f){let p=i.get(f),S=r.cancel(f);return p&&(s.delete(f),t?.noteCueEnded(f),i.delete(f)),S},reset:T,snapshot(){return{frame:r.frame,reducedSensory:n,cues:[...i.values()].map(f=>qr(f,r.get(f.idempotencyKey),r.frame)).sort((f,p)=>f.name!==p.name?f.name<p.name?-1:1:f.idempotencyKey<p.idempotencyKey?-1:f.idempotencyKey>p.idempotencyKey?1:0),events:o.map(qo)}},get(f){let p=i.get(f);if(p)return qr(p,r.get(f),r.frame)},dispose(){j?.(),T()},get frame(){return r.frame},get reducedSensory(){return n}}}function Xp(e,t){return e.play(t)}function Wo(e={}){let t=Ao({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=kd({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 Qp=1,Id=["loading","ready","error","unsupported"],Cd=["keyboard","pointer","audio","assets","hostChannel"],Ad=["image","audio","font","spritesheet"],Pd=["tone","midi"],Jr=["source-over","screen"],Yr=["transparent","opaque"],Td=["render","calculation"],fn=["audio","controller","network","persistence","fullscreen"],Zp=new Set(Id),wd=new Set(Cd),Rd=new Set(Ad),xd=new Set(Pd),ef=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind","grants"]),tf=new Set(["minContractVersion","features"]),nf=new Set(["kinds","declarations"]),rf=new Set(["id","kind"]),of=new Set(["emit","subscribe","authoritative"]),_d=new Set(["alpha","clearPolicy"]),Od=new Set(["compositor","blend"]),Dd=new Set(["refs"]),sf=new Set(["id","version"]),jr=/^[a-z0-9][a-z0-9.-]*$/i,Nd=new Set(Jr),Md=new Set(Yr),Ld=new Set(Td),Ko=new Set(fn),af=new Set(["contractVersion","features","integrations","managers","emit","subscribe","surface","layers","modules","kinds","grants"]);function ae(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Xe(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Qe(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(ae("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function df(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 cf(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 Ur(e,t){for(let n of t)if(e===n||cf(n,e))return!0;return!1}function ln(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function Go(e,t,n){if(!Array.isArray(e))return{ok:!1,errors:[ae("invalid-field",`${t} must be an array`,t)]};let r=[],i=[];return e.forEach((o,s)=>{let a=`${t}[${s}]`;if(typeof o!="string"||o.length===0){r.push(ae("invalid-field",`${t} entries must be non-empty strings`,a));return}let c=n(o,a);c?r.push(c):i.push(o)}),r.length>0?{ok:!1,errors:r}:{ok:!0,values:i}}function pn(e,t){return Go(e,t,(n,r)=>df(n)?void 0:ae("invalid-pattern",`invalid event pattern "${n}"`,r))}function rt(e,t,n,r,i){return Go(e,t,(o,s)=>n.has(o)?void 0:ae(r,`invalid ${i} "${o}"`,s))}function Vd(e,t){return Go(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:ae("invalid-feature",`invalid feature tag "${n}"`,r))}function Bd(e,t){if(!Array.isArray(e))return{ok:!1,errors:[ae("invalid-module",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Xe(i)){n.push(ae("invalid-module","module ref must be an object",s));return}n.push(...Qe(i,sf,s)),(typeof i.id!="string"||i.id.length===0||!jr.test(i.id))&&n.push(ae("invalid-module",`invalid module id "${String(i.id)}"`,`${s}.id`)),(typeof i.version!="string"||i.version.length===0||!jr.test(i.version))&&n.push(ae("invalid-module",`invalid module version "${String(i.version)}"`,`${s}.version`)),typeof i.id=="string"&&jr.test(i.id)&&typeof i.version=="string"&&jr.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function uf(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 lf(e){if(!Xe(e))return[ae("invalid-manifest","capability manifest must be a JSON object")];let t=[...Qe(e,ef,"")];if(e.version!==void 0&&e.version!==1&&t.push(ae("invalid-version","capability manifest version must be 1","version")),(typeof e.id!="string"||e.id.length===0)&&t.push(ae("invalid-id","id is required","id")),!Xe(e.runtime))t.push(ae("invalid-runtime","runtime is required","runtime"));else{t.push(...Qe(e.runtime,tf,"runtime"));let a=e.runtime.minContractVersion;(typeof a!="number"||!Number.isInteger(a)||a<1)&&t.push(ae("invalid-runtime","runtime.minContractVersion must be an integer >= 1","runtime.minContractVersion"));let c=Vd(e.runtime.features,"runtime.features");c.ok||t.push(...c.errors)}let n=rt(e.phases,"phases",Zp,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=rt(e.managers,"managers",wd,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!Xe(e.assets))t.push(ae("invalid-assets","assets is required","assets"));else{t.push(...Qe(e.assets,nf,"assets"));let a=rt(e.assets.kinds,"assets.kinds",Rd,"invalid-asset-kind","asset kind");a.ok||t.push(...a.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((c,m)=>{let u=`assets.declarations[${m}]`;if(!Xe(c)){t.push(ae("invalid-assets","asset declaration must be an object",u));return}t.push(...Qe(c,rf,u)),(typeof c.id!="string"||c.id.length===0)&&t.push(ae("invalid-assets","asset declaration id is required",`${u}.id`)),(typeof c.kind!="string"||!Rd.has(c.kind))&&t.push(ae("invalid-asset-kind",`invalid asset kind "${String(c.kind)}"`,`${u}.kind`))}):t.push(ae("invalid-assets","assets.declarations must be an array","assets.declarations"))}let i=pn(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=pn(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!Xe(e.permissions))t.push(ae("invalid-permissions","permissions is required","permissions"));else{t.push(...Qe(e.permissions,of,"permissions"));let a=pn(e.permissions.emit,"permissions.emit");a.ok||t.push(...a.errors);let c=pn(e.permissions.subscribe,"permissions.subscribe");c.ok||t.push(...c.errors),e.permissions.authoritative!==void 0&&typeof e.permissions.authoritative!="boolean"&&t.push(ae("invalid-permissions","permissions.authoritative must be a boolean","permissions.authoritative"))}let s=rt(e.integrations,"integrations",xd,"invalid-integration","integration");if(s.ok||t.push(...s.errors),e.surface!==void 0&&(Xe(e.surface)?(t.push(...Qe(e.surface,_d,"surface")),e.surface.alpha!==void 0&&typeof e.surface.alpha!="boolean"&&t.push(ae("invalid-surface","surface.alpha must be a boolean","surface.alpha")),e.surface.clearPolicy!==void 0&&(typeof e.surface.clearPolicy!="string"||!Md.has(e.surface.clearPolicy))&&t.push(ae("invalid-clear-policy",`invalid clear policy "${String(e.surface.clearPolicy)}"`,"surface.clearPolicy"))):t.push(ae("invalid-surface","surface must be an object","surface"))),e.layers!==void 0){if(!Xe(e.layers))t.push(ae("invalid-layers","layers must be an object","layers"));else if(t.push(...Qe(e.layers,Od,"layers")),e.layers.compositor!==void 0&&typeof e.layers.compositor!="boolean"&&t.push(ae("invalid-layers","layers.compositor must be a boolean","layers.compositor")),e.layers.blend!==void 0){let a=rt(e.layers.blend,"layers.blend",Nd,"invalid-blend","blend mode");a.ok||t.push(...a.errors)}}if(e.modules!==void 0){if(!Xe(e.modules))t.push(ae("invalid-module","modules must be an object","modules"));else if(t.push(...Qe(e.modules,Dd,"modules")),e.modules.refs!==void 0){let a=Bd(e.modules.refs,"modules.refs");a.ok||t.push(...a.errors)}}if(e.kind!==void 0&&(typeof e.kind!="string"||!Ld.has(e.kind))&&t.push(ae("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),e.grants!==void 0){let a=rt(e.grants,"grants",Ko,"invalid-grant","grant");a.ok||t.push(...a.errors)}return t}function pf(e){let t=[];return e.emittedEvents.forEach((n,r)=>{Ur(n,e.permissions.emit)||t.push(ae("undeclared-permission",`emitted event "${n}" is not covered by permissions.emit`,`emittedEvents[${r}]`))}),e.acceptedEvents.forEach((n,r)=>{Ur(n,e.permissions.subscribe)||t.push(ae("undeclared-permission",`accepted event "${n}" is not covered by permissions.subscribe`,`acceptedEvents[${r}]`))}),t}function ff(e){let t=ln(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:ln(e.phases),managers:ln(e.managers),assets:{kinds:t,declarations:n},acceptedEvents:[...e.acceptedEvents],emittedEvents:[...e.emittedEvents],permissions:r,integrations:ln(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=ln(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=uf(e.modules.refs);o.length>0&&(i.modules={refs:o})}return e.kind==="calculation"&&(i.kind="calculation"),e.grants&&e.grants.length>0&&(i.grants=ln(e.grants)),i}function Ln(e){let t=lf(e);if(t.length>0)return{ok:!1,errors:t};let n=ff(e);return t.push(...pf(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function mf(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[ae("invalid-json","capability manifest JSON is not parseable")]}}return Ln(t)}function gf(e){return JSON.parse(JSON.stringify(e))}function Vn(e,t){let n=Ln(e),r=n.ok?[]:[...n.errors];if(!Xe(t))return{ok:!1,errors:[ae("invalid-host","host capabilities must be a JSON object")]};r.push(...Qe(t,af,"host")),typeof t.contractVersion!="number"||!Number.isInteger(t.contractVersion)||t.contractVersion<1?r.push(ae("invalid-host","host.contractVersion must be an integer >= 1","host.contractVersion")):n.ok&&t.contractVersion<n.manifest.runtime.minContractVersion&&r.push(ae("unsupported-runtime",`host contract version ${t.contractVersion} is below required ${n.manifest.runtime.minContractVersion}`,"runtime.minContractVersion"));let i=Vd(t.features,"host.features");if(!i.ok)r.push(...i.errors);else if(n.ok){let a=new Set(i.values);n.manifest.runtime.features.forEach((c,m)=>{a.has(c)||r.push(ae("unsupported-feature",`host does not support required feature "${c}"`,`runtime.features[${m}]`))})}let o=rt(t.integrations,"host.integrations",xd,"invalid-integration","integration");if(!o.ok)r.push(...o.errors);else if(n.ok){let a=new Set(o.values);n.manifest.integrations.forEach((c,m)=>{a.has(c)||r.push(ae("missing-integration",`host does not provide required integration "${c}"`,`integrations[${m}]`))})}if(t.managers!==void 0){let a=rt(t.managers,"host.managers",wd,"invalid-manager","manager");if(!a.ok)r.push(...a.errors);else if(n.ok){let c=new Set(a.values);n.manifest.managers.forEach((m,u)=>{c.has(m)||r.push(ae("missing-manager",`host does not provide required manager "${m}"`,`managers[${u}]`))})}}if(t.emit!==void 0){let a=pn(t.emit,"host.emit");a.ok?n.ok&&n.manifest.permissions.emit.forEach((c,m)=>{Ur(c,a.values)||r.push(ae("unknown-permission",`host does not allow emit permission "${c}"`,`permissions.emit[${m}]`))}):r.push(...a.errors)}if(t.subscribe!==void 0){let a=pn(t.subscribe,"host.subscribe");a.ok?n.ok&&n.manifest.permissions.subscribe.forEach((c,m)=>{Ur(c,a.values)||r.push(ae("unknown-permission",`host does not allow subscribe permission "${c}"`,`permissions.subscribe[${m}]`))}):r.push(...a.errors)}if(t.surface!==void 0&&(Xe(t.surface)?(r.push(...Qe(t.surface,_d,"host.surface")),t.surface.alpha!==void 0&&typeof t.surface.alpha!="boolean"&&r.push(ae("invalid-host","host.surface.alpha must be a boolean","host.surface.alpha")),t.surface.clearPolicy!==void 0&&(Array.isArray(t.surface.clearPolicy)?t.surface.clearPolicy:[t.surface.clearPolicy]).forEach((c,m)=>{(typeof c!="string"||!Md.has(c))&&r.push(ae("invalid-clear-policy",`invalid clear policy "${String(c)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${m}]`:"host.surface.clearPolicy"))})):r.push(ae("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!Xe(t.layers))r.push(ae("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...Qe(t.layers,Od,"host.layers")),t.layers.compositor!==void 0&&typeof t.layers.compositor!="boolean"&&r.push(ae("invalid-host","host.layers.compositor must be a boolean","host.layers.compositor")),t.layers.blend!==void 0){let a=rt(t.layers.blend,"host.layers.blend",Nd,"invalid-blend","blend mode");a.ok||r.push(...a.errors)}}let s;if(t.modules!==void 0)if(!Xe(t.modules))r.push(ae("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...Qe(t.modules,Dd,"host.modules")),t.modules.refs!==void 0){let a=Bd(t.modules.refs,"host.modules.refs");a.ok?s=a.values:r.push(...a.errors)}else s=[];if(n.ok&&n.manifest.surface){let a=n.manifest.surface,c=t.surface;a.alpha===!0&&c?.alpha!==!0&&r.push(ae("unsupported-surface","host does not provide an alpha-capable surface","surface.alpha")),a.clearPolicy&&((Array.isArray(c?.clearPolicy)?c.clearPolicy:c?.clearPolicy?[c.clearPolicy]:[]).includes(a.clearPolicy)||r.push(ae("unsupported-surface",`host does not provide clear policy "${a.clearPolicy}"`,"surface.clearPolicy")))}if(n.ok&&n.manifest.layers){let a=n.manifest.layers,c=t.layers;if(a.compositor===!0&&c?.compositor!==!0&&r.push(ae("unsupported-layer","host does not provide a compositor","layers.compositor")),a.blend){let m=new Set(c?.blend??[]);a.blend.forEach((u,E)=>{m.has(u)||r.push(ae("unsupported-layer",`host does not provide blend mode "${u}"`,`layers.blend[${E}]`))})}}if(n.ok&&n.manifest.modules?.refs){let a=t.modules===void 0?[]:s??[];n.manifest.modules.refs.forEach((c,m)=>{a.some(u=>u.id===c.id&&u.version===c.version)||r.push(ae("unsupported-module",`host does not provide required module "${c.id}@${c.version}"`,`modules.refs[${m}]`))})}if(n.ok&&n.manifest.grants&&n.manifest.grants.length>0){let a=t.grants===void 0?{ok:!0,values:[]}:rt(t.grants,"host.grants",Ko,"invalid-grant","grant");if(!a.ok)r.push(...a.errors);else{let c=new Set(a.values);n.manifest.grants.forEach((m,u)=>{c.has(m)||r.push(ae("ungranted-capability",`host does not grant "${m}"`,`grants[${u}]`))})}}else if(t.grants!==void 0){let a=rt(t.grants,"host.grants",Ko,"invalid-grant","grant");a.ok||r.push(...a.errors)}if(t.kinds!==void 0){let a=rt(t.kinds,"host.kinds",Ld,"invalid-kind","cart kind");if(!a.ok)r.push(...a.errors);else if(n.ok){let c=n.manifest.kind??"render";a.values.includes(c)||r.push(ae("unsupported-kind",`host does not support cart kind "${c}"`,"kind"))}}return r.length>0?{ok:!1,errors:r}:{ok:!0}}var yf=1,hf=1e-6,bf=.5,vf=["normalized","asset","canvas","css","viewport"],Ef=["center","top-left","top-right","bottom-left","bottom-right","top","bottom","left","right"],Sf={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 kf(e){let t=Sf[e];return{x:t.x,y:t.y}}function jo(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:s}=e,a=i/n,c=o/r,m=s==="contain"?Math.min(a,c):Math.max(a,c),u=n*m,E=r*m,v=(i-u)/2,R=(o-E)/2,x=zr(-v/u),h=zr(-R/E),P=zr(i/u),V=zr(o/E);return{mode:s,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:m,offsetX:v,offsetY:R,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x,y:h,width:Math.min(P,1-x),height:Math.min(V,1-h)}}}function Rf(e,t){return{x:e.x*t.contentWidth,y:e.y*t.contentHeight}}function If(e,t){return{x:e.x/t.contentWidth,y:e.y/t.contentHeight}}function Uo(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function Fn(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function $d(e,t){return{x:e.x*t.devicePixelRatio,y:e.y*t.devicePixelRatio}}function Hd(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function Cf(e,t){return $d(Uo(e,t),t)}function qd(e,t){return Fn(Hd(e,t),t)}function Jo(e,t){let n=Uo({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 Wd(e,t){let n=Jo(e,t),r=t.devicePixelRatio;return{x:n.x*r,y:n.y*r,width:n.width*r,height:n.height*r}}function Yo(e,t,n,r){let o=(r?.space??"canvas")==="css"?Fn(e,t):qd(e,t);for(let s of n.regions)if($n(s,o))return s}function zo(e,t){let n=Bn(e);if(n)return Jo(n,t)}function Af(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 Pf(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),Fd(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=Bn(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&&!_f(o)&&t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} is outside 0\u20131`}),i.polygon){for(let s of i.polygon)if(!Fd(s)){t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} has a vertex outside 0\u20131`});break}}}for(let i=0;i<e.regions.length;i+=1){let o=e.regions[i],s=Bn(o);if(s)for(let a=i+1;a<e.regions.length;a+=1){let c=e.regions[a],m=Bn(c);m&&Of(s,m)&&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 Tf(e,t,n,r=[]){let i=[],o=(s,a,c)=>{i.push({method:s,id:c,args:a})};for(let s of n.regions){let a=Bn(s);if(!a)continue;let c=Wd(a,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],s.id),e.strokeRect&&e.strokeRect(c.x,c.y,c.width,c.height),o("strokeRect",[c.x,c.y,c.width,c.height],s.id),e.font="12px sans-serif";let m=s.id;e.fillText&&e.fillText(m,c.x+4,c.y+14),o("fillText",[m,c.x+4,c.y+14],s.id)}for(let s of r){let a=s.id?`${s.id}: ${s.code}`:s.code,c=16+i.filter(m=>m.method==="fillText").length*14;e.fillText&&e.fillText(a,8,c),o("fillText",[a,8,c],s.id)}return i}function wf(e){return JSON.stringify(e)}function xf(e){return JSON.parse(e)}function zr(e){return e<=0?0:e>=1?1:e}function Fd(e){return e.x>=0&&e.x<=1&&e.y>=0&&e.y<=1}function _f(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 Of(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 Bn(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 $n(e,t){return e.polygon&&e.polygon.length>=3?Df(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 Df(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r,r+=1){let o=t[r],s=t[i];o.y>e.y!=s.y>e.y&&e.x<(s.x-o.x)*(e.y-o.y)/(s.y-o.y)+o.x&&(n=!n)}return n}var Gd=320,jd=180,Nf=1024,Mf="Runtime group has been destroyed";function Lf(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 Vf(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 Ud(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 Kd(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Bf(e){let t=new Set([nt,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=Ud(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function Xo(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let p of e.participants){if(!p.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(p.id))throw new Error(`createRuntimeGroup: duplicate participant id "${p.id}"`);t.add(p.id)}let n=e.origin??0,r=e.width??Gd,i=e.height??jd,o=e.maxTrace??Nf,s=[...e.participants].sort((p,S)=>p.id.localeCompare(S.id)),a=[],c=new Map,m=0,u=e.createId??e.router?.createId??(()=>`evt-${++m}`),E=e.now??e.router?.now??(()=>{let p=a[0];if(!p)return n;try{return p.cart.getClock().now}catch{return n}}),v=_o({...e.router,createId:u,now:E,validate:e.validate??e.router?.validate}),R=[],x=!1,h=!1,P=()=>{},V=p=>S=>{p.events.push(S),p.userOnEvent?.(S)},j=()=>{if(h)throw new Error(Mf)},T=()=>{P();for(let p of a){try{v.detach(p.id)}catch{}try{p.runtime.destroy()}catch{}p.ownsContainer&&p.container.remove()}a.length=0,c.clear()};try{for(let p of s){let S=p.width??r,d=p.height??i,l=!p.container,g=p.container??Vf(S,d),k=Po({container:g,seed:p.seed??Lf(p.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?p.id:void 0,kind:p.kind??"render"}),N={id:p.id,kind:p.kind??"render",cartDef:p.cart,initialState:p.initialState,gameManager:p.gameManager,userOnEvent:p.onEvent,runtime:k,container:g,ownsContainer:l,cart:void 0,events:[],errors:[],suspended:!1};k.onError=(A,B)=>{N.errors.push({error:A,info:B})},v.attach(p.id,k.hostChannel,Ud(p)),N.cart=k.mount(p.cart,{initialState:p.initialState,gameManager:p.gameManager,onEvent:V(N)}),a.push(N),c.set(N.id,N)}P=v.subscribe(Bf(s),p=>{for(R.push(Kd(p));R.length>o;)R.shift()})}catch(p){throw T(),p}let _=p=>({id:p.id,kind:p.kind,runtime:p.runtime,container:p.container,get events(){return p.events.slice()},get errors(){return p.errors.slice()},get cart(){return p.cart}});return{router:v,origin:n,get paused(){return x},get audioBroker(){return e.audioBroker},participant(p){j();let S=c.get(p);if(!S)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);return _(S)},async step(p=1){if(j(),x)return;let S=Math.max(0,Math.floor(p));for(let d=0;d<S;d++){v.turn();for(let l of a)if(!l.suspended)try{await l.cart.step(1)}catch(g){l.errors.push({error:g,info:{phase:"update",consecutive:l.errors.length+1,stopped:!1}})}}},pause(){j(),x=!0;for(let p of a)p.cart.pause()},resume(){j(),x=!1;for(let p of a)p.cart.resume()},reset(){j(),R.length=0;for(let p of a)p.events.length=0,p.errors.length=0,p.suspended=!1,p.cart=p.runtime.mount(p.cartDef,{initialState:p.initialState,gameManager:p.gameManager,onEvent:V(p)});v.turn()},resize(p,S){j();let d=Math.max(1,p|0),l=Math.max(1,S|0);for(let g of a){Object.defineProperty(g.container,"clientWidth",{value:d,configurable:!0}),Object.defineProperty(g.container,"clientHeight",{value:l,configurable:!0});let k=g.cart.canvas;k&&(k.width=d,k.height=l)}},detach(p){j();let S=c.get(p);if(!S)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);try{v.detach(S.id)}catch{}try{S.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(S.id),S.ownsContainer&&S.container.remove();let d=a.indexOf(S);d>=0&&a.splice(d,1),c.delete(p)},suspendParticipant(p){j();let S=c.get(p);if(!S)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);S.suspended=!0,S.cart.pause()},resumeParticipant(p){j();let S=c.get(p);if(!S)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);S.suspended=!1,x||S.cart.resume()},isParticipantSuspended(p){j();let S=c.get(p);if(!S)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);return S.suspended},dispatch(p,S){j();let d=c.get(p);if(!d)throw new Error(`createRuntimeGroup: unknown participant "${p}"`);d.cart.dispatch(S)},publish(p,S){return j(),v.publish(p,S)},inspectParticipants(){j();let p=new Map(a.map(S=>[S.id,S.kind]));return v.inspectParticipants().map(S=>({...S,kind:p.get(S.id)??"render"}))},async inspect(){j();let p={},S={},d=new Map(v.inspectParticipants().map(k=>[k.id,k]));for(let k of a){let N=await k.cart.getReplayMetadata(),A=k.cart.getClock();S[k.id]=A;let B=d.get(k.id);p[k.id]={state:N.state,events:k.events.slice(),errors:k.errors.slice(),kind:k.kind,clock:A,emit:B?.emit.slice()??[],subscribe:B?.subscribe.slice()??[],authoritative:B?.authoritative===!0,suspended:k.suspended}}let l=R.map(k=>Kd(k)),g=a.filter(k=>k.suspended).map(k=>k.id).sort();return{participants:p,trace:l,diagnostics:{paused:x,participantIds:a.map(k=>k.id),suspendedIds:g,clocks:S,rejections:l.filter(k=>k.type===nt).map(k=>k.payload)}}},destroy(){if(!h){h=!0,x=!1;try{T()}finally{R.length=0}}}}}var Ff=["invalid-ref","unknown-module","version-mismatch","not-allowlisted","load-failed","invoke-failed","timeout","rate-limited","destroyed"],Jd="executable module host has been destroyed";var $f=/^[a-z0-9][a-z0-9.-]*$/i,Hf=/^[a-z0-9][a-z0-9-]*$/i;function Bt(e){return{id:e.id,version:e.version}}function Qo(e){return`${e.id}@${e.version}`}function Hn(e){return typeof e=="string"&&e.length>0&&$f.test(e)}function qf(e){if(typeof e!="string"||e.length===0)return!1;let t=e.split(".");return t.some(n=>n.length===0)?!1:t.every(n=>n==="*"||Hf.test(n))}function Xd(e,t){if(e===t)return!0;if(!e.includes("*"))return!1;let n=e.split("."),r=t.split(".");if(n.length!==r.length)return!1;for(let i=0;i<n.length;i++)if(n[i]!=="*"&&n[i]!==r[i])return!1;return!0}function Wf(e,t){return t.some(n=>n.version===e.version&&Xd(n.id,e.id))}function qn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Kf(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function Yd(e){return e instanceof Error&&e.message?e.message:String(e)}function mn(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>mn(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=mn(e[n]);return Object.freeze(t)}function zd(e){if(!qn(e))return;let t=e.id,n=e.version;if(!(!Hn(t)||!Hn(n)))return{id:t,version:n}}function Gf(e){if(e===void 0)return{};if(!qn(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 Zo(e){if(!qn(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((f,p)=>{if(!qn(f))throw new Error(`createExecutableModuleHost: allowlist[${p}] must be an object`);if(!qf(f.id))throw new Error(`createExecutableModuleHost: allowlist[${p}].id is not a valid id or pattern`);if(!Hn(f.version)||f.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${p}].version must be an exact version`);return{id:f.id,version:f.version}}),n=new Map,r=new Map;for(let[f,p]of e.modules.entries()){if(!qn(p))throw new Error(`createExecutableModuleHost: modules[${f}] must be an object`);if(!Hn(p.id))throw new Error(`createExecutableModuleHost: modules[${f}].id is invalid`);if(!Hn(p.version))throw new Error(`createExecutableModuleHost: modules[${f}].version is invalid`);if(typeof p.create!="function")throw new Error(`createExecutableModuleHost: modules[${f}].create must be a function`);let S=`${p.id}@${p.version}`;if(n.has(S))throw new Error(`createExecutableModuleHost: duplicate module ${S}`);n.set(S,{id:p.id,version:p.version,create:p.create,capabilities:p.capabilities});let d=r.get(p.id)??[];d.push(p.version),r.set(p.id,d)}let i=Gf(e.limits),o=e.capabilities,s=new Map,a=new Set,c=[],m=0,u=0,E=!1;function v(f,p,S){let d=S?{code:f,detail:p,ref:Bt(S)}:{code:f,detail:p};return c.push(d),c.length>256&&c.shift(),d}function R(f,p,S){return{ok:!1,error:v(f,p,S)}}function x(f){if(E){let k=zd(f);return R("destroyed",Jd,k)}let p=zd(f);if(!p)return R("invalid-ref","module ref requires exact id and version");let S=n.get(Qo(p)),d=r.has(p.id),l=Wf(p,t),g=t.some(k=>Xd(k.id,p.id)&&k.version!==p.version);return l?S?{ok:!0,ref:p,registration:S}:d?R("version-mismatch",`no factory for ${p.id}@${p.version}`,p):R("unknown-module",`unknown module "${p.id}"`,p):g||d&&!S?R("version-mismatch",`no allowlisted factory for ${p.id}@${p.version}`,p):!S&&!d?R("unknown-module",`unknown module "${p.id}"`,p):R("not-allowlisted",`${p.id}@${p.version} is not allowlisted`,p)}function h(f,p){let S=Qo(f);if(s.has(S))return{ok:!0,ref:Bt(f)};let d=mn({...o??{},...p.capabilities??{}});try{let l=p.create(d);return!l||typeof l.invoke!="function"?R("load-failed",`factory for ${f.id}@${f.version} did not return an invoke() module`,f):(s.set(S,{ref:Bt(f),instance:l}),{ok:!0,ref:Bt(f)})}catch(l){return R("load-failed",Yd(l),f)}}function P(f){let p=x(f);return p.ok?h(p.ref,p.registration):p}function V(f,p){let S=x(f);if(!S.ok)return Promise.resolve(S);if(i.maxInvokesPerTurn!==void 0&&u>=i.maxInvokesPerTurn)return Promise.resolve(R("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,S.ref));u+=1;let d=h(S.ref,S.registration);if(!d.ok)return Promise.resolve(d);let l=s.get(Qo(S.ref));if(!l)return Promise.resolve(R("load-failed","module instance was not retained",S.ref));let g=new AbortController;a.add(g);let k=Date.now(),N=i.maxInvokeMs,A;N!==void 0&&(A=setTimeout(()=>g.abort(),N));let B=D=>(A!==void 0&&clearTimeout(A),a.delete(g),E?R("destroyed",Jd,S.ref):D),W=D=>g.signal.aborted&&N!==void 0?R("timeout",`invoke exceeded ${N}ms`,S.ref):R("invoke-failed",Yd(D),S.ref);try{let D=l.instance.invoke(p,{signal:g.signal,turn:m});return Kf(D)?new Promise(C=>{let w=!1,M=F=>{w||(w=!0,C(B(F)))};if(N!==void 0){let F=A;F!==void 0&&clearTimeout(F),A=setTimeout(()=>{g.abort(),M(R("timeout",`invoke exceeded ${N}ms`,S.ref))},Math.max(0,N-(Date.now()-k)))}Promise.resolve(D).then(F=>M({ok:!0,value:F}),F=>M(W(F)))}):N!==void 0&&Date.now()-k>=N?(g.abort(),Promise.resolve(B(R("timeout",`invoke exceeded ${N}ms`,S.ref)))):Promise.resolve(B({ok:!0,value:D}))}catch(D){return Promise.resolve(B(W(D)))}}function j(){E||(m+=1,u=0)}function T(){return{allowlist:t.map(Bt),registered:[...n.values()].map(f=>({id:f.id,version:f.version})),loaded:[...s.values()].map(f=>Bt(f.ref)),turn:m,invokesThisTurn:u,diagnostics:c.map(f=>f.ref?{...f,ref:Bt(f.ref)}:{...f})}}function _(){if(!E){E=!0;for(let f of a)f.abort();a.clear();for(let f of s.values())try{f.instance.destroy?.()}catch{}s.clear(),n.clear(),r.clear(),t.length=0}}return{load:P,invoke:V,beginTurn:j,inspect:T,destroy:_}}var Xr=1,Qr="hmac-sha256",wt=1,ns=fn,jf=["invalid-json","invalid-manifest","invalid-version","invalid-signature","unknown-publisher","unknown-key","undeclared-asset","hash-mismatch","unsigned-bytes","capability-denied","destroyed","load-failed"],Zr=class extends Error{constructor(n,r){super(`${r} requires grant "${n}"`);this.code="capability-denied";this.name="RemoteCartCapabilityError",this.grant=n}};function fe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function $t(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Be(e){return typeof e=="string"&&e.length>0}var es=new Set(ns),Qd=new Set(["image","audio","font","spritesheet"]),Uf=new Set(["version","id","cartVersion","publisher","assets","requestedGrants","module","capabilities"]),Jf=new Set(["id","kind","url","hash","alg"]),Yf=new Set(["alg","keyId","mac"]),Zd=/^[a-z0-9][a-z0-9.-]*$/i,zf=256;function rc(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}var Xf=/^[0-9a-f]+$/i;function ec(e){if(e.length%2!==0||e.length===0||!Xf.test(e))return;let t=new Uint8Array(e.length/2);for(let n=0;n<t.length;n++)t[n]=Number.parseInt(e.slice(n*2,n*2+2),16);return t}function Qf(e,t){let n=ec(e),r=ec(t),i=n??new Uint8Array(32),o=r??new Uint8Array(32),s=Math.max(i.length,o.length),a=n&&r&&n.length===r.length?0:1;for(let c=0;c<s;c++)a|=(i[c]??0)^(o[c]??0);return a===0}async function Wn(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=await crypto.subtle.digest("SHA-256",t);return rc(new Uint8Array(n))}async function rs(e,t){let n=await crypto.subtle.importKey("raw",new TextEncoder().encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),r=await crypto.subtle.sign("HMAC",n,new TextEncoder().encode(t));return rc(new Uint8Array(r))}function ts(e){if(Array.isArray(e))return e.map(ts);if(!$t(e))return e;let t={};for(let n of Object.keys(e).sort())t[n]=ts(e[n]);return t}function is(e){return JSON.stringify(ts(e))}function ei(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(fe("invalid-manifest",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function Zf(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function ic(e,t){if(!Array.isArray(e))return{ok:!1,errors:[fe("invalid-manifest",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;typeof i!="string"||!es.has(i)?n.push(fe("invalid-manifest",`invalid grant "${String(i)}"`,s)):r.push(i)}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:Zf(r)}}function em(e){if(!Array.isArray(e))return{ok:!1,errors:[fe("invalid-manifest","assets must be an array","assets")]};let t=[],n=[],r=new Set;return e.forEach((i,o)=>{let s=`assets[${o}]`;if(!$t(i)){t.push(fe("invalid-manifest","asset must be an object",s));return}t.push(...ei(i,Jf,s)),Be(i.id)?r.has(i.id)?t.push(fe("invalid-manifest",`duplicate asset id "${i.id}"`,`${s}.id`)):r.add(i.id):t.push(fe("invalid-manifest","asset id is required",`${s}.id`)),(typeof i.kind!="string"||!Qd.has(i.kind))&&t.push(fe("invalid-manifest",`invalid asset kind "${String(i.kind)}"`,`${s}.kind`)),Be(i.url)||t.push(fe("invalid-manifest","asset url is required",`${s}.url`)),Be(i.hash)||t.push(fe("unsigned-bytes","asset hash is required",`${s}.hash`)),i.alg!=="sha256"&&t.push(fe("invalid-manifest","asset alg must be sha256",`${s}.alg`)),Be(i.id)&&typeof i.kind=="string"&&Qd.has(i.kind)&&Be(i.url)&&Be(i.hash)&&i.alg==="sha256"&&n.push({id:i.id,kind:i.kind,url:i.url,hash:i.hash,alg:"sha256"})}),t.length>0?{ok:!1,errors:t}:{ok:!0,values:n}}function tm(e){return e===void 0?{ok:!0}:$t(e)?!Be(e.id)||!Zd.test(e.id)?{ok:!1,errors:[fe("invalid-manifest","module.id is invalid","module.id")]}:!Be(e.version)||!Zd.test(e.version)?{ok:!1,errors:[fe("invalid-manifest","module.version is invalid","module.version")]}:{ok:!0,value:{id:e.id,version:e.version}}:{ok:!1,errors:[fe("invalid-manifest","module must be an object","module")]}}function oc(e){if(!$t(e))return{ok:!1,errors:[fe("invalid-manifest","remote cart body must be a JSON object")]};let t=ei(e,Uf,"");e.version!==void 0&&e.version!==Xr&&t.push(fe("invalid-version",`remote cart manifest version must be ${Xr}`,"version")),Be(e.id)||t.push(fe("invalid-manifest","id is required","id")),Be(e.cartVersion)||t.push(fe("invalid-manifest","cartVersion is required","cartVersion")),Be(e.publisher)||t.push(fe("unknown-publisher","publisher is required","publisher"));let n=em(e.assets);n.ok||t.push(...n.errors);let r=ic(e.requestedGrants,"requestedGrants");r.ok||t.push(...r.errors);let i=tm(e.module);i.ok||t.push(...i.errors);let o;if(e.capabilities!==void 0){let a=Ln(e.capabilities);if(a.ok)o=a.manifest;else for(let c of a.errors)t.push(fe(c.code,c.detail,c.path?`capabilities.${c.path}`:"capabilities"))}if(t.length>0)return{ok:!1,errors:t};let s={version:Xr,id:e.id,cartVersion:e.cartVersion,publisher:e.publisher,assets:n.ok?n.values:[],requestedGrants:r.ok?r.values:[]};return i.ok&&i.value&&(s.module=i.value),o&&(s.capabilities=o),{ok:!0,body:s}}function nm(e){if(!$t(e))return{ok:!1,errors:[fe("invalid-signature","signature must be an object","signature")]};let t=ei(e,Yf,"signature");return e.alg!==Qr&&t.push(fe("invalid-signature","signature.alg must be hmac-sha256","signature.alg")),Be(e.keyId)||t.push(fe("unknown-key","signature.keyId is required","signature.keyId")),(!Be(e.mac)||!/^[0-9a-f]+$/i.test(e.mac))&&t.push(fe("invalid-signature","signature.mac must be hex","signature.mac")),t.length>0?{ok:!1,errors:t}:{ok:!0,signature:{alg:Qr,keyId:e.keyId,mac:e.mac.toLowerCase()}}}function ti(e){if(!$t(e))return{ok:!1,errors:[fe("invalid-manifest","signed remote cart must be a JSON object")]};let t=oc(e.body),n=nm(e.signature),r=[];t.ok||r.push(...t.errors),n.ok||r.push(...n.errors);let i=ei(e,new Set(["body","signature"]),"");return r.push(...i),r.length>0?{ok:!1,errors:r}:{ok:!0,manifest:{body:t.ok?t.body:void 0,signature:n.ok?n.signature:void 0}}}function sc(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[fe("invalid-json","remote cart JSON is not parseable")]}}return ti(t)}async function rm(e,t,n){let r=oc(e);if(!r.ok)return r;if(!Be(t)||!Be(n))return{ok:!1,errors:[fe("unknown-key","signing key id and secret are required")]};let i=await rs(t,is(r.body));return{ok:!0,manifest:{body:r.body,signature:{alg:Qr,keyId:n,mac:i}}}}async function Kn(e,t,n){let r=ti(e);if(!r.ok)return r;let i=t[r.manifest.signature.keyId];if(!Be(i))return{ok:!1,errors:[fe("unknown-key",`unknown signature key "${r.manifest.signature.keyId}"`,"signature.keyId")]};let o=await rs(i,is(r.manifest.body));return Qf(o,r.manifest.signature.mac)?n!==void 0&&r.manifest.body.cartVersion!==n?{ok:!1,errors:[fe("invalid-version",`cartVersion ${r.manifest.body.cartVersion} does not match ${n}`,"body.cartVersion")]}:{ok:!0,manifest:r.manifest}:{ok:!1,errors:[fe("invalid-signature","HMAC does not match canonical body","signature.mac")]}}function im(e){let t=new Map;for(let[n,r]of Object.entries(e)){let i=sc(r);i.ok&&t.set(n,i.manifest)}return{get(n){return t.get(n)}}}async function om(e){let t;if(e.source.kind==="registry"){let n=e.registry?.get(e.source.id);if(!n)return{ok:!1,errors:[fe("invalid-manifest",`unknown registry id "${e.source.id}"`)]};t=n}else{if(typeof e.fetch!="function")return{ok:!1,errors:[fe("load-failed","url loads require a fetch adapter")]};try{t=await e.fetch(e.source.url)}catch(n){return{ok:!1,errors:[fe("load-failed",n instanceof Error?n.message:String(n))]}}}return Kn(t,e.keys,e.expectedVersion)}function os(e){return[...e.body.requestedGrants]}function gn(e){let t=new Set;if(e)for(let o of e)es.has(o)&&t.add(o);function n(){return{schemaVersion:wt,grants:ns.filter(o=>t.has(o))}}function r(o){let s=o;if(typeof o=="string")try{s=JSON.parse(o)}catch{return{ok:!1,errors:[fe("invalid-json","grant snapshot JSON is not parseable")]}}if(!$t(s))return{ok:!1,errors:[fe("invalid-manifest","grant snapshot must be an object")]};if(s.schemaVersion!==wt)return{ok:!1,errors:[fe("invalid-version",`grant snapshot schema must be ${wt}`,"schemaVersion")]};let a=ic(s.grants,"grants");if(!a.ok)return a;t.clear();for(let c of a.values)t.add(c);return{ok:!0,grants:n().grants}}function i(o,s){return es.has(o)?(s?t.add(o):t.delete(o),{ok:!0,grants:n().grants}):{ok:!1,errors:[fe("invalid-manifest",`invalid grant "${String(o)}"`)]}}return{grant:o=>i(o,!0),revoke:o=>i(o,!1),has:o=>t.has(o),list:()=>n().grants,inspect:n,restore:r}}function Ft(e,t){return e.push(t),e.length>zf&&e.shift(),t}function tc(e){return e.code==="undeclared"?fe("undeclared-asset",e.message,e.ref):e.code==="hash-mismatch"?fe("hash-mismatch",e.message,e.ref):e.code==="unsigned"?fe("unsigned-bytes",e.message,e.ref):fe("load-failed",e.message,e.ref)}function nc(e,t,n,r){let i=(s,a)=>{if(!e.has(s))throw new Zr(s,a)},o={grants:e.list(),network:{fetch(s){if(i("network","network.fetch"),!t.has(s))return Promise.reject(Object.assign(new Error(`undeclared network url "${s}"`),{code:"undeclared-asset"}));let a=n[s];return a?Promise.resolve(a.slice()):Promise.reject(Object.assign(new Error(`no signed bytes for "${s}"`),{code:"unsigned-bytes"}))}},storage:{getItem(s){return i("persistence","storage.getItem"),r.get(s)??null},setItem(s,a){i("persistence","storage.setItem"),r.set(s,a)},removeItem(s){i("persistence","storage.removeItem"),r.delete(s)},clear(){i("persistence","storage.clear"),r.clear()}},audio:{request(){return i("audio","audio.request"),{ok:!0}}},controller:{request(){return i("controller","controller.request"),{ok:!0}}},fullscreen:{request(){return i("fullscreen","fullscreen.request"),{ok:!0}}}};return mn(o)}function ac(e,t){return{source:`remote-cart:${e.body.id}`,publisher:e.body.publisher,version:e.body.cartVersion,signature:{id:e.signature.keyId,alg:e.signature.alg},grants:[...t]}}function sm(e){let t=ti(e.manifest);if(!t.ok)throw new Error(t.errors.map(V=>V.detail).join("; "));let n=t.manifest,r=gn(e.grants),i=[],o=new Map,s=new Set(n.body.assets.map(V=>V.url)),a={};for(let V of n.body.assets)a[V.id]={url:V.url,hash:V.hash,alg:V.alg};let c=!1,m=!1,u=!1,E;function v(){return Ft(i,fe("destroyed","remote cart sandbox has been destroyed"))}async function R(){if(u)return{ok:!0};let V=await Kn(n,e.keys);if(!V.ok){for(let j of V.errors)Ft(i,j);return{ok:!1,errors:V.errors}}return u=!0,{ok:!0}}async function x(){if(m)return{ok:!1,errors:[v()]};let V=await R();if(!V.ok)return V;if(n.body.capabilities){let f=n.body.capabilities,p=Vn(f,{contractVersion:Math.max(1,f.runtime.minContractVersion),features:[...f.runtime.features],integrations:[...f.integrations],grants:r.list()});if(!p.ok){let S=p.errors.map(d=>fe(d.code,d.detail,d.path));for(let d of S)Ft(i,d);return{ok:!1,errors:S}}}let j=Nn({declared:a,fetchBytes:async f=>e.bytesByUrl[f],hashBytes:Wn}),T=Vt({resolver:j,emitEvents:!1,wallClockTimeout:!1}),_=n.body.assets.map(f=>({id:f.id,ref:f.id,type:f.kind,integrity:`sha256-${f.hash}`,provenance:{publisher:n.body.publisher,version:n.body.cartVersion}}));try{let f=await T.preload(_);if(f.failed>0)return{ok:!1,errors:f.failures.map(S=>Ft(i,tc(S)))};if(c=!0,n.body.module&&e.modules){E=Zo({allowlist:[n.body.module],modules:e.modules,capabilities:nc(r,s,e.bytesByUrl,o)});let p=E.load(n.body.module);if(!p.ok){let S=fe("load-failed",p.error.detail,`${p.error.ref?.id}@${p.error.ref?.version}`);return Ft(i,S),{ok:!1,errors:[S]}}}return{ok:!0,snapshot:f}}catch(f){return tn(f)?{ok:!1,errors:[Ft(i,tc(f))]}:{ok:!1,errors:[Ft(i,fe("load-failed",f instanceof Error?f.message:String(f)))]}}finally{T.dispose()}}function h(){return m?{ok:!1,errors:[v()]}:u?nc(r,s,e.bytesByUrl,o):{ok:!1,errors:[fe("invalid-signature","verify the manifest HMAC via loadAssets before using capabilities")]}}function P(){return{id:n.body.id,cartVersion:n.body.cartVersion,publisher:n.body.publisher,signature:{id:n.signature.keyId,alg:n.signature.alg},requestedGrants:[...n.body.requestedGrants],grants:r.list(),assets:n.body.assets.map(V=>({id:V.id,url:V.url,hash:V.hash})),loaded:c,destroyed:m,diagnostics:i.map(V=>({...V}))}}return{listRequestedGrants:()=>[...n.body.requestedGrants],grants:r,loadAssets:x,capabilities:h,inspect:P,snapshotProvenance:()=>ac(n,r.list()),destroy(){m||(m=!0,E?.destroy(),o.clear())}}}var Gn=1,jn=1,cc=8,uc=["cabinet","painting","dream","wormhole","book","nested-world"],lc=["completed","aborted"],cs=["audio","controller","fullscreen"],xt="portal.lifecycle.entered",Un="portal.lifecycle.exited",Jn="portal.lifecycle.aborted",am=[xt,Un,Jn],dm=new Set(uc),cm=new Set(lc),um=new Set(cs),lm=new Set(fn),pm="Portal lifecycle has been destroyed";function ge(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function ss(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ht(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function dc(e){return typeof e=="string"&&dm.has(e)}function fm(e){return um.has(e)}function ds(e){return[...e].sort()}function pc(e){return ds([...e.childGrantsBefore,...e.transferred,...e.extraChildGrants])}function as(e){return{id:e.id,parentId:e.parentId,childId:e.childId,metaphor:e.metaphor,seed:e.seed,clock:e.clock,parentState:Ht(e.parentState),parentGrants:[...e.parentGrants],childGrants:pc(e),childGrantsBefore:[...e.childGrantsBefore],extraChildGrants:[...e.extraChildGrants],persistence:Ht(e.persistence),transferred:[...e.transferred],enterCue:e.enterCue,exitCue:e.exitCue}}function mm(e){return{enter:t=>e.enter({...t,metaphor:"cabinet"}),exit:e.exit,abort:e.abort}}function gm(e){return{enter:t=>e.enter({...t,metaphor:"painting"}),exit:e.exit,abort:e.abort}}function ym(e={}){let t=e.group,n=e.audioBroker??t?.audioBroker,r=e.maxDepth??cc,i=new Map((e.declarations??[]).map(C=>[C.id,C])),o=new Map;if(e.grants)for(let[C,w]of Object.entries(e.grants))o.set(C,w);let s=0,a=e.createId??(()=>`portal-${++s}`),c=[],m=[],u=null,E=!1,v=e.rootId??null,R=()=>{if(E)throw new Error(pm)},x=C=>{let w=o.get(C);return w||(w=gn(),o.set(C,w)),w},h=()=>c.length===0?v:c[c.length-1].childId,P=(C,w)=>{if(m.push(C),!t)return;let M={type:C,kind:"state",payload:w};try{t.publish(M)}catch{}},V=C=>{if(!t)return null;try{return Ht(t.participant(C).cart.getCartState())}catch{return null}},j=()=>{if(!t)return;let C=new Set;for(let M of c)C.add(M.parentId);let w=new Set(t.inspectParticipants().map(M=>M.id));for(let M of w)C.has(M)?t.isParticipantSuspended(M)||t.suspendParticipant(M):t.isParticipantSuspended(M)&&t.resumeParticipant(M)},T=(C,w,M)=>{let F=x(C),G=x(w),J=F.list(),$=G.list(),X=[];for(let y of cs)F.has(y)&&(F.revoke(y),G.grant(y),X.push(y));if(M)for(let y of M)G.grant(y);return _(C,w,X,M??[]),{transferred:X,parentBefore:J,childBefore:$}},_=(C,w,M,F)=>{n&&(M.includes("audio")||F.includes("audio"))&&(n.revoke(C),n.authorize(w))},f=C=>{for(let w of C)_(w.parentId,w.childId,w.transferred,w.extraChildGrants)},p=()=>n?n.inspect().authorized.slice():[],S=C=>{if(!n)return;let w=new Set(C);for(let M of n.inspect().authorized)w.has(M)||n.revoke(M);for(let M of C)n.authorize(M)},d=()=>t?t.inspectParticipants().map(C=>C.id).filter(C=>t.isParticipantSuspended(C)).sort():[],l=C=>{if(!t)return;let w=new Set(C);for(let M of t.inspectParticipants()){let F=t.isParticipantSuspended(M.id);w.has(M.id)&&!F&&t.suspendParticipant(M.id),!w.has(M.id)&&F&&t.resumeParticipant(M.id)}},g=C=>{let w=x(C.parentId),M=x(C.childId);for(let F of C.transferred)M.revoke(F),w.grant(F);for(let F of C.extraChildGrants)C.childGrantsBefore.includes(F)||M.revoke(F);n&&(C.transferred.includes("audio")||C.extraChildGrants.includes("audio"))&&(n.revoke(C.childId),n.authorize(C.parentId))},k=()=>{let C={};for(let[w,M]of o)C[w]=M.list();return{destroyed:E,activeId:E?null:h(),stack:c.map(as),lastOutcome:u,cues:[...m],grants:C}},N=(C,w)=>{if(R(),c.length===0)return{ok:!1,errors:[ge("empty-stack","no portal is open")]};let M=c[c.length-1],F={schemaVersion:jn,kind:C,payload:w},G=C==="aborted"?Jn:Un;return M.exitCue=G,g(M),c.pop(),u=F,j(),P(G,{parentId:M.parentId,childId:M.childId,metaphor:M.metaphor,kind:C}),{ok:!0,inspect:k(),outcome:F}},A=(C,w)=>C===null?{ok:!0,outcome:null}:ss(C)?C.schemaVersion!==jn?{ok:!1,errors:[ge("invalid-version",`outcome schema must be ${jn}`,`${w}.schemaVersion`)]}:typeof C.kind!="string"||!cm.has(C.kind)?{ok:!1,errors:[ge("invalid-snapshot","outcome.kind is required",`${w}.kind`)]}:{ok:!0,outcome:{schemaVersion:jn,kind:C.kind,payload:C.payload}}:{ok:!1,errors:[ge("invalid-snapshot","outcome must be an object or null",w)]},B=(C,w)=>{if(!Array.isArray(C))return{ok:!1,errors:[ge("invalid-snapshot","grants must be an array",w)]};let M=[];for(let F=0;F<C.length;F++){let G=C[F];if(typeof G!="string"||!lm.has(G))return{ok:!1,errors:[ge("invalid-snapshot",typeof G=="string"?`unknown grant "${G}"`:"grant must be a string",`${w}[${F}]`)]};M.push(G)}return{ok:!0,grants:M}},W=(C,w)=>{if(!ss(C))return{ok:!1,errors:[ge("invalid-snapshot","frame must be an object",w)]};if(typeof C.id!="string"||C.id.length===0)return{ok:!1,errors:[ge("invalid-snapshot","frame.id is required",`${w}.id`)]};if(typeof C.parentId!="string"||typeof C.childId!="string")return{ok:!1,errors:[ge("invalid-snapshot","parentId and childId are required",w)]};if(!dc(C.metaphor))return{ok:!1,errors:[ge("invalid-snapshot","unknown metaphor",`${w}.metaphor`)]};let M=B(C.parentGrants,`${w}.parentGrants`);if(!M.ok)return M;let F=B(C.childGrants,`${w}.childGrants`);if(!F.ok)return F;if(!Array.isArray(C.transferred))return{ok:!1,errors:[ge("invalid-snapshot","transferred must be an array",`${w}.transferred`)]};let G=[];for(let b=0;b<C.transferred.length;b++){let I=C.transferred[b];if(typeof I!="string"||!fm(I))return{ok:!1,errors:[ge("invalid-snapshot","invalid exclusive grant",`${w}.transferred[${b}]`)]};G.push(I)}if(C.enterCue!==xt)return{ok:!1,errors:[ge("invalid-snapshot","enterCue mismatch",`${w}.enterCue`)]};let J=C.exitCue;if(J!==null&&J!==Un&&J!==Jn)return{ok:!1,errors:[ge("invalid-snapshot","invalid exitCue",`${w}.exitCue`)]};if(C.seed!==null&&typeof C.seed!="string")return{ok:!1,errors:[ge("invalid-snapshot","seed must be string or null",`${w}.seed`)]};if(C.clock!==null&&typeof C.clock!="number")return{ok:!1,errors:[ge("invalid-snapshot","clock must be number or null",`${w}.clock`)]};let $=C.extraChildGrants===void 0?{ok:!0,grants:[]}:B(C.extraChildGrants,`${w}.extraChildGrants`);if(!$.ok)return $;let X=C.childGrantsBefore===void 0?{ok:!0,grants:F.grants}:B(C.childGrantsBefore,`${w}.childGrantsBefore`);if(!X.ok)return X;let y=C.childGrantsBefore===void 0?pc({childGrantsBefore:X.grants,transferred:G,extraChildGrants:$.grants}):F.grants;return{ok:!0,frame:{id:C.id,parentId:C.parentId,childId:C.childId,metaphor:C.metaphor,seed:C.seed,clock:C.clock,parentState:C.parentState,parentGrants:M.grants,childGrants:y,childGrantsBefore:X.grants,extraChildGrants:$.grants,persistence:C.persistence??null,transferred:G,enterCue:xt,exitCue:J}}},D=C=>{let w=C;if(typeof C=="string")try{w=JSON.parse(C)}catch{return{ok:!1,errors:[ge("invalid-json","portal snapshot JSON is not parseable")]}}if(!ss(w))return{ok:!1,errors:[ge("invalid-snapshot","snapshot must be an object")]};if(w.schemaVersion!==Gn)return{ok:!1,errors:[ge("invalid-version",`portal snapshot schema must be ${Gn}`,"schemaVersion")]};if(!Array.isArray(w.stack))return{ok:!1,errors:[ge("invalid-snapshot","stack must be an array","stack")]};let M=[];for(let $=0;$<w.stack.length;$++){let X=W(w.stack[$],`stack[${$}]`);if(!X.ok)return X;M.push(X.frame)}if(M.length>r)return{ok:!1,errors:[ge("max-depth",`stack exceeds maxDepth ${r}`,"stack")]};let F=A(w.lastOutcome,"lastOutcome");if(!F.ok)return F;if(w.activeId!==null&&typeof w.activeId!="string")return{ok:!1,errors:[ge("invalid-snapshot","activeId must be string or null","activeId")]};if(!Array.isArray(w.cues))return{ok:!1,errors:[ge("invalid-snapshot","cues must be an array","cues")]};let G=[];for(let $=0;$<w.cues.length;$++){let X=w.cues[$];if(X!==xt&&X!==Un&&X!==Jn)return{ok:!1,errors:[ge("invalid-snapshot","unknown cue",`cues[${$}]`)]};G.push(X)}let J=M.length===0?v:M[M.length-1].childId;return w.activeId!==J&&w.activeId!==null&&M.length>0&&w.activeId!==M[M.length-1].childId?{ok:!1,errors:[ge("invalid-snapshot","activeId must be the top child when the stack is non-empty","activeId")]}:{ok:!0,snapshot:{schemaVersion:Gn,activeId:w.activeId??J,stack:M,lastOutcome:F.outcome,cues:G}}};return{enter(C){R();let w=[];(!C.from||!C.to)&&w.push(ge("invalid-enter","from and to are required")),C.from===C.to&&w.push(ge("invalid-enter","cannot enter the same cart")),C.metaphor!==void 0&&!dc(C.metaphor)&&w.push(ge("invalid-enter","unknown metaphor","metaphor")),c.length>=r&&w.push(ge("max-depth",`portal stack is at maxDepth ${r}`));let M=h();M&&C.from!==M&&w.push(ge("stack-order",`enter must start from the active cart "${M}"`,"from"));let F=i.get(C.from);if(F&&!F.targets.includes(C.to)&&w.push(ge("undeclared-target",`"${C.from}" does not declare target "${C.to}"`,"to")),t){try{t.participant(C.from)}catch{w.push(ge("unknown-parent",`unknown parent "${C.from}"`,"from"))}try{t.participant(C.to)}catch{w.push(ge("unknown-child",`unknown child "${C.to}"`,"to"))}}if(w.length)return{ok:!1,errors:w};let G=C.state!==void 0?Ht(C.state):V(C.from),J=C.grants??[],{transferred:$,parentBefore:X,childBefore:y}=T(C.from,C.to,J),b={id:a(),parentId:C.from,childId:C.to,metaphor:C.metaphor??"nested-world",seed:C.seed??null,clock:C.clock??null,parentState:G,parentGrants:ds(X),childGrantsBefore:ds(y),transferred:$,extraChildGrants:[...J],persistence:C.persistence??null,enterCue:xt,exitCue:null};return c.push(b),j(),P(xt,{parentId:b.parentId,childId:b.childId,metaphor:b.metaphor,seed:b.seed}),{ok:!0,inspect:k()}},exit(C){return N("completed",C)},abort(C){return N("aborted",C)},stack(){return R(),c.map(as)},activeId(){return R(),h()},inspect(){return k()},snapshot(){return R(),{schemaVersion:Gn,activeId:h(),stack:c.map(as),lastOutcome:u,cues:[...m]}},restore(C){R();let w=D(C);if(!w.ok)return w;let M=w.snapshot;if(t){let G=[];for(let J=0;J<M.stack.length;J++){let $=M.stack[J];try{t.participant($.parentId)}catch{G.push(ge("unknown-parent",`unknown parent "${$.parentId}"`,`stack[${J}].parentId`))}try{t.participant($.childId)}catch{G.push(ge("unknown-child",`unknown child "${$.childId}"`,`stack[${J}].childId`))}}if(G.length)return{ok:!1,errors:G}}let F={stack:c.map(G=>({...G})),lastOutcome:u,cues:[...m],grants:new Map([...o].map(([G,J])=>[G,J.list()])),authorized:p(),suspended:d()};try{c.length=0;for(let G of M.stack)c.push({id:G.id,parentId:G.parentId,childId:G.childId,metaphor:G.metaphor,seed:G.seed,clock:G.clock,parentState:Ht(G.parentState),parentGrants:[...G.parentGrants],childGrantsBefore:[...G.childGrantsBefore],transferred:[...G.transferred],extraChildGrants:[...G.extraChildGrants],persistence:Ht(G.persistence),enterCue:xt,exitCue:G.exitCue});u=M.lastOutcome,m.length=0,m.push(...M.cues);for(let G of c)x(G.parentId).restore({schemaVersion:wt,grants:G.parentGrants}),x(G.childId).restore({schemaVersion:wt,grants:G.childGrantsBefore});for(let G of c){let J=x(G.parentId),$=x(G.childId);for(let X of G.transferred)J.revoke(X),$.grant(X);for(let X of G.extraChildGrants)$.grant(X)}return f(c),j(),{ok:!0,snapshot:Ht(M)}}catch(G){c.length=0,c.push(...F.stack),u=F.lastOutcome,m.length=0,m.push(...F.cues);for(let[J,$]of F.grants)x(J).restore({schemaVersion:wt,grants:$});try{S(F.authorized),l(F.suspended)}catch{}return{ok:!1,errors:[ge("restore-failed",G instanceof Error?G.message:String(G))]}}},grantsOf:x,destroy(){if(!E){for(E=!0;c.length>0;){let C=c.pop();g(C)}if(t)try{j()}catch{}m.length=0,u=null}}}}var ni=1,ii=512,it="[REDACTED]",_t=["prompt","credentials","credential","authorization","apiKey","secret"],hm=new Set([je,$e]);function qe(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ri(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>ri(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?it:ri(o,t);return r}function bm(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function vm(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 fc(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 us(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=fc(e[n]),i=fc(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function mc(e){let t=new Map,n=[];for(let o of e){if(o.outcome==="duplicate"){n.push(void 0);continue}let s={envelopeId:o.envelopeId,type:o.type,source:o.source,outcome:o.outcome,children:[]};o.reason&&(s.reason=o.reason),n.push(s),o.envelopeId&&!t.has(o.envelopeId)&&t.set(o.envelopeId,s)}let r=new Set;for(let o=0;o<e.length;o++){let s=e[o],a=n[o];if(!a)continue;let c=s.causationId?t.get(s.causationId):void 0;c&&c!==a&&(c.children.push(a),r.add(a))}let i=[];for(let o of n)o&&!r.has(o)&&i.push(o);return i}function gc(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 Em(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:qe(t.clock),state:ri(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=bm(r.error)),i}function oi(e={}){let t=new Set([..._t,...e.redactedKeys??[]]),n=e.maxRecords??ii,r=e.registry,i=0,o=0,s=!1,a=[],c=[],m,u=[],E=0,v=[],R={},x=()=>{},h=()=>{if(s)throw new Error("Replay inspector has been destroyed")},P=_=>{let f=r?.get(_.type),p={index:o,turn:_.turn,time:_.time,outcome:_.outcome,source:_.source,type:_.type,deliveredTo:_.deliveredTo.slice(),payload:ri(_.payload,t)};for(o+=1,_.reason&&(p.reason=_.reason),_.detail&&(p.detail=_.detail),_.target&&(p.target=_.target),_.kind&&(p.kind=_.kind),_.envelopeId&&(p.envelopeId=_.envelopeId),_.priorEnvelopeId&&(p.priorEnvelopeId=_.priorEnvelopeId),_.correlationId&&(p.correlationId=_.correlationId),_.causationId&&(p.causationId=_.causationId),_.hops!==void 0&&(p.hops=_.hops),_.seq!==void 0&&(p.seq=_.seq),_.idempotencyKey&&(p.idempotencyKey=_.idempotencyKey),_.schemaVersion!==void 0&&(p.schemaVersion=_.schemaVersion),f&&(p.payloadSchemaVersion=f.payloadSchema.version),a.push(p);a.length>n;)a.shift(),i+=1},V=_=>a.filter(f=>vm(f,_)).map(f=>qe(f)),j=_=>_?_.inspectParticipants().map(f=>gc(f,f.kind)):v.map(f=>qe(f)),T={watchRouter(_){if(h(),x(),v=_.inspectParticipants().map(p=>gc(p)),a.length===0)for(let p of _.inspectDecisions())P(p);let f=_.subscribeDecision(p=>P(p));return x=()=>{f(),x=()=>{}},c.push(x),x},bind(_){h(),m&&x(),m=_,E=_.origin,T.watchRouter(_.router),v=j(_);let f={publish(p,S){h();let d={kind:"publish",event:qe(p)};return S?.cause&&(d.extras={cause:qe(S.cause)}),u.push(d),_.publish(p,S)},dispatch(p,S){h();let d=qe(S);typeof d.type=="string"&&hm.has(d.type)?u.push({kind:"asset",participantId:p,event:d}):u.push({kind:"dispatch",participantId:p,event:d}),_.dispatch(p,S)},async step(p=1){h(),u.push({kind:"step",frames:p}),await _.step(p)},async report(){h();let p=await _.inspect(),S=[];for(let d of Object.keys(p.participants).sort())S.push(Em(d,p.participants[d],t));v=S,R={};for(let d of S)R[d.id]=qe(d.state);return T.report()},async exportTrace(p){return await f.report(),T.exportTrace(p)},unbind(){x(),m=void 0}};return f},importTrace(_){h();let f=typeof _=="string"?JSON.parse(_):_;if(f.schemaVersion!==ni)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,a.length=0,u=qe(f.tape??[]),E=f.origin??0,v=qe(f.participants??[]),R=qe(f.snapshots??{});for(let p of f.records??[])P({outcome:p.outcome,reason:p.reason,detail:p.detail,source:p.source,type:p.type,kind:p.kind,envelopeId:p.envelopeId,priorEnvelopeId:p.priorEnvelopeId,target:p.target,deliveredTo:p.deliveredTo,hops:p.hops,seq:p.seq,correlationId:p.correlationId,causationId:p.causationId,idempotencyKey:p.idempotencyKey,schemaVersion:p.schemaVersion,payload:p.payload,turn:p.turn,time:p.time})},exportTrace(_){return h(),{schemaVersion:ni,origin:E,redactedKeys:[...t],participants:qe(v),tape:qe(u),records:V(_),snapshots:qe(R)}},report(_){h();let f=V(_);return{schemaVersion:ni,participants:qe(v),records:f,trees:mc(f),dropped:i}},causationTree(_){h();let f=V(_?{correlationId:_}:void 0);return mc(f)},records(){return h(),a.map(_=>qe(_))},reset(){h(),a.length=0,u=[],i=0,o=0,R={},m&&(v=j(m))},destroy(){if(!s){for(s=!0,x();c.length>0;)c.pop()?.();a.length=0,u=[],v=[],R={},m=void 0}}};return T}async function ls(e,t,n={}){let r=oi({redactedKeys:n.redactedKeys??e.redactedKeys,maxRecords:n.maxRecords,registry:n.registry}),i=r.bind(t);try{for(let s of e.tape)s.kind==="publish"?i.publish(s.event,s.extras):s.kind==="dispatch"||s.kind==="asset"?i.dispatch(s.participantId,s.event):await i.step(s.frames);let o=await i.report();return{inspector:r,report:o}}catch(o){throw r.destroy(),o}}var Yn=1,bc=1,vc=["queued","claimed","awaiting-evaluation","retry-scheduled","ready","applied","failed","canceled","superseded"],Ec=["retryable","permanent","unknown"],Sc=["accept","reject","revise"],si="job.intent.submitted",zn="job.state.queued",ai="job.state.claimed",di="job.state.progress",ci="job.state.awaiting-evaluation",ui="job.state.retry-scheduled",li="job.state.ready",pi="job.state.applied",fi="job.state.failed",mi="job.state.canceled",gi="job.state.superseded",fs="job.diagnostic.lifecycle",Sm=[si,zn,ai,di,ci,ui,li,pi,fi,mi,gi,fs],kc=_t,km=new Set(vc),Rm=new Set(Ec),Im=new Set(Sc),Cm="Job coordinator has been destroyed",Am=512,Pm=8;function ue(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function qt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function ke(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ps(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>ps(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?it:ps(o,t);return r}function ot(){return{version:1,fields:{jobId:{type:"string"},state:{type:"string"},definitionId:{type:"string"},correlationId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function st(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Tm(){return[st(No(si,ot())),st(pe(zn,ot())),st(pe(ai,ot())),st(pe(di,ot())),st(pe(ci,ot())),st(pe(ui,ot())),st(pe(li,ot())),st(pe(pi,ot())),st(pe(fi,ot())),st(pe(mi,ot())),st(pe(gi,ot())),st(He(fs,ot()))]}function Rc(){let e=new Map,t=new Map;return{save(n){let r=ke(n);e.set(r.jobId,r),t.set(r.idempotencyKey,r.jobId)},get(n){let r=e.get(n);return r?ke(r):void 0},getByIdempotencyKey(n){let r=t.get(n);return r?this.get(r):void 0},list(){return[...e.values()].map(n=>ke(n))},replaceAll(n){e.clear(),t.clear();for(let r of n)this.save(r)}}}function wm(){let e,t=new Set;return{bind(n){e=n},start(n){t.add(n.jobId)},cancel(n){t.delete(n)},complete(n,r){return e?(t.delete(n),e.complete(n,r)):{ok:!1,errors:[ue("unbound-worker","worker is not bound")]}},fail(n,r){return e?(t.delete(n),e.fail(n,r)):{ok:!1,errors:[ue("unbound-worker","worker is not bound")]}},started(){return[...t]}}}function ms(e){return qt(e)?e.schemaVersion===bc&&typeof e.kind=="string"&&e.kind.length>0&&typeof e.uri=="string"&&e.uri.length>0&&(e.contentType===void 0||typeof e.contentType=="string")&&(e.bytes===void 0||typeof e.bytes=="number"&&Number.isFinite(e.bytes)):!1}function Ic(e){return qt(e)?typeof e.value=="number"&&Number.isFinite(e.value)&&typeof e.stage=="string"&&e.stage.length>0&&(e.message===void 0||typeof e.message=="string"):!1}function yc(e){return e===null||typeof e=="string"}function hc(e){return e===null||typeof e=="number"&&Number.isFinite(e)}function xm(e){return qt(e)?typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&typeof e.code=="string"&&e.code.length>0&&typeof e.retryability=="string"&&Rm.has(e.retryability)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.detail===void 0||typeof e.detail=="string"):!1}function _m(e){return qt(e)?typeof e.decision=="string"&&Im.has(e.decision)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.correction===void 0||typeof e.correction=="string"):!1}function Om(e){return!qt(e)||typeof e.reasonCode!="string"||e.reasonCode.length===0?!1:e.resultRef===void 0||ms(e.resultRef)}function Dm(e,t){if(!qt(e))return{ok:!1,errors:[ue("invalid-job","job must be an object",t)]};let n=[],r=(i,o,s)=>{o||n.push(ue("invalid-job-field",s,`${t}.${i}`))};return r("jobId",typeof e.jobId=="string"&&e.jobId.length>0,"jobId is required"),r("definitionId",typeof e.definitionId=="string"&&e.definitionId.length>0,"definitionId is required"),r("definitionVersion",typeof e.definitionVersion=="number"&&Number.isInteger(e.definitionVersion),"definitionVersion must be an integer"),r("idempotencyKey",typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0,"idempotencyKey is required"),r("state",typeof e.state=="string"&&km.has(e.state),"unknown job state"),r("attempt",typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&e.attempt>=0,"attempt must be an integer >= 0"),r("correlationId",typeof e.correlationId=="string"&&e.correlationId.length>0,"correlationId is required"),r("createdAt",typeof e.createdAt=="number"&&Number.isFinite(e.createdAt),"createdAt must be a number"),r("updatedAt",typeof e.updatedAt=="number"&&Number.isFinite(e.updatedAt),"updatedAt must be a number"),r("timeoutAt",typeof e.timeoutAt=="number"&&Number.isFinite(e.timeoutAt),"timeoutAt must be a number"),r("workerId",yc(e.workerId),"workerId must be a string or null"),r("leaseUntil",hc(e.leaseUntil),"leaseUntil must be a number or null"),r("nextRetryAt",hc(e.nextRetryAt),"nextRetryAt must be a number or null"),r("supersededBy",yc(e.supersededBy),"supersededBy must be a string or null"),r("fallbackApplied",typeof e.fallbackApplied=="boolean","fallbackApplied must be a boolean"),r("causationId",e.causationId===void 0||typeof e.causationId=="string","causationId must be a string when present"),e.resultRef!=null&&!ms(e.resultRef)&&n.push(ue("invalid-result-ref","resultRef is invalid",`${t}.resultRef`)),Ic(e.progress)||n.push(ue("invalid-progress","progress is invalid",`${t}.progress`)),(!Array.isArray(e.failureHistory)||!e.failureHistory.every(xm))&&n.push(ue("invalid-failure-history","failureHistory entries are invalid",`${t}.failureHistory`)),(!Array.isArray(e.evaluatorHistory)||!e.evaluatorHistory.every(_m))&&n.push(ue("invalid-evaluator-history","evaluatorHistory entries are invalid",`${t}.evaluatorHistory`)),e.fallback!==void 0&&!Om(e.fallback)&&n.push(ue("invalid-fallback","fallback is invalid",`${t}.fallback`)),n.length?{ok:!1,errors:n}:{ok:!0,job:ke(e)}}function Nm(e){if(!qt(e))return{ok:!1,errors:[ue("invalid-snapshot","snapshot must be a JSON object")]};if(e.schemaVersion!==Yn)return{ok:!1,errors:[ue("schema-mismatch",`expected schemaVersion ${Yn}`,"schemaVersion")]};if(!Array.isArray(e.jobs))return{ok:!1,errors:[ue("invalid-jobs","jobs must be an array","jobs")]};if(!Array.isArray(e.hostAcceptedJobIds)||e.hostAcceptedJobIds.some(r=>typeof r!="string"))return{ok:!1,errors:[ue("invalid-accepted","hostAcceptedJobIds must be string[]","hostAcceptedJobIds")]};let t=[],n=[];for(let r=0;r<e.jobs.length;r++){let i=Dm(e.jobs[r],`jobs[${r}]`);i.ok?t.push(i.job):n.push(...i.errors)}return n.length?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:Yn,jobs:t,hostAcceptedJobIds:[...e.hostAcceptedJobIds]}}}function Mm(e){let t=[];return e.id||t.push(ue("invalid-definition","definition id is required")),(!Number.isInteger(e.version)||e.version<1)&&t.push(ue("invalid-definition","definition version must be an integer >= 1",e.id)),(!Number.isInteger(e.retry.maxAttempts)||e.retry.maxAttempts<1)&&t.push(ue("invalid-retry","maxAttempts must be >= 1",e.id)),(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)&&t.push(ue("invalid-timeout","timeoutMs must be > 0",e.id)),(!Number.isFinite(e.leaseMs)||e.leaseMs<=0)&&t.push(ue("invalid-lease","leaseMs must be > 0",e.id)),e.fallback?.reasonCode||t.push(ue("invalid-fallback","fallback.reasonCode is required",e.id)),t}function Lm(e){switch(e){case"queued":return zn;case"claimed":return ai;case"awaiting-evaluation":return ci;case"retry-scheduled":return ui;case"ready":return li;case"applied":return pi;case"failed":return fi;case"canceled":return mi;case"superseded":return gi}}function Vm(e){let t=new Map;for(let d of e.definitions){let l=Mm(d);if(l.length)throw new Error(l.map(g=>g.detail).join("; "));t.set(d.id,ke(d))}let n=e.persistence??Rc(),r=e.now??(()=>Date.now()),i=0,o=e.createId??(()=>`job-${++i}`),s=e.maxCorrectionChars??Am,a=e.maxFailureHistory??Pm,c=new Set(kc),m=!1,u=[],E=new Set,v=e.worker,R=()=>{if(m)throw new Error(Cm)},x=d=>{n.save(d)},h=(d,l,g)=>{u.push(d);let k={jobId:l.jobId,state:l.state,definitionId:l.definitionId,correlationId:l.correlationId};g&&(k.reasonCode=g);let N={type:d,kind:d.includes(".intent.")?"intent":d.includes(".diagnostic.")?"diagnostic":"state",payload:k,correlationId:l.correlationId,causationId:l.causationId,idempotencyKey:`${d}:${l.jobId}:${l.updatedAt}`};e.router?.publish(N)},P=(d,l,g)=>(d.state=l,d.updatedAt=r(),x(d),h(Lm(l),d,g),d),V=d=>d==="applied"||d==="failed"||d==="canceled"||d==="superseded",j=(d,l)=>{let g=d.retry.backoffMs;return g.length?g[Math.min(l-1,g.length-1)]??0:0},T=(d,l)=>l.retryability==="permanent"?"permanent":d.retry.retryableCodes.includes(l.code)||l.retryability==="retryable"?"retryable":l.retryability,_=(d,l)=>(d.fallbackApplied=!0,d.fallback=ke(l.fallback),l.fallback.resultRef&&(d.resultRef=ke(l.fallback.resultRef)),P(d,"failed",l.fallback.reasonCode)),f=(d,l,g)=>(d.failureHistory=[...d.failureHistory,g].slice(-a),d.workerId=null,d.leaseUntil=null,d.attempt>=l.retry.maxAttempts||g.retryability==="permanent"?_(d,l):(d.nextRetryAt=r()+j(l,d.attempt),P(d,"retry-scheduled",g.code))),p=(d,l,g)=>{d.workerId=l,d.leaseUntil=r()+g.leaseMs,d.nextRetryAt=null,d.attempt+=1;let k=P(d,"claimed");return v?.start({jobId:k.jobId,workerId:l,definitionId:k.definitionId,request:ke(k.request),attempt:k.attempt}),k},S={submit(d){R();let l=[];d.idempotencyKey||l.push(ue("missing-idempotency","idempotencyKey is required")),d.correlationId||l.push(ue("missing-correlation","correlationId is required"));let g=t.get(d.definitionId);if(g||l.push(ue("unknown-definition",`unknown definition "${d.definitionId}"`)),l.length||!g)return{ok:!1,errors:l};let k=n.getByIdempotencyKey(d.idempotencyKey);if(k)return{ok:!0,job:k};let N=r(),A={jobId:o(),definitionId:g.id,definitionVersion:g.version,idempotencyKey:d.idempotencyKey,state:"queued",request:ke(d.request),resultRef:null,progress:{value:0,stage:"queued"},attempt:0,failureHistory:[],evaluatorHistory:[],correlationId:d.correlationId,causationId:d.causationId,workerId:null,leaseUntil:null,createdAt:N,updatedAt:N,timeoutAt:N+g.timeoutMs,nextRetryAt:null,supersededBy:null,fallbackApplied:!1};if(x(A),h(si,A),h(zn,A),d.supersedeJobId){let B=n.get(d.supersedeJobId);B&&!V(B.state)&&(B.supersededBy=A.jobId,v?.cancel?.(B.jobId),P(B,"superseded","superseded"))}return{ok:!0,job:ke(A)}},claim(d){if(R(),!d)return{ok:!1,errors:[ue("missing-worker","workerId is required")]};S.tick();let g=n.list().filter(N=>N.state==="queued"||N.state==="retry-scheduled"&&(N.nextRetryAt??0)<=r()).sort((N,A)=>N.createdAt-A.createdAt)[0];if(!g)return{ok:!1,errors:[ue("empty-queue","no claimable jobs")]};let k=t.get(g.definitionId);return k?{ok:!0,job:ke(p(g,d,k))}:{ok:!1,errors:[ue("unknown-definition",g.definitionId)]}},reportProgress(d,l){R();let g=n.get(d);return g?g.state!=="claimed"?{ok:!1,errors:[ue("invalid-state",`cannot report progress in ${g.state}`)]}:Ic(l)?l.value<g.progress.value?{ok:!1,errors:[ue("non-monotonic","progress.value must not decrease")]}:(g.progress=ke(l),g.updatedAt=r(),x(g),h(di,g),{ok:!0,job:ke(g)}):{ok:!1,errors:[ue("invalid-progress","progress value/stage required")]}:{ok:!1,errors:[ue("unknown-job",d)]}},heartbeat(d){R();let l=n.get(d);if(!l)return{ok:!1,errors:[ue("unknown-job",d)]};if(l.state!=="claimed"||!l.workerId)return{ok:!1,errors:[ue("invalid-state","heartbeat requires a claimed job")]};let g=t.get(l.definitionId);return g?(l.leaseUntil=r()+g.leaseMs,l.updatedAt=r(),x(l),{ok:!0,job:ke(l)}):{ok:!1,errors:[ue("unknown-definition",l.definitionId)]}},complete(d,l){R();let g=n.get(d);if(!g)return{ok:!1,errors:[ue("unknown-job",d)]};if(g.state!=="claimed")return{ok:!1,errors:[ue("invalid-state",`cannot complete in ${g.state}`)]};if(!ms(l))return{ok:!1,errors:[ue("invalid-result-ref","result must be a reference")]};let k=t.get(g.definitionId);return k&&l.kind!==k.resultKind?{ok:!1,errors:[ue("result-kind",`expected result kind "${k.resultKind}"`)]}:(g.resultRef=ke(l),g.workerId=null,g.leaseUntil=null,g.progress={value:Math.max(g.progress.value,1),stage:"awaiting-evaluation"},{ok:!0,job:ke(P(g,"awaiting-evaluation"))})},fail(d,l){R();let g=n.get(d);if(!g)return{ok:!1,errors:[ue("unknown-job",d)]};if(g.state!=="claimed"&&g.state!=="queued")return{ok:!1,errors:[ue("invalid-state",`cannot fail in ${g.state}`)]};let k=t.get(g.definitionId);if(!k)return{ok:!1,errors:[ue("unknown-definition",g.definitionId)]};let N=T(k,l),A={attempt:g.attempt,code:l.code,retryability:N,at:r(),detail:l.detail};return v?.cancel?.(g.jobId),{ok:!0,job:ke(f(g,k,A))}},evaluate(d,l,g){R();let k=n.get(d);if(!k)return{ok:!1,errors:[ue("unknown-job",d)]};if(k.state!=="awaiting-evaluation")return{ok:!1,errors:[ue("invalid-state","evaluate requires awaiting-evaluation")]};let N=t.get(k.definitionId);if(!N)return{ok:!1,errors:[ue("unknown-definition",k.definitionId)]};if(g!==void 0&&g.length>s)return{ok:!1,errors:[ue("correction-bound",`correction exceeds ${s} chars`)]};if(k.evaluatorHistory=[...k.evaluatorHistory,{decision:l,at:r(),correction:g?.slice(0,s)}],l==="accept")return k.progress={value:1,stage:"ready"},{ok:!0,job:ke(P(k,"ready"))};let A={attempt:k.attempt,code:l==="revise"?"evaluator-revise":"evaluator-reject",retryability:"retryable",at:r(),detail:g};return{ok:!0,job:ke(f(k,N,A))}},cancel(d){R();let l=n.get(d);return l?V(l.state)||l.state==="applied"?{ok:!1,errors:[ue("invalid-state",`cannot cancel ${l.state}`)]}:(v?.cancel?.(l.jobId),l.workerId=null,l.leaseUntil=null,{ok:!0,job:ke(P(l,"canceled","canceled"))}):{ok:!1,errors:[ue("unknown-job",d)]}},recoverStale(){R();let d=[],l=r();for(let g of n.list()){if(g.state!=="claimed"||g.leaseUntil==null||g.leaseUntil>l)continue;let k=t.get(g.definitionId);if(!k)continue;v?.cancel?.(g.jobId);let N={attempt:g.attempt,code:"stale-lease",retryability:"retryable",at:l};d.push(ke(f(g,k,N)))}return d},tick(){R();let d=[];d.push(...S.recoverStale());let l=r();for(let g of n.list())if(!(V(g.state)||g.state==="ready"||g.state==="applied")&&l>=g.timeoutAt){let k=t.get(g.definitionId);if(!k)continue;let N={attempt:g.attempt,code:"timeout",retryability:"permanent",at:l};v?.cancel?.(g.jobId),d.push(ke(f(g,k,N)))}return d},accept(d){R();let l=n.get(d);return l?l.state!=="ready"?{ok:!1,errors:[ue("not-ready","host may accept only ready jobs")]}:(E.add(l.jobId),{ok:!0,job:ke(P(l,"applied"))}):{ok:!1,errors:[ue("unknown-job",d)]}},get(d){return R(),n.get(d)},getByIdempotencyKey(d){return R(),n.getByIdempotencyKey(d)},inspect(){return R(),{destroyed:!1,jobs:n.list(),events:[...u]}},snapshot(){return R(),{schemaVersion:Yn,jobs:n.list(),hostAcceptedJobIds:[...E]}},restore(d){R();let l=Nm(d);if(!l.ok)return l;let g=n.list(),k=[...E];try{n.replaceAll(l.snapshot.jobs),E.clear();for(let N of l.snapshot.hostAcceptedJobIds)E.add(N);return{ok:!0,snapshot:ke(l.snapshot)}}catch{n.replaceAll(g),E.clear();for(let N of k)E.add(N);return{ok:!1,errors:[ue("restore-failed","restore rolled back")]}}},exportTrace(){return R(),{jobs:n.list().map(d=>ps(d,c)),events:[...u]}},destroy(){m=!0}};return v?.bind({reportProgress:(d,l)=>S.reportProgress(d,l),complete:(d,l)=>S.complete(d,l),fail:(d,l)=>S.fail(d,l),heartbeat:d=>S.heartbeat(d)}),S}var yn=1,hi=["room","region","landmark","frontier"],Ac=["local","regional"],Pc=["canonical","discoverable","hidden"],Tc=["open","locked","disabled"],wc=["character","party"],xc=["available","busy","traveling"],bi="world.graph.state.node-added",vi="world.graph.state.edge-added",Ei="world.graph.state.discovered",Zn="world.graph.state.transit",er="world.graph.diagnostic.lifecycle",Bm=[bi,vi,Ei,Zn,er],Fm=new Set(hi),$m=new Set(Ac),Hm=new Set(Pc),_c=new Set(Tc),qm=new Set(wc),Oc=new Set(xc),Wm="World graph has been destroyed",Km=4096;function ee(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function gt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function at(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function hn(e){return typeof e=="number"&&Number.isFinite(e)}function We(e){return typeof e=="string"&&e.length>0}function ys(e,t,n){if(e!==void 0){if(!gt(e)){n.push(ee("invalid-metadata","metadata must be a JSON object",t));return}return at(e)}}function Gm(e,t,n){if(e!==void 0){if(!gt(e)){n.push(ee("invalid-requirements","requirements must be a JSON object",t));return}return at(e)}}function jm(e,t,n){if(e===void 0)return;if(!gt(e)){n.push(ee("invalid-cost","cost must be a JSON object",t));return}let r={};for(let[i,o]of Object.entries(e)){if(!hn(o)){n.push(ee("invalid-cost",`cost.${i} must be finite`,t));continue}r[i]=o}return r}function Dc(e,t){if(!gt(e))return{ok:!1,errors:[ee("invalid-node","node must be an object",t)]};let n=[];We(e.id)||n.push(ee("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(ee("invalid-version","version must be an integer \u2265 1",`${t}.version`)),Fm.has(e.kind)||n.push(ee("invalid-kind","unknown node kind",`${t}.kind`)),$m.has(e.mapLayer)||n.push(ee("invalid-map-layer","unknown mapLayer",`${t}.mapLayer`)),e.frontier!==void 0&&typeof e.frontier!="boolean"&&n.push(ee("invalid-frontier","frontier must be boolean",`${t}.frontier`));let r=ys(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let i={id:e.id,version:e.version,kind:e.kind,mapLayer:e.mapLayer};return e.frontier===!0&&(i.frontier=!0),r&&(i.metadata=r),{ok:!0,node:i}}function Nc(e,t){if(!gt(e))return{ok:!1,errors:[ee("invalid-edge","edge must be an object",t)]};let n=[];We(e.id)||n.push(ee("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(ee("invalid-version","version must be an integer \u2265 1",`${t}.version`)),We(e.from)||n.push(ee("invalid-from","from is required",`${t}.from`)),We(e.to)||n.push(ee("invalid-to","to is required",`${t}.to`)),typeof e.directed!="boolean"&&n.push(ee("invalid-directed","directed must be boolean",`${t}.directed`)),We(e.kind)||n.push(ee("invalid-kind","kind is required",`${t}.kind`)),Hm.has(e.visibility)||n.push(ee("invalid-visibility","unknown visibility",`${t}.visibility`)),_c.has(e.access)||n.push(ee("invalid-access","unknown access",`${t}.access`));let r=Gm(e.requirements,`${t}.requirements`,n),i=jm(e.cost,`${t}.cost`,n),o=ys(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let s={id:e.id,version:e.version,from:e.from,to:e.to,directed:e.directed,kind:e.kind,visibility:e.visibility,access:e.access};return r&&(s.requirements=r),i&&(s.cost=i),o&&(s.metadata=o),{ok:!0,edge:s}}function Mc(e,t){if(!gt(e))return{ok:!1,errors:[ee("invalid-transit","transit must be an object",t)]};let n=[];return We(e.originNodeId)||n.push(ee("invalid-origin","originNodeId is required",`${t}.originNodeId`)),We(e.destinationNodeId)||n.push(ee("invalid-destination","destinationNodeId is required",`${t}.destinationNodeId`)),(!Array.isArray(e.routeEdgeIds)||e.routeEdgeIds.some(r=>!We(r)))&&n.push(ee("invalid-route","routeEdgeIds must be strings",`${t}.routeEdgeIds`)),hn(e.departedAt)||n.push(ee("invalid-time","departedAt must be finite semantic time",`${t}.departedAt`)),hn(e.expectedArrival)||n.push(ee("invalid-time","expectedArrival must be finite semantic time",`${t}.expectedArrival`)),n.length?{ok:!1,errors:n}:{ok:!0,transit:{originNodeId:e.originNodeId,destinationNodeId:e.destinationNodeId,routeEdgeIds:[...e.routeEdgeIds],departedAt:e.departedAt,expectedArrival:e.expectedArrival}}}function Lc(e,t){if(!gt(e))return{ok:!1,errors:[ee("invalid-entity","entity must be an object",t)]};let n=[];We(e.id)||n.push(ee("invalid-id","id is required",`${t}.id`)),qm.has(e.kind)||n.push(ee("invalid-kind","unknown entity kind",`${t}.kind`)),Oc.has(e.status)||n.push(ee("invalid-status","unknown status",`${t}.status`)),e.locationNodeId!==null&&!We(e.locationNodeId)&&n.push(ee("invalid-location","locationNodeId must be string or null",`${t}.locationNodeId`));let r=null;if(e.transit!==null&&e.transit!==void 0){let s=Mc(e.transit,`${t}.transit`);s.ok?r=s.transit:n.push(...s.errors)}let i=ys(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let o={id:e.id,kind:e.kind,status:e.status,locationNodeId:e.locationNodeId??null,transit:r};return i&&(o.metadata=i),{ok:!0,entity:o}}function Um(e,t){if(!gt(e))return{ok:!1,errors:[ee("invalid-discovery","discovery must be an object",t)]};let n=[];return We(e.observerId)||n.push(ee("invalid-observer","observerId is required",`${t}.observerId`)),(!Array.isArray(e.nodeIds)||e.nodeIds.some(r=>!We(r)))&&n.push(ee("invalid-node-ids","nodeIds must be strings",`${t}.nodeIds`)),(!Array.isArray(e.edgeIds)||e.edgeIds.some(r=>!We(r)))&&n.push(ee("invalid-edge-ids","edgeIds must be strings",`${t}.edgeIds`)),n.length?{ok:!1,errors:n}:{ok:!0,discovery:{observerId:e.observerId,nodeIds:[...e.nodeIds],edgeIds:[...e.edgeIds]}}}function Jm(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[ee("invalid-json","snapshot JSON is invalid")]}}if(!gt(n))return{ok:!1,errors:[ee("invalid-snapshot","snapshot must be a JSON object")]};let r=n.schemaVersion;if(typeof r=="number"&&r<yn){let x=n,h=r;for(;h<yn;){let P=t.find(V=>V.from===h&&V.to===h+1);if(!P)return{ok:!1,errors:[ee("unsupported-schema",`no migration from schema ${h}`)]};x=P.migrate(x),h+=1}if(n=x,!gt(n))return{ok:!1,errors:[ee("invalid-snapshot","migrated snapshot must be an object")]};r=n.schemaVersion}if(r!==yn)return{ok:!1,errors:[ee("unsupported-schema","unsupported world graph snapshot schema")]};if(!We(n.graphId))return{ok:!1,errors:[ee("invalid-graph-id","graphId is required","graphId")]};if(!Array.isArray(n.nodes))return{ok:!1,errors:[ee("invalid-nodes","nodes must be an array","nodes")]};if(!Array.isArray(n.edges))return{ok:!1,errors:[ee("invalid-edges","edges must be an array","edges")]};if(!Array.isArray(n.entities))return{ok:!1,errors:[ee("invalid-entities","entities must be an array","entities")]};if(!Array.isArray(n.discovery))return{ok:!1,errors:[ee("invalid-discovery","discovery must be an array","discovery")]};let i=[],o=[],s=new Set;n.nodes.forEach((x,h)=>{let P=Dc(x,`nodes[${h}]`);if(!P.ok){i.push(...P.errors);return}if(s.has(P.node.id)){i.push(ee("duplicate-id","duplicate node id",`nodes[${h}].id`));return}s.add(P.node.id),o.push(P.node)});let a=[],c=new Set;n.edges.forEach((x,h)=>{let P=Nc(x,`edges[${h}]`);if(!P.ok){i.push(...P.errors);return}if(c.has(P.edge.id)){i.push(ee("duplicate-id","duplicate edge id",`edges[${h}].id`));return}s.has(P.edge.id)&&i.push(ee("id-collision","edge id collides with a node id",`edges[${h}].id`)),c.add(P.edge.id),a.push(P.edge)});let m=[],u=new Set;n.entities.forEach((x,h)=>{let P=Lc(x,`entities[${h}]`);if(!P.ok){i.push(...P.errors);return}if(u.has(P.entity.id)){i.push(ee("duplicate-id","duplicate entity id",`entities[${h}].id`));return}u.add(P.entity.id),m.push(P.entity)});let E=[],v=new Set;if(n.discovery.forEach((x,h)=>{let P=Um(x,`discovery[${h}]`);if(!P.ok){i.push(...P.errors);return}if(v.has(P.discovery.observerId)){i.push(ee("duplicate-observer","duplicate observerId",`discovery[${h}].observerId`));return}v.add(P.discovery.observerId),E.push(P.discovery)}),i.length)return{ok:!1,errors:i};let R=yi(o,a,m,E);return R.length?{ok:!1,errors:R}:{ok:!0,snapshot:{schemaVersion:yn,graphId:n.graphId,nodes:o,edges:a,entities:m,discovery:E}}}function yi(e,t,n,r){let i=new Set(e.map(a=>a.id)),o=new Set(t.map(a=>a.id)),s=[];for(let a of t)i.has(a.from)||s.push(ee("missing-node",`edge ${a.id} from unknown node`,`edges.${a.id}.from`)),i.has(a.to)||s.push(ee("missing-node",`edge ${a.id} to unknown node`,`edges.${a.id}.to`));for(let a of n)if(a.locationNodeId&&!i.has(a.locationNodeId)&&s.push(ee("missing-node",`entity ${a.id} location unknown`,`entities.${a.id}.locationNodeId`)),a.transit){i.has(a.transit.originNodeId)||s.push(ee("missing-node","transit origin unknown",`entities.${a.id}.transit.originNodeId`)),i.has(a.transit.destinationNodeId)||s.push(ee("missing-node","transit destination unknown",`entities.${a.id}.transit.destinationNodeId`));for(let c of a.transit.routeEdgeIds)o.has(c)||s.push(ee("missing-edge",`transit route missing ${c}`,`entities.${a.id}.transit.routeEdgeIds`))}for(let a of r){for(let c of a.nodeIds)i.has(c)||s.push(ee("missing-node",`discovery references unknown node ${c}`,`discovery.${a.observerId}`));for(let c of a.edgeIds)o.has(c)||s.push(ee("missing-edge",`discovery references unknown edge ${c}`,`discovery.${a.observerId}`))}return s}function gs(e){return[...e].map(t=>at(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Cc(e){return[...e].map(t=>at(t)).sort((t,n)=>t.id.localeCompare(n.id))}function Ym(e){return e.directed?[{from:e.from,to:e.to}]:[{from:e.from,to:e.to},{from:e.to,to:e.from}]}function Xn(){return{version:1,fields:{graphId:{type:"string",optional:!0},nodeId:{type:"string",optional:!0},edgeId:{type:"string",optional:!0},observerId:{type:"string",optional:!0},entityId:{type:"string",optional:!0}}}}function Qn(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function zm(){return[Qn(pe(bi,Xn())),Qn(pe(vi,Xn())),Qn(pe(Ei,Xn())),Qn(pe(Zn,Xn())),Qn(He(er,Xn()))]}function Xm(e={}){let t=e.migrations??[],n=e.maxPathVisits??Km,r=e.source??"world-graph",i=e.graphId??"world",o=!1,s=new Map,a=new Map,c=new Map,m=new Map,u=[],E=[];function v(){if(o)throw new Error(Wm)}function R(d,l){let g={type:d,payload:l,source:r,kind:d===er?"diagnostic":void 0};u.push(g),E.push(d),e.router?.publish(g)}function x(d){return R(er,{graphId:i}),{ok:!1,errors:d}}function h(){let d=new Map,l=g=>(d.has(g)||d.set(g,[]),d.get(g));for(let g of s.values())l(g.id);for(let g of a.values())for(let k of Ym(g))l(k.from).push({edge:g,to:k.to});for(let g of d.values())g.sort((k,N)=>k.edge.id.localeCompare(N.edge.id)||k.to.localeCompare(N.to));return d}function P(d,l){let g=Dc(d,`nodes.${d.id??"?"}`);return g.ok?s.get(g.node.id)?(l.push(ee("duplicate-id",`node ${g.node.id} already exists`,`nodes.${g.node.id}`)),!1):a.has(g.node.id)?(l.push(ee("id-collision","node id collides with an edge id",`nodes.${g.node.id}`)),!1):(s.set(g.node.id,g.node),R(bi,{graphId:i,nodeId:g.node.id}),!0):(l.push(...g.errors),!1)}function V(d,l){let g=Nc(d,`edges.${d.id??"?"}`);return g.ok?a.has(g.edge.id)?(l.push(ee("duplicate-id",`edge ${g.edge.id} already exists`,`edges.${g.edge.id}`)),!1):s.has(g.edge.id)?(l.push(ee("id-collision","edge id collides with a node id",`edges.${g.edge.id}`)),!1):!s.has(g.edge.from)||!s.has(g.edge.to)?(l.push(ee("missing-node",`edge ${g.edge.id} references unknown node`,`edges.${g.edge.id}`)),!1):(a.set(g.edge.id,g.edge),R(vi,{graphId:i,edgeId:g.edge.id}),!0):(l.push(...g.errors),!1)}function j(d){let l=m.get(d);return l||(l={nodeIds:new Set,edgeIds:new Set},m.set(d,l)),l}function T(d,l){return l.visibility==="canonical"?!0:m.get(d)?.edgeIds.has(l.id)===!0}function _(d,l){if(m.get(d)?.nodeIds.has(l.id))return!0;if(l.kind==="frontier"||l.frontier){for(let g of a.values())if(T(d,g)&&(g.from===l.id||g.to===l.id)){let k=g.from===l.id?g.to:g.from;if(m.get(d)?.nodeIds.has(k))return!0}}return!1}function f(d,l,g,k){let N=new Map;for(let D of s.values())g(D,null)&&N.set(D.id,at(D));let A=[];for(let D of a.values())!N.has(D.from)||!N.has(D.to)||g(N.get(D.from),D)&&A.push(at(D));let B=gs([...N.values()].filter(D=>D.kind==="frontier"||D.frontier===!0)),W=[...c.values()].filter(D=>!!(D.locationNodeId&&N.has(D.locationNodeId)||D.transit&&(N.has(D.transit.originNodeId)||N.has(D.transit.destinationNodeId)))).map(D=>at(D)).sort((D,C)=>D.id.localeCompare(C.id));return{kind:d,observerId:l,focusNodeId:k,nodes:gs(N.values()),edges:Cc(A),frontiers:B,entities:W}}function p(d,l,g){let k=new Set;if(!s.has(d))return k;let N=h(),A=[{id:d,dist:0}],B=new Set([d]);for(k.add(d);A.length;){let W=A.shift();if(!(W.dist>=l))for(let D of N.get(W.id)??[]){if(!T(g,D.edge)&&D.edge.visibility!=="canonical"||B.has(D.to))continue;let C=s.get(D.to);C&&(C.mapLayer!=="local"&&C.kind!=="frontier"&&!C.frontier||(B.add(D.to),k.add(D.to),A.push({id:D.to,dist:W.dist+1})))}}return k}function S(d,l,g,k,N){let A=k?.maxVisits??n,B=h(),W=new Map([[d,0]]),D=new Map,C=new Set,w=0;for(;w<A;){let M=null,F=1/0;for(let[G,J]of W)C.has(G)||(J<F||J===F&&(M===null||G.localeCompare(M)<0))&&(M=G,F=J);if(M===null||N!==null&&M===N)break;C.add(M),w+=1;for(let G of B.get(M)??[]){if(!l.canTraverse(G.edge,M,G.to,g))continue;let J=l.cost(G.edge,M,G.to,g);if(!Number.isFinite(J)||J<0)continue;let $=F+J,X=W.get(G.to);(X===void 0||$<X||$===X&&G.edge.id.localeCompare(D.get(G.to)?.edge.id??G.edge.id)<0)&&(W.set(G.to,$),D.set(G.to,{node:M,edge:G.edge,cost:J}))}}return{dist:W,prev:D}}return{addNode(d){v();let l=[];return P(d,l),l.length?x(l):{ok:!0}},addEdge(d){v();let l=[];return V(d,l),l.length?x(l):{ok:!0}},applyPatch(d){v();let l=new Map(s),g=new Map(a),k=u.length,N=E.length,A=[];for(let B of d.nodes??[])P(B,A);for(let B of d.edges??[])V(B,A);if(A.length){s.clear(),a.clear();for(let[B,W]of l)s.set(B,W);for(let[B,W]of g)a.set(B,W);return u.length=k,E.length=N,x(A)}return{ok:!0}},removeNode(d){if(v(),!s.has(d))return x([ee("unknown-node",d)]);let l=yi([...s.values()].filter(k=>k.id!==d),[...a.values()].filter(k=>k.from!==d&&k.to!==d),[...c.values()],[...m.entries()].map(([k,N])=>({observerId:k,nodeIds:[...N.nodeIds].filter(A=>A!==d),edgeIds:[...N.edgeIds]}))).filter(k=>k.code!=="missing-node"||!k.detail.includes(d));if(l.length)return x(l);let g=[...a.values()].filter(k=>k.from===d||k.to===d);if(g.length)return x([ee("node-in-use",`remove incident edges first (${g[0].id})`)]);for(let k of c.values())if(k.locationNodeId===d||k.transit?.originNodeId===d||k.transit?.destinationNodeId===d)return x([ee("node-in-use",`entity ${k.id} still references node`)]);s.delete(d);for(let k of m.values())k.nodeIds.delete(d);return{ok:!0}},removeEdge(d){if(v(),!a.has(d))return x([ee("unknown-edge",d)]);for(let l of c.values())if(l.transit?.routeEdgeIds.includes(d))return x([ee("edge-in-use",`entity ${l.id} still references edge`)]);a.delete(d);for(let l of m.values())l.edgeIds.delete(d);return{ok:!0}},setEdgeAccess(d,l){v();let g=a.get(d);return g?_c.has(l)?(a.set(d,{...g,access:l}),{ok:!0}):x([ee("invalid-access",l)]):x([ee("unknown-edge",d)])},discover(d,l){if(v(),!We(d))return x([ee("invalid-observer","observerId is required")]);let g=[];for(let N of l.nodeIds??[])s.has(N)||g.push(ee("unknown-node",N));for(let N of l.edgeIds??[])a.has(N)||g.push(ee("unknown-edge",N));if(g.length)return x(g);let k=j(d);for(let N of l.nodeIds??[])k.nodeIds.add(N);for(let N of l.edgeIds??[])k.edgeIds.add(N);return R(Ei,{graphId:i,observerId:d}),{ok:!0}},upsertEntity(d){v();let l=Lc(d,`entities.${d.id??"?"}`);if(!l.ok)return x(l.errors);let g=yi([...s.values()],[...a.values()],[l.entity],[]);return g.length?x(g):(c.set(l.entity.id,l.entity),{ok:!0})},startTransit(d,l,g="traveling"){v();let k=c.get(d);if(!k)return x([ee("unknown-entity",d)]);let N=Mc(l,"transit");if(!N.ok)return x(N.errors);let A={...k,status:g,locationNodeId:null,transit:N.transit},B=yi([...s.values()],[...a.values()],[A],[]);return B.length?x(B):(c.set(d,A),R(Zn,{graphId:i,entityId:d}),{ok:!0})},completeTransit(d,l){v();let g=c.get(d);return g?g.transit?hn(l)?(c.set(d,{...g,status:"available",locationNodeId:g.transit.destinationNodeId,transit:null}),R(Zn,{graphId:i,entityId:d,semanticTime:l}),{ok:!0}):x([ee("invalid-time","semanticTime must be finite")]):x([ee("not-traveling",d)]):x([ee("unknown-entity",d)])},setEntityStatus(d,l){v();let g=c.get(d);return g?Oc.has(l)?(c.set(d,{...g,status:l}),{ok:!0}):x([ee("invalid-status",l)]):x([ee("unknown-entity",d)])},getNode(d){v();let l=s.get(d);return l?at(l):void 0},getEdge(d){v();let l=a.get(d);return l?at(l):void 0},getEntity(d){v();let l=c.get(d);return l?at(l):void 0},projectCanonical(){return v(),f("canonical",void 0,()=>!0)},projectKnown(d){return v(),f("known",d,(l,g)=>g?T(d,g):_(d,l))},projectLocal(d,l,g=8){v();let k=p(l,g,d);return f("local",d,(N,A)=>k.has(N.id)?A?T(d,A)||A.visibility==="canonical":_(d,N)||k.has(N.id):!1,l)},projectRegional(d){return v(),f("regional",d,(l,g)=>l.mapLayer!=="regional"&&l.kind!=="frontier"&&!l.frontier?!1:g?T(d,g):_(d,l))},findPath(d,l,g,k,N){if(v(),!s.has(d))return{ok:!1,errors:[ee("unknown-node",d)]};if(!s.has(l))return{ok:!1,errors:[ee("unknown-node",l)]};if(!hn(k.semanticTime))return{ok:!1,errors:[ee("invalid-time","semanticTime must be finite")]};if(d===l)return{ok:!0,path:{from:d,to:l,nodeIds:[d],steps:[],totalCost:0}};let{dist:A,prev:B}=S(d,g,k,N,l);if(!A.has(l))return{ok:!1,errors:[ee("unreachable",l)]};let W=[],D=[l],C=l;for(;C!==d;){let w=B.get(C);if(!w)return{ok:!1,errors:[ee("unreachable",l)]};W.push({edgeId:w.edge.id,from:w.node,to:C,cost:w.cost}),C=w.node,D.push(C)}return W.reverse(),D.reverse(),{ok:!0,path:{from:d,to:l,nodeIds:D,steps:W,totalCost:A.get(l)}}},reachable(d,l,g,k){if(v(),!s.has(d)||!hn(g.semanticTime))return{nodeIds:[]};let{dist:N}=S(d,l,g,k,null);return{nodeIds:[...N.keys()].sort((A,B)=>A.localeCompare(B))}},inspect(){return v(),{destroyed:!1,graphId:i,nodeCount:s.size,edgeCount:a.size,entityCount:c.size,observerCount:m.size,events:[...E]}},snapshot(){return v(),{schemaVersion:yn,graphId:i,nodes:gs(s.values()),edges:Cc(a.values()),entities:[...c.values()].map(d=>at(d)).sort((d,l)=>d.id.localeCompare(l.id)),discovery:[...m.entries()].map(([d,l])=>({observerId:d,nodeIds:[...l.nodeIds].sort((g,k)=>g.localeCompare(k)),edgeIds:[...l.edgeIds].sort((g,k)=>g.localeCompare(k))})).sort((d,l)=>d.observerId.localeCompare(l.observerId))}},restore(d){v();let l=Jm(d,t);if(!l.ok)return l;let g={graphId:i,nodes:new Map(s),edges:new Map(a),entities:new Map(c),discovery:new Map([...m.entries()].map(([k,N])=>[k,{nodeIds:new Set(N.nodeIds),edgeIds:new Set(N.edgeIds)}]))};try{i=l.snapshot.graphId,s.clear(),a.clear(),c.clear(),m.clear();for(let k of l.snapshot.nodes)s.set(k.id,k);for(let k of l.snapshot.edges)a.set(k.id,k);for(let k of l.snapshot.entities)c.set(k.id,k);for(let k of l.snapshot.discovery)m.set(k.observerId,{nodeIds:new Set(k.nodeIds),edgeIds:new Set(k.edgeIds)});return{ok:!0,snapshot:at(l.snapshot)}}catch{i=g.graphId,s.clear(),a.clear(),c.clear(),m.clear();for(let[k,N]of g.nodes)s.set(k,N);for(let[k,N]of g.edges)a.set(k,N);for(let[k,N]of g.entities)c.set(k,N);for(let[k,N]of g.discovery)m.set(k,N);return{ok:!1,errors:[ee("restore-failed","restore rolled back")]}}},events(){return v(),[...u]},destroy(){o=!0,s.clear(),a.clear(),c.clear(),m.clear()}}}var tr=1,Ii=1,Hc=["add","replace","revise","remove","tombstone","link","unlink"],qc=["base-revision","entity-revision","entity-hash","identity-required","identity-absent","capability","schema"],Ai="world.patch.state.accepted",Pi="world.patch.state.rejected",Ti="world.patch.state.superseded",vn="world.patch.diagnostic.lifecycle",Qm=[Ai,Pi,Ti,vn],Wc=["invalid-schema","unknown-field","unknown-op","missing-field","missing-ref","referential-integrity","stale-base","precondition-failed","asset-unavailable","content-unavailable","binding-unavailable","cycle","over-limit","idempotency-conflict","superseded","invalid-snapshot","invalid-version","destroyed","domain","capability-denied","schema-mismatch","identity-required","identity-absent","entity-revision","entity-hash","duplicate-id","graph-apply-failed","publish-failed"],Kc=_t,Vc=new Set(Hc),Zm=new Set(qc),eg=new Set(Wc),bs=new Set(hi),vs=new Set(["exit","edge","graph-edge"]),tg="World patch applier has been destroyed",ng=new Set(["patchId","schemaVersion","baseRevision","idempotencyKey","preconditions","operations","provenance","supersedes"]),rg=new Set(["op","kind","id","value","from","to","order","refs"]),ig=new Set(["jobId","producer","contentRevisions"]),og={"base-revision":new Set(["type","revision"]),"entity-revision":new Set(["type","kind","id","revision"]),"entity-hash":new Set(["type","kind","id","hash"]),"identity-required":new Set(["type","kind","id"]),"identity-absent":new Set(["type","kind","id"]),capability:new Set(["type","name"]),schema:new Set(["type","schemaVersion"])},sg=256,ag=32,dg=4096,cg=262144;function Z(e,t,n,r){let i=n?{code:e,detail:t,path:n}:{code:e,detail:t};return r?.expectedRevision!==void 0&&(i.expectedRevision=r.expectedRevision),r?.actualRevision!==void 0&&(i.actualRevision=r.actualRevision),i}function Ne(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function he(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function me(e){return typeof e=="string"&&e.length>0}function Ue(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)}function nr(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(Z("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function Es(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(Es);let t=e,n={};for(let r of Object.keys(t).sort())n[r]=Es(t[r]);return n}function Bc(e){let t=JSON.stringify(Es(e)??null),n=2166136261;for(let r=0;r<t.length;r++)n^=t.charCodeAt(r),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function Ss(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Ss(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))r[i]=t.has(i)?it:Ss(o,t);return r}function ug(){return{revision:0,entities:[],links:[],accepted:[]}}function Gc(e){return[...e].map(t=>he(t)).sort((t,n)=>{let r=t.kind.localeCompare(n.kind);return r!==0?r:t.id.localeCompare(n.id)})}function jc(e){return[...e].map(t=>he(t)).sort((t,n)=>t.id.localeCompare(n.id))}function lg(e){return[...e].map(t=>he(t)).sort((t,n)=>t.revision!==n.revision?t.revision-n.revision:t.patchId.localeCompare(n.patchId))}function Ci(e){return{revision:e.revision,entities:Gc(e.entities),links:jc(e.links),accepted:lg(e.accepted)}}function Si(e,t){return e.length<=t?e:[...e.slice(0,t),Z("over-limit",`truncated ${e.length-t} additional diagnostics`)]}function Uc(e,t){let n=e.order??0,r=t.order??0;return n!==r?n-r:e.op!==t.op?e.op.localeCompare(t.op):e.kind!==t.kind?e.kind.localeCompare(t.kind):e.id.localeCompare(t.id)}function ki(){return{version:1,fields:{patchId:{type:"string"},oldRevision:{type:"number",optional:!0},newRevision:{type:"number",optional:!0},revision:{type:"number",optional:!0},producer:{type:"string",optional:!0},jobId:{type:"string",optional:!0},contentRevisions:{type:"array",optional:!0},reasonCode:{type:"string",optional:!0},supersededBy:{type:"string",optional:!0},changedIdentities:{type:"array",optional:!0}}}}function Ri(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function pg(){return[Ri(pe(Ai,ki())),Ri(pe(Pi,ki())),Ri(pe(Ti,ki())),Ri(He(vn,ki()))]}function fg(e){return typeof e=="string"&&eg.has(e)}function Jc(){let e=ug();return{current(){return he(e)},begin(){let t=he(e),n=null;return{applyWorldRevision(r){n=Ci(r)},commit(){n&&(e=n),n=null},rollback(){e=he(t),n=null}}}}}function Yc(e,t,n){if(e===void 0)return;if(!Ne(e)){n.push(Z("invalid-schema","refs must be an object",t));return}nr(e,new Set(["contentId","contentRevision","binding","asset","identity"]),t,n);let r={};for(let i of["contentId","contentRevision","binding","asset","identity"]){let o=e[i];if(o!==void 0){if(!me(o)){n.push(Z("invalid-schema",`refs.${i} must be a non-empty string`,`${t}.${i}`));continue}r[i]=o}}return r}function mg(e,t,n){if(!Ne(e)){n.push(Z("invalid-schema","operation must be an object",t));return}nr(e,rg,t,n),(!me(e.op)||!Vc.has(e.op))&&n.push(Z("unknown-op",`unknown op "${String(e.op)}"`,`${t}.op`)),me(e.kind)||n.push(Z("missing-field","kind is required",`${t}.kind`));let r=e.id;me(r)||((e.op==="link"||e.op==="unlink")&&me(e.from)&&me(e.to)?r=`${e.kind??"link"}:${e.from}:${e.to}`:n.push(Z("missing-field","id is required",`${t}.id`))),e.order!==void 0&&!Ue(e.order)&&n.push(Z("invalid-schema","order must be an integer",`${t}.order`)),e.from!==void 0&&!me(e.from)&&n.push(Z("invalid-schema","from must be a non-empty string",`${t}.from`)),e.to!==void 0&&!me(e.to)&&n.push(Z("invalid-schema","to must be a non-empty string",`${t}.to`));let i=Yc(e.refs,`${t}.refs`,n);if(!me(e.op)||!Vc.has(e.op)||!me(e.kind)||!me(r))return;(e.op==="link"||e.op==="unlink")&&(!me(e.from)||!me(e.to))&&n.push(Z("missing-field","link/unlink require from and to",t));let o={op:e.op,kind:e.kind,id:r};return Ue(e.order)&&(o.order=e.order),e.value!==void 0&&(o.value=he(e.value)),me(e.from)&&(o.from=e.from),me(e.to)&&(o.to=e.to),i&&Object.keys(i).length&&(o.refs=i),o}function gg(e,t,n){if(!Ne(e)){n.push(Z("invalid-schema","precondition must be an object",t));return}if(!me(e.type)||!Zm.has(e.type)){n.push(Z("invalid-schema",`unknown precondition type "${String(e.type)}"`,`${t}.type`));return}let r=e.type;switch(nr(e,og[r],t,n),r){case"base-revision":if(!Ue(e.revision)||e.revision<0){n.push(Z("invalid-schema","revision must be an integer \u2265 0",`${t}.revision`));return}return{type:r,revision:e.revision};case"entity-revision":if(!me(e.kind)||!me(e.id)||!Ue(e.revision)||e.revision<1){n.push(Z("invalid-schema","kind, id, and revision \u2265 1 are required",t));return}return{type:r,kind:e.kind,id:e.id,revision:e.revision};case"entity-hash":if(!me(e.kind)||!me(e.id)||!me(e.hash)){n.push(Z("invalid-schema","kind, id, and hash are required",t));return}return{type:r,kind:e.kind,id:e.id,hash:e.hash};case"identity-required":case"identity-absent":if(!me(e.kind)||!me(e.id)){n.push(Z("invalid-schema","kind and id are required",t));return}return{type:r,kind:e.kind,id:e.id};case"capability":if(!me(e.name)){n.push(Z("invalid-schema","capability name is required",`${t}.name`));return}return{type:r,name:e.name};case"schema":if(!Ue(e.schemaVersion)||e.schemaVersion<1){n.push(Z("invalid-schema","schemaVersion must be an integer \u2265 1",`${t}.schemaVersion`));return}return{type:r,schemaVersion:e.schemaVersion}}}function zc(e,t,n){if(!Ne(e)){n.push(Z("invalid-schema","provenance is required",t));return}if(nr(e,ig,t,n),!me(e.producer)){n.push(Z("missing-field","producer is required",`${t}.producer`));return}let r={producer:e.producer};return e.jobId!==void 0&&(me(e.jobId)?r.jobId=e.jobId:n.push(Z("invalid-schema","jobId must be a non-empty string",`${t}.jobId`))),e.contentRevisions!==void 0&&(!Array.isArray(e.contentRevisions)||e.contentRevisions.some(i=>!me(i))?n.push(Z("invalid-schema","contentRevisions must be string[]",`${t}.contentRevisions`)):r.contentRevisions=[...e.contentRevisions]),r}function yg(e,t){let n=[],r="";try{r=JSON.stringify(e)??""}catch{return{errors:[Z("invalid-schema","patch is not JSON-serializable")]}}if(r.length>t.maxBytes&&n.push(Z("over-limit",`patch exceeds ${t.maxBytes} bytes`)),!Ne(e))return{errors:[Z("invalid-schema","patch must be an object"),...n]};nr(e,ng,"",n),me(e.patchId)||n.push(Z("missing-field","patchId is required","patchId")),e.schemaVersion!==tr&&n.push(Z("schema-mismatch",`schemaVersion must be ${tr}`,"schemaVersion")),(!Ue(e.baseRevision)||e.baseRevision<0)&&n.push(Z("invalid-schema","baseRevision must be an integer \u2265 0","baseRevision")),me(e.idempotencyKey)||n.push(Z("missing-field","idempotencyKey is required","idempotencyKey")),e.supersedes!==void 0&&!me(e.supersedes)&&n.push(Z("invalid-schema","supersedes must be a non-empty string","supersedes"));let i=zc(e.provenance,"provenance",n);Array.isArray(e.operations)?e.operations.length>t.maxOperations&&n.push(Z("over-limit",`operations exceed ${t.maxOperations}`,"operations")):n.push(Z("invalid-schema","operations must be an array","operations"));let o=[];if(Array.isArray(e.operations))for(let c=0;c<e.operations.length;c++){let m=mg(e.operations[c],`operations[${c}]`,n);m&&o.push(m)}let s=[];if(e.preconditions!==void 0)if(!Array.isArray(e.preconditions))n.push(Z("invalid-schema","preconditions must be an array","preconditions"));else for(let c=0;c<e.preconditions.length;c++){let m=gg(e.preconditions[c],`preconditions[${c}]`,n);m&&s.push(m)}if(n.length)return{errors:n};let a={patchId:e.patchId,schemaVersion:tr,baseRevision:e.baseRevision,idempotencyKey:e.idempotencyKey,operations:o,provenance:i};return s.length&&(a.preconditions=s),me(e.supersedes)&&(a.supersedes=e.supersedes),{patch:a,errors:n}}function hg(e){let t=new Map;for(let r of e.entities)t.set(r.id,he(r));let n=new Map;for(let r of e.links)n.set(r.id,he(r));return{revision:e.revision,entities:t,links:n,accepted:e.accepted.map(r=>he(r))}}function bn(e,t,n){let r=e.get(t);if(r&&!(n&&r.kind!==n))return r}function bg(e,t,n){let r=hg(e),i=[],o=[],s=[...t].sort(Uc),a=(m,u)=>{let E={kind:m.kind,id:m.id,revision:u?u.revision+1:1,hash:Bc(m.value??null),value:m.value===void 0?null:he(m.value),tombstoned:!1};m.refs&&(E.refs=he(m.refs)),r.entities.set(m.id,E),i.push({op:m.op,kind:m.kind,id:m.id})},c=m=>{!m.from||!m.to||r.links.set(m.id,{id:m.id,kind:m.kind,from:m.from,to:m.to,...m.value!==void 0?{value:he(m.value)}:{}})};for(let m=0;m<s.length;m++){let u=s[m],E=`operations[${m}]`,v=r.entities.get(u.id);switch(u.op){case"add":if(v&&!v.tombstoned){o.push(Z("duplicate-id",`identity "${u.id}" already exists`,E));break}a(u),u.from&&u.to&&c(u);break;case"replace":case"revise":if(!v||v.tombstoned){o.push(Z("missing-ref",`identity "${u.id}" is absent`,E));break}if(v.kind!==u.kind){o.push(Z("missing-ref",`identity "${u.id}" is kind "${v.kind}"`,E));break}a(u,v),u.from&&u.to&&c(u);break;case"remove":if(!v){o.push(Z("missing-ref",`identity "${u.id}" is absent`,E));break}r.entities.delete(u.id),r.links.delete(u.id);for(let[R,x]of[...r.links])(x.from===u.id||x.to===u.id)&&r.links.delete(R);i.push({op:u.op,kind:u.kind,id:u.id});break;case"tombstone":if(!v){o.push(Z("missing-ref",`identity "${u.id}" is absent`,E));break}v.tombstoned=!0,v.revision+=1,v.hash=Bc(null),v.value=null,r.links.delete(u.id);for(let[R,x]of[...r.links])(x.from===u.id||x.to===u.id)&&r.links.delete(R);i.push({op:u.op,kind:u.kind,id:u.id});break;case"link":if(v&&v.kind!==u.kind&&!v.tombstoned){o.push(Z("duplicate-id",`identity "${u.id}" already exists`,E));break}a(u,v&&!v.tombstoned?v:void 0),c(u);break;case"unlink":if(!r.links.has(u.id)&&!v){o.push(Z("missing-ref",`link "${u.id}" is absent`,E));break}r.links.delete(u.id),v&&(v.tombstoned=!0,v.revision+=1),i.push({op:u.op,kind:u.kind,id:u.id});break}}r.entities.size>n.maxEntities&&o.push(Z("over-limit",`entities exceed ${n.maxEntities}`));for(let m of r.links.values()){let u=r.entities.get(m.from),E=r.entities.get(m.to);(!u||u.tombstoned)&&o.push(Z("referential-integrity",`link "${m.id}" from "${m.from}" is absent`,`links.${m.id}.from`)),(!E||E.tombstoned)&&o.push(Z("referential-integrity",`link "${m.id}" to "${m.to}" is absent`,`links.${m.id}.to`))}return{world:r,changed:i,errors:o}}function vg(e,t,n,r){let i=[];e.baseRevision!==t.revision&&i.push(Z("stale-base",`baseRevision ${e.baseRevision} is stale; current revision is ${t.revision}`,"baseRevision",{expectedRevision:t.revision,actualRevision:e.baseRevision}));for(let o=0;o<(e.preconditions??[]).length;o++){let s=e.preconditions[o],a=`preconditions[${o}]`;switch(s.type){case"base-revision":s.revision!==t.revision&&i.push(Z("stale-base",`expected base revision ${s.revision}, current is ${t.revision}`,a,{expectedRevision:t.revision,actualRevision:s.revision}));break;case"entity-revision":{let c=bn(n,s.id,s.kind);c?c.revision!==s.revision&&i.push(Z("entity-revision",`identity "${s.id}" revision is ${c.revision}, expected ${s.revision}`,a)):i.push(Z("identity-required",`identity "${s.id}" is absent`,a));break}case"entity-hash":{let c=bn(n,s.id,s.kind);c?c.hash!==s.hash&&i.push(Z("entity-hash",`identity "${s.id}" hash is ${c.hash}, expected ${s.hash}`,a)):i.push(Z("identity-required",`identity "${s.id}" is absent`,a));break}case"identity-required":(!bn(n,s.id,s.kind)||bn(n,s.id,s.kind)?.tombstoned)&&i.push(Z("identity-required",`identity "${s.id}" is required`,a));break;case"identity-absent":bn(n,s.id,s.kind)&&!bn(n,s.id,s.kind)?.tombstoned&&i.push(Z("identity-absent",`identity "${s.id}" must be absent`,a));break;case"capability":r.has(s.name)||i.push(Z("capability-denied",`capability "${s.name}" is not granted`,a));break;case"schema":s.schemaVersion!==tr&&i.push(Z("schema-mismatch",`schema requirement ${s.schemaVersion} is unsupported`,a));break}}return i}function Eg(e){let t=new Map;for(let o of e){let s=t.get(o.from)??[];s.push(o.to),t.set(o.from,s),t.has(o.to)||t.set(o.to,t.get(o.to)??[])}let n=new Set,r=new Set,i=o=>{if(n.has(o))return!0;if(r.has(o))return!1;n.add(o);for(let s of t.get(o)??[])if(i(s))return!0;return n.delete(o),r.add(o),!1};for(let o of[...t.keys()].sort())if(i(o))return!0;return!1}function Fc(e,t,n){return e?e.hasRevision?.(t??"",n)?!0:(e.available??[]).some(r=>r.revision===n&&(t===void 0||!r.contentId||r.contentId===t)):!1}function Sg(e,t,n,r,i,o){let s=[],a=i?.listedIds?new Set(i.listedIds):void 0,c=o?.availableIds?new Set(o.availableIds):void 0,m=new Set(n.entities.filter(u=>!u.tombstoned).map(u=>u.id));for(let u of t)m.add(u.id);for(let u of e.provenance.contentRevisions??[])r&&!Fc(r,void 0,u)&&s.push(Z("content-unavailable",`content revision "${u}" is not available`,"provenance.contentRevisions"));for(let u=0;u<t.length;u++){let E=t[u],v=`operations[${u}]`,R=E.refs?.contentRevision,x=E.refs?.contentId;R&&r&&!Fc(r,x,R)&&s.push(Z("content-unavailable",`content revision "${R}" is not available`,`${v}.refs`));let h=E.refs?.binding??(E.kind==="presentation-binding"?E.id:void 0);h&&a&&!a.has(h)&&s.push(Z("binding-unavailable",`binding "${h}" is not listed`,`${v}`));let P=E.refs?.asset??(E.kind==="asset"?E.id:void 0);P&&c&&!c.has(P)&&s.push(Z("asset-unavailable",`asset "${P}" is not available`,`${v}`));let V=E.refs?.identity;V&&!m.has(V)&&s.push(Z("missing-ref",`ref identity "${V}" is absent`,`${v}.refs`))}return s}function $c(e){if(!bs.has(e.kind))return;let t=Ne(e.value)?e.value:{},n={id:e.id,version:Ue(t.version)&&t.version>=1?t.version:1,kind:me(t.kind)&&bs.has(t.kind)?t.kind:e.kind,mapLayer:t.mapLayer==="regional"?"regional":"local"};return t.frontier===!0&&(n.frontier=!0),Ne(t.metadata)&&(n.metadata=he(t.metadata)),n}function hs(e){if(!vs.has(e.kind)||!e.from||!e.to)return;let t=Ne(e.value)?e.value:{},n=t.visibility==="canonical"||t.visibility==="hidden"?t.visibility:"discoverable",r=t.access==="locked"||t.access==="disabled"?t.access:"open",i={id:e.id,version:Ue(t.version)&&t.version>=1?t.version:1,from:e.from,to:e.to,directed:t.directed===!0,kind:me(t.kind)?t.kind:"door",visibility:n,access:r};if(Ne(t.requirements)&&(i.requirements=he(t.requirements)),Ne(t.cost)){let o={};for(let[s,a]of Object.entries(t.cost))typeof a=="number"&&Number.isFinite(a)&&(o[s]=a);Object.keys(o).length&&(i.cost=o)}return Ne(t.metadata)&&(i.metadata=he(t.metadata)),i}function kg(e,t){let n=e.snapshot(),r=new Map(n.nodes.map(c=>[c.id,he(c)])),i=new Map(n.edges.map(c=>[c.id,he(c)])),o=[...t].sort(Uc),s=c=>{r.delete(c);for(let[m,u]of[...i])(u.from===c||u.to===c)&&i.delete(m)};for(let c of o)switch(c.op){case"add":{let m=$c(c);m&&!r.has(m.id)&&r.set(m.id,m);let u=hs(c);u&&!i.has(u.id)&&i.set(u.id,u);break}case"replace":case"revise":{let m=$c(c);m&&r.set(m.id,m);let u=hs(c);u&&i.set(u.id,u);break}case"link":{let m=hs(c);m&&i.set(m.id,m);break}case"remove":case"tombstone":bs.has(c.kind)&&s(c.id),vs.has(c.kind)&&i.delete(c.id);break;case"unlink":vs.has(c.kind)&&i.delete(c.id);break}let a=e.restore({...n,nodes:[...r.values()],edges:[...i.values()]});return a.ok?[]:a.errors.map(c=>Z("graph-apply-failed",c.detail,c.path))}function Rg(e,t){let n=[];if(!Ne(e))return{errors:[Z("invalid-snapshot","world must be an object",t)]};if((!Ue(e.revision)||e.revision<0)&&n.push(Z("invalid-snapshot","revision must be an integer \u2265 0",`${t}.revision`)),!Array.isArray(e.entities)||!Array.isArray(e.links)||!Array.isArray(e.accepted))return n.push(Z("invalid-snapshot","entities, links, and accepted must be arrays",t)),{errors:n};let r=[];for(let s=0;s<e.entities.length;s++){let a=e.entities[s],c=`${t}.entities[${s}]`;if(!Ne(a)){n.push(Z("invalid-snapshot","entity must be an object",c));continue}if(!me(a.kind)||!me(a.id)||!Ue(a.revision)||a.revision<1){n.push(Z("invalid-snapshot","kind, id, and revision are required",c));continue}if(!me(a.hash)||typeof a.tombstoned!="boolean"){n.push(Z("invalid-snapshot","hash and tombstoned are required",c));continue}let m={kind:a.kind,id:a.id,revision:a.revision,hash:a.hash,value:a.value??null,tombstoned:a.tombstoned};if(a.refs!==void 0){let u=Yc(a.refs,`${c}.refs`,n);u&&(m.refs=u)}r.push(m)}let i=[];for(let s=0;s<e.links.length;s++){let a=e.links[s],c=`${t}.links[${s}]`;if(!Ne(a)||!me(a.id)||!me(a.kind)||!me(a.from)||!me(a.to)){n.push(Z("invalid-snapshot","link id, kind, from, and to are required",c));continue}i.push({id:a.id,kind:a.kind,from:a.from,to:a.to,...a.value!==void 0?{value:a.value}:{}})}let o=[];for(let s=0;s<e.accepted.length;s++){let a=e.accepted[s],c=`${t}.accepted[${s}]`;if(!Ne(a)||!me(a.patchId)||!me(a.idempotencyKey)||!Ue(a.revision)||a.revision<1){n.push(Z("invalid-snapshot","accepted patch identity is invalid",c));continue}let m=zc(a.provenance,`${c}.provenance`,n);if(!m)continue;let u={patchId:a.patchId,idempotencyKey:a.idempotencyKey,revision:a.revision,provenance:m};me(a.supersededBy)&&(u.supersededBy=a.supersededBy),o.push(u)}return n.length?{errors:n}:{errors:[],world:Ci({revision:e.revision,entities:r,links:i,accepted:o})}}function Ig(e,t,n){if(!Ne(e)){n.push(Z("invalid-snapshot","audit record must be an object",t));return}if(e.outcome!=="accepted"&&e.outcome!=="rejected"&&e.outcome!=="superseded"){n.push(Z("invalid-snapshot","audit outcome is invalid",`${t}.outcome`));return}if(!me(e.patchId)||!me(e.idempotencyKey)||!Ue(e.at)){n.push(Z("invalid-snapshot","audit identity is invalid",t));return}if(!Ue(e.oldRevision)||!Ue(e.newRevision)||!Array.isArray(e.reasonCodes)){n.push(Z("invalid-snapshot","audit revisions are invalid",t));return}return{outcome:e.outcome,patchId:e.patchId,idempotencyKey:e.idempotencyKey,at:e.at,oldRevision:e.oldRevision,newRevision:e.newRevision,reasonCodes:e.reasonCodes.filter(r=>typeof r=="string"),changedIdentities:Array.isArray(e.changedIdentities)?e.changedIdentities:[],provenance:Ne(e.provenance)?e.provenance:{producer:"unknown"},patch:e.patch??null}}function Cg(e){if(!Ne(e))return{ok:!1,errors:[Z("invalid-snapshot","snapshot must be an object")]};if(e.schemaVersion!==Ii)return{ok:!1,errors:[Z("invalid-version","unknown snapshot schema version","schemaVersion")]};let t=Rg(e.world,"world");if(!t.world)return{ok:!1,errors:t.errors};let n=[...t.errors??[]];Array.isArray(e.audit)||n.push(Z("invalid-snapshot","audit must be an array","audit"));let r=[];if(Array.isArray(e.audit))for(let o=0;o<e.audit.length;o++){let s=Ig(e.audit[o],`audit[${o}]`,n);s&&r.push(s)}if(n.length)return{ok:!1,errors:n};let i={schemaVersion:Ii,world:t.world,audit:r};return e.graph!==void 0&&(i.graph=he(e.graph)),{ok:!0,snapshot:i}}function Ag(e={}){let t=e.persistence??Jc(),n=e.now??(()=>Date.now()),r=e.source??"world-patch",i={maxOperations:e.limits?.maxOperations??sg,maxDiagnostics:e.limits?.maxDiagnostics??ag,maxEntities:e.limits?.maxEntities??dg,maxBytes:e.limits?.maxBytes??cg},o=new Set([...Kc,...e.redact??[]]),s=new Set(e.capabilities??[]),a=e.graphPolicy??{},c=!1,m=[],u=[],E=[],v=null;function R(){if(c)throw new Error(tg)}function x(){let p=t.current();return{destroyed:c,revision:p.revision,entities:Gc(p.entities),links:jc(p.links),acceptedPatchIds:p.accepted.map(S=>S.patchId),events:[...E],lastRejection:v?he(v):null}}function h(p,S){let d={type:p,payload:S,source:r,kind:p===vn?"diagnostic":"state"};u.push(d),E.push(p),e.onEvent?.(d),e.router?.publish(d)}function P(p){m.push(p)}function V(p){let S=yg(p,i);if(!S.patch)return{ok:!1,errors:Si(S.errors,i.maxDiagnostics)};let d=S.patch,l=t.current(),g=l.accepted.find(F=>F.patchId===d.patchId);if(g&&!g.supersededBy)return{ok:!0,patch:d,next:he(l),changed:[],idempotent:!0};if(g?.supersededBy)return{ok:!1,patch:d,errors:[Z("superseded",`patch "${d.patchId}" was superseded by "${g.supersededBy}"`)]};let k=l.accepted.find(F=>F.idempotencyKey===d.idempotencyKey&&!F.supersededBy);if(k&&k.patchId!==d.patchId)return{ok:!1,patch:d,errors:[Z("idempotency-conflict",`idempotencyKey already used by patch "${k.patchId}"`,"idempotencyKey")]};if(d.supersedes&&!l.accepted.find(G=>G.patchId===d.supersedes))return{ok:!1,patch:d,errors:[Z("missing-ref",`superseded patch "${d.supersedes}" is unknown`,"supersedes")]};let N=new Map(l.entities.map(F=>[F.id,F])),A=vg(d,l,N,s),B=bg(l,d.operations,i),W=Sg(d,d.operations,l,e.content,e.bindings,e.assets),D=[...A,...B.errors,...W];if(!B.world)return{ok:!1,patch:d,errors:Si(D,i.maxDiagnostics)};let C=Ci({revision:l.revision+1,entities:B.world.entities.values(),links:B.world.links.values(),accepted:[...B.world.accepted.map(F=>d.supersedes&&F.patchId===d.supersedes?{...F,supersededBy:d.patchId}:F),{patchId:d.patchId,idempotencyKey:d.idempotencyKey,revision:l.revision+1,provenance:he(d.provenance)}]});(a.detectCycle?.(C)??(!a.allowCycles&&Eg(C.links)))&&D.push(Z("cycle","patch would introduce a link cycle"));for(let F of e.domainValidators??[])D.push(...F({patch:d,current:l,preview:C}).map(G=>G.code?G:Z("domain",G.detail,G.path)));if(D.length)return{ok:!1,patch:d,errors:Si(D,i.maxDiagnostics)};let M=d.supersedes?l.accepted.find(F=>F.patchId===d.supersedes):void 0;return{ok:!0,patch:d,next:C,changed:B.changed,supersede:M}}function j(p,S,d){let l=Si(p,i.maxDiagnostics);v=l;let g=t.current(),k=l[0]?.code??"invalid-schema";return S?(P({outcome:"rejected",patchId:S.patchId,idempotencyKey:S.idempotencyKey,at:n(),oldRevision:d?.oldRevision??g.revision,newRevision:d?.oldRevision??g.revision,reasonCodes:l.map(N=>N.code),changedIdentities:[],provenance:he(S.provenance),patch:he(S)}),h(Pi,{patchId:S.patchId,reasonCode:k,revision:g.revision}),h(vn,{patchId:S.patchId,reasonCode:k,revision:g.revision})):h(vn,{reasonCode:k,revision:g.revision}),{ok:!1,errors:l,inspect:x()}}function T(p){if(!e.graph||!p)return[];let S=e.graph.restore(p);return S.ok?[]:S.errors.map(d=>Z("graph-apply-failed",d.detail,d.path))}function _(p){let S=t.begin();S.applyWorldRevision(p),S.commit()}return{dryRun(p){R();let S=V(p);return S.ok?S.idempotent?{ok:!0,previewRevision:S.next.revision,changedIdentities:[],diagnostics:[]}:{ok:!0,previewRevision:S.next.revision,changedIdentities:S.changed,diagnostics:[]}:{ok:!1,errors:S.errors}},commit(p){R();let S=V(p);if(!S.ok)return j(S.errors,S.patch);let d=S.patch,l=t.current();if(S.idempotent)return{ok:!0,patchId:d.patchId,oldRevision:l.revision,newRevision:l.revision,changedIdentities:[],idempotent:!0,inspect:x()};let g=e.graph?.snapshot(),k=t.begin();try{if(k.applyWorldRevision(S.next),e.graph){let A=kg(e.graph,d.operations);if(A.length){try{k.rollback()}catch{}return _(l),T(g),j(A,d,{oldRevision:l.revision})}}k.commit()}catch(A){try{k.rollback()}catch{}return _(l),T(g),j([Z("publish-failed",A instanceof Error?A.message:"persistence failed")],d,{oldRevision:l.revision})}let N={patchId:d.patchId,oldRevision:l.revision,newRevision:S.next.revision,changedIdentities:S.changed,producer:d.provenance.producer,jobId:d.provenance.jobId,contentRevisions:d.provenance.contentRevisions};try{t.publish?.(N),S.supersede&&(h(Ti,{patchId:S.supersede.patchId,supersededBy:d.patchId,revision:S.next.revision}),P({outcome:"superseded",patchId:S.supersede.patchId,idempotencyKey:S.supersede.idempotencyKey,at:n(),oldRevision:l.revision,newRevision:S.next.revision,reasonCodes:["superseded"],changedIdentities:[],provenance:he(S.supersede.provenance),patch:{supersededBy:d.patchId}})),h(Ai,{patchId:N.patchId,oldRevision:N.oldRevision,newRevision:N.newRevision,producer:N.producer,jobId:N.jobId,contentRevisions:N.contentRevisions,changedIdentities:N.changedIdentities}),v=null,P({outcome:"accepted",patchId:d.patchId,idempotencyKey:d.idempotencyKey,at:n(),oldRevision:l.revision,newRevision:S.next.revision,reasonCodes:[],changedIdentities:S.changed,provenance:he(d.provenance),patch:he(d)})}catch(A){return _(l),T(g),j([Z("publish-failed",A instanceof Error?A.message:"publication failed")],d,{oldRevision:l.revision})}return{ok:!0,patchId:d.patchId,oldRevision:l.revision,newRevision:S.next.revision,changedIdentities:S.changed,inspect:x()}},inspect(){return R(),x()},snapshot(){R();let p={schemaVersion:Ii,world:Ci(t.current()),audit:he(m)};return e.graph&&(p.graph=e.graph.snapshot()),p},restore(p){R();let S=Cg(p);if(!S.ok)return S;let d=t.current(),l=m,g=e.graph?.snapshot();try{if(_(S.snapshot.world),m=he(S.snapshot.audit),v=null,S.snapshot.graph){let k=T(S.snapshot.graph);if(k.length)return _(d),T(g),m=l,{ok:!1,errors:k}}return{ok:!0,snapshot:S.snapshot}}catch{return _(d),T(g),m=l,{ok:!1,errors:[Z("invalid-snapshot","restore failed to persist")]}}},audit(p){R();let S=p?.redact!==!1,d=he(m);return S?Ss(d,o):d},events(){return R(),u.map(p=>he(p))},destroy(){c=!0,u.length=0,E.length=0}}}var wi=1,Qc=ii,ks=["binding-conflict","asset-failure","revision-rollback","sequence-interruption","text-only-fallback"],Zc=["state-projection","binding","content-revision","staging","asset","sequence","presentation","snapshot"],eu=[..._t,"privatePrompt","signedUrl","signedURL","signed_url","presignedUrl","password"],Pg=new Set(ks),Tg=new Set(Zc),wg=new Set(["signedUrl","signedURL","signed_url","presignedUrl","presignedURL"]),xg=/[?&](X-Amz-Signature|X-Amz-Credential|X-Amz-Security-Token|X-Goog-Signature|Signature|sig)=/i,_g=/https?:\/\/[^\s"'<>)\]]+/gi,Og="Selection trace has been destroyed",Dg=new Set(ks);function Ng(e){return typeof e=="string"&&Pg.has(e)}function Mg(e){return typeof e=="string"&&Tg.has(e)}function Ke(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Xc(e){return/^https?:\/\//i.test(e)?xg.test(e):!1}function tu(e){return Xc(e)?it:e.replace(_g,t=>Xc(t)?it:t)}function dt(e,t){if(e==null)return e;if(typeof e=="string")return tu(e);if(Array.isArray(e))return e.map(i=>dt(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))t.has(i)||wg.has(i)?r[i]=it:r[i]=dt(o,t);return r}function nu(e,t,n){if(e==null)return e;if(Array.isArray(e))return e.map(o=>nu(o,t,n));if(typeof e!="object")return it;let r=e,i={};for(let[o,s]of Object.entries(r))t.has(o)?i[o]=dt(s,n):i[o]=it;return i}function Lg(e,t){return t?!(t.kinds&&!t.kinds.includes(e.kind)||t.reasons&&!t.reasons.includes(e.reason)||t.correlationId&&e.correlationId!==t.correlationId||t.causationId&&e.causationId!==t.causationId||t.envelopeId&&e.envelopeId!==t.envelopeId||t.contentId&&![e.requestedContent?.contentId,e.activatedContent?.contentId].includes(t.contentId)||t.sequenceId&&e.sequence?.sequenceId!==t.sequenceId):!0}function Vg(e,t,n){return Dg.has(e)||n>=1?!0:n<=0?!1:(t*2654435761>>>0)/4294967296<n}function Bg(e,t){if(!e)return[];let n=new Set;for(let r of t)r.correlationId&&n.add(r.correlationId),r.causationId&&n.add(r.causationId),r.envelopeId&&n.add(r.envelopeId);return n.size===0?[]:e.records().filter(r=>r.correlationId!==void 0&&n.has(r.correlationId)||r.causationId!==void 0&&n.has(r.causationId)||r.envelopeId!==void 0&&n.has(r.envelopeId))}function Fg(e,t){return e.recordSelectionDecision(t)}function $g(e,t){return{...Ke(e),selectionTrace:t}}function Hg(e={}){let t=new Set([...eu,...e.redactedKeys??[]]),n=new Set(e.projectionWhitelist??[]),r=e.maxRecords??Qc,i=e.sampleRate??1,o=e.inspector,s=0,a=0,c=0,m=!1,u=[],E=[],v={},R=()=>{if(m)throw new Error(Og)},x=T=>u.filter(_=>Lg(_,T)).map(_=>Ke(_)),h=T=>nu(T,n,t),P=(T,_)=>{let f={index:_,kind:T.kind,reason:T.reason,summary:tu(String(T.summary))};return T.turn!==void 0&&(f.turn=T.turn),T.time!==void 0&&(f.time=T.time),T.correlationId&&(f.correlationId=T.correlationId),T.causationId&&(f.causationId=T.causationId),T.envelopeId&&(f.envelopeId=T.envelopeId),T.initiatingEventType&&(f.initiatingEventType=T.initiatingEventType),T.projectionRevision!==void 0&&(f.projectionRevision=T.projectionRevision),T.projection!==void 0?f.projection=h(T.projection):T.hostState!==void 0&&(f.projection=h(T.hostState)),T.bindings&&(f.bindings=dt(Ke(T.bindings.slice()),t)),T.winningBindingId!==void 0&&(f.winningBindingId=T.winningBindingId),T.rejectedBindingIds&&(f.rejectedBindingIds=T.rejectedBindingIds.slice()),T.defaultFallback!==void 0&&(f.defaultFallback=T.defaultFallback),T.requestedContent&&(f.requestedContent=dt(Ke(T.requestedContent),t)),T.activatedContent!==void 0&&(f.activatedContent=T.activatedContent?dt(Ke(T.activatedContent),t):null),T.staging&&(f.staging=dt(Ke(T.staging),t)),T.lastKnownGood!==void 0&&(f.lastKnownGood=T.lastKnownGood?dt(Ke(T.lastKnownGood),t):null),T.asset&&(f.asset=dt(Ke(T.asset),t)),T.sequence&&(f.sequence=dt(Ke(T.sequence),t)),T.presentation&&(f.presentation=dt(Ke(T.presentation),t)),T.snapshot&&(f.snapshot=Ke(T.snapshot)),f},V=T=>{for(u.push(T);u.length>r;)u.shift(),s+=1};return{recordSelectionDecision(T){R();let _=c;if(c+=1,!Vg(T.reason,_,i))return a+=1,null;let f=P(T,_);return V(f),Ke(f)},records(T){return R(),x(T)},query(T){return R(),x(T)},chain(T){return R(),x({correlationId:T})},exportTrace(T){R();let _=x(T),f=E.length>0?E.filter(S=>T?.correlationId?S.correlationId===T.correlationId:!0):Bg(o,_),p={schemaVersion:wi,redactedKeys:[...t],projectionWhitelist:[...n],dropped:s,sampledOut:a,records:_,inspectorRecords:Ke(f)};return v.revision!==void 0&&(p.snapshotRevision=v.revision),v.schemaVersion!==void 0&&(p.snapshotSchemaVersion=v.schemaVersion),v.seed&&(p.snapshotSeed=v.seed),p},importTrace(T){R();let _=typeof T=="string"?JSON.parse(T):T;if(_.schemaVersion!==wi)throw new Error("Selection trace: unsupported export schemaVersion");s=_.dropped??0,a=_.sampledOut??0,c=0,u.length=0,E=Ke(_.inspectorRecords??[]),v={},_.snapshotRevision!==void 0&&(v.revision=_.snapshotRevision),_.snapshotSchemaVersion!==void 0&&(v.schemaVersion=_.snapshotSchemaVersion),_.snapshotSeed&&(v.seed=_.snapshotSeed);for(let f of _.records??[]){let p=typeof f.index=="number"?f.index:c;c=Math.max(c,p+1),V(Ke(f))}},report(T){return R(),{schemaVersion:wi,records:x(T),dropped:s,sampledOut:a}},setSnapshotProvenance(T){R(),v={...v,...T}},reset(){R(),u.length=0,E=[],s=0,a=0,c=0,v={}},destroy(){m||(m=!0,u.length=0,E=[],v={})}}}var Cs=Jr,qg=Yr,Wg=["participant","image","canvas"],Kg="Compositor has been destroyed";function Gg(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function jg(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 Ug(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Jg(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:Ug(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function Rs(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=Jg(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:Gg(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function ru(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 iu(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function Is(e,t){return 255-Math.round((255-e)*(255-t)/255)}function Yg(e,t,n,r,i,o,s,a){let c=o/255*s;if(c<=0)return;let m=e[t],u=e[t+1],E=e[t+2],v=e[t+3]/255,R=n,x=r,h=i;a==="screen"&&(R=Is(m,n),x=Is(u,r),h=Is(E,i));let P=c+v*(1-c);if(P<=0){e[t]=0,e[t+1]=0,e[t+2]=0,e[t+3]=0;return}e[t]=Math.round((R*c+m*v*(1-c))/P),e[t+1]=Math.round((x*c+u*v*(1-c))/P),e[t+2]=Math.round((h*c+E*v*(1-c))/P),e[t+3]=Math.round(P*255)}function zg(e,t,n){if(e.width===t&&e.height===n)return{data:new Uint8ClampedArray(e.data),width:t,height:n,colorSpace:e.colorSpace??"srgb"};let r=new Uint8ClampedArray(t*n*4);for(let i=0;i<n;i++){let o=Math.min(e.height-1,Math.floor(i*e.height/n));for(let s=0;s<t;s++){let a=Math.min(e.width-1,Math.floor(s*e.width/t)),c=(o*e.width+a)*4,m=(i*t+s)*4;r[m]=e.data[c],r[m+1]=e.data[c+1],r[m+2]=e.data[c+2],r[m+3]=e.data[c+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function Xg(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 ou(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function su(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 xi(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 As(e){if(!e.layers.length)throw new Error("createCompositor: at least one layer is required");let t=new Set,n=e.clearPolicy??"transparent";if(n!=="transparent"&&n!=="opaque")throw new Error("createCompositor: clearPolicy must be transparent or opaque");let r=new Map;for(let p of e.layers){let S=Rs(p,n);if(t.has(S.id))throw new Error(`createCompositor: duplicate layer id "${S.id}"`);t.add(S.id),r.set(S.id,S)}let i=e.group,o=e.dpr&&e.dpr>0?e.dpr:1,s=Math.max(1,(e.width??320)|0),a=Math.max(1,(e.height??180)|0),c=o,m=e.offscreen!==!1,u=!e.target;if(!m&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let E=e.target??document.createElement("canvas"),v=E.getContext("2d",{alpha:!0});if(!v)throw new Error("createCompositor: host canvas has no 2d context");let R=!1,x=()=>{if(R)throw new Error(Kg)},h=()=>({width:Math.max(1,Math.round(s*c)),height:Math.max(1,Math.round(a*c))}),P=()=>{let p=h();E.width!==p.width&&(E.width=p.width),E.height!==p.height&&(E.height=p.height),E.style.width=`${s}px`,E.style.height=`${a}px`},V=()=>iu([...r.values()]).map(ru),j=p=>{if(p.source.kind==="image")return p.source.image;if(p.source.kind==="canvas")try{return su(p.source.canvas)}catch{return}try{let d=i.participant(p.id).cart.canvas;return d?(xi(d,p),su(d)):void 0}catch{return}},T=(p,S,d)=>{if(p.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&p.fill(0),e.host?.image){let l=zg(e.host.image,S,d);p.set(l.data);return}e.host?.color&&Xg(p,jg(e.host.color))},_=()=>{let{width:p,height:S}=h();P();let d=v.createImageData(p,S);T(d.data,p,S);for(let l of iu([...r.values()])){if(!l.visible||l.opacity<=0)continue;let g=j(l);if(!g)continue;let k=l.clearPolicy==="transparent",N=Math.min(p,g.width),A=Math.min(S,g.height);for(let B=0;B<A;B++)for(let W=0;W<N;W++){if(!ou(l.clip,W,B))continue;let D=(B*g.width+W)*4,C=g.data[D],w=g.data[D+1],M=g.data[D+2],F=g.data[D+3];k&&C===0&&w===0&&M===0||F<=0||Yg(d.data,(B*p+W)*4,C,w,M,F,l.opacity,l.blend)}}return v.putImageData(d,0,0),d};P();for(let p of V())try{xi(i.participant(p.id).cart.canvas,p)}catch{}return{get canvas(){return E},get width(){return s},get height(){return a},get dpr(){return c},compose(){return x(),_()},captureComposedFrame(){x();let p=_();return{imageData:p,pngDataUrl:E.toDataURL("image/png"),width:p.width,height:p.height,declaredOrder:V()}},resize(p,S,d){x(),s=Math.max(1,p|0),a=Math.max(1,S|0),d!==void 0&&(c=d>0?d:1);let l=h();i.resize(l.width,l.height),P()},setLayer(p,S){x();let d=r.get(p);if(!d)throw new Error(`createCompositor: unknown layer "${p}"`);let l=Rs({id:p,order:S.order??d.order,visible:S.visible??d.visible,opacity:S.opacity??d.opacity,blend:S.blend??d.blend,clip:S.clip===void 0?d.clip??void 0:S.clip,pointerEvents:S.pointerEvents??d.pointerEvents,clearPolicy:S.clearPolicy??d.clearPolicy,source:S.source??d.source},n);r.set(p,l);try{xi(i.participant(p).cart.canvas,l)}catch{}},addLayer(p){if(x(),r.has(p.id))throw new Error(`createCompositor: duplicate layer id "${p.id}"`);let S=Rs(p,n);r.set(S.id,S);try{xi(i.participant(S.id).cart.canvas,S)}catch{}},layer(p){x();let S=r.get(p);if(!S)throw new Error(`createCompositor: unknown layer "${p}"`);return ru(S)},layers(){return x(),V()},pointerTarget(p,S){x();let d=p|0,l=S|0,g=[...V()].reverse();for(let k of g){if(!k.visible||k.pointerEvents==="none"||!ou(k.clip,d,l))continue;let N=r.get(k.id);if(N&&N.source.kind!=="participant")return k.id;try{i.participant(k.id)}catch{continue}return k.id}},unmountLayer(p){if(x(),!r.has(p))throw new Error(`createCompositor: unknown layer "${p}"`);r.delete(p);try{i.detach(p)}catch{}},inspect(){x();let p=V();return{viewport:{width:s,height:a,dpr:c},clearPolicy:n,layers:p,declaredOrder:p.map(S=>S.id)}},destroy(){R||(R=!0,u&&E.parentNode&&E.remove())}}}var Ts=1,pu=["mask","polygon","rect","depth"],fu=["pass-through","absorb","exclusive","depth-ordered"],Qg=["hover","focus","selected"],mu=["idle","hover","focus","selected"],Zg="Semantic layer controller has been destroyed",ey=new Set(pu),ty=new Set(fu),ny=new Set(Cs);function ry(e){return typeof e=="string"&&ey.has(e)}function ws(e){return typeof e=="string"&&ty.has(e)}function _i(e){return typeof e=="string"&&ny.has(e)}function _s(e){let t=[];return e.mask&&t.push("mask"),e.polygon&&e.polygon.length>=3&&t.push("polygon"),e.rect&&t.push("rect"),typeof e.depth=="number"&&Number.isFinite(e.depth)&&t.push("depth"),t}function xs(e){return e.selected?"selected":e.focus?"focus":e.hover?"hover":"idle"}function Os(e){return JSON.parse(JSON.stringify(e))}function au(){return{hover:!1,focus:!1,selected:!1}}function Ps(e,t){return{hover:t?.hover??e.hover,focus:t?.focus??e.focus,selected:t?.selected??e.selected}}function En(e){return Os(e)}function rr(e){return Os(e??{})}function du(e,t){let n=e.visuals[t]??e.visuals.idle;return{opacity:n?.opacity??1,blend:n?.blend??e.blend,version:n?.version}}function iy(e,t){let n=e.bounds??{x:0,y:0,width:1,height:1};if(t.x<n.x||t.x>=n.x+n.width||t.y<n.y||t.y>=n.y+n.height||!Number.isInteger(e.width)||!Number.isInteger(e.height)||e.width<1||e.height<1||e.alpha.length!==e.width*e.height)return!1;let r=(t.x-n.x)/n.width,i=(t.y-n.y)/n.height,o=Math.min(e.width-1,Math.max(0,Math.floor(r*e.width))),s=Math.min(e.height-1,Math.max(0,Math.floor(i*e.height)));return(e.alpha[s*e.width+o]??0)>.5}function gu(e,t){return e.mask?iy(e.mask,t):e.polygon&&e.polygon.length>=3?$n({id:"",polygon:e.polygon},t):e.rect?$n({id:"",rect:e.rect},t):typeof e.depth=="number"&&Number.isFinite(e.depth)?t.x>=0&&t.x<=1&&t.y>=0&&t.y<=1:!1}function oy(e,t){let n=e.hitTest==="exclusive"?1:0,r=t.hitTest==="exclusive"?1:0;if(n!==r)return r-n;let i=e.geometry.depth??0,o=t.geometry.depth??0;return i!==o?o-i:t.order-e.order}function sy(e,t){if(!Number.isInteger(t.width)||!Number.isInteger(t.height)||t.width<1||t.height<1)throw new Error(`region "${e}" mask size is invalid`);if(!Array.isArray(t.alpha)||t.alpha.length!==t.width*t.height)throw new Error(`region "${e}" mask alpha length must be width*height`)}function cu(e,t){if(!t||typeof t!="object")throw new Error(`region "${e}" geometry is required`);if(t.mask&&sy(e,t.mask),t.polygon&&t.polygon.length>0&&t.polygon.length<3)throw new Error(`region "${e}" polygon needs 3+ points`);if(_s(t).length===0)throw new Error(`region "${e}" needs mask, polygon, rect, or depth`)}function uu(e,t){if(t!==void 0){if(!t||typeof t!="object")throw new Error(`region "${e}" visuals must be an object`);for(let n of mu){let r=t[n];if(r&&r.blend!==void 0&&!_i(r.blend))throw new Error(`region "${e}" ${n} blend is invalid`)}}}function lu(e,t){return e instanceof Error?e.message:t}function ay(e,t){try{return e.layer(t),!0}catch{return!1}}function Ds(e){if(!e?.regions?.length)throw new Error("createSemanticLayerController: at least one region is required");let t=e.compositor,n=e.visualLayers,r=e.originFrame??0,i=!1,o=new Map,s=()=>{if(i)throw new Error(Zg)};function a(h){let P=xs(h.state);return{id:h.declaration.id,geometryKinds:_s(h.geometry),hitTest:h.hitTest,blend:h.blend,order:h.order,depth:h.geometry.depth??0,state:{...h.state},appearance:P,a11y:h.a11y?{...h.a11y}:null,visual:du(h,P)}}function c(h){let P=xs(h.state),V=du(h,P);if(h.visualLayerId&&n&&V.version&&n.override(h.visualLayerId,V.version),h.compositorLayerId&&t){if(!ay(t,h.compositorLayerId))return;t.setLayer(h.compositorLayerId,{opacity:V.opacity,blend:V.blend,pointerEvents:h.hitTest==="pass-through"?"none":"auto"})}}function m(h){return{geometry:En(h.geometry),hitTest:h.hitTest,blend:h.blend,order:h.order,compositorLayerId:h.compositorLayerId,visualLayerId:h.visualLayerId,visuals:rr(h.visuals),state:{...h.state},a11y:h.a11y?{...h.a11y}:null}}function u(h,P){h.geometry=En(P.geometry),h.hitTest=P.hitTest,h.blend=P.blend,h.order=P.order,h.compositorLayerId=P.compositorLayerId,h.visualLayerId=P.visualLayerId,h.visuals=rr(P.visuals),h.state={...P.state},h.a11y=P.a11y?{...P.a11y}:null}for(let h of e.regions){if(!h?.id)throw new Error("createSemanticLayerController: region id is required");if(o.has(h.id))throw new Error(`createSemanticLayerController: duplicate region id "${h.id}"`);if(cu(h.id,h.geometry),uu(h.id,h.visuals),h.hitTest&&!ws(h.hitTest))throw new Error(`createSemanticLayerController: region "${h.id}" hitTest is invalid`);if(h.blend&&!_i(h.blend))throw new Error(`createSemanticLayerController: region "${h.id}" blend is invalid`);let P={declaration:h,geometry:En(h.geometry),hitTest:h.hitTest??"absorb",blend:h.blend??"source-over",order:h.order??0,compositorLayerId:h.compositorLayerId??null,visualLayerId:h.visualLayerId??null,visuals:rr(h.visuals),state:Ps(au(),h.initialState),a11y:null};o.set(h.id,P),c(P)}function E(){return[...o.values()].map(a).sort((h,P)=>h.id<P.id?-1:h.id>P.id?1:0)}function v(h){let P=[...o.values()].filter(V=>V.hitTest!=="pass-through"&&gu(V.geometry,h));return P.sort(oy),P[0]?.hitTest==="exclusive"?P.filter(V=>V.hitTest==="exclusive"):P[0]?.hitTest==="absorb"?[P[0]]:P}function R(){let h=[...o.values()].map(P=>({id:P.declaration.id,geometry:En(P.geometry),hitTest:P.hitTest,blend:P.blend,order:P.order,compositorLayerId:P.compositorLayerId,visualLayerId:P.visualLayerId,visuals:rr(P.visuals),state:{...P.state},a11y:P.a11y?{...P.a11y}:null})).sort((P,V)=>P.id<V.id?-1:P.id>V.id?1:0);return Os({schemaVersion:Ts,frame:r,regions:h})}function x(h){s();let P=[],V=l=>({ok:!1,errors:[...P,l]}),j=h;if(typeof h=="string")try{j=JSON.parse(h)}catch{return V("snapshot JSON is invalid")}if(!j||typeof j!="object"||Array.isArray(j))return V("snapshot must be an object");let T=j;if(T.schemaVersion!==Ts)return V("unsupported semantic layer snapshot schema");if(typeof T.frame!="number"||!Number.isFinite(T.frame))return V("frame must be finite");if(!Array.isArray(T.regions))return V("regions must be an array");let _=T.regions,f=new Map;for(let l of _){if(!l||typeof l.id!="string"||l.id.length===0){P.push("region id is required");continue}f.has(l.id)&&P.push(`duplicate region "${l.id}"`),f.set(l.id,l),o.has(l.id)||P.push(`unknown region "${l.id}"`),ws(l.hitTest)||P.push(`region "${l.id}" hitTest is invalid`),_i(l.blend)||P.push(`region "${l.id}" blend is invalid`),(typeof l.order!="number"||!Number.isFinite(l.order))&&P.push(`region "${l.id}" order must be finite`);try{cu(l.id,l.geometry),uu(l.id,l.visuals)}catch(g){P.push(lu(g,`region "${l.id}" is invalid`))}}for(let l of o.keys())f.has(l)||P.push(`missing region "${l}"`);if(P.length>0)return{ok:!1,errors:P};let p=r,S=new Map;for(let l of o.values())S.set(l.declaration.id,m(l));let d=()=>{r=p;for(let l of o.values()){let g=S.get(l.declaration.id);g&&u(l,g)}for(let l of o.values())c(l)};r=T.frame;for(let l of o.values()){let g=f.get(l.declaration.id);l.geometry=En(g.geometry),l.hitTest=g.hitTest,l.blend=g.blend,l.order=g.order,l.compositorLayerId=g.compositorLayerId??null,l.visualLayerId=g.visualLayerId??null,l.visuals=rr(g.visuals),l.state=Ps(au(),g.state),l.a11y=g.a11y&&typeof g.a11y.name=="string"&&typeof g.a11y.role=="string"?{name:g.a11y.name,role:g.a11y.role}:null}try{for(let l of o.values())c(l)}catch(l){return d(),V(lu(l,"visual layer apply failed"))}return{ok:!0,snapshot:R()}}return{list(){return s(),E()},inspect(){return s(),E()},inspectPublished(){return s(),E().map(h=>({id:h.id,geometryKinds:h.geometryKinds,a11y:h.a11y}))},get(h){s();let P=o.get(h);return P?a(P):void 0},geometryOf(h){s();let P=o.get(h);return P?En(P.geometry):void 0},setRegionState(h,P){s();let V=o.get(h);if(!V)throw new Error(`createSemanticLayerController: unknown region "${h}"`);let j={...V.state};V.state=Ps(V.state,P);try{c(V)}catch(T){throw V.state=j,T}},setRegionA11y(h,P){s();let V=o.get(h);if(!V)throw new Error(`createSemanticLayerController: unknown region "${h}"`);V.a11y=P?{name:P.name,role:P.role}:null},hitTest(h){s();let P=v(h);return P[0]?a(P[0]):void 0},hitTestAll(h){return s(),v(h).map(a)},snapshot(){return s(),R()},restore:x,destroy(){i||(i=!0,o.clear())},get frame(){return r}}}var Ns=1,hu=["layer","mask","sprite"],bu=["show","hide","replace","crossfade"],vu=":incoming",Di="visual.layer.revealed",ir="visual.layer.hidden",Ni="visual.layer.transition-started",Mi="visual.layer.transition-completed",or="visual.layer.failed",dy=[Di,ir,Ni,Mi,or],Eu="host.state.accepted",cy=["asset-failed","missing-source","unknown-layer","unknown-version","invalid-snapshot"],uy="Visual layer controller has been destroyed",ly=new Set(hu),py=new Set(bu);function Su(e){return typeof e=="string"&&ly.has(e)}function ku(e){return typeof e=="string"&&py.has(e)}function fy(e){return e===Di||e===ir||e===Ni||e===Mi||e===or}function Ru(e){return`${e}${vu}`}function my(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function gy(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Sn(e){return JSON.parse(JSON.stringify(e))}function Oi(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function yy(e){let t=Oi(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function hy(e){if(!e||typeof e!="object")return;let t=e;if(!(typeof t.id!="string"||typeof t.ref!="string"||typeof t.code!="string"||typeof t.message!="string"))return t}function Ze(e,t){if(t)return e.versions.find(n=>n.id===t)}function yu(e){return e?{...e}:null}function Ms(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=bt({originFrame:e.originFrame,reducedMotion:r}),s=e.sceneId??null,a=!1,c=0,m=new Map,u=new Map,E=new Map,v=new Map,R=[],x=[],h=()=>{if(a)throw new Error(uy)};function P(y){R.push(y),e.dispatch&&e.dispatch({type:y.type,kind:y.type===or?"diagnostic":"state",payload:y})}function V(y){x.push(y),P({type:or,atFrame:y.atFrame,layerId:y.layerId,version:y.version,progress:0,code:y.code})}function j(y,b){E.set(y,b)}function T(y){let b=E.get(y);if(b)return b;if(n?.get(y))return"ready";let I=n?.getProgress().items[y];return I?.state==="failed"?"failed":I?.state==="ready"?"ready":"pending"}function _(y){let b=u.get(y);if(b)return b.kind==="canvas"?{kind:"canvas",canvas:b.canvas}:{kind:"image",image:b.image}}function f(y,b){let I=Ze(y.declaration,b);return I?T(I.assetId)==="ready"&&!!_(I.assetId):!1}function p(y){return y.overrideVersion&&f(y,y.overrideVersion)?y.overrideVersion:y.committedVersion}function S(y,b){let I=Ze(y.declaration,b);return I?yu(v.get(I.assetId))??yu(I.provenance)??null:null}function d(y,b=0){return o.get(y)?.progress??b}function l(y,b,I){try{t.layer(y)}catch{t.addLayer({id:y,order:b,visible:!1,opacity:0,pointerEvents:I.pointerEvents??"none",blend:I.blend,clip:I.clip??void 0,clearPolicy:I.clearPolicy})}}function g(y){try{t.setLayer(y.incomingLayerId,{visible:!1,opacity:0})}catch{}}function k(){for(let y of m.values()){let b=p(y),I=Ze(y.declaration,b),L=y.transition,H=L?d(L.cueKey):0,ne=L?.kind==="crossfade"&&L.toVersion!==null&&f(y,L.toVersion);l(y.compositorLayerId,y.order,y);let z=y.visible,ie=1;L?.kind==="hide"?(ie=1-H,H>=1&&(z=!1)):L?.kind==="show"?(z=f(y,L.toVersion),ie=z?L.durationFrames===0?1:H:0):ne&&(ie=1-H);let oe=I?_(I.assetId):void 0;if(t.setLayer(y.compositorLayerId,{order:y.order,visible:z&&!!oe,opacity:ie,blend:y.blend,clip:y.clip??void 0,pointerEvents:y.pointerEvents,clearPolicy:y.clearPolicy,source:oe}),ne&&L){let Pe=Ze(y.declaration,L.toVersion),q=Pe?_(Pe.assetId):void 0;if(q){try{t.layer(y.incomingLayerId)}catch{t.addLayer({id:y.incomingLayerId,order:y.order+1,visible:!1,opacity:0,pointerEvents:"none",blend:y.blend,clip:y.clip??void 0,clearPolicy:y.clearPolicy})}t.setLayer(y.incomingLayerId,{order:y.order+1,visible:!0,opacity:H,blend:y.blend,clip:y.clip??void 0,pointerEvents:"none",clearPolicy:y.clearPolicy,source:q});continue}}g(y)}}function N(y){let b=p(y);return{id:y.declaration.id,kind:y.kind,visible:y.visible&&!!(b&&f(y,b)),activeVersion:b,pendingVersion:y.pendingVersion,committedVersion:y.committedVersion,opacity:t.layer(y.compositorLayerId).opacity,order:y.order,provenance:S(y,b),overrideVersion:y.overrideVersion,transition:y.transition?{kind:y.transition.kind,progress:d(y.transition.cueKey),fromVersion:y.transition.fromVersion,toVersion:y.transition.toVersion,cueKey:y.transition.cueKey,startFrame:y.transition.startFrame,durationFrames:y.transition.durationFrames,delayFrames:y.transition.delayFrames,easing:y.transition.easing}:null}}function A(y,b,I){y.committedVersion=b,y.pendingVersion=null,y.transition=null,y.visible=I,k(),P({type:I?Di:ir,atFrame:o.frame,layerId:y.declaration.id,version:b,progress:1})}function B(y){y.visible=!1,y.pendingVersion=null,y.transition=null,k(),P({type:ir,atFrame:o.frame,layerId:y.declaration.id,version:y.committedVersion??void 0,progress:1})}function W(y,b,I,L){let H=y.fallback;y.transition=null,y.pendingVersion=null,H==="hide"?y.visible=!1:typeof H=="object"&&H.version&&f(y,H.version)&&(y.committedVersion=H.version,y.visible=!0),k(),V({code:L?"asset-failed":"missing-source",layerId:y.declaration.id,version:b??void 0,assetId:I,message:L?L.message:`visual layer "${y.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:L})}function D(y){let b=y.transition;if(b?.kind==="hide")return B(y),!0;let I=y.pendingVersion??b?.toVersion??null;if(!I)return y.transition=null,!0;if(!Ze(y.declaration,I))return W(y,I),!0;if(f(y,I))return A(y,I,!0),!0;let L=Ze(y.declaration,I).assetId;return T(L)==="failed"?(W(y,I,L),!0):(y.transition=null,y.pendingVersion=I,k(),!1)}function C(){for(let y of m.values())if(!y.transition&&y.pendingVersion){if(f(y,y.pendingVersion))A(y,y.pendingVersion,!0);else if(T(Ze(y.declaration,y.pendingVersion)?.assetId??"")==="failed"){let b=Ze(y.declaration,y.pendingVersion);W(y,y.pendingVersion,b?.assetId)}}for(let y of m.values())y.overrideVersion&&f(y,y.overrideVersion)&&y.committedVersion!==y.overrideVersion&&A(y,y.overrideVersion,!0)}function w(y,b){j(y,"failed");for(let I of m.values()){let L=I.declaration.versions.find(oe=>oe.assetId===y);if(!L)continue;let H=Ze(I.declaration,I.pendingVersion),ne=Ze(I.declaration,I.transition?.toVersion??null),z=Ze(I.declaration,I.overrideVersion);if(H?.assetId===y||ne?.assetId===y||z?.assetId===y){I.transition&&o.cancel(I.transition.cueKey),z?.assetId===y&&(I.overrideVersion=null),W(I,L.id,y,b);continue}V({code:"asset-failed",layerId:I.declaration.id,version:L.id,assetId:y,message:b?.message??`asset "${y}" failed; prior frame kept`,atFrame:o.frame,failure:b}),k()}}function M(y){for(let b of y){let I=[...m.values()].find(L=>L.transition?.cueKey===b.idempotencyKey);if(!(!I||!I.transition))if(b.type===yt)P({type:Ni,atFrame:b.atFrame,layerId:I.declaration.id,version:I.transition.toVersion??void 0,kind:I.transition.kind,progress:b.progress}),k();else if(b.type===Tt){let L=I.transition.kind,H=I.transition.toVersion??void 0;D(I),P({type:Mi,atFrame:b.atFrame,layerId:I.declaration.id,version:H,kind:L,progress:1})}else(b.type===ht||b.type===mt)&&(I.transition=null,k())}}function F(){let y=R.slice(c).map(b=>Sn(b));return c=R.length,y}for(let y of e.layers){if(!y?.id)throw new Error("createVisualLayerController: layer id is required");if(m.has(y.id))throw new Error(`createVisualLayerController: duplicate layer id "${y.id}"`);if(!Su(y.kind))throw new Error(`createVisualLayerController: layer "${y.id}" kind is invalid`);if(!y.versions?.length)throw new Error(`createVisualLayerController: layer "${y.id}" needs versions`);let b=new Set;for(let ie of y.versions){if(!ie?.id||!ie.assetId)throw new Error(`createVisualLayerController: layer "${y.id}" versions need id and assetId`);if(b.has(ie.id))throw new Error(`createVisualLayerController: layer "${y.id}" duplicate version "${ie.id}"`);b.add(ie.id),ie.provenance&&v.set(ie.assetId,{...ie.provenance})}if(y.initialVersion&&!b.has(y.initialVersion))throw new Error(`createVisualLayerController: layer "${y.id}" unknown initialVersion`);let I=y.compositorLayerId??y.id,L=y.incomingLayerId??Ru(I),H=y.order??0,ne=y.pointerEvents??(y.kind==="mask"?"none":"auto"),z={declaration:y,compositorLayerId:I,incomingLayerId:L,kind:y.kind,order:H,blend:y.blend??"source-over",clip:y.clip?{...y.clip}:null,pointerEvents:ne,clearPolicy:y.clearPolicy??"opaque",fallback:y.fallback??i,visible:!!y.initialVersion,committedVersion:y.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};m.set(y.id,z),l(I,H,z)}k();function G(y){if(h(),!y||typeof y!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(!y.layerId)return{ok:!1,reason:"invalid",detail:"layerId is required"};let b=m.get(y.layerId);if(!b)return{ok:!1,reason:"invalid",detail:`unknown layer "${y.layerId}"`};if(!ku(y.kind))return{ok:!1,reason:"invalid",detail:"unsupported kind"};if(y.kind!=="hide"&&!y.toVersion)return{ok:!1,reason:"invalid",detail:"toVersion is required"};if(y.toVersion&&!Ze(b.declaration,y.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${y.toVersion}"`};let I={name:y.name,idempotencyKey:y.idempotencyKey,startFrame:y.startFrame,durationFrames:y.durationFrames,delayFrames:y.delayFrames,easing:y.easing,repeat:y.repeat,reducedMotion:y.reducedMotion,onDuplicate:y.onDuplicate??"replace"},L=o.snapshot().events.length,H=o.play(I);if(!H.ok)return H;let ne=o.snapshot().events.slice(L);return b.pendingVersion=y.kind==="hide"?b.committedVersion:y.toVersion??null,b.transition={kind:y.kind,cueKey:y.idempotencyKey,fromVersion:y.fromVersion??b.committedVersion,toVersion:y.kind==="hide"?b.committedVersion:y.toVersion??null,startFrame:H.cue.startFrame,durationFrames:H.cue.durationFrames,delayFrames:H.cue.delayFrames,easing:H.cue.easing},M(ne),k(),F(),H}function J(y){let b=Oi(y),I=typeof b?.sceneId=="string"?b.sceneId:void 0;if(e.sceneId&&I&&I!==e.sceneId)return;I&&(s=I);let L=typeof b?.layerId=="string"?b.layerId:typeof b?.overlayId=="string"?b.overlayId:void 0,H=typeof b?.version=="string"?b.version:void 0;if(L&&H){G({name:`visual:${L}:replace`,idempotencyKey:`visual:${L}:accepted`,layerId:L,kind:"replace",toVersion:H,durationFrames:2});return}for(let ne of e.onAccepted??[])G({name:`visual:${ne.layerId}:${ne.kind??"replace"}`,idempotencyKey:ne.idempotencyKey??`visual:${ne.layerId}:accepted`,layerId:ne.layerId,kind:ne.kind??"replace",toVersion:ne.toVersion,durationFrames:ne.durationFrames??2,delayFrames:ne.delayFrames,easing:ne.easing})}function $(){let y=[...m.values()].map(I=>{let L=N(I);return{id:I.declaration.id,kind:I.kind,visible:I.visible,committedVersion:I.committedVersion,pendingVersion:I.pendingVersion,activeVersion:L.activeVersion,opacity:L.opacity,order:I.order,overrideVersion:I.overrideVersion,provenance:L.provenance,fallback:I.fallback,transition:L.transition}}).sort((I,L)=>I.id<L.id?-1:I.id>L.id?1:0),b={};for(let[I,L]of[...E.entries()].sort(([H],[ne])=>H<ne?-1:H>ne?1:0))b[I]=L;return Sn({schemaVersion:Ns,frame:o.frame,sceneId:s,reducedMotion:r,layers:y,assets:b,events:R.map(I=>Sn(I)),diagnostics:x.map(I=>Sn(I))})}function X(y){h();let b=[],I=z=>{let ie={code:"invalid-snapshot",layerId:"",message:z,atFrame:o.frame};return{ok:!1,errors:[...b,ie]}},L=y;if(typeof y=="string")try{L=JSON.parse(y)}catch{return I("snapshot JSON is invalid")}if(!L||typeof L!="object"||Array.isArray(L))return I("snapshot must be an object");let H=L;if(H.schemaVersion!==Ns)return I("unsupported visual layer snapshot schema");if(typeof H.frame!="number"||!Number.isFinite(H.frame))return I("frame must be finite");if(!Array.isArray(H.layers))return I("layers must be an array");if(o=bt({originFrame:H.frame,reducedMotion:r}),s=typeof H.sceneId=="string"||H.sceneId===null?H.sceneId:s,R.length=0,x.length=0,c=0,Array.isArray(H.events)&&(R.push(...H.events.map(z=>Sn(z))),c=R.length),Array.isArray(H.diagnostics)&&x.push(...H.diagnostics.map(z=>Sn(z))),E.clear(),H.assets&&typeof H.assets=="object")for(let[z,ie]of Object.entries(H.assets))(ie==="ready"||ie==="failed"||ie==="pending")&&E.set(z,ie);let ne=new Map(H.layers.map(z=>[z.id,z]));for(let z of m.values()){let ie=ne.get(z.declaration.id);ie&&(z.visible=!!ie.visible,z.committedVersion=ie.committedVersion??null,z.pendingVersion=ie.pendingVersion??null,z.overrideVersion=ie.overrideVersion??null,z.transition=null,ie.transition&&o.play({name:`visual:${z.declaration.id}:${ie.transition.kind}`,idempotencyKey:ie.transition.cueKey,startFrame:ie.transition.startFrame,durationFrames:ie.transition.durationFrames,delayFrames:ie.transition.delayFrames,easing:ie.transition.easing,onDuplicate:"replace"}).ok&&(z.transition={kind:ie.transition.kind,cueKey:ie.transition.cueKey,fromVersion:ie.transition.fromVersion,toVersion:ie.transition.toVersion,startFrame:ie.transition.startFrame,durationFrames:ie.transition.durationFrames,delayFrames:ie.transition.delayFrames,easing:ie.transition.easing}))}return k(),{ok:!0,snapshot:$()}}return{registerSource(y,b){if(h(),typeof y!="string"||y.length===0)throw new Error("createVisualLayerController: assetId is required");if(b instanceof HTMLCanvasElement)u.set(y,{kind:"canvas",canvas:b});else if(b&&"data"in b&&"width"in b)u.set(y,{kind:"image",image:gy(b)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");C(),k()},handleHostEvent(y){if(h(),!y||typeof y!="object")return;if(y.type===Eu){J(y.payload);return}let b=yy(y.payload);if(b){if(y.type===je){j(b,"ready");let L=Oi(y.payload)?.resource;if(L&&typeof L=="object"&&"provenance"in L){let H=L.provenance;H&&v.set(b,{...H})}C(),k();return}if(y.type===$e){let I=Oi(y.payload);w(b,hy(I?.failure))}}},override(y,b){h();let I=m.get(y);if(!I)throw new Error(`createVisualLayerController: unknown layer "${y}"`);if(b===null){I.overrideVersion=null,k();return}if(!Ze(I.declaration,b))throw new Error(`createVisualLayerController: unknown version "${b}" on "${y}"`);if(I.overrideVersion=b,f(I,b)){I.transition&&o.cancel(I.transition.cueKey),A(I,b,!0);return}k()},play:G,step(y=1){h();let b=o.step(y);return M(b),C(),k(),F()},snapshot(){return h(),$()},restore:X,inspect(){return h(),k(),[...m.values()].map(N).sort((y,b)=>y.id<b.id?-1:y.id>b.id?1:0)},captureComposedFrame(){return h(),k(),t.captureComposedFrame()},destroy(){a||(a=!0,o.reset(),R.length=0,x.length=0)},get frame(){return o.frame},get sceneId(){return s},get compositor(){return t}}}var Ls=1,Li="presentation.sequence.state.requested",Vi="presentation.sequence.state.preloading",Bi="presentation.sequence.state.ready",Fi="presentation.sequence.state.started",$i="presentation.sequence.state.step-started",Hi="presentation.sequence.state.step-completed",qi="presentation.sequence.state.skipped",Wi="presentation.sequence.state.interrupted",Bs="presentation.sequence.state.failed",Ki="presentation.sequence.state.completed",Fs="presentation.sequence.diagnostic.lifecycle",Cu=[Li,Vi,Bi,Fi,$i,Hi,qi,Wi,Bs,Ki,Fs],Au=["audio","caption","semantic-region","visual-layer","cue"],Pu=["replace","queue","reject","ignore"],Tu=["duration","immediate"],wu=["unavailable","failed","unauthorized","muted"],xu=["requested","preloading","ready","playing","paused","skipped","interrupted","failed","completed"],by=new Set(Au),vy=new Set(Pu),Ey=new Set(Tu),Sy=new Set(wu),ky=new Set(Cu),Ry="Presentation sequence player has been destroyed";function se(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function we(e){return JSON.parse(JSON.stringify(e))}function xe(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Se(e){return typeof e=="string"&&e.length>0}function Vs(e,t,n){if(typeof e=="function"){n.push(se("callbacks-forbidden","authored sequences must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Vs(r,`${t}[${i}]`,n));return}if(xe(e))for(let[r,i]of Object.entries(e))Vs(i,t?`${t}.${r}`:r,n)}function kn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function ct(){return{version:1,fields:{sequenceId:{type:"string"},invocationId:{type:"string"},idempotencyKey:{type:"string"},stepId:{type:"string",optional:!0},fallbackId:{type:"string",optional:!0},reason:{type:"string",optional:!0}}}}function ut(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Iy(){return[ut(pe(Li,ct())),ut(pe(Vi,ct())),ut(pe(Bi,ct())),ut(pe(Fi,ct())),ut(pe($i,ct())),ut(pe(Hi,ct())),ut(pe(qi,ct())),ut(pe(Wi,ct())),ut(pe(Bs,ct())),ut(pe(Ki,ct())),ut(He(Fs,ct()))]}function _u(e){return typeof e=="string"&&ky.has(e)}function Cy(e){if(e)return"timeline"in e?e.timeline:e}function Ay(e,t,n){return n?!t||t==="skip"||t==="complete"?0:t.durationFrames:e}function Py(e,t){return(e.kind==="relative"||e.kind==="simultaneous"?e.delayFrames??0:0)+t}function Ty(e,t,n){if(!xe(e)||!Se(e.kind)){n.push(se("invalid-timing","timing.kind is required",t));return}if(e.kind==="absolute"){kn(e.atFrame)||n.push(se("invalid-timing","timing.atFrame must be >= 0",t));return}if(e.kind==="relative"){e.afterStepId!==void 0&&!Se(e.afterStepId)&&n.push(se("invalid-timing","timing.afterStepId must be a string",t)),e.delayFrames!==void 0&&!kn(e.delayFrames)&&n.push(se("invalid-timing","timing.delayFrames must be >= 0",t));return}if(e.kind==="simultaneous"){Se(e.withStepId)||n.push(se("invalid-timing","timing.withStepId is required",t)),e.order!==void 0&&!kn(e.order)&&n.push(se("invalid-timing","timing.order must be >= 0",t)),e.delayFrames!==void 0&&!kn(e.delayFrames)&&n.push(se("invalid-timing","timing.delayFrames must be >= 0",t));return}n.push(se("invalid-timing",`unsupported timing.kind "${String(e.kind)}"`,t))}function wy(e,t,n,r){if(!xe(e)||!Se(e.kind)){r.push(se("invalid-effect","effect.kind is required",n));return}e.kind!==t&&r.push(se("kind-mismatch",`effect.kind "${e.kind}" must match track kind "${t}"`,n)),e.kind==="audio"&&!Se(e.assetBinding)&&r.push(se("invalid-effect","assetBinding is required",n)),e.kind==="caption"&&(Se(e.textBinding)||r.push(se("invalid-effect","textBinding is required",n)),typeof e.visible!="boolean"&&r.push(se("invalid-effect","visible must be boolean",n))),e.kind==="semantic-region"&&(Se(e.regionBinding)||r.push(se("invalid-effect","regionBinding is required",n)),xe(e.state)||r.push(se("invalid-effect","state is required",n))),e.kind==="visual-layer"&&(Se(e.layerBinding)||r.push(se("invalid-effect","layerBinding is required",n)),e.transition!=="show"&&e.transition!=="hide"&&r.push(se("invalid-effect","transition must be show or hide",n))),e.kind==="cue"&&!Se(e.name)&&r.push(se("invalid-effect","cue name is required",n))}function xy(e){let t=new Map;for(let n of e.tracks)for(let r of n.steps)t.set(r.id,{track:n,step:r});return t}function sr(e){let t=[];if(Vs(e,"",t),!xe(e))return{ok:!1,errors:[se("invalid-definition","sequence must be a JSON object")]};if(Se(e.id)||t.push(se("invalid-id","id is required","id")),!Array.isArray(e.tracks)||e.tracks.length===0)return t.push(se("invalid-tracks","tracks must be a non-empty array","tracks")),{ok:!1,errors:t};let n=e.interruptionPolicy??"replace";vy.has(String(n))||t.push(se("invalid-policy","unsupported interruptionPolicy","interruptionPolicy"));let r=new Set,i=new Set,o=[];e.tracks.forEach((u,E)=>{let v=`tracks[${E}]`;if(!xe(u)){t.push(se("invalid-track","track must be an object",v));return}if(!Se(u.id)){t.push(se("invalid-track","track id is required",`${v}.id`));return}if(i.has(u.id)&&t.push(se("duplicate-track",`duplicate track id "${u.id}"`,v)),i.add(u.id),!by.has(String(u.kind))){t.push(se("invalid-kind","unsupported track kind",`${v}.kind`));return}if(!Array.isArray(u.steps)||u.steps.length===0){t.push(se("invalid-steps","track steps are required",`${v}.steps`));return}let R=[];u.steps.forEach((x,h)=>{let P=`${v}.steps[${h}]`;if(!xe(x)){t.push(se("invalid-step","step must be an object",P));return}if(!Se(x.id)){t.push(se("invalid-step","step id is required",`${P}.id`));return}r.has(x.id)&&t.push(se("duplicate-step",`duplicate step id "${x.id}"`,P)),r.add(x.id),kn(x.durationFrames)||t.push(se("invalid-duration","durationFrames must be >= 0",`${P}.durationFrames`)),x.delayFrames!==void 0&&!kn(x.delayFrames)&&t.push(se("invalid-delay","delayFrames must be >= 0",`${P}.delayFrames`)),x.completion!==void 0&&!Ey.has(String(x.completion))&&t.push(se("invalid-completion","unsupported completion rule",`${P}.completion`)),Ty(x.timing,`${P}.timing`,t),wy(x.effect,String(u.kind),`${P}.effect`,t),R.push(we(x))}),o.push({id:u.id,kind:u.kind,steps:R})});let s=[],a=new Set;e.fallbacks!==void 0&&(Array.isArray(e.fallbacks)?e.fallbacks.forEach((u,E)=>{let v=`fallbacks[${E}]`;if(!xe(u)||!Se(u.id)){t.push(se("invalid-fallback","fallback id is required",v));return}a.has(u.id)&&t.push(se("duplicate-fallback",`duplicate fallback id "${u.id}"`,v)),a.add(u.id);let R=u.when;if((!xe(R)||R.capability!=="audio"||!Sy.has(String(R.status)))&&t.push(se("invalid-fallback","unsupported fallback.when",`${v}.when`)),u.omitTrackIds!==void 0)if(!Array.isArray(u.omitTrackIds))t.push(se("invalid-fallback","omitTrackIds must be an array",v));else for(let x of u.omitTrackIds)i.has(String(x))||t.push(se("unknown-track",`omitTrackIds references unknown track "${String(x)}"`,v));s.push(we(u))}):t.push(se("invalid-fallbacks","fallbacks must be an array","fallbacks")));let c={id:String(e.id??""),tracks:o,interruptionPolicy:n,fallbacks:s},m=xy(c);for(let{step:u}of m.values())u.timing.kind==="relative"&&u.timing.afterStepId&&(m.has(u.timing.afterStepId)||t.push(se("unknown-step",`afterStepId "${u.timing.afterStepId}" does not exist`,`steps.${u.id}`))),u.timing.kind==="simultaneous"&&!m.has(u.timing.withStepId)&&t.push(se("unknown-step",`withStepId "${u.timing.withStepId}" does not exist`,`steps.${u.id}`));return t.length>0?{ok:!1,errors:t}:{ok:!0,sequence:we(c)}}function Iu(e,t,n,r){let i=[];for(let u of e.tracks)if(!t.has(u.id))for(let E of u.steps)i.push({track:u,step:E});let o=new Map(i.map(u=>[u.step.id,u])),s=new Map,a=new Set;function c(u){let E=s.get(u);if(E!==void 0)return E;let v=o.get(u);if(!v||a.has(u))return n;a.add(u);let R=Py(v.step.timing,v.step.delayFrames??0),x=n+R;if(v.step.timing.kind==="absolute")x=n+v.step.timing.atFrame+(v.step.delayFrames??0);else if(v.step.timing.kind==="relative"&&v.step.timing.afterStepId){let h=o.get(v.step.timing.afterStepId);if(h){let P=c(h.step.id),V=m(h.step);x=P+V+R}}else v.step.timing.kind==="simultaneous"&&(x=c(v.step.timing.withStepId)+R);return a.delete(u),s.set(u,x),x}function m(u){return u.completion==="immediate"?0:Ay(u.durationFrames,u.reducedMotion,r)}return i.map(({track:u,step:E})=>{let v=c(E.id),R=m(E),x=E.timing.kind==="simultaneous"?E.timing.order??0:0;return{id:E.id,trackId:u.id,trackKind:u.kind,order:x,startFrame:v,durationFrames:R,endFrame:v+R,effect:we(E.effect),restoreOnComplete:E.restoreOnComplete===!0,reducedSensory:E.reducedSensory??"keep"}}).sort(Ou)}function Ou(e,t){return e.startFrame!==t.startFrame?e.startFrame-t.startFrame:e.order!==t.order?e.order-t.order:e.trackId!==t.trackId?e.trackId<t.trackId?-1:1:e.id<t.id?-1:e.id>t.id?1:0}function Ot(e,t){if(!t)return;let n=e?.[t];return Se(n)?n:void 0}function _y(e,t){let n=e.snapshot().events;for(let r=n.length-1;r>=0;r--){let i=n[r];if(i&&i.idempotencyKey===t&&i.type===un)return i.reason??"asset-failed"}}function Oy(e,t,n,r){if(!t.tracks.some(s=>s.kind==="audio"))return"ok";if(!e)return"unavailable";let o=(r&&"broker"in r?r:void 0)?.broker;if(o?.muted)return"muted";for(let s of t.tracks)if(s.kind==="audio")for(let a of s.steps){if(a.effect.kind!=="audio")continue;let c=Ot(n.assets,a.effect.assetBinding);if(!c)continue;let m=Ot(n.channels,a.effect.channelBinding);if(o&&!o.isAuthorized(m)&&o.inspect().authorized.length>0)return"unauthorized";if(o?.assetStatus(c)==="failed")return"failed"}return"ok"}function $s(e={}){let t=e.originFrame??0,n=!!e.reducedMotion,r=!!e.reducedSensory,i=e.semantic,o=e.visual,s=Cy(e.audio),a=e.audio,c=new Map,m=bt({originFrame:t,reducedMotion:n}),u=t,E=!1,v=!1,R=null,x=null,h=[],P=new Map,V=[],j=new Map;for(let b of e.sequences??[]){let I=sr(b);I.ok&&c.set(I.sequence.id,I.sequence)}function T(){if(v)throw new Error(Ry)}function _(b){V.push(we(b))}function f(b,I,L){let H={type:I,atFrame:u,sequenceId:b.sequenceId,invocationId:b.invocationId,idempotencyKey:b.idempotencyKey};L?.stepId&&(H.stepId=L.stepId),b.selectedFallbackId&&(H.fallbackId=b.selectedFallbackId),L?.reason&&(H.reason=L.reason),_(H)}function p(b){let I=[...b.steps.values()].filter(H=>H.phase==="completed").map(H=>H.resolved.id).sort(),L=[...b.steps.values()].filter(H=>H.phase==="active").map(H=>H.resolved.id).sort();return{sequenceId:b.sequenceId,invocationId:b.invocationId,idempotencyKey:b.idempotencyKey,phase:b.phase,playhead:Math.max(0,u-b.startedAtFrame),startedAtFrame:b.startedAtFrame,completedStepIds:I,activeStepIds:L,selectedFallbackId:b.selectedFallbackId}}function S(b,I){return Ou(b.resolved,I.resolved)}function d(b,I){return`${b.invocationId}:${I}`}function l(b,I){return`${b.invocationId}:${I}`}function g(b){if(b.audioKey&&s?.cancel(b.audioKey),b.captionId){let I=P.get(b.captionId);I&&P.set(b.captionId,{...I,visible:!1})}if(b.regionId&&b.regionKeys&&i){let I={};for(let L of b.regionKeys)I[L]=!1;i.setRegionState(b.regionId,I)}b.visualLayerId&&o&&b.visualTransition==="hide"?o.play({name:`sequence:${b.visualLayerId}:restore`,idempotencyKey:`sequence:${b.visualLayerId}:restore:${u}`,layerId:b.visualLayerId,kind:"show",toVersion:b.visualVersion,durationFrames:0,onDuplicate:"replace"}):b.visualLayerId&&o&&b.visualTransition==="show"&&o.play({name:`sequence:${b.visualLayerId}:restore`,idempotencyKey:`sequence:${b.visualLayerId}:restore:${u}`,layerId:b.visualLayerId,kind:"hide",durationFrames:0,onDuplicate:"replace"}),b.cueKey&&m.cancel(b.cueKey)}function k(b,I){let{resolved:L}=I,H={},ne=r||L.reducedSensory==="skip-audio"||L.reducedSensory==="complete";if(L.effect.kind==="audio"){let z=Ot(b.bindings.assets,L.effect.assetBinding);if(z&&s&&!ne){let ie=l(b,L.id);s.play({name:L.id,idempotencyKey:ie,assetId:z,channelId:Ot(b.bindings.channels,L.effect.channelBinding),durationFrames:L.durationFrames,onDuplicate:"replace"}),H.audioKey=ie,_y(s,ie)&&(I.applied=H,A(b,"failed"),s.cancel(ie),H.audioKey=void 0)}}else if(L.effect.kind==="caption"){let z=Ot(b.bindings.captions,L.effect.textBinding)??"",ie=d(b,L.effect.textBinding);P.set(ie,{id:ie,text:z,visible:L.effect.visible}),H.captionId=ie}else if(L.effect.kind==="semantic-region"){let z=Ot(b.bindings.regions,L.effect.regionBinding);z&&i&&(i.setRegionState(z,L.effect.state),H.regionId=z,H.regionKeys=["hover","focus","selected"].filter(ie=>L.effect.kind==="semantic-region"&&L.effect.state[ie]!==void 0))}else if(L.effect.kind==="visual-layer"){let z=Ot(b.bindings.layers,L.effect.layerBinding),ie=Ot(b.bindings.versions,L.effect.versionBinding);z&&o&&(o.play({name:`sequence:${L.id}`,idempotencyKey:l(b,L.id),layerId:z,kind:L.effect.transition,toVersion:L.effect.transition==="hide"?void 0:ie,durationFrames:L.durationFrames,onDuplicate:"replace"}),H.visualLayerId=z,H.visualVersion=ie??o.inspect().find(oe=>oe.id===z)?.committedVersion??void 0,H.visualTransition=L.effect.transition)}else if(L.effect.kind==="cue"){let z=l(b,L.id);m.play({name:L.effect.name,idempotencyKey:z,durationFrames:L.durationFrames,easing:L.effect.easing,onDuplicate:"replace"}),H.cueKey=z}I.applied=H}function N(b,I,L){if(I.phase==="active"){if(L){I.applied&&g(I.applied),I.phase="skipped";return}I.resolved.restoreOnComplete&&I.applied?g(I.applied):I.applied?.audioKey&&I.resolved.effect.kind,I.phase="completed",f(b,Hi,{stepId:I.resolved.id})}}function A(b,I){let L=c.get(b.sequenceId);if(!L)return!1;let H=(L.fallbacks??[]).find(z=>z.when.capability==="audio"&&z.when.status===I);if(!H)return!1;if(b.selectedFallbackId===H.id)return!0;b.selectedFallbackId=H.id;let ne=new Set(H.omitTrackIds??[]);for(let z of b.steps.values())ne.has(z.resolved.trackId)&&(z.phase==="pending"?z.phase="skipped":z.phase==="active"&&N(b,z,!0));return!0}function B(b){let I=[...b.steps.values()].filter(L=>L.phase==="pending"&&L.resolved.startFrame<=u).sort(S);for(let L of I)L.phase="active",f(b,$i,{stepId:L.resolved.id}),k(b,L),L.resolved.durationFrames===0&&L.phase==="active"&&N(b,L,!1)}function W(b){let I=[...b.steps.values()].filter(L=>L.phase==="active"&&u>=L.resolved.endFrame).sort(S);for(let L of I)N(b,L,!1)}function D(b){return b.phase==="playing"||b.phase==="paused"||b.phase==="ready"||b.phase==="preloading"||b.phase==="requested"}function C(b){!D(b)||[...b.steps.values()].some(L=>L.phase==="pending"||L.phase==="active")||(b.phase="completed",b.nextAvailable=!0,f(b,Ki),R===b&&(R=null,E=!1),J())}function w(b,I){for(let L of[...b.steps.values()].sort(S))L.phase==="active"?N(b,L,!0):L.phase==="pending"&&(L.phase="skipped")}function M(b,I,L,H,ne=u){let z=Iu(b,H,ne,n),ie=new Map;for(let oe of z)ie.set(oe.id,{resolved:oe,phase:"pending",applied:null});return{sequenceId:b.id,invocationId:I.invocationId,idempotencyKey:I.idempotencyKey??I.invocationId,bindings:we(I.bindings??{}),interruptionPolicy:b.interruptionPolicy??"replace",selectedFallbackId:L,phase:"requested",startedAtFrame:u,steps:ie,nextAvailable:!1}}function F(b,I){if(!Se(I.invocationId))return{ok:!1,reason:"invalid",detail:"invocationId is required"};let L=I.idempotencyKey??I.invocationId;if(j.get(L)&&R&&R.idempotencyKey===L)return{ok:!0,invocation:p(R)};let ne=I.bindings??{};_({type:Li,atFrame:u,sequenceId:b.id,invocationId:I.invocationId,idempotencyKey:L});let z={sequenceId:b.id,invocationId:I.invocationId,idempotencyKey:L,bindings:we(ne),interruptionPolicy:b.interruptionPolicy??"replace",selectedFallbackId:null,phase:"preloading",startedAtFrame:u,steps:new Map,nextAvailable:!1};f(z,Vi);let oe=Oy(s,b,ne,a),Pe=null,q=new Set;if(oe!=="ok"){let le=(b.fallbacks??[]).find(O=>O.when.capability==="audio"&&O.when.status===oe);if(le){Pe=le.id;for(let O of le.omitTrackIds??[])q.add(O)}else if(oe==="unavailable"||oe==="failed")for(let O of b.tracks)O.kind==="audio"&&q.add(O.id)}if(r)for(let le of b.tracks)le.kind==="audio"&&q.add(le.id);let U=M(b,{...I,idempotencyKey:L},Pe,q);return U.phase="ready",f(U,Bi),U.phase="playing",f(U,Fi),R=U,x={sequenceId:b.id,options:{...I,idempotencyKey:L}},j.set(L,U.invocationId),W(U),B(U),C(U),{ok:!0,invocation:p(U)}}function G(b){if(!R||!D(R))return;let I=R;w(I,!0),I.phase="interrupted",I.nextAvailable=!0,f(I,Wi,{reason:b}),R=null,E=!1}function J(){if(R||E)return;let b=h.shift();if(!b)return;let I=c.get(b.sequenceId);I&&F(I,b.options)}function $(b,I){let L=new Set;if(I){let H=(b.fallbacks??[]).find(ne=>ne.id===I);for(let ne of H?.omitTrackIds??[])L.add(ne)}return Iu(b,L,t,n).map(H=>({sequenceId:b.id,stepId:H.id,trackId:H.trackId,kind:H.trackKind,startFrame:H.startFrame,durationFrames:H.durationFrames,order:H.order,effect:we(H.effect)}))}function X(){return we({schemaVersion:Ls,frame:u,reducedMotion:n,reducedSensory:r,paused:E,active:R?p(R):null,queue:h.map(b=>({sequenceId:b.sequenceId,invocationId:b.options.invocationId,idempotencyKey:b.options.idempotencyKey??b.options.invocationId,bindings:we(b.options.bindings??{})})),captions:[...P.values()].sort((b,I)=>b.id<I.id?-1:1),events:V.map(b=>we(b)),bindings:R?we(R.bindings):null})}function y(b){for(let I of[...b.steps.values()].sort(S)){if(I.phase!=="active")continue;let L=Math.max(0,I.resolved.endFrame-u);I.resolved={...I.resolved,durationFrames:L,endFrame:u+L},k(b,I)}}return{define(b){T();let I=sr(b);return I.ok&&c.set(I.sequence.id,I.sequence),I},playSequence(b,I){T();let L=c.get(b);if(!L)return{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${b}"`};let H=I.idempotencyKey??I.invocationId;if(R&&D(R)&&R.idempotencyKey===H)return{ok:!0,invocation:p(R)};if(R&&D(R)){let ne=R.interruptionPolicy;if(ne==="reject")return{ok:!1,reason:"busy",detail:"sequence is already playing"};if(ne==="ignore")return{ok:!0,invocation:p(R)};if(ne==="queue")return h.push({sequenceId:b,options:{...I,idempotencyKey:H}}),{ok:!0,invocation:{sequenceId:b,invocationId:I.invocationId,idempotencyKey:H,phase:"requested",playhead:0,startedAtFrame:u,completedStepIds:[],activeStepIds:[],selectedFallbackId:null}};G("replace")}return F(L,{...I,idempotencyKey:H})},skip(b){if(T(),!R||!D(R)||b&&R.invocationId!==b)return!1;let I=R;return w(I,!0),I.phase="skipped",I.nextAvailable=!0,f(I,qi),R=null,E=!1,J(),!0},replay(b){T();let I=R&&D(R)?R:null,L=I?{sequenceId:I.sequenceId,options:{invocationId:I.invocationId,idempotencyKey:I.idempotencyKey,bindings:we(I.bindings)}}:x;if(!L)return{ok:!1,reason:"invalid",detail:"no sequence to replay"};if(b&&L.options.invocationId!==b)return{ok:!1,reason:"invalid",detail:"unknown invocation"};let H=c.get(L.sequenceId);return H?(j.delete(L.options.idempotencyKey??L.options.invocationId),I&&(w(I,!0),R=null,E=!1),F(H,L.options)):{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${L.sequenceId}"`}},pause(){return T(),!R||R.phase!=="playing"?!1:(E=!0,R.phase="paused",!0)},resume(){return T(),!R||R.phase!=="paused"?!1:(E=!1,R.phase="playing",!0)},cancel(b){return T(),!R||!D(R)||b&&R.invocationId!==b?!1:(G("cancel"),J(),!0)},step(b=1){T();let I=Number.isFinite(b)?Math.max(0,Math.floor(b)):0,L=V.length;if(E)return[];for(let H=0;H<I;H++)u+=1,m.step(1),s?.step(1),o?.step(1),R&&D(R)?(W(R),B(R),C(R)):J();return V.slice(L).map(H=>we(H))},snapshot(){return T(),X()},restore(b){T();let I={frame:u,paused:E,active:R,queue:h.slice(),captions:new Map(P),events:V.slice(),seenKeys:new Map(j),presentation:m},L=oe=>{u=I.frame,E=I.paused,R=I.active,h.length=0,h.push(...I.queue),P.clear();for(let[Pe,q]of I.captions)P.set(Pe,q);V.length=0,V.push(...I.events),j.clear();for(let[Pe,q]of I.seenKeys)j.set(Pe,q);return m=I.presentation,{ok:!1,errors:oe}},H=b;if(typeof b=="string")try{H=JSON.parse(b)}catch{return L([se("invalid-json","snapshot JSON is invalid")])}if(!xe(H))return L([se("invalid-snapshot","snapshot must be a JSON object")]);let ne=[];H.schemaVersion!==Ls&&ne.push(se("unsupported-schema","unsupported presentation sequence snapshot schema")),(typeof H.frame!="number"||!Number.isFinite(H.frame))&&ne.push(se("invalid-snapshot","frame must be finite","frame"));let z=H.active;if(z!=null&&(!xe(z)||!Se(z.sequenceId)?ne.push(se("invalid-snapshot","active.sequenceId is required","active")):c.has(z.sequenceId)||ne.push(se("unknown-sequence",`unknown sequence "${z.sequenceId}"`,"active.sequenceId"))),H.queue!==void 0&&(Array.isArray(H.queue)?H.queue.forEach((oe,Pe)=>{let q=`queue[${Pe}]`;if(!xe(oe)||!Se(oe.sequenceId)){ne.push(se("invalid-snapshot","queue item sequenceId is required",q));return}c.has(oe.sequenceId)||ne.push(se("unknown-sequence",`unknown sequence "${oe.sequenceId}"`,q)),Se(oe.invocationId)||ne.push(se("invalid-snapshot","queue item invocationId is required",q))}):ne.push(se("invalid-snapshot","queue must be an array","queue"))),ne.length>0)return L(ne);let ie=H.frame;if(typeof ie!="number"||!Number.isFinite(ie))return L([se("invalid-snapshot","frame must be finite","frame")]);try{if(R&&D(R)&&w(R,!0),P.clear(),h.length=0,V.length=0,j.clear(),E=H.paused===!0,u=ie,m=bt({originFrame:u,reducedMotion:n}),Array.isArray(H.events))for(let oe of H.events)xe(oe)&&_u(oe.type)&&V.push(we(oe));if(Array.isArray(H.captions))for(let oe of H.captions)xe(oe)&&Se(oe.id)&&P.set(oe.id,{id:oe.id,text:typeof oe.text=="string"?oe.text:"",visible:oe.visible===!0});if(Array.isArray(H.queue))for(let oe of H.queue)!xe(oe)||!Se(oe.sequenceId)||!Se(oe.invocationId)||c.has(oe.sequenceId)&&h.push({sequenceId:oe.sequenceId,options:{invocationId:oe.invocationId,idempotencyKey:Se(oe.idempotencyKey)?oe.idempotencyKey:oe.invocationId,bindings:xe(oe.bindings)?we(oe.bindings):{}}});if(R=null,xe(z)&&Se(z.sequenceId)){let oe=c.get(z.sequenceId),Pe=xu.includes(z.phase)?z.phase:"playing";if(Pe==="skipped"||Pe==="completed"||Pe==="interrupted"||Pe==="failed"){let q=typeof z.startedAtFrame=="number"?z.startedAtFrame:t,U=M(oe,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:xe(H.bindings)?we(H.bindings):{}},Se(z.selectedFallbackId)?z.selectedFallbackId:null,new Set(Pe==="skipped"?oe.tracks.map(le=>le.id):[]),q);U.phase=Pe,U.startedAtFrame=q;for(let le of U.steps.values())le.phase="skipped";U.nextAvailable=!0,R=null,j.set(U.idempotencyKey,U.invocationId)}else{let q=new Set,U=Se(z.selectedFallbackId)?z.selectedFallbackId:null;if(U){let Y=(oe.fallbacks??[]).find(Q=>Q.id===U);for(let Q of Y?.omitTrackIds??[])q.add(Q)}let le=M(oe,{invocationId:String(z.invocationId),idempotencyKey:String(z.idempotencyKey??z.invocationId),bindings:xe(H.bindings)?we(H.bindings):{}},U,q,typeof z.startedAtFrame=="number"?z.startedAtFrame:t);le.phase=E?"paused":"playing",le.startedAtFrame=typeof z.startedAtFrame=="number"?z.startedAtFrame:t;let O=new Set(Array.isArray(z.completedStepIds)?z.completedStepIds.filter(Y=>typeof Y=="string"):[]),K=new Set(Array.isArray(z.activeStepIds)?z.activeStepIds.filter(Y=>typeof Y=="string"):[]);for(let Y of le.steps.values())O.has(Y.resolved.id)?Y.phase="completed":K.has(Y.resolved.id)||Y.resolved.startFrame<=u?Y.resolved.endFrame<=u?Y.phase="completed":Y.phase="active":Y.phase="pending";R=le,j.set(le.idempotencyKey,le.invocationId),y(le)}}return{ok:!0,snapshot:X()}}catch(oe){return L([se("restore-failed",oe instanceof Error?oe.message:String(oe))])}},inspect(){T();let b=R?c.get(R.sequenceId):void 0;return{frame:u,paused:E,reducedMotion:n,reducedSensory:r,active:R?p(R):null,queue:h.map(I=>({sequenceId:I.sequenceId,invocationId:I.options.invocationId,idempotencyKey:I.options.idempotencyKey??I.options.invocationId,phase:"requested",playhead:0,startedAtFrame:u,completedStepIds:[],activeStepIds:[],selectedFallbackId:null})),captions:[...P.values()].sort((I,L)=>I.id<L.id?-1:1),cueIntent:b?$(b,R?.selectedFallbackId??void 0):[]}},inspectCueIntent(b,I){T();let L=c.get(b);return L?$(L,I?.fallbackId):[]},get(b){T();let I=c.get(b);return I?we(I):void 0},destroy(){v||(R&&D(R)&&w(R,!0),v=!0,R=null,h.length=0,P.clear(),V.length=0)},get frame(){return u},get reducedMotion(){return n},get reducedSensory(){return r}}}var Ws=1,Gi=1,Yi="presentation.binding.state.applied",ar="presentation.binding.state.rejected",dr="presentation.binding.diagnostic.lifecycle",Lu=[Yi,ar,dr],Vu=["visual-layer","presence","prop","semantic-region","hotspot","sequence","asset"],Bu=["invalid-manifest","invalid-schema","invalid-version","invalid-id","unknown-field","unknown-resource","unknown-selector","duplicate-id","duplicate-priority","uncovered-default","impossible-target","callbacks-forbidden","invalid-predicate","invalid-projection","invalid-snapshot","destroyed"],Dy=new Set(Vu),Ny=new Set(Lu),My=new Set(Bu),Ly="Presentation binding runtime has been destroyed",Ks=/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/,Vy=new Set(["show","hide","replace"]),By=new Set(["id","schemaVersion","bindings","defaults","resources"]),Fy=new Set(["id","priority","when","targets"]),$y=new Set(["layers","versions","regions","sequences","hotspots","entities","props","assets"]),Hy=new Set(["labels","reducedSensory","reducedMotion"]);function te(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Je(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Re(e){return typeof e=="string"&&e.length>0}function _e(e){return JSON.parse(JSON.stringify(e))}function Ji(e,t,n){if(typeof e=="function"){n.push(te("callbacks-forbidden","authored bindings must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Ji(r,`${t}[${i}]`,n));return}if(Je(e))for(let[r,i]of Object.entries(e))Ji(i,t?`${t}.${r}`:r,n)}function Me(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(te("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function Du(e){return e===null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function Hs(){return{version:1,fields:{manifestId:{type:"string"},revision:{type:"string",optional:!0},selectedBindingIds:{type:"array",optional:!0},reason:{type:"string",optional:!0},usedFallback:{type:"boolean",optional:!0}}}}function qs(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function qy(e){return typeof e=="string"&&Ny.has(e)}function Wy(e){return typeof e=="string"&&My.has(e)}function Ky(){return[qs(pe(Yi,Hs())),qs(pe(ar,Hs())),qs(He(dr,Hs()))]}function vt(e){switch(e.kind){case"visual-layer":return`visual-layer:${e.layerId}`;case"presence":return`presence:${e.entityId}`;case"prop":return`prop:${e.propId}`;case"semantic-region":return`semantic-region:${e.regionId}`;case"hotspot":return`hotspot:${e.hotspotId}`;case"sequence":return`sequence:${e.sequenceId}`;case"asset":return`asset:${e.bindingId}`}}function Gy(e){if(e==null)return"missing";if(!Je(e))return"invalid";let t=[];if(Ji(e,"",t),t.length>0)return"invalid";try{return _e(e)}catch{return"invalid"}}function jy(e,t){if(!Ks.test(t))return{found:!1,value:void 0};let n=e;for(let r of t.split(".")){if(!Je(n)||!Object.prototype.hasOwnProperty.call(n,r))return{found:!1,value:void 0};n=n[r]}return{found:!0,value:n}}function Uy(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="function"?n:void 0}function ji(e,t,n){if("all"in e){for(let i of e.all){let o=ji(i,t,n);if(!o.ok)return o}return{ok:!0}}if("any"in e){let i={ok:!1,detail:"no alternative matched"};for(let o of e.any){let s=ji(o,t,n);if(s.ok)return s;i=s}return i}if("not"in e){let i=ji(e.not,t,n);return{ok:!i.ok,detail:i.ok?"negation failed":void 0}}if("selector"in e){let i=Uy(n,e.selector);if(!i)return{ok:!1,detail:`unknown selector "${e.selector}"`};try{return{ok:!!i(t)}}catch(o){return{ok:!1,detail:o instanceof Error?o.message:"selector threw"}}}let r=jy(t,e.path);return"present"in e?{ok:(r.found&&r.value!==null&&r.value!==void 0)===e.present}:"neq"in e?r.found?{ok:r.value!==e.neq}:{ok:!0,detail:"path missing"}:r.found?{ok:r.value===e.eq}:{ok:!1,detail:`missing path "${e.path}"`}}function Ui(e,t,n){if(!Je(e)){n.push(te("invalid-predicate","predicate must be an object",t));return}if("all"in e||"any"in e||"not"in e){if("all"in e){if(Me(e,new Set(["all"]),t,n),!Array.isArray(e.all)||e.all.length===0){n.push(te("invalid-predicate","all requires a non-empty array",`${t}.all`));return}return{all:e.all.map((a,c)=>Ui(a,`${t}.all[${c}]`,n)).filter(a=>!!a)}}if("any"in e){if(Me(e,new Set(["any"]),t,n),!Array.isArray(e.any)||e.any.length===0){n.push(te("invalid-predicate","any requires a non-empty array",`${t}.any`));return}return{any:e.any.map((a,c)=>Ui(a,`${t}.any[${c}]`,n)).filter(a=>!!a)}}Me(e,new Set(["not"]),t,n);let o=Ui(e.not,`${t}.not`,n);return o?{not:o}:void 0}if("selector"in e){if(Me(e,new Set(["selector"]),t,n),!Re(e.selector)){n.push(te("invalid-predicate","selector is required",`${t}.selector`));return}return{selector:e.selector}}if(Me(e,new Set(["path","eq","neq","present"]),t,n),(!Re(e.path)||!Ks.test(e.path))&&n.push(te("invalid-predicate","path must be a dotted identifier",`${t}.path`)),[e.eq!==void 0,e.neq!==void 0,e.present!==void 0].filter(Boolean).length!==1){n.push(te("invalid-predicate","predicate needs exactly one of eq, neq, or present",t));return}if(!(!Re(e.path)||!Ks.test(e.path))){if(e.present!==void 0){if(typeof e.present!="boolean"){n.push(te("invalid-predicate","present must be a boolean",`${t}.present`));return}return{path:e.path,present:e.present}}if(e.neq!==void 0){if(!Du(e.neq)){n.push(te("invalid-predicate","neq must be a JSON primitive",`${t}.neq`));return}return{path:e.path,neq:e.neq}}if(!Du(e.eq)){n.push(te("invalid-predicate","eq must be a JSON primitive",`${t}.eq`));return}return{path:e.path,eq:e.eq}}}function Jy(e,t,n){if(e===void 0)return;if(!Je(e)){n.push(te("impossible-target","region state must be an object",t));return}Me(e,new Set(["hover","focus","selected"]),t,n);let r={};for(let i of["hover","focus","selected"]){let o=e[i];if(o!==void 0){if(typeof o!="boolean"){n.push(te("impossible-target",`${i} must be a boolean`,`${t}.${i}`));continue}r[i]=o}}return r}function Gs(e,t,n,r){if(!Je(e)){n.push(te("impossible-target","target must be an object",t));return}if(!Dy.has(String(e.kind))){n.push(te("impossible-target",`unsupported target kind "${String(e.kind)}"`,`${t}.kind`));return}let i=e.kind;if(i==="visual-layer"){if(Me(e,new Set(["kind","layerId","version","transition"]),t,n),!Re(e.layerId)){n.push(te("impossible-target","layerId is required",`${t}.layerId`));return}if(!Re(e.version)){n.push(te("impossible-target","version is required",`${t}.version`));return}e.transition!==void 0&&!Vy.has(String(e.transition))&&n.push(te("impossible-target","transition must be show, hide, or replace",`${t}.transition`)),r?.layers&&!r.layers.includes(e.layerId)&&n.push(te("unknown-resource",`unknown layer "${e.layerId}"`,`${t}.layerId`));let o=r?.versions?.[e.layerId];o&&!o.includes(e.version)&&n.push(te("unknown-resource",`unknown version "${e.version}" on "${e.layerId}"`,`${t}.version`));let s={kind:"visual-layer",layerId:e.layerId,version:e.version};return(e.transition==="show"||e.transition==="hide"||e.transition==="replace")&&(s.transition=e.transition),s}if(i==="presence"){if(Me(e,new Set(["kind","entityId","present","regionId"]),t,n),!Re(e.entityId)){n.push(te("impossible-target","entityId is required",`${t}.entityId`));return}if(typeof e.present!="boolean"){n.push(te("impossible-target","present must be a boolean",`${t}.present`));return}r?.entities&&!r.entities.includes(e.entityId)&&n.push(te("unknown-resource",`unknown entity "${e.entityId}"`,`${t}.entityId`)),e.regionId!==void 0&&!Re(e.regionId)&&n.push(te("impossible-target","regionId must be a string",`${t}.regionId`));let o={kind:"presence",entityId:e.entityId,present:e.present};return Re(e.regionId)&&(o.regionId=e.regionId),o}if(i==="prop"){if(Me(e,new Set(["kind","propId","visible","layerId"]),t,n),!Re(e.propId)){n.push(te("impossible-target","propId is required",`${t}.propId`));return}if(typeof e.visible!="boolean"){n.push(te("impossible-target","visible must be a boolean",`${t}.visible`));return}r?.props&&!r.props.includes(e.propId)&&n.push(te("unknown-resource",`unknown prop "${e.propId}"`,`${t}.propId`));let o={kind:"prop",propId:e.propId,visible:e.visible};return Re(e.layerId)&&(o.layerId=e.layerId),o}if(i==="semantic-region"){if(Me(e,new Set(["kind","regionId","state","hitTestEnabled"]),t,n),!Re(e.regionId)){n.push(te("impossible-target","regionId is required",`${t}.regionId`));return}r?.regions&&!r.regions.includes(e.regionId)&&n.push(te("unknown-resource",`unknown region "${e.regionId}"`,`${t}.regionId`)),e.hitTestEnabled!==void 0&&typeof e.hitTestEnabled!="boolean"&&n.push(te("impossible-target","hitTestEnabled must be a boolean",`${t}.hitTestEnabled`));let o=Jy(e.state,`${t}.state`,n),s={kind:"semantic-region",regionId:e.regionId};return o&&(s.state=o),typeof e.hitTestEnabled=="boolean"&&(s.hitTestEnabled=e.hitTestEnabled),s}if(i==="hotspot"){if(Me(e,new Set(["kind","hotspotId","enabled","regionId"]),t,n),!Re(e.hotspotId)){n.push(te("impossible-target","hotspotId is required",`${t}.hotspotId`));return}if(typeof e.enabled!="boolean"){n.push(te("impossible-target","enabled must be a boolean",`${t}.enabled`));return}r?.hotspots&&!r.hotspots.includes(e.hotspotId)&&n.push(te("unknown-resource",`unknown hotspot "${e.hotspotId}"`,`${t}.hotspotId`));let o={kind:"hotspot",hotspotId:e.hotspotId,enabled:e.enabled};return Re(e.regionId)&&(o.regionId=e.regionId),o}if(i==="sequence"){if(Me(e,new Set(["kind","sequenceId","play"]),t,n),!Re(e.sequenceId)){n.push(te("impossible-target","sequenceId is required",`${t}.sequenceId`));return}e.play!==void 0&&typeof e.play!="boolean"&&n.push(te("impossible-target","play must be a boolean",`${t}.play`)),r?.sequences&&!r.sequences.includes(e.sequenceId)&&n.push(te("unknown-resource",`unknown sequence "${e.sequenceId}"`,`${t}.sequenceId`));let o={kind:"sequence",sequenceId:e.sequenceId};return typeof e.play=="boolean"&&(o.play=e.play),o}if(Me(e,new Set(["kind","bindingId","assetId"]),t,n),!Re(e.bindingId)){n.push(te("impossible-target","bindingId is required",`${t}.bindingId`));return}if(!Re(e.assetId)){n.push(te("impossible-target","assetId is required",`${t}.assetId`));return}return r?.assets&&!r.assets.includes(e.assetId)&&n.push(te("unknown-resource",`unknown asset "${e.assetId}"`,`${t}.assetId`)),{kind:"asset",bindingId:e.bindingId,assetId:e.assetId}}function Yy(e,t,n){if(e===void 0)return;if(!Je(e)){n.push(te("invalid-manifest","resources must be an object",t));return}Me(e,$y,t,n);let r={},i=(v,R)=>{if(v!==void 0){if(!Array.isArray(v)||v.some(x=>!Re(x))){n.push(te("invalid-manifest",`${R} must be a string array`,`${t}.${R}`));return}return v.slice()}},o=i(e.layers,"layers");o&&(r.layers=o);let s=i(e.regions,"regions");s&&(r.regions=s);let a=i(e.sequences,"sequences");a&&(r.sequences=a);let c=i(e.hotspots,"hotspots");c&&(r.hotspots=c);let m=i(e.entities,"entities");m&&(r.entities=m);let u=i(e.props,"props");u&&(r.props=u);let E=i(e.assets,"assets");if(E&&(r.assets=E),e.versions!==void 0)if(!Je(e.versions))n.push(te("invalid-manifest","versions must be an object",`${t}.versions`));else{let v={};for(let[R,x]of Object.entries(e.versions)){if(!Array.isArray(x)||x.some(h=>!Re(h))){n.push(te("invalid-manifest",`versions.${R} must be a string array`,`${t}.versions.${R}`));continue}v[R]=x.slice()}r.versions=v}return r}function zi(e){let t=[];if(Ji(e,"",t),!Je(e))return{ok:!1,errors:[te("invalid-manifest","bindings manifest must be a JSON object")]};Me(e,By,"",t),Re(e.id)||t.push(te("invalid-id","id is required","id")),e.schemaVersion!==Gi&&t.push(te("invalid-version",`schemaVersion must be ${Gi}`,"schemaVersion")),Array.isArray(e.bindings)||t.push(te("invalid-manifest","bindings must be an array","bindings")),(!Array.isArray(e.defaults)||e.defaults.length===0)&&t.push(te("uncovered-default","defaults must cover required presentation targets","defaults"));let n=Yy(e.resources,"resources",t),r=new Set,i=[];Array.isArray(e.bindings)&&e.bindings.forEach((m,u)=>{let E=`bindings[${u}]`;if(!Je(m)){t.push(te("invalid-manifest","binding must be an object",E));return}if(Me(m,Fy,E,t),!Re(m.id)){t.push(te("invalid-id","binding id is required",`${E}.id`));return}r.has(m.id)&&t.push(te("duplicate-id",`duplicate binding id "${m.id}"`,`${E}.id`)),r.add(m.id),(typeof m.priority!="number"||!Number.isFinite(m.priority))&&t.push(te("invalid-manifest","priority must be a finite number",`${E}.priority`));let v=Ui(m.when,`${E}.when`,t);if(!Array.isArray(m.targets)||m.targets.length===0){t.push(te("impossible-target","binding targets are required",`${E}.targets`));return}let R=m.targets.map((x,h)=>Gs(x,`${E}.targets[${h}]`,t,n)).filter(x=>!!x);!v||typeof m.priority!="number"||!Number.isFinite(m.priority)||i.push({id:m.id,priority:m.priority,when:v,targets:R})});let o=[],s=new Set;Array.isArray(e.defaults)&&e.defaults.forEach((m,u)=>{let E=Gs(m,`defaults[${u}]`,t,n);if(!E)return;let v=vt(E);s.has(v)&&t.push(te("duplicate-priority",`duplicate default target "${v}"`,`defaults[${u}]`)),s.add(v),o.push(E)});let a=new Map,c=new Set;for(let m of i){let u=new Set;for(let E of m.targets){let v=vt(E);c.add(v),u.has(v)&&t.push(te("duplicate-priority",`binding "${m.id}" repeats target "${v}"`,`bindings.${m.id}`)),u.add(v);let R=a.get(v);R||(R=new Map,a.set(v,R));let x=R.get(m.priority);x?t.push(te("duplicate-priority",`bindings "${x}" and "${m.id}" share priority ${m.priority} on "${v}"`,`bindings.${m.id}`)):R.set(m.priority,m.id)}}for(let m of c)s.has(m)||t.push(te("uncovered-default",`required target "${m}" has no default`,"defaults"));return t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:_e({id:String(e.id),schemaVersion:Gi,bindings:i,defaults:o,...n?{resources:n}:{}})}}function Fu(e){return{considered:[],winners:{},rejected:[],fallbacks:[],fallbackReason:e}}function Nu(e,t){let n=Fu(t==="uncovered-default"?null:t),r=[],i={};for(let o of e.defaults){let s=vt(o);r.push(_e(o)),i[s]={bindingId:null,target:_e(o)},n.fallbacks.push({targetKey:s,reason:t})}return n.winners=i,{selectedBindingIds:[],targets:r,usedFallback:t!=="uncovered-default",fallbackReason:t==="uncovered-default"?null:t,explanation:n}}function js(e,t,n={}){let r=Gy(t);if(r==="missing")return Nu(e,"missing-state");if(r==="invalid")return Nu(e,"invalid-projection");let i=Fu(null),o=[];for(let u of e.bindings){let E=ji(u.when,r,n);if(i.considered.push({bindingId:u.id,predicateResult:E.ok,...E.detail?{detail:E.detail}:{}}),E.ok)o.push(u);else for(let v of u.targets)i.rejected.push({bindingId:u.id,targetKey:vt(v),reason:"predicate-false"})}o.sort((u,E)=>E.priority-u.priority||(u.id<E.id?-1:u.id>E.id?1:0));let s=new Map;for(let u of o)for(let E of u.targets){let v=vt(E),R=s.get(v);if(!R){s.set(v,{bindingId:u.id,priority:u.priority,target:_e(E)});continue}u.priority<R.priority&&i.rejected.push({bindingId:u.id,targetKey:v,reason:"lower-priority"})}for(let u of e.defaults){let E=vt(u);s.has(E)||(i.fallbacks.push({targetKey:E,reason:"uncovered-default"}),i.winners[E]={bindingId:null,target:_e(u)})}for(let[u,E]of s)i.winners[u]={bindingId:E.bindingId,target:_e(E.target)};let a=[...new Set([...s.values()].sort((u,E)=>E.priority-u.priority||(u.bindingId<E.bindingId?-1:1)).map(u=>u.bindingId))],c=[],m=new Set;for(let u of e.defaults){let E=vt(u),v=s.get(E),R=v?v.target:u;m.has(E)||(m.add(E),c.push(_e(R)))}for(let[u,E]of s)m.has(u)||(m.add(u),c.push(_e(E.target)));return{selectedBindingIds:a,targets:c,usedFallback:!1,fallbackReason:null,explanation:i}}function zy(e,t){let n={},r={},i={},o={},s={},a={},c={},m=t.sequences?.inspect().active;for(let u of e){if(u.kind==="visual-layer"&&(n[u.layerId]=u.version),u.kind==="presence"&&(r[u.entityId]=u.present),u.kind==="prop"&&(i[u.propId]=u.visible),u.kind==="semantic-region"&&(o[u.regionId]={...u.state??{},...u.hitTestEnabled!==void 0?{hitTestEnabled:u.hitTestEnabled}:{}}),u.kind==="hotspot"&&(s[u.hotspotId]=u.enabled),u.kind==="sequence"){let E=u.play!==!1,v=E&&m&&m.sequenceId===u.sequenceId&&(m.phase==="playing"||m.phase==="paused"||m.phase==="requested"||m.phase==="preloading"||m.phase==="ready");a[u.sequenceId]=v?"playing":"idle",E&&v&&(a[u.sequenceId]="playing")}u.kind==="asset"&&(c[u.bindingId]=u.assetId)}return{revision:t.revision,selectedBindingIds:t.selectedBindingIds.slice(),layers:n,presence:r,props:i,regions:o,hotspots:s,sequences:a,assets:c,override:t.override?_e(t.override):null,usedFallback:t.usedFallback,fallbackReason:t.fallbackReason,explanation:t.explanation?_e(t.explanation):null}}function Xy(e,t){return e?JSON.stringify(e)===JSON.stringify(t):!1}function Mu(e,t){if(e===null)return null;if(e===void 0)return;if(!Je(e)){t.push(te("invalid-snapshot","override must be an object"));return}Me(e,Hy,"override",t);let n={};if(e.reducedSensory!==void 0&&(typeof e.reducedSensory!="boolean"?t.push(te("invalid-snapshot","reducedSensory must be a boolean","override.reducedSensory")):n.reducedSensory=e.reducedSensory),e.reducedMotion!==void 0&&(typeof e.reducedMotion!="boolean"?t.push(te("invalid-snapshot","reducedMotion must be a boolean","override.reducedMotion")):n.reducedMotion=e.reducedMotion),e.labels!==void 0)if(!Je(e.labels))t.push(te("invalid-snapshot","labels must be an object","override.labels"));else{let r={};for(let[i,o]of Object.entries(e.labels)){if(typeof o=="string"){r[i]=o;continue}if(Je(o)&&Re(o.name)&&Re(o.role)){r[i]={name:o.name,role:o.role};continue}t.push(te("invalid-snapshot",`label "${i}" must be a string or { name, role }`,`override.labels.${i}`))}n.labels=r}return n}function Us(e){let t=zi(e.manifest);if(!t.ok)throw new Error(`createPresentationBindingRuntime: ${t.errors.map(D=>D.detail).join("; ")}`);let n=t.manifest,r=e.visual,i=e.semantic,o=e.sequences,s=e.selectors??{},a=!1,c=null,m=0,u=[],E=new Map,v=!1,R=null,x=null,h=null,P=!1,V=new Map,j=[],T=()=>{if(a)throw new Error(Ly)};function _(D,C){j.push({type:D,atRevision:c,manifestId:n.id,selectedBindingIds:u.slice(),reason:typeof C.reason=="string"?C.reason:void 0});let w=D.includes(".diagnostic.")?"diagnostic":"state",M={type:D,kind:w,payload:_e(C)};e.onEvent?.(M),e.router?.publish(M)}function f(){return zy([...E.values()],{revision:c,selectedBindingIds:u,override:h,usedFallback:v,fallbackReason:R,explanation:x,sequences:o})}function p(D){let C=[];for(let w of D)w.kind==="visual-layer"&&r&&(r.inspect().find(F=>F.id===w.layerId)||C.push(te("unknown-resource",`unknown live layer "${w.layerId}"`,w.layerId))),w.kind==="semantic-region"&&i&&!i.get(w.regionId)&&C.push(te("unknown-resource",`unknown live region "${w.regionId}"`,w.regionId)),w.kind==="hotspot"&&w.regionId&&i&&!i.get(w.regionId)&&C.push(te("unknown-resource",`unknown live region "${w.regionId}"`,w.regionId)),w.kind==="presence"&&w.regionId&&i&&!i.get(w.regionId)&&C.push(te("unknown-resource",`unknown live region "${w.regionId}"`,w.regionId)),w.kind==="sequence"&&o&&!o.get(w.sequenceId)&&C.push(te("unknown-resource",`unknown live sequence "${w.sequenceId}"`,w.sequenceId));return C}function S(){if(!(!i||!h?.labels)){for(let[D,C]of Object.entries(h.labels))if(i.get(D))if(typeof C=="string"){let w=i.get(D)?.a11y;i.setRegionA11y(D,{name:C,role:w?.role??"region"})}else i.setRegionA11y(D,{name:C.name,role:C.role})}}function d(){return h?.reducedSensory===!0}function l(D){let C=o?.inspect().active;return!!(C&&C.sequenceId===D&&(C.phase==="playing"||C.phase==="paused"||C.phase==="requested"||C.phase==="preloading"||C.phase==="ready"))}function g(D,C){if(!o)return;let w=d(),M=D.play!==!1&&!w,F=l(D.sequenceId);if(M&&!F&&(!C||P!==w)){let J=o.playSequence(D.sequenceId,{invocationId:`presentation-binding:${D.sequenceId}`,idempotencyKey:`presentation-binding:${D.sequenceId}`});if(!J.ok&&J.reason!=="duplicate")return te("unknown-resource",J.detail,D.sequenceId)}!M&&F&&o.skip()}function k(){for(let D of E.values())D.kind==="sequence"&&g(D,!0);P=d()}function N(D){if(!i)return[];let C=new Map;for(let $ of D)$.kind==="hotspot"&&$.regionId&&C.set($.regionId,$.enabled);for(let $ of D)$.kind==="semantic-region"&&$.hitTestEnabled!==void 0&&C.set($.regionId,$.hitTestEnabled);if(C.size===0)return[];let w=new Map,M=!1;for(let[$,X]of C){let y=i.get($);if(!y)continue;y.hitTest!=="pass-through"&&V.set($,y.hitTest);let b=V.get($)??"absorb",I=X?b:"pass-through";w.set($,I),y.hitTest!==I&&(M=!0)}if(!M)return[];let F=i.snapshot(),G={...F,regions:F.regions.map($=>{let X=w.get($.id);return X&&X!==$.hitTest?{...$,hitTest:X}:$})},J=i.restore(G);return J.ok?[]:J.errors.map($=>te("unknown-resource",$))}function A(D){let C=r?.snapshot(),w=i?.snapshot(),M=o?.snapshot(),F=new Map(V),G=X=>{V.clear();for(let[y,b]of F)V.set(y,b);return o&&M&&o.restore(M),r&&C&&r.restore(C),i&&w&&i.restore(w),X},J=new Map;for(let X of D)J.set(vt(X),_e(X));let $=N(D);if($.length>0)return G($);for(let[X,y]of J){let b=E.get(X),I=Xy(b,y);if(y.kind==="visual-layer"&&r&&!I){let L=y.transition??"replace",H=r.play({name:`presentation-binding:${y.layerId}:${L}`,idempotencyKey:`presentation-binding:${y.layerId}:${y.version}:${L}`,layerId:y.layerId,kind:L,...L==="hide"?{}:{toVersion:y.version},durationFrames:0,onDuplicate:"ignore"});if(!H.ok&&H.reason!=="duplicate")return G([te("unknown-resource",H.detail,y.layerId)])}if(y.kind==="semantic-region"&&i){let L=y.state??{},H=i.get(y.regionId)?.state,ne={hover:L.hover??H?.hover??!1,focus:L.focus??H?.focus??!1,selected:L.selected??H?.selected??!1};(!H||H.hover!==ne.hover||H.focus!==ne.focus||H.selected!==ne.selected)&&i.setRegionState(y.regionId,ne)}if(y.kind==="hotspot"&&y.regionId&&i){let L=i.get(y.regionId)?.state;(!L||L.selected!==y.enabled)&&i.setRegionState(y.regionId,{selected:y.enabled})}if(y.kind==="presence"&&y.regionId&&i){let L=i.get(y.regionId)?.state;(!L||L.selected!==y.present)&&i.setRegionState(y.regionId,{selected:y.present})}if(y.kind==="sequence"){let L=g(y,I);if(L)return G([L])}}return E=J,P=d(),S(),[]}function B(D,C){let w=p(D.targets);if(w.length>0)return _(ar,{manifestId:n.id,revision:String(C),reason:w[0]?.code,selectedBindingIds:u}),_(dr,{manifestId:n.id,revision:String(C),reason:w[0]?.code}),{ok:!1,errors:w,inspect:f()};let M=A(D.targets);return M.length>0?(_(ar,{manifestId:n.id,revision:String(C),reason:M[0]?.code,selectedBindingIds:u}),_(dr,{manifestId:n.id,revision:String(C),reason:M[0]?.code}),{ok:!1,errors:M,inspect:f()}):(c=C,u=D.selectedBindingIds.slice(),v=D.usedFallback,R=D.fallbackReason,x=_e(D.explanation),_(Yi,{manifestId:n.id,revision:String(C),selectedBindingIds:u,usedFallback:v,reason:R??void 0}),{ok:!0,revision:C,selectedBindingIds:u.slice(),usedFallback:v,fallbackReason:R,explanation:_e(D.explanation),inspect:f()})}function W(){return{schemaVersion:Ws,manifestId:n.id,projectionRevision:c,selectedBindingIds:u.slice(),targets:[...E.values()].map(D=>_e(D)),usedFallback:v,fallbackReason:R,override:h?_e(h):null}}return{get manifest(){return _e(n)},apply(D,C){T();let w=C?.revision??m+1;typeof w=="number"&&(m=Math.max(m,w));let M=js(n,D,s);return B(M,w)},setOverride(D){T();let C=d();if(D===null)h=null;else{let w=[],M=Mu(D,w);if(w.length>0||M===void 0)throw new Error(`createPresentationBindingRuntime: ${w.map(F=>F.detail).join("; ")||"invalid override"}`);h=M?_e(M):null,S()}d()!==C&&k()},evaluate(D){return T(),js(n,D,s)},inspect(){return T(),f()},snapshot(){return T(),W()},restore(D){T();let C=I=>({ok:!1,errors:I}),w=D;if(typeof D=="string")try{w=JSON.parse(D)}catch{return C([te("invalid-snapshot","snapshot JSON is invalid")])}if(!Je(w))return C([te("invalid-snapshot","snapshot must be a JSON object")]);if(w.schemaVersion!==Ws)return C([te("invalid-schema",`unsupported snapshot schemaVersion ${String(w.schemaVersion)}`,"schemaVersion")]);if(w.manifestId!==n.id)return C([te("invalid-snapshot",`snapshot manifestId "${String(w.manifestId)}" does not match "${n.id}"`,"manifestId")]);if(!Array.isArray(w.selectedBindingIds))return C([te("invalid-snapshot","selectedBindingIds must be an array","selectedBindingIds")]);let M=new Set(n.bindings.map(I=>I.id));for(let I of w.selectedBindingIds)if(!Re(I)||!M.has(I))return C([te("unknown-resource",`unknown selected binding "${String(I)}"`,"selectedBindingIds")]);if(!Array.isArray(w.targets))return C([te("invalid-snapshot","targets must be an array","targets")]);let F=[],G=w.targets.map((I,L)=>Gs(I,`targets[${L}]`,F,n.resources)).filter(I=>!!I);if(F.length>0)return C(F);let J=[],$=Mu(w.override??null,J);if(J.length>0)return C(J);let X=p(G);if(X.length>0)return C(X);let y=typeof w.projectionRevision=="string"||typeof w.projectionRevision=="number"?w.projectionRevision:w.projectionRevision===null?null:void 0;if(y===void 0)return C([te("invalid-snapshot","projectionRevision must be a string, number, or null","projectionRevision")]);let b=A(G);return b.length>0?C(b):(c=y,typeof y=="number"&&(m=Math.max(m,y)),u=w.selectedBindingIds.filter(I=>Re(I)),v=w.usedFallback===!0,R=w.fallbackReason==="missing-state"||w.fallbackReason==="invalid-projection"?w.fallbackReason:null,h=$??null,S(),k(),{ok:!0,snapshot:W()})},destroy(){a||(a=!0,E.clear(),j.length=0)}}}var ur=1,Et=1,lr="content.revision.state.discovered",Xi="content.revision.state.staging",Qi="content.revision.state.validated",Zi="content.revision.state.rejected",eo="content.revision.state.activated",Rn="content.revision.state.rolled-back",In="content.revision.state.superseded",pr="content.revision.diagnostic.lifecycle",Qy=[lr,Xi,Qi,Zi,eo,Rn,In,pr],$u=["invalid-manifest","invalid-schema","invalid-version","invalid-snapshot","unknown-revision","unknown-adapter","hash-mismatch","capability-denied","pinned","staging-failed","activation-failed","health-check-failed","stale-health-check","superseded","destroyed","adapter-missing","asset-failed","unsigned"],Zy=new Set($u),eh="Content revision activator has been destroyed",th=/^[0-9a-f]+$/i;function ce(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function pt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ee(e){return typeof e=="string"&&e.length>0}function Ie(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function lt(e,t){return`${e}@${t}`}function nh(e,t){return e.localeCompare(t,"en",{numeric:!0,sensitivity:"base"})>0}function cr(e,t){return e===t?!0:!e||!t?!1:e.bundleId===t.bundleId&&e.adapterId===t.adapterId}function Dt(){return{version:1,fields:{contentId:{type:"string"},revision:{type:"string"},adapterId:{type:"string"},bundleId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function Nt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function rh(){return[Nt(pe(lr,Dt())),Nt(pe(Xi,Dt())),Nt(pe(Qi,Dt())),Nt(pe(Zi,Dt())),Nt(pe(eo,Dt())),Nt(pe(Rn,Dt())),Nt(pe(In,Dt())),Nt(He(pr,Dt()))]}function Ys(e){return typeof e=="string"&&e.length===64&&th.test(e)}function ih(e,t){return e===void 0?{ok:!0,fallback:void 0}:pt(e)?!Ee(e.id)||!nn(e.kind)||!Ee(e.url)||!Ys(e.hash)||e.alg!=="sha256"?{ok:!1,errors:[ce("invalid-schema","fallback is missing id, kind, url, or sha256 hash",t)]}:{ok:!0,fallback:{id:e.id,kind:e.kind,url:e.url,hash:e.hash.toLowerCase(),alg:"sha256"}}:{ok:!1,errors:[ce("invalid-schema","fallback must be an object",t)]}}function to(e){if(!pt(e))return{ok:!1,errors:[ce("invalid-manifest","catalog must be an object")]};let t=[];Ee(e.contentId)||t.push(ce("invalid-schema","contentId is required","contentId")),(!Ee(e.revision)||e.revision==="latest")&&t.push(ce("unknown-revision",'revision must be an exact id, not "latest"',"revision")),e.manifestVersion!==Et&&t.push(ce("invalid-version",`manifestVersion must be ${Et}`,"manifestVersion")),Ee(e.publisher)||t.push(ce("invalid-schema","publisher is required","publisher")),Ee(e.source)||t.push(ce("invalid-schema","source is required","source")),Ee(e.adapterId)||t.push(ce("invalid-schema","adapterId is required","adapterId")),(!Array.isArray(e.assets)||e.assets.length===0)&&t.push(ce("invalid-schema","assets must be a non-empty array","assets"));let n=[],r=new Set;if(Array.isArray(e.assets)&&e.assets.forEach((o,s)=>{let a=`assets[${s}]`;if(!pt(o)){t.push(ce("invalid-schema","asset must be an object",a));return}if(!Ee(o.id)||!nn(o.kind)||!Ee(o.url)){t.push(ce("invalid-schema","asset needs id, kind, and url",a));return}if(!Ys(o.hash)||o.alg!=="sha256"){t.push(ce("hash-mismatch","asset hash must be sha256 hex",`${a}.hash`));return}if(r.has(o.id)){t.push(ce("invalid-schema",`duplicate asset id "${o.id}"`,`${a}.id`));return}r.add(o.id);let c=ih(o.fallback,`${a}.fallback`);if(!c.ok){t.push(...c.errors);return}n.push({id:o.id,kind:o.kind,url:o.url,hash:o.hash.toLowerCase(),alg:"sha256",optional:o.optional===!0,fallback:c.fallback})}),t.length>0)return{ok:!1,errors:t};let i;if(e.signature!==void 0){if(!pt(e.signature)||!Ee(e.signature.id)||!Ee(e.signature.alg))return{ok:!1,errors:[ce("unsigned","signature must include id and alg","signature")]};i={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,catalog:{contentId:e.contentId,revision:e.revision,manifestVersion:Et,publisher:e.publisher,source:e.source,adapterId:e.adapterId,assets:n,requestedGrants:Array.isArray(e.requestedGrants)?e.requestedGrants:void 0,capabilities:e.capabilities,signature:i}}}function oh(e,t){return{contentId:e.body.id,revision:e.body.cartVersion,manifestVersion:Et,publisher:e.body.publisher,source:"remote",adapterId:t,assets:e.body.assets.map(n=>({id:n.id,kind:n.kind,url:n.url,hash:n.hash.toLowerCase(),alg:"sha256"})),requestedGrants:os(e),capabilities:e.body.capabilities,signature:{id:e.signature.keyId,alg:e.signature.alg}}}function sh(e,t){return`https://registry.test/worlds/${e}/revisions/${t??"current"}.json`}function ah(e){let t=e.id??"static",n=new Map,r=new Map;for(let o of e.revisions){let s=to({...o,adapterId:o.adapterId||t}),a=Ee(o.contentId)?o.contentId:"",c=Ee(o.revision)?o.revision:"";if(!(!a||!c))if(s.ok){let m={...s.catalog,adapterId:t,source:s.catalog.source||"static"};n.set(lt(a,c),{ok:!0,catalog:m});let u=r.get(a);(!u||nh(m.revision,u.revision))&&r.set(a,m)}else n.set(lt(a,c),s)}let i=e.fetchBytes??(async o=>e.bytesByUrl[o]);return{id:t,hasRevision(o,s){return!!n.get(lt(o,s))?.ok},async discover(o){let s=r.get(o);if(s)return{contentId:s.contentId,revision:s.revision,adapterId:t,publisher:s.publisher,source:s.source}},async loadRevision(o,s){let a=n.get(lt(o,s));return a?a.ok?{ok:!0,catalog:Ie(a.catalog)}:a:{ok:!1,errors:[ce("unknown-revision",`static adapter has no ${o}@${s}`)]}},fetchBytes:i}}function dh(e){let t=e.id??"remote",n=e.catalogUrl??sh,r=new Set((e.known??[]).map(s=>lt(s.contentId,s.revision))),i=e.fetchBytes??(async s=>e.bytesByUrl?.[s]);async function o(s,a,c){let m=a!=="current",u;try{u=await e.fetch(n(s,m?a:void 0),c)}catch(h){return{ok:!1,errors:[ce("staging-failed",h instanceof Error?h.message:String(h))]}}let E=u;if(pt(u)&&pt(u.manifest)){if(Ee(u.world)&&u.world!==s)return{ok:!1,errors:[ce("invalid-manifest",`remote world "${String(u.world)}" does not match "${s}"`,"world")]};if(m&&Ee(u.revision)&&u.revision!==a)return{ok:!1,errors:[ce("unknown-revision",`remote revision "${String(u.revision)}" does not match "${a}"`,"revision")]};E=u.manifest}let v=await Kn(E,e.keys,m?a:void 0);if(!v.ok)return{ok:!1,errors:v.errors.map(h=>ce(h.code,h.detail,h.path))};if(v.manifest.body.id!==s)return{ok:!1,errors:[ce("invalid-manifest",`signed id "${v.manifest.body.id}" does not match "${s}"`,"body.id")]};let R=oh(v.manifest,t);return r.add(lt(R.contentId,R.revision)),to(R)}return{id:t,hasRevision(s,a){return r.has(lt(s,a))},async discover(s){let a=await o(s,"current");if(a.ok)return{contentId:a.catalog.contentId,revision:a.catalog.revision,adapterId:t,publisher:a.catalog.publisher,source:a.catalog.source}},loadRevision:o,fetchBytes:i}}function ch(e,t){return pt(e)?!Ee(e.id)||!nn(e.kind)||!Ee(e.ref)||!Ys(e.hash)||!Ee(e.url)||typeof e.optional!="boolean"||typeof e.usedFallback!="boolean"?{ok:!1,errors:[ce("invalid-snapshot","resource fields are invalid",t)]}:{ok:!0,resource:{id:e.id,kind:e.kind,ref:e.ref,hash:e.hash.toLowerCase(),url:e.url,optional:e.optional,usedFallback:e.usedFallback}}:{ok:!1,errors:[ce("invalid-snapshot","resource must be an object",t)]}}function Js(e,t){if(e===null)return{ok:!0,bundle:null};if(!pt(e))return{ok:!1,errors:[ce("invalid-snapshot","bundle must be an object or null",t)]};if(!Ee(e.contentId)||!Ee(e.revision)||e.revision==="latest")return{ok:!1,errors:[ce("unknown-revision","snapshot bundle must record an exact revision",`${t}.revision`)]};if(e.manifestVersion!==Et)return{ok:!1,errors:[ce("invalid-version",`bundle manifestVersion must be ${Et}`,`${t}.manifestVersion`)]};if(!Ee(e.publisher)||!Ee(e.source)||!Ee(e.adapterId)||!Ee(e.bundleId))return{ok:!1,errors:[ce("invalid-snapshot","bundle identity is incomplete",t)]};if(!pt(e.resources))return{ok:!1,errors:[ce("invalid-snapshot","bundle resources must be an object",`${t}.resources`)]};let n={};for(let[i,o]of Object.entries(e.resources)){let s=ch(o,`${t}.resources.${i}`);if(!s.ok)return s;if(s.resource.id!==i)return{ok:!1,errors:[ce("invalid-snapshot",`resource key "${i}" does not match id`,`${t}.resources.${i}`)]};n[i]=s.resource}let r;if(e.signature!==void 0){if(!pt(e.signature)||!Ee(e.signature.id)||!Ee(e.signature.alg))return{ok:!1,errors:[ce("invalid-snapshot","signature must include id and alg",`${t}.signature`)]};r={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,bundle:{bundleId:e.bundleId,contentId:e.contentId,revision:e.revision,manifestVersion:Et,publisher:e.publisher,source:e.source,adapterId:e.adapterId,signature:r,resources:n}}}function uh(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[ce("invalid-snapshot","snapshot JSON is not parseable")]}}if(!pt(t))return{ok:!1,errors:[ce("invalid-snapshot","snapshot must be an object")]};if(t.schemaVersion!==ur)return{ok:!1,errors:[ce("invalid-version",`snapshot schema must be ${ur}`,"schemaVersion")]};if(typeof t.pinned!="boolean")return{ok:!1,errors:[ce("invalid-snapshot","pinned must be a boolean","pinned")]};let n=Js(t.active,"active");if(!n.ok)return n;let r=Js(t.lastKnownGood,"lastKnownGood");if(!r.ok)return r;let i=Js(t.previous,"previous");return i.ok?{ok:!0,snapshot:{schemaVersion:ur,pinned:t.pinned,active:n.bundle,lastKnownGood:r.bundle,previous:i.bundle}}:i}function lh(e,t,n){return{id:e.id,kind:e.kind,ref:t.ref,hash:n&&e.fallback?e.fallback.hash:e.hash,url:t.url,optional:e.optional===!0,usedFallback:n}}function ph(e){let t=[...e.adapters],n=e.grants??gn(),r=new Map,i=e.pin===!0,o=!1,s=null,a=null,c=null,m=null,u=null,E=[],v=0,R=null;function x(){if(o)throw new Error(eh)}function h(d){return d?t.find(l=>l.id===d):t[0]}function P(d,l,g){return(g?t.filter(N=>N.id===g):t).some(N=>N.hasRevision(d,l))}function V(d,l){E.push(d);let g=d.includes(".diagnostic.")?"diagnostic":"state",k={type:d,kind:g,payload:Ie(l)};e.onEvent?.(k),e.router?.publish(k)}function j(d,l){return u=d.map(g=>Ie(g)),V(Zi,{...l,reasonCode:d[0]?.code}),V(pr,{...l,reasonCode:d[0]?.code}),{ok:!1,errors:u}}function T(){return{destroyed:o,pinned:i,active:Ie(s),lastKnownGood:Ie(a),staging:m?Ie(m):null,events:[...E],lastRejection:u?Ie(u):null}}async function _(d,l,g){if(d.requestedGrants){for(let M of d.requestedGrants)if(!n.has(M))return{ok:!1,errors:[ce("capability-denied",`host did not grant "${M}"`,"requestedGrants")]}}if(d.capabilities){let M=e.hostCapabilities??{contractVersion:1,features:[],integrations:[],grants:n.list()},F=Vn(d.capabilities,{...M,grants:n.list()});if(!F.ok)return{ok:!1,errors:F.errors.map(G=>ce(G.code==="missing-grant"||G.code==="capability-denied"||G.code==="ungranted-capability"?"capability-denied":"invalid-schema",G.detail,G.path))}}let k={},N=[];for(let M of d.assets)k[M.url]={url:M.url,hash:M.hash,alg:"sha256"},M.fallback&&(k[M.fallback.url]={url:M.fallback.url,hash:M.fallback.hash,alg:"sha256"}),N.push({id:M.id,ref:M.url,type:M.kind,integrity:`sha256-${M.hash}`,provenance:{contentId:d.contentId,revision:d.revision,publisher:d.publisher,adapterId:d.adapterId},fallback:M.fallback?{id:M.id,ref:M.fallback.url,type:M.fallback.kind,integrity:`sha256-${M.fallback.hash}`}:void 0});let A=Nn({declared:k,fetchBytes:async M=>{if(g.aborted)return;let F=Object.values(k).find(X=>X.url===M);if(!F)return;let J=r.get(F.hash)??await l.fetchBytes(M,g);if(!J||g.aborted)return;let $=await Wn(J);if($!==F.hash)throw ve({id:"",ref:M,code:"hash-mismatch",message:`hash mismatch for "${M}"`});return r.set($,J),J},hashBytes:Wn}),B=Vt({resolver:A,emitEvents:!1,wallClockTimeout:!1});if(g.aborted)return B.dispose(),{ok:!1,errors:[ce("superseded","staging aborted")]};let W=()=>{B.abort(),B.dispose()};g.addEventListener("abort",W,{once:!0});let D;try{D=await B.preload(N)}finally{g.removeEventListener("abort",W),B.dispose()}if(g.aborted)return{ok:!1,errors:[ce("superseded","staging aborted")]};let C={},w=[];for(let M of d.assets){let F=D.items[M.id];if(F?.state==="ready"){C[M.id]=lh(M,F.resource,F.resource.usedFallback===!0||!!F.failure);continue}if(M.optional)continue;let G=F?.state==="failed"?F.failure:D.failures.find(J=>J.id===M.id);w.push(ce(G?.code==="hash-mismatch"?"hash-mismatch":"asset-failed",G?.message??`required asset "${M.id}" failed`,M.id))}return w.length>0?{ok:!1,errors:w}:{ok:!0,bundle:{bundleId:lt(d.contentId,d.revision),contentId:d.contentId,revision:d.revision,manifestVersion:Et,publisher:d.publisher,source:d.source,adapterId:d.adapterId,signature:d.signature,resources:C}}}function f(d,l,g){return V(pr,{...d,reasonCode:l}),{ok:!1,errors:[ce("stale-health-check",g)]}}async function p(d,l){let g=Ie(d),k=s;s=g;let N=!0;try{N=e.healthCheck?await e.healthCheck(g):!0}catch(A){return cr(s,g)?(s=k,V(Rn,{...l,revision:k?.revision??"",reasonCode:"activation-failed"}),j([ce("activation-failed",A instanceof Error?A.message:String(A))],l)):f(l,"stale-health-check","stale health check ignored; a newer revision is active")}return N?cr(s,g)?(c=k,a=Ie(s),u=null,V(eo,l),{ok:!0,bundle:Ie(s)}):f(l,"stale-health-check","stale health check ignored; a newer revision is active"):cr(s,g)?(s=k,V(Rn,{...l,revision:k?.revision??"",reasonCode:"health-check-failed"}),j([ce("health-check-failed","post-activation health check failed")],l)):f(l,"stale-health-check","stale health check ignored; a newer revision is active")}let S={pin(d=!0){x(),i=d},unpin(){x(),i=!1},isPinned(){return x(),i},async discover(d,l){x();let g=h(l);if(!g)return;let k=await g.discover(d);return k&&V(lr,{contentId:k.contentId,revision:k.revision,adapterId:k.adapterId,bundleId:lt(k.contentId,k.revision)}),k?Ie(k):void 0},async activate(d){x();let l=h(d.adapterId);if(!l)return j([ce("unknown-adapter",`unknown adapter "${String(d.adapterId)}"`)],{contentId:d.contentId,revision:d.revision??"",adapterId:d.adapterId??""});let g=d.revision;if(!g){let B=await l.discover(d.contentId);g=B?.revision,B&&V(lr,{contentId:B.contentId,revision:B.revision,adapterId:B.adapterId,bundleId:lt(B.contentId,B.revision)})}if(!Ee(g)||g==="latest")return j([ce("unknown-revision","activation requires an exact revision")],{contentId:d.contentId,revision:String(g??""),adapterId:l.id});let k={contentId:d.contentId,revision:g,adapterId:l.id,bundleId:lt(d.contentId,g)};if(s&&s.contentId===d.contentId&&s.revision===g&&s.adapterId===l.id)return{ok:!0,bundle:Ie(s),idempotent:!0};if(i&&s)return j([ce("pinned","activator is pinned; live revision movement is frozen")],k);let N=++v;R?.abort();let A=new AbortController;R=A,m={contentId:d.contentId,revision:g,adapterId:l.id,bundleId:k.bundleId},V(Xi,k);try{let B=await l.loadRevision(d.contentId,g,A.signal);if(N!==v||A.signal.aborted)return V(In,k),{ok:!1,errors:[ce("superseded",`revision ${g} was superseded`)]};if(!B.ok)return j(B.errors,k);let W=B.catalog,D=to(W);if(!D.ok)return j(D.errors,k);let C=await _(D.catalog,l,A.signal);return N!==v||A.signal.aborted?(V(In,k),{ok:!1,errors:[ce("superseded",`revision ${g} was superseded`)]}):C.ok?(V(Qi,k),N!==v||A.signal.aborted?(V(In,k),{ok:!1,errors:[ce("superseded",`revision ${g} was superseded`)]}):await p(C.bundle,k)):j(C.errors,k)}finally{N===v&&(m=null,R===A&&(R=null))}},rollback(){x();let d=c??a;if(cr(s,d))return{ok:!0,bundle:Ie(s),idempotent:!0};if(i)return{ok:!1,errors:[ce("pinned","activator is pinned; live revision movement is frozen")]};let l=s;return s=Ie(d),a=Ie(d),c=Ie(d),V(Rn,{contentId:s?.contentId??l?.contentId??"",revision:s?.revision??"",adapterId:s?.adapterId??l?.adapterId??"",bundleId:s?.bundleId,reasonCode:"rolled-back"}),{ok:!0,bundle:Ie(s)}},inspect(){return x(),T()},activeBundle(){return x(),Ie(s)},snapshot(){return x(),{schemaVersion:ur,pinned:i,active:Ie(s),lastKnownGood:Ie(a),previous:Ie(c)}},restore(d){x();let l=uh(d);if(!l.ok)return l;let g=l.snapshot,k=[g.active,g.lastKnownGood,g.previous];for(let N of k)if(N&&!P(N.contentId,N.revision,N.adapterId))return{ok:!1,errors:[ce("unknown-revision",`unknown revision ${N.contentId}@${N.revision}`,"revision")]};return i&&!cr(s,g.active)?{ok:!1,errors:[ce("pinned","activator is pinned; live revision movement is frozen")]}:(i=g.pinned,s=Ie(g.active),a=Ie(g.lastKnownGood),c=Ie(g.previous),u=null,{ok:!0,snapshot:S.snapshot()})},provenance(){if(x(),!!s)return{source:s.source,publisher:s.publisher,version:s.revision,signature:s.signature}},destroy(){o=!0,R?.abort(),R=null,m=null}};return S}function fh(e){return typeof e=="string"&&Zy.has(e)}var no={width:320,height:180,deviceScaleFactor:1},mh="Browser harness has been destroyed";function gh(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function zs(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function Xs(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function Qs(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 Hu(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 yh(e){return e.querySelector("[aria-live]")?.textContent??""}function qu(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 hh(e,t,n){let r=Array.from(e.querySelectorAll("*")),i=null,o=Number.POSITIVE_INFINITY;for(let s of r){if(!(s instanceof HTMLElement))continue;let a=s.getBoundingClientRect();if(t>=a.left&&t<a.right&&n>=a.top&&n<a.bottom){let c=Math.max(1,a.width*a.height);c<=o&&(i=s,o=c)}}return i??e}function Wu(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 Zs(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=e.geometry,r=e.semanticLayers,i=e.viewport?.width??no.width,o=e.viewport?.height??no.height,s=e.viewport?.deviceScaleFactor??no.deviceScaleFactor,a=e.reducedMotion===!0,c=e.inputModality??"pointer",m=e.origin??0,u=e.fit??"contain",E=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),v=Object.getOwnPropertyDescriptor(window,"innerWidth"),R=Object.getOwnPropertyDescriptor(window,"innerHeight"),x=Wu(a),h=()=>{Object.defineProperty(window,"devicePixelRatio",{value:s,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:i,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:o,configurable:!0})};h();let P=document.createElement("div");P.setAttribute("data-cyberart-browser-harness",""),P.style.position="relative",P.style.overflow="auto",P.tabIndex=-1,document.body.appendChild(P);let V=[],j=[],T=!1,_=0,f=e.createId??(()=>`br-${++_}`),p=()=>jo({contentWidth:e.contentWidth??i,contentHeight:e.contentHeight??o,viewportWidth:i,viewportHeight:o,mode:u,devicePixelRatio:s}),S=p(),d=()=>Math.max(1,Math.round(i*s)),l=()=>Math.max(1,Math.round(o*s)),g=($,X)=>{let y=n?.regions.find(I=>I.id===$);if(!y)return;let b=zo(y,S);if(b)return X.style.position=X.style.position||"absolute",X.style.left=`${b.x}px`,X.style.top=`${b.y}px`,X.style.width=`${b.width}px`,X.style.height=`${b.height}px`,Qs(X,b.x,b.y,b.width,b.height),{...b}},k=()=>{S=p(),P.style.width=`${i}px`,P.style.height=`${o}px`,Xs(P,i,o),Qs(P,0,0,i,o),P.dataset.inputModality=c,P.dataset.reducedMotion=a?"true":"false",h()};k();let N=()=>({root:P,get layout(){return zs(S)},get reducedMotion(){return a},get inputModality(){return c},placeRegion:g}),A=e.mount?.(N())??{},B=A.participants??[],W,D,C=()=>{};if(B.length>0){for(let $ of B)$.container&&Xs($.container,d(),l());W=Xo({origin:m,width:d(),height:l(),createId:f,now:()=>m,participants:B.map($=>({...$,seed:$.seed??t,width:$.width??d(),height:$.height??l()}))}),C=W.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",nt],$=>{j.push($)}),A.compositor&&(D=As({...A.compositor,group:W,width:i,height:o,dpr:s}))}let w=()=>({...N(),group:W,compositor:D,publish($){if(!W)throw new Error("Browser harness: publish requires mounted carts");return W.publish($)}}),M=()=>{if(k(),W){let $=d(),X=l();for(let y of B){y.container&&(Xs(y.container,$,X),y.container.style.width=`${i}px`,y.container.style.height=`${o}px`);try{let b=W.participant(y.id).cart.canvas;b&&(b.style.width=`${i}px`,b.style.height=`${o}px`,Qs(b,0,0,i,o))}catch{}}}},F=()=>{if(T)throw new Error(mh)};M(),A.ready?.(w());let G=($,X,y)=>{if(V.push({type:"click",x:$,y:X,...y?{selector:y}:{}}),y){let ne=P.querySelector(y);if(!(ne instanceof HTMLElement))throw new Error(`No element matches ${y}`);qu(ne,$,X);return}let b=r?r.hitTest(Fn({x:$,y:X},S)):void 0,I=b===void 0&&n!==void 0?Yo({x:$,y:X},S,n,{space:"css"}):b?{id:b.id}:void 0,H=(I?P.querySelector(`#${gh(I.id)}`):null)??hh(P,$,X);qu(H,$,X)};return{root:P,get group(){return W},get compositor(){return D},get layout(){return zs(S)},get events(){return j.slice()},goto(){F()},setViewport($,X,y){F(),i=Math.max(1,$|0),o=Math.max(1,X|0),y!==void 0&&(s=y>0?y:1),V.push({type:"viewport",width:i,height:o,dpr:s}),D?D.resize(i,o,s):W&&W.resize(d(),l()),M(),A.relayout?.(w())},setReducedMotion($){F(),a=$,x(),x=Wu(a),V.push({type:"reducedMotion",value:$}),M(),A.relayout?.(w())},setInputModality($){F(),c=$,V.push({type:"inputModality",value:$}),M()},click($,X){if(F(),typeof $=="string"){let y=P.querySelector($);if(!(y instanceof HTMLElement))throw new Error(`No element matches ${$}`);let b=y.getBoundingClientRect();G(b.left+b.width/2,b.top+b.height/2,$);return}if(X===void 0)throw new Error("click(x, y) requires a y coordinate");G($,X)},key($){F(),V.push({type:"key",key:$}),(document.activeElement instanceof HTMLElement?document.activeElement:P).dispatchEvent(new KeyboardEvent("keydown",{key:$,bubbles:!0,cancelable:!0}))},focus($){F();let X=P.querySelector($);if(!(X instanceof HTMLElement))throw new Error(`No element matches ${$}`);X.focus()},async step($=1){F(),V.push({type:"step",frames:$}),W&&await W.step($)},async advance($){F(),V.push({type:"advance",ms:$}),W&&await W.step(Math.max(0,Math.round($/1e3*30)))},screenshot(){if(F(),D){let $=D.captureComposedFrame();return{imageData:$.imageData,pngDataUrl:$.pngDataUrl,html:P.outerHTML,declaredOrder:$.declaredOrder.map(X=>X.id)}}return{imageData:null,pngDataUrl:null,html:P.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return F(),{focus:Hu(document.activeElement),live:yh(P),html:P.outerHTML,publishedRegions:(r?.inspectPublished()??[]).map($=>({id:$.id,geometryKinds:[...$.geometryKinds],name:$.a11y?.name??null,role:$.a11y?.role??null}))}},async inspect(){F();let $={},X={},y=0;if(W){let b=await W.inspect();for(let I of b.diagnostics.participantIds)$[I]=W.participant(I).events.slice(),X[I]=b.participants[I]?.state,y=b.diagnostics.clocks[I]?.framesElapsed??y}return{host:A.hostState?.()??null,layout:zs(S),events:j.slice(),participantEvents:$,state:X,focus:Hu(document.activeElement),publishedRegions:(r?.inspectPublished()??[]).map(b=>({id:b.id,geometryKinds:[...b.geometryKinds],name:b.a11y?.name??null,role:b.a11y?.role??null})),scrollTop:P.scrollTop,clock:{framesElapsed:y}}},reproduction(){return F(),{seed:t,viewport:{width:i,height:o,dpr:s},reducedMotion:a,inputModality:c,actions:V.map($=>({...$}))}},captureComposedFrame(){if(F(),!D)throw new Error("Browser harness: captureComposedFrame requires a compositor");return D.captureComposedFrame()},destroy(){if(!T){T=!0,C(),document.activeElement instanceof HTMLElement&&P.contains(document.activeElement)&&document.activeElement.blur();try{A.destroy?.()}finally{try{D?.destroy()}finally{try{W?.destroy()}finally{P.remove(),x(),E&&Object.defineProperty(window,"devicePixelRatio",E),v&&Object.defineProperty(window,"innerWidth",v),R&&Object.defineProperty(window,"innerHeight",R)}}}}}}}function bh(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 ra=1,ia=1,oo="production.scenario.state.observed",mr="production.scenario.state.failed",so="production.scenario.diagnostic.lifecycle",Gu=[oo,mr,so],ju=["input","reducer","routing","binding","cue","pixels","caption","audio","save-replay"],Uu=["invalid-scenario","invalid-schema","unknown-field","missing-field","callbacks-forbidden","missing-participant","missing-layer","destroyed","assertion-failed"],Ju=["desktop","mobile"],io={desktop:{width:64,height:48,deviceScaleFactor:1},mobile:{width:48,height:64,deviceScaleFactor:2}},vh="Production scenario runner has been destroyed",Eh=new Set(Gu),Sh=new Set(Uu),kh=new Set(ju),Yu=new Set(Ju),Rh=new Set(["id","schemaVersion","seed","required","matrix","steps"]),Ih=new Set(["participants","layers"]),Ch=new Set(["viewport","width","height","dpr","reducedMotion","mute","failedAssetIds","fallback","inputModality"]),Ah=new Set(["click","key","focus","step","viewport","reducedMotion","mute","failAsset","save","reload","replay"]);function Ae(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r&&(i.boundary=r),i}function St(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Cn(e){return typeof e=="string"&&e.length>0}function Ye(e){return JSON.parse(JSON.stringify(e))}function oa(e,t,n){if(typeof e=="function"){n.push(Ae("callbacks-forbidden","authored scenarios must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>oa(r,`${t}[${i}]`,n));return}if(St(e))for(let[r,i]of Object.entries(e))oa(i,t?`${t}.${r}`:r,n)}function ea(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(Ae("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function Ku(e,t,n){if(!Array.isArray(e))return n.push(Ae("invalid-schema","must be an array of strings",t)),[];let r=[];return e.forEach((i,o)=>{if(!Cn(i)){n.push(Ae("invalid-schema","id must be a non-empty string",`${t}[${o}]`));return}r.push(i)}),r}function ta(){return{version:1,fields:{scenarioId:{type:"string"},seed:{type:"string",optional:!0},boundary:{type:"string",optional:!0},reason:{type:"string",optional:!0},code:{type:"string",optional:!0},missing:{type:"array",optional:!0}}}}function na(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Ph(){return[na(pe(oo,ta())),na(pe(mr,ta())),na(He(so,ta()))]}function Th(e){return typeof e=="string"&&Eh.has(e)}function wh(e){return typeof e=="string"&&Sh.has(e)}function xh(e){return typeof e=="string"&&kh.has(e)}function _h(e,t,n){if(!St(e)||!Cn(e.type)){n.push(Ae("invalid-schema","step.type is required",t));return}if(!Ah.has(e.type)){n.push(Ae("unknown-field",`unknown step type "${e.type}"`,`${t}.type`));return}let r=n.length,i=a=>{Cn(e[a])||n.push(Ae("missing-field",`${e.type} step requires ${a}`,`${t}.${a}`))},o=a=>{(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push(Ae("missing-field",`${e.type} step requires numeric ${a}`,`${t}.${a}`))},s=a=>{typeof e[a]!="boolean"&&n.push(Ae("missing-field",`${e.type} step requires boolean ${a}`,`${t}.${a}`))};switch(e.type){case"click":{let a=Cn(e.selector),c=typeof e.x=="number"&&typeof e.y=="number";!a&&!c&&n.push(Ae("missing-field","click step requires selector or x and y",t));break}case"key":i("key");break;case"focus":i("selector");break;case"step":o("frames");break;case"viewport":{let a=e.kind!==void 0;a&&!Yu.has(String(e.kind))&&n.push(Ae("invalid-schema","viewport.kind must be desktop or mobile",`${t}.kind`));let c=typeof e.width=="number"&&typeof e.height=="number";!a&&!c&&n.push(Ae("missing-field","viewport step requires kind or width and height",t));break}case"reducedMotion":case"mute":s("value");break;case"failAsset":i("assetId");break;default:break}if(n.length===r)return Ye(e)}function zu(e){let t=[];if(oa(e,"",t),!St(e))return{ok:!1,errors:[Ae("invalid-scenario","scenario must be an object")]};if(ea(e,Rh,"",t),Cn(e.id)||t.push(Ae("missing-field","id is required","id")),e.schemaVersion!==ra&&t.push(Ae("invalid-schema","schemaVersion must be 1","schemaVersion")),Cn(e.seed)||t.push(Ae("missing-field","seed is required","seed")),!St(e.required))t.push(Ae("missing-field","required participants and layers are required","required"));else{ea(e.required,Ih,"required",t);let o=Ku(e.required.participants,"required.participants",t),s=Ku(e.required.layers,"required.layers",t);o.length===0&&t.push(Ae("missing-field","required.participants must not be empty","required.participants")),s.length===0&&t.push(Ae("missing-field","required.layers must not be empty","required.layers"))}let n;e.matrix!==void 0&&(St(e.matrix)?(ea(e.matrix,Ch,"matrix",t),e.matrix.viewport!==void 0&&!Yu.has(String(e.matrix.viewport))&&t.push(Ae("invalid-schema","matrix.viewport must be desktop or mobile","matrix.viewport")),n=Ye(e.matrix)):t.push(Ae("invalid-schema","matrix must be an object","matrix")));let r;if(e.steps!==void 0&&(Array.isArray(e.steps)?(r=[],e.steps.forEach((o,s)=>{let a=_h(o,`steps[${s}]`,t);a&&r.push(a)})):t.push(Ae("invalid-schema","steps must be an array","steps"))),t.length>0)return{ok:!1,errors:t};let i={id:e.id,schemaVersion:ra,seed:e.seed,required:{participants:[...e.required.participants],layers:[...e.required.layers]}};return n&&(i.matrix=n),r&&(i.steps=r),{ok:!0,scenario:i}}function Wt(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=2166136261;for(let r=0;r<t.length;r++)n^=t[r],n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function fr(e){return JSON.stringify(e)}function ro(e,t){let n=new Set(t);return e.filter(r=>!n.has(r))}function Xu(e,t={}){let n=(r,i,o)=>({boundary:r,code:i,detail:o});if(t.inputDispatched===!0&&!e.inputDispatched)return n("input","assertion-failed","input was not dispatched");if(t.reducerAccepted===!0&&e.reducerAccepted!==!0)return n("reducer","assertion-failed","host reducer did not accept");if(t.reducerRejected===!0&&e.reducerRejected!==!0)return n("reducer","assertion-failed","host reducer did not reject");if(t.routedTypes){for(let r of t.routedTypes)if(!e.routedTypes.includes(r))return n("routing","assertion-failed",`missing routed type "${r}"`)}if(t.requiredParticipantsPresent===!0&&!e.requiredParticipantsPresent)return n("routing","missing-participant",`missing participants: ${e.missingParticipants.join(", ")}`);if(t.selectedBindingIds){for(let r of t.selectedBindingIds)if(!e.selectedBindingIds.includes(r))return n("binding","assertion-failed",`missing binding "${r}"`)}if(t.sequenceId&&e.sequenceId!==t.sequenceId)return n("cue","assertion-failed",`expected sequence "${t.sequenceId}"`);if(t.requiredLayersPresent===!0&&!e.requiredLayersPresent)return n("pixels","missing-layer",`missing layers: ${e.missingLayers.join(", ")}`);if(t.captions){for(let r of t.captions)if(!e.captions.includes(r))return n("caption","assertion-failed",`missing caption "${r}"`)}return t.audioInvoked===!0&&!e.audioInvoked?n("audio","assertion-failed","audio was not invoked"):t.audioFailed===!0&&!e.audioFailed?n("audio","assertion-failed","audio did not fail as required"):t.snapshotOk===!0&&e.snapshotOk!==!0?n("save-replay","assertion-failed","snapshot was not valid"):t.replayMatch===!0&&e.replayMatch!==!0?n("save-replay","assertion-failed","replay traces did not match"):null}function Oh(e){let t=e?.viewport==="mobile"?"mobile":"desktop",n=io[t];return{preset:t,viewport:{width:e?.width??n.width,height:e?.height??n.height,deviceScaleFactor:e?.dpr??n.deviceScaleFactor}}}function Dh(e){return{type:"host.intent.select",kind:"intent",payload:{id:e}}}function Nh(e){return{type:"host.intent.key",kind:"intent",payload:{key:e}}}function Mh(e,t,n,r){return{version:1,cartId:e,seed:t,framesElapsed:n,state:r}}function Qu(e){let t=zu(e.scenario);if(!t.ok)throw new Error(`createProductionScenarioRunner: ${t.errors.map(q=>q.detail).join("; ")}`);let n=t.scenario,r=n.matrix??{},{preset:i,viewport:o}=Oh(r),s=e.host,a=Ye(s.initialState),c=null,m,u,E=!1,v=[],R=0,x=0,h=e.createId??(()=>`ps-${++R}`),P=e.mapClick??Dh,V=e.mapKey??Nh,j=e.sequenceBindings??{},T=e.origin??0,_=e.semanticRegions&&e.semanticRegions.length>0?Ds({originFrame:0,regions:e.semanticRegions}):void 0,f,p,S,d=Wo({originFrame:0,reducedSensory:r.reducedMotion===!0||r.mute===!0}),l=oi(),g,k=null,N=q=>s.project?s.project(q):Ye(q),A=q=>g?g.publish(q):J.group?.publish(q),B=q=>{let U=N(a),le=typeof U.worldRevision=="string"||typeof U.worldRevision=="number"?U.worldRevision:void 0;S?.apply(U,le!==void 0?{revision:le}:void 0);let O=q;if(O&&p){x+=1;let K=`${n.id}:${O}:${x}`;p.playSequence(O,{invocationId:K,idempotencyKey:K,bindings:j[O]??{}})}C()},W=q=>{let U=s.reduce(Ye(a),q);c=U,a=Ye(U.state);let le=St(q.payload)?q.payload:{};return U.accepted?A({type:"host.state.accepted",kind:"state",payload:{...le,reason:U.reason??"accepted"}}):A({type:"host.state.rejected",kind:"state",payload:{...le,reason:U.reason??"rejected"}}),B(U.playSequence),U},D=document.createElement("div");D.setAttribute("aria-live","polite"),D.id="status",D.textContent="";let C=()=>{let q=p?.inspect().captions.filter(le=>le.visible).map(le=>le.text)??[],U=typeof a.caption=="string"?a.caption:"";D.textContent=q[0]??U},w=()=>{let q=J.group,U=J.compositor,le=q?q.inspectParticipants().map(Q=>Q.id):[],O=U?U.layers().map(Q=>Q.id):[],K=ro(n.required.participants,le);if(K.length>0)return{boundary:"routing",code:"missing-participant",detail:`missing participants: ${K.join(", ")}`};let Y=ro(n.required.layers,O);return Y.length>0?{boundary:"pixels",code:"missing-layer",detail:`missing layers: ${Y.join(", ")}`}:null},M=q=>({scenarioId:n.id,seed:n.seed,boundary:q.boundary,reason:q.detail}),F=q=>{let U={type:so,kind:"diagnostic",payload:{...M(q),code:q.code}};A(U),e.router?.publish(U)},G=q=>{let U={type:mr,kind:"state",payload:M(q)};A(U),e.router?.publish(U),F(q)},J=Zs({seed:n.seed,viewport:o,reducedMotion:r.reducedMotion===!0,inputModality:r.inputModality??"pointer",origin:T,createId:h,geometry:e.geometry,semanticLayers:_,contentWidth:e.contentWidth??o.width,contentHeight:e.contentHeight??o.height,mount(q){let U=[],le=[...e.geometry?.regions.map(K=>K.id)??[],...(e.semanticRegions??[]).map(K=>K.id)],O=new Set;for(let K of le){if(O.has(K))continue;O.add(K);let Y=document.createElement("button");Y.type="button",Y.id=K,Y.setAttribute("data-testid",K),Y.setAttribute("aria-label",K),q.placeRegion(K,Y),q.root.append(Y),U.push(Y)}return q.root.append(D),{participants:e.participants,compositor:{layers:e.compositorLayers},hostState:()=>Ye(a),ready(K){if(K.group&&(g=l.bind(K.group)),K.compositor&&e.visualLayers&&e.visualLayers.length>0){f=Ms({compositor:K.compositor,originFrame:0,reducedMotion:r.reducedMotion===!0,sceneId:n.id,layers:e.visualLayers});for(let[Q,re]of Object.entries(e.visualSources??{}))f.registerSource(Q,re),f.handleHostEvent({type:je,kind:"state",payload:{id:Q}})}let Y=[];for(let Q of e.sequences??[]){let re=sr(Q);if(!re.ok)throw new Error(`createProductionScenarioRunner: sequence ${re.errors.map(de=>de.detail).join("; ")}`);Y.push(re.sequence)}if(p=$s({originFrame:0,reducedMotion:r.reducedMotion===!0,reducedSensory:r.mute===!0||r.fallback===!0,audio:d,semantic:_,visual:f,sequences:Y}),e.bindings!==void 0){let Q=zi(e.bindings);if(!Q.ok)throw new Error(`createProductionScenarioRunner: ${Q.errors.map(re=>re.detail).join("; ")}`);S=Us({manifest:Q.manifest,visual:f,semantic:_,sequences:p})}for(let Q of U)Q.addEventListener("click",()=>{W(P(Q.id))});q.root.addEventListener("keydown",Q=>{let re=V(Q.key);re&&W(re)}),B()},relayout(K){for(let Y of O){let Q=K.root.querySelector(`#${Y}`);Q instanceof HTMLElement&&K.placeRegion(Y,Q)}},destroy(){D.remove();for(let K of U)K.remove()}}}}),$=()=>{if(E)throw new Error(vh)};d.unlock(),r.mute===!0&&d.broker.mute();let X=new Set(r.failedAssetIds??[]),y=new Set([...X]);for(let q of Object.values(j))for(let U of Object.values(q.assets??{}))U&&y.add(U);for(let q of y){let U={type:X.has(q)?$e:je,kind:"state",payload:{id:q}};d.handleHostEvent(U),f?.handleHostEvent(U)}k=w(),k&&G(k);let b=async q=>{g?await g.step(q):await J.step(q),f?.step(q),p?.step(q),d.step(q),C()},I=()=>{let q=J.group,U=J.compositor,le=q?q.inspectParticipants().map(be=>be.id):[],O=U?U.layers().map(be=>be.id):[],K=ro(n.required.participants,le),Y=ro(n.required.layers,O),Q=J.events,re=[...p?.inspect().captions.filter(be=>be.visible).map(be=>be.text)??[],...typeof a.caption=="string"&&a.caption?[a.caption]:[]],de=d.snapshot(),Le=J.screenshot(),Fe=v.find(be=>be.type==="click");return{inputDispatched:v.some(be=>be.type==="click"||be.type==="key"),inputTarget:Fe?.selector,reducerAccepted:c?.accepted===!0,reducerRejected:c?c.accepted===!1:void 0,reducerReason:c?.reason,routedTypes:Q.map(be=>be.type),rejected:Q.some(be=>be.type===nt),selectedBindingIds:S?.inspect().selectedBindingIds??[],sequenceId:p?.inspect().active?.sequenceId??c?.playSequence??null,sequencePhase:p?.inspect().active?.phase??null,captions:re,declaredOrder:Le.declaredOrder,requiredParticipantsPresent:K.length===0,requiredLayersPresent:Y.length===0,missingParticipants:K,missingLayers:Y,audioInvoked:de.events.some(be=>be.type==="audio.cue.scheduled"||be.type==="audio.cue.started"),audioFailed:de.events.some(be=>be.type==="audio.cue.failed")||(r.failedAssetIds?.length??0)>0,muted:de.muted,replayMatch:u?.ok,snapshotOk:m!==void 0}},L=q=>{k=w();let U=I(),le={requiredParticipantsPresent:!0,requiredLayersPresent:!0,...q},O=k??Xu(U,le),K=J.screenshot(),Y=J.accessibilitySnapshot(),Q=_?.inspectPublished()??[],re=l.records(),de=m?fr(m):"",Le=K.imageData?new Uint8Array(K.imageData.data):new Uint8Array,Fe=Object.keys(e.visualSources??{}).sort(),be=typeof a.worldRevision=="string"||typeof a.worldRevision=="number"?a.worldRevision:null,kt={schemaVersion:ia,scenarioId:n.id,seed:n.seed,matrix:{viewport:i,width:o.width,height:o.height,dpr:o.deviceScaleFactor??1,...r},hashes:{pixels:Wt(Le),semantic:Wt(fr(Q)),a11y:Wt(fr(Y)),trace:Wt(fr(re)),snapshot:de?Wt(de):"0".repeat(8),assets:Wt(fr(Fe))},revisions:{world:be,bindings:S?.inspect().revision??null,snapshot:De},traces:{envelopes:J.events.slice(),inspector:re,audio:d.snapshot().events.slice(),actions:v.slice()},screenshot:{pngDataUrl:K.pngDataUrl,declaredOrder:K.declaredOrder.slice(),width:K.imageData?.width??o.width,height:K.imageData?.height??o.height},semantic:Q,a11y:Y,firstBrokenBoundary:O?.boundary??null,localization:O,participants:J.group?.inspectParticipants().map(Kt=>Kt.id)??[],layers:J.compositor?.layers().map(Kt=>Kt.id)??[],observation:U};return A({type:O?mr:oo,kind:"state",payload:{scenarioId:n.id,seed:n.seed,boundary:O?.boundary,reason:O?.detail}}),O&&F(O),kt},H=()=>({schemaVersion:ia,host:Ye(a),lastDecision:c?Ye(c):null,visual:f?.snapshot()??null,semantic:_?.snapshot()??null,bindings:S?.snapshot()??null,sequences:p?.snapshot()??null,audio:d.snapshot()}),ne=()=>{let q=Dr({cart:{id:n.id,version:"1"},seed:n.seed,clock:{framesElapsed:0},engineState:Mh(n.id,n.seed,0,Ye(a)),hostState:H(),createdAt:"2026-09-05T00:00:00.000Z"});if(!q.ok)throw new Error(q.errors.map(U=>U.detail).join("; "));return m=q.snapshot,q.snapshot},z=q=>{let U=q.hostState;if(!St(U)||!St(U.host))throw new Error("Production scenario reload: hostState.host is required");a=Ye(U.host),c=St(U.lastDecision)?Ye(U.lastDecision):null,U.visual&&f&&f.restore(U.visual),U.semantic&&_&&_.restore(U.semantic),U.bindings&&S&&S.restore(U.bindings),U.sequences&&p&&p.restore(U.sequences),B(),m=q},ie=async()=>{let q=J.group;if(!g||!q)return u={ok:!1,detail:"replay requires a mounted runtime group"},u;let U=await g.exportTrace(),le=Qu({...e,scenario:n,createId:(()=>{let O=0;return()=>`ps-${++O}`})()});try{let O=await ls(U,le.harness.group);return u=us(U.records,O.report.records),O.inspector.destroy(),u}finally{le.destroy()}},oe=async q=>{switch(v.push(Ye(q)),q.type){case"click":if(typeof q.selector=="string")J.click(q.selector);else if(typeof q.x=="number"&&typeof q.y=="number")J.click(q.x,q.y);else throw new Error("click step requires selector or x,y");return;case"key":J.root.focus(),J.key(q.key);return;case"focus":J.focus(q.selector);return;case"step":await b(q.frames);return;case"viewport":{let U=q.kind==="mobile"?io.mobile:q.kind==="desktop"?io.desktop:o;J.setViewport(q.width??U.width,q.height??U.height,q.dpr??U.deviceScaleFactor);return}case"reducedMotion":J.setReducedMotion(q.value);return;case"mute":q.value?d.broker.mute():d.broker.unmute();return;case"failAsset":{let U={type:$e,kind:"state",payload:{id:q.assetId}};d.handleHostEvent(U),f?.handleHostEvent(U);return}case"save":ne();return;case"reload":if(!m)throw new Error("reload requires a prior save");z(m);return;case"replay":await ie();return}};return{scenario:n,harness:J,audio:d,inspector:l,goto(){$(),J.goto()},click(q,U){$(),v.push(typeof q=="string"?{type:"click",selector:q}:{type:"click",x:q,y:U}),J.click(q,U)},key(q){$(),v.push({type:"key",key:q}),J.root.focus(),J.key(q)},focus(q){$(),v.push({type:"focus",selector:q}),J.focus(q)},setViewport(q,U,le){$(),v.push({type:"viewport",width:q,height:U,dpr:le}),J.setViewport(q,U,le)},setReducedMotion(q){$(),v.push({type:"reducedMotion",value:q}),J.setReducedMotion(q)},mute(q=!0){$(),v.push({type:"mute",value:q}),q?d.broker.mute():d.broker.unmute()},failAsset(q){$(),v.push({type:"failAsset",assetId:q});let U={type:$e,kind:"state",payload:{id:q}};d.handleHostEvent(U),f?.handleHostEvent(U)},async step(q=1){$(),v.push({type:"step",frames:q}),await b(q)},applyHostIntent(q){return $(),W(q)},playSequence(q,U=`${n.id}:${q}`){$(),p?.playSequence(q,{invocationId:U,idempotencyKey:U,bindings:j[q]??{}}),C()},publish(q){return $(),A(q)},save(){return $(),v.push({type:"save"}),ne()},reload(q){$();let U=q??m;if(!U)throw new Error("reload requires a prior save or an explicit snapshot");v.push({type:"reload"}),z(U)},async replay(){return $(),v.push({type:"replay"}),ie()},async run(q){$(),J.goto();let U=q??n.steps??[];for(let le of U)await oe(le);return L()},captureEvidence(q){return $(),L(q)},inspect(){return $(),{host:Ye(a),lastDecision:c,bindings:S?.inspect()??null,sequences:p?.inspect()??null,visual:f?.inspect()??null,semantic:_?.inspect()??null,audio:d.snapshot(),participants:J.group?.inspectParticipants().map(q=>q.id)??[],layers:J.compositor?.layers().map(q=>q.id)??[],composition:w()}},destroy(){E||(E=!0,g?.unbind(),l.destroy(),S?.destroy(),p?.destroy(),f?.destroy(),_?.destroy(),d.destroy(),J.destroy())}}}var Lh=128,Vh=144,Bh=176,Fh=224,$h=0,Hh=15,qh=127,Wh=8192,Kh=16383;function tl(e){return Number.isInteger(e)&&e>=0&&e<=15}function gr(e){return Number.isInteger(e)&&e>=0&&e<=127}function ao(e,t){return e&240|t&15}function Gh(e){return e&15}function ca(e){if(!tl(e.channel))return;let t=e.channel;if(e.kind==="noteon"||e.kind==="noteoff"){let n=e.velocity??(e.kind==="noteon"?100:0);if(!gr(e.note)||!gr(n))return;let r=e.kind==="noteon"?144:128;return Uint8Array.from([ao(r,t),e.note,n])}if(e.kind==="cc")return!gr(e.controller)||!gr(e.value)?void 0:Uint8Array.from([ao(176,t),e.controller,e.value]);if(e.kind==="pitch"&&!(!Number.isInteger(e.value)||e.value<0||e.value>16383))return Uint8Array.from([ao(224,t),e.value&127,e.value>>7&127])}function sa(e){let t=aa(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],s=t[2];return{kind:r===128||s===0?"noteoff":"noteon",channel:i,note:o,velocity:s,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 aa(e){return e instanceof Uint8Array?new Uint8Array(e):Uint8Array.from(e)}function jh(e){return Array.from(e)}function Uh(e){if(!("kind"in e))return!1;let t=e.kind;return t==="noteon"||t==="noteoff"||t==="cc"||t==="pitch"}function Zu(e){if(e instanceof Uint8Array)return aa(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 aa(e.data);if(Uh(e))return ca(e)}}function Jh(e,t){return e==="*"?!0:e==="note"?t.kind==="noteon"||t.kind==="noteoff":t.kind===e}function Yh(e){return{send(t,n){e.send(Array.from(t),n)}}}function zh(e){if(typeof navigator>"u")return;let t=navigator.requestMIDIAccess;if(typeof t=="function")return t.call(navigator,e)}function el(e){if(e instanceof Error&&e.message)return e.message;if(typeof e=="string"&&e.length>0)return e}var da=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=Zu(t);if(!n)return;let r=sa(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=Zu(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??zh,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:el(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=ca(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(jh(t))}catch(n){return{ok:!1,reason:"invalid",detail:el(n)}}return{ok:!0,data:t}}dispatch(t){for(let n of this.listeners)Jh(n.kind,t)&&n.listener(t)}deliverBytes(t){let n=sa(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(a=>n.add(a));for(let a of[...this.attachedInputs])n.has(a)||(a.removeEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.delete(a));t.inputs.forEach(a=>{this.attachedInputs.has(a)||(a.addEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.add(a))});let r=new Set,i=0;t.inputs.forEach(()=>{i+=1});let o=0;if(t.outputs.forEach(a=>{o+=1,r.add(a)}),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 s;t.outputs.forEach(a=>{s||(s=a)}),s&&(this.adoptedHardwareOutput=s,this.output=Yh(s))}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{Ef as ANCHOR_ORIGINS,$e as ASSET_FAILED_EVENT,Ja as ASSET_FAILURE_CODES,Ua as ASSET_KINDS,je as ASSET_READY_EVENT,Jp as AUDIO_CUE_EVENTS,un as AUDIO_CUE_FAILED_EVENT,Wr as AUDIO_CUE_SCHEDULED_EVENT,Gr as AUDIO_CUE_SKIPPED_EVENT,Kr as AUDIO_CUE_STARTED_EVENT,Ad as CAPABILITY_ASSET_KINDS,Jr as CAPABILITY_BLEND_MODES,Td as CAPABILITY_CART_KINDS,Yr as CAPABILITY_CLEAR_POLICIES,fn as CAPABILITY_DEVICE_GRANTS,Pd as CAPABILITY_INTEGRATIONS,Cd as CAPABILITY_MANAGERS,Qp as CAPABILITY_MANIFEST_VERSION,Id as CAPABILITY_PHASES,Cs as COMPOSITOR_BLEND_MODES,qg as COMPOSITOR_CLEAR_POLICIES,Wg as COMPOSITOR_SOURCE_KINDS,eo as CONTENT_REVISION_ACTIVATED_EVENT,pr as CONTENT_REVISION_DIAGNOSTIC_EVENT,lr as CONTENT_REVISION_DISCOVERED_EVENT,$u as CONTENT_REVISION_ERROR_CODES,Qy as CONTENT_REVISION_EVENTS,Et as CONTENT_REVISION_MANIFEST_VERSION,Zi as CONTENT_REVISION_REJECTED_EVENT,Rn as CONTENT_REVISION_ROLLED_BACK_EVENT,ur as CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION,Xi as CONTENT_REVISION_STAGING_EVENT,In as CONTENT_REVISION_SUPERSEDED_EVENT,Qi as CONTENT_REVISION_VALIDATED_EVENT,vf as COORDINATE_SPACES,ht as CUE_CANCELLED_EVENT,Tt as CUE_COMPLETED_EVENT,Kp as CUE_LIFECYCLE_EVENTS,mt as CUE_REPLACED_EVENT,yt as CUE_STARTED_EVENT,yr as CYBERART_CANVAS_ATTR,no as DEFAULT_BROWSER_VIEWPORT,Co as DEFAULT_DUCK_GAIN,jd as DEFAULT_GROUP_HEIGHT,Gd as DEFAULT_GROUP_WIDTH,Br as DEFAULT_MAX_HOPS,ii as DEFAULT_MAX_INSPECTOR_RECORDS,Qc as DEFAULT_MAX_SELECTION_RECORDS,cc as DEFAULT_PORTAL_MAX_DEPTH,io as DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS,_t as DEFAULT_SENSITIVE_KEYS,Or as ENGINE_SNAPSHOT_RUNTIME,Mn as EVENT_ENVELOPE_VERSION,Ff as EXECUTABLE_MODULE_ERROR_CODES,yf as GEOMETRY_CONTRACT_VERSION,wt as HOST_GRANT_SNAPSHOT_SCHEMA_VERSION,Eu as HOST_STATE_ACCEPTED_EVENT,zt as HostChannel,gd as INVALID_PRESENTATION_MODEL_MESSAGE,Oe as IncompatibleCartStateError,pi as JOB_APPLIED_EVENT,ci as JOB_AWAITING_EVALUATION_EVENT,mi as JOB_CANCELED_EVENT,ai as JOB_CLAIMED_EVENT,fs as JOB_DIAGNOSTIC_EVENT,Sc as JOB_EVALUATOR_DECISIONS,fi as JOB_FAILED_EVENT,Sm as JOB_LIFECYCLE_EVENTS,Yn as JOB_ORCHESTRATION_SNAPSHOT_SCHEMA_VERSION,di as JOB_PROGRESS_EVENT,zn as JOB_QUEUED_EVENT,li as JOB_READY_EVENT,kc as JOB_REDACTED_KEYS,bc as JOB_RESULT_REF_SCHEMA_VERSION,Ec as JOB_RETRYABILITY,ui as JOB_RETRY_SCHEDULED_EVENT,vc as JOB_STATES,si as JOB_SUBMITTED_EVENT,gi as JOB_SUPERSEDED_EVENT,hr as KeyboardManager,_r as LEGACY_SNAPSHOT_SCHEMA_VERSION,Hh as MIDI_CHANNEL_MAX,$h as MIDI_CHANNEL_MIN,Bh as MIDI_CONTROL_CHANGE,qh as MIDI_DATA_MAX,Lh as MIDI_NOTE_OFF,Vh as MIDI_NOTE_ON,Fh as MIDI_PITCH_BEND,Wh as MIDI_PITCH_CENTER,Kh as MIDI_PITCH_MAX,da as MidiManager,Jn as PORTAL_ABORTED_EVENT,xt as PORTAL_ENTERED_EVENT,cs as PORTAL_EXCLUSIVE_GRANTS,Un as PORTAL_EXITED_EVENT,am as PORTAL_LIFECYCLE_EVENTS,Gn as PORTAL_LIFECYCLE_SNAPSHOT_SCHEMA_VERSION,uc as PORTAL_METAPHORS,lc as PORTAL_OUTCOME_KINDS,jn as PORTAL_OUTCOME_SCHEMA_VERSION,cn as PRESENTATION_ADAPTER_VERSION,wu as PRESENTATION_AUDIO_CAPABILITY_STATUSES,Yi as PRESENTATION_BINDING_APPLIED_EVENT,dr as PRESENTATION_BINDING_DIAGNOSTIC_EVENT,Bu as PRESENTATION_BINDING_ERROR_CODES,Lu as PRESENTATION_BINDING_EVENTS,Gi as PRESENTATION_BINDING_MANIFEST_VERSION,ar as PRESENTATION_BINDING_REJECTED_EVENT,Ws as PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION,Vu as PRESENTATION_BINDING_TARGET_KINDS,Tu as PRESENTATION_COMPLETION_RULES,Pu as PRESENTATION_INTERRUPTION_POLICIES,xu as PRESENTATION_INVOCATION_PHASES,Lo as PRESENTATION_MODEL_EVENT,md as PRESENTATION_PHASES,Ki as PRESENTATION_SEQUENCE_COMPLETED_EVENT,Fs as PRESENTATION_SEQUENCE_DIAGNOSTIC_EVENT,Cu as PRESENTATION_SEQUENCE_EVENTS,Bs as PRESENTATION_SEQUENCE_FAILED_EVENT,Wi as PRESENTATION_SEQUENCE_INTERRUPTED_EVENT,Vi as PRESENTATION_SEQUENCE_PRELOADING_EVENT,Bi as PRESENTATION_SEQUENCE_READY_EVENT,Li as PRESENTATION_SEQUENCE_REQUESTED_EVENT,qi as PRESENTATION_SEQUENCE_SKIPPED_EVENT,Ls as PRESENTATION_SEQUENCE_SNAPSHOT_SCHEMA_VERSION,Fi as PRESENTATION_SEQUENCE_STARTED_EVENT,Hi as PRESENTATION_SEQUENCE_STEP_COMPLETED_EVENT,$i as PRESENTATION_SEQUENCE_STEP_STARTED_EVENT,Mp as PRESENTATION_SUBSCRIBE_PATTERNS,Au as PRESENTATION_TRACK_KINDS,fd as PRESENTATION_UNSUPPORTED_EVENT,ju as PRODUCTION_SCENARIO_BOUNDARIES,so as PRODUCTION_SCENARIO_DIAGNOSTIC_EVENT,Uu as PRODUCTION_SCENARIO_ERROR_CODES,Gu as PRODUCTION_SCENARIO_EVENTS,mr as PRODUCTION_SCENARIO_FAILED_EVENT,oo as PRODUCTION_SCENARIO_OBSERVED_EVENT,ra as PRODUCTION_SCENARIO_SCHEMA_VERSION,ia as PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION,Ju as PRODUCTION_SCENARIO_VIEWPORT_PRESETS,br as PointerManager,it as REDACTED_VALUE,nt as REJECTED_EVENT_TYPE,jf as REMOTE_CART_ERROR_CODES,ns as REMOTE_CART_GRANTS,Xr as REMOTE_CART_MANIFEST_VERSION,Qr as REMOTE_CART_SIGNATURE_ALG,ni as REPLAY_INSPECTOR_SCHEMA_VERSION,hf as ROUND_TRIP_TOLERANCE,bf as ROUND_TRIP_TOLERANCE_CANVAS_PX,An as Random,Zr as RemoteCartCapabilityError,Zc as SELECTION_DECISION_KINDS,ks as SELECTION_REASON_CODES,wi as SELECTION_TRACE_SCHEMA_VERSION,eu as SELECTION_TRACE_SENSITIVE_KEYS,mu as SEMANTIC_APPEARANCE_KEYS,pu as SEMANTIC_GEOMETRY_KINDS,fu as SEMANTIC_HIT_TEST_POLICIES,Qg as SEMANTIC_INTERACTION_KEYS,Ts as SEMANTIC_LAYER_SNAPSHOT_SCHEMA_VERSION,en as SILENT_ASSET_FALLBACK_REF,De as SNAPSHOT_SCHEMA_VERSION,Eo as UNVERSIONED_CART_VERSION,dy as VISUAL_LAYER_EVENTS,or as VISUAL_LAYER_FAILED_EVENT,cy as VISUAL_LAYER_FAILURE_CODES,ir as VISUAL_LAYER_HIDDEN_EVENT,vu as VISUAL_LAYER_INCOMING_SUFFIX,hu as VISUAL_LAYER_KINDS,Di as VISUAL_LAYER_REVEALED_EVENT,Ns as VISUAL_LAYER_SNAPSHOT_SCHEMA_VERSION,bu as VISUAL_LAYER_TRANSITIONS,Mi as VISUAL_LAYER_TRANSITION_COMPLETED_EVENT,Ni as VISUAL_LAYER_TRANSITION_STARTED_EVENT,Ei as WORLD_DISCOVERED_EVENT,Tc as WORLD_EDGE_ACCESS,vi as WORLD_EDGE_ADDED_EVENT,Pc as WORLD_EDGE_VISIBILITIES,wc as WORLD_ENTITY_KINDS,xc as WORLD_ENTITY_STATUSES,er as WORLD_GRAPH_DIAGNOSTIC_EVENT,Bm as WORLD_GRAPH_EVENTS,yn as WORLD_GRAPH_SNAPSHOT_SCHEMA_VERSION,Ac as WORLD_MAP_LAYERS,bi as WORLD_NODE_ADDED_EVENT,hi as WORLD_NODE_KINDS,Ai as WORLD_PATCH_ACCEPTED_EVENT,vn as WORLD_PATCH_DIAGNOSTIC_EVENT,Wc as WORLD_PATCH_ERROR_CODES,Qm as WORLD_PATCH_EVENTS,Hc as WORLD_PATCH_OPS,qc as WORLD_PATCH_PRECONDITION_TYPES,Kc as WORLD_PATCH_REDACTED_KEYS,Pi as WORLD_PATCH_REJECTED_EVENT,tr as WORLD_PATCH_SCHEMA_VERSION,Ii as WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION,Ti as WORLD_PATCH_SUPERSEDED_EVENT,Zn as WORLD_TRANSIT_EVENT,xs as appearanceForState,Sd as applyCueEasing,On as applySnapshotMigrations,Lt as assetStatusEvent,If as assetToNormalized,dp as attachCartStatePersistence,vd as attachPresentationAdapter,$g as attachSelectionTrace,mm as cabinetPortal,is as canonicalizeRemoteCartBody,kr as canonicalizeSeed,Hd as canvasToCss,qd as canvasToNormalized,gf as capabilityManifestToJSON,my as captureVisualLayers,Xt as cloneSnapshotJson,_p as comparePayloadSchemas,us as compareReplayTraces,rh as contentRevisionEventContracts,ve as createAssetFailure,Vt as createAssetPreloader,Ao as createAudioBroker,kd as createAudioCueTimeline,Zs as createBrowserHarness,As as createCompositor,ph as createContentRevisionActivator,Np as createContractRegistry,Nn as createDeclaredAssetResolver,$a as createEngineSnapshotMigrations,_o as createEventRouter,Zo as createExecutableModuleHost,Gl as createFixtureAssetResolver,Wo as createHeadlessAudioAdapter,wm as createHeadlessJobWorker,gn as createHostGrantSet,jl as createHostedAssetResolver,Vm as createJobCoordinator,Af as createLandmarkRegistry,Rc as createMemoryJobPersistence,Jc as createMemoryWorldPersistence,bh as createPlaywrightCompatibleAdapter,ym as createPortalLifecycle,Us as createPresentationBindingRuntime,jo as createPresentationLayout,Mo as createPresentationModelEvent,$s as createPresentationSequencePlayer,bt as createPresentationTimeline,Qu as createProductionScenarioRunner,bd as createReferencePresentationCart,im as createRemoteCartRegistry,sm as createRemoteCartSandbox,dh as createRemoteContentAdapter,oi as createReplayInspector,Po as createRuntime,Xo as createRuntimeGroup,Hg as createSelectionTrace,Ds as createSemanticLayerController,Ha as createSnapshotMigrationRegistry,ah as createStaticContentAdapter,vr as createVirtualClock,Ms as createVisualLayerController,Ut as createWallClock,Xm as createWorldGraph,Ag as createWorldPatchApplier,$d as cssToCanvas,Fn as cssToNormalized,qa as defaultSnapshotMigrationRegistry,Ln as defineCapabilityManifest,He as defineDiagnostic,No as defineIntent,zi as definePresentationBindings,sr as definePresentationSequence,zu as defineProductionScenario,ti as defineRemoteCartManifest,Dr as defineSnapshot,pe as defineStateEvent,Op as deriveAttachOptions,Oa as describeReplayMismatch,xn as detectSnapshotSchemaVersion,Tf as drawGeometryDebug,ca as encodeMidiMessage,Ml as engineStateFromEnvelope,js as evaluatePresentationBindings,ld as familyPatternForType,Wt as fnv1aHex,mn as freezeCapabilityBag,_s as geometryKindsOf,rs as hmacSha256Hex,dd as inferEventKind,tn as isAssetFailure,Ya as isAssetFailureCode,nn as isAssetKind,Yp as isAudioCueEventType,fh as isContentRevisionErrorCode,Gp as isCueLifecycleType,Qt as isLegacyCartStateBundle,tl as isMidiChannel,gr as isMidiData,Wy as isPresentationBindingErrorCode,qy as isPresentationBindingEventType,Vo as isPresentationModel,yd as isPresentationPhase,_u as isPresentationSequenceEventType,xh as isProductionScenarioBoundary,wh as isProductionScenarioErrorCode,Th as isProductionScenarioEventType,Mg as isSelectionDecisionKind,Ng as isSelectionReasonCode,_i as isSemanticBlendMode,ry as isSemanticGeometryKind,ws as isSemanticHitTestPolicy,Pl as isSnapshotEnvelope,Tl as isVersionedSnapshot,fy as isVisualLayerEventType,Su as isVisualLayerKind,ku as isVisualLayerTransitionKind,fg as isWorldPatchErrorCode,Tm as jobEventContracts,ud as kindSegmentInType,os as listRequestedRemoteCartGrants,om as loadRemoteCart,Xu as localizeProductionScenarioFailure,cd as matchEventPattern,Gh as midiChannelFromStatus,ao as midiStatus,Wp as mountPresentationAdapter,Fr as normalizeEvent,Rf as normalizedToAsset,Cf as normalizedToCanvas,Uo as normalizedToCss,gm as paintingPortal,mf as parseCapabilityManifest,to as parseContentRevisionCatalog,xf as parseGeometry,sa as parseMidiBytes,sc as parseRemoteCartManifest,Nr as parseSnapshot,kf as pointFromOrigin,$n as pointInHitbox,gu as pointInSemanticGeometry,Yo as pointerToRegion,Ky as presentationBindingEventContracts,vt as presentationBindingTargetKey,Iy as presentationSequenceEventContracts,Ph as productionScenarioEventContracts,Fg as recordSelectionDecision,Wd as rectToCanvas,Jo as rectToCss,zo as regionToViewport,ep as registerCartStateHotkeys,ac as remoteCartProvenanceForSnapshot,ls as replayExportedTrace,So as resolveImportableCartState,Rr as resolveRuntimeSeed,ko as restoreSnapshotFromUnknown,Xa as rewriteHostedAssetRef,Xp as scheduleAudioCue,wf as serializeGeometry,Wn as sha256Hex,rm as signRemoteCartManifest,Mt as snapshotErrorsToMessage,_n as snapshotFromCartBundle,Vn as validateCapabilityManifest,Pf as validateGeometry,Zt as validateSnapshot,Dp as verifyAttachOptions,Kn as verifyRemoteCartSignature,Ru as visualIncomingLayerId,zm as worldGraphEventContracts,pg as worldPatchEventContracts};
|
|
8
|
+
var Hl=Object.defineProperty;var Fa=(e,t)=>()=>(e&&(t=e(e=0)),t);var ql=(e,t)=>{for(var n in t)Hl(e,n,{get:t[n],enumerable:!0})};var Xl={};function zl(e,t){let n=e.indexOf(Qa);if(n===-1)return null;let r=n+Qa.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 Lo,Jr,Yl,Un,Qa,Za=Fa(()=>{"use strict";Lo=/AudioWorkletProcessor with name:\s*["'`][^"'`]+["'`]\s+is already registered/i,Jr="__cyberartWorkletPatchApplied";typeof window<"u"&&!window[Jr]&&(window.addEventListener("error",e=>{let t=e?.message??"";Lo.test(t)&&(e.preventDefault(),e.stopImmediatePropagation())},!0),window.addEventListener("unhandledrejection",e=>{let t=e?.reason,n=typeof t=="string"?t:t?.message??"";Lo.test(n)&&e.preventDefault()}),window[Jr]=!0);Yl=!1,Un=(...e)=>{Yl&&console.log("[workletPatch]",...e)},Qa="((AudioWorkletProcessor,registerProcessor)=>{";if(typeof AudioWorklet<"u"&&!AudioWorklet.prototype[Jr]){let e=new WeakMap,t=/registerProcessor\s*\(\s*['"`]([^'"`]+)['"`]/g,n=AudioWorklet.prototype.addModule,r=0;AudioWorklet.prototype.addModule=async function(o,s){let a=++r,c=e.get(this);c||(c=new Set,e.set(this,c)),Un(`#${a} addModule`,{url:o.slice(0,64),isBlob:o.startsWith("blob:"),knownBefore:[...c]});let f=o,p=null;if(o.startsWith("blob:")){let k=null;try{k=await(await fetch(o)).text()}catch(E){Un(`#${a} blob fetch failed`,E)}if(k!==null){let E=new Set;for(let C of k.matchAll(t))E.add(C[1]);if(E.size>0){let C=[...E].filter(g=>c.has(g)),_=[...E].filter(g=>!c.has(g));if(C.length>0&&_.length===0){Un(`#${a} short-circuit \u2014 all processors already registered`,C);return}if(C.length>0&&_.length>0){let g=zl(k,C);if(g!==null){let T=new Blob([g],{type:"application/javascript"});p=URL.createObjectURL(T),f=p,Un(`#${a} rewrote blob; skipping`,C,"allowing",_)}else Un(`#${a} blob rewrite failed; passing original through`)}_.forEach(g=>c.add(g))}}}return n.call(this,f,s).then(()=>{p&&URL.revokeObjectURL(p)},k=>{p&&URL.revokeObjectURL(p);let E=(k&&k.message)??"";if(!(Lo.test(E)||/already registered/i.test(E)))throw k})},AudioWorklet.prototype[Jr]=!0}});var td={};ql(td,{AUDIO_LIBRARIES:()=>Vo,adaptersFor:()=>Xr,importTone:()=>Yr,normalizeAudioLibraries:()=>zr});async function Yr(){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 zr(e){if(!e)return[];let t=Array.isArray(e)?e:[e],n=[];for(let r of t){if(!(r in Vo)){console.warn(`Unknown audio library "${r}"`);continue}let i=r;n.includes(i)||n.push(i)}return n}function Xr(e){return e.map(t=>Vo[t])}var ed,Vo,Bo=Fa(()=>{"use strict";ed={id:"tone",async load(){await Promise.resolve().then(()=>(Za(),Xl))},async unlock(){await ed.load(),await(await Yr()).start()},async resumeIfSuspended(){let e=await Yr();e.context.state==="suspended"&&await e.context.resume()},async suspendIfRunning(){let t=(await Yr()).context.rawContext;"suspend"in t&&t.state==="running"&&await t.suspend()}},Vo={tone:ed}});var $a=()=>{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"]},ot=window.devicePixelRatio||1,sn=/Headless/i.test(navigator.userAgent),Qb=/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)||/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform);function Ha(){return Math.min(window.innerWidth,window.innerHeight)}var $r="data-cyberart-canvas",an=class{constructor(t,n,r=1,i={}){this.width=t,this.height=n;let o=i.container,s=i.adoptFromDocument??!o,a=o?o.querySelector(`canvas[${$r}]`)??o.querySelector("canvas"):null;if(a)this.canvas=a,this.adopted=!0;else if(s){let c=document.getElementById("canvas")??document.querySelector("canvas");c?(this.canvas=c,this.adopted=!0):(this.canvas=document.createElement("canvas"),this.canvas.setAttribute("id","canvas"),this.adopted=!1)}else this.canvas=document.createElement("canvas"),this.adopted=!1;this.canvas.hasAttribute($r)||this.canvas.setAttribute($r,""),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/ot}px`,this.canvas.style.height=`${n/ot}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 qa(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 Ka(e,t=window.innerWidth,n=window.innerHeight){let r=Ha(),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 Hr=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={}}},Wa=Hr;var qr=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))}},Ga=qr;function dn(){return{now:()=>performance.now()}}function Kr(e=0){let t=e;return{now:()=>t,set(n){t=n},advance(n){t+=n}}}var ja=(e,t,n,r)=>({now:e,startTime:t,elapsedSinceStart:e-t,deltaSinceLastUpdate:n===null?0:e-n,deltaSinceLastRender:r===null?0:e-r}),Wr=class{constructor(t,n,r,i,o,s={}){this.startTime=0;this.lastUpdateAt=null;this.lastRenderAt=null;this.clockOffsetMs=0;this.pauseStartedAt=null;this.renderAnimation=this.renderAnimation.bind(this),this.dimensionContext=qa(t,n),this.R=r,this.gameManager=s.gameManager,this.hostChannel=s.hostChannel,this.clock=s.clock??dn(),this.kind=s.kind??"render",this.keyboardManager=new Wa(!1,s.captureKeyboard??!0),this.kind!=="calculation"&&(this.canvas=new an(this.dimensionContext.width,this.dimensionContext.height,1,s.canvasMount),this.drawingContext=this.canvas.ctx,this.pointerManager=new Ga(this.canvas.canvas,{listen:s.listenToPointer!==!1})),this.animationCart=o;let a=s.customState;this.featureState=o.getDefaultFeatureState?.(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.hostChannel),this.cartState=o.getDefaultState(this.R,this.dimensionContext,i,this.keyboardManager,a,this.pointerManager,this.gameManager,this.featureState,this.hostChannel),this.startTime=this.clock.now(),this.canvas?.clearAll()}captureFramebuffer(){let t=this.canvas?.imageData;if(!t)return new ImageData(this.dimensionContext.width,this.dimensionContext.height);let n=new ImageData(t.width,t.height);return n.data.set(t.data),n}restoreFramebuffer(t){let n=this.canvas?.imageData,r=this.drawingContext;return!n||!r||n.width!==t.width||n.height!==t.height||n.data.length!==t.data.length?!1:(n.data.set(t.data),r.putImageData(n,0,0),!0)}setPaused(t){let n=this.clock.now();if(t){this.pauseStartedAt===null&&(this.pauseStartedAt=n);return}this.pauseStartedAt!==null&&(this.clockOffsetMs+=n-this.pauseStartedAt,this.pauseStartedAt=null)}resolveNow(t){let n=this.pauseStartedAt!==null?t-this.pauseStartedAt:0;return t-this.clockOffsetMs-n}getElapsedSinceStart(t=this.clock.now()){return Math.max(0,this.resolveNow(t)-this.startTime)}restoreClock(t,n){this.pauseStartedAt=null,this.lastUpdateAt=null,this.lastRenderAt=null;let r=Math.max(0,t);if(typeof n=="number"&&Number.isFinite(n)){this.startTime=n,this.clockOffsetMs=this.clock.now()-n-r;return}this.clockOffsetMs=0,this.startTime=this.clock.now()-r}getRandomState(){return this.R.getState()}injectKey(t){this.keyboardManager.inject(t)}injectPointer(t,n,r){this.pointerManager?.inject(t,n,r)}async updateAnimationState(t,n,r=this.clock.now()){let i=this.resolveNow(r),o=ja(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=ja(i,this.startTime,this.lastUpdateAt,this.lastRenderAt),s=this.drawingContext,a=this.canvas?.imageData;this.kind!=="calculation"&&this.animationCart.render&&s&&a&&this.animationCart.render(this.R,t,n,this.dimensionContext,this.cartState,s,a,this.pointerManager,this.gameManager,o,this.featureState,this.hostChannel),this.lastRenderAt=i}getCanvas(){return this.canvas?.canvas}getDrawDetails(){let t=this.canvas?.canvas;if(!t)throw new Error("calculation cart has no canvas");return[t,0,0,this.dimensionContext.width,this.dimensionContext.height]}teardown(){try{this.animationCart.teardown?.(this.cartState,this.featureState)}catch(t){console.error("Error during cart teardown",t)}this.keyboardManager.destroy(),this.pointerManager?.destroy()}};var Gr=class extends an{constructor(t,n,r=1,i=!0,o={}){if(super(t,n,r,o),this.adopted)return;let s=o.container;if(s){this.canvas.parentNode!==s&&s.appendChild(this.canvas);return}if(i){let a=document.getElementById("canvas");a&&a!==this.canvas&&a.parentNode===document.body&&document.body.removeChild(a),document.body.appendChild(this.canvas)}}};function Ua(e){let t=parseInt(e.substring(0,8),16),n=parseInt(e.substring(8,8),16),r=parseInt(e.substring(16,8),16),i=parseInt(e.substring(24,8),16);return{next:()=>{t|=0,n|=0,r|=0,i|=0;let s=(t+n|0)+i|0;return i=i+1|0,t=n^n>>>9,n=r+(r<<3)|0,r=r<<21|r>>>11,r=r+s|0,(s>>>0)/4294967296},getRegs:()=>({a:t,b:n,c:r,d:i}),setRegs:s=>{t=s.a,n=s.b,r=s.c,i=s.d}}}var Gn=class{constructor(t){this.seed=t.hash,this.useA=!1,this.genA=Ua(t.hash.substring(2,32)),this.genB=Ua(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 Ya="bafybeicjwcq5lxxtfnyj4p2ugcr7ctyb5wl62cbcechj6tsabdq5whcs7u",Ja="https://salmon-just-firefly-671.mypinata.cloud/ipfs/";function Kl(e){return e.endsWith("/")?e:`${e}/`}var jn=null;function Wl(e){return[...Array(e)].map(()=>Math.floor(Math.random()*16).toString(16)).join("")}function Gl(e){return e&&e.length>0?e:[{cid:Ya}]}function jl(e){return e.startsWith("0x")?e:`0x${e}`}var za=/^(0[xX])?[0-9a-fA-F]{64}$/;function Ul(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 jr(e){let t=typeof e=="number"?String(e):e;return za.test(t)?`0x${(t.startsWith("0x")||t.startsWith("0X")?t.slice(2):t).toLowerCase()}`:Ul(t)}function Ur(e,t){if(typeof e=="number"||t==="deterministic")return jr(e);let n=String(e);return za.test(n)?jr(n):n.startsWith("0x")||n.startsWith("0X")?n:`0x${n}`}function Jl(e){if(!e&&typeof tokenData<"u"&&tokenData?.hash)return{hash:tokenData.hash,tokenId:String(tokenData.tokenId),externalAssetDependencies:Gl(tokenData.externalAssetDependencies),preferredIPFSGateway:Kl(tokenData.preferredIPFSGateway||Ja),preferredArweaveGateway:tokenData.preferredArweaveGateway};let t=typeof window<"u"?new URLSearchParams(window.location.search):new URLSearchParams;return{hash:e?jl(e):t.get("hash")||`0x${Wl(64)}`,tokenId:"18009999",externalAssetDependencies:[{cid:Ya}],preferredIPFSGateway:Ja}}function Mo(e){let t=e?.useCache!==!1;if(t&&jn&&!e?.hash)return jn;let n=Jl(e?.hash);return t?jn=n:jn||(jn=n),n}function Xa(e){return new Array(32).fill(null).map((t,n)=>parseInt(e.hash.slice(2+n*2,4+n*2),16))}Bo();var Qr="$cyberartTa",Fe=class extends Error{constructor(t){super(t),this.name="IncompatibleCartStateError"}},Fo={Float32Array,Float64Array,Int8Array,Int16Array,Int32Array,Uint8Array,Uint8ClampedArray,Uint16Array,Uint32Array};function Ql(e){for(let t of Object.keys(Fo))if(e instanceof Fo[t])return t}function rd(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function ct(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function $o(e){return ct(e)?typeof e[Qr]=="string"&&Array.isArray(e.d):!1}function Zl(e){return e==null?!1:typeof e=="function"?!0:!(typeof e!="object"||Array.isArray(e)||rd(e)||ct(e))}var ep=new Set(["audioContextStarted","midiSynths","keepRatioPrimed","audioInitStarted","musicSeekApplied"]);function nd(e){return e===null?"null":$o(e)?String(e[Qr]):Array.isArray(e)?"array":ct(e)?"object":typeof e}function tp(e,t){return e===t||e==="null"||t==="null"}function Lt(e){return e.trim().toLowerCase().replace(/^0x/,"")}function id(e,t,n,r){if(!(!n&&!r)&&Lt(e)!==Lt(t))throw new Fe(`Generative cart state is for seed "${t}", but the live token is "${e}"`)}function cn(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function od(e,t){let n=e.dimensions;if(n&&cn(n.width)&&cn(n.height))return n;if(t&&cn(t.width)&&cn(t.height))return{width:t.width,height:t.height};if(ct(e.state)){let r=e.state.containerWidth,i=e.state.containerHeight;if(cn(r)&&cn(i))return{width:r,height:i}}return null}function un(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(rd(e)){let n=Ql(e);return n?{[Qr]:n,d:Array.from(e)}:void 0}if(typeof e=="object"&&!t.has(e)){t.add(e);try{if(Array.isArray(e)){let i=[],o=0;for(let s of e){let a=un(s,t);a!==void 0&&(i.push(a),o++)}return e.length>0&&o===0?void 0:i}if(!ct(e)||Zl(e))return;let n=Object.keys(e),r={};for(let i of n){if(ep.has(i))continue;let o=un(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 Jn(e){if($o(e)){let t=Fo[e[Qr]];return t?new t(e.d.map(n=>Number(n))):e}if(Array.isArray(e))return e.map(t=>Jn(t));if(ct(e)){let t={};for(let n of Object.keys(e))t[n]=Jn(e[n]);return t}return e}function Ho(e,t,n,r,i=!0){if(i&&n&&r&&n!==r)throw new Fe(`Cart state is for "${r}", but the live cart is "${n}"`);if(!ct(t)){if(i)throw new Fe("Cart state snapshot is empty");return}let o=Object.keys(t);if(o.length===0){if(i)throw new Fe("Cart state snapshot is empty");return}let s=un(e);if(!ct(s)||Object.keys(s).length===0){if(i)throw new Fe("Live cart has no serializable state");return}let a=o.filter(c=>c in s);if(a.length===0){if(i)throw new Fe("Cart state snapshot does not overlap the live cart shape");return}for(let c of a){let f=nd(s[c]),p=nd(t[c]);if(!tp(f,p))throw new Fe(`Cart state field "${c}" has type ${p}, live cart expects ${f}`);if(f==="object"){let k=t[c],E=e[c];ct(k)&&!$o(k)&&Ho(E,k,void 0,void 0,!1)}}}function sd(e,t){if(!ct(e)||!ct(t))return;let n=un(e);if(ct(n))for(let r of Object.keys(t))r in n&&(e[r]=Jn(t[r]))}function tt(e){let t=typeof e=="string"?JSON.parse(e):e;if(!t||typeof t!="object")throw new Fe("Cart state bundle is not an object");if(t.version!==1)throw new Fe(`Unsupported cart state version ${String(t.version)}`);if(typeof t.seed!="string"||typeof t.framesElapsed!="number")throw new Fe("Cart state bundle is missing seed or framesElapsed");return t}var Ke="cyberart.asset.ready",$e="cyberart.asset.failed";function Vt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ut(e){try{return JSON.stringify(e)}catch{return String(e)}}function qo(e,t,n){let r=t??[],i=n??[],o=Math.max(r.length,i.length);for(let s=0;s<o;s++)if(ut(r[s])!==ut(i[s]))return`${e}[${s}]: ${ut(r[s])} vs ${ut(i[s])}`}function ad(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}`),ut(e.rng)!==ut(t.rng)&&n.push(`rng: ${ut(e.rng)} vs ${ut(t.rng)}`);let r=qo("actions",e.actions,t.actions);r&&n.push(r);let i=qo("applied",e.applied,t.applied);i&&n.push(i);let o=qo("events",e.events,t.events);return o&&n.push(o),ut(e.state)!==ut(t.state)&&n.push(`state: ${ut(e.state)} vs ${ut(t.state)}`),n}function dd(e){return{type:e.status==="ready"?Ke:$e,kind:"state",payload:e.detail===void 0?{id:e.id}:{id:e.id,detail:e.detail}}}function rp(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 ip(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 op=[[0,0],[16,9],[9,16],[4,3],[3,4],[2,1],[1,2],[3,1],[1,3],[1,1]],Wo=op[0],sp=Wo[0]/Wo[1],Ko=30,ap=120,dp=3840/2160,cp=2160/3840,Zr=class{constructor(t=Ko,n=!1,r=window.innerWidth,i=window.innerHeight,o=!0,s,a={}){this.framesElapsed=0;this.frameRate=Ko;this._paused=!1;this.savedToken=!1;this.prepared=!1;this.loopRunning=!1;this.fallbackAudio=[];this.audioLibrariesInternal=[];this.virtualClock=null;this.scriptedActions=[];this.initialScriptedActions=[];this.appliedActions=[];this.consumedActionIndexes=new Set;this.outboundEvents=[];this.consecutiveErrorCount=0;this.lastErrorLogAt=0;this.reinitStayPaused=!1;this.reinitPending=!1;this.lastExportedFramebuffer=null;this.pinnedOutput=null;this.pinViewportAtImport=null;this.importing=!1;this.drawLoop=this.drawLoop.bind(this),this.loadCart=this.loadCart.bind(this),this.prepareCart=this.prepareCart.bind(this),this.beginPlayback=this.beginPlayback.bind(this),this.reinit=this.reinit.bind(this),this.tuneFramerate=this.tuneFramerate.bind(this),this.container=a.container,this.seed=a.seed,this.captureKeyboard=a.captureKeyboard??!0,this.customState=a.customState,this.hostChannel=a.hostChannel,this.fallbackAudio=zr(a.audio),this.audioLibrariesInternal=this.fallbackAudio,this.kind=a.kind??"render",this.onFrameTiming=a.onFrameTiming;let c=a.deterministic;this.deterministic=!!c;let f=c&&typeof c=="object"?c:{};if(this.deterministic){if(a.clock){let p=a.clock;if(typeof p.advance!="function")throw new Error("deterministic mode requires a virtual clock with advance()");this.virtualClock=p,this.clock=p}else this.virtualClock=Kr(f.origin??0),this.clock=this.virtualClock;this.initialScriptedActions=Vt(f.actions??[]),this.scriptedActions=Vt(this.initialScriptedActions)}else this.clock=a.clock??dn();this.isBodyCanvas=this.container?!1:o,this.autoMode=n,this.aspectRatio=sp,this.selectedAsp=Wo,this.isFullscreen=!!document.fullscreenElement,this.updateFrameRate(t),this.tempUnpause=!1,this.synchronous=sn,this.containerWidth=r,this.containerHeight=i,this.gameManager=s,this.init(!0)}setGameManager(t){this.gameManager=t}reinit(t){if(!this.importing){if(this.shouldKeepPinnedOutput()){this.fitPinnedCanvas();return}this.reinitPending||(this.reinitStayPaused=this._paused,this.reinitPending=!0),this.paused=!0,clearTimeout(this.reinitTimeout),this.reinitTimeout=setTimeout(()=>{if(this.importing){this.paused=this.reinitStayPaused,this.reinitPending=!1;return}this.updateInProgress?this.reinit(t):(this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.clearPinnedOutput(),this.init(),this.reloadCart(),this.paused=this.reinitStayPaused,this.reinitPending=!1)},150)}}initSeed(){this.tokenData=this.seed?Mo({hash:this.seed,useCache:!1}):Mo(),this.rawParams=Xa(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]=Ka(n,this.containerWidth,this.containerHeight);r*=ot,i*=ot,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 Gr(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 Gn(this.tokenData),o=new Wr(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=Vt(this.initialScriptedActions),this.appliedActions=[],this.consumedActionIndexes=new Set,this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.deterministic&&this.hostChannel&&(this.outboundUnsubscribe=this.hostChannel.onEvent(s=>{this.outboundEvents.push(s)})),this.R=i,this.applyCartFrameRate(t,o),this.resolveAudioLibraries(t),this.prepared=!0,!0}catch(n){return console.error(n),!1}}applyCartFrameRate(t,n){let r=t.metadata,i=r?.frameRate??Ko,o=n.cartState?.visualMode??n.featureState?.visualMode,s=o&&r?.frameRateByVisualMode?r.frameRateByVisualMode[o]:void 0;this.updateFrameRate(typeof s=="number"&&s>0?s:i)}get audioLibraries(){return this.audioLibrariesInternal}get needsAudio(){return this.audioLibrariesInternal.length>0}resolveAudioLibraries(t){this.audioLibrariesInternal=zr(t.metadata?.audio)}async unlockAudio(){if(this.audioLibrariesInternal.length===0)return;let t=Xr(this.audioLibrariesInternal);if(sn){for(let n of t)await n.load();return}for(let n of t)await n.unlock()}async resumeAudioLibraries(){if(!(this.paused||sn))for(let t of Xr(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(Vt(t))}async getReplayMetadata(){let t=await this.exportState();return{seed:this.tokenData.hash,clock:this.getClock(),rng:this.getRandomState(),actions:Vt(this.scriptedActions),applied:Vt(this.appliedActions),events:Vt(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(dd(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:ot},state:un(t.cartState)}}finally{this.paused=n}}async exportStateJSON(){return JSON.stringify(await this.exportState())}peekExportedFramebuffer(){return this.lastExportedFramebuffer}peekSeed(){return this.tokenData?.hash}isGenerative(){return this.animationCart?.metadata?.generative===!0}async importState(t,n){let r=this.requirePreparedAnimation(),i=tt(t),o=this._paused,s=this.loopRunning;this.paused=!0,await this.waitUntilUpdateIdle(),Ho(r.cartState,i.state,this.animationCart?.metadata?.id,i.cartId),id(this.tokenData.hash,i.seed,this.animationCart?.metadata?.generative,i.generative),clearTimeout(this.reinitTimeout),this.reinitPending=!1,this.importing=!0;let a=od(i,n?.framebuffer??this.lastExportedFramebuffer);if(a){this.pinOutputSize(a);let p=a.cssWidth??a.width/ot,k=a.cssHeight??a.height/ot;ip(p,k),this.syncContainerFromDom(),this.pinViewportAtImport={w:this.containerWidth,h:this.containerHeight}}let c=this.customState,f=!1;try{if(this.customState=Jn(i.state),this.unloadCart(),!this.prepareCart(this.animationCart))throw new Error("Failed to prepare cart while loading state");this.animation.cartState!==this.customState&&sd(this.animation.cartState,i.state),this.framesElapsed=i.framesElapsed;let p=this.animation,k=p.cartState,E=typeof i.elapsedSinceStart=="number"?i.elapsedSinceStart:rp(k);p.restoreClock(E,typeof k?.startTime=="number"?k.startTime:void 0),o&&p.setPaused(!0);let C=n?.framebuffer??this.lastExportedFramebuffer;this.kind!=="calculation"&&(C&&p.restoreFramebuffer(C)?k.keepRatioPrimed=!0:await p.renderAnimation(this.framesElapsed,this.rawParams)),this.fitPinnedCanvas(),f=!0}catch(p){throw this.clearPinnedOutput(),this.customState=c,this.paused=o,this.animationCart&&(this.syncContainerFromDom(),this.init(),this.reloadCart()),p}finally{this.importing=!1,f&&(this.customState=c,this.paused=o,s&&this.beginPlayback())}}unloadCart(){this.loopRunning=!1,this.requestedAnimationFrame&&cancelAnimationFrame(this.requestedAnimationFrame),this.drawLoopTimeout&&clearTimeout(this.drawLoopTimeout),this.animation?.teardown(),this.animation=void 0,this.prepared=!1,this.audioLibrariesInternal=this.fallbackAudio,this.mainCanvas?.clearAll()}reloadCart(t=!1){let n=this.animationCart;if(!n)return;this.pinnedOutput&&(this.clearPinnedOutput(),this.syncContainerFromDom(),this.init());let r=this.reinitPending?this.reinitStayPaused:this._paused;this.unloadCart(),t&&this.initSeed(),this.loadCart(n),this.paused=r,!this.paused&&!sn&&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/ot,h:t.cssHeight??t.height/ot}}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/ot,s=t.height/ot;if(o<1||s<1||r<1||i<1)return;let a=Math.min(r/o,i/s),c=o*a,f=s*a;n.style.position="absolute",n.style.left="50%",n.style.top="50%",n.style.transform="translate(-50%, -50%)",n.style.margin="0",n.style.width=`${c}px`,n.style.height=`${f}px`,n.style.imageRendering=Math.abs(a-1)<.01?"auto":"pixelated"}clearPinnedOutput(){let t=this.canvas;this.pinnedOutput=null,this.pinViewportAtImport=null,t&&(t.style.position="",t.style.left="",t.style.top="",t.style.transform="",t.style.imageRendering="",t.style.width="",t.style.height="",t.style.margin="auto")}get canvas(){return this.animation?.getCanvas()??this.mainCanvas?.canvas}destroy(){this.outboundUnsubscribe?.(),this.outboundUnsubscribe=void 0,this.clearPinnedOutput(),this.unloadCart(),clearTimeout(this.reinitTimeout),this.mainCanvas&&!this.mainCanvas.adopted&&this.mainCanvas.canvas.remove()}drawIt(){}tuneFramerate(t){let n=this.lastCall||t;this.lastCall=t,this.drawTime=Math.max(0,this.drawTime+this.targetDrawTime-this.lastCall+n)}async processFrame(t,n={}){let r=n.ignorePause===!0,i=n.scheduleNext!==!1;if(!this.loopRunning&&!r)return;let o=!1,s,a="update",c=this.onFrameTiming,f=0,p=0,k=0;try{if(r||!this.paused||this.tempUnpause){if(!sn&&!r&&this.tuneFramerate(t),!this.animation)return;a="update",this.updateInProgress=!0;let C=c?performance.now():0;if(await this.animation.updateAnimationState(this.framesElapsed,this.rawParams,t),c&&(f=performance.now()-C),this.updateInProgress=!1,this.kind!=="calculation"){a="render";let _=c?performance.now():0;await this.animation.renderAnimation(this.framesElapsed,this.rawParams,t),c&&(p=performance.now()-_)}if(this.autoMode&&this.animation.cartState.saveToken&&!this.savedToken&&!new URLSearchParams(window.location.search).get("hash")){let T=localStorage.getItem("goodones"),V=JSON.stringify(T?[...JSON.parse(T),this.tokenData.hash]:[this.tokenData.hash]);localStorage.setItem("goodones",V),this.savedToken=!0,this.mainCanvas&&localStorage.setItem(this.tokenData.hash,this.mainCanvas.canvas.toDataURL("image/png")),window.location.reload(),this.loopRunning=!1;return}this.framesElapsed++,this.tempUnpause&&(this.tempUnpause=!1)}a="draw";let E=c?performance.now():0;this.drawIt(),c&&(k=performance.now()-E)}catch(E){o=!0,s=E,this.handleFrameError(E,a)}finally{this.updateInProgress=!1,c&&!o&&c({frame:this.framesElapsed,updateMs:f,renderMs:p,drawMs:k,totalMs:f+p+k})}o?(this.consecutiveErrorCount++,this.consecutiveErrorCount>=ap&&(this.loopRunning=!1,this.onError?.(s,{phase:a,consecutive:this.consecutiveErrorCount,stopped:!0}))):this.consecutiveErrorCount=0,!(!this.loopRunning||!i)&&(this.drawLoopTimeout=setTimeout(()=>{this.requestedAnimationFrame=requestAnimationFrame(this.drawLoop)},this.drawTime))}async drawLoop(t){await this.processFrame(t,{scheduleNext:!0})}handleFrameError(t,n){let r=performance.now();r-this.lastErrorLogAt>=1e3&&(this.lastErrorLogAt=r,console.error(`Animation ${n} error:`,t)),this.consecutiveErrorCount===0&&this.onError?.(t,{phase:n,consecutive:1,stopped:!1})}pureAspectUpdate(t){if(t[0]===0&&t[1]===0){let r=this.containerWidth||window.innerWidth,i=this.containerHeight||window.innerHeight,o=r/i;this.aspectRatio=Math.min(dp,Math.max(cp,o))}else this.aspectRatio=t[0]/t[1]}};var up="HostChannel has been destroyed",ln=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(up)}};var He=2,ti=1,ni="0.0.5",jo="0",ud="1970-01-01T00:00:00.000Z";function Me(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function pn(e){return JSON.parse(JSON.stringify(e))}function Ee(e,t,n,r){e.push(r?{code:t,detail:n,path:r}:{code:t,detail:n})}function ld(e,t,n){try{let r=JSON.stringify(e);if(r===void 0){Ee(n,"invalid-field",`${t} is not JSON-serializable`,t);return}return JSON.parse(r)}catch{Ee(n,"invalid-field",`${t} is not JSON-serializable`,t);return}}function De(e){return typeof e=="string"&&e.length>0}function ei(e){return typeof e=="number"&&Number.isFinite(e)}function lp(e){return typeof e=="string"&&Number.isFinite(Date.parse(e))}function fn(e){return!Me(e)||typeof e.schemaVersion=="number"?!1:typeof e.version=="number"&&typeof e.seed=="string"&&typeof e.framesElapsed=="number"&&"state"in e}function pp(e){return Me(e)&&e.schemaVersion===He&&Me(e.engineState)}function fp(e){return Me(e)&&typeof e.schemaVersion=="number"&&Me(e.engineState)}function Yn(e){if(Me(e)){if(typeof e.schemaVersion=="number")return Number.isInteger(e.schemaVersion)?e.schemaVersion:void 0;if(fn(e))return ti}}function Go(e,t,n){try{return pn(tt(e))}catch(r){let i=r instanceof Error?r.message:"engineState is not a cart state bundle";Ee(n,"invalid-engine-state",i,t);return}}function mp(e,t,n){if(!Me(e)){Ee(n,"invalid-field","cart must be an object",t);return}De(e.id)||Ee(n,"invalid-field","cart.id must be a non-empty string",`${t}.id`),De(e.version)||Ee(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"?Ee(n,"invalid-field","cart.generative must be a boolean",`${t}.generative`):r.generative=e.generative),r.id&&r.version?r:void 0}function yp(e,t,n){if(!Me(e)){Ee(n,"invalid-field","clock must be an object",t);return}if(!ei(e.framesElapsed)){Ee(n,"invalid-field","clock.framesElapsed must be a finite number",`${t}.framesElapsed`);return}let r={framesElapsed:e.framesElapsed};return e.elapsedSinceStart!==void 0&&(ei(e.elapsedSinceStart)?r.elapsedSinceStart=e.elapsedSinceStart:Ee(n,"invalid-field","clock.elapsedSinceStart must be a finite number",`${t}.elapsedSinceStart`)),e.now!==void 0&&(ei(e.now)?r.now=e.now:Ee(n,"invalid-field","clock.now must be a finite number",`${t}.now`)),e.frameRate!==void 0&&(ei(e.frameRate)?r.frameRate=e.frameRate:Ee(n,"invalid-field","clock.frameRate must be a finite number",`${t}.frameRate`)),r}function gp(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Ee(n,"invalid-field","modules must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Me(i)||!De(i.id)||!De(i.version)){Ee(n,"invalid-field","module refs need non-empty id and version",s);return}r.push({id:i.id,version:i.version})}),r}function hp(e,t,n){if(e===void 0)return;if(!Array.isArray(e)){Ee(n,"invalid-field","assets must be an array",t);return}let r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!Me(i)||!De(i.id)){Ee(n,"invalid-field","asset refs need a non-empty id",s);return}let a={id:i.id};i.version!==void 0&&(De(i.version)?a.version=i.version:Ee(n,"invalid-field","asset.version must be a non-empty string",`${s}.version`)),i.ref!==void 0&&(De(i.ref)?a.ref=i.ref:Ee(n,"invalid-field","asset.ref must be a non-empty string",`${s}.ref`)),r.push(a)}),r}function bp(e,t,n){if(e===void 0)return;if(!Me(e)||!De(e.seed)){Ee(n,"invalid-field","rng must include a seed",t);return}if(!Me(e.prngA)||!Me(e.prngB)){Ee(n,"invalid-field","rng must include prngA and prngB",t);return}if(typeof e.useA!="boolean"){Ee(n,"invalid-field","rng.useA must be a boolean",`${t}.useA`);return}return ld(e,t,n)}function vp(e,t,n){if(e===void 0)return;if(!Me(e)){Ee(n,"invalid-field","provenance must be an object",t);return}let r={};if(e.source!==void 0&&(De(e.source)?r.source=e.source:Ee(n,"invalid-field","provenance.source must be a non-empty string",`${t}.source`)),e.integrity!==void 0&&(!Me(e.integrity)||!De(e.integrity.alg)||!De(e.integrity.hash)?Ee(n,"invalid-field","provenance.integrity needs alg and hash strings",`${t}.integrity`):r.integrity={alg:e.integrity.alg,hash:e.integrity.hash}),e.publisher!==void 0&&(De(e.publisher)?r.publisher=e.publisher:Ee(n,"invalid-field","provenance.publisher must be a non-empty string",`${t}.publisher`)),e.version!==void 0&&(De(e.version)?r.version=e.version:Ee(n,"invalid-field","provenance.version must be a non-empty string",`${t}.version`)),e.signature!==void 0&&(!Me(e.signature)||!De(e.signature.id)||!De(e.signature.alg)?Ee(n,"invalid-field","provenance.signature needs id and alg strings",`${t}.signature`):r.signature={id:e.signature.id,alg:e.signature.alg}),e.grants!==void 0)if(!Array.isArray(e.grants))Ee(n,"invalid-field","provenance.grants must be an array",`${t}.grants`);else{let i=[];e.grants.forEach((o,s)=>{De(o)?i.push(o):Ee(n,"invalid-field","provenance.grants entries must be non-empty strings",`${t}.grants[${s}]`)}),r.grants=i}return r}function pd(e,t){e.schemaVersion!==void 0&&e.schemaVersion!==He&&Ee(t,"invalid-schema",`defineSnapshot produces schema ${He}`,"schemaVersion"),De(e.seed)||Ee(t,"invalid-field","seed must be a non-empty string","seed");let n=e.runtimeVersion===void 0?ni:e.runtimeVersion;De(n)||Ee(t,"invalid-field","runtimeVersion must be a non-empty string","runtimeVersion");let r=e.createdAt===void 0?new Date().toISOString():e.createdAt;lp(r)||Ee(t,"invalid-field","createdAt must be an ISO-8601 date","createdAt");let i=mp(e.cart,"cart",t),o=yp(e.clock,"clock",t),s=Go(e.engineState,"engineState",t),a=gp(e.modules,"modules",t),c=hp(e.assets,"assets",t),f=bp(e.rng,"rng",t),p=vp(e.provenance,"provenance",t),k;if(e.hostState!==void 0&&(k=ld(e.hostState,"hostState",t)),e.hostStateRef!==void 0&&!De(e.hostStateRef)&&Ee(t,"invalid-field","hostStateRef must be a non-empty string","hostStateRef"),t.length>0||!i||!o||!s||!De(e.seed))return;let E={schemaVersion:He,runtimeVersion:n,cart:i,seed:e.seed,clock:o,engineState:s,createdAt:r};return a&&a.length>0&&(E.modules=a),f&&(E.rng=f),k!==void 0&&(E.hostState=k),De(e.hostStateRef)&&(E.hostStateRef=e.hostStateRef),c&&c.length>0&&(E.assets=c),p&&(p.source||p.integrity||p.publisher||p.version||p.signature||p.grants)&&(E.provenance=p),E}function ri(e){if(!Me(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot input is not an object"}]};let t=[],n=pd(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function zn(e,t){return De(e.cartId)?ri({cart:{id:e.cartId,version:t?.cartVersion??jo,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 cd(e){let t=pn(e),n={schemaVersion:ti,engineState:t,seed:t.seed,clock:{framesElapsed:t.framesElapsed,elapsedSinceStart:t.elapsedSinceStart}};return t.cartId&&(n.cart={id:t.cartId,version:jo,generative:t.generative}),n}function ii(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(!Me(t))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(fn(t))try{return{ok:!0,snapshot:cd(tt(t))}}catch(r){return{ok:!1,errors:[{code:"invalid-engine-state",detail:r instanceof Error?r.message:"Cart state bundle is invalid"}]}}let n=Yn(t);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is missing schemaVersion and is not a cart state bundle",path:"schemaVersion"}]};if(n===ti){let r=[],i=Go(t.engineState,"engineState",r);return!i||r.length>0?{ok:!1,errors:r}:{ok:!0,snapshot:cd(i)}}if(n!==He){if(n>He)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${n} is newer than ${He}`,path:"schemaVersion"}]};let r=[],i=Go(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 mn(t)}function mn(e){if(!Me(e))return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not an object"}]};if(e.schemaVersion!==He)return{ok:!1,errors:[{code:"invalid-schema",detail:`Expected snapshot schema ${He}`,path:"schemaVersion"}]};let t=[],n=pd(e,t);return!n||t.length>0?{ok:!1,errors:t}:{ok:!0,snapshot:n}}function Jt(e){return e.map(t=>t.detail).join("; ")}function fd(e){if(fn(e))return tt(e);if(Me(e)&&e.engineState!==void 0)return tt(e.engineState);throw new Error("Legacy snapshot is missing engine state")}function Sp(e){return tt(pn(e.engineState))}function yd(){return[{from:1,to:2,migrate:kp}]}function gd(e){let t=[...e?.migrations??yd()],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 Ep=gd();function hd(){return Ep}function kp(e){let t=fd(e),n=zn(t,{createdAt:ud,runtimeVersion:ni});if(n.ok===!1)throw new Error(Jt(n.errors));return n.snapshot}function md(e){try{return pn(e)}catch{return}}function Xn(e,t=hd()){let n=md(e);if(n===void 0)return{ok:!1,errors:[{code:"invalid-snapshot",detail:"Snapshot is not JSON-serializable"}]};let r=n,i=Yn(r);if(i===void 0){let o=ii(r);if(o.ok===!1)return o;r=o.snapshot,i=o.snapshot.schemaVersion}if(i>He)return{ok:!1,errors:[{code:"unsupported-schema",detail:`Snapshot schema ${i} is newer than ${He}`,path:"schemaVersion"}]};if(i===He)return mn(r);for(;i<He;){let o=t.get(i);if(!o)return{ok:!1,errors:[{code:"missing-migration",detail:`No snapshot migration from schema ${i} to ${i+1}`,path:"schemaVersion"}]};let s;try{s=o.migrate(md(r))}catch(c){let f=c instanceof Error?c.message:"Migration threw";return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} failed: ${f}`,path:"schemaVersion"}]}}let a=Yn(s);if(a!==o.to)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} produced schema ${String(a)}`,path:"schemaVersion"}]};if(o.to===He){let c=mn(s);if(c.ok===!1)return{ok:!1,errors:[{code:"invalid-migration-result",detail:`Migration ${o.from} \u2192 ${o.to} did not produce a valid snapshot`,path:"schemaVersion"},...c.errors]};r=c.snapshot}else r=s;i=o.to}return mn(r)}function Uo(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=Xn(n,t);if(i.ok===!1)return i;try{return{ok:!0,bundle:tt(i.snapshot.engineState),snapshot:i.snapshot}}catch(o){return{ok:!1,errors:[{code:"invalid-engine-state",detail:o instanceof Error?o.message:"engineState is not a cart state bundle",path:"engineState"}]}}}try{return{ok:!0,bundle:tt(n)}}catch(i){return{ok:!1,errors:[{code:"invalid-engine-state",detail:i instanceof Error?i.message:"Cart state bundle is invalid"}]}}}function Jo(e,t){let n=ii(e);return n.ok===!1?n:Xn(n.snapshot,t)}var kd=["image","audio","font","spritesheet"],Id=["timeout","cors","not-found","invalid","aborted","resolver","undeclared","hash-mismatch","unsigned"],yn="cyberart:fallback/silent",bd="Asset preloader has been destroyed",Ip=4,Rp=new Set(kd),Cp=new Set(Id),Ap={timeout:"asset load timed out",cors:"CORS blocked this asset","not-found":"asset was not found",invalid:"asset declaration or resource is invalid",aborted:"asset load was aborted",resolver:"asset resolver failed",undeclared:"asset is not declared on the cart manifest","hash-mismatch":"asset bytes do not match the declared hash",unsigned:"asset bytes are missing or unsigned"};function hn(e){return typeof e=="string"&&Rp.has(e)}function Rd(e){return typeof e=="string"&&Cp.has(e)}function gn(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.id=="string"&&typeof t.ref=="string"&&Rd(t.code)&&typeof t.message=="string"}function Ie(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message&&e.message.length>0?e.message:Ap[e.code]}}function Yt(e,t){return{type:e==="ready"?Ke:$e,kind:"state",payload:t}}function oi(e){if(!e?.aborted)return;let t=new Error("aborted");throw t.name="AbortError",t}function Pp(e){return e instanceof Error&&e.name==="AbortError"||typeof DOMException<"u"&&e instanceof DOMException&&e.name==="AbortError"}function Yo(e){return e?{...e}:void 0}function It(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=Yo(e.provenance)),e.cors!==void 0&&(t.cors=e.cors),e.usedFallback&&(t.usedFallback=!0),e.managed&&(t.managed=!0),t}function Qn(e){return{id:e.id,ref:e.ref,code:e.code,message:e.message}}function Tp(e){if(e.state==="ready"){let t={state:"ready",resource:It(e.resource)};return e.failure&&(t.failure=Qn(e.failure)),t}return e.state==="failed"?{state:"failed",failure:Qn(e.failure)}:{state:e.state}}function wp(e){return/^https?:/i.test(e)}function Cd(e){return e.endsWith("/")?e:`${e}/`}function Ad(e,t){let n=Cd(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 xp(e){return{async resolve(t,n){oi(n);let r=e[t.ref];if(!r)throw Ie({id:t.id,ref:t.ref,code:"not-found",message:`no fixture for ${t.ref}`});if("error"in r)throw Ie({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 _p(e){let t=Cd(e.cdnBase);return{async resolve(n,r){oi(r);let i=e.failures?.[n.ref];if(i){let s=typeof i=="string"?i:i.code,a=typeof i=="string"?void 0:i.message;throw Ie({id:n.id,ref:n.ref,code:s,message:a})}let o=Ad(n.ref,t);return{id:n.id,ref:n.ref,type:n.type,url:o,integrity:n.integrity,cors:wp(o)?"anonymous":"omit",provenance:n.provenance}}}}function Op(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}async function Dp(e){let t=await crypto.subtle.digest("SHA-256",e);return Op(new Uint8Array(t))}function Np(e){let t="";for(let r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return`data:application/octet-stream;base64,${typeof btoa=="function"?btoa(t):Buffer.from(e).toString("base64")}`}function Zn(e){let t=e.declared,n=e.fetchBytes,r=e.hashBytes??Dp;return{async resolve(i,o){oi(o);let s=t[i.ref];if(!s)throw Ie({id:i.id,ref:i.ref,code:"undeclared",message:`undeclared asset ref "${i.ref}"`});if(!s.hash||typeof s.hash!="string")throw Ie({id:i.id,ref:i.ref,code:"unsigned",message:`unsigned asset "${i.ref}"`});let a=await n(s.url);if(oi(o),!a)throw Ie({id:i.id,ref:i.ref,code:"unsigned",message:`no signed bytes for "${s.url}"`});if(await r(a)!==s.hash)throw Ie({id:i.id,ref:i.ref,code:"hash-mismatch",message:`hash mismatch for "${i.ref}"`});return{id:i.id,ref:i.ref,type:i.type,url:Np(a),integrity:`sha256-${s.hash}`,cors:"omit",provenance:i.provenance}}}}function Mp(e){if(!e||typeof e!="object")return Ie({id:"",ref:"",code:"invalid",message:"declaration is required"});if(typeof e.id!="string"||e.id.length===0)return Ie({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 Ie({id:e.id,ref:"",code:"invalid",message:"ref is required"});if(!hn(e.type))return Ie({id:e.id,ref:e.ref,code:"invalid",message:`unsupported type ${String(e.type)}`});if(e.integrity!==void 0&&typeof e.integrity!="string")return Ie({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 Ie({id:e.id,ref:e.ref,code:"invalid",message:"timeoutMs must be a non-negative finite number"})}function vd(e){return{id:e.id,ref:yn,type:e.type,url:yn,usedFallback:!0,cors:"omit"}}function Sd(e,t){return gn(t)?{id:e.id,ref:e.ref,code:t.code,message:t.message}:Pp(t)?Ie({id:e.id,ref:e.ref,code:"aborted"}):Ie({id:e.id,ref:e.ref,code:"resolver",message:t instanceof Error?t.message:String(t)})}function Ed(e,t){if(!t||typeof t.url!="string"||t.url.length===0)throw Ie({id:e.id,ref:e.ref,code:"invalid",message:"resolver returned no url"});if(t.integrity&&e.integrity&&t.integrity!==e.integrity)throw Ie({id:e.id,ref:e.ref,code:"invalid",message:"integrity mismatch"});let n=It(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=Yo(e.provenance)),n}function zt(e){if(typeof e?.resolver?.resolve!="function")throw new Error("createAssetPreloader: resolver is required");let t=e.emitEvents!==!1,n=e.wallClockTimeout!==!1,r=new Map,i=[],o=new Map,s=new Map,a=new Map,c=new Map,f=new Map,p=new Set,k=!1;function E(R){return R.code==="aborted"||R.code==="timeout"}function C(R,B,K){let P=Sd(R,K);return P.code==="timeout"?P:B.aborted?Ie({id:R.id,ref:R.ref,code:"aborted"}):P}function _(R,B){let K=f.get(R);K||(K=new Set,f.set(R,K)),K.add(B)}function g(R){if(R?.state==="ready")return`${R.resource.type}\0${R.resource.ref}`}function T(R,B){for(let[K,P]of f)if(K!==B&&P.has(R))return!0;for(let[K,P]of r)if(K!==B&&g(P)===R)return!0;return!1}function V(R,B){let K=new Set(f.get(R)),P=g(B);P&&K.add(P),f.delete(R);for(let h of K)T(h,R)||a.delete(h)}function G(){let R=0,B=0,K=0,P=0,h={};for(let[x,L]of r)h[x]=Tp(L),L.state==="pending"||L.state==="loading"?R+=1:L.state==="failed"?K+=1:(B+=1,(L.resource.usedFallback||L.failure)&&(P+=1));return{total:r.size,pending:R,ready:B,failed:K,fallbacks:P,items:h,failures:i.map(Qn)}}function w(){if(p.size===0)return;let R=G();for(let B of p)B(R)}function M(R){i.push(Qn(R))}function A(R){k||!t||!e.dispatch||e.dispatch(R)}function u(R){if(R?.managed&&R.url.startsWith("blob:")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(R.url)}catch{}}function v(R,B){if(k)return;let K=r.get(R);K?.state==="ready"&&u(K.resource),r.set(R,B),w()}function d(R){if(R.fallback!==void 0)return R.fallback==="silent"?{id:`${R.id}::fallback`,ref:yn,type:R.type}:typeof R.fallback=="string"?{id:`${R.id}::fallback`,ref:R.fallback,type:R.type}:{...R.fallback,id:typeof R.fallback.id=="string"&&R.fallback.id.length>0?R.fallback.id:`${R.id}::fallback`}}function l(R,B,K){let P=`${R.type}\0${R.ref}`,h=a.get(P);if(h)return B.aborted?Promise.reject(Ie({id:R.id,ref:R.ref,code:"aborted"})):(_(K,P),Promise.resolve(It(h.resource)));if(B.aborted)return Promise.reject(Ie({id:R.id,ref:R.ref,code:"aborted"}));let x=c.get(P);if(!x){let H=new AbortController,q={id:R.id,ref:R.ref,type:R.type};R.integrity!==void 0&&(q.integrity=R.integrity),R.provenance&&(q.provenance=Yo(R.provenance)),x={promise:Promise.resolve().then(()=>e.resolver.resolve(q,H.signal)).then(X=>{let W=Ed(R,X);if(H.signal.aborted)throw Ie({id:R.id,ref:R.ref,code:"aborted"});return a.set(P,{resource:It(W)}),W}).catch(X=>{throw Sd(R,X)}).finally(()=>{c.delete(P)}),controller:H,waiters:0},c.set(P,x)}let L=x;return L.waiters+=1,new Promise((H,q)=>{let Z=!1,X=(y,b)=>{Z||(Z=!0,B.removeEventListener("abort",W),L.waiters-=1,b&&L.waiters<=0&&L.controller.abort(),y())},W=()=>{X(()=>q(Ie({id:R.id,ref:R.ref,code:"aborted"})),!0)};if(B.aborted){W();return}B.addEventListener("abort",W,{once:!0}),L.promise.then(y=>{if(!Z){if(B.aborted){W();return}_(K,P),X(()=>H(It(y)),!1)}},y=>{if(!Z){if(B.aborted){W();return}X(()=>q(y),!1)}})})}function m(R,B,K){if(B.aborted)return Promise.reject(Ie({id:R.id,ref:R.ref,code:"aborted"}));if(R.ref===yn)return Promise.resolve(vd(R));let P=new AbortController,h=()=>P.abort();B.addEventListener("abort",h,{once:!0});let x=R.timeoutMs??e.timeoutMs,L,H=!1;return n&&x!==void 0&&x>0&&Number.isFinite(x)&&(L=setTimeout(()=>{H=!0,P.abort()},x)),l(R,P.signal,K).then(q=>{let Z=Ed(R,q);return Z.id=R.id,Z}).catch(q=>{throw H?Ie({id:R.id,ref:R.ref,code:"timeout"}):q}).finally(()=>{L!==void 0&&clearTimeout(L),B.removeEventListener("abort",h)})}async function I(R,B,K,P){try{return{resource:await m(R,B,P)}}catch(h){let x=C(R,B,h);if(E(x)||B.aborted||K>=Ip)throw x;let L=d(R);if(!L)throw x;if(B.aborted)throw Ie({id:R.id,ref:R.ref,code:"aborted"});if(R.fallback==="silent"||L.ref===yn)return{resource:vd(R),failure:x};try{let H=await I(L,B,K+1,P);return{resource:{...It(H.resource),id:R.id,usedFallback:!0},failure:x}}catch(H){let q=gn(H)&&!E(H)&&!B.aborted?H:C(R,B,H);throw!E(q)&&!B.aborted&&M(x),q}}}async function O(R,B){if(k)throw new Error(bd);let K=r.get(R.id);if(K?.state==="ready"||K?.state==="failed")return;let P=o.get(R.id);if(P){await P;return}let h=(async()=>{let x=Mp(R);if(x){v(R.id,{state:"failed",failure:x}),M(x),A(Yt("failed",{id:R.id,ref:R.ref,failure:x}));return}v(R.id,{state:"loading"});let L=s.get(R.id)??new AbortController;s.has(R.id)||s.set(R.id,L);try{let H=await I(R,L.signal,B,R.id);if(k)return;if(L.signal.aborted){let q=Ie({id:R.id,ref:R.ref,code:"aborted"});v(R.id,{state:"failed",failure:q}),M(q),A(Yt("failed",{id:R.id,ref:R.ref,failure:q}));return}if(H.resource.id=R.id,H.failure){v(R.id,{state:"ready",resource:H.resource,failure:H.failure}),M(H.failure),A(Yt("failed",{id:R.id,ref:R.ref,failure:H.failure,resource:It(H.resource)})),A(Yt("ready",{id:R.id,ref:H.resource.ref,resource:It(H.resource),failure:H.failure}));return}v(R.id,{state:"ready",resource:H.resource}),A(Yt("ready",{id:R.id,ref:R.ref,resource:It(H.resource)}))}catch(H){if(k)return;let q=gn(H)&&!E(H)&&!L.signal.aborted?{...Qn(H),id:R.id}:C(R,L.signal,H);v(R.id,{state:"failed",failure:q}),M(q),A(Yt("failed",{id:R.id,ref:R.ref,failure:q}))}finally{s.get(R.id)===L&&s.delete(R.id)}})();o.set(R.id,h);try{await h}finally{o.delete(R.id)}}return{async preload(R){if(k)throw new Error(bd);let B=Array.isArray(R)?R:[];for(let K of B)K&&typeof K.id=="string"&&K.id.length>0&&(r.has(K.id)||r.set(K.id,{state:"pending"}),s.has(K.id)||s.set(K.id,new AbortController));return w(),await Promise.all(B.map(K=>O(K,0))),G()},get(R){let B=r.get(R);if(B?.state==="ready")return It(B.resource)},getProgress(){return G()},onProgress(R){return p.add(R),()=>{p.delete(R)}},abort(R){if(!k){if(R!==void 0){s.get(R)?.abort();return}for(let B of s.values())B.abort()}},forget(R){if(k)return;if(R===void 0){for(let K of r.values())K.state==="ready"&&u(K.resource);r.clear(),i.length=0,a.clear(),f.clear(),w();return}let B=r.get(R);B?.state==="ready"&&u(B.resource),V(R,B),r.delete(R);for(let K=i.length-1;K>=0;K--)i[K].id===R&&i.splice(K,1);w()},dispose(){if(!k){k=!0;for(let R of s.values())R.abort();s.clear();for(let R of r.values())R.state==="ready"&&u(R.resource);r.clear(),i.length=0,o.clear();for(let R of c.values())R.controller.abort();a.clear(),c.clear(),f.clear(),p.clear()}}}}var Xo=.25;function bn(e){return e.error===void 0?{state:e.state}:{state:e.state,error:e.error}}function zo(e){return!Number.isFinite(e)||e<0?0:e>1?1:e}function Lp(e){return e instanceof Error&&e.message?e.message:String(e)}async function Vp(){let{adaptersFor:e}=await Promise.resolve().then(()=>(Bo(),td)),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 Bp(e){if(!e||typeof e!="object")return;let t=e.id;return typeof t=="string"&&t.length>0?t:void 0}function Qo(e={}){let t=e.toneStart??Vp,n=!!e.reducedSensory,r=new Set,i=new Map,o=new Map,s=new Map,a=[],c={state:"locked"},f,p=!1,k=!1;function E(w){for(let M of a.slice())M(w)}function C(w,M){let A=i.get(w);if(A)return M&&!A.participantId&&(A.participantId=M),A;let u={id:w,participantId:M,gain:1,muted:!1,duckGain:1,priority:0,manualDuck:!1};return i.set(w,u),u}function _(w){return p||w.muted?0:zo(w.gain*w.duckGain)}function g(w){return{id:w.id,participantId:w.participantId,gain:w.gain,muted:w.muted,duckGain:w.duckGain,priority:w.priority,effectiveGain:_(w)}}function T(){let w=-1/0;for(let M of s.values())M.priority>w&&(w=M.priority);for(let M of i.values())if(!M.manualDuck){if(w===-1/0){M.duckGain=1;continue}M.duckGain=M.priority<w?Xo:1}}async function V(){if(k||c.state==="unlocked")return bn(c);if(f)return await f,bn(c);c={state:"unlocking"},f=(async()=>{try{await t(),c={state:"unlocked"}}catch(w){c={state:"failed",error:Lp(w)}}})();try{await f}finally{f=void 0}return bn(c)}return{unlock:V,status(){return bn(c)},authorize(w){k||typeof w!="string"||w.length===0||r.add(w)},revoke(w){k||r.delete(w)},isAuthorized(w){return w===void 0||w.length===0?r.size===0:r.size===0?!0:r.has(w)},setChannelGain(w,M,A){k||typeof w!="string"||w.length===0||(C(w,A).gain=zo(M))},setPriority(w,M,A){k||typeof w!="string"||w.length===0||(C(w,A).priority=Number.isFinite(M)?M:0,T())},mute(){k||(p=!0,E({type:"mute"}))},unmute(){k||(p=!1,E({type:"mute"}))},muteChannel(w,M){k||typeof w!="string"||w.length===0||(C(w,M).muted=!0,E({type:"mute"}))},unmuteChannel(w){if(k)return;let M=i.get(w);M&&(M.muted=!1,E({type:"mute"}))},duck(w,M=Xo){if(k||typeof w!="string"||w.length===0)return;let A=C(w);A.manualDuck=!0,A.duckGain=zo(M)},unduck(w){if(k)return;let M=i.get(w);M&&(M.manualDuck=!1,T())},effectiveGain(w){let M=i.get(w);return M?_(M):p?0:1},handleHostEvent(w){if(k||!w||typeof w!="object")return;let M=Bp(w.payload);if(M){if(w.type===Ke){o.set(M,"ready"),E({type:"asset",id:M,status:"ready"});return}w.type===$e&&(o.set(M,"failed"),E({type:"asset",id:M,status:"failed"}))}},assetStatus(w){return o.get(w)},noteCueStarted(w){if(k)return;s.set(w.idempotencyKey,{idempotencyKey:w.idempotencyKey,channelId:w.channelId,participantId:w.participantId,priority:w.priority});let M=C(w.channelId,w.participantId);w.priority>M.priority&&(M.priority=w.priority),T()},noteCueEnded(w){s.delete(w)&&T()},teardown(w){if(!k&&!(typeof w!="string"||w.length===0)){r.delete(w);for(let[M,A]of[...s.entries()])A.participantId===w&&s.delete(M);for(let[M,A]of[...i.entries()])A.participantId===w&&i.delete(M);T(),E({type:"teardown",participantId:w})}},onNotice(w){return a.push(w),()=>{let M=a.indexOf(w);M>=0&&a.splice(M,1)}},inspect(){let w=[...o.entries()].sort(([A],[u])=>A<u?-1:A>u?1:0),M={};for(let[A,u]of w)M[A]=u;return{status:bn(c),reducedSensory:n,muted:p,authorized:[...r].sort(),channels:[...i.values()].sort((A,u)=>A.id<u.id?-1:A.id>u.id?1:0).map(g),assets:M}},destroy(){k||(k=!0,s.clear(),i.clear(),r.clear(),E({type:"destroy"}),a.length=0)},get reducedSensory(){return n},get muted(){return p}}}function Pd(e,t){let n=e.dispatch.bind(e);e.dispatch=r=>{t.handleHostEvent(r),n(r)}}function Zo(e){$a();let{container:t,seed:n,captureKeyboard:r=!1,audio:i,deterministic:o,assets:s,audioBroker:a,audioParticipantId:c,kind:f="render",onFrameTiming:p}=e,k=n===void 0?void 0:Ur(n,o?"deterministic":"live"),E=new ln;if(a&&(Pd(E,a),c&&a.authorize(c)),s&&typeof s.resolver?.resolve!="function")throw new Error("createRuntime: assets.resolver is required");let C=s?zt({resolver:s.resolver,timeoutMs:s.timeoutMs,emitEvents:s.emitEvents??!o,wallClockTimeout:!o,dispatch:l=>E.dispatch(l)}):void 0,_=!1,g=null,T,V=p,G=!1,w=t.clientWidth||window.innerWidth,M=t.clientHeight||window.innerHeight,A=new Zr(30,!1,w,M,!1,void 0,{container:t,seed:k,captureKeyboard:r,hostChannel:E,audio:i,deterministic:o,kind:f,onFrameTiming:p}),u=()=>{let l=t.clientWidth||window.innerWidth,m=t.clientHeight||window.innerHeight;return l===A.containerWidth&&m===A.containerHeight?!1:(A.containerWidth=l,A.containerHeight=m,!0)},v=null;return!A.isDeterministic&&typeof ResizeObserver<"u"&&(v=new ResizeObserver(()=>{if(_||!g)return;u()&&G&&A.reinit()}),v.observe(t)),A.onError=(l,m)=>{T?.(l,m)},{get tokenData(){return A.tokenData},get hostChannel(){return E},get assets(){return C},get audioBroker(){return a},get kind(){return f},get onError(){return T},set onError(l){T=l},get onFrameTiming(){return V},set onFrameTiming(l){V=l,A.onFrameTiming=l},mount(l,m={}){if(_)throw new Error("createRuntime: cannot mount on a destroyed runtime");g?.destroy(),G=!1,A.customState=m.initialState,A.setGameManager(m.gameManager);let I=m.onEvent?E.onEvent(m.onEvent):()=>{};if(a&&c&&a.authorize(c),!A.prepareCart(l))throw I(),new Error("createRuntime: failed to prepare cart");let O=!1,R={async start(){if(!O){if(u()&&A.isPrepared&&(A.init(),A.unloadCart(),!A.prepareCart(l)))throw new Error("createRuntime: failed to prepare cart");A.needsAudio&&(a?await a.unlock():await A.unlockAudio(),O)||(G=!0,A.beginPlayback())}},pause(){O||(A.paused=!0)},resume(){O||(A.paused=!1)},dispatch(B){O||E.dispatch(B)},snapshot(){if(O)return{seed:"",pngDataUrl:""};let B=A.canvas;return{seed:A.tokenData.hash,metadata:l.metadata,pngDataUrl:B?B.toDataURL("image/png"):""}},destroy(){O||(O=!0,G=!1,I(),E.clearInbound(),A.unloadCart(),g===R&&(g=null))},reload(){if(!O){if(!G){if(A.isPrepared&&(A.unloadCart(),!A.prepareCart(l)))throw new Error("createRuntime: failed to prepare cart");return}A.reloadCart()}},reinit(B){if(!O){if(!G){u();return}A.reinit(B)}},getCartState(){return A.animation?.cartState},exportState(){return O?Promise.reject(new Error("Cart handle has been destroyed")):A.exportState()},exportStateJSON(){return O?Promise.reject(new Error("Cart handle has been destroyed")):A.exportStateJSON()},async importState(B,K){if(O)throw new Error("Cart handle has been destroyed");let P=B,h=B;if(typeof B=="string")try{h=JSON.parse(B)}catch{await A.importState(B,K);return}if(h&&typeof h=="object"&&typeof h.schemaVersion=="number"){let x=Uo(h);if(x.ok===!1)throw new Fe(Jt(x.errors));await A.importState(x.bundle,K);return}await A.importState(typeof P=="string"?P:h,K)},async exportSnapshot(B){if(O)throw new Error("Cart handle has been destroyed");let K=await A.exportState(),P=A.getClock(),h=zn(K,{...B,rng:A.getRandomState(),clock:{framesElapsed:K.framesElapsed,elapsedSinceStart:K.elapsedSinceStart,now:P.now,frameRate:P.frameRate}});if(h.ok===!1)throw new Fe(Jt(h.errors));return h.snapshot},async exportSnapshotJSON(B){return JSON.stringify(await R.exportSnapshot(B))},async importSnapshot(B,K){if(O)throw new Error("Cart handle has been destroyed");let P=Jo(B);if(P.ok===!1)throw new Fe(Jt(P.errors));await A.importState(P.snapshot.engineState,K)},peekExportedFramebuffer(){return O?null:A.peekExportedFramebuffer()},peekSeed(){if(!O)return A.peekSeed()},isGenerative(){return O?!1:A.isGenerative()},async step(B=1){if(O)throw new Error("Cart handle has been destroyed");await A.step(B)},async advance(B){if(O)throw new Error("Cart handle has been destroyed");await A.advance(B)},schedule(B){O||A.schedule(B)},getClock(){if(O)throw new Error("Cart handle has been destroyed");return A.getClock()},getRandomState(){if(O)throw new Error("Cart handle has been destroyed");return A.getRandomState()},getReplayMetadata(){return O?Promise.reject(new Error("Cart handle has been destroyed")):A.getReplayMetadata()},get canvas(){return A.canvas},get paused(){return A.paused},set paused(B){O||(A.paused=B)},get tokenData(){return A.tokenData},get isPrepared(){return A.isPrepared},get isLoopRunning(){return A.isLoopRunning},get needsAudio(){return A.needsAudio},get audioLibraries(){return A.audioLibraries}};return g=R,R},async unlockAudio(){if(a){A.needsAudio&&await a.unlock();return}await A.unlockAudio()},destroy(){_||(_=!0,g?.destroy(),g=null,a&&c&&a.teardown(c),v?.disconnect(),v=null,C?.dispose(),E.close(),A.destroy())}}}var vn="cyberart.state.save",Sn="cyberart.state.load";function Fp(e,t,n={}){let r=n.persist,i=r?{persist:r}:void 0,o=()=>{t.emit({type:vn,payload:i})},s=()=>{t.emit({type:Sn,payload:i})};e.registerAction("w",o,!0),e.registerAction("W",o,!0),e.registerAction("e",s,!0),e.registerAction("E",s,!0)}function Td(e){if(e.type!==vn&&e.type!==Sn)return;let t=e.payload?.persist;return t==="localStorage"?t:void 0}var $p="cyberart-io",Hp=1,Bt="framebuffers";function es(e,t){return`${e||"unknown"}:${t?Lt(t):"none"}`}function xd(e,t){return`${e||"unknown"}:${t||"none"}`}function ts(){return new Promise((e,t)=>{let n=indexedDB.open($p,Hp);n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains(Bt)||r.createObjectStore(Bt)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error??new Error("indexedDB open failed"))})}function qp(e){let t=e.data;return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}function wd(e,t){return new Promise((n,r)=>{let o=e.transaction(Bt,"readonly").objectStore(Bt).get(t);o.onsuccess=()=>n(o.result),o.onerror=()=>r(o.error??new Error("indexedDB read failed"))})}async function _d(e,t,n){if(typeof indexedDB>"u")return;let r=await ts(),i={width:n.width,height:n.height,data:qp(n)};try{await new Promise((o,s)=>{let a=r.transaction(Bt,"readwrite");a.oncomplete=()=>o(),a.onerror=()=>s(a.error??new Error("indexedDB write failed")),a.objectStore(Bt).put(i,es(e,t))})}finally{r.close()}}async function Od(e,t){if(typeof indexedDB>"u")return null;let n=await ts();try{let r=es(e,t),i=xd(e,t),o=await wd(n,r)??(r===i?void 0:await wd(n,i));if(!o||!o.data||o.width<1||o.height<1)return null;let s=new ImageData(o.width,o.height);return s.data.set(new Uint8ClampedArray(o.data)),s}finally{n.close()}}async function Dd(e,t){if(typeof indexedDB>"u")return;let n=await ts();try{await new Promise((r,i)=>{let o=n.transaction(Bt,"readwrite");o.oncomplete=()=>r(),o.onerror=()=>i(o.error??new Error("indexedDB delete failed"));let s=o.objectStore(Bt);s.delete(es(e,t)),s.delete(xd(e,t))})}finally{n.close()}}var ns="cyberart.state.",Kp="Saved state",Wp="Loaded state",Nd="Failed to save state",Gp="Failed to load state",jp="No saved state";function Ft(e,t){let n=e||"unknown";return t?ns+n+"."+Lt(t):ns+n}function Up(e,t,n){return r=>{if(Td(r)==="localStorage"){if(r.type===vn){Jp(e,t,n);return}r.type===Sn&&Yp(e,t,n)}}}function Ld(e){return!!e&&typeof e=="object"&&typeof e.schemaVersion=="number"}function Md(e){if(Ld(e)){let t=Xn(e);if(t.ok===!1)return null;try{return tt(t.snapshot.engineState)}catch{return null}}if(fn(e))try{return tt(e)}catch{return null}return null}function En(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=Md(n.bundle);return o?{savedAt:n.savedAt,bundle:o}:null}let r=Md(t);if(r)return{savedAt:0,bundle:r};if(Ld(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 Jp(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?.(Nd,"transient");return}i.generative===!0?(nf(o),si(Ft(o,i.seed),i)):si(Ft(o),i);let s=r.peekExportedFramebuffer?.();if(s)try{await _d(o,i.seed,s)}catch(a){console.warn("Failed to save cart framebuffer",a)}n?.(Kp,"transient")}catch(i){console.error("Failed to save cart state",i),n?.(Nd,"transient")}}async function Yp(e,t,n){let r=e();if(!r)return;let i=t?.(),o=r.peekSeed?.(),s=r.isGenerative?.()===!0,a=ef(i,s,o);if(!a){console.warn("No saved cart state for",i||"unknown",s&&o?`(hash ${o})`:""),n?.(jp,"transient");return}try{let c=await Od(i,a.bundle.seed).catch(()=>null);await r.importState(a.bundle,{framebuffer:c}),n?.(Wp,"transient")}catch(c){console.error("Failed to load cart state",c),n?.(Gp,"transient")}}function si(e,t){let n=JSON.stringify({savedAt:Date.now(),bundle:t});zp(e,n)}function zp(e,t){for(;;)try{localStorage.setItem(e,t);return}catch(n){if(!Xp(n)||!Qp(e))throw n}}function Xp(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 Qp(e){let t=null,n=1/0;for(let o of Zp()){if(o===e)continue;let s=localStorage.getItem(o);if(!s)continue;let c=En(s)?.savedAt??0;c<n&&(n=c,t=o)}if(!t)return!1;let r=localStorage.getItem(t),i=r?En(r):null;return localStorage.removeItem(t),i?.bundle&&Dd(i.bundle.cartId,i.bundle.seed).catch(()=>{}),!0}function Zp(){let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(ns)&&e.push(n)}return e}function ef(e,t,n){if(t&&n){let i=localStorage.getItem(Ft(e,n));if(i)return En(i);let o=localStorage.getItem(Ft(e));if(!o)return null;let s=En(o);if(!s||!tf(s.bundle,n))return null;try{si(Ft(e,n),s.bundle)}catch{}return s}let r=localStorage.getItem(Ft(e));return r?En(r):null}function tf(e,t){return typeof e.seed=="string"&&Lt(e.seed)===Lt(t)}function nf(e){let t=Ft(e),n=localStorage.getItem(t);if(!n)return;let r=En(n);if(r&&typeof r.bundle.seed=="string"){let i=Ft(e,r.bundle.seed);if(!localStorage.getItem(i))try{si(i,r.bundle)}catch{return}}localStorage.removeItem(t)}var er=1,lt="cyberart.diagnostic.rejected",di=8,rf=new Set(["intent","state","diagnostic"]),of=new Set([vn,Sn]);function ai(e){return typeof e=="string"&&rf.has(e)}function Vd(e){if(e.kind!==void 0)return ai(e.kind)?e.kind:void 0;if(!(typeof e.type!="string"||e.type.length===0)){if(of.has(e.type))return"intent";for(let t of e.type.split("."))if(ai(t))return t}}function Bd(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 $t(e,t){for(let n of e)if(Bd(n,t))return!0;return!1}function kn(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 ci(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!==er)return{ok:!1,reason:"malformed",detail:`unsupported schemaVersion ${String(e.schemaVersion)}`};let n=Vd(e);if(!n)return{ok:!1,reason:"malformed",detail:`cannot infer kind from type "${e.type}"`};let r=kn(e.payload);if(!r.ok)return{ok:!1,reason:"malformed",detail:"payload is not JSON-serializable"};let i=t.createId(),o=typeof e.correlationId=="string"&&e.correlationId.length>0?e.correlationId:i,s=typeof e.causationId=="string"&&e.causationId.length>0?e.causationId:t.causationId,a=typeof e.target=="string"&&e.target.length>0?e.target:void 0,c=t.maxHops??di,f=t.parentHops===void 0?c:Math.max(0,t.parentHops-1),p=typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0?e.idempotencyKey:void 0,k={schemaVersion:er,type:e.type,kind:n,source:t.source,id:i,correlationId:o,seq:t.seq,hops:f};return a&&(k.target=a),s&&(k.causationId=s),p&&(k.idempotencyKey=p),r.value!==void 0&&(k.payload=r.value),{ok:!0,envelope:k}}var sf=new Set(["rate-limited","storm-detected","hop-limit","loop-detected","not-subscribed"]),af=8,df=8,cf=16,uf=256,lf=256,pf=["*.intent.*"];function rs(e={}){let t=e.hostSource??"host",n="router",r=e.maxPerTurn??af,i=e.maxCausationDepth??df,o=e.maxHops??di,s=e.maxCorrelationPerTurn??cf,a=e.maxIndex??uf,c=e.maxDecisions??lf,f=e.maxPerWindow,p=e.windowMs??1e3,k=e.now??Date.now,E=0,C=e.createId??(()=>`evt-${++E}`),_=new Map,g=[],T=[],V=new Map,G=new Map,w=new Map,M=[],A=0,u=0,v=0;function d(D){try{return JSON.parse(JSON.stringify(D))}catch{return D}}function l(D){for(M.push(D);M.length>c;)M.shift();for(let U of T)try{U(d(D))}catch{}}function m(D,U){let re={outcome:U.outcome,source:U.source,type:D.type,kind:D.kind,envelopeId:D.id,deliveredTo:U.deliveredTo,hops:D.hops,seq:D.seq,correlationId:D.correlationId,schemaVersion:D.schemaVersion,turn:v,time:k()};return U.reason&&(re.reason=U.reason),U.detail&&(re.detail=U.detail),U.priorEnvelopeId&&(re.priorEnvelopeId=U.priorEnvelopeId),D.target&&(re.target=D.target),D.causationId&&(re.causationId=D.causationId),D.idempotencyKey&&(re.idempotencyKey=D.idempotencyKey),D.payload!==void 0&&(re.payload=d(D.payload)),re}let I=[],O=!1;function R(D,U,re){for(D.set(U,re);D.size>a;){let te=D.keys().next().value;if(te===void 0)break;D.delete(te)}}function B(D){R(V,D.id,{type:D.type,source:D.source,causationId:D.causationId,hops:D.hops,correlationId:D.correlationId,idempotencyKey:D.idempotencyKey})}function K(D,U){U&&(D.correlationId||(D.correlationId=U.correlationId),D.causationId||(D.causationId=U.id),!D.idempotencyKey&&U.idempotencyKey&&(D.idempotencyKey=`${U.idempotencyKey}::${D.type}`))}function P(D,U){if(D){let re=V.get(D);return re?re.hops:o}return U}function h(D,U){return`${D}\0${U}`}function x(D,U){D.idempotencyKey&&R(w,h(D.source,D.idempotencyKey),U)}function L(D,U){if(U)return w.get(h(D,U))}function H(D){return L(D.source,D.idempotencyKey)}function q(D){return D.seq+=1,D.seq}function Z(D,U){if(!(typeof U.causationId=="string"&&U.causationId.length>0))return D.lastDelivered}function X(D){let U=new Set,re=new Set([`${D.type}\0${D.source}`]),te=D.causationId,oe=0;for(;te;){if(oe+=1,oe>i||U.has(te))return!0;U.add(te);let ye=V.get(te);if(!ye)break;let Je=`${ye.type}\0${ye.source}`;if(re.has(Je))return!0;re.add(Je),te=ye.causationId}return!1}function W(D){let U=(G.get(D)??0)+1;return G.set(D,U),U}function y(D,U){f!==void 0&&(D.emitTimestamps=D.emitTimestamps.filter(re=>U-re<p))}function b(D,U){return(U.kind==="state"||U.kind==="diagnostic")&&!D.authoritative?!1:$t(D.emit,U.type)}function S(D){for(let U of g)if($t(U.patterns,D.type))try{U.listener(D)}catch{}}function N(D){let U=[];if(D.target){let re=_.get(D.target);return!re||!$t(re.subscribe,D.type)||(re.channel.dispatch(D),re.lastDelivered={id:D.id,hops:D.hops,correlationId:D.correlationId,idempotencyKey:D.idempotencyKey},U.push(re.id)),U}for(let re of _.values())$t(re.subscribe,D.type)&&(re.channel.dispatch(D),re.lastDelivered={id:D.id,hops:D.hops,correlationId:D.correlationId,idempotencyKey:D.idempotencyKey},U.push(re.id));return U}function $(D,U,re,te,oe,ye,Je){let it={reason:te,eventType:U,source:re};oe&&(it.detail=oe),u+=1;let Nt=C(),Mt={schemaVersion:er,type:lt,kind:"diagnostic",source:n,id:Nt,correlationId:ye??Nt,seq:u,hops:0,payload:it};Je&&(Mt.causationId=Je),B(Mt);let Fn=_.get(D);Fn&&Fn.channel.dispatch(Mt),S(Mt)}function Q(D,U,re,te,oe){if($(D,oe?.type??(typeof U.type=="string"?U.type:""),oe?.source??D,re,te,oe?.correlationId,oe?.id),oe?.idempotencyKey&&!sf.has(re)&&x(oe,{status:"rejected"}),oe)l(m(oe,{outcome:"rejected",reason:re,detail:te,source:D,deliveredTo:[]}));else{let ye={outcome:"rejected",reason:re,source:D,type:typeof U.type=="string"?U.type:"",deliveredTo:[],turn:v,time:k()};te&&(ye.detail=te),typeof U.idempotencyKey=="string"&&(ye.idempotencyKey=U.idempotencyKey),l(ye)}}function J(D,U){B(D),x(D,{status:"accepted",envelope:D}),W(D.correlationId),S(D);let re=N(D);l(m(D,{outcome:"accepted",source:U,deliveredTo:re}))}function ne(D,U,re,te){let oe=te?.type??(typeof U.type=="string"?U.type:""),ye={outcome:"duplicate",reason:"duplicate",detail:re.status==="accepted"?"idempotent accepted":"idempotent rejected",source:D,type:oe,deliveredTo:[],turn:v,time:k()};te?(ye.kind=te.kind,ye.envelopeId=te.id,ye.hops=te.hops,ye.seq=te.seq,ye.correlationId=te.correlationId,ye.schemaVersion=te.schemaVersion,te.target&&(ye.target=te.target),te.causationId&&(ye.causationId=te.causationId),te.idempotencyKey&&(ye.idempotencyKey=te.idempotencyKey),te.payload!==void 0&&(ye.payload=d(te.payload))):typeof U.idempotencyKey=="string"&&(ye.idempotencyKey=U.idempotencyKey),re.status==="accepted"&&(ye.priorEnvelopeId=re.envelope.id,ye.envelopeId||(ye.envelopeId=re.envelope.id)),l(ye)}function ie(D,U,re,te){if(!re.ok){Q(D,U,"malformed",re.detail);return}let oe=re.envelope,ye=H(oe);if(ye)return ne(D,U,ye,oe),ye.status==="accepted"?ye.envelope:void 0;if(oe.hops<1){Q(D,U,"hop-limit","no hops remaining",oe);return}if(oe.target&&oe.target!==t){let Je=_.get(oe.target);if(!Je){Q(D,U,"unknown-target",`unknown target "${oe.target}"`,oe);return}if(!$t(Je.subscribe,oe.type)){Q(D,U,"not-subscribed",`target "${oe.target}" does not subscribe to ${oe.type}`,oe);return}}if(te){if(!b(te,oe)){Q(D,U,"unauthorized","source may not emit this event",oe);return}if(te.emitsThisTurn+=1,te.emitsThisTurn>r){Q(D,U,"rate-limited","maxPerTurn exceeded",oe);return}if(f!==void 0){let it=k();if(y(te,it),te.emitTimestamps.push(it),te.emitTimestamps.length>f){Q(D,U,"rate-limited","maxPerWindow exceeded",oe);return}}if(X(oe)){Q(D,U,"loop-detected","causation chain cycle or depth exceeded",oe);return}if((G.get(oe.correlationId)??0)+1>s){Q(D,U,"storm-detected","correlationId storm",oe);return}if(e.validate){let it;try{it=e.validate(oe)}catch(Nt){let Mt=Nt instanceof Error?Nt.message:"validate threw";Q(D,U,"host-rejected",Mt,oe);return}if(it!==!0){Q(D,U,"host-rejected",it.detail,oe);return}}}else{if(X(oe)){Q(D,U,"loop-detected","causation chain cycle or depth exceeded",oe);return}if((G.get(oe.correlationId)??0)+1>s){Q(D,U,"storm-detected","correlationId storm",oe);return}}return J(oe,D),oe}function Oe(D,U){let re=_.get(D);if(!re)return;let te={...U},oe=Z(re,te);K(te,oe);let ye=L(re.id,te.idempotencyKey);if(ye){ne(D,te,ye);return}let Je=q(re),it=ci(te,{source:re.id,createId:C,seq:Je,causationId:oe?.id,maxHops:o,parentHops:P(te.causationId??oe?.id,oe?.hops)});ie(D,te,it,re)}function Re(D,U){let re=U?.cause,te={...D};K(te,re);let oe=L(t,te.idempotencyKey);if(oe)return ne(t,te,oe),oe.status==="accepted"?oe.envelope:void 0;A+=1;let ye=ci(te,{source:t,createId:C,seq:A,causationId:te.causationId,maxHops:o,parentHops:P(te.causationId,re?.hops)});return ie(t,te,ye,void 0)}function Ae(){if(!O){O=!0;try{for(;I.length>0;){let D=I.shift();D&&(D.kind==="cart"?Oe(D.participantId,D.event):D.result=Re(D.event,D.extras))}}finally{O=!1}}}function ae(D){I.push(D),Ae()}return{attach(D,U,re={}){if(D===t||D===n)throw new Error(`createEventRouter: "${D}" is a reserved participant id`);for(let ye of _.values())if(ye.channel===U&&ye.id!==D)throw new Error(`createEventRouter: channel already attached as "${ye.id}"`);_.get(D)?.unsubscribe();let oe={id:D,channel:U,emit:re.emit??pf,subscribe:re.subscribe??[],authoritative:re.authoritative===!0,seq:0,emitsThisTurn:0,emitTimestamps:[],unsubscribe:()=>{}};oe.unsubscribe=U.onEvent(ye=>{ae({kind:"cart",participantId:D,event:ye})}),_.set(D,oe)},detach(D){let U=_.get(D);U&&(U.unsubscribe(),_.delete(D))},publish(D,U){let re={kind:"publish",event:D,extras:U};return ae(re),re.result},subscribe(D,U){let re={patterns:D,listener:U};return g.push(re),()=>{let te=g.indexOf(re);te>=0&&g.splice(te,1)}},subscribeDecision(D){return T.push(D),()=>{let U=T.indexOf(D);U>=0&&T.splice(U,1)}},inspectParticipants(){return[..._.values()].map(D=>({id:D.id,emit:D.emit.slice(),subscribe:D.subscribe.slice(),authoritative:D.authoritative}))},inspectDecisions(){return M.map(D=>d(D))},turn(){v+=1,G.clear();for(let D of _.values())D.emitsThisTurn=0,D.lastDelivered=void 0,f!==void 0&&y(D,k())}}}var ff=new Set(["string","number","boolean","object","array"]);function je(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Fd(e){if(!(typeof e!="string"||e.length===0)){for(let t of e.split("."))if(ai(t))return t}}function $d(e){let t=e.split(".");return t.length===0?"*":(t[t.length-1]="*",t.join("."))}function is(e){let t=[];if(!e||typeof e!="object")return[je("invalid-schema","payload schema is required")];if((typeof e.version!="number"||!Number.isInteger(e.version)||e.version<1)&&t.push(je("invalid-version","payload schema version must be an integer >= 1")),!e.fields||typeof e.fields!="object"||Array.isArray(e.fields))return t.push(je("invalid-fields","payload schema fields must be an object")),t;for(let[n,r]of Object.entries(e.fields)){if(!n){t.push(je("invalid-field","field name is required",n));continue}(!r||typeof r!="object"||!ff.has(r.type))&&t.push(je("invalid-field-type",`field "${n}" type must be string | number | boolean | object | array`,n))}return t}function mf(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 yf(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])=>je("missing-field",`payload is missing required field "${o}"`,o))}}if(t===null||typeof t!="object"||Array.isArray(t))return{ok:!1,errors:[je("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(je("missing-field",`payload is missing required field "${i}"`,i));continue}let s=mf(n[i]);s!==o.type&&r.push(je("field-type",`payload.${i} expected ${o.type}, got ${s}`,i))}return r.length>0?{ok:!1,errors:r}:{ok:!0,payload:t}}function gf(e,t,n){let r=$d(e);return{type:e,kind:t,payloadSchema:{version:n.version,fields:{...n.fields}},emitPattern:r,subscribePattern:r,toManifest(){let i={};for(let[o,s]of Object.entries(this.payloadSchema.fields))i[o]={type:s.type,optional:s.optional===!0};return{type:this.type,kind:this.kind,version:this.payloadSchema.version,fields:i,emitPattern:this.emitPattern,subscribePattern:this.subscribePattern}},validatePayload(i){return yf(this.payloadSchema,i)}}}function os(e,t,n){let r=[];if(typeof t!="string"||t.length===0)r.push(je("invalid-type","event type is required"));else if(t.split(".").some(i=>i.length===0))r.push(je("invalid-type",`event type "${t}" has empty dotted segments`));else{let i=Fd(t);i?i!==e&&r.push(je("kind-mismatch",`type "${t}" infers kind "${i}" but this helper defines "${e}"`)):r.push(je("kind-mismatch",`type "${t}" has no "${e}" segment; dotted names like host.presentation.* need e.g. host.presentation.${e}.cue-started`))}return r.push(...is(n)),r.length>0?{ok:!1,errors:r}:{ok:!0,contract:gf(t,e,n)}}function ss(e,t){return os("intent",e,t)}function fe(e,t){return os("state",e,t)}function Ye(e,t){return os("diagnostic",e,t)}function hf(e,t){let n=is(e),r=is(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),s=new Set(i),a=new Set(o);for(let p of i){if(!a.has(p))return"breaking";let k=e.fields[p],E=t.fields[p];if(k.type!==E.type)return"breaking";let C=k.optional!==!0,_=E.optional===!0;if(C&&_||!C&&E.optional!==!0&&k.optional===!0)return"breaking"}let c=!1;for(let p of o)if(!s.has(p)){if(t.fields[p].optional!==!0)return"breaking";c=!0}let f=i.length===o.length&&i.every(p=>t.fields[p].type===e.fields[p].type&&t.fields[p].optional===!0==(e.fields[p].optional===!0));return f&&t.version===e.version?"identical":t.version>e.version&&(c||f)?"backward-compatible":t.version===e.version&&c?"breaking":f?"identical":"breaking"}function bf(e,t){let n=[],r=[],i=new Set,o=new Set;for(let s of e)(t==="authoritative"||s.kind==="intent")&&!i.has(s.emitPattern)&&(i.add(s.emitPattern),n.push(s.emitPattern)),s.kind!=="intent"&&!o.has(s.subscribePattern)&&(o.add(s.subscribePattern),r.push(s.subscribePattern));return{emit:n,subscribe:r,authoritative:t==="authoritative"}}function vf(e,t){let n=e.emit??["*.intent.*"],r=e.authoritative===!0,i=[];for(let o of t)$t(n,o.type)&&(o.kind==="state"||o.kind==="diagnostic")&&!r&&i.push(je("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 Sf(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:[je("kind-mismatch",`envelope kind "${i.kind}" does not match contract "${o.kind}"`,i.type)]}:o.validatePayload(i.payload):{ok:!1,errors:[je("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(s=>s.detail).join("; ")}}}}var In=1,ds="presentation.state.model",qd="presentation.intent.unsupported",Kd=["loading","ready","error","unsupported"],Ef=["presentation.state.*",lt],kf="Presentation adapter has been destroyed",Wd="Presentation adapter: model is invalid or not JSON-serializable",If=new Set(Kd);function Gd(e){return typeof e=="string"&&If.has(e)}function cs(e){if(e===null||typeof e!="object")return!1;let t=e;return!(t.contractVersion!==In||!Gd(t.phase)||t.reason!==void 0&&typeof t.reason!="string"||t.view!==void 0&&(t.view===null||typeof t.view!="object"))}function as(e,t){let n={type:ds,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 us(){return{contractVersion:In,phase:"loading"}}function ls(e){return{contractVersion:In,phase:"unsupported",reason:e}}function ps(e){let t=kn(e);return t.ok?cs(t.value)?{ok:!0,model:t.value}:t.value!==null&&typeof t.value=="object"&&"contractVersion"in t.value&&t.value.contractVersion!==In?{ok:!1,reason:"unknown-contract-version",contractVersion:t.value.contractVersion}:{ok:!1,reason:"invalid-model"}:{ok:!1,reason:"model-not-serializable"}}function ui(e){let t=ps(e);if(!t.ok)throw new Error(Wd);return t.model}function Rf(e){let t=kn(e);return t.ok&&cs(t.value)?t.value:ls("model-not-serializable")}function Cf(e,t){if(e.type!==ds)return{model:t};let n=ps(e.payload);return n.ok?{model:n.model}:{model:ls(n.reason),rejected:{reason:n.reason,contractVersion:n.contractVersion}}}function Af(e){if(e===null||typeof e!="object"||!("regions"in e))return[];let t=e.regions;return Array.isArray(t)?t:[]}function Pf(e,t,n){return e>=n.x&&e<n.x+n.width&&t>=n.y&&t<n.y+n.height}function Tf(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=kn(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 jd(e,t,n){let r={reason:t};if(n!==void 0){let i=kn(n);i.ok&&(r.contractVersion=i.value)}e.emit({type:qd,kind:"intent",payload:r})}function Hd(e,t,n){let r=t;for(let i of e){let o=Cf(i,r);o.rejected&&n&&jd(n,o.rejected.reason,o.rejected.contractVersion),r=o.model}return r}function Ud(){return{metadata:{id:"cyberart.presentation.reference",name:"Reference presentation",frameRate:30},getDefaultState:(e,t,n,r,i,o,s,a,c)=>{let f=i?.model;if(f===void 0)return{model:us()};let p=ps(f);return p.ok?{model:p.model}:(c&&jd(c,p.reason,p.contractVersion),{model:ls(p.reason)})},update:(e,t,n,r,i,o,s,a,c,f,p)=>{let k=Hd(p?.consume()??[],i.model,p);for(;s?.hasClick();){let E=s.consumeClick();if(!(!E||k.phase!=="ready"||!p)){for(let C of Af(k.view))if(Pf(E.x,E.y,C)){Tf(p,C);break}}}return p&&(k=Hd(p.consume(),k,p)),k===i.model?i:{...i,model:k}},render:(e,t,n,r,i,o)=>{let s=i.model.view?.background;o.fillStyle=s??"#111",o.fillRect(0,0,r.width,r.height)}}}function Jd(e,t={}){let n=e,r=t.model?ui(t.model):us(),i=!1,o=t.present??t.model!==void 0,s=()=>{if(i)throw new Error(kf)},a=c=>{s(),r=ui(c),n.dispatch(as(r))};return o&&n.dispatch(as(r)),{version:In,get target(){return n},get model(){return Rf(r)},get phase(){return r.phase},get paused(){return n.paused===!0},present:a,async start(){return s(),n.start()},pause(){s(),n.pause()},resume(){s(),n.resume()},retarget(c){s(),n=c},destroy(){i||(i=!0,n.destroy())}}}function wf(e,t={}){let n=t.model?ui(t.model):t.initialState?.model!==void 0?ui(t.initialState.model):us(),r=t.cart??Ud(),i=e.mount(r,{initialState:{...t.initialState,model:n},onEvent:t.onEvent});return Jd(i,{model:n,present:!1})}var xt="cue.started",Ht="cue.completed",_t="cue.cancelled",Rt="cue.replaced",xf=[xt,Ht,_t,Rt];function _f(e){return e===xt||e===Ht||e===_t||e===Rt}function zd(e,t){let n=e<0?0:e>1?1:e;return t==="ease-out"?1-(1-n)*(1-n):n}function Yd(e){return{type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,progress:e.progress}}function li(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 fs(e){return e.startFrame+e.delayFrames}function Of(e,t){if(!e||typeof e!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(typeof e.name!="string"||e.name.length===0)return{ok:!1,reason:"invalid",detail:"name is required"};if(typeof e.idempotencyKey!="string"||e.idempotencyKey.length===0)return{ok:!1,reason:"invalid",detail:"idempotencyKey is required"};if(typeof e.durationFrames!="number"||!Number.isFinite(e.durationFrames)||e.durationFrames<0)return{ok:!1,reason:"invalid",detail:"durationFrames must be a non-negative finite number"};let n=e.startFrame===void 0?t:e.startFrame;if(typeof n!="number"||!Number.isFinite(n))return{ok:!1,reason:"invalid",detail:"startFrame must be finite"};let r=e.delayFrames??0;if(typeof r!="number"||!Number.isFinite(r)||r<0)return{ok:!1,reason:"invalid",detail:"delayFrames must be a non-negative finite number"};let i=e.easing??"linear";if(i!=="linear"&&i!=="ease-out")return{ok:!1,reason:"invalid",detail:"unsupported easing"};let o=e.onDuplicate??"replace";if(o!=="ignore"&&o!=="replace"&&o!=="reject")return{ok:!1,reason:"invalid",detail:"unsupported onDuplicate"};let s=0;if(e.repeat)if("forever"in e.repeat&&e.repeat.forever)s="forever";else if("count"in e.repeat){if(typeof e.repeat.count!="number"||!Number.isFinite(e.repeat.count)||e.repeat.count<0)return{ok:!1,reason:"invalid",detail:"repeat.count must be >= 0"};s=Math.floor(e.repeat.count)}else return{ok:!1,reason:"invalid",detail:"unsupported repeat"};let a=e.reducedMotion??"complete";return a!=="skip"&&a!=="complete"&&(typeof a!="object"||typeof a.durationFrames!="number"||!Number.isFinite(a.durationFrames)||a.durationFrames<0)?{ok:!1,reason:"invalid",detail:"unsupported reducedMotion"}:{name:e.name,idempotencyKey:e.idempotencyKey,startFrame:n,durationFrames:e.durationFrames,delayFrames:r,easing:i,repeatRemaining:s,repeatIndex:0,reducedMotion:a,onDuplicate:o,phase:"scheduled",progress:0}}function Df(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 Ct(e={}){let t=!!e.reducedMotion,n=e.originFrame??0,r=new Map,i=[];function o(g){i.push(g)}function s(g,T){let V=fs(g)-fs(T);return V!==0?V:g.name<T.name?-1:g.name>T.name?1:g.idempotencyKey<T.idempotencyKey?-1:g.idempotencyKey>T.idempotencyKey?1:0}function a(g,T){o({type:T,atFrame:n,name:g.name,idempotencyKey:g.idempotencyKey,progress:g.progress})}function c(g){if(g.phase="completed",g.progress=1,a(g,Ht),g.repeatRemaining==="forever"||g.repeatRemaining>0){if(typeof g.repeatRemaining=="number"&&(g.repeatRemaining-=1),g.repeatIndex+=1,g.phase="scheduled",g.progress=0,g.startFrame=n,g.delayFrames=0,g.durationFrames===0){r.delete(g.idempotencyKey);return}g.phase="active",a(g,xt)}else r.delete(g.idempotencyKey)}function f(g){if(g.phase==="cancelled"||g.phase==="completed")return;let T=fs(g);if(!(n<T)){if(g.phase==="scheduled"&&(g.phase="active",g.progress=g.durationFrames===0?1:0,a(g,xt),g.durationFrames===0)){c(g);return}if(g.phase==="active"){let V=n-T;V>=g.durationFrames?(g.progress=1,c(g)):g.progress=zd(g.durationFrames===0?1:V/g.durationFrames,g.easing)}}}function p(){let g=[...r.values()].sort(s);for(let T of g)f(T)}function k(g){let T=Of(g,n);if("ok"in T&&T.ok===!1)return T;let V=Df(T,t),G=r.get(V.idempotencyKey);if(G&&(G.phase==="scheduled"||G.phase==="active")){if(G.onDuplicate==="reject"||V.onDuplicate==="reject")return{ok:!1,reason:"duplicate",detail:`cue ${V.idempotencyKey} is already ${G.phase}`};if(G.onDuplicate==="ignore"||V.onDuplicate==="ignore")return{ok:!0,cue:li(G)};G.phase="cancelled",G.progress=G.progress,a(G,Rt),r.delete(G.idempotencyKey)}r.set(V.idempotencyKey,V),f(V);let w=r.get(V.idempotencyKey)??V;return{ok:!0,cue:li(w)}}function E(g){let T=r.get(g);return!T||T.phase==="completed"||T.phase==="cancelled"?!1:(T.phase="cancelled",a(T,_t),r.delete(g),!0)}function C(){for(let g of[...r.values()].sort(s))(g.phase==="scheduled"||g.phase==="active")&&(g.phase="cancelled",a(g,_t));r.clear(),i.length=0,n=e.originFrame??0}function _(g=1){let T=Number.isFinite(g)?Math.max(0,Math.floor(g)):0,V=i.length;for(let G=0;G<T;G++)n+=1,p();return i.slice(V).map(Yd)}return{play:k,step:_,cancel:E,reset:C,snapshot(){return{frame:n,reducedMotion:t,cues:[...r.values()].sort(s).map(li),events:i.map(Yd)}},get(g){let T=r.get(g);return T?li(T):void 0},setReducedMotion(g){t=!!g},get frame(){return n},get reducedMotion(){return t}}}var yi="audio.cue.scheduled",tr="audio.cue.started",gi="audio.cue.skipped",Xt="audio.cue.failed",Nf=[yi,tr,gi,Xt],mi=1,Mf=["scheduled","active","completed","cancelled"],Lf=["linear","ease-out"],Vf=["locked","unlocking","unlocked","failed"],Bf=["scheduled","started","skipped"];function Qd(e){return e===yi||e===tr||e===gi||e===Xt}function Rn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Pt(e){return typeof e=="string"&&e.length>0}function At(e){return typeof e=="number"&&Number.isFinite(e)}function Ff(e){return e==="scheduled"||e==="started"||e==="skipped"||e==="failed"||e==="completed"}function Xd(e){return e==="reduced-sensory"||e==="muted"||e==="unauthorized"||e==="asset-failed"||e==="torn-down"||e==="invalid"}function be(e,t,n){let r={code:e,detail:t};return n&&(r.path=n),r}function nr(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[be("invalid-json","snapshot JSON is invalid")]}}if(!Rn(t))return{ok:!1,errors:[be("invalid-snapshot","snapshot must be a JSON object")]};let n=[];t.schemaVersion!==mi&&n.push(be("unsupported-schema",`unsupported audio cue snapshot schemaVersion ${String(t.schemaVersion)}`,"schemaVersion")),At(t.frame)||n.push(be("invalid-snapshot","frame must be finite","frame")),typeof t.reducedSensory!="boolean"&&n.push(be("invalid-snapshot","reducedSensory must be a boolean","reducedSensory")),t.muted!==void 0&&typeof t.muted!="boolean"&&n.push(be("invalid-snapshot","muted must be a boolean","muted")),t.unlock!==void 0&&(!Rn(t.unlock)||!Vf.includes(t.unlock.state)?n.push(be("invalid-snapshot","unlock.state must be locked, unlocking, unlocked, or failed","unlock")):t.unlock.error!==void 0&&typeof t.unlock.error!="string"&&n.push(be("invalid-snapshot","unlock.error must be a string","unlock.error"))),Array.isArray(t.cues)||n.push(be("invalid-snapshot","cues must be an array","cues")),Array.isArray(t.events)||n.push(be("invalid-snapshot","events must be an array","events"));let r=new Set,i=[];Array.isArray(t.cues)&&t.cues.forEach((a,c)=>{let f=`cues[${c}]`,p=$f(a,f,n);if(p){if(r.has(p.idempotencyKey)){n.push(be("unknown-cue",`duplicate cue idempotencyKey "${p.idempotencyKey}"`,f));return}r.add(p.idempotencyKey),i.push(p)}});let o=[];return Array.isArray(t.events)&&t.events.forEach((a,c)=>{let f=`events[${c}]`,p=Kf(a,f,n);p&&o.push(p)}),n.length>0?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:mi,frame:t.frame,reducedSensory:t.reducedSensory,cues:i,events:o}}}function $f(e,t,n){if(!Rn(e)){n.push(be("invalid-snapshot","cue must be an object",t));return}if(!Pt(e.idempotencyKey)){n.push(be("unknown-cue","cue idempotencyKey is required",`${t}.idempotencyKey`));return}if(!Pt(e.name)){n.push(be("invalid-snapshot","cue name is required",`${t}.name`));return}if(!Pt(e.assetId)){n.push(be("invalid-snapshot","cue assetId is required",`${t}.assetId`));return}if(!Pt(e.channelId)){n.push(be("invalid-snapshot","cue channelId is required",`${t}.channelId`));return}if(!Ff(e.audioPhase)){n.push(be("invalid-snapshot","cue audioPhase is invalid",`${t}.audioPhase`));return}if(e.audioPhase==="completed"||e.audioPhase==="failed"){n.push(be("invalid-snapshot","completed and failed cues belong in the event log, not the live cues array",`${t}.audioPhase`));return}if(!Mf.includes(e.phase)){n.push(be("invalid-snapshot","cue phase is invalid",`${t}.phase`));return}if(!Lf.includes(e.easing)){n.push(be("invalid-snapshot","cue easing is invalid",`${t}.easing`));return}if(!At(e.startFrame)){n.push(be("invalid-snapshot","cue startFrame must be finite",`${t}.startFrame`));return}if(!At(e.durationFrames)||e.durationFrames<0){n.push(be("invalid-snapshot","cue durationFrames must be a non-negative finite number",`${t}.durationFrames`));return}if(!At(e.delayFrames)||e.delayFrames<0){n.push(be("invalid-snapshot","cue delayFrames must be a non-negative finite number",`${t}.delayFrames`));return}if(!At(e.progress)){n.push(be("invalid-snapshot","cue progress must be finite",`${t}.progress`));return}if(!At(e.repeatIndex)){n.push(be("invalid-snapshot","cue repeatIndex must be finite",`${t}.repeatIndex`));return}if(!At(e.priority)){n.push(be("invalid-snapshot","cue priority must be finite",`${t}.priority`));return}if(e.participantId!==void 0&&!Pt(e.participantId)){n.push(be("invalid-snapshot","cue participantId must be a non-empty string",`${t}.participantId`));return}let r=Hf(e.repeat,`${t}.repeat`,n);if(e.repeat!==void 0&&r===void 0)return;let i={name:e.name,idempotencyKey:e.idempotencyKey,phase:e.phase,startFrame:e.startFrame,durationFrames:e.durationFrames,delayFrames:e.delayFrames,easing:e.easing,progress:e.progress,repeatIndex:e.repeatIndex,assetId:e.assetId,channelId:e.channelId,priority:e.priority,audioPhase:e.audioPhase};return typeof e.participantId=="string"&&(i.participantId=e.participantId),r&&(i.repeat=r),i}function Hf(e,t,n){if(e!==void 0){if(!Rn(e)){n.push(be("invalid-snapshot","repeat must be an object",t));return}if(e.forever===!0)return{forever:!0};if("count"in e){if(!At(e.count)||e.count<0){n.push(be("invalid-snapshot","repeat.count must be a non-negative finite number",t));return}return{count:e.count}}n.push(be("invalid-snapshot","repeat must be { count } or { forever: true }",t))}}function qf(e){if(e.repeat){if("forever"in e.repeat&&e.repeat.forever)return{forever:!0};if("count"in e.repeat)return{count:Math.max(0,Math.floor(e.repeat.count)-Math.floor(e.repeatIndex))}}}function Kf(e,t,n){if(!Rn(e)){n.push(be("invalid-snapshot","event must be an object",t));return}if(!Qd(e.type)){n.push(be("invalid-snapshot","event type is unknown",`${t}.type`));return}if(!Pt(e.idempotencyKey)){n.push(be("unknown-cue","event idempotencyKey is required",`${t}.idempotencyKey`));return}if(!Pt(e.name)){n.push(be("invalid-snapshot","event name is required",`${t}.name`));return}if(!Pt(e.assetId)){n.push(be("invalid-snapshot","event assetId is required",`${t}.assetId`));return}if(!Pt(e.channelId)){n.push(be("invalid-snapshot","event channelId is required",`${t}.channelId`));return}if(!At(e.atFrame)){n.push(be("invalid-snapshot","event atFrame must be finite",`${t}.atFrame`));return}if(!At(e.progress)){n.push(be("invalid-snapshot","event progress must be finite",`${t}.progress`));return}if(e.participantId!==void 0&&!Pt(e.participantId)){n.push(be("invalid-snapshot","event participantId must be a non-empty string",`${t}.participantId`));return}if(e.reason!==void 0&&!Xd(e.reason)){n.push(be("invalid-snapshot","event reason is unknown",`${t}.reason`));return}let r={type:e.type,atFrame:e.atFrame,name:e.name,idempotencyKey:e.idempotencyKey,assetId:e.assetId,channelId:e.channelId,progress:e.progress};return typeof e.participantId=="string"&&(r.participantId=e.participantId),Xd(e.reason)&&(r.reason=e.reason),r}function pi(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 Wf(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 fi(e,t,n){let r={name:e.name,idempotencyKey:e.idempotencyKey,phase:t?.phase??(e.audioPhase==="started"?"active":"scheduled"),startFrame:t?.startFrame??n,durationFrames:t?.durationFrames??0,delayFrames:t?.delayFrames??0,easing:t?.easing??"linear",progress:t?.progress??0,repeatIndex:t?.repeatIndex??0,assetId:e.assetId,channelId:e.channelId,participantId:e.participantId,priority:e.priority,audioPhase:e.audioPhase};return e.repeat&&(r.repeat=e.repeat),r}function Zd(e={}){let t=e.broker,n=!!(e.reducedSensory??t?.reducedSensory),r=Ct({originFrame:e.originFrame}),i=new Map,o=[],s=new Set,a=0;function c(u){o.push(u)}function f(u,v,d){let l=r.get(v.idempotencyKey);return pi({type:u,atFrame:r.frame,name:v.name,idempotencyKey:v.idempotencyKey,assetId:v.assetId,channelId:v.channelId,participantId:v.participantId,reason:d?.reason,progress:d?.progress??l?.progress??0})}function p(u,v){s.delete(u.idempotencyKey),t?.noteCueEnded(u.idempotencyKey),u.audioPhase="failed",c(f(Xt,u,{reason:v})),r.cancel(u.idempotencyKey),i.delete(u.idempotencyKey)}function k(u,v){s.delete(u.idempotencyKey),u.audioPhase="skipped",c(f(gi,u,{reason:v}))}function E(u){s.delete(u.idempotencyKey),u.audioPhase="started",t?.noteCueStarted({idempotencyKey:u.idempotencyKey,channelId:u.channelId,participantId:u.participantId,priority:u.priority}),c(f(tr,u))}function C(u){if(u.audioPhase!=="scheduled")return;if(t&&!t.isAuthorized(u.participantId)){k(u,"unauthorized"),r.cancel(u.idempotencyKey),i.delete(u.idempotencyKey);return}if(n||t?.reducedSensory){k(u,"reduced-sensory");return}if(t?.muted||t&&t.effectiveGain(u.channelId)===0){k(u,"muted");return}let v=t?.assetStatus(u.assetId);if(!t){E(u);return}if(v==="failed"){p(u,"asset-failed");return}if(v==="ready"){E(u);return}s.add(u.idempotencyKey)}function _(u,v){for(let d of[...s]){let l=i.get(d);if(!l){s.delete(d);continue}if(!(u&&l.assetId!==u)){if(v==="failed"||t?.assetStatus(l.assetId)==="failed"){p(l,"asset-failed");continue}(v==="ready"||t?.assetStatus(l.assetId)==="ready")&&C(l)}}}function g(u){for(let v of[...i.values()])v.participantId===u&&(v.audioPhase==="scheduled"||v.audioPhase==="started")&&p(v,"torn-down")}function T(u){for(let v of u){let d=i.get(v.idempotencyKey);if(d)if(v.type===xt)C(d);else if(v.type===Ht){if(s.delete(d.idempotencyKey),t?.noteCueEnded(d.idempotencyKey),r.get(d.idempotencyKey)){d.audioPhase="scheduled";continue}d.audioPhase==="scheduled"?p(d,"asset-failed"):(d.audioPhase==="started"&&(d.audioPhase="completed"),i.delete(d.idempotencyKey))}else v.type===_t?(s.delete(d.idempotencyKey),t?.noteCueEnded(d.idempotencyKey),(d.audioPhase==="scheduled"||d.audioPhase==="started")&&(d.audioPhase="failed"),i.delete(d.idempotencyKey)):v.type===Rt&&(s.delete(d.idempotencyKey),t?.noteCueEnded(d.idempotencyKey),i.delete(d.idempotencyKey))}}function V(){let u=o.slice(a).map(pi);return a=o.length,u}let G=t?.onNotice(u=>{if(u.type==="asset"){if(u.status==="failed"){for(let v of[...i.values()])v.assetId===u.id&&(v.audioPhase==="scheduled"||v.audioPhase==="started")&&p(v,"asset-failed");return}_(u.id,u.status);return}if(u.type==="teardown"){g(u.participantId);return}if(u.type==="destroy")for(let v of[...i.values()])(v.audioPhase==="scheduled"||v.audioPhase==="started")&&p(v,"torn-down")});function w(){for(let u of i.values())t?.noteCueEnded(u.idempotencyKey);i.clear(),s.clear(),o.length=0,a=0,r.reset()}function M(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 v=r.snapshot().events.length,d=r.play(Wf(u));if(!d.ok)return d;let l=r.snapshot().events.slice(v),m=l.some(P=>P.type===Rt);if(!m&&i.has(u.idempotencyKey)){let P=i.get(u.idempotencyKey);return{ok:!0,cue:fi(P,d.cue,r.frame)}}if(m){let P=i.get(u.idempotencyKey);P&&(s.delete(P.idempotencyKey),t?.noteCueEnded(P.idempotencyKey),i.delete(P.idempotencyKey))}let I=u.channelId??u.participantId??"master",O={name:u.name,idempotencyKey:u.idempotencyKey,assetId:u.assetId,channelId:I,participantId:u.participantId,priority:Number.isFinite(u.priority)?u.priority:0,audioPhase:"scheduled"};u.repeat&&(O.repeat=u.repeat),i.set(O.idempotencyKey,O),typeof u.gain=="number"&&t?.setChannelGain(I,u.gain,u.participantId),typeof u.priority=="number"&&t?.setPriority(I,u.priority,u.participantId),c(f(yi,O)),T(l.filter(P=>P.type!==Rt));let R=i.get(O.idempotencyKey);R&&R.audioPhase==="scheduled"&&t?.assetStatus(R.assetId)==="failed"&&p(R,"asset-failed"),V();let B=i.get(O.idempotencyKey)??O,K=r.get(O.idempotencyKey)??d.cue;return{ok:!0,cue:fi(B,K,r.frame)}}function A(){return{schemaVersion:mi,frame:r.frame,reducedSensory:n,cues:[...i.values()].map(u=>fi(u,r.get(u.idempotencyKey),r.frame)).sort((u,v)=>u.name!==v.name?u.name<v.name?-1:1:u.idempotencyKey<v.idempotencyKey?-1:u.idempotencyKey>v.idempotencyKey?1:0),events:o.map(pi)}}return{play:M,step(u=1){let v=r.step(u);return T(v),V()},cancel(u){let v=i.get(u),d=r.cancel(u);return v&&(s.delete(u),t?.noteCueEnded(u),i.delete(u)),d},reset:w,snapshot(){return A()},restore(u){let v=nr(u);if(!v.ok)return v;let d=Ct({originFrame:v.snapshot.frame}),l=new Map,m=new Set,I=v.snapshot.events.map(pi);for(let K=0;K<v.snapshot.cues.length;K+=1){let P=v.snapshot.cues[K],h={name:P.name,idempotencyKey:P.idempotencyKey,assetId:P.assetId,channelId:P.channelId,participantId:P.participantId,priority:P.priority,audioPhase:P.audioPhase};if(P.repeat&&(h.repeat=P.repeat),l.set(h.idempotencyKey,h),Bf.includes(P.audioPhase)){let x=d.play({name:P.name,idempotencyKey:P.idempotencyKey,startFrame:P.startFrame,durationFrames:P.durationFrames,delayFrames:P.delayFrames,easing:P.easing,repeat:qf(P),onDuplicate:"replace"});if(!x.ok)return{ok:!1,errors:[be("invalid-snapshot",x.detail,`cues[${K}]`)]}}}let O=t?{muted:t.muted,assets:{...t.inspect().assets},started:[...i.values()].filter(K=>K.audioPhase==="started").map(K=>({idempotencyKey:K.idempotencyKey,channelId:K.channelId,participantId:K.participantId,priority:K.priority}))}:null,R={reducedSensory:n,presentation:r,records:new Map(i),pending:new Set(s),events:o.slice(),eventCursor:a},B=K=>{n=R.reducedSensory,r=R.presentation,i.clear();for(let[P,h]of R.records)i.set(P,h);s.clear();for(let P of R.pending)s.add(P);if(o.length=0,o.push(...R.events),a=R.eventCursor,t&&O){O.muted?t.mute():t.unmute();for(let[P,h]of Object.entries(O.assets))t.handleHostEvent({type:h==="ready"?Ke:$e,kind:"state",payload:{id:P}});for(let P of[...i.values()])t.noteCueEnded(P.idempotencyKey);for(let P of O.started)t.noteCueStarted(P)}return{ok:!1,errors:K}};try{for(let h of i.values())t?.noteCueEnded(h.idempotencyKey);i.clear(),s.clear(),o.length=0,n=v.snapshot.reducedSensory,r=d;for(let[h,x]of l)i.set(h,x);o.push(...I),a=o.length;let K=new Set,P=new Set;for(let h of v.snapshot.events)h.type===tr&&K.add(h.assetId),h.type===Xt&&h.reason==="asset-failed"&&P.add(h.assetId);if(t){for(let h of K)t.handleHostEvent({type:Ke,kind:"state",payload:{id:h}});for(let h of P)t.handleHostEvent({type:$e,kind:"state",payload:{id:h}})}for(let h of v.snapshot.cues)if(h.audioPhase==="started"&&t?.noteCueStarted({idempotencyKey:h.idempotencyKey,channelId:h.channelId,participantId:h.participantId,priority:h.priority}),h.audioPhase==="scheduled"){let x=r.get(h.idempotencyKey),L=t?.assetStatus(h.assetId);x?.phase==="active"&&L!=="ready"&&L!=="failed"&&m.add(h.idempotencyKey)}for(let h of m)s.add(h);return{ok:!0,snapshot:A()}}catch(K){let P=K instanceof Error?K.message:String(K);return B([be("invalid-snapshot",P)])}},get(u){let v=i.get(u);if(v)return fi(v,r.get(u),r.frame)},dispose(){G?.(),w()},get frame(){return r.frame},setReducedSensory(u){n=!!u},get reducedSensory(){return n}}}function Gf(e,t){return e.play(t)}function ms(e={}){let t=Qo({toneStart:async()=>{},reducedSensory:e.reducedSensory}),n=Zd({broker:t,originFrame:e.originFrame,reducedSensory:e.reducedSensory});return{broker:t,timeline:n,unlock(){return t.unlock()},play(r){return n.play(r)},step(r){return n.step(r)},handleHostEvent(r){t.handleHostEvent(r)},snapshot(){return{...n.snapshot(),unlock:t.status(),muted:t.muted}},restore(r){let i=nr(r);if(!i.ok)return i;let o,s=r;if(typeof r=="string")try{s=JSON.parse(r)}catch{return i}Rn(s)&&typeof s.muted=="boolean"&&(o=s.muted);let a=t.muted,c=n.restore(i.snapshot);return c.ok?(o===!0?t.mute():o===!1&&t.unmute(),{ok:!0,snapshot:{...n.snapshot(),unlock:t.status(),muted:t.muted}}):(a?t.mute():t.unmute(),c)},setReducedSensory(r){n.setReducedSensory(r)},get reducedSensory(){return n.reducedSensory},destroy(){n.dispose(),t.destroy()}}}var jf=1,tc=["loading","ready","error","unsupported"],nc=["keyboard","pointer","audio","assets","hostChannel"],rc=["image","audio","font","spritesheet"],ic=["tone","midi"],vi=["source-over","screen"],Si=["transparent","opaque"],oc=["render","calculation"],Pn=["audio","controller","network","persistence","fullscreen"],Uf=new Set(tc),sc=new Set(nc),ec=new Set(rc),ac=new Set(ic),Jf=new Set(["version","id","runtime","phases","managers","assets","acceptedEvents","emittedEvents","permissions","integrations","surface","layers","modules","kind","grants"]),Yf=new Set(["minContractVersion","features"]),zf=new Set(["kinds","declarations"]),Xf=new Set(["id","kind"]),Qf=new Set(["emit","subscribe","authoritative"]),dc=new Set(["alpha","clearPolicy"]),cc=new Set(["compositor","blend"]),uc=new Set(["refs"]),Zf=new Set(["id","version"]),hi=/^[a-z0-9][a-z0-9.-]*$/i,lc=new Set(vi),pc=new Set(Si),fc=new Set(oc),ys=new Set(Pn),em=new Set(["contractVersion","features","integrations","managers","emit","subscribe","surface","layers","modules","kinds","grants"]);function ce(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function st(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function at(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(ce("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function tm(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 nm(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 bi(e,t){for(let n of t)if(e===n||nm(n,e))return!0;return!1}function Cn(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function gs(e,t,n){if(!Array.isArray(e))return{ok:!1,errors:[ce("invalid-field",`${t} must be an array`,t)]};let r=[],i=[];return e.forEach((o,s)=>{let a=`${t}[${s}]`;if(typeof o!="string"||o.length===0){r.push(ce("invalid-field",`${t} entries must be non-empty strings`,a));return}let c=n(o,a);c?r.push(c):i.push(o)}),r.length>0?{ok:!1,errors:r}:{ok:!0,values:i}}function An(e,t){return gs(e,t,(n,r)=>tm(n)?void 0:ce("invalid-pattern",`invalid event pattern "${n}"`,r))}function pt(e,t,n,r,i){return gs(e,t,(o,s)=>n.has(o)?void 0:ce(r,`invalid ${i} "${o}"`,s))}function mc(e,t){return gs(e,t,(n,r)=>/^[a-z0-9][a-z0-9.-]*$/i.test(n)?void 0:ce("invalid-feature",`invalid feature tag "${n}"`,r))}function yc(e,t){if(!Array.isArray(e))return{ok:!1,errors:[ce("invalid-module",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;if(!st(i)){n.push(ce("invalid-module","module ref must be an object",s));return}n.push(...at(i,Zf,s)),(typeof i.id!="string"||i.id.length===0||!hi.test(i.id))&&n.push(ce("invalid-module",`invalid module id "${String(i.id)}"`,`${s}.id`)),(typeof i.version!="string"||i.version.length===0||!hi.test(i.version))&&n.push(ce("invalid-module",`invalid module version "${String(i.version)}"`,`${s}.version`)),typeof i.id=="string"&&hi.test(i.id)&&typeof i.version=="string"&&hi.test(i.version)&&r.push({id:i.id,version:i.version})}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:r}}function rm(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 im(e){if(!st(e))return[ce("invalid-manifest","capability manifest must be a JSON object")];let t=[...at(e,Jf,"")];if(e.version!==void 0&&e.version!==1&&t.push(ce("invalid-version","capability manifest version must be 1","version")),(typeof e.id!="string"||e.id.length===0)&&t.push(ce("invalid-id","id is required","id")),!st(e.runtime))t.push(ce("invalid-runtime","runtime is required","runtime"));else{t.push(...at(e.runtime,Yf,"runtime"));let a=e.runtime.minContractVersion;(typeof a!="number"||!Number.isInteger(a)||a<1)&&t.push(ce("invalid-runtime","runtime.minContractVersion must be an integer >= 1","runtime.minContractVersion"));let c=mc(e.runtime.features,"runtime.features");c.ok||t.push(...c.errors)}let n=pt(e.phases,"phases",Uf,"invalid-phase","phase");n.ok||t.push(...n.errors);let r=pt(e.managers,"managers",sc,"invalid-manager","manager");if(r.ok||t.push(...r.errors),!st(e.assets))t.push(ce("invalid-assets","assets is required","assets"));else{t.push(...at(e.assets,zf,"assets"));let a=pt(e.assets.kinds,"assets.kinds",ec,"invalid-asset-kind","asset kind");a.ok||t.push(...a.errors),Array.isArray(e.assets.declarations)?e.assets.declarations.forEach((c,f)=>{let p=`assets.declarations[${f}]`;if(!st(c)){t.push(ce("invalid-assets","asset declaration must be an object",p));return}t.push(...at(c,Xf,p)),(typeof c.id!="string"||c.id.length===0)&&t.push(ce("invalid-assets","asset declaration id is required",`${p}.id`)),(typeof c.kind!="string"||!ec.has(c.kind))&&t.push(ce("invalid-asset-kind",`invalid asset kind "${String(c.kind)}"`,`${p}.kind`))}):t.push(ce("invalid-assets","assets.declarations must be an array","assets.declarations"))}let i=An(e.acceptedEvents,"acceptedEvents");i.ok||t.push(...i.errors);let o=An(e.emittedEvents,"emittedEvents");if(o.ok||t.push(...o.errors),!st(e.permissions))t.push(ce("invalid-permissions","permissions is required","permissions"));else{t.push(...at(e.permissions,Qf,"permissions"));let a=An(e.permissions.emit,"permissions.emit");a.ok||t.push(...a.errors);let c=An(e.permissions.subscribe,"permissions.subscribe");c.ok||t.push(...c.errors),e.permissions.authoritative!==void 0&&typeof e.permissions.authoritative!="boolean"&&t.push(ce("invalid-permissions","permissions.authoritative must be a boolean","permissions.authoritative"))}let s=pt(e.integrations,"integrations",ac,"invalid-integration","integration");if(s.ok||t.push(...s.errors),e.surface!==void 0&&(st(e.surface)?(t.push(...at(e.surface,dc,"surface")),e.surface.alpha!==void 0&&typeof e.surface.alpha!="boolean"&&t.push(ce("invalid-surface","surface.alpha must be a boolean","surface.alpha")),e.surface.clearPolicy!==void 0&&(typeof e.surface.clearPolicy!="string"||!pc.has(e.surface.clearPolicy))&&t.push(ce("invalid-clear-policy",`invalid clear policy "${String(e.surface.clearPolicy)}"`,"surface.clearPolicy"))):t.push(ce("invalid-surface","surface must be an object","surface"))),e.layers!==void 0){if(!st(e.layers))t.push(ce("invalid-layers","layers must be an object","layers"));else if(t.push(...at(e.layers,cc,"layers")),e.layers.compositor!==void 0&&typeof e.layers.compositor!="boolean"&&t.push(ce("invalid-layers","layers.compositor must be a boolean","layers.compositor")),e.layers.blend!==void 0){let a=pt(e.layers.blend,"layers.blend",lc,"invalid-blend","blend mode");a.ok||t.push(...a.errors)}}if(e.modules!==void 0){if(!st(e.modules))t.push(ce("invalid-module","modules must be an object","modules"));else if(t.push(...at(e.modules,uc,"modules")),e.modules.refs!==void 0){let a=yc(e.modules.refs,"modules.refs");a.ok||t.push(...a.errors)}}if(e.kind!==void 0&&(typeof e.kind!="string"||!fc.has(e.kind))&&t.push(ce("invalid-kind",`invalid cart kind "${String(e.kind)}"`,"kind")),e.grants!==void 0){let a=pt(e.grants,"grants",ys,"invalid-grant","grant");a.ok||t.push(...a.errors)}return t}function om(e){let t=[];return e.emittedEvents.forEach((n,r)=>{bi(n,e.permissions.emit)||t.push(ce("undeclared-permission",`emitted event "${n}" is not covered by permissions.emit`,`emittedEvents[${r}]`))}),e.acceptedEvents.forEach((n,r)=>{bi(n,e.permissions.subscribe)||t.push(ce("undeclared-permission",`accepted event "${n}" is not covered by permissions.subscribe`,`acceptedEvents[${r}]`))}),t}function sm(e){let t=Cn(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:Cn(e.phases),managers:Cn(e.managers),assets:{kinds:t,declarations:n},acceptedEvents:[...e.acceptedEvents],emittedEvents:[...e.emittedEvents],permissions:r,integrations:Cn(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=Cn(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=rm(e.modules.refs);o.length>0&&(i.modules={refs:o})}return e.kind==="calculation"&&(i.kind="calculation"),e.grants&&e.grants.length>0&&(i.grants=Cn(e.grants)),i}function rr(e){let t=im(e);if(t.length>0)return{ok:!1,errors:t};let n=sm(e);return t.push(...om(n)),t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:n}}function am(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[ce("invalid-json","capability manifest JSON is not parseable")]}}return rr(t)}function dm(e){return JSON.parse(JSON.stringify(e))}function ir(e,t){let n=rr(e),r=n.ok?[]:[...n.errors];if(!st(t))return{ok:!1,errors:[ce("invalid-host","host capabilities must be a JSON object")]};r.push(...at(t,em,"host")),typeof t.contractVersion!="number"||!Number.isInteger(t.contractVersion)||t.contractVersion<1?r.push(ce("invalid-host","host.contractVersion must be an integer >= 1","host.contractVersion")):n.ok&&t.contractVersion<n.manifest.runtime.minContractVersion&&r.push(ce("unsupported-runtime",`host contract version ${t.contractVersion} is below required ${n.manifest.runtime.minContractVersion}`,"runtime.minContractVersion"));let i=mc(t.features,"host.features");if(!i.ok)r.push(...i.errors);else if(n.ok){let a=new Set(i.values);n.manifest.runtime.features.forEach((c,f)=>{a.has(c)||r.push(ce("unsupported-feature",`host does not support required feature "${c}"`,`runtime.features[${f}]`))})}let o=pt(t.integrations,"host.integrations",ac,"invalid-integration","integration");if(!o.ok)r.push(...o.errors);else if(n.ok){let a=new Set(o.values);n.manifest.integrations.forEach((c,f)=>{a.has(c)||r.push(ce("missing-integration",`host does not provide required integration "${c}"`,`integrations[${f}]`))})}if(t.managers!==void 0){let a=pt(t.managers,"host.managers",sc,"invalid-manager","manager");if(!a.ok)r.push(...a.errors);else if(n.ok){let c=new Set(a.values);n.manifest.managers.forEach((f,p)=>{c.has(f)||r.push(ce("missing-manager",`host does not provide required manager "${f}"`,`managers[${p}]`))})}}if(t.emit!==void 0){let a=An(t.emit,"host.emit");a.ok?n.ok&&n.manifest.permissions.emit.forEach((c,f)=>{bi(c,a.values)||r.push(ce("unknown-permission",`host does not allow emit permission "${c}"`,`permissions.emit[${f}]`))}):r.push(...a.errors)}if(t.subscribe!==void 0){let a=An(t.subscribe,"host.subscribe");a.ok?n.ok&&n.manifest.permissions.subscribe.forEach((c,f)=>{bi(c,a.values)||r.push(ce("unknown-permission",`host does not allow subscribe permission "${c}"`,`permissions.subscribe[${f}]`))}):r.push(...a.errors)}if(t.surface!==void 0&&(st(t.surface)?(r.push(...at(t.surface,dc,"host.surface")),t.surface.alpha!==void 0&&typeof t.surface.alpha!="boolean"&&r.push(ce("invalid-host","host.surface.alpha must be a boolean","host.surface.alpha")),t.surface.clearPolicy!==void 0&&(Array.isArray(t.surface.clearPolicy)?t.surface.clearPolicy:[t.surface.clearPolicy]).forEach((c,f)=>{(typeof c!="string"||!pc.has(c))&&r.push(ce("invalid-clear-policy",`invalid clear policy "${String(c)}"`,Array.isArray(t.surface?.clearPolicy)?`host.surface.clearPolicy[${f}]`:"host.surface.clearPolicy"))})):r.push(ce("invalid-host","host.surface must be an object","host.surface"))),t.layers!==void 0){if(!st(t.layers))r.push(ce("invalid-host","host.layers must be an object","host.layers"));else if(r.push(...at(t.layers,cc,"host.layers")),t.layers.compositor!==void 0&&typeof t.layers.compositor!="boolean"&&r.push(ce("invalid-host","host.layers.compositor must be a boolean","host.layers.compositor")),t.layers.blend!==void 0){let a=pt(t.layers.blend,"host.layers.blend",lc,"invalid-blend","blend mode");a.ok||r.push(...a.errors)}}let s;if(t.modules!==void 0)if(!st(t.modules))r.push(ce("invalid-host","host.modules must be an object","host.modules"));else if(r.push(...at(t.modules,uc,"host.modules")),t.modules.refs!==void 0){let a=yc(t.modules.refs,"host.modules.refs");a.ok?s=a.values:r.push(...a.errors)}else s=[];if(n.ok&&n.manifest.surface){let a=n.manifest.surface,c=t.surface;a.alpha===!0&&c?.alpha!==!0&&r.push(ce("unsupported-surface","host does not provide an alpha-capable surface","surface.alpha")),a.clearPolicy&&((Array.isArray(c?.clearPolicy)?c.clearPolicy:c?.clearPolicy?[c.clearPolicy]:[]).includes(a.clearPolicy)||r.push(ce("unsupported-surface",`host does not provide clear policy "${a.clearPolicy}"`,"surface.clearPolicy")))}if(n.ok&&n.manifest.layers){let a=n.manifest.layers,c=t.layers;if(a.compositor===!0&&c?.compositor!==!0&&r.push(ce("unsupported-layer","host does not provide a compositor","layers.compositor")),a.blend){let f=new Set(c?.blend??[]);a.blend.forEach((p,k)=>{f.has(p)||r.push(ce("unsupported-layer",`host does not provide blend mode "${p}"`,`layers.blend[${k}]`))})}}if(n.ok&&n.manifest.modules?.refs){let a=t.modules===void 0?[]:s??[];n.manifest.modules.refs.forEach((c,f)=>{a.some(p=>p.id===c.id&&p.version===c.version)||r.push(ce("unsupported-module",`host does not provide required module "${c.id}@${c.version}"`,`modules.refs[${f}]`))})}if(n.ok&&n.manifest.grants&&n.manifest.grants.length>0){let a=t.grants===void 0?{ok:!0,values:[]}:pt(t.grants,"host.grants",ys,"invalid-grant","grant");if(!a.ok)r.push(...a.errors);else{let c=new Set(a.values);n.manifest.grants.forEach((f,p)=>{c.has(f)||r.push(ce("ungranted-capability",`host does not grant "${f}"`,`grants[${p}]`))})}}else if(t.grants!==void 0){let a=pt(t.grants,"host.grants",ys,"invalid-grant","grant");a.ok||r.push(...a.errors)}if(t.kinds!==void 0){let a=pt(t.kinds,"host.kinds",fc,"invalid-kind","cart kind");if(!a.ok)r.push(...a.errors);else if(n.ok){let c=n.manifest.kind??"render";a.values.includes(c)||r.push(ce("unsupported-kind",`host does not support cart kind "${c}"`,"kind"))}}return r.length>0?{ok:!1,errors:r}:{ok:!0}}var ki=1,cm=1e-6,um=.5,lm=["normalized","asset","canvas","css","viewport"],pm=["center","top-left","top-right","bottom-left","bottom-right","top","bottom","left","right"],fm={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 mm(e){let t=fm[e];return{x:t.x,y:t.y}}function hs(e){let t=e.devicePixelRatio??1,{contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,mode:s}=e,a=i/n,c=o/r,f=s==="contain"?Math.min(a,c):Math.max(a,c),p=n*f,k=r*f,E=(i-p)/2,C=(o-k)/2,_=Ei(-E/p),g=Ei(-C/k),T=Ei(i/p),V=Ei(o/k);return{mode:s,contentWidth:n,contentHeight:r,viewportWidth:i,viewportHeight:o,devicePixelRatio:t,scale:f,offsetX:E,offsetY:C,canvasWidth:i*t,canvasHeight:o*t,visibleNormalizedRect:{x:_,y:g,width:Math.min(T,1-_),height:Math.min(V,1-g)}}}function ym(e,t){return{x:e.x*t.contentWidth,y:e.y*t.contentHeight}}function gm(e,t){return{x:e.x/t.contentWidth,y:e.y/t.contentHeight}}function bs(e,t){return{x:t.offsetX+e.x*t.contentWidth*t.scale,y:t.offsetY+e.y*t.contentHeight*t.scale}}function sr(e,t){return{x:(e.x-t.offsetX)/(t.contentWidth*t.scale),y:(e.y-t.offsetY)/(t.contentHeight*t.scale)}}function hc(e,t){return{x:e.x*t.devicePixelRatio,y:e.y*t.devicePixelRatio}}function bc(e,t){return{x:e.x/t.devicePixelRatio,y:e.y/t.devicePixelRatio}}function hm(e,t){return hc(bs(e,t),t)}function vc(e,t){return sr(bc(e,t),t)}function vs(e,t){let n=bs({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 Sc(e,t){let n=vs(e,t),r=t.devicePixelRatio;return{x:n.x*r,y:n.y*r,width:n.width*r,height:n.height*r}}function Ss(e,t,n,r){let o=(r?.space??"canvas")==="css"?sr(e,t):vc(e,t);for(let s of n.regions)if(ar(s,o))return s}function Es(e,t){let n=or(e);if(n)return vs(n,t)}function bm(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 ks(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),gc(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=or(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&&!km(o)&&t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} is outside 0\u20131`}),i.polygon){for(let s of i.polygon)if(!gc(s)){t.push({code:"out-of-bounds",id:i.id,detail:`region ${i.id} has a vertex outside 0\u20131`});break}}}for(let i=0;i<e.regions.length;i+=1){let o=e.regions[i],s=or(o);if(s)for(let a=i+1;a<e.regions.length;a+=1){let c=e.regions[a],f=or(c);f&&Im(s,f)&&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 vm(e,t,n,r=[]){let i=[],o=(s,a,c)=>{i.push({method:s,id:c,args:a})};for(let s of n.regions){let a=or(s);if(!a)continue;let c=Sc(a,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],s.id),e.strokeRect&&e.strokeRect(c.x,c.y,c.width,c.height),o("strokeRect",[c.x,c.y,c.width,c.height],s.id),e.font="12px sans-serif";let f=s.id;e.fillText&&e.fillText(f,c.x+4,c.y+14),o("fillText",[f,c.x+4,c.y+14],s.id)}for(let s of r){let a=s.id?`${s.id}: ${s.code}`:s.code,c=16+i.filter(f=>f.method==="fillText").length*14;e.fillText&&e.fillText(a,8,c),o("fillText",[a,8,c],s.id)}return i}function Sm(e){return JSON.stringify(e)}function Em(e){return JSON.parse(e)}function Ei(e){return e<=0?0:e>=1?1:e}function gc(e){return e.x>=0&&e.x<=1&&e.y>=0&&e.y<=1}function km(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 Im(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 or(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 ar(e,t){return e.polygon&&e.polygon.length>=3?Rm(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 Rm(e,t){let n=!1;for(let r=0,i=t.length-1;r<t.length;i=r,r+=1){let o=t[r],s=t[i];o.y>e.y!=s.y>e.y&&e.x<(s.x-o.x)*(e.y-o.y)/(s.y-o.y)+o.x&&(n=!n)}return n}var kc=320,Ic=180,Cm=1024,Am="Runtime group has been destroyed";function Pm(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 Tm(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 Rc(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 Ec(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function wm(e){let t=new Set([lt,"*.*","*.*.*","*.*.*.*","*.*.*.*.*"]);for(let n of e){let r=Rc(n);for(let i of r.emit??[])t.add(i);for(let i of r.subscribe??[])t.add(i)}return[...t]}function Is(e){if(!e.participants.length)throw new Error("createRuntimeGroup: at least one participant is required");let t=new Set;for(let u of e.participants){if(!u.id)throw new Error("createRuntimeGroup: participant id is required");if(t.has(u.id))throw new Error(`createRuntimeGroup: duplicate participant id "${u.id}"`);t.add(u.id)}let n=e.origin??0,r=e.width??kc,i=e.height??Ic,o=e.maxTrace??Cm,s=[...e.participants].sort((u,v)=>u.id.localeCompare(v.id)),a=[],c=new Map,f=0,p=e.createId??e.router?.createId??(()=>`evt-${++f}`),k=e.now??e.router?.now??(()=>{let u=a[0];if(!u)return n;try{return u.cart.getClock().now}catch{return n}}),E=rs({...e.router,createId:p,now:k,validate:e.validate??e.router?.validate}),C=[],_=!1,g=!1,T=()=>{},V=u=>v=>{u.events.push(v),u.userOnEvent?.(v)},G=()=>{if(g)throw new Error(Am)},w=()=>{T();for(let u of a){try{E.detach(u.id)}catch{}try{u.runtime.destroy()}catch{}u.ownsContainer&&u.container.remove()}a.length=0,c.clear()};try{for(let u of s){let v=u.width??r,d=u.height??i,l=!u.container,m=u.container??Tm(v,d),I=Zo({container:m,seed:u.seed??Pm(u.id),deterministic:{origin:n},audioBroker:e.audioBroker,audioParticipantId:e.audioBroker?u.id:void 0,kind:u.kind??"render"}),O={id:u.id,kind:u.kind??"render",cartDef:u.cart,initialState:u.initialState,gameManager:u.gameManager,userOnEvent:u.onEvent,runtime:I,container:m,ownsContainer:l,cart:void 0,events:[],errors:[],suspended:!1};I.onError=(R,B)=>{O.errors.push({error:R,info:B})},E.attach(u.id,I.hostChannel,Rc(u)),O.cart=I.mount(u.cart,{initialState:u.initialState,gameManager:u.gameManager,onEvent:V(O)}),a.push(O),c.set(O.id,O)}T=E.subscribe(wm(s),u=>{for(C.push(Ec(u));C.length>o;)C.shift()})}catch(u){throw w(),u}let M=u=>({id:u.id,kind:u.kind,runtime:u.runtime,container:u.container,get events(){return u.events.slice()},get errors(){return u.errors.slice()},get cart(){return u.cart}});return{router:E,origin:n,get paused(){return _},get audioBroker(){return e.audioBroker},participant(u){G();let v=c.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);return M(v)},async step(u=1){if(G(),_)return;let v=Math.max(0,Math.floor(u));for(let d=0;d<v;d++){E.turn();for(let l of a)if(!l.suspended)try{await l.cart.step(1)}catch(m){l.errors.push({error:m,info:{phase:"update",consecutive:l.errors.length+1,stopped:!1}})}}},pause(){G(),_=!0;for(let u of a)u.cart.pause()},resume(){G(),_=!1;for(let u of a)u.cart.resume()},reset(){G(),C.length=0;for(let u of a)u.events.length=0,u.errors.length=0,u.suspended=!1,u.cart=u.runtime.mount(u.cartDef,{initialState:u.initialState,gameManager:u.gameManager,onEvent:V(u)});E.turn()},resize(u,v){G();let d=Math.max(1,u|0),l=Math.max(1,v|0);for(let m of a){Object.defineProperty(m.container,"clientWidth",{value:d,configurable:!0}),Object.defineProperty(m.container,"clientHeight",{value:l,configurable:!0});let I=m.cart.canvas;I&&(I.width=d,I.height=l)}},detach(u){G();let v=c.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);try{E.detach(v.id)}catch{}try{v.runtime.destroy()}catch{}e.audioBroker&&e.audioBroker.teardown(v.id),v.ownsContainer&&v.container.remove();let d=a.indexOf(v);d>=0&&a.splice(d,1),c.delete(u)},suspendParticipant(u){G();let v=c.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);v.suspended=!0,v.cart.pause()},resumeParticipant(u){G();let v=c.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);v.suspended=!1,_||v.cart.resume()},isParticipantSuspended(u){G();let v=c.get(u);if(!v)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);return v.suspended},dispatch(u,v){G();let d=c.get(u);if(!d)throw new Error(`createRuntimeGroup: unknown participant "${u}"`);d.cart.dispatch(v)},publish(u,v){return G(),E.publish(u,v)},inspectParticipants(){G();let u=new Map(a.map(v=>[v.id,v.kind]));return E.inspectParticipants().map(v=>({...v,kind:u.get(v.id)??"render"}))},async inspect(){G();let u={},v={},d=new Map(E.inspectParticipants().map(I=>[I.id,I]));for(let I of a){let O=await I.cart.getReplayMetadata(),R=I.cart.getClock();v[I.id]=R;let B=d.get(I.id);u[I.id]={state:O.state,events:I.events.slice(),errors:I.errors.slice(),kind:I.kind,clock:R,emit:B?.emit.slice()??[],subscribe:B?.subscribe.slice()??[],authoritative:B?.authoritative===!0,suspended:I.suspended}}let l=C.map(I=>Ec(I)),m=a.filter(I=>I.suspended).map(I=>I.id).sort();return{participants:u,trace:l,diagnostics:{paused:_,participantIds:a.map(I=>I.id),suspendedIds:m,clocks:v,rejections:l.filter(I=>I.type===lt).map(I=>I.payload)}}},destroy(){if(!g){g=!0,_=!1;try{w()}finally{C.length=0}}}}}var xm=["invalid-ref","unknown-module","version-mismatch","not-allowlisted","load-failed","invoke-failed","timeout","rate-limited","destroyed"],Cc="executable module host has been destroyed";var _m=/^[a-z0-9][a-z0-9.-]*$/i,Om=/^[a-z0-9][a-z0-9-]*$/i;function Qt(e){return{id:e.id,version:e.version}}function Rs(e){return`${e.id}@${e.version}`}function dr(e){return typeof e=="string"&&e.length>0&&_m.test(e)}function Dm(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==="*"||Om.test(n))}function Tc(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 Nm(e,t){return t.some(n=>n.version===e.version&&Tc(n.id,e.id))}function cr(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Mm(e){return typeof e=="object"&&e!==null&&typeof e.then=="function"}function Ac(e){return e instanceof Error&&e.message?e.message:String(e)}function Tn(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return Object.freeze(e.map(n=>Tn(n)));if(Object.getPrototypeOf(e)!==Object.prototype)return e;let t={};for(let n of Object.keys(e))t[n]=Tn(e[n]);return Object.freeze(t)}function Pc(e){if(!cr(e))return;let t=e.id,n=e.version;if(!(!dr(t)||!dr(n)))return{id:t,version:n}}function Lm(e){if(e===void 0)return{};if(!cr(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 Cs(e){if(!cr(e))throw new Error("createExecutableModuleHost: options are required");if(!Array.isArray(e.allowlist))throw new Error("createExecutableModuleHost: allowlist must be an array");if(!Array.isArray(e.modules))throw new Error("createExecutableModuleHost: modules must be an array");let t=e.allowlist.map((A,u)=>{if(!cr(A))throw new Error(`createExecutableModuleHost: allowlist[${u}] must be an object`);if(!Dm(A.id))throw new Error(`createExecutableModuleHost: allowlist[${u}].id is not a valid id or pattern`);if(!dr(A.version)||A.version.includes("*"))throw new Error(`createExecutableModuleHost: allowlist[${u}].version must be an exact version`);return{id:A.id,version:A.version}}),n=new Map,r=new Map;for(let[A,u]of e.modules.entries()){if(!cr(u))throw new Error(`createExecutableModuleHost: modules[${A}] must be an object`);if(!dr(u.id))throw new Error(`createExecutableModuleHost: modules[${A}].id is invalid`);if(!dr(u.version))throw new Error(`createExecutableModuleHost: modules[${A}].version is invalid`);if(typeof u.create!="function")throw new Error(`createExecutableModuleHost: modules[${A}].create must be a function`);let v=`${u.id}@${u.version}`;if(n.has(v))throw new Error(`createExecutableModuleHost: duplicate module ${v}`);n.set(v,{id:u.id,version:u.version,create:u.create,capabilities:u.capabilities});let d=r.get(u.id)??[];d.push(u.version),r.set(u.id,d)}let i=Lm(e.limits),o=e.capabilities,s=new Map,a=new Set,c=[],f=0,p=0,k=!1;function E(A,u,v){let d=v?{code:A,detail:u,ref:Qt(v)}:{code:A,detail:u};return c.push(d),c.length>256&&c.shift(),d}function C(A,u,v){return{ok:!1,error:E(A,u,v)}}function _(A){if(k){let I=Pc(A);return C("destroyed",Cc,I)}let u=Pc(A);if(!u)return C("invalid-ref","module ref requires exact id and version");let v=n.get(Rs(u)),d=r.has(u.id),l=Nm(u,t),m=t.some(I=>Tc(I.id,u.id)&&I.version!==u.version);return l?v?{ok:!0,ref:u,registration:v}:d?C("version-mismatch",`no factory for ${u.id}@${u.version}`,u):C("unknown-module",`unknown module "${u.id}"`,u):m||d&&!v?C("version-mismatch",`no allowlisted factory for ${u.id}@${u.version}`,u):!v&&!d?C("unknown-module",`unknown module "${u.id}"`,u):C("not-allowlisted",`${u.id}@${u.version} is not allowlisted`,u)}function g(A,u){let v=Rs(A);if(s.has(v))return{ok:!0,ref:Qt(A)};let d=Tn({...o??{},...u.capabilities??{}});try{let l=u.create(d);return!l||typeof l.invoke!="function"?C("load-failed",`factory for ${A.id}@${A.version} did not return an invoke() module`,A):(s.set(v,{ref:Qt(A),instance:l}),{ok:!0,ref:Qt(A)})}catch(l){return C("load-failed",Ac(l),A)}}function T(A){let u=_(A);return u.ok?g(u.ref,u.registration):u}function V(A,u){let v=_(A);if(!v.ok)return Promise.resolve(v);if(i.maxInvokesPerTurn!==void 0&&p>=i.maxInvokesPerTurn)return Promise.resolve(C("rate-limited",`maxInvokesPerTurn ${i.maxInvokesPerTurn} exceeded`,v.ref));p+=1;let d=g(v.ref,v.registration);if(!d.ok)return Promise.resolve(d);let l=s.get(Rs(v.ref));if(!l)return Promise.resolve(C("load-failed","module instance was not retained",v.ref));let m=new AbortController;a.add(m);let I=Date.now(),O=i.maxInvokeMs,R;O!==void 0&&(R=setTimeout(()=>m.abort(),O));let B=P=>(R!==void 0&&clearTimeout(R),a.delete(m),k?C("destroyed",Cc,v.ref):P),K=P=>m.signal.aborted&&O!==void 0?C("timeout",`invoke exceeded ${O}ms`,v.ref):C("invoke-failed",Ac(P),v.ref);try{let P=l.instance.invoke(u,{signal:m.signal,turn:f});return Mm(P)?new Promise(h=>{let x=!1,L=H=>{x||(x=!0,h(B(H)))};if(O!==void 0){let H=R;H!==void 0&&clearTimeout(H),R=setTimeout(()=>{m.abort(),L(C("timeout",`invoke exceeded ${O}ms`,v.ref))},Math.max(0,O-(Date.now()-I)))}Promise.resolve(P).then(H=>L({ok:!0,value:H}),H=>L(K(H)))}):O!==void 0&&Date.now()-I>=O?(m.abort(),Promise.resolve(B(C("timeout",`invoke exceeded ${O}ms`,v.ref)))):Promise.resolve(B({ok:!0,value:P}))}catch(P){return Promise.resolve(B(K(P)))}}function G(){k||(f+=1,p=0)}function w(){return{allowlist:t.map(Qt),registered:[...n.values()].map(A=>({id:A.id,version:A.version})),loaded:[...s.values()].map(A=>Qt(A.ref)),turn:f,invokesThisTurn:p,diagnostics:c.map(A=>A.ref?{...A,ref:Qt(A.ref)}:{...A})}}function M(){if(!k){k=!0;for(let A of a)A.abort();a.clear();for(let A of s.values())try{A.instance.destroy?.()}catch{}s.clear(),n.clear(),r.clear(),t.length=0}}return{load:T,invoke:V,beginTurn:G,inspect:w,destroy:M}}var Ii=1,Ri="hmac-sha256",qt=1,Ts=Pn,Vm=["invalid-json","invalid-manifest","invalid-version","invalid-signature","unknown-publisher","unknown-key","undeclared-asset","hash-mismatch","unsigned-bytes","capability-denied","destroyed","load-failed"],Ci=class extends Error{constructor(n,r){super(`${r} requires grant "${n}"`);this.code="capability-denied";this.name="RemoteCartCapabilityError",this.grant=n}};function me(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function en(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ue(e){return typeof e=="string"&&e.length>0}var As=new Set(Ts),wc=new Set(["image","audio","font","spritesheet"]),Bm=new Set(["version","id","cartVersion","publisher","assets","requestedGrants","module","capabilities"]),Fm=new Set(["id","kind","url","hash","alg"]),$m=new Set(["alg","keyId","mac"]),xc=/^[a-z0-9][a-z0-9.-]*$/i,Hm=256;function Nc(e){let t="";for(let n=0;n<e.length;n++)t+=e[n].toString(16).padStart(2,"0");return t}var qm=/^[0-9a-f]+$/i;function _c(e){if(e.length%2!==0||e.length===0||!qm.test(e))return;let t=new Uint8Array(e.length/2);for(let n=0;n<t.length;n++)t[n]=Number.parseInt(e.slice(n*2,n*2+2),16);return t}function Km(e,t){let n=_c(e),r=_c(t),i=n??new Uint8Array(32),o=r??new Uint8Array(32),s=Math.max(i.length,o.length),a=n&&r&&n.length===r.length?0:1;for(let c=0;c<s;c++)a|=(i[c]??0)^(o[c]??0);return a===0}async function ur(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=await crypto.subtle.digest("SHA-256",t);return Nc(new Uint8Array(n))}async function ws(e,t){let n=await crypto.subtle.importKey("raw",new TextEncoder().encode(e),{name:"HMAC",hash:"SHA-256"},!1,["sign"]),r=await crypto.subtle.sign("HMAC",n,new TextEncoder().encode(t));return Nc(new Uint8Array(r))}function Ps(e){if(Array.isArray(e))return e.map(Ps);if(!en(e))return e;let t={};for(let n of Object.keys(e).sort())t[n]=Ps(e[n]);return t}function xs(e){return JSON.stringify(Ps(e))}function Ai(e,t,n){let r=[];for(let i of Object.keys(e))t.has(i)||r.push(me("invalid-manifest",`unknown field "${i}"`,n?`${n}.${i}`:i));return r}function Wm(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function Mc(e,t){if(!Array.isArray(e))return{ok:!1,errors:[me("invalid-manifest",`${t} must be an array`,t)]};let n=[],r=[];return e.forEach((i,o)=>{let s=`${t}[${o}]`;typeof i!="string"||!As.has(i)?n.push(me("invalid-manifest",`invalid grant "${String(i)}"`,s)):r.push(i)}),n.length>0?{ok:!1,errors:n}:{ok:!0,values:Wm(r)}}function Gm(e){if(!Array.isArray(e))return{ok:!1,errors:[me("invalid-manifest","assets must be an array","assets")]};let t=[],n=[],r=new Set;return e.forEach((i,o)=>{let s=`assets[${o}]`;if(!en(i)){t.push(me("invalid-manifest","asset must be an object",s));return}t.push(...Ai(i,Fm,s)),Ue(i.id)?r.has(i.id)?t.push(me("invalid-manifest",`duplicate asset id "${i.id}"`,`${s}.id`)):r.add(i.id):t.push(me("invalid-manifest","asset id is required",`${s}.id`)),(typeof i.kind!="string"||!wc.has(i.kind))&&t.push(me("invalid-manifest",`invalid asset kind "${String(i.kind)}"`,`${s}.kind`)),Ue(i.url)||t.push(me("invalid-manifest","asset url is required",`${s}.url`)),Ue(i.hash)||t.push(me("unsigned-bytes","asset hash is required",`${s}.hash`)),i.alg!=="sha256"&&t.push(me("invalid-manifest","asset alg must be sha256",`${s}.alg`)),Ue(i.id)&&typeof i.kind=="string"&&wc.has(i.kind)&&Ue(i.url)&&Ue(i.hash)&&i.alg==="sha256"&&n.push({id:i.id,kind:i.kind,url:i.url,hash:i.hash,alg:"sha256"})}),t.length>0?{ok:!1,errors:t}:{ok:!0,values:n}}function jm(e){return e===void 0?{ok:!0}:en(e)?!Ue(e.id)||!xc.test(e.id)?{ok:!1,errors:[me("invalid-manifest","module.id is invalid","module.id")]}:!Ue(e.version)||!xc.test(e.version)?{ok:!1,errors:[me("invalid-manifest","module.version is invalid","module.version")]}:{ok:!0,value:{id:e.id,version:e.version}}:{ok:!1,errors:[me("invalid-manifest","module must be an object","module")]}}function Lc(e){if(!en(e))return{ok:!1,errors:[me("invalid-manifest","remote cart body must be a JSON object")]};let t=Ai(e,Bm,"");e.version!==void 0&&e.version!==Ii&&t.push(me("invalid-version",`remote cart manifest version must be ${Ii}`,"version")),Ue(e.id)||t.push(me("invalid-manifest","id is required","id")),Ue(e.cartVersion)||t.push(me("invalid-manifest","cartVersion is required","cartVersion")),Ue(e.publisher)||t.push(me("unknown-publisher","publisher is required","publisher"));let n=Gm(e.assets);n.ok||t.push(...n.errors);let r=Mc(e.requestedGrants,"requestedGrants");r.ok||t.push(...r.errors);let i=jm(e.module);i.ok||t.push(...i.errors);let o;if(e.capabilities!==void 0){let a=rr(e.capabilities);if(a.ok)o=a.manifest;else for(let c of a.errors)t.push(me(c.code,c.detail,c.path?`capabilities.${c.path}`:"capabilities"))}if(t.length>0)return{ok:!1,errors:t};let s={version:Ii,id:e.id,cartVersion:e.cartVersion,publisher:e.publisher,assets:n.ok?n.values:[],requestedGrants:r.ok?r.values:[]};return i.ok&&i.value&&(s.module=i.value),o&&(s.capabilities=o),{ok:!0,body:s}}function Um(e){if(!en(e))return{ok:!1,errors:[me("invalid-signature","signature must be an object","signature")]};let t=Ai(e,$m,"signature");return e.alg!==Ri&&t.push(me("invalid-signature","signature.alg must be hmac-sha256","signature.alg")),Ue(e.keyId)||t.push(me("unknown-key","signature.keyId is required","signature.keyId")),(!Ue(e.mac)||!/^[0-9a-f]+$/i.test(e.mac))&&t.push(me("invalid-signature","signature.mac must be hex","signature.mac")),t.length>0?{ok:!1,errors:t}:{ok:!0,signature:{alg:Ri,keyId:e.keyId,mac:e.mac.toLowerCase()}}}function Pi(e){if(!en(e))return{ok:!1,errors:[me("invalid-manifest","signed remote cart must be a JSON object")]};let t=Lc(e.body),n=Um(e.signature),r=[];t.ok||r.push(...t.errors),n.ok||r.push(...n.errors);let i=Ai(e,new Set(["body","signature"]),"");return r.push(...i),r.length>0?{ok:!1,errors:r}:{ok:!0,manifest:{body:t.ok?t.body:void 0,signature:n.ok?n.signature:void 0}}}function Vc(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[me("invalid-json","remote cart JSON is not parseable")]}}return Pi(t)}async function Jm(e,t,n){let r=Lc(e);if(!r.ok)return r;if(!Ue(t)||!Ue(n))return{ok:!1,errors:[me("unknown-key","signing key id and secret are required")]};let i=await ws(t,xs(r.body));return{ok:!0,manifest:{body:r.body,signature:{alg:Ri,keyId:n,mac:i}}}}async function lr(e,t,n){let r=Pi(e);if(!r.ok)return r;let i=t[r.manifest.signature.keyId];if(!Ue(i))return{ok:!1,errors:[me("unknown-key",`unknown signature key "${r.manifest.signature.keyId}"`,"signature.keyId")]};let o=await ws(i,xs(r.manifest.body));return Km(o,r.manifest.signature.mac)?n!==void 0&&r.manifest.body.cartVersion!==n?{ok:!1,errors:[me("invalid-version",`cartVersion ${r.manifest.body.cartVersion} does not match ${n}`,"body.cartVersion")]}:{ok:!0,manifest:r.manifest}:{ok:!1,errors:[me("invalid-signature","HMAC does not match canonical body","signature.mac")]}}function Ym(e){let t=new Map;for(let[n,r]of Object.entries(e)){let i=Vc(r);i.ok&&t.set(n,i.manifest)}return{get(n){return t.get(n)}}}async function zm(e){let t;if(e.source.kind==="registry"){let n=e.registry?.get(e.source.id);if(!n)return{ok:!1,errors:[me("invalid-manifest",`unknown registry id "${e.source.id}"`)]};t=n}else{if(typeof e.fetch!="function")return{ok:!1,errors:[me("load-failed","url loads require a fetch adapter")]};try{t=await e.fetch(e.source.url)}catch(n){return{ok:!1,errors:[me("load-failed",n instanceof Error?n.message:String(n))]}}}return lr(t,e.keys,e.expectedVersion)}function _s(e){return[...e.body.requestedGrants]}function wn(e){let t=new Set;if(e)for(let o of e)As.has(o)&&t.add(o);function n(){return{schemaVersion:qt,grants:Ts.filter(o=>t.has(o))}}function r(o){let s=o;if(typeof o=="string")try{s=JSON.parse(o)}catch{return{ok:!1,errors:[me("invalid-json","grant snapshot JSON is not parseable")]}}if(!en(s))return{ok:!1,errors:[me("invalid-manifest","grant snapshot must be an object")]};if(s.schemaVersion!==qt)return{ok:!1,errors:[me("invalid-version",`grant snapshot schema must be ${qt}`,"schemaVersion")]};let a=Mc(s.grants,"grants");if(!a.ok)return a;t.clear();for(let c of a.values)t.add(c);return{ok:!0,grants:n().grants}}function i(o,s){return As.has(o)?(s?t.add(o):t.delete(o),{ok:!0,grants:n().grants}):{ok:!1,errors:[me("invalid-manifest",`invalid grant "${String(o)}"`)]}}return{grant:o=>i(o,!0),revoke:o=>i(o,!1),has:o=>t.has(o),list:()=>n().grants,inspect:n,restore:r}}function Zt(e,t){return e.push(t),e.length>Hm&&e.shift(),t}function Oc(e){return e.code==="undeclared"?me("undeclared-asset",e.message,e.ref):e.code==="hash-mismatch"?me("hash-mismatch",e.message,e.ref):e.code==="unsigned"?me("unsigned-bytes",e.message,e.ref):me("load-failed",e.message,e.ref)}function Dc(e,t,n,r){let i=(s,a)=>{if(!e.has(s))throw new Ci(s,a)},o={grants:e.list(),network:{fetch(s){if(i("network","network.fetch"),!t.has(s))return Promise.reject(Object.assign(new Error(`undeclared network url "${s}"`),{code:"undeclared-asset"}));let a=n[s];return a?Promise.resolve(a.slice()):Promise.reject(Object.assign(new Error(`no signed bytes for "${s}"`),{code:"unsigned-bytes"}))}},storage:{getItem(s){return i("persistence","storage.getItem"),r.get(s)??null},setItem(s,a){i("persistence","storage.setItem"),r.set(s,a)},removeItem(s){i("persistence","storage.removeItem"),r.delete(s)},clear(){i("persistence","storage.clear"),r.clear()}},audio:{request(){return i("audio","audio.request"),{ok:!0}}},controller:{request(){return i("controller","controller.request"),{ok:!0}}},fullscreen:{request(){return i("fullscreen","fullscreen.request"),{ok:!0}}}};return Tn(o)}function Bc(e,t){return{source:`remote-cart:${e.body.id}`,publisher:e.body.publisher,version:e.body.cartVersion,signature:{id:e.signature.keyId,alg:e.signature.alg},grants:[...t]}}function Xm(e){let t=Pi(e.manifest);if(!t.ok)throw new Error(t.errors.map(V=>V.detail).join("; "));let n=t.manifest,r=wn(e.grants),i=[],o=new Map,s=new Set(n.body.assets.map(V=>V.url)),a={};for(let V of n.body.assets)a[V.id]={url:V.url,hash:V.hash,alg:V.alg};let c=!1,f=!1,p=!1,k;function E(){return Zt(i,me("destroyed","remote cart sandbox has been destroyed"))}async function C(){if(p)return{ok:!0};let V=await lr(n,e.keys);if(!V.ok){for(let G of V.errors)Zt(i,G);return{ok:!1,errors:V.errors}}return p=!0,{ok:!0}}async function _(){if(f)return{ok:!1,errors:[E()]};let V=await C();if(!V.ok)return V;if(n.body.capabilities){let A=n.body.capabilities,u=ir(A,{contractVersion:Math.max(1,A.runtime.minContractVersion),features:[...A.runtime.features],integrations:[...A.integrations],grants:r.list()});if(!u.ok){let v=u.errors.map(d=>me(d.code,d.detail,d.path));for(let d of v)Zt(i,d);return{ok:!1,errors:v}}}let G=Zn({declared:a,fetchBytes:async A=>e.bytesByUrl[A],hashBytes:ur}),w=zt({resolver:G,emitEvents:!1,wallClockTimeout:!1}),M=n.body.assets.map(A=>({id:A.id,ref:A.id,type:A.kind,integrity:`sha256-${A.hash}`,provenance:{publisher:n.body.publisher,version:n.body.cartVersion}}));try{let A=await w.preload(M);if(A.failed>0)return{ok:!1,errors:A.failures.map(v=>Zt(i,Oc(v)))};if(c=!0,n.body.module&&e.modules){k=Cs({allowlist:[n.body.module],modules:e.modules,capabilities:Dc(r,s,e.bytesByUrl,o)});let u=k.load(n.body.module);if(!u.ok){let v=me("load-failed",u.error.detail,`${u.error.ref?.id}@${u.error.ref?.version}`);return Zt(i,v),{ok:!1,errors:[v]}}}return{ok:!0,snapshot:A}}catch(A){return gn(A)?{ok:!1,errors:[Zt(i,Oc(A))]}:{ok:!1,errors:[Zt(i,me("load-failed",A instanceof Error?A.message:String(A)))]}}finally{w.dispose()}}function g(){return f?{ok:!1,errors:[E()]}:p?Dc(r,s,e.bytesByUrl,o):{ok:!1,errors:[me("invalid-signature","verify the manifest HMAC via loadAssets before using capabilities")]}}function T(){return{id:n.body.id,cartVersion:n.body.cartVersion,publisher:n.body.publisher,signature:{id:n.signature.keyId,alg:n.signature.alg},requestedGrants:[...n.body.requestedGrants],grants:r.list(),assets:n.body.assets.map(V=>({id:V.id,url:V.url,hash:V.hash})),loaded:c,destroyed:f,diagnostics:i.map(V=>({...V}))}}return{listRequestedGrants:()=>[...n.body.requestedGrants],grants:r,loadAssets:_,capabilities:g,inspect:T,snapshotProvenance:()=>Bc(n,r.list()),destroy(){f||(f=!0,k?.destroy(),o.clear())}}}var pr=1,fr=1,$c=8,Hc=["cabinet","painting","dream","wormhole","book","nested-world"],qc=["completed","aborted"],Ms=["audio","controller","fullscreen"],Kt="portal.lifecycle.entered",mr="portal.lifecycle.exited",yr="portal.lifecycle.aborted",Qm=[Kt,mr,yr],Zm=new Set(Hc),ey=new Set(qc),ty=new Set(Ms),ny=new Set(Pn),ry="Portal lifecycle has been destroyed";function Se(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Os(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function tn(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Fc(e){return typeof e=="string"&&Zm.has(e)}function iy(e){return ty.has(e)}function Ns(e){return[...e].sort()}function Kc(e){return Ns([...e.childGrantsBefore,...e.transferred,...e.extraChildGrants])}function Ds(e){return{id:e.id,parentId:e.parentId,childId:e.childId,metaphor:e.metaphor,seed:e.seed,clock:e.clock,parentState:tn(e.parentState),parentGrants:[...e.parentGrants],childGrants:Kc(e),childGrantsBefore:[...e.childGrantsBefore],extraChildGrants:[...e.extraChildGrants],persistence:tn(e.persistence),transferred:[...e.transferred],enterCue:e.enterCue,exitCue:e.exitCue}}function oy(e){return{enter:t=>e.enter({...t,metaphor:"cabinet"}),exit:e.exit,abort:e.abort}}function sy(e){return{enter:t=>e.enter({...t,metaphor:"painting"}),exit:e.exit,abort:e.abort}}function ay(e={}){let t=e.group,n=e.audioBroker??t?.audioBroker,r=e.maxDepth??$c,i=new Map((e.declarations??[]).map(h=>[h.id,h])),o=new Map;if(e.grants)for(let[h,x]of Object.entries(e.grants))o.set(h,x);let s=0,a=e.createId??(()=>`portal-${++s}`),c=[],f=[],p=null,k=!1,E=e.rootId??null,C=()=>{if(k)throw new Error(ry)},_=h=>{let x=o.get(h);return x||(x=wn(),o.set(h,x)),x},g=()=>c.length===0?E:c[c.length-1].childId,T=(h,x)=>{if(f.push(h),!t)return;let L={type:h,kind:"state",payload:x};try{t.publish(L)}catch{}},V=h=>{if(!t)return null;try{return tn(t.participant(h).cart.getCartState())}catch{return null}},G=()=>{if(!t)return;let h=new Set;for(let L of c)h.add(L.parentId);let x=new Set(t.inspectParticipants().map(L=>L.id));for(let L of x)h.has(L)?t.isParticipantSuspended(L)||t.suspendParticipant(L):t.isParticipantSuspended(L)&&t.resumeParticipant(L)},w=(h,x,L)=>{let H=_(h),q=_(x),Z=H.list(),X=q.list(),W=[];for(let y of Ms)H.has(y)&&(H.revoke(y),q.grant(y),W.push(y));if(L)for(let y of L)q.grant(y);return M(h,x,W,L??[]),{transferred:W,parentBefore:Z,childBefore:X}},M=(h,x,L,H)=>{n&&(L.includes("audio")||H.includes("audio"))&&(n.revoke(h),n.authorize(x))},A=h=>{for(let x of h)M(x.parentId,x.childId,x.transferred,x.extraChildGrants)},u=()=>n?n.inspect().authorized.slice():[],v=h=>{if(!n)return;let x=new Set(h);for(let L of n.inspect().authorized)x.has(L)||n.revoke(L);for(let L of h)n.authorize(L)},d=()=>t?t.inspectParticipants().map(h=>h.id).filter(h=>t.isParticipantSuspended(h)).sort():[],l=h=>{if(!t)return;let x=new Set(h);for(let L of t.inspectParticipants()){let H=t.isParticipantSuspended(L.id);x.has(L.id)&&!H&&t.suspendParticipant(L.id),!x.has(L.id)&&H&&t.resumeParticipant(L.id)}},m=h=>{let x=_(h.parentId),L=_(h.childId);for(let H of h.transferred)L.revoke(H),x.grant(H);for(let H of h.extraChildGrants)h.childGrantsBefore.includes(H)||L.revoke(H);n&&(h.transferred.includes("audio")||h.extraChildGrants.includes("audio"))&&(n.revoke(h.childId),n.authorize(h.parentId))},I=()=>{let h={};for(let[x,L]of o)h[x]=L.list();return{destroyed:k,activeId:k?null:g(),stack:c.map(Ds),lastOutcome:p,cues:[...f],grants:h}},O=(h,x)=>{if(C(),c.length===0)return{ok:!1,errors:[Se("empty-stack","no portal is open")]};let L=c[c.length-1],H={schemaVersion:fr,kind:h,payload:x},q=h==="aborted"?yr:mr;return L.exitCue=q,m(L),c.pop(),p=H,G(),T(q,{parentId:L.parentId,childId:L.childId,metaphor:L.metaphor,kind:h}),{ok:!0,inspect:I(),outcome:H}},R=(h,x)=>h===null?{ok:!0,outcome:null}:Os(h)?h.schemaVersion!==fr?{ok:!1,errors:[Se("invalid-version",`outcome schema must be ${fr}`,`${x}.schemaVersion`)]}:typeof h.kind!="string"||!ey.has(h.kind)?{ok:!1,errors:[Se("invalid-snapshot","outcome.kind is required",`${x}.kind`)]}:{ok:!0,outcome:{schemaVersion:fr,kind:h.kind,payload:h.payload}}:{ok:!1,errors:[Se("invalid-snapshot","outcome must be an object or null",x)]},B=(h,x)=>{if(!Array.isArray(h))return{ok:!1,errors:[Se("invalid-snapshot","grants must be an array",x)]};let L=[];for(let H=0;H<h.length;H++){let q=h[H];if(typeof q!="string"||!ny.has(q))return{ok:!1,errors:[Se("invalid-snapshot",typeof q=="string"?`unknown grant "${q}"`:"grant must be a string",`${x}[${H}]`)]};L.push(q)}return{ok:!0,grants:L}},K=(h,x)=>{if(!Os(h))return{ok:!1,errors:[Se("invalid-snapshot","frame must be an object",x)]};if(typeof h.id!="string"||h.id.length===0)return{ok:!1,errors:[Se("invalid-snapshot","frame.id is required",`${x}.id`)]};if(typeof h.parentId!="string"||typeof h.childId!="string")return{ok:!1,errors:[Se("invalid-snapshot","parentId and childId are required",x)]};if(!Fc(h.metaphor))return{ok:!1,errors:[Se("invalid-snapshot","unknown metaphor",`${x}.metaphor`)]};let L=B(h.parentGrants,`${x}.parentGrants`);if(!L.ok)return L;let H=B(h.childGrants,`${x}.childGrants`);if(!H.ok)return H;if(!Array.isArray(h.transferred))return{ok:!1,errors:[Se("invalid-snapshot","transferred must be an array",`${x}.transferred`)]};let q=[];for(let b=0;b<h.transferred.length;b++){let S=h.transferred[b];if(typeof S!="string"||!iy(S))return{ok:!1,errors:[Se("invalid-snapshot","invalid exclusive grant",`${x}.transferred[${b}]`)]};q.push(S)}if(h.enterCue!==Kt)return{ok:!1,errors:[Se("invalid-snapshot","enterCue mismatch",`${x}.enterCue`)]};let Z=h.exitCue;if(Z!==null&&Z!==mr&&Z!==yr)return{ok:!1,errors:[Se("invalid-snapshot","invalid exitCue",`${x}.exitCue`)]};if(h.seed!==null&&typeof h.seed!="string")return{ok:!1,errors:[Se("invalid-snapshot","seed must be string or null",`${x}.seed`)]};if(h.clock!==null&&typeof h.clock!="number")return{ok:!1,errors:[Se("invalid-snapshot","clock must be number or null",`${x}.clock`)]};let X=h.extraChildGrants===void 0?{ok:!0,grants:[]}:B(h.extraChildGrants,`${x}.extraChildGrants`);if(!X.ok)return X;let W=h.childGrantsBefore===void 0?{ok:!0,grants:H.grants}:B(h.childGrantsBefore,`${x}.childGrantsBefore`);if(!W.ok)return W;let y=h.childGrantsBefore===void 0?Kc({childGrantsBefore:W.grants,transferred:q,extraChildGrants:X.grants}):H.grants;return{ok:!0,frame:{id:h.id,parentId:h.parentId,childId:h.childId,metaphor:h.metaphor,seed:h.seed,clock:h.clock,parentState:h.parentState,parentGrants:L.grants,childGrants:y,childGrantsBefore:W.grants,extraChildGrants:X.grants,persistence:h.persistence??null,transferred:q,enterCue:Kt,exitCue:Z}}},P=h=>{let x=h;if(typeof h=="string")try{x=JSON.parse(h)}catch{return{ok:!1,errors:[Se("invalid-json","portal snapshot JSON is not parseable")]}}if(!Os(x))return{ok:!1,errors:[Se("invalid-snapshot","snapshot must be an object")]};if(x.schemaVersion!==pr)return{ok:!1,errors:[Se("invalid-version",`portal snapshot schema must be ${pr}`,"schemaVersion")]};if(!Array.isArray(x.stack))return{ok:!1,errors:[Se("invalid-snapshot","stack must be an array","stack")]};let L=[];for(let X=0;X<x.stack.length;X++){let W=K(x.stack[X],`stack[${X}]`);if(!W.ok)return W;L.push(W.frame)}if(L.length>r)return{ok:!1,errors:[Se("max-depth",`stack exceeds maxDepth ${r}`,"stack")]};let H=R(x.lastOutcome,"lastOutcome");if(!H.ok)return H;if(x.activeId!==null&&typeof x.activeId!="string")return{ok:!1,errors:[Se("invalid-snapshot","activeId must be string or null","activeId")]};if(!Array.isArray(x.cues))return{ok:!1,errors:[Se("invalid-snapshot","cues must be an array","cues")]};let q=[];for(let X=0;X<x.cues.length;X++){let W=x.cues[X];if(W!==Kt&&W!==mr&&W!==yr)return{ok:!1,errors:[Se("invalid-snapshot","unknown cue",`cues[${X}]`)]};q.push(W)}let Z=L.length===0?E:L[L.length-1].childId;return x.activeId!==Z&&x.activeId!==null&&L.length>0&&x.activeId!==L[L.length-1].childId?{ok:!1,errors:[Se("invalid-snapshot","activeId must be the top child when the stack is non-empty","activeId")]}:{ok:!0,snapshot:{schemaVersion:pr,activeId:x.activeId??Z,stack:L,lastOutcome:H.outcome,cues:q}}};return{enter(h){C();let x=[];(!h.from||!h.to)&&x.push(Se("invalid-enter","from and to are required")),h.from===h.to&&x.push(Se("invalid-enter","cannot enter the same cart")),h.metaphor!==void 0&&!Fc(h.metaphor)&&x.push(Se("invalid-enter","unknown metaphor","metaphor")),c.length>=r&&x.push(Se("max-depth",`portal stack is at maxDepth ${r}`));let L=g();L&&h.from!==L&&x.push(Se("stack-order",`enter must start from the active cart "${L}"`,"from"));let H=i.get(h.from);if(H&&!H.targets.includes(h.to)&&x.push(Se("undeclared-target",`"${h.from}" does not declare target "${h.to}"`,"to")),t){try{t.participant(h.from)}catch{x.push(Se("unknown-parent",`unknown parent "${h.from}"`,"from"))}try{t.participant(h.to)}catch{x.push(Se("unknown-child",`unknown child "${h.to}"`,"to"))}}if(x.length)return{ok:!1,errors:x};let q=h.state!==void 0?tn(h.state):V(h.from),Z=h.grants??[],{transferred:X,parentBefore:W,childBefore:y}=w(h.from,h.to,Z),b={id:a(),parentId:h.from,childId:h.to,metaphor:h.metaphor??"nested-world",seed:h.seed??null,clock:h.clock??null,parentState:q,parentGrants:Ns(W),childGrantsBefore:Ns(y),transferred:X,extraChildGrants:[...Z],persistence:h.persistence??null,enterCue:Kt,exitCue:null};return c.push(b),G(),T(Kt,{parentId:b.parentId,childId:b.childId,metaphor:b.metaphor,seed:b.seed}),{ok:!0,inspect:I()}},exit(h){return O("completed",h)},abort(h){return O("aborted",h)},stack(){return C(),c.map(Ds)},activeId(){return C(),g()},inspect(){return I()},snapshot(){return C(),{schemaVersion:pr,activeId:g(),stack:c.map(Ds),lastOutcome:p,cues:[...f]}},restore(h){C();let x=P(h);if(!x.ok)return x;let L=x.snapshot;if(t){let q=[];for(let Z=0;Z<L.stack.length;Z++){let X=L.stack[Z];try{t.participant(X.parentId)}catch{q.push(Se("unknown-parent",`unknown parent "${X.parentId}"`,`stack[${Z}].parentId`))}try{t.participant(X.childId)}catch{q.push(Se("unknown-child",`unknown child "${X.childId}"`,`stack[${Z}].childId`))}}if(q.length)return{ok:!1,errors:q}}let H={stack:c.map(q=>({...q})),lastOutcome:p,cues:[...f],grants:new Map([...o].map(([q,Z])=>[q,Z.list()])),authorized:u(),suspended:d()};try{c.length=0;for(let q of L.stack)c.push({id:q.id,parentId:q.parentId,childId:q.childId,metaphor:q.metaphor,seed:q.seed,clock:q.clock,parentState:tn(q.parentState),parentGrants:[...q.parentGrants],childGrantsBefore:[...q.childGrantsBefore],transferred:[...q.transferred],extraChildGrants:[...q.extraChildGrants],persistence:tn(q.persistence),enterCue:Kt,exitCue:q.exitCue});p=L.lastOutcome,f.length=0,f.push(...L.cues);for(let q of c)_(q.parentId).restore({schemaVersion:qt,grants:q.parentGrants}),_(q.childId).restore({schemaVersion:qt,grants:q.childGrantsBefore});for(let q of c){let Z=_(q.parentId),X=_(q.childId);for(let W of q.transferred)Z.revoke(W),X.grant(W);for(let W of q.extraChildGrants)X.grant(W)}return A(c),G(),{ok:!0,snapshot:tn(L)}}catch(q){c.length=0,c.push(...H.stack),p=H.lastOutcome,f.length=0,f.push(...H.cues);for(let[Z,X]of H.grants)_(Z).restore({schemaVersion:qt,grants:X});try{v(H.authorized),l(H.suspended)}catch{}return{ok:!1,errors:[Se("restore-failed",q instanceof Error?q.message:String(q))]}}},grantsOf:_,destroy(){if(!k){for(k=!0;c.length>0;){let h=c.pop();m(h)}if(t)try{G()}catch{}f.length=0,p=null}}}}var Ti=1,xi=512,ft="[REDACTED]",Wt=["prompt","credentials","credential","authorization","apiKey","secret"],dy=new Set([Ke,$e]);function ze(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function wi(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>wi(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)?ft:wi(o,t);return r}function cy(e){return e instanceof Error&&typeof e.message=="string"?e.message:"error"}function uy(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 Wc(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 Ls(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=Wc(e[n]),i=Wc(t[n]);if(r!==i)return{ok:!1,detail:`record ${n} differs`}}return{ok:!0}}function Gc(e){let t=new Map,n=[];for(let o of e){if(o.outcome==="duplicate"){n.push(void 0);continue}let s={envelopeId:o.envelopeId,type:o.type,source:o.source,outcome:o.outcome,children:[]};o.reason&&(s.reason=o.reason),n.push(s),o.envelopeId&&!t.has(o.envelopeId)&&t.set(o.envelopeId,s)}let r=new Set;for(let o=0;o<e.length;o++){let s=e[o],a=n[o];if(!a)continue;let c=s.causationId?t.get(s.causationId):void 0;c&&c!==a&&(c.children.push(a),r.add(a))}let i=[];for(let o of n)o&&!r.has(o)&&i.push(o);return i}function jc(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 ly(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:ze(t.clock),state:wi(t.state,n),errorCount:t.errors.length};return r&&(i.lastError=cy(r.error)),i}function _i(e={}){let t=new Set([...Wt,...e.redactedKeys??[]]),n=e.maxRecords??xi,r=e.registry,i=0,o=0,s=!1,a=[],c=[],f,p=[],k=0,E=[],C={},_=()=>{},g=()=>{if(s)throw new Error("Replay inspector has been destroyed")},T=M=>{let A=r?.get(M.type),u={index:o,turn:M.turn,time:M.time,outcome:M.outcome,source:M.source,type:M.type,deliveredTo:M.deliveredTo.slice(),payload:wi(M.payload,t)};for(o+=1,M.reason&&(u.reason=M.reason),M.detail&&(u.detail=M.detail),M.target&&(u.target=M.target),M.kind&&(u.kind=M.kind),M.envelopeId&&(u.envelopeId=M.envelopeId),M.priorEnvelopeId&&(u.priorEnvelopeId=M.priorEnvelopeId),M.correlationId&&(u.correlationId=M.correlationId),M.causationId&&(u.causationId=M.causationId),M.hops!==void 0&&(u.hops=M.hops),M.seq!==void 0&&(u.seq=M.seq),M.idempotencyKey&&(u.idempotencyKey=M.idempotencyKey),M.schemaVersion!==void 0&&(u.schemaVersion=M.schemaVersion),A&&(u.payloadSchemaVersion=A.payloadSchema.version),a.push(u);a.length>n;)a.shift(),i+=1},V=M=>a.filter(A=>uy(A,M)).map(A=>ze(A)),G=M=>M?M.inspectParticipants().map(A=>jc(A,A.kind)):E.map(A=>ze(A)),w={watchRouter(M){if(g(),_(),E=M.inspectParticipants().map(u=>jc(u)),a.length===0)for(let u of M.inspectDecisions())T(u);let A=M.subscribeDecision(u=>T(u));return _=()=>{A(),_=()=>{}},c.push(_),_},bind(M){g(),f&&_(),f=M,k=M.origin,w.watchRouter(M.router),E=G(M);let A={publish(u,v){g();let d={kind:"publish",event:ze(u)};return v?.cause&&(d.extras={cause:ze(v.cause)}),p.push(d),M.publish(u,v)},dispatch(u,v){g();let d=ze(v);typeof d.type=="string"&&dy.has(d.type)?p.push({kind:"asset",participantId:u,event:d}):p.push({kind:"dispatch",participantId:u,event:d}),M.dispatch(u,v)},async step(u=1){g(),p.push({kind:"step",frames:u}),await M.step(u)},async report(){g();let u=await M.inspect(),v=[];for(let d of Object.keys(u.participants).sort())v.push(ly(d,u.participants[d],t));E=v,C={};for(let d of v)C[d.id]=ze(d.state);return w.report()},async exportTrace(u){return await A.report(),w.exportTrace(u)},unbind(){_(),f=void 0}};return A},importTrace(M){g();let A=typeof M=="string"?JSON.parse(M):M;if(A.schemaVersion!==Ti)throw new Error("Replay inspector: unsupported export schemaVersion");i=0,o=0,a.length=0,p=ze(A.tape??[]),k=A.origin??0,E=ze(A.participants??[]),C=ze(A.snapshots??{});for(let u of A.records??[])T({outcome:u.outcome,reason:u.reason,detail:u.detail,source:u.source,type:u.type,kind:u.kind,envelopeId:u.envelopeId,priorEnvelopeId:u.priorEnvelopeId,target:u.target,deliveredTo:u.deliveredTo,hops:u.hops,seq:u.seq,correlationId:u.correlationId,causationId:u.causationId,idempotencyKey:u.idempotencyKey,schemaVersion:u.schemaVersion,payload:u.payload,turn:u.turn,time:u.time})},exportTrace(M){return g(),{schemaVersion:Ti,origin:k,redactedKeys:[...t],participants:ze(E),tape:ze(p),records:V(M),snapshots:ze(C)}},report(M){g();let A=V(M);return{schemaVersion:Ti,participants:ze(E),records:A,trees:Gc(A),dropped:i}},causationTree(M){g();let A=V(M?{correlationId:M}:void 0);return Gc(A)},records(){return g(),a.map(M=>ze(M))},reset(){g(),a.length=0,p=[],i=0,o=0,C={},f&&(E=G(f))},destroy(){if(!s){for(s=!0,_();c.length>0;)c.pop()?.();a.length=0,p=[],E=[],C={},f=void 0}}};return w}async function Vs(e,t,n={}){let r=_i({redactedKeys:n.redactedKeys??e.redactedKeys,maxRecords:n.maxRecords,registry:n.registry}),i=r.bind(t);try{for(let s of e.tape)s.kind==="publish"?i.publish(s.event,s.extras):s.kind==="dispatch"||s.kind==="asset"?i.dispatch(s.participantId,s.event):await i.step(s.frames);let o=await i.report();return{inspector:r,report:o}}catch(o){throw r.destroy(),o}}var gr=1,Yc=1,zc=["queued","claimed","awaiting-evaluation","retry-scheduled","ready","applied","failed","canceled","superseded"],Xc=["retryable","permanent","unknown"],Qc=["accept","reject","revise"],Oi="job.intent.submitted",hr="job.state.queued",Di="job.state.claimed",Ni="job.state.progress",Mi="job.state.awaiting-evaluation",Li="job.state.retry-scheduled",Vi="job.state.ready",Bi="job.state.applied",Fi="job.state.failed",$i="job.state.canceled",Hi="job.state.superseded",Fs="job.diagnostic.lifecycle",py=[Oi,hr,Di,Ni,Mi,Li,Vi,Bi,Fi,$i,Hi,Fs],Zc=Wt,fy=new Set(zc),my=new Set(Xc),yy=new Set(Qc),gy="Job coordinator has been destroyed",hy=512,by=8;function pe(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function nn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function we(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Bs(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Bs(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)?ft:Bs(o,t);return r}function mt(){return{version:1,fields:{jobId:{type:"string"},state:{type:"string"},definitionId:{type:"string"},correlationId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function yt(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function vy(){return[yt(ss(Oi,mt())),yt(fe(hr,mt())),yt(fe(Di,mt())),yt(fe(Ni,mt())),yt(fe(Mi,mt())),yt(fe(Li,mt())),yt(fe(Vi,mt())),yt(fe(Bi,mt())),yt(fe(Fi,mt())),yt(fe($i,mt())),yt(fe(Hi,mt())),yt(Ye(Fs,mt()))]}function eu(){let e=new Map,t=new Map;return{save(n){let r=we(n);e.set(r.jobId,r),t.set(r.idempotencyKey,r.jobId)},get(n){let r=e.get(n);return r?we(r):void 0},getByIdempotencyKey(n){let r=t.get(n);return r?this.get(r):void 0},list(){return[...e.values()].map(n=>we(n))},replaceAll(n){e.clear(),t.clear();for(let r of n)this.save(r)}}}function Sy(){let e,t=new Set;return{bind(n){e=n},start(n){t.add(n.jobId)},cancel(n){t.delete(n)},complete(n,r){return e?(t.delete(n),e.complete(n,r)):{ok:!1,errors:[pe("unbound-worker","worker is not bound")]}},fail(n,r){return e?(t.delete(n),e.fail(n,r)):{ok:!1,errors:[pe("unbound-worker","worker is not bound")]}},started(){return[...t]}}}function $s(e){return nn(e)?e.schemaVersion===Yc&&typeof e.kind=="string"&&e.kind.length>0&&typeof e.uri=="string"&&e.uri.length>0&&(e.contentType===void 0||typeof e.contentType=="string")&&(e.bytes===void 0||typeof e.bytes=="number"&&Number.isFinite(e.bytes)):!1}function tu(e){return nn(e)?typeof e.value=="number"&&Number.isFinite(e.value)&&typeof e.stage=="string"&&e.stage.length>0&&(e.message===void 0||typeof e.message=="string"):!1}function Uc(e){return e===null||typeof e=="string"}function Jc(e){return e===null||typeof e=="number"&&Number.isFinite(e)}function Ey(e){return nn(e)?typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&typeof e.code=="string"&&e.code.length>0&&typeof e.retryability=="string"&&my.has(e.retryability)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.detail===void 0||typeof e.detail=="string"):!1}function ky(e){return nn(e)?typeof e.decision=="string"&&yy.has(e.decision)&&typeof e.at=="number"&&Number.isFinite(e.at)&&(e.correction===void 0||typeof e.correction=="string"):!1}function Iy(e){return!nn(e)||typeof e.reasonCode!="string"||e.reasonCode.length===0?!1:e.resultRef===void 0||$s(e.resultRef)}function Ry(e,t){if(!nn(e))return{ok:!1,errors:[pe("invalid-job","job must be an object",t)]};let n=[],r=(i,o,s)=>{o||n.push(pe("invalid-job-field",s,`${t}.${i}`))};return r("jobId",typeof e.jobId=="string"&&e.jobId.length>0,"jobId is required"),r("definitionId",typeof e.definitionId=="string"&&e.definitionId.length>0,"definitionId is required"),r("definitionVersion",typeof e.definitionVersion=="number"&&Number.isInteger(e.definitionVersion),"definitionVersion must be an integer"),r("idempotencyKey",typeof e.idempotencyKey=="string"&&e.idempotencyKey.length>0,"idempotencyKey is required"),r("state",typeof e.state=="string"&&fy.has(e.state),"unknown job state"),r("attempt",typeof e.attempt=="number"&&Number.isInteger(e.attempt)&&e.attempt>=0,"attempt must be an integer >= 0"),r("correlationId",typeof e.correlationId=="string"&&e.correlationId.length>0,"correlationId is required"),r("createdAt",typeof e.createdAt=="number"&&Number.isFinite(e.createdAt),"createdAt must be a number"),r("updatedAt",typeof e.updatedAt=="number"&&Number.isFinite(e.updatedAt),"updatedAt must be a number"),r("timeoutAt",typeof e.timeoutAt=="number"&&Number.isFinite(e.timeoutAt),"timeoutAt must be a number"),r("workerId",Uc(e.workerId),"workerId must be a string or null"),r("leaseUntil",Jc(e.leaseUntil),"leaseUntil must be a number or null"),r("nextRetryAt",Jc(e.nextRetryAt),"nextRetryAt must be a number or null"),r("supersededBy",Uc(e.supersededBy),"supersededBy must be a string or null"),r("fallbackApplied",typeof e.fallbackApplied=="boolean","fallbackApplied must be a boolean"),r("causationId",e.causationId===void 0||typeof e.causationId=="string","causationId must be a string when present"),e.resultRef!=null&&!$s(e.resultRef)&&n.push(pe("invalid-result-ref","resultRef is invalid",`${t}.resultRef`)),tu(e.progress)||n.push(pe("invalid-progress","progress is invalid",`${t}.progress`)),(!Array.isArray(e.failureHistory)||!e.failureHistory.every(Ey))&&n.push(pe("invalid-failure-history","failureHistory entries are invalid",`${t}.failureHistory`)),(!Array.isArray(e.evaluatorHistory)||!e.evaluatorHistory.every(ky))&&n.push(pe("invalid-evaluator-history","evaluatorHistory entries are invalid",`${t}.evaluatorHistory`)),e.fallback!==void 0&&!Iy(e.fallback)&&n.push(pe("invalid-fallback","fallback is invalid",`${t}.fallback`)),n.length?{ok:!1,errors:n}:{ok:!0,job:we(e)}}function Cy(e){if(!nn(e))return{ok:!1,errors:[pe("invalid-snapshot","snapshot must be a JSON object")]};if(e.schemaVersion!==gr)return{ok:!1,errors:[pe("schema-mismatch",`expected schemaVersion ${gr}`,"schemaVersion")]};if(!Array.isArray(e.jobs))return{ok:!1,errors:[pe("invalid-jobs","jobs must be an array","jobs")]};if(!Array.isArray(e.hostAcceptedJobIds)||e.hostAcceptedJobIds.some(r=>typeof r!="string"))return{ok:!1,errors:[pe("invalid-accepted","hostAcceptedJobIds must be string[]","hostAcceptedJobIds")]};let t=[],n=[];for(let r=0;r<e.jobs.length;r++){let i=Ry(e.jobs[r],`jobs[${r}]`);i.ok?t.push(i.job):n.push(...i.errors)}return n.length?{ok:!1,errors:n}:{ok:!0,snapshot:{schemaVersion:gr,jobs:t,hostAcceptedJobIds:[...e.hostAcceptedJobIds]}}}function Ay(e){let t=[];return e.id||t.push(pe("invalid-definition","definition id is required")),(!Number.isInteger(e.version)||e.version<1)&&t.push(pe("invalid-definition","definition version must be an integer >= 1",e.id)),(!Number.isInteger(e.retry.maxAttempts)||e.retry.maxAttempts<1)&&t.push(pe("invalid-retry","maxAttempts must be >= 1",e.id)),(!Number.isFinite(e.timeoutMs)||e.timeoutMs<=0)&&t.push(pe("invalid-timeout","timeoutMs must be > 0",e.id)),(!Number.isFinite(e.leaseMs)||e.leaseMs<=0)&&t.push(pe("invalid-lease","leaseMs must be > 0",e.id)),e.fallback?.reasonCode||t.push(pe("invalid-fallback","fallback.reasonCode is required",e.id)),t}function Py(e){switch(e){case"queued":return hr;case"claimed":return Di;case"awaiting-evaluation":return Mi;case"retry-scheduled":return Li;case"ready":return Vi;case"applied":return Bi;case"failed":return Fi;case"canceled":return $i;case"superseded":return Hi}}function Ty(e){let t=new Map;for(let d of e.definitions){let l=Ay(d);if(l.length)throw new Error(l.map(m=>m.detail).join("; "));t.set(d.id,we(d))}let n=e.persistence??eu(),r=e.now??(()=>Date.now()),i=0,o=e.createId??(()=>`job-${++i}`),s=e.maxCorrectionChars??hy,a=e.maxFailureHistory??by,c=new Set(Zc),f=!1,p=[],k=new Set,E=e.worker,C=()=>{if(f)throw new Error(gy)},_=d=>{n.save(d)},g=(d,l,m)=>{p.push(d);let I={jobId:l.jobId,state:l.state,definitionId:l.definitionId,correlationId:l.correlationId};m&&(I.reasonCode=m);let O={type:d,kind:d.includes(".intent.")?"intent":d.includes(".diagnostic.")?"diagnostic":"state",payload:I,correlationId:l.correlationId,causationId:l.causationId,idempotencyKey:`${d}:${l.jobId}:${l.updatedAt}`};e.router?.publish(O)},T=(d,l,m)=>(d.state=l,d.updatedAt=r(),_(d),g(Py(l),d,m),d),V=d=>d==="applied"||d==="failed"||d==="canceled"||d==="superseded",G=(d,l)=>{let m=d.retry.backoffMs;return m.length?m[Math.min(l-1,m.length-1)]??0:0},w=(d,l)=>l.retryability==="permanent"?"permanent":d.retry.retryableCodes.includes(l.code)||l.retryability==="retryable"?"retryable":l.retryability,M=(d,l)=>(d.fallbackApplied=!0,d.fallback=we(l.fallback),l.fallback.resultRef&&(d.resultRef=we(l.fallback.resultRef)),T(d,"failed",l.fallback.reasonCode)),A=(d,l,m)=>(d.failureHistory=[...d.failureHistory,m].slice(-a),d.workerId=null,d.leaseUntil=null,d.attempt>=l.retry.maxAttempts||m.retryability==="permanent"?M(d,l):(d.nextRetryAt=r()+G(l,d.attempt),T(d,"retry-scheduled",m.code))),u=(d,l,m)=>{d.workerId=l,d.leaseUntil=r()+m.leaseMs,d.nextRetryAt=null,d.attempt+=1;let I=T(d,"claimed");return E?.start({jobId:I.jobId,workerId:l,definitionId:I.definitionId,request:we(I.request),attempt:I.attempt}),I},v={submit(d){C();let l=[];d.idempotencyKey||l.push(pe("missing-idempotency","idempotencyKey is required")),d.correlationId||l.push(pe("missing-correlation","correlationId is required"));let m=t.get(d.definitionId);if(m||l.push(pe("unknown-definition",`unknown definition "${d.definitionId}"`)),l.length||!m)return{ok:!1,errors:l};let I=n.getByIdempotencyKey(d.idempotencyKey);if(I)return{ok:!0,job:I};let O=r(),R={jobId:o(),definitionId:m.id,definitionVersion:m.version,idempotencyKey:d.idempotencyKey,state:"queued",request:we(d.request),resultRef:null,progress:{value:0,stage:"queued"},attempt:0,failureHistory:[],evaluatorHistory:[],correlationId:d.correlationId,causationId:d.causationId,workerId:null,leaseUntil:null,createdAt:O,updatedAt:O,timeoutAt:O+m.timeoutMs,nextRetryAt:null,supersededBy:null,fallbackApplied:!1};if(_(R),g(Oi,R),g(hr,R),d.supersedeJobId){let B=n.get(d.supersedeJobId);B&&!V(B.state)&&(B.supersededBy=R.jobId,E?.cancel?.(B.jobId),T(B,"superseded","superseded"))}return{ok:!0,job:we(R)}},claim(d){if(C(),!d)return{ok:!1,errors:[pe("missing-worker","workerId is required")]};v.tick();let m=n.list().filter(O=>O.state==="queued"||O.state==="retry-scheduled"&&(O.nextRetryAt??0)<=r()).sort((O,R)=>O.createdAt-R.createdAt)[0];if(!m)return{ok:!1,errors:[pe("empty-queue","no claimable jobs")]};let I=t.get(m.definitionId);return I?{ok:!0,job:we(u(m,d,I))}:{ok:!1,errors:[pe("unknown-definition",m.definitionId)]}},reportProgress(d,l){C();let m=n.get(d);return m?m.state!=="claimed"?{ok:!1,errors:[pe("invalid-state",`cannot report progress in ${m.state}`)]}:tu(l)?l.value<m.progress.value?{ok:!1,errors:[pe("non-monotonic","progress.value must not decrease")]}:(m.progress=we(l),m.updatedAt=r(),_(m),g(Ni,m),{ok:!0,job:we(m)}):{ok:!1,errors:[pe("invalid-progress","progress value/stage required")]}:{ok:!1,errors:[pe("unknown-job",d)]}},heartbeat(d){C();let l=n.get(d);if(!l)return{ok:!1,errors:[pe("unknown-job",d)]};if(l.state!=="claimed"||!l.workerId)return{ok:!1,errors:[pe("invalid-state","heartbeat requires a claimed job")]};let m=t.get(l.definitionId);return m?(l.leaseUntil=r()+m.leaseMs,l.updatedAt=r(),_(l),{ok:!0,job:we(l)}):{ok:!1,errors:[pe("unknown-definition",l.definitionId)]}},complete(d,l){C();let m=n.get(d);if(!m)return{ok:!1,errors:[pe("unknown-job",d)]};if(m.state!=="claimed")return{ok:!1,errors:[pe("invalid-state",`cannot complete in ${m.state}`)]};if(!$s(l))return{ok:!1,errors:[pe("invalid-result-ref","result must be a reference")]};let I=t.get(m.definitionId);return I&&l.kind!==I.resultKind?{ok:!1,errors:[pe("result-kind",`expected result kind "${I.resultKind}"`)]}:(m.resultRef=we(l),m.workerId=null,m.leaseUntil=null,m.progress={value:Math.max(m.progress.value,1),stage:"awaiting-evaluation"},{ok:!0,job:we(T(m,"awaiting-evaluation"))})},fail(d,l){C();let m=n.get(d);if(!m)return{ok:!1,errors:[pe("unknown-job",d)]};if(m.state!=="claimed"&&m.state!=="queued")return{ok:!1,errors:[pe("invalid-state",`cannot fail in ${m.state}`)]};let I=t.get(m.definitionId);if(!I)return{ok:!1,errors:[pe("unknown-definition",m.definitionId)]};let O=w(I,l),R={attempt:m.attempt,code:l.code,retryability:O,at:r(),detail:l.detail};return E?.cancel?.(m.jobId),{ok:!0,job:we(A(m,I,R))}},evaluate(d,l,m){C();let I=n.get(d);if(!I)return{ok:!1,errors:[pe("unknown-job",d)]};if(I.state!=="awaiting-evaluation")return{ok:!1,errors:[pe("invalid-state","evaluate requires awaiting-evaluation")]};let O=t.get(I.definitionId);if(!O)return{ok:!1,errors:[pe("unknown-definition",I.definitionId)]};if(m!==void 0&&m.length>s)return{ok:!1,errors:[pe("correction-bound",`correction exceeds ${s} chars`)]};if(I.evaluatorHistory=[...I.evaluatorHistory,{decision:l,at:r(),correction:m?.slice(0,s)}],l==="accept")return I.progress={value:1,stage:"ready"},{ok:!0,job:we(T(I,"ready"))};let R={attempt:I.attempt,code:l==="revise"?"evaluator-revise":"evaluator-reject",retryability:"retryable",at:r(),detail:m};return{ok:!0,job:we(A(I,O,R))}},cancel(d){C();let l=n.get(d);return l?V(l.state)||l.state==="applied"?{ok:!1,errors:[pe("invalid-state",`cannot cancel ${l.state}`)]}:(E?.cancel?.(l.jobId),l.workerId=null,l.leaseUntil=null,{ok:!0,job:we(T(l,"canceled","canceled"))}):{ok:!1,errors:[pe("unknown-job",d)]}},recoverStale(){C();let d=[],l=r();for(let m of n.list()){if(m.state!=="claimed"||m.leaseUntil==null||m.leaseUntil>l)continue;let I=t.get(m.definitionId);if(!I)continue;E?.cancel?.(m.jobId);let O={attempt:m.attempt,code:"stale-lease",retryability:"retryable",at:l};d.push(we(A(m,I,O)))}return d},tick(){C();let d=[];d.push(...v.recoverStale());let l=r();for(let m of n.list())if(!(V(m.state)||m.state==="ready"||m.state==="applied")&&l>=m.timeoutAt){let I=t.get(m.definitionId);if(!I)continue;let O={attempt:m.attempt,code:"timeout",retryability:"permanent",at:l};E?.cancel?.(m.jobId),d.push(we(A(m,I,O)))}return d},accept(d){C();let l=n.get(d);return l?l.state!=="ready"?{ok:!1,errors:[pe("not-ready","host may accept only ready jobs")]}:(k.add(l.jobId),{ok:!0,job:we(T(l,"applied"))}):{ok:!1,errors:[pe("unknown-job",d)]}},get(d){return C(),n.get(d)},getByIdempotencyKey(d){return C(),n.getByIdempotencyKey(d)},inspect(){return C(),{destroyed:!1,jobs:n.list(),events:[...p]}},snapshot(){return C(),{schemaVersion:gr,jobs:n.list(),hostAcceptedJobIds:[...k]}},restore(d){C();let l=Cy(d);if(!l.ok)return l;let m=n.list(),I=[...k];try{n.replaceAll(l.snapshot.jobs),k.clear();for(let O of l.snapshot.hostAcceptedJobIds)k.add(O);return{ok:!0,snapshot:we(l.snapshot)}}catch{n.replaceAll(m),k.clear();for(let O of I)k.add(O);return{ok:!1,errors:[pe("restore-failed","restore rolled back")]}}},exportTrace(){return C(),{jobs:n.list().map(d=>Bs(d,c)),events:[...p]}},destroy(){f=!0}};return E?.bind({reportProgress:(d,l)=>v.reportProgress(d,l),complete:(d,l)=>v.complete(d,l),fail:(d,l)=>v.fail(d,l),heartbeat:d=>v.heartbeat(d)}),v}var xn=1,Ki=["room","region","landmark","frontier"],ru=["local","regional"],iu=["canonical","discoverable","hidden"],ou=["open","locked","disabled"],su=["character","party"],au=["available","busy","traveling"],Wi="world.graph.state.node-added",Gi="world.graph.state.edge-added",ji="world.graph.state.discovered",Sr="world.graph.state.transit",Er="world.graph.diagnostic.lifecycle",wy=[Wi,Gi,ji,Sr,Er],xy=new Set(Ki),_y=new Set(ru),Oy=new Set(iu),du=new Set(ou),Dy=new Set(su),cu=new Set(au),Ny="World graph has been destroyed",My=4096;function z(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Tt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function gt(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function _n(e){return typeof e=="number"&&Number.isFinite(e)}function Xe(e){return typeof e=="string"&&e.length>0}function qs(e,t,n){if(e!==void 0){if(!Tt(e)){n.push(z("invalid-metadata","metadata must be a JSON object",t));return}return gt(e)}}function Ly(e,t,n){if(e!==void 0){if(!Tt(e)){n.push(z("invalid-requirements","requirements must be a JSON object",t));return}return gt(e)}}function Vy(e,t,n){if(e===void 0)return;if(!Tt(e)){n.push(z("invalid-cost","cost must be a JSON object",t));return}let r={};for(let[i,o]of Object.entries(e)){if(!_n(o)){n.push(z("invalid-cost",`cost.${i} must be finite`,t));continue}r[i]=o}return r}function uu(e,t){if(!Tt(e))return{ok:!1,errors:[z("invalid-node","node must be an object",t)]};let n=[];Xe(e.id)||n.push(z("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(z("invalid-version","version must be an integer \u2265 1",`${t}.version`)),xy.has(e.kind)||n.push(z("invalid-kind","unknown node kind",`${t}.kind`)),_y.has(e.mapLayer)||n.push(z("invalid-map-layer","unknown mapLayer",`${t}.mapLayer`)),e.frontier!==void 0&&typeof e.frontier!="boolean"&&n.push(z("invalid-frontier","frontier must be boolean",`${t}.frontier`));let r=qs(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let i={id:e.id,version:e.version,kind:e.kind,mapLayer:e.mapLayer};return e.frontier===!0&&(i.frontier=!0),r&&(i.metadata=r),{ok:!0,node:i}}function lu(e,t){if(!Tt(e))return{ok:!1,errors:[z("invalid-edge","edge must be an object",t)]};let n=[];Xe(e.id)||n.push(z("invalid-id","id is required",`${t}.id`)),(!Number.isInteger(e.version)||e.version<1)&&n.push(z("invalid-version","version must be an integer \u2265 1",`${t}.version`)),Xe(e.from)||n.push(z("invalid-from","from is required",`${t}.from`)),Xe(e.to)||n.push(z("invalid-to","to is required",`${t}.to`)),typeof e.directed!="boolean"&&n.push(z("invalid-directed","directed must be boolean",`${t}.directed`)),Xe(e.kind)||n.push(z("invalid-kind","kind is required",`${t}.kind`)),Oy.has(e.visibility)||n.push(z("invalid-visibility","unknown visibility",`${t}.visibility`)),du.has(e.access)||n.push(z("invalid-access","unknown access",`${t}.access`));let r=Ly(e.requirements,`${t}.requirements`,n),i=Vy(e.cost,`${t}.cost`,n),o=qs(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let s={id:e.id,version:e.version,from:e.from,to:e.to,directed:e.directed,kind:e.kind,visibility:e.visibility,access:e.access};return r&&(s.requirements=r),i&&(s.cost=i),o&&(s.metadata=o),{ok:!0,edge:s}}function pu(e,t){if(!Tt(e))return{ok:!1,errors:[z("invalid-transit","transit must be an object",t)]};let n=[];return Xe(e.originNodeId)||n.push(z("invalid-origin","originNodeId is required",`${t}.originNodeId`)),Xe(e.destinationNodeId)||n.push(z("invalid-destination","destinationNodeId is required",`${t}.destinationNodeId`)),(!Array.isArray(e.routeEdgeIds)||e.routeEdgeIds.some(r=>!Xe(r)))&&n.push(z("invalid-route","routeEdgeIds must be strings",`${t}.routeEdgeIds`)),_n(e.departedAt)||n.push(z("invalid-time","departedAt must be finite semantic time",`${t}.departedAt`)),_n(e.expectedArrival)||n.push(z("invalid-time","expectedArrival must be finite semantic time",`${t}.expectedArrival`)),n.length?{ok:!1,errors:n}:{ok:!0,transit:{originNodeId:e.originNodeId,destinationNodeId:e.destinationNodeId,routeEdgeIds:[...e.routeEdgeIds],departedAt:e.departedAt,expectedArrival:e.expectedArrival}}}function fu(e,t){if(!Tt(e))return{ok:!1,errors:[z("invalid-entity","entity must be an object",t)]};let n=[];Xe(e.id)||n.push(z("invalid-id","id is required",`${t}.id`)),Dy.has(e.kind)||n.push(z("invalid-kind","unknown entity kind",`${t}.kind`)),cu.has(e.status)||n.push(z("invalid-status","unknown status",`${t}.status`)),e.locationNodeId!==null&&!Xe(e.locationNodeId)&&n.push(z("invalid-location","locationNodeId must be string or null",`${t}.locationNodeId`));let r=null;if(e.transit!==null&&e.transit!==void 0){let s=pu(e.transit,`${t}.transit`);s.ok?r=s.transit:n.push(...s.errors)}let i=qs(e.metadata,`${t}.metadata`,n);if(n.length)return{ok:!1,errors:n};let o={id:e.id,kind:e.kind,status:e.status,locationNodeId:e.locationNodeId??null,transit:r};return i&&(o.metadata=i),{ok:!0,entity:o}}function By(e,t){if(!Tt(e))return{ok:!1,errors:[z("invalid-discovery","discovery must be an object",t)]};let n=[];return Xe(e.observerId)||n.push(z("invalid-observer","observerId is required",`${t}.observerId`)),(!Array.isArray(e.nodeIds)||e.nodeIds.some(r=>!Xe(r)))&&n.push(z("invalid-node-ids","nodeIds must be strings",`${t}.nodeIds`)),(!Array.isArray(e.edgeIds)||e.edgeIds.some(r=>!Xe(r)))&&n.push(z("invalid-edge-ids","edgeIds must be strings",`${t}.edgeIds`)),n.length?{ok:!1,errors:n}:{ok:!0,discovery:{observerId:e.observerId,nodeIds:[...e.nodeIds],edgeIds:[...e.edgeIds]}}}function Fy(e,t){let n=e;if(typeof e=="string")try{n=JSON.parse(e)}catch{return{ok:!1,errors:[z("invalid-json","snapshot JSON is invalid")]}}if(!Tt(n))return{ok:!1,errors:[z("invalid-snapshot","snapshot must be a JSON object")]};let r=n.schemaVersion;if(typeof r=="number"&&r<xn){let _=n,g=r;for(;g<xn;){let T=t.find(V=>V.from===g&&V.to===g+1);if(!T)return{ok:!1,errors:[z("unsupported-schema",`no migration from schema ${g}`)]};_=T.migrate(_),g+=1}if(n=_,!Tt(n))return{ok:!1,errors:[z("invalid-snapshot","migrated snapshot must be an object")]};r=n.schemaVersion}if(r!==xn)return{ok:!1,errors:[z("unsupported-schema","unsupported world graph snapshot schema")]};if(!Xe(n.graphId))return{ok:!1,errors:[z("invalid-graph-id","graphId is required","graphId")]};if(!Array.isArray(n.nodes))return{ok:!1,errors:[z("invalid-nodes","nodes must be an array","nodes")]};if(!Array.isArray(n.edges))return{ok:!1,errors:[z("invalid-edges","edges must be an array","edges")]};if(!Array.isArray(n.entities))return{ok:!1,errors:[z("invalid-entities","entities must be an array","entities")]};if(!Array.isArray(n.discovery))return{ok:!1,errors:[z("invalid-discovery","discovery must be an array","discovery")]};let i=[],o=[],s=new Set;n.nodes.forEach((_,g)=>{let T=uu(_,`nodes[${g}]`);if(!T.ok){i.push(...T.errors);return}if(s.has(T.node.id)){i.push(z("duplicate-id","duplicate node id",`nodes[${g}].id`));return}s.add(T.node.id),o.push(T.node)});let a=[],c=new Set;n.edges.forEach((_,g)=>{let T=lu(_,`edges[${g}]`);if(!T.ok){i.push(...T.errors);return}if(c.has(T.edge.id)){i.push(z("duplicate-id","duplicate edge id",`edges[${g}].id`));return}s.has(T.edge.id)&&i.push(z("id-collision","edge id collides with a node id",`edges[${g}].id`)),c.add(T.edge.id),a.push(T.edge)});let f=[],p=new Set;n.entities.forEach((_,g)=>{let T=fu(_,`entities[${g}]`);if(!T.ok){i.push(...T.errors);return}if(p.has(T.entity.id)){i.push(z("duplicate-id","duplicate entity id",`entities[${g}].id`));return}p.add(T.entity.id),f.push(T.entity)});let k=[],E=new Set;if(n.discovery.forEach((_,g)=>{let T=By(_,`discovery[${g}]`);if(!T.ok){i.push(...T.errors);return}if(E.has(T.discovery.observerId)){i.push(z("duplicate-observer","duplicate observerId",`discovery[${g}].observerId`));return}E.add(T.discovery.observerId),k.push(T.discovery)}),i.length)return{ok:!1,errors:i};let C=qi(o,a,f,k);return C.length?{ok:!1,errors:C}:{ok:!0,snapshot:{schemaVersion:xn,graphId:n.graphId,nodes:o,edges:a,entities:f,discovery:k}}}function qi(e,t,n,r){let i=new Set(e.map(a=>a.id)),o=new Set(t.map(a=>a.id)),s=[];for(let a of t)i.has(a.from)||s.push(z("missing-node",`edge ${a.id} from unknown node`,`edges.${a.id}.from`)),i.has(a.to)||s.push(z("missing-node",`edge ${a.id} to unknown node`,`edges.${a.id}.to`));for(let a of n)if(a.locationNodeId&&!i.has(a.locationNodeId)&&s.push(z("missing-node",`entity ${a.id} location unknown`,`entities.${a.id}.locationNodeId`)),a.transit){i.has(a.transit.originNodeId)||s.push(z("missing-node","transit origin unknown",`entities.${a.id}.transit.originNodeId`)),i.has(a.transit.destinationNodeId)||s.push(z("missing-node","transit destination unknown",`entities.${a.id}.transit.destinationNodeId`));for(let c of a.transit.routeEdgeIds)o.has(c)||s.push(z("missing-edge",`transit route missing ${c}`,`entities.${a.id}.transit.routeEdgeIds`))}for(let a of r){for(let c of a.nodeIds)i.has(c)||s.push(z("missing-node",`discovery references unknown node ${c}`,`discovery.${a.observerId}`));for(let c of a.edgeIds)o.has(c)||s.push(z("missing-edge",`discovery references unknown edge ${c}`,`discovery.${a.observerId}`))}return s}function Hs(e){return[...e].map(t=>gt(t)).sort((t,n)=>t.id.localeCompare(n.id))}function nu(e){return[...e].map(t=>gt(t)).sort((t,n)=>t.id.localeCompare(n.id))}function $y(e){return e.directed?[{from:e.from,to:e.to}]:[{from:e.from,to:e.to},{from:e.to,to:e.from}]}function br(){return{version:1,fields:{graphId:{type:"string",optional:!0},nodeId:{type:"string",optional:!0},edgeId:{type:"string",optional:!0},observerId:{type:"string",optional:!0},entityId:{type:"string",optional:!0}}}}function vr(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Hy(){return[vr(fe(Wi,br())),vr(fe(Gi,br())),vr(fe(ji,br())),vr(fe(Sr,br())),vr(Ye(Er,br()))]}function qy(e={}){let t=e.migrations??[],n=e.maxPathVisits??My,r=e.source??"world-graph",i=e.graphId??"world",o=!1,s=new Map,a=new Map,c=new Map,f=new Map,p=[],k=[];function E(){if(o)throw new Error(Ny)}function C(d,l){let m={type:d,payload:l,source:r,kind:d===Er?"diagnostic":void 0};p.push(m),k.push(d),e.router?.publish(m)}function _(d){return C(Er,{graphId:i}),{ok:!1,errors:d}}function g(){let d=new Map,l=m=>(d.has(m)||d.set(m,[]),d.get(m));for(let m of s.values())l(m.id);for(let m of a.values())for(let I of $y(m))l(I.from).push({edge:m,to:I.to});for(let m of d.values())m.sort((I,O)=>I.edge.id.localeCompare(O.edge.id)||I.to.localeCompare(O.to));return d}function T(d,l){let m=uu(d,`nodes.${d.id??"?"}`);return m.ok?s.get(m.node.id)?(l.push(z("duplicate-id",`node ${m.node.id} already exists`,`nodes.${m.node.id}`)),!1):a.has(m.node.id)?(l.push(z("id-collision","node id collides with an edge id",`nodes.${m.node.id}`)),!1):(s.set(m.node.id,m.node),C(Wi,{graphId:i,nodeId:m.node.id}),!0):(l.push(...m.errors),!1)}function V(d,l){let m=lu(d,`edges.${d.id??"?"}`);return m.ok?a.has(m.edge.id)?(l.push(z("duplicate-id",`edge ${m.edge.id} already exists`,`edges.${m.edge.id}`)),!1):s.has(m.edge.id)?(l.push(z("id-collision","edge id collides with a node id",`edges.${m.edge.id}`)),!1):!s.has(m.edge.from)||!s.has(m.edge.to)?(l.push(z("missing-node",`edge ${m.edge.id} references unknown node`,`edges.${m.edge.id}`)),!1):(a.set(m.edge.id,m.edge),C(Gi,{graphId:i,edgeId:m.edge.id}),!0):(l.push(...m.errors),!1)}function G(d){let l=f.get(d);return l||(l={nodeIds:new Set,edgeIds:new Set},f.set(d,l)),l}function w(d,l){return l.visibility==="canonical"?!0:f.get(d)?.edgeIds.has(l.id)===!0}function M(d,l){if(f.get(d)?.nodeIds.has(l.id))return!0;if(l.kind==="frontier"||l.frontier){for(let m of a.values())if(w(d,m)&&(m.from===l.id||m.to===l.id)){let I=m.from===l.id?m.to:m.from;if(f.get(d)?.nodeIds.has(I))return!0}}return!1}function A(d,l,m,I){let O=new Map;for(let P of s.values())m(P,null)&&O.set(P.id,gt(P));let R=[];for(let P of a.values())!O.has(P.from)||!O.has(P.to)||m(O.get(P.from),P)&&R.push(gt(P));let B=Hs([...O.values()].filter(P=>P.kind==="frontier"||P.frontier===!0)),K=[...c.values()].filter(P=>!!(P.locationNodeId&&O.has(P.locationNodeId)||P.transit&&(O.has(P.transit.originNodeId)||O.has(P.transit.destinationNodeId)))).map(P=>gt(P)).sort((P,h)=>P.id.localeCompare(h.id));return{kind:d,observerId:l,focusNodeId:I,nodes:Hs(O.values()),edges:nu(R),frontiers:B,entities:K}}function u(d,l,m){let I=new Set;if(!s.has(d))return I;let O=g(),R=[{id:d,dist:0}],B=new Set([d]);for(I.add(d);R.length;){let K=R.shift();if(!(K.dist>=l))for(let P of O.get(K.id)??[]){if(!w(m,P.edge)&&P.edge.visibility!=="canonical"||B.has(P.to))continue;let h=s.get(P.to);h&&(h.mapLayer!=="local"&&h.kind!=="frontier"&&!h.frontier||(B.add(P.to),I.add(P.to),R.push({id:P.to,dist:K.dist+1})))}}return I}function v(d,l,m,I,O){let R=I?.maxVisits??n,B=g(),K=new Map([[d,0]]),P=new Map,h=new Set,x=0;for(;x<R;){let L=null,H=1/0;for(let[q,Z]of K)h.has(q)||(Z<H||Z===H&&(L===null||q.localeCompare(L)<0))&&(L=q,H=Z);if(L===null||O!==null&&L===O)break;h.add(L),x+=1;for(let q of B.get(L)??[]){if(!l.canTraverse(q.edge,L,q.to,m))continue;let Z=l.cost(q.edge,L,q.to,m);if(!Number.isFinite(Z)||Z<0)continue;let X=H+Z,W=K.get(q.to);(W===void 0||X<W||X===W&&q.edge.id.localeCompare(P.get(q.to)?.edge.id??q.edge.id)<0)&&(K.set(q.to,X),P.set(q.to,{node:L,edge:q.edge,cost:Z}))}}return{dist:K,prev:P}}return{addNode(d){E();let l=[];return T(d,l),l.length?_(l):{ok:!0}},addEdge(d){E();let l=[];return V(d,l),l.length?_(l):{ok:!0}},applyPatch(d){E();let l=new Map(s),m=new Map(a),I=p.length,O=k.length,R=[];for(let B of d.nodes??[])T(B,R);for(let B of d.edges??[])V(B,R);if(R.length){s.clear(),a.clear();for(let[B,K]of l)s.set(B,K);for(let[B,K]of m)a.set(B,K);return p.length=I,k.length=O,_(R)}return{ok:!0}},removeNode(d){if(E(),!s.has(d))return _([z("unknown-node",d)]);let l=qi([...s.values()].filter(I=>I.id!==d),[...a.values()].filter(I=>I.from!==d&&I.to!==d),[...c.values()],[...f.entries()].map(([I,O])=>({observerId:I,nodeIds:[...O.nodeIds].filter(R=>R!==d),edgeIds:[...O.edgeIds]}))).filter(I=>I.code!=="missing-node"||!I.detail.includes(d));if(l.length)return _(l);let m=[...a.values()].filter(I=>I.from===d||I.to===d);if(m.length)return _([z("node-in-use",`remove incident edges first (${m[0].id})`)]);for(let I of c.values())if(I.locationNodeId===d||I.transit?.originNodeId===d||I.transit?.destinationNodeId===d)return _([z("node-in-use",`entity ${I.id} still references node`)]);s.delete(d);for(let I of f.values())I.nodeIds.delete(d);return{ok:!0}},removeEdge(d){if(E(),!a.has(d))return _([z("unknown-edge",d)]);for(let l of c.values())if(l.transit?.routeEdgeIds.includes(d))return _([z("edge-in-use",`entity ${l.id} still references edge`)]);a.delete(d);for(let l of f.values())l.edgeIds.delete(d);return{ok:!0}},setEdgeAccess(d,l){E();let m=a.get(d);return m?du.has(l)?(a.set(d,{...m,access:l}),{ok:!0}):_([z("invalid-access",l)]):_([z("unknown-edge",d)])},discover(d,l){if(E(),!Xe(d))return _([z("invalid-observer","observerId is required")]);let m=[];for(let O of l.nodeIds??[])s.has(O)||m.push(z("unknown-node",O));for(let O of l.edgeIds??[])a.has(O)||m.push(z("unknown-edge",O));if(m.length)return _(m);let I=G(d);for(let O of l.nodeIds??[])I.nodeIds.add(O);for(let O of l.edgeIds??[])I.edgeIds.add(O);return C(ji,{graphId:i,observerId:d}),{ok:!0}},upsertEntity(d){E();let l=fu(d,`entities.${d.id??"?"}`);if(!l.ok)return _(l.errors);let m=qi([...s.values()],[...a.values()],[l.entity],[]);return m.length?_(m):(c.set(l.entity.id,l.entity),{ok:!0})},startTransit(d,l,m="traveling"){E();let I=c.get(d);if(!I)return _([z("unknown-entity",d)]);let O=pu(l,"transit");if(!O.ok)return _(O.errors);let R={...I,status:m,locationNodeId:null,transit:O.transit},B=qi([...s.values()],[...a.values()],[R],[]);return B.length?_(B):(c.set(d,R),C(Sr,{graphId:i,entityId:d}),{ok:!0})},completeTransit(d,l){E();let m=c.get(d);return m?m.transit?_n(l)?(c.set(d,{...m,status:"available",locationNodeId:m.transit.destinationNodeId,transit:null}),C(Sr,{graphId:i,entityId:d,semanticTime:l}),{ok:!0}):_([z("invalid-time","semanticTime must be finite")]):_([z("not-traveling",d)]):_([z("unknown-entity",d)])},setEntityStatus(d,l){E();let m=c.get(d);return m?cu.has(l)?(c.set(d,{...m,status:l}),{ok:!0}):_([z("invalid-status",l)]):_([z("unknown-entity",d)])},getNode(d){E();let l=s.get(d);return l?gt(l):void 0},getEdge(d){E();let l=a.get(d);return l?gt(l):void 0},getEntity(d){E();let l=c.get(d);return l?gt(l):void 0},projectCanonical(){return E(),A("canonical",void 0,()=>!0)},projectKnown(d){return E(),A("known",d,(l,m)=>m?w(d,m):M(d,l))},projectLocal(d,l,m=8){E();let I=u(l,m,d);return A("local",d,(O,R)=>I.has(O.id)?R?w(d,R)||R.visibility==="canonical":M(d,O)||I.has(O.id):!1,l)},projectRegional(d){return E(),A("regional",d,(l,m)=>l.mapLayer!=="regional"&&l.kind!=="frontier"&&!l.frontier?!1:m?w(d,m):M(d,l))},findPath(d,l,m,I,O){if(E(),!s.has(d))return{ok:!1,errors:[z("unknown-node",d)]};if(!s.has(l))return{ok:!1,errors:[z("unknown-node",l)]};if(!_n(I.semanticTime))return{ok:!1,errors:[z("invalid-time","semanticTime must be finite")]};if(d===l)return{ok:!0,path:{from:d,to:l,nodeIds:[d],steps:[],totalCost:0}};let{dist:R,prev:B}=v(d,m,I,O,l);if(!R.has(l))return{ok:!1,errors:[z("unreachable",l)]};let K=[],P=[l],h=l;for(;h!==d;){let x=B.get(h);if(!x)return{ok:!1,errors:[z("unreachable",l)]};K.push({edgeId:x.edge.id,from:x.node,to:h,cost:x.cost}),h=x.node,P.push(h)}return K.reverse(),P.reverse(),{ok:!0,path:{from:d,to:l,nodeIds:P,steps:K,totalCost:R.get(l)}}},reachable(d,l,m,I){if(E(),!s.has(d)||!_n(m.semanticTime))return{nodeIds:[]};let{dist:O}=v(d,l,m,I,null);return{nodeIds:[...O.keys()].sort((R,B)=>R.localeCompare(B))}},inspect(){return E(),{destroyed:!1,graphId:i,nodeCount:s.size,edgeCount:a.size,entityCount:c.size,observerCount:f.size,events:[...k]}},snapshot(){return E(),{schemaVersion:xn,graphId:i,nodes:Hs(s.values()),edges:nu(a.values()),entities:[...c.values()].map(d=>gt(d)).sort((d,l)=>d.id.localeCompare(l.id)),discovery:[...f.entries()].map(([d,l])=>({observerId:d,nodeIds:[...l.nodeIds].sort((m,I)=>m.localeCompare(I)),edgeIds:[...l.edgeIds].sort((m,I)=>m.localeCompare(I))})).sort((d,l)=>d.observerId.localeCompare(l.observerId))}},restore(d){E();let l=Fy(d,t);if(!l.ok)return l;let m={graphId:i,nodes:new Map(s),edges:new Map(a),entities:new Map(c),discovery:new Map([...f.entries()].map(([I,O])=>[I,{nodeIds:new Set(O.nodeIds),edgeIds:new Set(O.edgeIds)}]))};try{i=l.snapshot.graphId,s.clear(),a.clear(),c.clear(),f.clear();for(let I of l.snapshot.nodes)s.set(I.id,I);for(let I of l.snapshot.edges)a.set(I.id,I);for(let I of l.snapshot.entities)c.set(I.id,I);for(let I of l.snapshot.discovery)f.set(I.observerId,{nodeIds:new Set(I.nodeIds),edgeIds:new Set(I.edgeIds)});return{ok:!0,snapshot:gt(l.snapshot)}}catch{i=m.graphId,s.clear(),a.clear(),c.clear(),f.clear();for(let[I,O]of m.nodes)s.set(I,O);for(let[I,O]of m.edges)a.set(I,O);for(let[I,O]of m.entities)c.set(I,O);for(let[I,O]of m.discovery)f.set(I,O);return{ok:!1,errors:[z("restore-failed","restore rolled back")]}}},events(){return E(),[...p]},destroy(){o=!0,s.clear(),a.clear(),c.clear(),f.clear()}}}var kr=1,zi=1,bu=["add","replace","revise","remove","tombstone","link","unlink"],vu=["base-revision","entity-revision","entity-hash","identity-required","identity-absent","capability","schema"],Qi="world.patch.state.accepted",Zi="world.patch.state.rejected",eo="world.patch.state.superseded",Dn="world.patch.diagnostic.lifecycle",Ky=[Qi,Zi,eo,Dn],Su=["invalid-schema","unknown-field","unknown-op","missing-field","missing-ref","referential-integrity","stale-base","precondition-failed","asset-unavailable","content-unavailable","binding-unavailable","cycle","over-limit","idempotency-conflict","superseded","invalid-snapshot","invalid-version","destroyed","domain","capability-denied","schema-mismatch","identity-required","identity-absent","entity-revision","entity-hash","duplicate-id","graph-apply-failed","publish-failed"],Eu=Wt,mu=new Set(bu),Wy=new Set(vu),Gy=new Set(Su),Ws=new Set(Ki),Gs=new Set(["exit","edge","graph-edge"]),jy="World patch applier has been destroyed",Uy=new Set(["patchId","schemaVersion","baseRevision","idempotencyKey","preconditions","operations","provenance","supersedes"]),Jy=new Set(["op","kind","id","value","from","to","order","refs"]),Yy=new Set(["jobId","producer","contentRevisions"]),zy={"base-revision":new Set(["type","revision"]),"entity-revision":new Set(["type","kind","id","revision"]),"entity-hash":new Set(["type","kind","id","hash"]),"identity-required":new Set(["type","kind","id"]),"identity-absent":new Set(["type","kind","id"]),capability:new Set(["type","name"]),schema:new Set(["type","schemaVersion"])},Xy=256,Qy=32,Zy=4096,eg=262144;function Y(e,t,n,r){let i=n?{code:e,detail:t,path:n}:{code:e,detail:t};return r?.expectedRevision!==void 0&&(i.expectedRevision=r.expectedRevision),r?.actualRevision!==void 0&&(i.actualRevision=r.actualRevision),i}function qe(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function ke(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function ge(e){return typeof e=="string"&&e.length>0}function nt(e){return typeof e=="number"&&Number.isInteger(e)&&Number.isFinite(e)}function Ir(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(Y("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function js(e){if(e===null||typeof e!="object")return e;if(Array.isArray(e))return e.map(js);let t=e,n={};for(let r of Object.keys(t).sort())n[r]=js(t[r]);return n}function yu(e){let t=JSON.stringify(js(e)??null),n=2166136261;for(let r=0;r<t.length;r++)n^=t.charCodeAt(r),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function Us(e,t){if(e==null)return e;if(Array.isArray(e))return e.map(i=>Us(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)?ft:Us(o,t);return r}function tg(){return{revision:0,entities:[],links:[],accepted:[]}}function ku(e){return[...e].map(t=>ke(t)).sort((t,n)=>{let r=t.kind.localeCompare(n.kind);return r!==0?r:t.id.localeCompare(n.id)})}function Iu(e){return[...e].map(t=>ke(t)).sort((t,n)=>t.id.localeCompare(n.id))}function ng(e){return[...e].map(t=>ke(t)).sort((t,n)=>t.revision!==n.revision?t.revision-n.revision:t.patchId.localeCompare(n.patchId))}function Xi(e){return{revision:e.revision,entities:ku(e.entities),links:Iu(e.links),accepted:ng(e.accepted)}}function Ui(e,t){return e.length<=t?e:[...e.slice(0,t),Y("over-limit",`truncated ${e.length-t} additional diagnostics`)]}function Ru(e,t){let n=e.order??0,r=t.order??0;return n!==r?n-r:e.op!==t.op?e.op.localeCompare(t.op):e.kind!==t.kind?e.kind.localeCompare(t.kind):e.id.localeCompare(t.id)}function Ji(){return{version:1,fields:{patchId:{type:"string"},oldRevision:{type:"number",optional:!0},newRevision:{type:"number",optional:!0},revision:{type:"number",optional:!0},producer:{type:"string",optional:!0},jobId:{type:"string",optional:!0},contentRevisions:{type:"array",optional:!0},reasonCode:{type:"string",optional:!0},supersededBy:{type:"string",optional:!0},changedIdentities:{type:"array",optional:!0}}}}function Yi(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function rg(){return[Yi(fe(Qi,Ji())),Yi(fe(Zi,Ji())),Yi(fe(eo,Ji())),Yi(Ye(Dn,Ji()))]}function ig(e){return typeof e=="string"&&Gy.has(e)}function Cu(){let e=tg();return{current(){return ke(e)},begin(){let t=ke(e),n=null;return{applyWorldRevision(r){n=Xi(r)},commit(){n&&(e=n),n=null},rollback(){e=ke(t),n=null}}}}}function Au(e,t,n){if(e===void 0)return;if(!qe(e)){n.push(Y("invalid-schema","refs must be an object",t));return}Ir(e,new Set(["contentId","contentRevision","binding","asset","identity"]),t,n);let r={};for(let i of["contentId","contentRevision","binding","asset","identity"]){let o=e[i];if(o!==void 0){if(!ge(o)){n.push(Y("invalid-schema",`refs.${i} must be a non-empty string`,`${t}.${i}`));continue}r[i]=o}}return r}function og(e,t,n){if(!qe(e)){n.push(Y("invalid-schema","operation must be an object",t));return}Ir(e,Jy,t,n),(!ge(e.op)||!mu.has(e.op))&&n.push(Y("unknown-op",`unknown op "${String(e.op)}"`,`${t}.op`)),ge(e.kind)||n.push(Y("missing-field","kind is required",`${t}.kind`));let r=e.id;ge(r)||((e.op==="link"||e.op==="unlink")&&ge(e.from)&&ge(e.to)?r=`${e.kind??"link"}:${e.from}:${e.to}`:n.push(Y("missing-field","id is required",`${t}.id`))),e.order!==void 0&&!nt(e.order)&&n.push(Y("invalid-schema","order must be an integer",`${t}.order`)),e.from!==void 0&&!ge(e.from)&&n.push(Y("invalid-schema","from must be a non-empty string",`${t}.from`)),e.to!==void 0&&!ge(e.to)&&n.push(Y("invalid-schema","to must be a non-empty string",`${t}.to`));let i=Au(e.refs,`${t}.refs`,n);if(!ge(e.op)||!mu.has(e.op)||!ge(e.kind)||!ge(r))return;(e.op==="link"||e.op==="unlink")&&(!ge(e.from)||!ge(e.to))&&n.push(Y("missing-field","link/unlink require from and to",t));let o={op:e.op,kind:e.kind,id:r};return nt(e.order)&&(o.order=e.order),e.value!==void 0&&(o.value=ke(e.value)),ge(e.from)&&(o.from=e.from),ge(e.to)&&(o.to=e.to),i&&Object.keys(i).length&&(o.refs=i),o}function sg(e,t,n){if(!qe(e)){n.push(Y("invalid-schema","precondition must be an object",t));return}if(!ge(e.type)||!Wy.has(e.type)){n.push(Y("invalid-schema",`unknown precondition type "${String(e.type)}"`,`${t}.type`));return}let r=e.type;switch(Ir(e,zy[r],t,n),r){case"base-revision":if(!nt(e.revision)||e.revision<0){n.push(Y("invalid-schema","revision must be an integer \u2265 0",`${t}.revision`));return}return{type:r,revision:e.revision};case"entity-revision":if(!ge(e.kind)||!ge(e.id)||!nt(e.revision)||e.revision<1){n.push(Y("invalid-schema","kind, id, and revision \u2265 1 are required",t));return}return{type:r,kind:e.kind,id:e.id,revision:e.revision};case"entity-hash":if(!ge(e.kind)||!ge(e.id)||!ge(e.hash)){n.push(Y("invalid-schema","kind, id, and hash are required",t));return}return{type:r,kind:e.kind,id:e.id,hash:e.hash};case"identity-required":case"identity-absent":if(!ge(e.kind)||!ge(e.id)){n.push(Y("invalid-schema","kind and id are required",t));return}return{type:r,kind:e.kind,id:e.id};case"capability":if(!ge(e.name)){n.push(Y("invalid-schema","capability name is required",`${t}.name`));return}return{type:r,name:e.name};case"schema":if(!nt(e.schemaVersion)||e.schemaVersion<1){n.push(Y("invalid-schema","schemaVersion must be an integer \u2265 1",`${t}.schemaVersion`));return}return{type:r,schemaVersion:e.schemaVersion}}}function Pu(e,t,n){if(!qe(e)){n.push(Y("invalid-schema","provenance is required",t));return}if(Ir(e,Yy,t,n),!ge(e.producer)){n.push(Y("missing-field","producer is required",`${t}.producer`));return}let r={producer:e.producer};return e.jobId!==void 0&&(ge(e.jobId)?r.jobId=e.jobId:n.push(Y("invalid-schema","jobId must be a non-empty string",`${t}.jobId`))),e.contentRevisions!==void 0&&(!Array.isArray(e.contentRevisions)||e.contentRevisions.some(i=>!ge(i))?n.push(Y("invalid-schema","contentRevisions must be string[]",`${t}.contentRevisions`)):r.contentRevisions=[...e.contentRevisions]),r}function ag(e,t){let n=[],r="";try{r=JSON.stringify(e)??""}catch{return{errors:[Y("invalid-schema","patch is not JSON-serializable")]}}if(r.length>t.maxBytes&&n.push(Y("over-limit",`patch exceeds ${t.maxBytes} bytes`)),!qe(e))return{errors:[Y("invalid-schema","patch must be an object"),...n]};Ir(e,Uy,"",n),ge(e.patchId)||n.push(Y("missing-field","patchId is required","patchId")),e.schemaVersion!==kr&&n.push(Y("schema-mismatch",`schemaVersion must be ${kr}`,"schemaVersion")),(!nt(e.baseRevision)||e.baseRevision<0)&&n.push(Y("invalid-schema","baseRevision must be an integer \u2265 0","baseRevision")),ge(e.idempotencyKey)||n.push(Y("missing-field","idempotencyKey is required","idempotencyKey")),e.supersedes!==void 0&&!ge(e.supersedes)&&n.push(Y("invalid-schema","supersedes must be a non-empty string","supersedes"));let i=Pu(e.provenance,"provenance",n);Array.isArray(e.operations)?e.operations.length>t.maxOperations&&n.push(Y("over-limit",`operations exceed ${t.maxOperations}`,"operations")):n.push(Y("invalid-schema","operations must be an array","operations"));let o=[];if(Array.isArray(e.operations))for(let c=0;c<e.operations.length;c++){let f=og(e.operations[c],`operations[${c}]`,n);f&&o.push(f)}let s=[];if(e.preconditions!==void 0)if(!Array.isArray(e.preconditions))n.push(Y("invalid-schema","preconditions must be an array","preconditions"));else for(let c=0;c<e.preconditions.length;c++){let f=sg(e.preconditions[c],`preconditions[${c}]`,n);f&&s.push(f)}if(n.length)return{errors:n};let a={patchId:e.patchId,schemaVersion:kr,baseRevision:e.baseRevision,idempotencyKey:e.idempotencyKey,operations:o,provenance:i};return s.length&&(a.preconditions=s),ge(e.supersedes)&&(a.supersedes=e.supersedes),{patch:a,errors:n}}function dg(e){let t=new Map;for(let r of e.entities)t.set(r.id,ke(r));let n=new Map;for(let r of e.links)n.set(r.id,ke(r));return{revision:e.revision,entities:t,links:n,accepted:e.accepted.map(r=>ke(r))}}function On(e,t,n){let r=e.get(t);if(r&&!(n&&r.kind!==n))return r}function cg(e,t,n){let r=dg(e),i=[],o=[],s=[...t].sort(Ru),a=(f,p)=>{let k={kind:f.kind,id:f.id,revision:p?p.revision+1:1,hash:yu(f.value??null),value:f.value===void 0?null:ke(f.value),tombstoned:!1};f.refs&&(k.refs=ke(f.refs)),r.entities.set(f.id,k),i.push({op:f.op,kind:f.kind,id:f.id})},c=f=>{!f.from||!f.to||r.links.set(f.id,{id:f.id,kind:f.kind,from:f.from,to:f.to,...f.value!==void 0?{value:ke(f.value)}:{}})};for(let f=0;f<s.length;f++){let p=s[f],k=`operations[${f}]`,E=r.entities.get(p.id);switch(p.op){case"add":if(E&&!E.tombstoned){o.push(Y("duplicate-id",`identity "${p.id}" already exists`,k));break}a(p),p.from&&p.to&&c(p);break;case"replace":case"revise":if(!E||E.tombstoned){o.push(Y("missing-ref",`identity "${p.id}" is absent`,k));break}if(E.kind!==p.kind){o.push(Y("missing-ref",`identity "${p.id}" is kind "${E.kind}"`,k));break}a(p,E),p.from&&p.to&&c(p);break;case"remove":if(!E){o.push(Y("missing-ref",`identity "${p.id}" is absent`,k));break}r.entities.delete(p.id),r.links.delete(p.id);for(let[C,_]of[...r.links])(_.from===p.id||_.to===p.id)&&r.links.delete(C);i.push({op:p.op,kind:p.kind,id:p.id});break;case"tombstone":if(!E){o.push(Y("missing-ref",`identity "${p.id}" is absent`,k));break}E.tombstoned=!0,E.revision+=1,E.hash=yu(null),E.value=null,r.links.delete(p.id);for(let[C,_]of[...r.links])(_.from===p.id||_.to===p.id)&&r.links.delete(C);i.push({op:p.op,kind:p.kind,id:p.id});break;case"link":if(E&&E.kind!==p.kind&&!E.tombstoned){o.push(Y("duplicate-id",`identity "${p.id}" already exists`,k));break}a(p,E&&!E.tombstoned?E:void 0),c(p);break;case"unlink":if(!r.links.has(p.id)&&!E){o.push(Y("missing-ref",`link "${p.id}" is absent`,k));break}r.links.delete(p.id),E&&(E.tombstoned=!0,E.revision+=1),i.push({op:p.op,kind:p.kind,id:p.id});break}}r.entities.size>n.maxEntities&&o.push(Y("over-limit",`entities exceed ${n.maxEntities}`));for(let f of r.links.values()){let p=r.entities.get(f.from),k=r.entities.get(f.to);(!p||p.tombstoned)&&o.push(Y("referential-integrity",`link "${f.id}" from "${f.from}" is absent`,`links.${f.id}.from`)),(!k||k.tombstoned)&&o.push(Y("referential-integrity",`link "${f.id}" to "${f.to}" is absent`,`links.${f.id}.to`))}return{world:r,changed:i,errors:o}}function ug(e,t,n,r){let i=[];e.baseRevision!==t.revision&&i.push(Y("stale-base",`baseRevision ${e.baseRevision} is stale; current revision is ${t.revision}`,"baseRevision",{expectedRevision:t.revision,actualRevision:e.baseRevision}));for(let o=0;o<(e.preconditions??[]).length;o++){let s=e.preconditions[o],a=`preconditions[${o}]`;switch(s.type){case"base-revision":s.revision!==t.revision&&i.push(Y("stale-base",`expected base revision ${s.revision}, current is ${t.revision}`,a,{expectedRevision:t.revision,actualRevision:s.revision}));break;case"entity-revision":{let c=On(n,s.id,s.kind);c?c.revision!==s.revision&&i.push(Y("entity-revision",`identity "${s.id}" revision is ${c.revision}, expected ${s.revision}`,a)):i.push(Y("identity-required",`identity "${s.id}" is absent`,a));break}case"entity-hash":{let c=On(n,s.id,s.kind);c?c.hash!==s.hash&&i.push(Y("entity-hash",`identity "${s.id}" hash is ${c.hash}, expected ${s.hash}`,a)):i.push(Y("identity-required",`identity "${s.id}" is absent`,a));break}case"identity-required":(!On(n,s.id,s.kind)||On(n,s.id,s.kind)?.tombstoned)&&i.push(Y("identity-required",`identity "${s.id}" is required`,a));break;case"identity-absent":On(n,s.id,s.kind)&&!On(n,s.id,s.kind)?.tombstoned&&i.push(Y("identity-absent",`identity "${s.id}" must be absent`,a));break;case"capability":r.has(s.name)||i.push(Y("capability-denied",`capability "${s.name}" is not granted`,a));break;case"schema":s.schemaVersion!==kr&&i.push(Y("schema-mismatch",`schema requirement ${s.schemaVersion} is unsupported`,a));break}}return i}function lg(e){let t=new Map;for(let o of e){let s=t.get(o.from)??[];s.push(o.to),t.set(o.from,s),t.has(o.to)||t.set(o.to,t.get(o.to)??[])}let n=new Set,r=new Set,i=o=>{if(n.has(o))return!0;if(r.has(o))return!1;n.add(o);for(let s of t.get(o)??[])if(i(s))return!0;return n.delete(o),r.add(o),!1};for(let o of[...t.keys()].sort())if(i(o))return!0;return!1}function gu(e,t,n){return e?e.hasRevision?.(t??"",n)?!0:(e.available??[]).some(r=>r.revision===n&&(t===void 0||!r.contentId||r.contentId===t)):!1}function pg(e,t,n,r,i,o){let s=[],a=i?.listedIds?new Set(i.listedIds):void 0,c=o?.availableIds?new Set(o.availableIds):void 0,f=new Set(n.entities.filter(p=>!p.tombstoned).map(p=>p.id));for(let p of t)f.add(p.id);for(let p of e.provenance.contentRevisions??[])r&&!gu(r,void 0,p)&&s.push(Y("content-unavailable",`content revision "${p}" is not available`,"provenance.contentRevisions"));for(let p=0;p<t.length;p++){let k=t[p],E=`operations[${p}]`,C=k.refs?.contentRevision,_=k.refs?.contentId;C&&r&&!gu(r,_,C)&&s.push(Y("content-unavailable",`content revision "${C}" is not available`,`${E}.refs`));let g=k.refs?.binding??(k.kind==="presentation-binding"?k.id:void 0);g&&a&&!a.has(g)&&s.push(Y("binding-unavailable",`binding "${g}" is not listed`,`${E}`));let T=k.refs?.asset??(k.kind==="asset"?k.id:void 0);T&&c&&!c.has(T)&&s.push(Y("asset-unavailable",`asset "${T}" is not available`,`${E}`));let V=k.refs?.identity;V&&!f.has(V)&&s.push(Y("missing-ref",`ref identity "${V}" is absent`,`${E}.refs`))}return s}function hu(e){if(!Ws.has(e.kind))return;let t=qe(e.value)?e.value:{},n={id:e.id,version:nt(t.version)&&t.version>=1?t.version:1,kind:ge(t.kind)&&Ws.has(t.kind)?t.kind:e.kind,mapLayer:t.mapLayer==="regional"?"regional":"local"};return t.frontier===!0&&(n.frontier=!0),qe(t.metadata)&&(n.metadata=ke(t.metadata)),n}function Ks(e){if(!Gs.has(e.kind)||!e.from||!e.to)return;let t=qe(e.value)?e.value:{},n=t.visibility==="canonical"||t.visibility==="hidden"?t.visibility:"discoverable",r=t.access==="locked"||t.access==="disabled"?t.access:"open",i={id:e.id,version:nt(t.version)&&t.version>=1?t.version:1,from:e.from,to:e.to,directed:t.directed===!0,kind:ge(t.kind)?t.kind:"door",visibility:n,access:r};if(qe(t.requirements)&&(i.requirements=ke(t.requirements)),qe(t.cost)){let o={};for(let[s,a]of Object.entries(t.cost))typeof a=="number"&&Number.isFinite(a)&&(o[s]=a);Object.keys(o).length&&(i.cost=o)}return qe(t.metadata)&&(i.metadata=ke(t.metadata)),i}function fg(e,t){let n=e.snapshot(),r=new Map(n.nodes.map(c=>[c.id,ke(c)])),i=new Map(n.edges.map(c=>[c.id,ke(c)])),o=[...t].sort(Ru),s=c=>{r.delete(c);for(let[f,p]of[...i])(p.from===c||p.to===c)&&i.delete(f)};for(let c of o)switch(c.op){case"add":{let f=hu(c);f&&!r.has(f.id)&&r.set(f.id,f);let p=Ks(c);p&&!i.has(p.id)&&i.set(p.id,p);break}case"replace":case"revise":{let f=hu(c);f&&r.set(f.id,f);let p=Ks(c);p&&i.set(p.id,p);break}case"link":{let f=Ks(c);f&&i.set(f.id,f);break}case"remove":case"tombstone":Ws.has(c.kind)&&s(c.id),Gs.has(c.kind)&&i.delete(c.id);break;case"unlink":Gs.has(c.kind)&&i.delete(c.id);break}let a=e.restore({...n,nodes:[...r.values()],edges:[...i.values()]});return a.ok?[]:a.errors.map(c=>Y("graph-apply-failed",c.detail,c.path))}function mg(e,t){let n=[];if(!qe(e))return{errors:[Y("invalid-snapshot","world must be an object",t)]};if((!nt(e.revision)||e.revision<0)&&n.push(Y("invalid-snapshot","revision must be an integer \u2265 0",`${t}.revision`)),!Array.isArray(e.entities)||!Array.isArray(e.links)||!Array.isArray(e.accepted))return n.push(Y("invalid-snapshot","entities, links, and accepted must be arrays",t)),{errors:n};let r=[];for(let s=0;s<e.entities.length;s++){let a=e.entities[s],c=`${t}.entities[${s}]`;if(!qe(a)){n.push(Y("invalid-snapshot","entity must be an object",c));continue}if(!ge(a.kind)||!ge(a.id)||!nt(a.revision)||a.revision<1){n.push(Y("invalid-snapshot","kind, id, and revision are required",c));continue}if(!ge(a.hash)||typeof a.tombstoned!="boolean"){n.push(Y("invalid-snapshot","hash and tombstoned are required",c));continue}let f={kind:a.kind,id:a.id,revision:a.revision,hash:a.hash,value:a.value??null,tombstoned:a.tombstoned};if(a.refs!==void 0){let p=Au(a.refs,`${c}.refs`,n);p&&(f.refs=p)}r.push(f)}let i=[];for(let s=0;s<e.links.length;s++){let a=e.links[s],c=`${t}.links[${s}]`;if(!qe(a)||!ge(a.id)||!ge(a.kind)||!ge(a.from)||!ge(a.to)){n.push(Y("invalid-snapshot","link id, kind, from, and to are required",c));continue}i.push({id:a.id,kind:a.kind,from:a.from,to:a.to,...a.value!==void 0?{value:a.value}:{}})}let o=[];for(let s=0;s<e.accepted.length;s++){let a=e.accepted[s],c=`${t}.accepted[${s}]`;if(!qe(a)||!ge(a.patchId)||!ge(a.idempotencyKey)||!nt(a.revision)||a.revision<1){n.push(Y("invalid-snapshot","accepted patch identity is invalid",c));continue}let f=Pu(a.provenance,`${c}.provenance`,n);if(!f)continue;let p={patchId:a.patchId,idempotencyKey:a.idempotencyKey,revision:a.revision,provenance:f};ge(a.supersededBy)&&(p.supersededBy=a.supersededBy),o.push(p)}return n.length?{errors:n}:{errors:[],world:Xi({revision:e.revision,entities:r,links:i,accepted:o})}}function yg(e,t,n){if(!qe(e)){n.push(Y("invalid-snapshot","audit record must be an object",t));return}if(e.outcome!=="accepted"&&e.outcome!=="rejected"&&e.outcome!=="superseded"){n.push(Y("invalid-snapshot","audit outcome is invalid",`${t}.outcome`));return}if(!ge(e.patchId)||!ge(e.idempotencyKey)||!nt(e.at)){n.push(Y("invalid-snapshot","audit identity is invalid",t));return}if(!nt(e.oldRevision)||!nt(e.newRevision)||!Array.isArray(e.reasonCodes)){n.push(Y("invalid-snapshot","audit revisions are invalid",t));return}return{outcome:e.outcome,patchId:e.patchId,idempotencyKey:e.idempotencyKey,at:e.at,oldRevision:e.oldRevision,newRevision:e.newRevision,reasonCodes:e.reasonCodes.filter(r=>typeof r=="string"),changedIdentities:Array.isArray(e.changedIdentities)?e.changedIdentities:[],provenance:qe(e.provenance)?e.provenance:{producer:"unknown"},patch:e.patch??null}}function gg(e){if(!qe(e))return{ok:!1,errors:[Y("invalid-snapshot","snapshot must be an object")]};if(e.schemaVersion!==zi)return{ok:!1,errors:[Y("invalid-version","unknown snapshot schema version","schemaVersion")]};let t=mg(e.world,"world");if(!t.world)return{ok:!1,errors:t.errors};let n=[...t.errors??[]];Array.isArray(e.audit)||n.push(Y("invalid-snapshot","audit must be an array","audit"));let r=[];if(Array.isArray(e.audit))for(let o=0;o<e.audit.length;o++){let s=yg(e.audit[o],`audit[${o}]`,n);s&&r.push(s)}if(n.length)return{ok:!1,errors:n};let i={schemaVersion:zi,world:t.world,audit:r};return e.graph!==void 0&&(i.graph=ke(e.graph)),{ok:!0,snapshot:i}}function hg(e={}){let t=e.persistence??Cu(),n=e.now??(()=>Date.now()),r=e.source??"world-patch",i={maxOperations:e.limits?.maxOperations??Xy,maxDiagnostics:e.limits?.maxDiagnostics??Qy,maxEntities:e.limits?.maxEntities??Zy,maxBytes:e.limits?.maxBytes??eg},o=new Set([...Eu,...e.redact??[]]),s=new Set(e.capabilities??[]),a=e.graphPolicy??{},c=!1,f=[],p=[],k=[],E=null;function C(){if(c)throw new Error(jy)}function _(){let u=t.current();return{destroyed:c,revision:u.revision,entities:ku(u.entities),links:Iu(u.links),acceptedPatchIds:u.accepted.map(v=>v.patchId),events:[...k],lastRejection:E?ke(E):null}}function g(u,v){let d={type:u,payload:v,source:r,kind:u===Dn?"diagnostic":"state"};p.push(d),k.push(u),e.onEvent?.(d),e.router?.publish(d)}function T(u){f.push(u)}function V(u){let v=ag(u,i);if(!v.patch)return{ok:!1,errors:Ui(v.errors,i.maxDiagnostics)};let d=v.patch,l=t.current(),m=l.accepted.find(H=>H.patchId===d.patchId);if(m&&!m.supersededBy)return{ok:!0,patch:d,next:ke(l),changed:[],idempotent:!0};if(m?.supersededBy)return{ok:!1,patch:d,errors:[Y("superseded",`patch "${d.patchId}" was superseded by "${m.supersededBy}"`)]};let I=l.accepted.find(H=>H.idempotencyKey===d.idempotencyKey&&!H.supersededBy);if(I&&I.patchId!==d.patchId)return{ok:!1,patch:d,errors:[Y("idempotency-conflict",`idempotencyKey already used by patch "${I.patchId}"`,"idempotencyKey")]};if(d.supersedes&&!l.accepted.find(q=>q.patchId===d.supersedes))return{ok:!1,patch:d,errors:[Y("missing-ref",`superseded patch "${d.supersedes}" is unknown`,"supersedes")]};let O=new Map(l.entities.map(H=>[H.id,H])),R=ug(d,l,O,s),B=cg(l,d.operations,i),K=pg(d,d.operations,l,e.content,e.bindings,e.assets),P=[...R,...B.errors,...K];if(!B.world)return{ok:!1,patch:d,errors:Ui(P,i.maxDiagnostics)};let h=Xi({revision:l.revision+1,entities:B.world.entities.values(),links:B.world.links.values(),accepted:[...B.world.accepted.map(H=>d.supersedes&&H.patchId===d.supersedes?{...H,supersededBy:d.patchId}:H),{patchId:d.patchId,idempotencyKey:d.idempotencyKey,revision:l.revision+1,provenance:ke(d.provenance)}]});(a.detectCycle?.(h)??(!a.allowCycles&&lg(h.links)))&&P.push(Y("cycle","patch would introduce a link cycle"));for(let H of e.domainValidators??[])P.push(...H({patch:d,current:l,preview:h}).map(q=>q.code?q:Y("domain",q.detail,q.path)));if(P.length)return{ok:!1,patch:d,errors:Ui(P,i.maxDiagnostics)};let L=d.supersedes?l.accepted.find(H=>H.patchId===d.supersedes):void 0;return{ok:!0,patch:d,next:h,changed:B.changed,supersede:L}}function G(u,v,d){let l=Ui(u,i.maxDiagnostics);E=l;let m=t.current(),I=l[0]?.code??"invalid-schema";return v?(T({outcome:"rejected",patchId:v.patchId,idempotencyKey:v.idempotencyKey,at:n(),oldRevision:d?.oldRevision??m.revision,newRevision:d?.oldRevision??m.revision,reasonCodes:l.map(O=>O.code),changedIdentities:[],provenance:ke(v.provenance),patch:ke(v)}),g(Zi,{patchId:v.patchId,reasonCode:I,revision:m.revision}),g(Dn,{patchId:v.patchId,reasonCode:I,revision:m.revision})):g(Dn,{reasonCode:I,revision:m.revision}),{ok:!1,errors:l,inspect:_()}}function w(u){if(!e.graph||!u)return[];let v=e.graph.restore(u);return v.ok?[]:v.errors.map(d=>Y("graph-apply-failed",d.detail,d.path))}function M(u){let v=t.begin();v.applyWorldRevision(u),v.commit()}return{dryRun(u){C();let v=V(u);return v.ok?v.idempotent?{ok:!0,previewRevision:v.next.revision,changedIdentities:[],diagnostics:[]}:{ok:!0,previewRevision:v.next.revision,changedIdentities:v.changed,diagnostics:[]}:{ok:!1,errors:v.errors}},commit(u){C();let v=V(u);if(!v.ok)return G(v.errors,v.patch);let d=v.patch,l=t.current();if(v.idempotent)return{ok:!0,patchId:d.patchId,oldRevision:l.revision,newRevision:l.revision,changedIdentities:[],idempotent:!0,inspect:_()};let m=e.graph?.snapshot(),I=t.begin();try{if(I.applyWorldRevision(v.next),e.graph){let R=fg(e.graph,d.operations);if(R.length){try{I.rollback()}catch{}return M(l),w(m),G(R,d,{oldRevision:l.revision})}}I.commit()}catch(R){try{I.rollback()}catch{}return M(l),w(m),G([Y("publish-failed",R instanceof Error?R.message:"persistence failed")],d,{oldRevision:l.revision})}let O={patchId:d.patchId,oldRevision:l.revision,newRevision:v.next.revision,changedIdentities:v.changed,producer:d.provenance.producer,jobId:d.provenance.jobId,contentRevisions:d.provenance.contentRevisions};try{t.publish?.(O),v.supersede&&(g(eo,{patchId:v.supersede.patchId,supersededBy:d.patchId,revision:v.next.revision}),T({outcome:"superseded",patchId:v.supersede.patchId,idempotencyKey:v.supersede.idempotencyKey,at:n(),oldRevision:l.revision,newRevision:v.next.revision,reasonCodes:["superseded"],changedIdentities:[],provenance:ke(v.supersede.provenance),patch:{supersededBy:d.patchId}})),g(Qi,{patchId:O.patchId,oldRevision:O.oldRevision,newRevision:O.newRevision,producer:O.producer,jobId:O.jobId,contentRevisions:O.contentRevisions,changedIdentities:O.changedIdentities}),E=null,T({outcome:"accepted",patchId:d.patchId,idempotencyKey:d.idempotencyKey,at:n(),oldRevision:l.revision,newRevision:v.next.revision,reasonCodes:[],changedIdentities:v.changed,provenance:ke(d.provenance),patch:ke(d)})}catch(R){return M(l),w(m),G([Y("publish-failed",R instanceof Error?R.message:"publication failed")],d,{oldRevision:l.revision})}return{ok:!0,patchId:d.patchId,oldRevision:l.revision,newRevision:v.next.revision,changedIdentities:v.changed,inspect:_()}},inspect(){return C(),_()},snapshot(){C();let u={schemaVersion:zi,world:Xi(t.current()),audit:ke(f)};return e.graph&&(u.graph=e.graph.snapshot()),u},restore(u){C();let v=gg(u);if(!v.ok)return v;let d=t.current(),l=f,m=e.graph?.snapshot();try{if(M(v.snapshot.world),f=ke(v.snapshot.audit),E=null,v.snapshot.graph){let I=w(v.snapshot.graph);if(I.length)return M(d),w(m),f=l,{ok:!1,errors:I}}return{ok:!0,snapshot:v.snapshot}}catch{return M(d),w(m),f=l,{ok:!1,errors:[Y("invalid-snapshot","restore failed to persist")]}}},audit(u){C();let v=u?.redact!==!1,d=ke(f);return v?Us(d,o):d},events(){return C(),p.map(u=>ke(u))},destroy(){c=!0,p.length=0,k.length=0}}}var to=1,wu=xi,Js=["binding-conflict","asset-failure","revision-rollback","sequence-interruption","text-only-fallback"],xu=["state-projection","binding","content-revision","staging","asset","sequence","presentation","snapshot"],_u=[...Wt,"privatePrompt","signedUrl","signedURL","signed_url","presignedUrl","password"],bg=new Set(Js),vg=new Set(xu),Sg=new Set(["signedUrl","signedURL","signed_url","presignedUrl","presignedURL"]),Eg=/[?&](X-Amz-Signature|X-Amz-Credential|X-Amz-Security-Token|X-Goog-Signature|Signature|sig)=/i,kg=/https?:\/\/[^\s"'<>)\]]+/gi,Ig="Selection trace has been destroyed",Rg=new Set(Js);function Cg(e){return typeof e=="string"&&bg.has(e)}function Ag(e){return typeof e=="string"&&vg.has(e)}function Qe(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Tu(e){return/^https?:\/\//i.test(e)?Eg.test(e):!1}function Ou(e){return Tu(e)?ft:e.replace(kg,t=>Tu(t)?ft:t)}function bt(e,t){if(e==null)return e;if(typeof e=="string")return Ou(e);if(Array.isArray(e))return e.map(i=>bt(i,t));if(typeof e!="object")return e;let n=e,r={};for(let[i,o]of Object.entries(n))t.has(i)||Sg.has(i)?r[i]=ft:r[i]=bt(o,t);return r}function Du(e,t,n){if(e==null)return e;if(Array.isArray(e))return e.map(o=>Du(o,t,n));if(typeof e!="object")return ft;let r=e,i={};for(let[o,s]of Object.entries(r))t.has(o)?i[o]=bt(s,n):i[o]=ft;return i}function Pg(e,t){return t?!(t.kinds&&!t.kinds.includes(e.kind)||t.reasons&&!t.reasons.includes(e.reason)||t.correlationId&&e.correlationId!==t.correlationId||t.causationId&&e.causationId!==t.causationId||t.envelopeId&&e.envelopeId!==t.envelopeId||t.contentId&&![e.requestedContent?.contentId,e.activatedContent?.contentId].includes(t.contentId)||t.sequenceId&&e.sequence?.sequenceId!==t.sequenceId):!0}function Tg(e,t,n){return Rg.has(e)||n>=1?!0:n<=0?!1:(t*2654435761>>>0)/4294967296<n}function wg(e,t){if(!e)return[];let n=new Set;for(let r of t)r.correlationId&&n.add(r.correlationId),r.causationId&&n.add(r.causationId),r.envelopeId&&n.add(r.envelopeId);return n.size===0?[]:e.records().filter(r=>r.correlationId!==void 0&&n.has(r.correlationId)||r.causationId!==void 0&&n.has(r.causationId)||r.envelopeId!==void 0&&n.has(r.envelopeId))}function xg(e,t){return e.recordSelectionDecision(t)}function _g(e,t){return{...Qe(e),selectionTrace:t}}function Og(e={}){let t=new Set([..._u,...e.redactedKeys??[]]),n=new Set(e.projectionWhitelist??[]),r=e.maxRecords??wu,i=e.sampleRate??1,o=e.inspector,s=0,a=0,c=0,f=!1,p=[],k=[],E={},C=()=>{if(f)throw new Error(Ig)},_=w=>p.filter(M=>Pg(M,w)).map(M=>Qe(M)),g=w=>Du(w,n,t),T=(w,M)=>{let A={index:M,kind:w.kind,reason:w.reason,summary:Ou(String(w.summary))};return w.turn!==void 0&&(A.turn=w.turn),w.time!==void 0&&(A.time=w.time),w.correlationId&&(A.correlationId=w.correlationId),w.causationId&&(A.causationId=w.causationId),w.envelopeId&&(A.envelopeId=w.envelopeId),w.initiatingEventType&&(A.initiatingEventType=w.initiatingEventType),w.projectionRevision!==void 0&&(A.projectionRevision=w.projectionRevision),w.projection!==void 0?A.projection=g(w.projection):w.hostState!==void 0&&(A.projection=g(w.hostState)),w.bindings&&(A.bindings=bt(Qe(w.bindings.slice()),t)),w.winningBindingId!==void 0&&(A.winningBindingId=w.winningBindingId),w.rejectedBindingIds&&(A.rejectedBindingIds=w.rejectedBindingIds.slice()),w.defaultFallback!==void 0&&(A.defaultFallback=w.defaultFallback),w.requestedContent&&(A.requestedContent=bt(Qe(w.requestedContent),t)),w.activatedContent!==void 0&&(A.activatedContent=w.activatedContent?bt(Qe(w.activatedContent),t):null),w.staging&&(A.staging=bt(Qe(w.staging),t)),w.lastKnownGood!==void 0&&(A.lastKnownGood=w.lastKnownGood?bt(Qe(w.lastKnownGood),t):null),w.asset&&(A.asset=bt(Qe(w.asset),t)),w.sequence&&(A.sequence=bt(Qe(w.sequence),t)),w.presentation&&(A.presentation=bt(Qe(w.presentation),t)),w.snapshot&&(A.snapshot=Qe(w.snapshot)),A},V=w=>{for(p.push(w);p.length>r;)p.shift(),s+=1};return{recordSelectionDecision(w){C();let M=c;if(c+=1,!Tg(w.reason,M,i))return a+=1,null;let A=T(w,M);return V(A),Qe(A)},records(w){return C(),_(w)},query(w){return C(),_(w)},chain(w){return C(),_({correlationId:w})},exportTrace(w){C();let M=_(w),A=k.length>0?k.filter(v=>w?.correlationId?v.correlationId===w.correlationId:!0):wg(o,M),u={schemaVersion:to,redactedKeys:[...t],projectionWhitelist:[...n],dropped:s,sampledOut:a,records:M,inspectorRecords:Qe(A)};return E.revision!==void 0&&(u.snapshotRevision=E.revision),E.schemaVersion!==void 0&&(u.snapshotSchemaVersion=E.schemaVersion),E.seed&&(u.snapshotSeed=E.seed),u},importTrace(w){C();let M=typeof w=="string"?JSON.parse(w):w;if(M.schemaVersion!==to)throw new Error("Selection trace: unsupported export schemaVersion");s=M.dropped??0,a=M.sampledOut??0,c=0,p.length=0,k=Qe(M.inspectorRecords??[]),E={},M.snapshotRevision!==void 0&&(E.revision=M.snapshotRevision),M.snapshotSchemaVersion!==void 0&&(E.schemaVersion=M.snapshotSchemaVersion),M.snapshotSeed&&(E.seed=M.snapshotSeed);for(let A of M.records??[]){let u=typeof A.index=="number"?A.index:c;c=Math.max(c,u+1),V(Qe(A))}},report(w){return C(),{schemaVersion:to,records:_(w),dropped:s,sampledOut:a}},setSnapshotProvenance(w){C(),E={...E,...w}},reset(){C(),p.length=0,k=[],s=0,a=0,c=0,E={}},destroy(){f||(f=!0,p.length=0,k=[],E={})}}}var Xs=vi,Dg=Si,Ng=["participant","image","canvas"],Mg="Compositor has been destroyed";function Lg(e){return Number.isFinite(e)?e<0?0:e>1?1:e:1}function Vg(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 Bg(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Fg(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:Bg(e.image)}}throw new Error(`createCompositor: layer "${t}" source.kind must be participant, image, or canvas`)}function Ys(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=Fg(e.source,e.id);return{id:e.id,order:e.order,visible:e.visible!==!1,opacity:Lg(e.opacity??1),blend:n,clip:e.clip?{...e.clip}:null,pointerEvents:r,clearPolicy:i,sourceKind:o.kind,source:o}}function Nu(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 Mu(e){return[...e].sort((t,n)=>t.order-n.order||t.id.localeCompare(n.id))}function zs(e,t){return 255-Math.round((255-e)*(255-t)/255)}function $g(e,t,n,r,i,o,s,a){let c=o/255*s;if(c<=0)return;let f=e[t],p=e[t+1],k=e[t+2],E=e[t+3]/255,C=n,_=r,g=i;a==="screen"&&(C=zs(f,n),_=zs(p,r),g=zs(k,i));let T=c+E*(1-c);if(T<=0){e[t]=0,e[t+1]=0,e[t+2]=0,e[t+3]=0;return}e[t]=Math.round((C*c+f*E*(1-c))/T),e[t+1]=Math.round((_*c+p*E*(1-c))/T),e[t+2]=Math.round((g*c+k*E*(1-c))/T),e[t+3]=Math.round(T*255)}function Hg(e,t,n){if(e.width===t&&e.height===n)return{data:new Uint8ClampedArray(e.data),width:t,height:n,colorSpace:e.colorSpace??"srgb"};let r=new Uint8ClampedArray(t*n*4);for(let i=0;i<n;i++){let o=Math.min(e.height-1,Math.floor(i*e.height/n));for(let s=0;s<t;s++){let a=Math.min(e.width-1,Math.floor(s*e.width/t)),c=(o*e.width+a)*4,f=(i*t+s)*4;r[f]=e.data[c],r[f+1]=e.data[c+1],r[f+2]=e.data[c+2],r[f+3]=e.data[c+3]}}return{data:r,width:t,height:n,colorSpace:e.colorSpace??"srgb"}}function qg(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 Lu(e,t,n){return e?t>=e.x&&n>=e.y&&t<e.x+e.width&&n<e.y+e.height:!0}function Vu(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 no(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 Qs(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 u of e.layers){let v=Ys(u,n);if(t.has(v.id))throw new Error(`createCompositor: duplicate layer id "${v.id}"`);t.add(v.id),r.set(v.id,v)}let i=e.group,o=e.dpr&&e.dpr>0?e.dpr:1,s=Math.max(1,(e.width??320)|0),a=Math.max(1,(e.height??180)|0),c=o,f=e.offscreen!==!1,p=!e.target;if(!f&&!e.target)throw new Error("createCompositor: target canvas is required when offscreen is false");let k=e.target??document.createElement("canvas"),E=k.getContext("2d",{alpha:!0});if(!E)throw new Error("createCompositor: host canvas has no 2d context");let C=!1,_=()=>{if(C)throw new Error(Mg)},g=()=>({width:Math.max(1,Math.round(s*c)),height:Math.max(1,Math.round(a*c))}),T=()=>{let u=g();k.width!==u.width&&(k.width=u.width),k.height!==u.height&&(k.height=u.height),k.style.width=`${s}px`,k.style.height=`${a}px`},V=()=>Mu([...r.values()]).map(Nu),G=u=>{if(u.source.kind==="image")return u.source.image;if(u.source.kind==="canvas")try{return Vu(u.source.canvas)}catch{return}try{let d=i.participant(u.id).cart.canvas;return d?(no(d,u),Vu(d)):void 0}catch{return}},w=(u,v,d)=>{if(u.fill(0),n==="opaque"&&!e.host?.image&&!e.host?.color&&u.fill(0),e.host?.image){let l=Hg(e.host.image,v,d);u.set(l.data);return}e.host?.color&&qg(u,Vg(e.host.color))},M=()=>{let{width:u,height:v}=g();T();let d=E.createImageData(u,v);w(d.data,u,v);for(let l of Mu([...r.values()])){if(!l.visible||l.opacity<=0)continue;let m=G(l);if(!m)continue;let I=l.clearPolicy==="transparent",O=Math.min(u,m.width),R=Math.min(v,m.height);for(let B=0;B<R;B++)for(let K=0;K<O;K++){if(!Lu(l.clip,K,B))continue;let P=(B*m.width+K)*4,h=m.data[P],x=m.data[P+1],L=m.data[P+2],H=m.data[P+3];I&&h===0&&x===0&&L===0||H<=0||$g(d.data,(B*u+K)*4,h,x,L,H,l.opacity,l.blend)}}return E.putImageData(d,0,0),d};T();for(let u of V())try{no(i.participant(u.id).cart.canvas,u)}catch{}return{get canvas(){return k},get width(){return s},get height(){return a},get dpr(){return c},compose(){return _(),M()},captureComposedFrame(){_();let u=M();return{imageData:u,pngDataUrl:k.toDataURL("image/png"),width:u.width,height:u.height,declaredOrder:V()}},resize(u,v,d){_(),s=Math.max(1,u|0),a=Math.max(1,v|0),d!==void 0&&(c=d>0?d:1);let l=g();i.resize(l.width,l.height),T()},setLayer(u,v){_();let d=r.get(u);if(!d)throw new Error(`createCompositor: unknown layer "${u}"`);let l=Ys({id:u,order:v.order??d.order,visible:v.visible??d.visible,opacity:v.opacity??d.opacity,blend:v.blend??d.blend,clip:v.clip===void 0?d.clip??void 0:v.clip,pointerEvents:v.pointerEvents??d.pointerEvents,clearPolicy:v.clearPolicy??d.clearPolicy,source:v.source??d.source},n);r.set(u,l);try{no(i.participant(u).cart.canvas,l)}catch{}},addLayer(u){if(_(),r.has(u.id))throw new Error(`createCompositor: duplicate layer id "${u.id}"`);let v=Ys(u,n);r.set(v.id,v);try{no(i.participant(v.id).cart.canvas,v)}catch{}},layer(u){_();let v=r.get(u);if(!v)throw new Error(`createCompositor: unknown layer "${u}"`);return Nu(v)},layers(){return _(),V()},pointerTarget(u,v){_();let d=u|0,l=v|0,m=[...V()].reverse();for(let I of m){if(!I.visible||I.pointerEvents==="none"||!Lu(I.clip,d,l))continue;let O=r.get(I.id);if(O&&O.source.kind!=="participant")return I.id;try{i.participant(I.id)}catch{continue}return I.id}},unmountLayer(u){if(_(),!r.has(u))throw new Error(`createCompositor: unknown layer "${u}"`);r.delete(u);try{i.detach(u)}catch{}},inspect(){_();let u=V();return{viewport:{width:s,height:a,dpr:c},clearPolicy:n,layers:u,declaredOrder:u.map(v=>v.id)}},destroy(){C||(C=!0,p&&k.parentNode&&k.remove())}}}var ea=1,Ku=["mask","polygon","rect","depth"],Wu=["pass-through","absorb","exclusive","depth-ordered"],Kg=["hover","focus","selected"],Gu=["idle","hover","focus","selected"],Wg="Semantic layer controller has been destroyed",Gg=new Set(Ku),jg=new Set(Wu),Ug=new Set(Xs);function Jg(e){return typeof e=="string"&&Gg.has(e)}function ta(e){return typeof e=="string"&&jg.has(e)}function ro(e){return typeof e=="string"&&Ug.has(e)}function ra(e){let t=[];return e.mask&&t.push("mask"),e.polygon&&e.polygon.length>=3&&t.push("polygon"),e.rect&&t.push("rect"),typeof e.depth=="number"&&Number.isFinite(e.depth)&&t.push("depth"),t}function na(e){return e.selected?"selected":e.focus?"focus":e.hover?"hover":"idle"}function ia(e){return JSON.parse(JSON.stringify(e))}function Bu(){return{hover:!1,focus:!1,selected:!1}}function Zs(e,t){return{hover:t?.hover??e.hover,focus:t?.focus??e.focus,selected:t?.selected??e.selected}}function Nn(e){return ia(e)}function Rr(e){return ia(e??{})}function Fu(e,t){let n=e.visuals[t]??e.visuals.idle;return{opacity:n?.opacity??1,blend:n?.blend??e.blend,version:n?.version}}function Yg(e,t){let n=e.bounds??{x:0,y:0,width:1,height:1};if(t.x<n.x||t.x>=n.x+n.width||t.y<n.y||t.y>=n.y+n.height||!Number.isInteger(e.width)||!Number.isInteger(e.height)||e.width<1||e.height<1||e.alpha.length!==e.width*e.height)return!1;let r=(t.x-n.x)/n.width,i=(t.y-n.y)/n.height,o=Math.min(e.width-1,Math.max(0,Math.floor(r*e.width))),s=Math.min(e.height-1,Math.max(0,Math.floor(i*e.height)));return(e.alpha[s*e.width+o]??0)>.5}function ju(e,t){return e.mask?Yg(e.mask,t):e.polygon&&e.polygon.length>=3?ar({id:"",polygon:e.polygon},t):e.rect?ar({id:"",rect:e.rect},t):typeof e.depth=="number"&&Number.isFinite(e.depth)?t.x>=0&&t.x<=1&&t.y>=0&&t.y<=1:!1}function zg(e,t){let n=e.hitTest==="exclusive"?1:0,r=t.hitTest==="exclusive"?1:0;if(n!==r)return r-n;let i=e.geometry.depth??0,o=t.geometry.depth??0;return i!==o?o-i:t.order-e.order}function Xg(e,t){if(!Number.isInteger(t.width)||!Number.isInteger(t.height)||t.width<1||t.height<1)throw new Error(`region "${e}" mask size is invalid`);if(!Array.isArray(t.alpha)||t.alpha.length!==t.width*t.height)throw new Error(`region "${e}" mask alpha length must be width*height`)}function $u(e,t){if(!t||typeof t!="object")throw new Error(`region "${e}" geometry is required`);if(t.mask&&Xg(e,t.mask),t.polygon&&t.polygon.length>0&&t.polygon.length<3)throw new Error(`region "${e}" polygon needs 3+ points`);if(ra(t).length===0)throw new Error(`region "${e}" needs mask, polygon, rect, or depth`)}function Hu(e,t){if(t!==void 0){if(!t||typeof t!="object")throw new Error(`region "${e}" visuals must be an object`);for(let n of Gu){let r=t[n];if(r&&r.blend!==void 0&&!ro(r.blend))throw new Error(`region "${e}" ${n} blend is invalid`)}}}function qu(e,t){return e instanceof Error?e.message:t}function Qg(e,t){try{return e.layer(t),!0}catch{return!1}}function oa(e){if(!e?.regions?.length)throw new Error("createSemanticLayerController: at least one region is required");let t=e.compositor,n=e.visualLayers,r=e.originFrame??0,i=!1,o=new Map,s=()=>{if(i)throw new Error(Wg)};function a(g){let T=na(g.state);return{id:g.declaration.id,geometryKinds:ra(g.geometry),hitTest:g.hitTest,blend:g.blend,order:g.order,depth:g.geometry.depth??0,state:{...g.state},appearance:T,a11y:g.a11y?{...g.a11y}:null,visual:Fu(g,T)}}function c(g){let T=na(g.state),V=Fu(g,T);if(g.visualLayerId&&n&&V.version&&n.override(g.visualLayerId,V.version),g.compositorLayerId&&t){if(!Qg(t,g.compositorLayerId))return;t.setLayer(g.compositorLayerId,{opacity:V.opacity,blend:V.blend,pointerEvents:g.hitTest==="pass-through"?"none":"auto"})}}function f(g){return{geometry:Nn(g.geometry),hitTest:g.hitTest,blend:g.blend,order:g.order,compositorLayerId:g.compositorLayerId,visualLayerId:g.visualLayerId,visuals:Rr(g.visuals),state:{...g.state},a11y:g.a11y?{...g.a11y}:null}}function p(g,T){g.geometry=Nn(T.geometry),g.hitTest=T.hitTest,g.blend=T.blend,g.order=T.order,g.compositorLayerId=T.compositorLayerId,g.visualLayerId=T.visualLayerId,g.visuals=Rr(T.visuals),g.state={...T.state},g.a11y=T.a11y?{...T.a11y}:null}for(let g of e.regions){if(!g?.id)throw new Error("createSemanticLayerController: region id is required");if(o.has(g.id))throw new Error(`createSemanticLayerController: duplicate region id "${g.id}"`);if($u(g.id,g.geometry),Hu(g.id,g.visuals),g.hitTest&&!ta(g.hitTest))throw new Error(`createSemanticLayerController: region "${g.id}" hitTest is invalid`);if(g.blend&&!ro(g.blend))throw new Error(`createSemanticLayerController: region "${g.id}" blend is invalid`);let T={declaration:g,geometry:Nn(g.geometry),hitTest:g.hitTest??"absorb",blend:g.blend??"source-over",order:g.order??0,compositorLayerId:g.compositorLayerId??null,visualLayerId:g.visualLayerId??null,visuals:Rr(g.visuals),state:Zs(Bu(),g.initialState),a11y:null};o.set(g.id,T),c(T)}function k(){return[...o.values()].map(a).sort((g,T)=>g.id<T.id?-1:g.id>T.id?1:0)}function E(g){let T=[...o.values()].filter(V=>V.hitTest!=="pass-through"&&ju(V.geometry,g));return T.sort(zg),T[0]?.hitTest==="exclusive"?T.filter(V=>V.hitTest==="exclusive"):T[0]?.hitTest==="absorb"?[T[0]]:T}function C(){let g=[...o.values()].map(T=>({id:T.declaration.id,geometry:Nn(T.geometry),hitTest:T.hitTest,blend:T.blend,order:T.order,compositorLayerId:T.compositorLayerId,visualLayerId:T.visualLayerId,visuals:Rr(T.visuals),state:{...T.state},a11y:T.a11y?{...T.a11y}:null})).sort((T,V)=>T.id<V.id?-1:T.id>V.id?1:0);return ia({schemaVersion:ea,frame:r,regions:g})}function _(g){s();let T=[],V=l=>({ok:!1,errors:[...T,l]}),G=g;if(typeof g=="string")try{G=JSON.parse(g)}catch{return V("snapshot JSON is invalid")}if(!G||typeof G!="object"||Array.isArray(G))return V("snapshot must be an object");let w=G;if(w.schemaVersion!==ea)return V("unsupported semantic layer snapshot schema");if(typeof w.frame!="number"||!Number.isFinite(w.frame))return V("frame must be finite");if(!Array.isArray(w.regions))return V("regions must be an array");let M=w.regions,A=new Map;for(let l of M){if(!l||typeof l.id!="string"||l.id.length===0){T.push("region id is required");continue}A.has(l.id)&&T.push(`duplicate region "${l.id}"`),A.set(l.id,l),o.has(l.id)||T.push(`unknown region "${l.id}"`),ta(l.hitTest)||T.push(`region "${l.id}" hitTest is invalid`),ro(l.blend)||T.push(`region "${l.id}" blend is invalid`),(typeof l.order!="number"||!Number.isFinite(l.order))&&T.push(`region "${l.id}" order must be finite`);try{$u(l.id,l.geometry),Hu(l.id,l.visuals)}catch(m){T.push(qu(m,`region "${l.id}" is invalid`))}}for(let l of o.keys())A.has(l)||T.push(`missing region "${l}"`);if(T.length>0)return{ok:!1,errors:T};let u=r,v=new Map;for(let l of o.values())v.set(l.declaration.id,f(l));let d=()=>{r=u;for(let l of o.values()){let m=v.get(l.declaration.id);m&&p(l,m)}for(let l of o.values())c(l)};r=w.frame;for(let l of o.values()){let m=A.get(l.declaration.id);l.geometry=Nn(m.geometry),l.hitTest=m.hitTest,l.blend=m.blend,l.order=m.order,l.compositorLayerId=m.compositorLayerId??null,l.visualLayerId=m.visualLayerId??null,l.visuals=Rr(m.visuals),l.state=Zs(Bu(),m.state),l.a11y=m.a11y&&typeof m.a11y.name=="string"&&typeof m.a11y.role=="string"?{name:m.a11y.name,role:m.a11y.role}:null}try{for(let l of o.values())c(l)}catch(l){return d(),V(qu(l,"visual layer apply failed"))}return{ok:!0,snapshot:C()}}return{list(){return s(),k()},inspect(){return s(),k()},inspectPublished(){return s(),k().map(g=>({id:g.id,geometryKinds:g.geometryKinds,a11y:g.a11y}))},get(g){s();let T=o.get(g);return T?a(T):void 0},geometryOf(g){s();let T=o.get(g);return T?Nn(T.geometry):void 0},setRegionState(g,T){s();let V=o.get(g);if(!V)throw new Error(`createSemanticLayerController: unknown region "${g}"`);let G={...V.state};V.state=Zs(V.state,T);try{c(V)}catch(w){throw V.state=G,w}},setRegionA11y(g,T){s();let V=o.get(g);if(!V)throw new Error(`createSemanticLayerController: unknown region "${g}"`);V.a11y=T?{name:T.name,role:T.role}:null},hitTest(g){s();let T=E(g);return T[0]?a(T[0]):void 0},hitTestAll(g){return s(),E(g).map(a)},snapshot(){return s(),C()},restore:_,destroy(){i||(i=!0,o.clear())},get frame(){return r}}}var sa=1,Ju=["layer","mask","sprite"],Yu=["show","hide","replace","crossfade"],zu=":incoming",oo="visual.layer.revealed",Cr="visual.layer.hidden",so="visual.layer.transition-started",ao="visual.layer.transition-completed",Ar="visual.layer.failed",Zg=[oo,Cr,so,ao,Ar],Xu="host.state.accepted",eh=["asset-failed","missing-source","unknown-layer","unknown-version","invalid-snapshot"],th="Visual layer controller has been destroyed",nh=new Set(Ju),rh=new Set(Yu);function Qu(e){return typeof e=="string"&&nh.has(e)}function Zu(e){return typeof e=="string"&&rh.has(e)}function ih(e){return e===oo||e===Cr||e===so||e===ao||e===Ar}function el(e){return`${e}${zu}`}function oh(e){return{frame:e.captureComposedFrame(),layers:e.inspect()}}function sh(e){return{data:new Uint8ClampedArray(e.data),width:e.width,height:e.height,colorSpace:e.colorSpace??"srgb"}}function Mn(e){return JSON.parse(JSON.stringify(e))}function io(e){if(!(!e||typeof e!="object"||Array.isArray(e)))return e}function ah(e){let t=io(e);return typeof t?.id=="string"&&t.id.length>0?t.id:void 0}function dh(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 dt(e,t){if(t)return e.versions.find(n=>n.id===t)}function Uu(e){return e?{...e}:null}function aa(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=Ct({originFrame:e.originFrame,reducedMotion:r}),s=e.sceneId??null,a=!1,c=0,f=new Map,p=new Map,k=new Map,E=new Map,C=[],_=[],g=()=>{if(a)throw new Error(th)};function T(y){C.push(y),e.dispatch&&e.dispatch({type:y.type,kind:y.type===Ar?"diagnostic":"state",payload:y})}function V(y){_.push(y),T({type:Ar,atFrame:y.atFrame,layerId:y.layerId,version:y.version,progress:0,code:y.code})}function G(y,b){k.set(y,b)}function w(y){let b=k.get(y);if(b)return b;if(n?.get(y))return"ready";let S=n?.getProgress().items[y];return S?.state==="failed"?"failed":S?.state==="ready"?"ready":"pending"}function M(y){let b=p.get(y);if(b)return b.kind==="canvas"?{kind:"canvas",canvas:b.canvas}:{kind:"image",image:b.image}}function A(y,b){let S=dt(y.declaration,b);return S?w(S.assetId)==="ready"&&!!M(S.assetId):!1}function u(y){return y.overrideVersion&&A(y,y.overrideVersion)?y.overrideVersion:y.committedVersion}function v(y,b){let S=dt(y.declaration,b);return S?Uu(E.get(S.assetId))??Uu(S.provenance)??null:null}function d(y,b=0){return o.get(y)?.progress??b}function l(y,b,S){try{t.layer(y)}catch{t.addLayer({id:y,order:b,visible:!1,opacity:0,pointerEvents:S.pointerEvents??"none",blend:S.blend,clip:S.clip??void 0,clearPolicy:S.clearPolicy})}}function m(y){try{t.setLayer(y.incomingLayerId,{visible:!1,opacity:0})}catch{}}function I(){for(let y of f.values()){let b=u(y),S=dt(y.declaration,b),N=y.transition,$=N?d(N.cueKey):0,Q=N?.kind==="crossfade"&&N.toVersion!==null&&A(y,N.toVersion);l(y.compositorLayerId,y.order,y);let J=y.visible,ne=1;N?.kind==="hide"?(ne=1-$,$>=1&&(J=!1)):N?.kind==="show"?(J=A(y,N.toVersion),ne=J?N.durationFrames===0?1:$:0):Q&&(ne=1-$);let ie=S?M(S.assetId):void 0;if(t.setLayer(y.compositorLayerId,{order:y.order,visible:J&&!!ie,opacity:ne,blend:y.blend,clip:y.clip??void 0,pointerEvents:y.pointerEvents,clearPolicy:y.clearPolicy,source:ie}),Q&&N){let Oe=dt(y.declaration,N.toVersion),Re=Oe?M(Oe.assetId):void 0;if(Re){try{t.layer(y.incomingLayerId)}catch{t.addLayer({id:y.incomingLayerId,order:y.order+1,visible:!1,opacity:0,pointerEvents:"none",blend:y.blend,clip:y.clip??void 0,clearPolicy:y.clearPolicy})}t.setLayer(y.incomingLayerId,{order:y.order+1,visible:!0,opacity:$,blend:y.blend,clip:y.clip??void 0,pointerEvents:"none",clearPolicy:y.clearPolicy,source:Re});continue}}m(y)}}function O(y){let b=u(y);return{id:y.declaration.id,kind:y.kind,visible:y.visible&&!!(b&&A(y,b)),activeVersion:b,pendingVersion:y.pendingVersion,committedVersion:y.committedVersion,opacity:t.layer(y.compositorLayerId).opacity,order:y.order,provenance:v(y,b),overrideVersion:y.overrideVersion,transition:y.transition?{kind:y.transition.kind,progress:d(y.transition.cueKey),fromVersion:y.transition.fromVersion,toVersion:y.transition.toVersion,cueKey:y.transition.cueKey,startFrame:y.transition.startFrame,durationFrames:y.transition.durationFrames,delayFrames:y.transition.delayFrames,easing:y.transition.easing}:null}}function R(y,b,S){y.committedVersion=b,y.pendingVersion=null,y.transition=null,y.visible=S,I(),T({type:S?oo:Cr,atFrame:o.frame,layerId:y.declaration.id,version:b,progress:1})}function B(y){y.visible=!1,y.pendingVersion=null,y.transition=null,I(),T({type:Cr,atFrame:o.frame,layerId:y.declaration.id,version:y.committedVersion??void 0,progress:1})}function K(y,b,S,N){let $=y.fallback;y.transition=null,y.pendingVersion=null,$==="hide"?y.visible=!1:typeof $=="object"&&$.version&&A(y,$.version)&&(y.committedVersion=$.version,y.visible=!0),I(),V({code:N?"asset-failed":"missing-source",layerId:y.declaration.id,version:b??void 0,assetId:S,message:N?N.message:`visual layer "${y.declaration.id}" kept the prior valid frame`,atFrame:o.frame,failure:N})}function P(y){let b=y.transition;if(b?.kind==="hide")return B(y),!0;let S=y.pendingVersion??b?.toVersion??null;if(!S)return y.transition=null,!0;if(!dt(y.declaration,S))return K(y,S),!0;if(A(y,S))return R(y,S,!0),!0;let N=dt(y.declaration,S).assetId;return w(N)==="failed"?(K(y,S,N),!0):(y.transition=null,y.pendingVersion=S,I(),!1)}function h(){for(let y of f.values())if(!y.transition&&y.pendingVersion){if(A(y,y.pendingVersion))R(y,y.pendingVersion,!0);else if(w(dt(y.declaration,y.pendingVersion)?.assetId??"")==="failed"){let b=dt(y.declaration,y.pendingVersion);K(y,y.pendingVersion,b?.assetId)}}for(let y of f.values())y.overrideVersion&&A(y,y.overrideVersion)&&y.committedVersion!==y.overrideVersion&&R(y,y.overrideVersion,!0)}function x(y,b){G(y,"failed");for(let S of f.values()){let N=S.declaration.versions.find(ie=>ie.assetId===y);if(!N)continue;let $=dt(S.declaration,S.pendingVersion),Q=dt(S.declaration,S.transition?.toVersion??null),J=dt(S.declaration,S.overrideVersion);if($?.assetId===y||Q?.assetId===y||J?.assetId===y){S.transition&&o.cancel(S.transition.cueKey),J?.assetId===y&&(S.overrideVersion=null),K(S,N.id,y,b);continue}V({code:"asset-failed",layerId:S.declaration.id,version:N.id,assetId:y,message:b?.message??`asset "${y}" failed; prior frame kept`,atFrame:o.frame,failure:b}),I()}}function L(y){for(let b of y){let S=[...f.values()].find(N=>N.transition?.cueKey===b.idempotencyKey);if(!(!S||!S.transition))if(b.type===xt)T({type:so,atFrame:b.atFrame,layerId:S.declaration.id,version:S.transition.toVersion??void 0,kind:S.transition.kind,progress:b.progress}),I();else if(b.type===Ht){let N=S.transition.kind,$=S.transition.toVersion??void 0;P(S),T({type:ao,atFrame:b.atFrame,layerId:S.declaration.id,version:$,kind:N,progress:1})}else(b.type===_t||b.type===Rt)&&(S.transition=null,I())}}function H(){let y=C.slice(c).map(b=>Mn(b));return c=C.length,y}for(let y of e.layers){if(!y?.id)throw new Error("createVisualLayerController: layer id is required");if(f.has(y.id))throw new Error(`createVisualLayerController: duplicate layer id "${y.id}"`);if(!Qu(y.kind))throw new Error(`createVisualLayerController: layer "${y.id}" kind is invalid`);if(!y.versions?.length)throw new Error(`createVisualLayerController: layer "${y.id}" needs versions`);let b=new Set;for(let ne of y.versions){if(!ne?.id||!ne.assetId)throw new Error(`createVisualLayerController: layer "${y.id}" versions need id and assetId`);if(b.has(ne.id))throw new Error(`createVisualLayerController: layer "${y.id}" duplicate version "${ne.id}"`);b.add(ne.id),ne.provenance&&E.set(ne.assetId,{...ne.provenance})}if(y.initialVersion&&!b.has(y.initialVersion))throw new Error(`createVisualLayerController: layer "${y.id}" unknown initialVersion`);let S=y.compositorLayerId??y.id,N=y.incomingLayerId??el(S),$=y.order??0,Q=y.pointerEvents??(y.kind==="mask"?"none":"auto"),J={declaration:y,compositorLayerId:S,incomingLayerId:N,kind:y.kind,order:$,blend:y.blend??"source-over",clip:y.clip?{...y.clip}:null,pointerEvents:Q,clearPolicy:y.clearPolicy??"opaque",fallback:y.fallback??i,visible:!!y.initialVersion,committedVersion:y.initialVersion??null,pendingVersion:null,overrideVersion:null,transition:null};f.set(y.id,J),l(S,$,J)}I();function q(y){if(g(),!y||typeof y!="object")return{ok:!1,reason:"invalid",detail:"spec is required"};if(!y.layerId)return{ok:!1,reason:"invalid",detail:"layerId is required"};let b=f.get(y.layerId);if(!b)return{ok:!1,reason:"invalid",detail:`unknown layer "${y.layerId}"`};if(!Zu(y.kind))return{ok:!1,reason:"invalid",detail:"unsupported kind"};if(y.kind!=="hide"&&!y.toVersion)return{ok:!1,reason:"invalid",detail:"toVersion is required"};if(y.toVersion&&!dt(b.declaration,y.toVersion))return{ok:!1,reason:"invalid",detail:`unknown version "${y.toVersion}"`};let S={name:y.name,idempotencyKey:y.idempotencyKey,startFrame:y.startFrame,durationFrames:y.durationFrames,delayFrames:y.delayFrames,easing:y.easing,repeat:y.repeat,reducedMotion:y.reducedMotion,onDuplicate:y.onDuplicate??"replace"},N=o.snapshot().events.length,$=o.play(S);if(!$.ok)return $;let Q=o.snapshot().events.slice(N);return b.pendingVersion=y.kind==="hide"?b.committedVersion:y.toVersion??null,b.transition={kind:y.kind,cueKey:y.idempotencyKey,fromVersion:y.fromVersion??b.committedVersion,toVersion:y.kind==="hide"?b.committedVersion:y.toVersion??null,startFrame:$.cue.startFrame,durationFrames:$.cue.durationFrames,delayFrames:$.cue.delayFrames,easing:$.cue.easing},L(Q),I(),H(),$}function Z(y){let b=io(y),S=typeof b?.sceneId=="string"?b.sceneId:void 0;if(e.sceneId&&S&&S!==e.sceneId)return;S&&(s=S);let N=typeof b?.layerId=="string"?b.layerId:typeof b?.overlayId=="string"?b.overlayId:void 0,$=typeof b?.version=="string"?b.version:void 0;if(N&&$){q({name:`visual:${N}:replace`,idempotencyKey:`visual:${N}:accepted`,layerId:N,kind:"replace",toVersion:$,durationFrames:2});return}for(let Q of e.onAccepted??[])q({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 X(){let y=[...f.values()].map(S=>{let N=O(S);return{id:S.declaration.id,kind:S.kind,visible:S.visible,committedVersion:S.committedVersion,pendingVersion:S.pendingVersion,activeVersion:N.activeVersion,opacity:N.opacity,order:S.order,overrideVersion:S.overrideVersion,provenance:N.provenance,fallback:S.fallback,transition:N.transition}}).sort((S,N)=>S.id<N.id?-1:S.id>N.id?1:0),b={};for(let[S,N]of[...k.entries()].sort(([$],[Q])=>$<Q?-1:$>Q?1:0))b[S]=N;return Mn({schemaVersion:sa,frame:o.frame,sceneId:s,reducedMotion:r,layers:y,assets:b,events:C.map(S=>Mn(S)),diagnostics:_.map(S=>Mn(S))})}function W(y){g();let b=[],S=J=>{let ne={code:"invalid-snapshot",layerId:"",message:J,atFrame:o.frame};return{ok:!1,errors:[...b,ne]}},N=y;if(typeof y=="string")try{N=JSON.parse(y)}catch{return S("snapshot JSON is invalid")}if(!N||typeof N!="object"||Array.isArray(N))return S("snapshot must be an object");let $=N;if($.schemaVersion!==sa)return S("unsupported visual layer snapshot schema");if(typeof $.frame!="number"||!Number.isFinite($.frame))return S("frame must be finite");if(!Array.isArray($.layers))return S("layers must be an array");if(typeof $.reducedMotion=="boolean"&&(r=$.reducedMotion),o=Ct({originFrame:$.frame,reducedMotion:!1}),s=typeof $.sceneId=="string"||$.sceneId===null?$.sceneId:s,C.length=0,_.length=0,c=0,Array.isArray($.events)&&(C.push(...$.events.map(J=>Mn(J))),c=C.length),Array.isArray($.diagnostics)&&_.push(...$.diagnostics.map(J=>Mn(J))),k.clear(),$.assets&&typeof $.assets=="object")for(let[J,ne]of Object.entries($.assets))(ne==="ready"||ne==="failed"||ne==="pending")&&k.set(J,ne);let Q=new Map($.layers.map(J=>[J.id,J]));for(let J of f.values()){let ne=Q.get(J.declaration.id);ne&&(J.visible=!!ne.visible,J.committedVersion=ne.committedVersion??null,J.pendingVersion=ne.pendingVersion??null,J.overrideVersion=ne.overrideVersion??null,J.transition=null,ne.transition&&o.play({name:`visual:${J.declaration.id}:${ne.transition.kind}`,idempotencyKey:ne.transition.cueKey,startFrame:ne.transition.startFrame,durationFrames:ne.transition.durationFrames,delayFrames:ne.transition.delayFrames,easing:ne.transition.easing,onDuplicate:"replace"}).ok&&(J.transition={kind:ne.transition.kind,cueKey:ne.transition.cueKey,fromVersion:ne.transition.fromVersion,toVersion:ne.transition.toVersion,startFrame:ne.transition.startFrame,durationFrames:ne.transition.durationFrames,delayFrames:ne.transition.delayFrames,easing:ne.transition.easing}))}return I(),o.setReducedMotion(r),{ok:!0,snapshot:X()}}return{registerSource(y,b){if(g(),typeof y!="string"||y.length===0)throw new Error("createVisualLayerController: assetId is required");if(b instanceof HTMLCanvasElement)p.set(y,{kind:"canvas",canvas:b});else if(b&&"data"in b&&"width"in b)p.set(y,{kind:"image",image:sh(b)});else throw new Error("createVisualLayerController: source must be ImageData or canvas");h(),I()},handleHostEvent(y){if(g(),!y||typeof y!="object")return;if(y.type===Xu){Z(y.payload);return}let b=ah(y.payload);if(b){if(y.type===Ke){G(b,"ready");let N=io(y.payload)?.resource;if(N&&typeof N=="object"&&"provenance"in N){let $=N.provenance;$&&E.set(b,{...$})}h(),I();return}if(y.type===$e){let S=io(y.payload);x(b,dh(S?.failure))}}},override(y,b){g();let S=f.get(y);if(!S)throw new Error(`createVisualLayerController: unknown layer "${y}"`);if(b===null){S.overrideVersion=null,I();return}if(!dt(S.declaration,b))throw new Error(`createVisualLayerController: unknown version "${b}" on "${y}"`);if(S.overrideVersion=b,A(S,b)){S.transition&&o.cancel(S.transition.cueKey),R(S,b,!0);return}I()},play:q,setReducedMotion(y){g(),r=!!y,o.setReducedMotion(r)},step(y=1){g();let b=o.step(y);return L(b),h(),I(),H()},snapshot(){return g(),X()},restore:W,inspect(){return g(),I(),[...f.values()].map(O).sort((y,b)=>y.id<b.id?-1:y.id>b.id?1:0)},captureComposedFrame(){return g(),I(),t.captureComposedFrame()},destroy(){a||(a=!0,o.reset(),C.length=0,_.length=0)},get frame(){return o.frame},get sceneId(){return s},get compositor(){return t},get reducedMotion(){return r}}}var da=1,co="presentation.sequence.state.requested",uo="presentation.sequence.state.preloading",lo="presentation.sequence.state.ready",po="presentation.sequence.state.started",fo="presentation.sequence.state.step-started",mo="presentation.sequence.state.step-completed",yo="presentation.sequence.state.skipped",go="presentation.sequence.state.interrupted",ua="presentation.sequence.state.failed",ho="presentation.sequence.state.completed",la="presentation.sequence.diagnostic.lifecycle",nl=[co,uo,lo,po,fo,mo,yo,go,ua,ho,la],rl=["audio","caption","semantic-region","visual-layer","cue"],il=["replace","queue","reject","ignore"],ol=["duration","immediate"],sl=["unavailable","failed","unauthorized","muted"],al=["requested","preloading","ready","playing","paused","skipped","interrupted","failed","completed"],ch=new Set(rl),uh=new Set(il),lh=new Set(ol),ph=new Set(sl),fh=new Set(nl),mh="Presentation sequence player has been destroyed";function de(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function Le(e){return JSON.parse(JSON.stringify(e))}function Ve(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Te(e){return typeof e=="string"&&e.length>0}function ca(e,t,n){if(typeof e=="function"){n.push(de("callbacks-forbidden","authored sequences must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>ca(r,`${t}[${i}]`,n));return}if(Ve(e))for(let[r,i]of Object.entries(e))ca(i,t?`${t}.${r}`:r,n)}function Ln(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function vt(){return{version:1,fields:{sequenceId:{type:"string"},invocationId:{type:"string"},idempotencyKey:{type:"string"},stepId:{type:"string",optional:!0},fallbackId:{type:"string",optional:!0},reason:{type:"string",optional:!0}}}}function St(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function yh(){return[St(fe(co,vt())),St(fe(uo,vt())),St(fe(lo,vt())),St(fe(po,vt())),St(fe(fo,vt())),St(fe(mo,vt())),St(fe(yo,vt())),St(fe(go,vt())),St(fe(ua,vt())),St(fe(ho,vt())),St(Ye(la,vt()))]}function dl(e){return typeof e=="string"&&fh.has(e)}function gh(e){if(e)return"timeline"in e?e.timeline:e}function hh(e,t,n){return n?!t||t==="skip"||t==="complete"?0:t.durationFrames:e}function bh(e,t){return(e.kind==="relative"||e.kind==="simultaneous"?e.delayFrames??0:0)+t}function vh(e,t,n){if(!Ve(e)||!Te(e.kind)){n.push(de("invalid-timing","timing.kind is required",t));return}if(e.kind==="absolute"){Ln(e.atFrame)||n.push(de("invalid-timing","timing.atFrame must be >= 0",t));return}if(e.kind==="relative"){e.afterStepId!==void 0&&!Te(e.afterStepId)&&n.push(de("invalid-timing","timing.afterStepId must be a string",t)),e.delayFrames!==void 0&&!Ln(e.delayFrames)&&n.push(de("invalid-timing","timing.delayFrames must be >= 0",t));return}if(e.kind==="simultaneous"){Te(e.withStepId)||n.push(de("invalid-timing","timing.withStepId is required",t)),e.order!==void 0&&!Ln(e.order)&&n.push(de("invalid-timing","timing.order must be >= 0",t)),e.delayFrames!==void 0&&!Ln(e.delayFrames)&&n.push(de("invalid-timing","timing.delayFrames must be >= 0",t));return}n.push(de("invalid-timing",`unsupported timing.kind "${String(e.kind)}"`,t))}function Sh(e,t,n,r){if(!Ve(e)||!Te(e.kind)){r.push(de("invalid-effect","effect.kind is required",n));return}e.kind!==t&&r.push(de("kind-mismatch",`effect.kind "${e.kind}" must match track kind "${t}"`,n)),e.kind==="audio"&&!Te(e.assetBinding)&&r.push(de("invalid-effect","assetBinding is required",n)),e.kind==="caption"&&(Te(e.textBinding)||r.push(de("invalid-effect","textBinding is required",n)),typeof e.visible!="boolean"&&r.push(de("invalid-effect","visible must be boolean",n))),e.kind==="semantic-region"&&(Te(e.regionBinding)||r.push(de("invalid-effect","regionBinding is required",n)),Ve(e.state)||r.push(de("invalid-effect","state is required",n))),e.kind==="visual-layer"&&(Te(e.layerBinding)||r.push(de("invalid-effect","layerBinding is required",n)),e.transition!=="show"&&e.transition!=="hide"&&r.push(de("invalid-effect","transition must be show or hide",n))),e.kind==="cue"&&!Te(e.name)&&r.push(de("invalid-effect","cue name is required",n))}function Eh(e){let t=new Map;for(let n of e.tracks)for(let r of n.steps)t.set(r.id,{track:n,step:r});return t}function Pr(e){let t=[];if(ca(e,"",t),!Ve(e))return{ok:!1,errors:[de("invalid-definition","sequence must be a JSON object")]};if(Te(e.id)||t.push(de("invalid-id","id is required","id")),!Array.isArray(e.tracks)||e.tracks.length===0)return t.push(de("invalid-tracks","tracks must be a non-empty array","tracks")),{ok:!1,errors:t};let n=e.interruptionPolicy??"replace";uh.has(String(n))||t.push(de("invalid-policy","unsupported interruptionPolicy","interruptionPolicy"));let r=new Set,i=new Set,o=[];e.tracks.forEach((p,k)=>{let E=`tracks[${k}]`;if(!Ve(p)){t.push(de("invalid-track","track must be an object",E));return}if(!Te(p.id)){t.push(de("invalid-track","track id is required",`${E}.id`));return}if(i.has(p.id)&&t.push(de("duplicate-track",`duplicate track id "${p.id}"`,E)),i.add(p.id),!ch.has(String(p.kind))){t.push(de("invalid-kind","unsupported track kind",`${E}.kind`));return}if(!Array.isArray(p.steps)||p.steps.length===0){t.push(de("invalid-steps","track steps are required",`${E}.steps`));return}let C=[];p.steps.forEach((_,g)=>{let T=`${E}.steps[${g}]`;if(!Ve(_)){t.push(de("invalid-step","step must be an object",T));return}if(!Te(_.id)){t.push(de("invalid-step","step id is required",`${T}.id`));return}r.has(_.id)&&t.push(de("duplicate-step",`duplicate step id "${_.id}"`,T)),r.add(_.id),Ln(_.durationFrames)||t.push(de("invalid-duration","durationFrames must be >= 0",`${T}.durationFrames`)),_.delayFrames!==void 0&&!Ln(_.delayFrames)&&t.push(de("invalid-delay","delayFrames must be >= 0",`${T}.delayFrames`)),_.completion!==void 0&&!lh.has(String(_.completion))&&t.push(de("invalid-completion","unsupported completion rule",`${T}.completion`)),vh(_.timing,`${T}.timing`,t),Sh(_.effect,String(p.kind),`${T}.effect`,t),C.push(Le(_))}),o.push({id:p.id,kind:p.kind,steps:C})});let s=[],a=new Set;e.fallbacks!==void 0&&(Array.isArray(e.fallbacks)?e.fallbacks.forEach((p,k)=>{let E=`fallbacks[${k}]`;if(!Ve(p)||!Te(p.id)){t.push(de("invalid-fallback","fallback id is required",E));return}a.has(p.id)&&t.push(de("duplicate-fallback",`duplicate fallback id "${p.id}"`,E)),a.add(p.id);let C=p.when;if((!Ve(C)||C.capability!=="audio"||!ph.has(String(C.status)))&&t.push(de("invalid-fallback","unsupported fallback.when",`${E}.when`)),p.omitTrackIds!==void 0)if(!Array.isArray(p.omitTrackIds))t.push(de("invalid-fallback","omitTrackIds must be an array",E));else for(let _ of p.omitTrackIds)i.has(String(_))||t.push(de("unknown-track",`omitTrackIds references unknown track "${String(_)}"`,E));s.push(Le(p))}):t.push(de("invalid-fallbacks","fallbacks must be an array","fallbacks")));let c={id:String(e.id??""),tracks:o,interruptionPolicy:n,fallbacks:s},f=Eh(c);for(let{step:p}of f.values())p.timing.kind==="relative"&&p.timing.afterStepId&&(f.has(p.timing.afterStepId)||t.push(de("unknown-step",`afterStepId "${p.timing.afterStepId}" does not exist`,`steps.${p.id}`))),p.timing.kind==="simultaneous"&&!f.has(p.timing.withStepId)&&t.push(de("unknown-step",`withStepId "${p.timing.withStepId}" does not exist`,`steps.${p.id}`));return t.length>0?{ok:!1,errors:t}:{ok:!0,sequence:Le(c)}}function tl(e,t,n,r){let i=[];for(let p of e.tracks)if(!t.has(p.id))for(let k of p.steps)i.push({track:p,step:k});let o=new Map(i.map(p=>[p.step.id,p])),s=new Map,a=new Set;function c(p){let k=s.get(p);if(k!==void 0)return k;let E=o.get(p);if(!E||a.has(p))return n;a.add(p);let C=bh(E.step.timing,E.step.delayFrames??0),_=n+C;if(E.step.timing.kind==="absolute")_=n+E.step.timing.atFrame+(E.step.delayFrames??0);else if(E.step.timing.kind==="relative"&&E.step.timing.afterStepId){let g=o.get(E.step.timing.afterStepId);if(g){let T=c(g.step.id),V=f(g.step);_=T+V+C}}else E.step.timing.kind==="simultaneous"&&(_=c(E.step.timing.withStepId)+C);return a.delete(p),s.set(p,_),_}function f(p){return p.completion==="immediate"?0:hh(p.durationFrames,p.reducedMotion,r)}return i.map(({track:p,step:k})=>{let E=c(k.id),C=f(k),_=k.timing.kind==="simultaneous"?k.timing.order??0:0;return{id:k.id,trackId:p.id,trackKind:p.kind,order:_,startFrame:E,durationFrames:C,endFrame:E+C,effect:Le(k.effect),restoreOnComplete:k.restoreOnComplete===!0,reducedSensory:k.reducedSensory??"keep"}}).sort(cl)}function cl(e,t){return e.startFrame!==t.startFrame?e.startFrame-t.startFrame:e.order!==t.order?e.order-t.order:e.trackId!==t.trackId?e.trackId<t.trackId?-1:1:e.id<t.id?-1:e.id>t.id?1:0}function Gt(e,t){if(!t)return;let n=e?.[t];return Te(n)?n:void 0}function kh(e,t){let n=e.snapshot().events;for(let r=n.length-1;r>=0;r--){let i=n[r];if(i&&i.idempotencyKey===t&&i.type===Xt)return i.reason??"asset-failed"}}function Ih(e,t,n,r){if(!t.tracks.some(s=>s.kind==="audio"))return"ok";if(!e)return"unavailable";let o=(r&&"broker"in r?r:void 0)?.broker;if(o?.muted)return"muted";for(let s of t.tracks)if(s.kind==="audio")for(let a of s.steps){if(a.effect.kind!=="audio")continue;let c=Gt(n.assets,a.effect.assetBinding);if(!c)continue;let f=Gt(n.channels,a.effect.channelBinding);if(o&&!o.isAuthorized(f)&&o.inspect().authorized.length>0)return"unauthorized";if(o?.assetStatus(c)==="failed")return"failed"}return"ok"}function pa(e={}){let t=e.originFrame??0,n=!!e.reducedMotion,r=!!e.reducedSensory,i=e.semantic,o=e.visual,s=gh(e.audio),a=e.audio,c=new Map,f=Ct({originFrame:t,reducedMotion:n}),p=t,k=!1,E=!1,C=null,_=null,g=[],T=new Map,V=[],G=new Map;for(let b of e.sequences??[]){let S=Pr(b);S.ok&&c.set(S.sequence.id,S.sequence)}function w(){if(E)throw new Error(mh)}function M(b){V.push(Le(b))}function A(b,S,N){let $={type:S,atFrame:p,sequenceId:b.sequenceId,invocationId:b.invocationId,idempotencyKey:b.idempotencyKey};N?.stepId&&($.stepId=N.stepId),b.selectedFallbackId&&($.fallbackId=b.selectedFallbackId),N?.reason&&($.reason=N.reason),M($)}function u(b){let S=[...b.steps.values()].filter($=>$.phase==="completed").map($=>$.resolved.id).sort(),N=[...b.steps.values()].filter($=>$.phase==="active").map($=>$.resolved.id).sort();return{sequenceId:b.sequenceId,invocationId:b.invocationId,idempotencyKey:b.idempotencyKey,phase:b.phase,playhead:Math.max(0,p-b.startedAtFrame),startedAtFrame:b.startedAtFrame,completedStepIds:S,activeStepIds:N,selectedFallbackId:b.selectedFallbackId,compiledReducedMotion:b.compiledReducedMotion}}function v(b,S){return cl(b.resolved,S.resolved)}function d(b,S){return`${b.invocationId}:${S}`}function l(b,S){return`${b.invocationId}:${S}`}function m(b){if(b.audioKey&&s?.cancel(b.audioKey),b.captionId){let S=T.get(b.captionId);S&&T.set(b.captionId,{...S,visible:!1})}if(b.regionId&&b.regionKeys&&i){let S={};for(let N of b.regionKeys)S[N]=!1;i.setRegionState(b.regionId,S)}b.visualLayerId&&o&&b.visualTransition==="hide"?o.play({name:`sequence:${b.visualLayerId}:restore`,idempotencyKey:`sequence:${b.visualLayerId}:restore:${p}`,layerId:b.visualLayerId,kind:"show",toVersion:b.visualVersion,durationFrames:0,onDuplicate:"replace"}):b.visualLayerId&&o&&b.visualTransition==="show"&&o.play({name:`sequence:${b.visualLayerId}:restore`,idempotencyKey:`sequence:${b.visualLayerId}:restore:${p}`,layerId:b.visualLayerId,kind:"hide",durationFrames:0,onDuplicate:"replace"}),b.cueKey&&f.cancel(b.cueKey)}function I(b,S){let{resolved:N}=S,$={},Q=r||N.reducedSensory==="skip-audio"||N.reducedSensory==="complete";if(N.effect.kind==="audio"){let J=Gt(b.bindings.assets,N.effect.assetBinding);if(J&&s&&!Q){let ne=l(b,N.id);s.play({name:N.id,idempotencyKey:ne,assetId:J,channelId:Gt(b.bindings.channels,N.effect.channelBinding),durationFrames:N.durationFrames,onDuplicate:"replace"}),$.audioKey=ne,kh(s,ne)&&(S.applied=$,R(b,"failed"),s.cancel(ne),$.audioKey=void 0)}}else if(N.effect.kind==="caption"){let J=Gt(b.bindings.captions,N.effect.textBinding)??"",ne=d(b,N.effect.textBinding);T.set(ne,{id:ne,text:J,visible:N.effect.visible}),$.captionId=ne}else if(N.effect.kind==="semantic-region"){let J=Gt(b.bindings.regions,N.effect.regionBinding);J&&i&&(i.setRegionState(J,N.effect.state),$.regionId=J,$.regionKeys=["hover","focus","selected"].filter(ne=>N.effect.kind==="semantic-region"&&N.effect.state[ne]!==void 0))}else if(N.effect.kind==="visual-layer"){let J=Gt(b.bindings.layers,N.effect.layerBinding),ne=Gt(b.bindings.versions,N.effect.versionBinding);J&&o&&(o.play({name:`sequence:${N.id}`,idempotencyKey:l(b,N.id),layerId:J,kind:N.effect.transition,toVersion:N.effect.transition==="hide"?void 0:ne,durationFrames:N.durationFrames,onDuplicate:"replace"}),$.visualLayerId=J,$.visualVersion=ne??o.inspect().find(ie=>ie.id===J)?.committedVersion??void 0,$.visualTransition=N.effect.transition)}else if(N.effect.kind==="cue"){let J=l(b,N.id);f.play({name:N.effect.name,idempotencyKey:J,durationFrames:N.durationFrames,easing:N.effect.easing,onDuplicate:"replace"}),$.cueKey=J}S.applied=$}function O(b,S,N){if(S.phase==="active"){if(N){S.applied&&m(S.applied),S.phase="skipped";return}S.resolved.restoreOnComplete&&S.applied?m(S.applied):S.applied?.audioKey&&S.resolved.effect.kind,S.phase="completed",A(b,mo,{stepId:S.resolved.id})}}function R(b,S){let N=c.get(b.sequenceId);if(!N)return!1;let $=(N.fallbacks??[]).find(J=>J.when.capability==="audio"&&J.when.status===S);if(!$)return!1;if(b.selectedFallbackId===$.id)return!0;b.selectedFallbackId=$.id;let Q=new Set($.omitTrackIds??[]);for(let J of b.steps.values())Q.has(J.resolved.trackId)&&(J.phase==="pending"?J.phase="skipped":J.phase==="active"&&O(b,J,!0));return!0}function B(b){let S=[...b.steps.values()].filter(N=>N.phase==="pending"&&N.resolved.startFrame<=p).sort(v);for(let N of S)N.phase="active",A(b,fo,{stepId:N.resolved.id}),I(b,N),N.resolved.durationFrames===0&&N.phase==="active"&&O(b,N,!1)}function K(b){let S=[...b.steps.values()].filter(N=>N.phase==="active"&&p>=N.resolved.endFrame).sort(v);for(let N of S)O(b,N,!1)}function P(b){return b.phase==="playing"||b.phase==="paused"||b.phase==="ready"||b.phase==="preloading"||b.phase==="requested"}function h(b){!P(b)||[...b.steps.values()].some(N=>N.phase==="pending"||N.phase==="active")||(b.phase="completed",b.nextAvailable=!0,A(b,ho),C===b&&(C=null,k=!1),Z())}function x(b,S){for(let N of[...b.steps.values()].sort(v))N.phase==="active"?O(b,N,!0):N.phase==="pending"&&(N.phase="skipped")}function L(b,S,N,$,Q=p,J=n){let ne=tl(b,$,Q,J),ie=new Map;for(let Oe of ne)ie.set(Oe.id,{resolved:Oe,phase:"pending",applied:null});return{sequenceId:b.id,invocationId:S.invocationId,idempotencyKey:S.idempotencyKey??S.invocationId,bindings:Le(S.bindings??{}),interruptionPolicy:b.interruptionPolicy??"replace",selectedFallbackId:N,phase:"requested",startedAtFrame:p,steps:ie,nextAvailable:!1,compiledReducedMotion:J}}function H(b,S){if(!Te(S.invocationId))return{ok:!1,reason:"invalid",detail:"invocationId is required"};let N=S.idempotencyKey??S.invocationId;if(G.get(N)&&C&&C.idempotencyKey===N)return{ok:!0,invocation:u(C)};let Q=S.bindings??{};M({type:co,atFrame:p,sequenceId:b.id,invocationId:S.invocationId,idempotencyKey:N});let J={sequenceId:b.id,invocationId:S.invocationId,idempotencyKey:N,bindings:Le(Q),interruptionPolicy:b.interruptionPolicy??"replace",selectedFallbackId:null,phase:"preloading",startedAtFrame:p,steps:new Map,nextAvailable:!1,compiledReducedMotion:n};A(J,uo);let ie=Ih(s,b,Q,a),Oe=null,Re=new Set;if(ie!=="ok"){let ae=(b.fallbacks??[]).find(D=>D.when.capability==="audio"&&D.when.status===ie);if(ae){Oe=ae.id;for(let D of ae.omitTrackIds??[])Re.add(D)}else if(ie==="unavailable"||ie==="failed")for(let D of b.tracks)D.kind==="audio"&&Re.add(D.id)}if(r)for(let ae of b.tracks)ae.kind==="audio"&&Re.add(ae.id);let Ae=L(b,{...S,idempotencyKey:N},Oe,Re);return Ae.phase="ready",A(Ae,lo),Ae.phase="playing",A(Ae,po),C=Ae,_={sequenceId:b.id,options:{...S,idempotencyKey:N}},G.set(N,Ae.invocationId),K(Ae),B(Ae),h(Ae),{ok:!0,invocation:u(Ae)}}function q(b){if(!C||!P(C))return;let S=C;x(S,!0),S.phase="interrupted",S.nextAvailable=!0,A(S,go,{reason:b}),C=null,k=!1}function Z(){if(C||k)return;let b=g.shift();if(!b)return;let S=c.get(b.sequenceId);S&&H(S,b.options)}function X(b,S){let N=new Set;if(S){let $=(b.fallbacks??[]).find(Q=>Q.id===S);for(let Q of $?.omitTrackIds??[])N.add(Q)}return tl(b,N,t,n).map($=>({sequenceId:b.id,stepId:$.id,trackId:$.trackId,kind:$.trackKind,startFrame:$.startFrame,durationFrames:$.durationFrames,order:$.order,effect:Le($.effect)}))}function W(){return Le({schemaVersion:da,frame:p,reducedMotion:n,reducedSensory:r,paused:k,active:C?u(C):null,queue:g.map(b=>({sequenceId:b.sequenceId,invocationId:b.options.invocationId,idempotencyKey:b.options.idempotencyKey??b.options.invocationId,bindings:Le(b.options.bindings??{})})),captions:[...T.values()].sort((b,S)=>b.id<S.id?-1:1),events:V.map(b=>Le(b)),bindings:C?Le(C.bindings):null})}function y(b){for(let S of[...b.steps.values()].sort(v)){if(S.phase!=="active")continue;let N=Math.max(0,S.resolved.endFrame-p);S.resolved={...S.resolved,durationFrames:N,endFrame:p+N},I(b,S)}}return{define(b){w();let S=Pr(b);return S.ok&&c.set(S.sequence.id,S.sequence),S},playSequence(b,S){w();let N=c.get(b);if(!N)return{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${b}"`};let $=S.idempotencyKey??S.invocationId;if(C&&P(C)&&C.idempotencyKey===$)return{ok:!0,invocation:u(C)};if(C&&P(C)){let Q=C.interruptionPolicy;if(Q==="reject")return{ok:!1,reason:"busy",detail:"sequence is already playing"};if(Q==="ignore")return{ok:!0,invocation:u(C)};if(Q==="queue")return g.push({sequenceId:b,options:{...S,idempotencyKey:$}}),{ok:!0,invocation:{sequenceId:b,invocationId:S.invocationId,idempotencyKey:$,phase:"requested",playhead:0,startedAtFrame:p,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n}};q("replace")}return H(N,{...S,idempotencyKey:$})},skip(b){if(w(),!C||!P(C)||b&&C.invocationId!==b)return!1;let S=C;return x(S,!0),S.phase="skipped",S.nextAvailable=!0,A(S,yo),C=null,k=!1,Z(),!0},replay(b){w();let S=C&&P(C)?C:null,N=S?{sequenceId:S.sequenceId,options:{invocationId:S.invocationId,idempotencyKey:S.idempotencyKey,bindings:Le(S.bindings)}}:_;if(!N)return{ok:!1,reason:"invalid",detail:"no sequence to replay"};if(b&&N.options.invocationId!==b)return{ok:!1,reason:"invalid",detail:"unknown invocation"};let $=c.get(N.sequenceId);return $?(G.delete(N.options.idempotencyKey??N.options.invocationId),S&&(x(S,!0),C=null,k=!1),H($,N.options)):{ok:!1,reason:"unknown-sequence",detail:`unknown sequence "${N.sequenceId}"`}},pause(){return w(),!C||C.phase!=="playing"?!1:(k=!0,C.phase="paused",!0)},resume(){return w(),!C||C.phase!=="paused"?!1:(k=!1,C.phase="playing",!0)},cancel(b){return w(),!C||!P(C)||b&&C.invocationId!==b?!1:(q("cancel"),Z(),!0)},step(b=1){w();let S=Number.isFinite(b)?Math.max(0,Math.floor(b)):0,N=V.length;if(k)return[];for(let $=0;$<S;$++)p+=1,f.step(1),s?.step(1),o?.step(1),C&&P(C)?(K(C),B(C),h(C)):Z();return V.slice(N).map($=>Le($))},snapshot(){return w(),W()},restore(b){w();let S={frame:p,paused:k,active:C,queue:g.slice(),captions:new Map(T),events:V.slice(),seenKeys:new Map(G),presentation:f,reducedMotion:n,reducedSensory:r},N=ie=>{p=S.frame,k=S.paused,C=S.active,g.length=0,g.push(...S.queue),T.clear();for(let[Oe,Re]of S.captions)T.set(Oe,Re);V.length=0,V.push(...S.events),G.clear();for(let[Oe,Re]of S.seenKeys)G.set(Oe,Re);return f=S.presentation,n=S.reducedMotion,r=S.reducedSensory,{ok:!1,errors:ie}},$=b;if(typeof b=="string")try{$=JSON.parse(b)}catch{return N([de("invalid-json","snapshot JSON is invalid")])}if(!Ve($))return N([de("invalid-snapshot","snapshot must be a JSON object")]);let Q=[];$.schemaVersion!==da&&Q.push(de("unsupported-schema","unsupported presentation sequence snapshot schema")),(typeof $.frame!="number"||!Number.isFinite($.frame))&&Q.push(de("invalid-snapshot","frame must be finite","frame"));let J=$.active;if(J!=null&&(!Ve(J)||!Te(J.sequenceId)?Q.push(de("invalid-snapshot","active.sequenceId is required","active")):c.has(J.sequenceId)||Q.push(de("unknown-sequence",`unknown sequence "${J.sequenceId}"`,"active.sequenceId"))),$.queue!==void 0&&(Array.isArray($.queue)?$.queue.forEach((ie,Oe)=>{let Re=`queue[${Oe}]`;if(!Ve(ie)||!Te(ie.sequenceId)){Q.push(de("invalid-snapshot","queue item sequenceId is required",Re));return}c.has(ie.sequenceId)||Q.push(de("unknown-sequence",`unknown sequence "${ie.sequenceId}"`,Re)),Te(ie.invocationId)||Q.push(de("invalid-snapshot","queue item invocationId is required",Re))}):Q.push(de("invalid-snapshot","queue must be an array","queue"))),Q.length>0)return N(Q);let ne=$.frame;if(typeof ne!="number"||!Number.isFinite(ne))return N([de("invalid-snapshot","frame must be finite","frame")]);try{if(C&&P(C)&&x(C,!0),T.clear(),g.length=0,V.length=0,G.clear(),k=$.paused===!0,p=ne,typeof $.reducedMotion=="boolean"&&(n=$.reducedMotion),typeof $.reducedSensory=="boolean"&&(r=$.reducedSensory),f=Ct({originFrame:p,reducedMotion:!1}),Array.isArray($.events))for(let ie of $.events)Ve(ie)&&dl(ie.type)&&V.push(Le(ie));if(Array.isArray($.captions))for(let ie of $.captions)Ve(ie)&&Te(ie.id)&&T.set(ie.id,{id:ie.id,text:typeof ie.text=="string"?ie.text:"",visible:ie.visible===!0});if(Array.isArray($.queue))for(let ie of $.queue)!Ve(ie)||!Te(ie.sequenceId)||!Te(ie.invocationId)||c.has(ie.sequenceId)&&g.push({sequenceId:ie.sequenceId,options:{invocationId:ie.invocationId,idempotencyKey:Te(ie.idempotencyKey)?ie.idempotencyKey:ie.invocationId,bindings:Ve(ie.bindings)?Le(ie.bindings):{}}});if(C=null,Ve(J)&&Te(J.sequenceId)){let ie=c.get(J.sequenceId),Oe=typeof J.compiledReducedMotion=="boolean"?J.compiledReducedMotion:n,Re=al.includes(J.phase)?J.phase:"playing";if(Re==="skipped"||Re==="completed"||Re==="interrupted"||Re==="failed"){let Ae=typeof J.startedAtFrame=="number"?J.startedAtFrame:t,ae=L(ie,{invocationId:String(J.invocationId),idempotencyKey:String(J.idempotencyKey??J.invocationId),bindings:Ve($.bindings)?Le($.bindings):{}},Te(J.selectedFallbackId)?J.selectedFallbackId:null,new Set(Re==="skipped"?ie.tracks.map(D=>D.id):[]),Ae,Oe);ae.phase=Re,ae.startedAtFrame=Ae;for(let D of ae.steps.values())D.phase="skipped";ae.nextAvailable=!0,C=null,G.set(ae.idempotencyKey,ae.invocationId)}else{let Ae=new Set,ae=Te(J.selectedFallbackId)?J.selectedFallbackId:null;if(ae){let te=(ie.fallbacks??[]).find(oe=>oe.id===ae);for(let oe of te?.omitTrackIds??[])Ae.add(oe)}let D=L(ie,{invocationId:String(J.invocationId),idempotencyKey:String(J.idempotencyKey??J.invocationId),bindings:Ve($.bindings)?Le($.bindings):{}},ae,Ae,typeof J.startedAtFrame=="number"?J.startedAtFrame:t,Oe);D.phase=k?"paused":"playing",D.startedAtFrame=typeof J.startedAtFrame=="number"?J.startedAtFrame:t;let U=new Set(Array.isArray(J.completedStepIds)?J.completedStepIds.filter(te=>typeof te=="string"):[]),re=new Set(Array.isArray(J.activeStepIds)?J.activeStepIds.filter(te=>typeof te=="string"):[]);for(let te of D.steps.values())U.has(te.resolved.id)?te.phase="completed":re.has(te.resolved.id)||te.resolved.startFrame<=p?te.resolved.endFrame<=p?te.phase="completed":te.phase="active":te.phase="pending";C=D,G.set(D.idempotencyKey,D.invocationId),y(D)}}return f.setReducedMotion(n),{ok:!0,snapshot:W()}}catch(ie){return N([de("restore-failed",ie instanceof Error?ie.message:String(ie))])}},inspect(){w();let b=C?c.get(C.sequenceId):void 0;return{frame:p,paused:k,reducedMotion:n,reducedSensory:r,active:C?u(C):null,queue:g.map(S=>({sequenceId:S.sequenceId,invocationId:S.options.invocationId,idempotencyKey:S.options.idempotencyKey??S.options.invocationId,phase:"requested",playhead:0,startedAtFrame:p,completedStepIds:[],activeStepIds:[],selectedFallbackId:null,compiledReducedMotion:n})),captions:[...T.values()].sort((S,N)=>S.id<N.id?-1:1),cueIntent:b?X(b,C?.selectedFallbackId??void 0):[]}},inspectCueIntent(b,S){w();let N=c.get(b);return N?X(N,S?.fallbackId):[]},get(b){w();let S=c.get(b);return S?Le(S):void 0},destroy(){E||(C&&P(C)&&x(C,!0),E=!0,C=null,g.length=0,T.clear(),V.length=0)},setReducedMotion(b){w(),n=!!b,f.setReducedMotion(n)},get frame(){return p},get reducedMotion(){return n},get reducedSensory(){return r}}}var ya=1,bo=1,ko="presentation.binding.state.applied",Tr="presentation.binding.state.rejected",wr="presentation.binding.diagnostic.lifecycle",fl=[ko,Tr,wr],ml=["visual-layer","presence","prop","semantic-region","hotspot","sequence","asset"],yl=["invalid-manifest","invalid-schema","invalid-version","invalid-id","unknown-field","unknown-resource","unknown-selector","duplicate-id","duplicate-priority","uncovered-default","impossible-target","callbacks-forbidden","invalid-predicate","invalid-projection","invalid-snapshot","destroyed"],Rh=new Set(ml),Ch=new Set(fl),Ah=new Set(yl),Ph="Presentation binding runtime has been destroyed",ga=/^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$/,Th=new Set(["show","hide","replace"]),wh=new Set(["id","schemaVersion","bindings","defaults","resources"]),xh=new Set(["id","priority","when","targets"]),_h=new Set(["layers","versions","regions","sequences","hotspots","entities","props","assets"]),Oh=new Set(["labels","reducedSensory","reducedMotion"]);function ee(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function rt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function xe(e){return typeof e=="string"&&e.length>0}function Be(e){return JSON.parse(JSON.stringify(e))}function Eo(e,t,n){if(typeof e=="function"){n.push(ee("callbacks-forbidden","authored bindings must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Eo(r,`${t}[${i}]`,n));return}if(rt(e))for(let[r,i]of Object.entries(e))Eo(i,t?`${t}.${r}`:r,n)}function We(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(ee("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function ul(e){return e===null||typeof e=="string"||typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean"}function fa(){return{version:1,fields:{manifestId:{type:"string"},revision:{type:"string",optional:!0},selectedBindingIds:{type:"array",optional:!0},reason:{type:"string",optional:!0},usedFallback:{type:"boolean",optional:!0}}}}function ma(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Dh(e){return typeof e=="string"&&Ch.has(e)}function Nh(e){return typeof e=="string"&&Ah.has(e)}function Mh(){return[ma(fe(ko,fa())),ma(fe(Tr,fa())),ma(Ye(wr,fa()))]}function Ot(e){switch(e.kind){case"visual-layer":return`visual-layer:${e.layerId}`;case"presence":return`presence:${e.entityId}`;case"prop":return`prop:${e.propId}`;case"semantic-region":return`semantic-region:${e.regionId}`;case"hotspot":return`hotspot:${e.hotspotId}`;case"sequence":return`sequence:${e.sequenceId}`;case"asset":return`asset:${e.bindingId}`}}function Lh(e){if(e==null)return"missing";if(!rt(e))return"invalid";let t=[];if(Eo(e,"",t),t.length>0)return"invalid";try{return Be(e)}catch{return"invalid"}}function Vh(e,t){if(!ga.test(t))return{found:!1,value:void 0};let n=e;for(let r of t.split(".")){if(!rt(n)||!Object.prototype.hasOwnProperty.call(n,r))return{found:!1,value:void 0};n=n[r]}return{found:!0,value:n}}function Bh(e,t){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=e[t];return typeof n=="function"?n:void 0}function vo(e,t,n){if("all"in e){for(let i of e.all){let o=vo(i,t,n);if(!o.ok)return o}return{ok:!0}}if("any"in e){let i={ok:!1,detail:"no alternative matched"};for(let o of e.any){let s=vo(o,t,n);if(s.ok)return s;i=s}return i}if("not"in e){let i=vo(e.not,t,n);return{ok:!i.ok,detail:i.ok?"negation failed":void 0}}if("selector"in e){let i=Bh(n,e.selector);if(!i)return{ok:!1,detail:`unknown selector "${e.selector}"`};try{return{ok:!!i(t)}}catch(o){return{ok:!1,detail:o instanceof Error?o.message:"selector threw"}}}let r=Vh(t,e.path);return"present"in e?{ok:(r.found&&r.value!==null&&r.value!==void 0)===e.present}:"neq"in e?r.found?{ok:r.value!==e.neq}:{ok:!0,detail:"path missing"}:r.found?{ok:r.value===e.eq}:{ok:!1,detail:`missing path "${e.path}"`}}function So(e,t,n){if(!rt(e)){n.push(ee("invalid-predicate","predicate must be an object",t));return}if("all"in e||"any"in e||"not"in e){if("all"in e){if(We(e,new Set(["all"]),t,n),!Array.isArray(e.all)||e.all.length===0){n.push(ee("invalid-predicate","all requires a non-empty array",`${t}.all`));return}return{all:e.all.map((a,c)=>So(a,`${t}.all[${c}]`,n)).filter(a=>!!a)}}if("any"in e){if(We(e,new Set(["any"]),t,n),!Array.isArray(e.any)||e.any.length===0){n.push(ee("invalid-predicate","any requires a non-empty array",`${t}.any`));return}return{any:e.any.map((a,c)=>So(a,`${t}.any[${c}]`,n)).filter(a=>!!a)}}We(e,new Set(["not"]),t,n);let o=So(e.not,`${t}.not`,n);return o?{not:o}:void 0}if("selector"in e){if(We(e,new Set(["selector"]),t,n),!xe(e.selector)){n.push(ee("invalid-predicate","selector is required",`${t}.selector`));return}return{selector:e.selector}}if(We(e,new Set(["path","eq","neq","present"]),t,n),(!xe(e.path)||!ga.test(e.path))&&n.push(ee("invalid-predicate","path must be a dotted identifier",`${t}.path`)),[e.eq!==void 0,e.neq!==void 0,e.present!==void 0].filter(Boolean).length!==1){n.push(ee("invalid-predicate","predicate needs exactly one of eq, neq, or present",t));return}if(!(!xe(e.path)||!ga.test(e.path))){if(e.present!==void 0){if(typeof e.present!="boolean"){n.push(ee("invalid-predicate","present must be a boolean",`${t}.present`));return}return{path:e.path,present:e.present}}if(e.neq!==void 0){if(!ul(e.neq)){n.push(ee("invalid-predicate","neq must be a JSON primitive",`${t}.neq`));return}return{path:e.path,neq:e.neq}}if(!ul(e.eq)){n.push(ee("invalid-predicate","eq must be a JSON primitive",`${t}.eq`));return}return{path:e.path,eq:e.eq}}}function Fh(e,t,n){if(e===void 0)return;if(!rt(e)){n.push(ee("impossible-target","region state must be an object",t));return}We(e,new Set(["hover","focus","selected"]),t,n);let r={};for(let i of["hover","focus","selected"]){let o=e[i];if(o!==void 0){if(typeof o!="boolean"){n.push(ee("impossible-target",`${i} must be a boolean`,`${t}.${i}`));continue}r[i]=o}}return r}function ha(e,t,n,r){if(!rt(e)){n.push(ee("impossible-target","target must be an object",t));return}if(!Rh.has(String(e.kind))){n.push(ee("impossible-target",`unsupported target kind "${String(e.kind)}"`,`${t}.kind`));return}let i=e.kind;if(i==="visual-layer"){if(We(e,new Set(["kind","layerId","version","transition"]),t,n),!xe(e.layerId)){n.push(ee("impossible-target","layerId is required",`${t}.layerId`));return}if(!xe(e.version)){n.push(ee("impossible-target","version is required",`${t}.version`));return}e.transition!==void 0&&!Th.has(String(e.transition))&&n.push(ee("impossible-target","transition must be show, hide, or replace",`${t}.transition`)),r?.layers&&!r.layers.includes(e.layerId)&&n.push(ee("unknown-resource",`unknown layer "${e.layerId}"`,`${t}.layerId`));let o=r?.versions?.[e.layerId];o&&!o.includes(e.version)&&n.push(ee("unknown-resource",`unknown version "${e.version}" on "${e.layerId}"`,`${t}.version`));let s={kind:"visual-layer",layerId:e.layerId,version:e.version};return(e.transition==="show"||e.transition==="hide"||e.transition==="replace")&&(s.transition=e.transition),s}if(i==="presence"){if(We(e,new Set(["kind","entityId","present","regionId"]),t,n),!xe(e.entityId)){n.push(ee("impossible-target","entityId is required",`${t}.entityId`));return}if(typeof e.present!="boolean"){n.push(ee("impossible-target","present must be a boolean",`${t}.present`));return}r?.entities&&!r.entities.includes(e.entityId)&&n.push(ee("unknown-resource",`unknown entity "${e.entityId}"`,`${t}.entityId`)),e.regionId!==void 0&&!xe(e.regionId)&&n.push(ee("impossible-target","regionId must be a string",`${t}.regionId`));let o={kind:"presence",entityId:e.entityId,present:e.present};return xe(e.regionId)&&(o.regionId=e.regionId),o}if(i==="prop"){if(We(e,new Set(["kind","propId","visible","layerId"]),t,n),!xe(e.propId)){n.push(ee("impossible-target","propId is required",`${t}.propId`));return}if(typeof e.visible!="boolean"){n.push(ee("impossible-target","visible must be a boolean",`${t}.visible`));return}r?.props&&!r.props.includes(e.propId)&&n.push(ee("unknown-resource",`unknown prop "${e.propId}"`,`${t}.propId`));let o={kind:"prop",propId:e.propId,visible:e.visible};return xe(e.layerId)&&(o.layerId=e.layerId),o}if(i==="semantic-region"){if(We(e,new Set(["kind","regionId","state","hitTestEnabled"]),t,n),!xe(e.regionId)){n.push(ee("impossible-target","regionId is required",`${t}.regionId`));return}r?.regions&&!r.regions.includes(e.regionId)&&n.push(ee("unknown-resource",`unknown region "${e.regionId}"`,`${t}.regionId`)),e.hitTestEnabled!==void 0&&typeof e.hitTestEnabled!="boolean"&&n.push(ee("impossible-target","hitTestEnabled must be a boolean",`${t}.hitTestEnabled`));let o=Fh(e.state,`${t}.state`,n),s={kind:"semantic-region",regionId:e.regionId};return o&&(s.state=o),typeof e.hitTestEnabled=="boolean"&&(s.hitTestEnabled=e.hitTestEnabled),s}if(i==="hotspot"){if(We(e,new Set(["kind","hotspotId","enabled","regionId"]),t,n),!xe(e.hotspotId)){n.push(ee("impossible-target","hotspotId is required",`${t}.hotspotId`));return}if(typeof e.enabled!="boolean"){n.push(ee("impossible-target","enabled must be a boolean",`${t}.enabled`));return}r?.hotspots&&!r.hotspots.includes(e.hotspotId)&&n.push(ee("unknown-resource",`unknown hotspot "${e.hotspotId}"`,`${t}.hotspotId`));let o={kind:"hotspot",hotspotId:e.hotspotId,enabled:e.enabled};return xe(e.regionId)&&(o.regionId=e.regionId),o}if(i==="sequence"){if(We(e,new Set(["kind","sequenceId","play"]),t,n),!xe(e.sequenceId)){n.push(ee("impossible-target","sequenceId is required",`${t}.sequenceId`));return}e.play!==void 0&&typeof e.play!="boolean"&&n.push(ee("impossible-target","play must be a boolean",`${t}.play`)),r?.sequences&&!r.sequences.includes(e.sequenceId)&&n.push(ee("unknown-resource",`unknown sequence "${e.sequenceId}"`,`${t}.sequenceId`));let o={kind:"sequence",sequenceId:e.sequenceId};return typeof e.play=="boolean"&&(o.play=e.play),o}if(We(e,new Set(["kind","bindingId","assetId"]),t,n),!xe(e.bindingId)){n.push(ee("impossible-target","bindingId is required",`${t}.bindingId`));return}if(!xe(e.assetId)){n.push(ee("impossible-target","assetId is required",`${t}.assetId`));return}return r?.assets&&!r.assets.includes(e.assetId)&&n.push(ee("unknown-resource",`unknown asset "${e.assetId}"`,`${t}.assetId`)),{kind:"asset",bindingId:e.bindingId,assetId:e.assetId}}function $h(e,t,n){if(e===void 0)return;if(!rt(e)){n.push(ee("invalid-manifest","resources must be an object",t));return}We(e,_h,t,n);let r={},i=(E,C)=>{if(E!==void 0){if(!Array.isArray(E)||E.some(_=>!xe(_))){n.push(ee("invalid-manifest",`${C} must be a string array`,`${t}.${C}`));return}return E.slice()}},o=i(e.layers,"layers");o&&(r.layers=o);let s=i(e.regions,"regions");s&&(r.regions=s);let a=i(e.sequences,"sequences");a&&(r.sequences=a);let c=i(e.hotspots,"hotspots");c&&(r.hotspots=c);let f=i(e.entities,"entities");f&&(r.entities=f);let p=i(e.props,"props");p&&(r.props=p);let k=i(e.assets,"assets");if(k&&(r.assets=k),e.versions!==void 0)if(!rt(e.versions))n.push(ee("invalid-manifest","versions must be an object",`${t}.versions`));else{let E={};for(let[C,_]of Object.entries(e.versions)){if(!Array.isArray(_)||_.some(g=>!xe(g))){n.push(ee("invalid-manifest",`versions.${C} must be a string array`,`${t}.versions.${C}`));continue}E[C]=_.slice()}r.versions=E}return r}function Io(e){let t=[];if(Eo(e,"",t),!rt(e))return{ok:!1,errors:[ee("invalid-manifest","bindings manifest must be a JSON object")]};We(e,wh,"",t),xe(e.id)||t.push(ee("invalid-id","id is required","id")),e.schemaVersion!==bo&&t.push(ee("invalid-version",`schemaVersion must be ${bo}`,"schemaVersion")),Array.isArray(e.bindings)||t.push(ee("invalid-manifest","bindings must be an array","bindings")),(!Array.isArray(e.defaults)||e.defaults.length===0)&&t.push(ee("uncovered-default","defaults must cover required presentation targets","defaults"));let n=$h(e.resources,"resources",t),r=new Set,i=[];Array.isArray(e.bindings)&&e.bindings.forEach((f,p)=>{let k=`bindings[${p}]`;if(!rt(f)){t.push(ee("invalid-manifest","binding must be an object",k));return}if(We(f,xh,k,t),!xe(f.id)){t.push(ee("invalid-id","binding id is required",`${k}.id`));return}r.has(f.id)&&t.push(ee("duplicate-id",`duplicate binding id "${f.id}"`,`${k}.id`)),r.add(f.id),(typeof f.priority!="number"||!Number.isFinite(f.priority))&&t.push(ee("invalid-manifest","priority must be a finite number",`${k}.priority`));let E=So(f.when,`${k}.when`,t);if(!Array.isArray(f.targets)||f.targets.length===0){t.push(ee("impossible-target","binding targets are required",`${k}.targets`));return}let C=f.targets.map((_,g)=>ha(_,`${k}.targets[${g}]`,t,n)).filter(_=>!!_);!E||typeof f.priority!="number"||!Number.isFinite(f.priority)||i.push({id:f.id,priority:f.priority,when:E,targets:C})});let o=[],s=new Set;Array.isArray(e.defaults)&&e.defaults.forEach((f,p)=>{let k=ha(f,`defaults[${p}]`,t,n);if(!k)return;let E=Ot(k);s.has(E)&&t.push(ee("duplicate-priority",`duplicate default target "${E}"`,`defaults[${p}]`)),s.add(E),o.push(k)});let a=new Map,c=new Set;for(let f of i){let p=new Set;for(let k of f.targets){let E=Ot(k);c.add(E),p.has(E)&&t.push(ee("duplicate-priority",`binding "${f.id}" repeats target "${E}"`,`bindings.${f.id}`)),p.add(E);let C=a.get(E);C||(C=new Map,a.set(E,C));let _=C.get(f.priority);_?t.push(ee("duplicate-priority",`bindings "${_}" and "${f.id}" share priority ${f.priority} on "${E}"`,`bindings.${f.id}`)):C.set(f.priority,f.id)}}for(let f of c)s.has(f)||t.push(ee("uncovered-default",`required target "${f}" has no default`,"defaults"));return t.length>0?{ok:!1,errors:t}:{ok:!0,manifest:Be({id:String(e.id),schemaVersion:bo,bindings:i,defaults:o,...n?{resources:n}:{}})}}function gl(e){return{considered:[],winners:{},rejected:[],fallbacks:[],fallbackReason:e}}function ll(e,t){let n=gl(t==="uncovered-default"?null:t),r=[],i={};for(let o of e.defaults){let s=Ot(o);r.push(Be(o)),i[s]={bindingId:null,target:Be(o)},n.fallbacks.push({targetKey:s,reason:t})}return n.winners=i,{selectedBindingIds:[],targets:r,usedFallback:t!=="uncovered-default",fallbackReason:t==="uncovered-default"?null:t,explanation:n}}function ba(e,t,n={}){let r=Lh(t);if(r==="missing")return ll(e,"missing-state");if(r==="invalid")return ll(e,"invalid-projection");let i=gl(null),o=[];for(let p of e.bindings){let k=vo(p.when,r,n);if(i.considered.push({bindingId:p.id,predicateResult:k.ok,...k.detail?{detail:k.detail}:{}}),k.ok)o.push(p);else for(let E of p.targets)i.rejected.push({bindingId:p.id,targetKey:Ot(E),reason:"predicate-false"})}o.sort((p,k)=>k.priority-p.priority||(p.id<k.id?-1:p.id>k.id?1:0));let s=new Map;for(let p of o)for(let k of p.targets){let E=Ot(k),C=s.get(E);if(!C){s.set(E,{bindingId:p.id,priority:p.priority,target:Be(k)});continue}p.priority<C.priority&&i.rejected.push({bindingId:p.id,targetKey:E,reason:"lower-priority"})}for(let p of e.defaults){let k=Ot(p);s.has(k)||(i.fallbacks.push({targetKey:k,reason:"uncovered-default"}),i.winners[k]={bindingId:null,target:Be(p)})}for(let[p,k]of s)i.winners[p]={bindingId:k.bindingId,target:Be(k.target)};let a=[...new Set([...s.values()].sort((p,k)=>k.priority-p.priority||(p.bindingId<k.bindingId?-1:1)).map(p=>p.bindingId))],c=[],f=new Set;for(let p of e.defaults){let k=Ot(p),E=s.get(k),C=E?E.target:p;f.has(k)||(f.add(k),c.push(Be(C)))}for(let[p,k]of s)f.has(p)||(f.add(p),c.push(Be(k.target)));return{selectedBindingIds:a,targets:c,usedFallback:!1,fallbackReason:null,explanation:i}}function Hh(e,t){let n={},r={},i={},o={},s={},a={},c={},f=t.sequences?.inspect().active;for(let p of e){if(p.kind==="visual-layer"&&(n[p.layerId]=p.version),p.kind==="presence"&&(r[p.entityId]=p.present),p.kind==="prop"&&(i[p.propId]=p.visible),p.kind==="semantic-region"&&(o[p.regionId]={...p.state??{},...p.hitTestEnabled!==void 0?{hitTestEnabled:p.hitTestEnabled}:{}}),p.kind==="hotspot"&&(s[p.hotspotId]=p.enabled),p.kind==="sequence"){let k=p.play!==!1,E=k&&f&&f.sequenceId===p.sequenceId&&(f.phase==="playing"||f.phase==="paused"||f.phase==="requested"||f.phase==="preloading"||f.phase==="ready");a[p.sequenceId]=E?"playing":"idle",k&&E&&(a[p.sequenceId]="playing")}p.kind==="asset"&&(c[p.bindingId]=p.assetId)}return{revision:t.revision,selectedBindingIds:t.selectedBindingIds.slice(),layers:n,presence:r,props:i,regions:o,hotspots:s,sequences:a,assets:c,override:t.override?Be(t.override):null,usedFallback:t.usedFallback,fallbackReason:t.fallbackReason,explanation:t.explanation?Be(t.explanation):null}}function qh(e,t){return e?JSON.stringify(e)===JSON.stringify(t):!1}function pl(e,t){if(e===null)return null;if(e===void 0)return;if(!rt(e)){t.push(ee("invalid-snapshot","override must be an object"));return}We(e,Oh,"override",t);let n={};if(e.reducedSensory!==void 0&&(typeof e.reducedSensory!="boolean"?t.push(ee("invalid-snapshot","reducedSensory must be a boolean","override.reducedSensory")):n.reducedSensory=e.reducedSensory),e.reducedMotion!==void 0&&(typeof e.reducedMotion!="boolean"?t.push(ee("invalid-snapshot","reducedMotion must be a boolean","override.reducedMotion")):n.reducedMotion=e.reducedMotion),e.labels!==void 0)if(!rt(e.labels))t.push(ee("invalid-snapshot","labels must be an object","override.labels"));else{let r={};for(let[i,o]of Object.entries(e.labels)){if(typeof o=="string"){r[i]=o;continue}if(rt(o)&&xe(o.name)&&xe(o.role)){r[i]={name:o.name,role:o.role};continue}t.push(ee("invalid-snapshot",`label "${i}" must be a string or { name, role }`,`override.labels.${i}`))}n.labels=r}return n}function va(e){let t=Io(e.manifest);if(!t.ok)throw new Error(`createPresentationBindingRuntime: ${t.errors.map(P=>P.detail).join("; ")}`);let n=t.manifest,r=e.visual,i=e.semantic,o=e.sequences,s=e.selectors??{},a=!1,c=null,f=0,p=[],k=new Map,E=!1,C=null,_=null,g=null,T=!1,V=new Map,G=[],w=()=>{if(a)throw new Error(Ph)};function M(P,h){G.push({type:P,atRevision:c,manifestId:n.id,selectedBindingIds:p.slice(),reason:typeof h.reason=="string"?h.reason:void 0});let x=P.includes(".diagnostic.")?"diagnostic":"state",L={type:P,kind:x,payload:Be(h)};e.onEvent?.(L),e.router?.publish(L)}function A(){return Hh([...k.values()],{revision:c,selectedBindingIds:p,override:g,usedFallback:E,fallbackReason:C,explanation:_,sequences:o})}function u(P){let h=[];for(let x of P)x.kind==="visual-layer"&&r&&(r.inspect().find(H=>H.id===x.layerId)||h.push(ee("unknown-resource",`unknown live layer "${x.layerId}"`,x.layerId))),x.kind==="semantic-region"&&i&&!i.get(x.regionId)&&h.push(ee("unknown-resource",`unknown live region "${x.regionId}"`,x.regionId)),x.kind==="hotspot"&&x.regionId&&i&&!i.get(x.regionId)&&h.push(ee("unknown-resource",`unknown live region "${x.regionId}"`,x.regionId)),x.kind==="presence"&&x.regionId&&i&&!i.get(x.regionId)&&h.push(ee("unknown-resource",`unknown live region "${x.regionId}"`,x.regionId)),x.kind==="sequence"&&o&&!o.get(x.sequenceId)&&h.push(ee("unknown-resource",`unknown live sequence "${x.sequenceId}"`,x.sequenceId));return h}function v(){if(!(!i||!g?.labels)){for(let[P,h]of Object.entries(g.labels))if(i.get(P))if(typeof h=="string"){let x=i.get(P)?.a11y;i.setRegionA11y(P,{name:h,role:x?.role??"region"})}else i.setRegionA11y(P,{name:h.name,role:h.role})}}function d(){return g?.reducedSensory===!0}function l(P){let h=o?.inspect().active;return!!(h&&h.sequenceId===P&&(h.phase==="playing"||h.phase==="paused"||h.phase==="requested"||h.phase==="preloading"||h.phase==="ready"))}function m(P,h){if(!o)return;let x=d(),L=P.play!==!1&&!x,H=l(P.sequenceId);if(L&&!H&&(!h||T!==x)){let Z=o.playSequence(P.sequenceId,{invocationId:`presentation-binding:${P.sequenceId}`,idempotencyKey:`presentation-binding:${P.sequenceId}`});if(!Z.ok&&Z.reason!=="duplicate")return ee("unknown-resource",Z.detail,P.sequenceId)}!L&&H&&o.skip()}function I(){for(let P of k.values())P.kind==="sequence"&&m(P,!0);T=d()}function O(P){if(!i)return[];let h=new Map;for(let X of P)X.kind==="hotspot"&&X.regionId&&h.set(X.regionId,X.enabled);for(let X of P)X.kind==="semantic-region"&&X.hitTestEnabled!==void 0&&h.set(X.regionId,X.hitTestEnabled);if(h.size===0)return[];let x=new Map,L=!1;for(let[X,W]of h){let y=i.get(X);if(!y)continue;y.hitTest!=="pass-through"&&V.set(X,y.hitTest);let b=V.get(X)??"absorb",S=W?b:"pass-through";x.set(X,S),y.hitTest!==S&&(L=!0)}if(!L)return[];let H=i.snapshot(),q={...H,regions:H.regions.map(X=>{let W=x.get(X.id);return W&&W!==X.hitTest?{...X,hitTest:W}:X})},Z=i.restore(q);return Z.ok?[]:Z.errors.map(X=>ee("unknown-resource",X))}function R(P){let h=r?.snapshot(),x=i?.snapshot(),L=o?.snapshot(),H=new Map(V),q=W=>{V.clear();for(let[y,b]of H)V.set(y,b);return o&&L&&o.restore(L),r&&h&&r.restore(h),i&&x&&i.restore(x),W},Z=new Map;for(let W of P)Z.set(Ot(W),Be(W));let X=O(P);if(X.length>0)return q(X);for(let[W,y]of Z){let b=k.get(W),S=qh(b,y);if(y.kind==="visual-layer"&&r&&!S){let N=y.transition??"replace",$=r.play({name:`presentation-binding:${y.layerId}:${N}`,idempotencyKey:`presentation-binding:${y.layerId}:${y.version}:${N}`,layerId:y.layerId,kind:N,...N==="hide"?{}:{toVersion:y.version},durationFrames:0,onDuplicate:"ignore"});if(!$.ok&&$.reason!=="duplicate")return q([ee("unknown-resource",$.detail,y.layerId)])}if(y.kind==="semantic-region"&&i){let N=y.state??{},$=i.get(y.regionId)?.state,Q={hover:N.hover??$?.hover??!1,focus:N.focus??$?.focus??!1,selected:N.selected??$?.selected??!1};(!$||$.hover!==Q.hover||$.focus!==Q.focus||$.selected!==Q.selected)&&i.setRegionState(y.regionId,Q)}if(y.kind==="hotspot"&&y.regionId&&i){let N=i.get(y.regionId)?.state;(!N||N.selected!==y.enabled)&&i.setRegionState(y.regionId,{selected:y.enabled})}if(y.kind==="presence"&&y.regionId&&i){let N=i.get(y.regionId)?.state;(!N||N.selected!==y.present)&&i.setRegionState(y.regionId,{selected:y.present})}if(y.kind==="sequence"){let N=m(y,S);if(N)return q([N])}}return k=Z,T=d(),v(),[]}function B(P,h){let x=u(P.targets);if(x.length>0)return M(Tr,{manifestId:n.id,revision:String(h),reason:x[0]?.code,selectedBindingIds:p}),M(wr,{manifestId:n.id,revision:String(h),reason:x[0]?.code}),{ok:!1,errors:x,inspect:A()};let L=R(P.targets);return L.length>0?(M(Tr,{manifestId:n.id,revision:String(h),reason:L[0]?.code,selectedBindingIds:p}),M(wr,{manifestId:n.id,revision:String(h),reason:L[0]?.code}),{ok:!1,errors:L,inspect:A()}):(c=h,p=P.selectedBindingIds.slice(),E=P.usedFallback,C=P.fallbackReason,_=Be(P.explanation),M(ko,{manifestId:n.id,revision:String(h),selectedBindingIds:p,usedFallback:E,reason:C??void 0}),{ok:!0,revision:h,selectedBindingIds:p.slice(),usedFallback:E,fallbackReason:C,explanation:Be(P.explanation),inspect:A()})}function K(){return{schemaVersion:ya,manifestId:n.id,projectionRevision:c,selectedBindingIds:p.slice(),targets:[...k.values()].map(P=>Be(P)),usedFallback:E,fallbackReason:C,override:g?Be(g):null}}return{get manifest(){return Be(n)},apply(P,h){w();let x=h?.revision??f+1;typeof x=="number"&&(f=Math.max(f,x));let L=ba(n,P,s);return B(L,x)},setOverride(P){w();let h=d();if(P===null)g=null;else{let x=[],L=pl(P,x);if(x.length>0||L===void 0)throw new Error(`createPresentationBindingRuntime: ${x.map(H=>H.detail).join("; ")||"invalid override"}`);g=L?Be(L):null,v()}d()!==h&&I()},evaluate(P){return w(),ba(n,P,s)},inspect(){return w(),A()},snapshot(){return w(),K()},restore(P){w();let h=S=>({ok:!1,errors:S}),x=P;if(typeof P=="string")try{x=JSON.parse(P)}catch{return h([ee("invalid-snapshot","snapshot JSON is invalid")])}if(!rt(x))return h([ee("invalid-snapshot","snapshot must be a JSON object")]);if(x.schemaVersion!==ya)return h([ee("invalid-schema",`unsupported snapshot schemaVersion ${String(x.schemaVersion)}`,"schemaVersion")]);if(x.manifestId!==n.id)return h([ee("invalid-snapshot",`snapshot manifestId "${String(x.manifestId)}" does not match "${n.id}"`,"manifestId")]);if(!Array.isArray(x.selectedBindingIds))return h([ee("invalid-snapshot","selectedBindingIds must be an array","selectedBindingIds")]);let L=new Set(n.bindings.map(S=>S.id));for(let S of x.selectedBindingIds)if(!xe(S)||!L.has(S))return h([ee("unknown-resource",`unknown selected binding "${String(S)}"`,"selectedBindingIds")]);if(!Array.isArray(x.targets))return h([ee("invalid-snapshot","targets must be an array","targets")]);let H=[],q=x.targets.map((S,N)=>ha(S,`targets[${N}]`,H,n.resources)).filter(S=>!!S);if(H.length>0)return h(H);let Z=[],X=pl(x.override??null,Z);if(Z.length>0)return h(Z);let W=u(q);if(W.length>0)return h(W);let y=typeof x.projectionRevision=="string"||typeof x.projectionRevision=="number"?x.projectionRevision:x.projectionRevision===null?null:void 0;if(y===void 0)return h([ee("invalid-snapshot","projectionRevision must be a string, number, or null","projectionRevision")]);let b=R(q);return b.length>0?h(b):(c=y,typeof y=="number"&&(f=Math.max(f,y)),p=x.selectedBindingIds.filter(S=>xe(S)),E=x.usedFallback===!0,C=x.fallbackReason==="missing-state"||x.fallbackReason==="invalid-projection"?x.fallbackReason:null,g=X??null,v(),I(),{ok:!0,snapshot:K()})},destroy(){a||(a=!0,k.clear(),G.length=0)}}}var _r=1,Dt=1,Or="content.revision.state.discovered",Ro="content.revision.state.staging",Co="content.revision.state.validated",Ao="content.revision.state.rejected",Po="content.revision.state.activated",Vn="content.revision.state.rolled-back",Bn="content.revision.state.superseded",Dr="content.revision.diagnostic.lifecycle",Kh=[Or,Ro,Co,Ao,Po,Vn,Bn,Dr],hl=["invalid-manifest","invalid-schema","invalid-version","invalid-snapshot","unknown-revision","unknown-adapter","hash-mismatch","capability-denied","pinned","staging-failed","activation-failed","health-check-failed","stale-health-check","superseded","destroyed","adapter-missing","asset-failed","unsigned"],Wh=new Set(hl),Gh="Content revision activator has been destroyed",jh=/^[0-9a-f]+$/i;function le(e,t,n){return n?{code:e,detail:t,path:n}:{code:e,detail:t}}function kt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Ce(e){return typeof e=="string"&&e.length>0}function _e(e){try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Et(e,t){return`${e}@${t}`}function Uh(e,t){return e.localeCompare(t,"en",{numeric:!0,sensitivity:"base"})>0}function xr(e,t){return e===t?!0:!e||!t?!1:e.bundleId===t.bundleId&&e.adapterId===t.adapterId}function jt(){return{version:1,fields:{contentId:{type:"string"},revision:{type:"string"},adapterId:{type:"string"},bundleId:{type:"string",optional:!0},reasonCode:{type:"string",optional:!0}}}}function Ut(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Jh(){return[Ut(fe(Or,jt())),Ut(fe(Ro,jt())),Ut(fe(Co,jt())),Ut(fe(Ao,jt())),Ut(fe(Po,jt())),Ut(fe(Vn,jt())),Ut(fe(Bn,jt())),Ut(Ye(Dr,jt()))]}function Ea(e){return typeof e=="string"&&e.length===64&&jh.test(e)}function Yh(e,t){return e===void 0?{ok:!0,fallback:void 0}:kt(e)?!Ce(e.id)||!hn(e.kind)||!Ce(e.url)||!Ea(e.hash)||e.alg!=="sha256"?{ok:!1,errors:[le("invalid-schema","fallback is missing id, kind, url, or sha256 hash",t)]}:{ok:!0,fallback:{id:e.id,kind:e.kind,url:e.url,hash:e.hash.toLowerCase(),alg:"sha256"}}:{ok:!1,errors:[le("invalid-schema","fallback must be an object",t)]}}function To(e){if(!kt(e))return{ok:!1,errors:[le("invalid-manifest","catalog must be an object")]};let t=[];Ce(e.contentId)||t.push(le("invalid-schema","contentId is required","contentId")),(!Ce(e.revision)||e.revision==="latest")&&t.push(le("unknown-revision",'revision must be an exact id, not "latest"',"revision")),e.manifestVersion!==Dt&&t.push(le("invalid-version",`manifestVersion must be ${Dt}`,"manifestVersion")),Ce(e.publisher)||t.push(le("invalid-schema","publisher is required","publisher")),Ce(e.source)||t.push(le("invalid-schema","source is required","source")),Ce(e.adapterId)||t.push(le("invalid-schema","adapterId is required","adapterId")),(!Array.isArray(e.assets)||e.assets.length===0)&&t.push(le("invalid-schema","assets must be a non-empty array","assets"));let n=[],r=new Set;if(Array.isArray(e.assets)&&e.assets.forEach((o,s)=>{let a=`assets[${s}]`;if(!kt(o)){t.push(le("invalid-schema","asset must be an object",a));return}if(!Ce(o.id)||!hn(o.kind)||!Ce(o.url)){t.push(le("invalid-schema","asset needs id, kind, and url",a));return}if(!Ea(o.hash)||o.alg!=="sha256"){t.push(le("hash-mismatch","asset hash must be sha256 hex",`${a}.hash`));return}if(r.has(o.id)){t.push(le("invalid-schema",`duplicate asset id "${o.id}"`,`${a}.id`));return}r.add(o.id);let c=Yh(o.fallback,`${a}.fallback`);if(!c.ok){t.push(...c.errors);return}n.push({id:o.id,kind:o.kind,url:o.url,hash:o.hash.toLowerCase(),alg:"sha256",optional:o.optional===!0,fallback:c.fallback})}),t.length>0)return{ok:!1,errors:t};let i;if(e.signature!==void 0){if(!kt(e.signature)||!Ce(e.signature.id)||!Ce(e.signature.alg))return{ok:!1,errors:[le("unsigned","signature must include id and alg","signature")]};i={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,catalog:{contentId:e.contentId,revision:e.revision,manifestVersion:Dt,publisher:e.publisher,source:e.source,adapterId:e.adapterId,assets:n,requestedGrants:Array.isArray(e.requestedGrants)?e.requestedGrants:void 0,capabilities:e.capabilities,signature:i}}}function zh(e,t){return{contentId:e.body.id,revision:e.body.cartVersion,manifestVersion:Dt,publisher:e.body.publisher,source:"remote",adapterId:t,assets:e.body.assets.map(n=>({id:n.id,kind:n.kind,url:n.url,hash:n.hash.toLowerCase(),alg:"sha256"})),requestedGrants:_s(e),capabilities:e.body.capabilities,signature:{id:e.signature.keyId,alg:e.signature.alg}}}function Xh(e,t){return`https://registry.test/worlds/${e}/revisions/${t??"current"}.json`}function Qh(e){let t=e.id??"static",n=new Map,r=new Map;for(let o of e.revisions){let s=To({...o,adapterId:o.adapterId||t}),a=Ce(o.contentId)?o.contentId:"",c=Ce(o.revision)?o.revision:"";if(!(!a||!c))if(s.ok){let f={...s.catalog,adapterId:t,source:s.catalog.source||"static"};n.set(Et(a,c),{ok:!0,catalog:f});let p=r.get(a);(!p||Uh(f.revision,p.revision))&&r.set(a,f)}else n.set(Et(a,c),s)}let i=e.fetchBytes??(async o=>e.bytesByUrl[o]);return{id:t,hasRevision(o,s){return!!n.get(Et(o,s))?.ok},async discover(o){let s=r.get(o);if(s)return{contentId:s.contentId,revision:s.revision,adapterId:t,publisher:s.publisher,source:s.source}},async loadRevision(o,s){let a=n.get(Et(o,s));return a?a.ok?{ok:!0,catalog:_e(a.catalog)}:a:{ok:!1,errors:[le("unknown-revision",`static adapter has no ${o}@${s}`)]}},fetchBytes:i}}function Zh(e){let t=e.id??"remote",n=e.catalogUrl??Xh,r=new Set((e.known??[]).map(s=>Et(s.contentId,s.revision))),i=e.fetchBytes??(async s=>e.bytesByUrl?.[s]);async function o(s,a,c){let f=a!=="current",p;try{p=await e.fetch(n(s,f?a:void 0),c)}catch(g){return{ok:!1,errors:[le("staging-failed",g instanceof Error?g.message:String(g))]}}let k=p;if(kt(p)&&kt(p.manifest)){if(Ce(p.world)&&p.world!==s)return{ok:!1,errors:[le("invalid-manifest",`remote world "${String(p.world)}" does not match "${s}"`,"world")]};if(f&&Ce(p.revision)&&p.revision!==a)return{ok:!1,errors:[le("unknown-revision",`remote revision "${String(p.revision)}" does not match "${a}"`,"revision")]};k=p.manifest}let E=await lr(k,e.keys,f?a:void 0);if(!E.ok)return{ok:!1,errors:E.errors.map(g=>le(g.code,g.detail,g.path))};if(E.manifest.body.id!==s)return{ok:!1,errors:[le("invalid-manifest",`signed id "${E.manifest.body.id}" does not match "${s}"`,"body.id")]};let C=zh(E.manifest,t);return r.add(Et(C.contentId,C.revision)),To(C)}return{id:t,hasRevision(s,a){return r.has(Et(s,a))},async discover(s){let a=await o(s,"current");if(a.ok)return{contentId:a.catalog.contentId,revision:a.catalog.revision,adapterId:t,publisher:a.catalog.publisher,source:a.catalog.source}},loadRevision:o,fetchBytes:i}}function eb(e,t){return kt(e)?!Ce(e.id)||!hn(e.kind)||!Ce(e.ref)||!Ea(e.hash)||!Ce(e.url)||typeof e.optional!="boolean"||typeof e.usedFallback!="boolean"?{ok:!1,errors:[le("invalid-snapshot","resource fields are invalid",t)]}:{ok:!0,resource:{id:e.id,kind:e.kind,ref:e.ref,hash:e.hash.toLowerCase(),url:e.url,optional:e.optional,usedFallback:e.usedFallback}}:{ok:!1,errors:[le("invalid-snapshot","resource must be an object",t)]}}function Sa(e,t){if(e===null)return{ok:!0,bundle:null};if(!kt(e))return{ok:!1,errors:[le("invalid-snapshot","bundle must be an object or null",t)]};if(!Ce(e.contentId)||!Ce(e.revision)||e.revision==="latest")return{ok:!1,errors:[le("unknown-revision","snapshot bundle must record an exact revision",`${t}.revision`)]};if(e.manifestVersion!==Dt)return{ok:!1,errors:[le("invalid-version",`bundle manifestVersion must be ${Dt}`,`${t}.manifestVersion`)]};if(!Ce(e.publisher)||!Ce(e.source)||!Ce(e.adapterId)||!Ce(e.bundleId))return{ok:!1,errors:[le("invalid-snapshot","bundle identity is incomplete",t)]};if(!kt(e.resources))return{ok:!1,errors:[le("invalid-snapshot","bundle resources must be an object",`${t}.resources`)]};let n={};for(let[i,o]of Object.entries(e.resources)){let s=eb(o,`${t}.resources.${i}`);if(!s.ok)return s;if(s.resource.id!==i)return{ok:!1,errors:[le("invalid-snapshot",`resource key "${i}" does not match id`,`${t}.resources.${i}`)]};n[i]=s.resource}let r;if(e.signature!==void 0){if(!kt(e.signature)||!Ce(e.signature.id)||!Ce(e.signature.alg))return{ok:!1,errors:[le("invalid-snapshot","signature must include id and alg",`${t}.signature`)]};r={id:e.signature.id,alg:e.signature.alg}}return{ok:!0,bundle:{bundleId:e.bundleId,contentId:e.contentId,revision:e.revision,manifestVersion:Dt,publisher:e.publisher,source:e.source,adapterId:e.adapterId,signature:r,resources:n}}}function tb(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{return{ok:!1,errors:[le("invalid-snapshot","snapshot JSON is not parseable")]}}if(!kt(t))return{ok:!1,errors:[le("invalid-snapshot","snapshot must be an object")]};if(t.schemaVersion!==_r)return{ok:!1,errors:[le("invalid-version",`snapshot schema must be ${_r}`,"schemaVersion")]};if(typeof t.pinned!="boolean")return{ok:!1,errors:[le("invalid-snapshot","pinned must be a boolean","pinned")]};let n=Sa(t.active,"active");if(!n.ok)return n;let r=Sa(t.lastKnownGood,"lastKnownGood");if(!r.ok)return r;let i=Sa(t.previous,"previous");return i.ok?{ok:!0,snapshot:{schemaVersion:_r,pinned:t.pinned,active:n.bundle,lastKnownGood:r.bundle,previous:i.bundle}}:i}function nb(e,t,n){return{id:e.id,kind:e.kind,ref:t.ref,hash:n&&e.fallback?e.fallback.hash:e.hash,url:t.url,optional:e.optional===!0,usedFallback:n}}function rb(e){let t=[...e.adapters],n=e.grants??wn(),r=new Map,i=e.pin===!0,o=!1,s=null,a=null,c=null,f=null,p=null,k=[],E=0,C=null;function _(){if(o)throw new Error(Gh)}function g(d){return d?t.find(l=>l.id===d):t[0]}function T(d,l,m){return(m?t.filter(O=>O.id===m):t).some(O=>O.hasRevision(d,l))}function V(d,l){k.push(d);let m=d.includes(".diagnostic.")?"diagnostic":"state",I={type:d,kind:m,payload:_e(l)};e.onEvent?.(I),e.router?.publish(I)}function G(d,l){return p=d.map(m=>_e(m)),V(Ao,{...l,reasonCode:d[0]?.code}),V(Dr,{...l,reasonCode:d[0]?.code}),{ok:!1,errors:p}}function w(){return{destroyed:o,pinned:i,active:_e(s),lastKnownGood:_e(a),staging:f?_e(f):null,events:[...k],lastRejection:p?_e(p):null}}async function M(d,l,m){if(d.requestedGrants){for(let L of d.requestedGrants)if(!n.has(L))return{ok:!1,errors:[le("capability-denied",`host did not grant "${L}"`,"requestedGrants")]}}if(d.capabilities){let L=e.hostCapabilities??{contractVersion:1,features:[],integrations:[],grants:n.list()},H=ir(d.capabilities,{...L,grants:n.list()});if(!H.ok)return{ok:!1,errors:H.errors.map(q=>le(q.code==="missing-grant"||q.code==="capability-denied"||q.code==="ungranted-capability"?"capability-denied":"invalid-schema",q.detail,q.path))}}let I={},O=[];for(let L of d.assets)I[L.url]={url:L.url,hash:L.hash,alg:"sha256"},L.fallback&&(I[L.fallback.url]={url:L.fallback.url,hash:L.fallback.hash,alg:"sha256"}),O.push({id:L.id,ref:L.url,type:L.kind,integrity:`sha256-${L.hash}`,provenance:{contentId:d.contentId,revision:d.revision,publisher:d.publisher,adapterId:d.adapterId},fallback:L.fallback?{id:L.id,ref:L.fallback.url,type:L.fallback.kind,integrity:`sha256-${L.fallback.hash}`}:void 0});let R=Zn({declared:I,fetchBytes:async L=>{if(m.aborted)return;let H=Object.values(I).find(W=>W.url===L);if(!H)return;let Z=r.get(H.hash)??await l.fetchBytes(L,m);if(!Z||m.aborted)return;let X=await ur(Z);if(X!==H.hash)throw Ie({id:"",ref:L,code:"hash-mismatch",message:`hash mismatch for "${L}"`});return r.set(X,Z),Z},hashBytes:ur}),B=zt({resolver:R,emitEvents:!1,wallClockTimeout:!1});if(m.aborted)return B.dispose(),{ok:!1,errors:[le("superseded","staging aborted")]};let K=()=>{B.abort(),B.dispose()};m.addEventListener("abort",K,{once:!0});let P;try{P=await B.preload(O)}finally{m.removeEventListener("abort",K),B.dispose()}if(m.aborted)return{ok:!1,errors:[le("superseded","staging aborted")]};let h={},x=[];for(let L of d.assets){let H=P.items[L.id];if(H?.state==="ready"){h[L.id]=nb(L,H.resource,H.resource.usedFallback===!0||!!H.failure);continue}if(L.optional)continue;let q=H?.state==="failed"?H.failure:P.failures.find(Z=>Z.id===L.id);x.push(le(q?.code==="hash-mismatch"?"hash-mismatch":"asset-failed",q?.message??`required asset "${L.id}" failed`,L.id))}return x.length>0?{ok:!1,errors:x}:{ok:!0,bundle:{bundleId:Et(d.contentId,d.revision),contentId:d.contentId,revision:d.revision,manifestVersion:Dt,publisher:d.publisher,source:d.source,adapterId:d.adapterId,signature:d.signature,resources:h}}}function A(d,l,m){return V(Dr,{...d,reasonCode:l}),{ok:!1,errors:[le("stale-health-check",m)]}}async function u(d,l){let m=_e(d),I=s;s=m;let O=!0;try{O=e.healthCheck?await e.healthCheck(m):!0}catch(R){return xr(s,m)?(s=I,V(Vn,{...l,revision:I?.revision??"",reasonCode:"activation-failed"}),G([le("activation-failed",R instanceof Error?R.message:String(R))],l)):A(l,"stale-health-check","stale health check ignored; a newer revision is active")}return O?xr(s,m)?(c=I,a=_e(s),p=null,V(Po,l),{ok:!0,bundle:_e(s)}):A(l,"stale-health-check","stale health check ignored; a newer revision is active"):xr(s,m)?(s=I,V(Vn,{...l,revision:I?.revision??"",reasonCode:"health-check-failed"}),G([le("health-check-failed","post-activation health check failed")],l)):A(l,"stale-health-check","stale health check ignored; a newer revision is active")}let v={pin(d=!0){_(),i=d},unpin(){_(),i=!1},isPinned(){return _(),i},async discover(d,l){_();let m=g(l);if(!m)return;let I=await m.discover(d);return I&&V(Or,{contentId:I.contentId,revision:I.revision,adapterId:I.adapterId,bundleId:Et(I.contentId,I.revision)}),I?_e(I):void 0},async activate(d){_();let l=g(d.adapterId);if(!l)return G([le("unknown-adapter",`unknown adapter "${String(d.adapterId)}"`)],{contentId:d.contentId,revision:d.revision??"",adapterId:d.adapterId??""});let m=d.revision;if(!m){let B=await l.discover(d.contentId);m=B?.revision,B&&V(Or,{contentId:B.contentId,revision:B.revision,adapterId:B.adapterId,bundleId:Et(B.contentId,B.revision)})}if(!Ce(m)||m==="latest")return G([le("unknown-revision","activation requires an exact revision")],{contentId:d.contentId,revision:String(m??""),adapterId:l.id});let I={contentId:d.contentId,revision:m,adapterId:l.id,bundleId:Et(d.contentId,m)};if(s&&s.contentId===d.contentId&&s.revision===m&&s.adapterId===l.id)return{ok:!0,bundle:_e(s),idempotent:!0};if(i&&s)return G([le("pinned","activator is pinned; live revision movement is frozen")],I);let O=++E;C?.abort();let R=new AbortController;C=R,f={contentId:d.contentId,revision:m,adapterId:l.id,bundleId:I.bundleId},V(Ro,I);try{let B=await l.loadRevision(d.contentId,m,R.signal);if(O!==E||R.signal.aborted)return V(Bn,I),{ok:!1,errors:[le("superseded",`revision ${m} was superseded`)]};if(!B.ok)return G(B.errors,I);let K=B.catalog,P=To(K);if(!P.ok)return G(P.errors,I);let h=await M(P.catalog,l,R.signal);return O!==E||R.signal.aborted?(V(Bn,I),{ok:!1,errors:[le("superseded",`revision ${m} was superseded`)]}):h.ok?(V(Co,I),O!==E||R.signal.aborted?(V(Bn,I),{ok:!1,errors:[le("superseded",`revision ${m} was superseded`)]}):await u(h.bundle,I)):G(h.errors,I)}finally{O===E&&(f=null,C===R&&(C=null))}},rollback(){_();let d=c??a;if(xr(s,d))return{ok:!0,bundle:_e(s),idempotent:!0};if(i)return{ok:!1,errors:[le("pinned","activator is pinned; live revision movement is frozen")]};let l=s;return s=_e(d),a=_e(d),c=_e(d),V(Vn,{contentId:s?.contentId??l?.contentId??"",revision:s?.revision??"",adapterId:s?.adapterId??l?.adapterId??"",bundleId:s?.bundleId,reasonCode:"rolled-back"}),{ok:!0,bundle:_e(s)}},inspect(){return _(),w()},activeBundle(){return _(),_e(s)},snapshot(){return _(),{schemaVersion:_r,pinned:i,active:_e(s),lastKnownGood:_e(a),previous:_e(c)}},restore(d){_();let l=tb(d);if(!l.ok)return l;let m=l.snapshot,I=[m.active,m.lastKnownGood,m.previous];for(let O of I)if(O&&!T(O.contentId,O.revision,O.adapterId))return{ok:!1,errors:[le("unknown-revision",`unknown revision ${O.contentId}@${O.revision}`,"revision")]};return i&&!xr(s,m.active)?{ok:!1,errors:[le("pinned","activator is pinned; live revision movement is frozen")]}:(i=m.pinned,s=_e(m.active),a=_e(m.lastKnownGood),c=_e(m.previous),p=null,{ok:!0,snapshot:v.snapshot()})},provenance(){if(_(),!!s)return{source:s.source,publisher:s.publisher,version:s.revision,signature:s.signature}},destroy(){o=!0,C?.abort(),C=null,f=null}};return v}function ib(e){return typeof e=="string"&&Wh.has(e)}var wo={width:320,height:180,deviceScaleFactor:1},ob="Browser harness has been destroyed";function sb(e){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(e):e.replace(/([\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g,"\\$1")}function ka(e){return{...e,visibleNormalizedRect:{...e.visibleNormalizedRect}}}function Ia(e){return e===void 0?void 0:JSON.parse(JSON.stringify(e))}function Ra(e,t,n){Object.defineProperty(e,"clientWidth",{value:t,configurable:!0}),Object.defineProperty(e,"clientHeight",{value:n,configurable:!0})}function Ca(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 bl(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 ab(e){return e.querySelector("[aria-live]")?.textContent??""}function vl(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 db(e,t,n){let r=Array.from(e.querySelectorAll("*")),i=null,o=Number.POSITIVE_INFINITY;for(let s of r){if(!(s instanceof HTMLElement))continue;let a=s.getBoundingClientRect();if(t>=a.left&&t<a.right&&n>=a.top&&n<a.bottom){let c=Math.max(1,a.width*a.height);c<=o&&(i=s,o=c)}}return i??e}function Sl(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 Aa(e={}){let t=e.seed??`0x${"00".repeat(32)}`,n=Ia(e.geometry),r=e.semanticLayers,i=e.viewport?.width??wo.width,o=e.viewport?.height??wo.height,s=e.viewport?.deviceScaleFactor??wo.deviceScaleFactor,a=e.reducedMotion===!0,c=e.inputModality??"pointer",f=e.origin??0,p=e.fit??"contain",k=Object.getOwnPropertyDescriptor(window,"devicePixelRatio"),E=Object.getOwnPropertyDescriptor(window,"innerWidth"),C=Object.getOwnPropertyDescriptor(window,"innerHeight"),_=Sl(a),g=()=>{Object.defineProperty(window,"devicePixelRatio",{value:s,configurable:!0}),Object.defineProperty(window,"innerWidth",{value:i,configurable:!0}),Object.defineProperty(window,"innerHeight",{value:o,configurable:!0})};g();let T=document.createElement("div");T.setAttribute("data-cyberart-browser-harness",""),T.style.position="relative",T.style.overflow="auto",T.tabIndex=-1,document.body.appendChild(T);let V=[],G=[],w=!1,M=0,A=e.createId??(()=>`br-${++M}`),u=()=>hs({contentWidth:e.contentWidth??i,contentHeight:e.contentHeight??o,viewportWidth:i,viewportHeight:o,mode:p,devicePixelRatio:s}),v=u(),d=()=>Math.max(1,Math.round(i*s)),l=()=>Math.max(1,Math.round(o*s)),m=W=>{n=Ia(W)},I=(W,y)=>{let b=n?.regions.find(N=>N.id===W);if(!b)return;let S=Es(b,v);if(S)return y.style.position=y.style.position||"absolute",y.style.left=`${S.x}px`,y.style.top=`${S.y}px`,y.style.width=`${S.width}px`,y.style.height=`${S.height}px`,Ca(y,S.x,S.y,S.width,S.height),{...S}},O=()=>{v=u(),T.style.width=`${i}px`,T.style.height=`${o}px`,Ra(T,i,o),Ca(T,0,0,i,o),T.dataset.inputModality=c,T.dataset.reducedMotion=a?"true":"false",g()};O();let R=()=>({root:T,get layout(){return ka(v)},get reducedMotion(){return a},get inputModality(){return c},placeRegion:I,setGeometry(W){m(W)}}),B=e.mount?.(R())??{},K=B.participants??[],P,h,x=()=>{};if(K.length>0){for(let W of K)W.container&&Ra(W.container,d(),l());P=Is({origin:f,width:d(),height:l(),createId:A,now:()=>f,participants:K.map(W=>({...W,seed:W.seed??t,width:W.width??d(),height:W.height??l()}))}),x=P.router.subscribe(["*.*","*.*.*","*.*.*.*","*.*.*.*.*",lt],W=>{G.push(W)}),B.compositor&&(h=Qs({...B.compositor,group:P,width:i,height:o,dpr:s}))}let L=()=>({...R(),group:P,compositor:h,publish(W){if(!P)throw new Error("Browser harness: publish requires mounted carts");return P.publish(W)}}),H=()=>{if(O(),P){let W=d(),y=l();for(let b of K){b.container&&(Ra(b.container,W,y),b.container.style.width=`${i}px`,b.container.style.height=`${o}px`);try{let S=P.participant(b.id).cart.canvas;S&&(S.style.width=`${i}px`,S.style.height=`${o}px`,Ca(S,0,0,i,o))}catch{}}}},q=()=>{if(w)throw new Error(ob)};H(),B.ready?.(L());let Z=(W,y,b)=>{if(V.push({type:"click",x:W,y,...b?{selector:b}:{}}),b){let ie=T.querySelector(b);if(!(ie instanceof HTMLElement))throw new Error(`No element matches ${b}`);vl(ie,W,y);return}let S=n?new Set(n.regions.map(ie=>ie.id)):void 0,N=r?r.hitTest(sr({x:W,y},v)):void 0,$=N&&(!S||S.has(N.id))?N:void 0,Q=$===void 0&&n!==void 0?Ss({x:W,y},v,n,{space:"css"}):$?{id:$.id}:void 0,ne=(Q?T.querySelector(`#${sb(Q.id)}`):null)??db(T,W,y);vl(ne,W,y)};return{root:T,get group(){return P},get compositor(){return h},get layout(){return ka(v)},get events(){return G.slice()},get geometry(){return Ia(n)},goto(){q()},setGeometry(W){q(),m(W),B.relayout?.(L())},setViewport(W,y,b){q(),i=Math.max(1,W|0),o=Math.max(1,y|0),b!==void 0&&(s=b>0?b:1),V.push({type:"viewport",width:i,height:o,dpr:s}),h?h.resize(i,o,s):P&&P.resize(d(),l()),H(),B.relayout?.(L())},setReducedMotion(W){q(),a=W,_(),_=Sl(a),V.push({type:"reducedMotion",value:W}),H(),B.relayout?.(L())},setInputModality(W){q(),c=W,V.push({type:"inputModality",value:W}),H()},click(W,y){if(q(),typeof W=="string"){let b=T.querySelector(W);if(!(b instanceof HTMLElement))throw new Error(`No element matches ${W}`);let S=b.getBoundingClientRect();Z(S.left+S.width/2,S.top+S.height/2,W);return}if(y===void 0)throw new Error("click(x, y) requires a y coordinate");Z(W,y)},key(W){q(),V.push({type:"key",key:W}),(document.activeElement instanceof HTMLElement?document.activeElement:T).dispatchEvent(new KeyboardEvent("keydown",{key:W,bubbles:!0,cancelable:!0}))},focus(W){q();let y=T.querySelector(W);if(!(y instanceof HTMLElement))throw new Error(`No element matches ${W}`);y.focus()},async step(W=1){q(),V.push({type:"step",frames:W}),P&&await P.step(W)},async advance(W){q(),V.push({type:"advance",ms:W}),P&&await P.step(Math.max(0,Math.round(W/1e3*30)))},screenshot(){if(q(),h){let W=h.captureComposedFrame();return{imageData:W.imageData,pngDataUrl:W.pngDataUrl,html:T.outerHTML,declaredOrder:W.declaredOrder.map(y=>y.id)}}return{imageData:null,pngDataUrl:null,html:T.outerHTML,declaredOrder:[]}},accessibilitySnapshot(){return q(),{focus:bl(document.activeElement),live:ab(T),html:T.outerHTML,publishedRegions:(r?.inspectPublished()??[]).map(W=>({id:W.id,geometryKinds:[...W.geometryKinds],name:W.a11y?.name??null,role:W.a11y?.role??null}))}},async inspect(){q();let W={},y={},b=0;if(P){let S=await P.inspect();for(let N of S.diagnostics.participantIds)W[N]=P.participant(N).events.slice(),y[N]=S.participants[N]?.state,b=S.diagnostics.clocks[N]?.framesElapsed??b}return{host:B.hostState?.()??null,layout:ka(v),events:G.slice(),participantEvents:W,state:y,focus:bl(document.activeElement),publishedRegions:(r?.inspectPublished()??[]).map(S=>({id:S.id,geometryKinds:[...S.geometryKinds],name:S.a11y?.name??null,role:S.a11y?.role??null})),scrollTop:T.scrollTop,clock:{framesElapsed:b}}},reproduction(){return q(),{seed:t,viewport:{width:i,height:o,dpr:s},reducedMotion:a,inputModality:c,actions:V.map(W=>({...W}))}},captureComposedFrame(){if(q(),!h)throw new Error("Browser harness: captureComposedFrame requires a compositor");return h.captureComposedFrame()},destroy(){if(!w){w=!0,x(),document.activeElement instanceof HTMLElement&&T.contains(document.activeElement)&&document.activeElement.blur();try{B.destroy?.()}finally{try{h?.destroy()}finally{try{P?.destroy()}finally{T.remove(),_(),k&&Object.defineProperty(window,"devicePixelRatio",k),E&&Object.defineProperty(window,"innerWidth",E),C&&Object.defineProperty(window,"innerHeight",C)}}}}}}}function cb(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 xa=1,_a=1,Oo="production.scenario.state.observed",Lr="production.scenario.state.failed",Do="production.scenario.diagnostic.lifecycle",Cl=[Oo,Lr,Do],Al=["input","reducer","routing","binding","cue","pixels","caption","audio","save-replay"],Pl=["invalid-scenario","invalid-schema","unknown-field","missing-field","callbacks-forbidden","missing-participant","missing-layer","destroyed","assertion-failed","invalid-host-audio","invalid-audio-sidecar","unsupported-preference","invalid-geometry","ambiguous-geometry","stale-geometry"],Tl=["invoked","completed","failed","skipped","fallback"],wl=["desktop","mobile"],_o={desktop:{width:64,height:48,deviceScaleFactor:1},mobile:{width:48,height:64,deviceScaleFactor:2}},ub="Production scenario runner has been destroyed",lb=new Set(Cl),pb=new Set(Pl),fb=new Set(Al),mb=new Set(Tl),yb=new Set(["invoked","completed"]),xl=new Set(wl),gb=new Set(["id","schemaVersion","seed","required","matrix","steps"]),hb=new Set(["participants","layers"]),bb=new Set(["viewport","width","height","dpr","reducedMotion","mute","failedAssetIds","fallback","inputModality"]),vb=new Set(["click","key","focus","step","viewport","reducedMotion","mute","failAsset","save","reload","replay"]),_l="continue",Sb=["browser","visual","sequence","audio","semantic"];function Ne(e,t,n,r){let i={code:e,detail:t};return n&&(i.path=n),r&&(i.boundary=r),i}function et(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ze(e){return typeof e=="string"&&e.length>0}function Ge(e){return JSON.parse(JSON.stringify(e))}function Oa(e,t,n){if(typeof e=="function"){n.push(Ne("callbacks-forbidden","authored scenarios must not contain callbacks",t));return}if(Array.isArray(e)){e.forEach((r,i)=>Oa(r,`${t}[${i}]`,n));return}if(et(e))for(let[r,i]of Object.entries(e))Oa(i,t?`${t}.${r}`:r,n)}function Pa(e,t,n,r){for(let i of Object.keys(e))t.has(i)||r.push(Ne("unknown-field",`unknown field "${i}"`,n?`${n}.${i}`:i))}function El(e,t,n){if(!Array.isArray(e))return n.push(Ne("invalid-schema","must be an array of strings",t)),[];let r=[];return e.forEach((i,o)=>{if(!Ze(i)){n.push(Ne("invalid-schema","id must be a non-empty string",`${t}[${o}]`));return}r.push(i)}),r}function Ta(){return{version:1,fields:{scenarioId:{type:"string"},seed:{type:"string",optional:!0},boundary:{type:"string",optional:!0},reason:{type:"string",optional:!0},code:{type:"string",optional:!0},missing:{type:"array",optional:!0}}}}function wa(e){if(!e.ok)throw new Error(e.errors.map(t=>t.detail).join("; "));return e.contract}function Eb(){return[wa(fe(Oo,Ta())),wa(fe(Lr,Ta())),wa(Ye(Do,Ta()))]}function kb(e){return typeof e=="string"&&lb.has(e)}function Ib(e){return typeof e=="string"&&pb.has(e)}function Rb(e){return typeof e=="string"&&fb.has(e)}function Ol(e){return typeof e=="string"&&mb.has(e)}function Cb(e,t,n){if(!et(e)||!Ze(e.type)){n.push(Ne("invalid-schema","step.type is required",t));return}if(!vb.has(e.type)){n.push(Ne("unknown-field",`unknown step type "${e.type}"`,`${t}.type`));return}let r=n.length,i=a=>{Ze(e[a])||n.push(Ne("missing-field",`${e.type} step requires ${a}`,`${t}.${a}`))},o=a=>{(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push(Ne("missing-field",`${e.type} step requires numeric ${a}`,`${t}.${a}`))},s=a=>{typeof e[a]!="boolean"&&n.push(Ne("missing-field",`${e.type} step requires boolean ${a}`,`${t}.${a}`))};switch(e.type){case"click":{let a=Ze(e.selector),c=typeof e.x=="number"&&typeof e.y=="number";!a&&!c&&n.push(Ne("missing-field","click step requires selector or x and y",t));break}case"key":i("key");break;case"focus":i("selector");break;case"step":o("frames");break;case"viewport":{let a=e.kind!==void 0;a&&!xl.has(String(e.kind))&&n.push(Ne("invalid-schema","viewport.kind must be desktop or mobile",`${t}.kind`));let c=typeof e.width=="number"&&typeof e.height=="number";!a&&!c&&n.push(Ne("missing-field","viewport step requires kind or width and height",t));break}case"reducedMotion":case"mute":s("value");break;case"failAsset":i("assetId");break;default:break}if(n.length===r)return Ge(e)}function Dl(e){let t=[];if(Oa(e,"",t),!et(e))return{ok:!1,errors:[Ne("invalid-scenario","scenario must be an object")]};if(Pa(e,gb,"",t),Ze(e.id)||t.push(Ne("missing-field","id is required","id")),e.schemaVersion!==xa&&t.push(Ne("invalid-schema","schemaVersion must be 1","schemaVersion")),Ze(e.seed)||t.push(Ne("missing-field","seed is required","seed")),!et(e.required))t.push(Ne("missing-field","required participants and layers are required","required"));else{Pa(e.required,hb,"required",t);let o=El(e.required.participants,"required.participants",t),s=El(e.required.layers,"required.layers",t);o.length===0&&t.push(Ne("missing-field","required.participants must not be empty","required.participants")),s.length===0&&t.push(Ne("missing-field","required.layers must not be empty","required.layers"))}let n;e.matrix!==void 0&&(et(e.matrix)?(Pa(e.matrix,bb,"matrix",t),e.matrix.viewport!==void 0&&!xl.has(String(e.matrix.viewport))&&t.push(Ne("invalid-schema","matrix.viewport must be desktop or mobile","matrix.viewport")),n=Ge(e.matrix)):t.push(Ne("invalid-schema","matrix must be an object","matrix")));let r;if(e.steps!==void 0&&(Array.isArray(e.steps)?(r=[],e.steps.forEach((o,s)=>{let a=Cb(o,`steps[${s}]`,t);a&&r.push(a)})):t.push(Ne("invalid-schema","steps must be an array","steps"))),t.length>0)return{ok:!1,errors:t};let i={id:e.id,schemaVersion:xa,seed:e.seed,required:{participants:[...e.required.participants],layers:[...e.required.layers]}};return n&&(i.matrix=n),r&&(i.steps=r),{ok:!0,scenario:i}}function rn(e){let t=typeof e=="string"?new TextEncoder().encode(e):e,n=2166136261;for(let r=0;r<t.length;r++)n^=t[r],n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function Nr(e){return JSON.stringify(e)}function xo(e,t){let n=new Set(t);return e.filter(r=>!n.has(r))}function Nl(e,t={}){let n=(r,i,o)=>({boundary:r,code:i,detail:o});if(t.inputDispatched===!0&&!e.inputDispatched)return n("input","assertion-failed","input was not dispatched");if(t.reducerAccepted===!0&&e.reducerAccepted!==!0)return n("reducer","assertion-failed","host reducer did not accept");if(t.reducerRejected===!0&&e.reducerRejected!==!0)return n("reducer","assertion-failed","host reducer did not reject");if(t.routedTypes){for(let r of t.routedTypes)if(!e.routedTypes.includes(r))return n("routing","assertion-failed",`missing routed type "${r}"`)}if(t.requiredParticipantsPresent===!0&&!e.requiredParticipantsPresent)return n("routing","missing-participant",`missing participants: ${e.missingParticipants.join(", ")}`);if(t.selectedBindingIds){for(let r of t.selectedBindingIds)if(!e.selectedBindingIds.includes(r))return n("binding","assertion-failed",`missing binding "${r}"`)}if(t.sequenceId&&e.sequenceId!==t.sequenceId)return n("cue","assertion-failed",`expected sequence "${t.sequenceId}"`);if(t.requiredLayersPresent===!0&&!e.requiredLayersPresent)return n("pixels","missing-layer",`missing layers: ${e.missingLayers.join(", ")}`);if(t.captions){for(let r of t.captions)if(!e.captions.includes(r))return n("caption","assertion-failed",`missing caption "${r}"`)}return t.audioInvoked===!0&&!e.audioInvoked?n("audio","assertion-failed","audio was not invoked"):t.audioFailed===!0&&!e.audioFailed?n("audio","assertion-failed","audio did not fail as required"):t.audioRestoreOk===!0&&e.audioRestoreOk!==!0?n("audio","invalid-audio-sidecar","audio sidecar was not restored"):t.snapshotOk===!0&&e.snapshotOk!==!0?n("save-replay","assertion-failed","snapshot was not valid"):t.replayMatch===!0&&e.replayMatch!==!0?n("save-replay","assertion-failed","replay traces did not match"):null}function Ab(e){let t=e?.viewport==="mobile"?"mobile":"desktop",n=_o[t];return{preset:t,viewport:{width:e?.width??n.width,height:e?.height??n.height,deviceScaleFactor:e?.dpr??n.deviceScaleFactor}}}function Pb(e){return{type:"host.intent.select",kind:"intent",payload:{id:e}}}function Tb(e){return{type:"host.intent.key",kind:"intent",payload:{key:e}}}function Mr(e){return{boundary:"audio",code:"invalid-host-audio",detail:e}}function kl(e){return!!e&&typeof e=="object"&&typeof e.setReducedMotion=="function"}function wb(e){return!!e&&typeof e=="object"&&typeof e.setReducedSensory=="function"}function xb(e){if(!et(e)||!Ol(e.kind))return null;let t={kind:e.kind};return typeof e.atFrame=="number"&&Number.isFinite(e.atFrame)&&(t.atFrame=e.atFrame),Ze(e.name)&&(t.name=e.name),typeof e.caption=="string"&&(t.caption=e.caption),Ze(e.assetId)&&(t.assetId=e.assetId),Ze(e.reason)&&(t.reason=e.reason),Ze(e.id)&&(t.id=e.id),Ze(e.correlationId)&&(t.correlationId=e.correlationId),Ze(e.causationId)&&(t.causationId=e.causationId),t}function Il(e){let t=[];for(let n of e.captions??[])typeof n=="string"&&n.length>0&&!t.includes(n)&&t.push(n);for(let n of e.events)n.caption&&n.caption.length>0&&!t.includes(n.caption)&&t.push(n.caption);return t}function _b(e){if(e===void 0)return{ok:!0,supplied:!1,snapshot:{events:[]}};if(!et(e))return{ok:!1,error:Mr("hostAudio must be an object")};let t=e.snapshot,n=e.collect,r=e.inspect,i=typeof t=="function";if(!i&&!(typeof n=="function"))return{ok:!1,error:Mr("hostAudio requires snapshot() or collect()")};try{typeof r=="function"&&r.call(e);let s=i?t.call(e):n.call(e);if(!et(s)||!Array.isArray(s.events))return{ok:!1,error:Mr("hostAudio snapshot.events must be an array")};let a=[];for(let f=0;f<s.events.length;f++){let p=xb(s.events[f]);if(!p)return{ok:!1,error:Mr(`hostAudio snapshot.events[${f}] is invalid`)};a.push(p)}let c={events:a};return Array.isArray(s.captions)&&(c.captions=s.captions.filter(f=>typeof f=="string")),typeof s.muted=="boolean"&&(c.muted=s.muted),{ok:!0,supplied:!0,snapshot:c}}catch(s){let a=s instanceof Error?s.message:String(s);return{ok:!1,error:Mr(`hostAudio inspect failed: ${a}`)}}}function Ob(e,t,n,r){return{version:1,cartId:e,seed:t,framesElapsed:n,state:r}}function Db(){return{version:1,landmarks:[],regions:[]}}function wt(e,t){return{boundary:"input",code:e,detail:t}}function Nb(e,t){if(typeof e=="string")return e.length===0?{ok:!1,error:wt("invalid-geometry",`controls[${t}] id is required`)}:{ok:!0,control:{id:e}};if(!et(e)||!Ze(e.id))return{ok:!1,error:wt("invalid-geometry",`controls[${t}] id is required`)};let n={id:e.id};return Ze(e.name)&&(n.name=e.name),Ze(e.role)&&(n.role=e.role),{ok:!0,control:n}}function Rl(e,t){if(!Array.isArray(e))return{ok:!1,error:wt("invalid-geometry","controls must be an array")};let n=[],r=new Set;for(let a=0;a<e.length;a++){let c=Nb(e[a],a);if(!c.ok)return c;if(r.has(c.control.id))return{ok:!1,error:wt("ambiguous-geometry",`duplicate control id "${c.control.id}"`)};r.add(c.control.id),n.push(c.control)}if(!et(t))return{ok:!1,error:wt("invalid-geometry","geometry document is required")};if(t.version!==1||!Array.isArray(t.landmarks)||!Array.isArray(t.regions))return{ok:!1,error:wt("invalid-geometry","geometry document is invalid")};let i=Ge(t),o=ks(i);if(!o.ok){let a=o.diagnostics.some(c=>c.code==="overlap"||c.code==="duplicate-id");return{ok:!1,error:wt(a?"ambiguous-geometry":"invalid-geometry",o.diagnostics.map(c=>c.detail).join("; "))}}let s=new Set(i.regions.map(a=>a.id));for(let a of n)if(!s.has(a.id))return{ok:!1,error:wt("stale-geometry",`control "${a.id}" has no region in the active geometry`)};return{ok:!0,surface:{controls:n,geometry:i}}}function Ml(e){let t=Dl(e.scenario);if(!t.ok)throw new Error(`createProductionScenarioRunner: ${t.errors.map(F=>F.detail).join("; ")}`);let n=t.scenario,r=n.matrix??{},{preset:i,viewport:o}=Ab(r),s=e.host,a=Ge(s.initialState),c=null,f,p,k,E=null,C=null,_=r.reducedMotion===!0,g=null,T=!1,V=[],G=0,w=0,M=e.createId??(()=>`ps-${++G}`),A=e.mapClick??Pb,u=e.mapKey??Tb,v=e.sequenceBindings??{},d=e.origin??0,l=e.semanticRegions&&e.semanticRegions.length>0?oa({originFrame:0,regions:e.semanticRegions}):void 0,m,I,O,R=ms({originFrame:0,reducedSensory:r.reducedMotion===!0||r.mute===!0}),B=_i(),K,P=null,h=null,x=[],L=null,H=()=>{},q=()=>{},Z=()=>{},X=F=>s.project?s.project(F):Ge(F),W=()=>{let F=new Set,j=[];for(let se of[...e.geometry?.regions.map(ve=>ve.id)??[],...(e.semanticRegions??[]).map(ve=>ve.id)])F.has(se)||(F.add(se),j.push({id:se}));return j},y=F=>{if(s.projectInputSurface){let se;try{se=s.projectInputSurface(F)}catch(ve){let ue=ve instanceof Error?ve.message:String(ve);return{ok:!1,error:wt("invalid-geometry",`projectInputSurface failed: ${ue}`)}}return et(se)?Rl(se.controls,se.geometry):{ok:!1,error:wt("invalid-geometry","projectInputSurface must return { controls, geometry }")}}let j=W();return e.geometry?Rl(j,e.geometry):{ok:!0,surface:{controls:j,geometry:Db()}}},b=()=>{let F=y(a);if(!F.ok){h=F.error,P=F.error,Z(F.error);return}h&&P===h&&(P=null),h=null,x=F.surface.controls.map(j=>j.id),L=Ge(F.surface.geometry),q(F.surface.geometry),H(F.surface.controls)},S=F=>K?K.publish(F):ae.group?.publish(F),N=F=>{b();let j=X(a),se=typeof j.worldRevision=="string"||typeof j.worldRevision=="number"?j.worldRevision:void 0;O?.apply(j,se!==void 0?{revision:se}:void 0);let ve=F;if(ve&&I){w+=1;let ue=`${n.id}:${ve}:${w}`;I.playSequence(ve,{invocationId:ue,idempotencyKey:ue,bindings:v[ve]??{}})}ne()},$=F=>{let j=s.reduce(Ge(a),F);c=j,a=Ge(j.state);let se=et(F.payload)?F.payload:{};return j.accepted?S({type:"host.state.accepted",kind:"state",payload:{...se,reason:j.reason??"accepted"}}):S({type:"host.state.rejected",kind:"state",payload:{...se,reason:j.reason??"rejected"}}),N(j.playSequence),j},Q=document.createElement("div");Q.setAttribute("aria-live","polite"),Q.id="status",Q.textContent="";let J=()=>_b(e.hostAudio),ne=()=>{let F=I?.inspect().captions.filter(he=>he.visible).map(he=>he.text)??[],j=typeof a.caption=="string"?a.caption:"",se=J(),ve=se.ok?Il(se.snapshot):[],ue=ve[ve.length-1]??"";Q.textContent=F[0]||j||ue},ie=()=>{let F=ae.group,j=ae.compositor,se=F?F.inspectParticipants().map(ht=>ht.id):[],ve=j?j.layers().map(ht=>ht.id):[],ue=xo(n.required.participants,se);if(ue.length>0)return{boundary:"routing",code:"missing-participant",detail:`missing participants: ${ue.join(", ")}`};let he=xo(n.required.layers,ve);return he.length>0?{boundary:"pixels",code:"missing-layer",detail:`missing layers: ${he.join(", ")}`}:null},Oe=F=>({scenarioId:n.id,seed:n.seed,boundary:F.boundary,reason:F.detail}),Re=F=>{let j={type:Do,kind:"diagnostic",payload:{...Oe(F),code:F.code}};S(j),e.router?.publish(j)},Ae=F=>{let j={type:Lr,kind:"state",payload:Oe(F)};S(j),e.router?.publish(j),Re(F)},ae=Aa({seed:n.seed,viewport:o,reducedMotion:r.reducedMotion===!0,inputModality:r.inputModality??"pointer",origin:d,createId:M,geometry:e.geometry,semanticLayers:l,contentWidth:e.contentWidth??o.width,contentHeight:e.contentHeight??o.height,mount(F){let j=new Map;return q=se=>{F.setGeometry(se)},H=se=>{let ve=new Set(se.map(ue=>ue.id));for(let[ue,he]of[...j])ve.has(ue)||(document.activeElement===he&&he.blur(),he.remove(),j.delete(ue));for(let ue of se){let he=j.get(ue.id);he||(he=document.createElement("button"),he.type="button",he.id=ue.id,he.setAttribute("data-testid",ue.id),he.addEventListener("click",()=>{$(A(ue.id))}),F.root.insertBefore(he,Q),j.set(ue.id,he)),he.setAttribute("aria-label",ue.name??ue.id),ue.role?he.setAttribute("role",ue.role):he.removeAttribute("role"),F.placeRegion(ue.id,he)}},F.root.append(Q),{participants:e.participants,compositor:{layers:e.compositorLayers},hostState:()=>Ge(a),ready(se){if(se.group&&(K=B.bind(se.group)),se.compositor&&e.visualLayers&&e.visualLayers.length>0){m=aa({compositor:se.compositor,originFrame:0,reducedMotion:r.reducedMotion===!0,sceneId:n.id,layers:e.visualLayers});for(let[ue,he]of Object.entries(e.visualSources??{}))m.registerSource(ue,he),m.handleHostEvent({type:Ke,kind:"state",payload:{id:ue}})}let ve=[];for(let ue of e.sequences??[]){let he=Pr(ue);if(!he.ok)throw new Error(`createProductionScenarioRunner: sequence ${he.errors.map(ht=>ht.detail).join("; ")}`);ve.push(he.sequence)}if(I=ve.length>0?pa({originFrame:0,reducedMotion:r.reducedMotion===!0,reducedSensory:r.mute===!0||r.fallback===!0,audio:R,semantic:l,visual:m,sequences:ve}):void 0,e.bindings!==void 0){let ue=Io(e.bindings);if(!ue.ok)throw new Error(`createProductionScenarioRunner: ${ue.errors.map(he=>he.detail).join("; ")}`);O=va({manifest:ue.manifest,visual:m,semantic:l,sequences:I})}F.root.addEventListener("keydown",ue=>{let he=u(ue.key);he&&$(he)}),N()},relayout(se){for(let[ve,ue]of j)se.placeRegion(ve,ue)},destroy(){Q.remove();for(let se of j.values())se.remove();j.clear()}}}}),D=()=>{if(T)throw new Error(ub)};R.unlock(),r.mute===!0&&R.broker.mute();let U=new Set(r.failedAssetIds??[]),re=new Set([...U]);for(let F of Object.values(v))for(let j of Object.values(F.assets??{}))j&&re.add(j);for(let F of re){let j={type:U.has(F)?$e:Ke,kind:"state",payload:{id:F}};R.handleHostEvent(j),m?.handleHostEvent(j)}if(P=ie(),P||(P=h),!P){let F=J();F.ok||(P=F.error)}Z=Ae,P&&Ae(P);let te=F=>({boundary:"cue",code:"unsupported-preference",detail:F}),oe=F=>{C=te(F),P=C,Ae(C)},ye=F=>{let j=_;_=F,ae.setReducedMotion(F);let se=[{id:"browser",applied:!0,reducedMotion:ae.reproduction().reducedMotion}];m?kl(m)?(m.setReducedMotion(F),se.push({id:"visual",applied:!0,reducedMotion:m.reducedMotion})):(oe("visual does not support setReducedMotion"),se.push({id:"visual",applied:!1,reason:"setReducedMotion is not supported"})):se.push({id:"visual",applied:!1,reason:"participant-not-mounted"}),I?kl(I)?(I.setReducedMotion(F),se.push({id:"sequence",applied:!0,reducedMotion:I.reducedMotion})):(oe("sequence does not support setReducedMotion"),se.push({id:"sequence",applied:!1,reason:"setReducedMotion is not supported"})):se.push({id:"sequence",applied:!1,reason:"participant-not-mounted"});let ve=F||R.broker.muted;wb(R)?(R.setReducedSensory(ve),se.push({id:"audio",applied:!0,reducedMotion:F,reducedSensory:R.reducedSensory})):(oe("audio does not support setReducedSensory"),se.push({id:"audio",applied:!1,reason:"setReducedSensory is not supported"})),l?se.push({id:"semantic",applied:!1,reason:"no-reduced-motion-policy"}):se.push({id:"semantic",applied:!1,reason:"participant-not-mounted"});let ue={from:j,to:F,activeSequencePolicy:_l,participants:se};return g=ue,ue},Je=async F=>{K?await K.step(F):await ae.step(F),m?.step(F),I?.step(F),R.step(F),ne()},it=(F=J())=>{let j=ae.group,se=ae.compositor,ve=j?j.inspectParticipants().map(Pe=>Pe.id):[],ue=se?se.layers().map(Pe=>Pe.id):[],he=xo(n.required.participants,ve),ht=xo(n.required.layers,ue),$n=ae.events,on=F.ok?F.snapshot:{events:[]},Br=F.ok?Il(on):[],Hn=[...I?.inspect().captions.filter(Pe=>Pe.visible).map(Pe=>Pe.text)??[],...Br],qn=typeof a.caption=="string"?a.caption:"";qn&&!Hn.includes(qn)&&Hn.push(qn);let Kn=R.snapshot(),Fr=on.events,Wn=ae.screenshot(),$l=V.find(Pe=>Pe.type==="click");return{inputDispatched:V.some(Pe=>Pe.type==="click"||Pe.type==="key"),inputTarget:$l?.selector,reducerAccepted:c?.accepted===!0,reducerRejected:c?c.accepted===!1:void 0,reducerReason:c?.reason,routedTypes:$n.map(Pe=>Pe.type),rejected:$n.some(Pe=>Pe.type===lt),selectedBindingIds:O?.inspect().selectedBindingIds??[],sequenceId:I?.inspect().active?.sequenceId??c?.playSequence??null,sequencePhase:I?.inspect().active?.phase??null,captions:Hn,declaredOrder:Wn.declaredOrder,requiredParticipantsPresent:he.length===0,requiredLayersPresent:ht.length===0,missingParticipants:he,missingLayers:ht,audioInvoked:Kn.events.some(Pe=>Pe.type==="audio.cue.scheduled"||Pe.type==="audio.cue.started")||Fr.some(Pe=>yb.has(Pe.kind)),audioFailed:Kn.events.some(Pe=>Pe.type==="audio.cue.failed")||Fr.some(Pe=>Pe.kind==="failed")||(r.failedAssetIds?.length??0)>0,muted:Kn.muted||on.muted===!0,replayMatch:p?.ok,snapshotOk:f!==void 0,audioRestoreOk:k,reducedMotion:_,reducedMotionPropagation:g,activeControlIds:x.slice()}},Nt=F=>{P=ie();let j=J();!P&&h&&(P=h),!P&&E&&(P=E),!P&&C&&(P=C),!P&&!j.ok&&(P=j.error);let se=it(j),ve={requiredParticipantsPresent:!0,requiredLayersPresent:!0,...F},ue=P??Nl(se,ve),he=ae.screenshot(),ht=ae.accessibilitySnapshot(),$n=l?.inspectPublished()??[],on=B.records(),Br=f?Nr(f):"",Hn=he.imageData?new Uint8Array(he.imageData.data):new Uint8Array,qn=Object.keys(e.visualSources??{}).sort(),Kn=typeof a.worldRevision=="string"||typeof a.worldRevision=="number"?a.worldRevision:null,Fr={schemaVersion:_a,scenarioId:n.id,seed:n.seed,matrix:{viewport:i,width:o.width,height:o.height,dpr:o.deviceScaleFactor??1,...r},hashes:{pixels:rn(Hn),semantic:rn(Nr($n)),a11y:rn(Nr(ht)),trace:rn(Nr(on)),snapshot:Br?rn(Br):"0".repeat(8),assets:rn(Nr(qn))},revisions:{world:Kn,bindings:O?.inspect().revision??null,snapshot:He},traces:{envelopes:ae.events.slice(),inspector:on,audio:R.snapshot().events.slice(),hostAudio:j.ok?[...j.snapshot.events]:[],actions:V.slice()},screenshot:{pngDataUrl:he.pngDataUrl,declaredOrder:he.declaredOrder.slice(),width:he.imageData?.width??o.width,height:he.imageData?.height??o.height},semantic:$n,a11y:ht,firstBrokenBoundary:ue?.boundary??null,localization:ue,participants:ae.group?.inspectParticipants().map(Wn=>Wn.id)??[],layers:ae.compositor?.layers().map(Wn=>Wn.id)??[],observation:se};return S({type:ue?Lr:Oo,kind:"state",payload:{scenarioId:n.id,seed:n.seed,boundary:ue?.boundary,reason:ue?.detail}}),ue&&Re(ue),Fr},Mt=()=>({schemaVersion:_a,host:Ge(a),lastDecision:c?Ge(c):null,visual:m?.snapshot()??null,semantic:l?.snapshot()??null,bindings:O?.snapshot()??null,sequences:I?.snapshot()??null,audio:R.snapshot()}),Fn=()=>{let F=ri({cart:{id:n.id,version:"1"},seed:n.seed,clock:{framesElapsed:0},engineState:Ob(n.id,n.seed,0,Ge(a)),hostState:Mt(),createdAt:"2026-09-05T00:00:00.000Z"});if(!F.ok)throw new Error(F.errors.map(j=>j.detail).join("; "));return f=F.snapshot,F.snapshot},Va=F=>{let j=F.hostState;if(!et(j)||!et(j.host))throw new Error("Production scenario reload: hostState.host is required");if(j.audio!==void 0&&j.audio!==null){let se=nr(j.audio);if(!se.ok){k=!1,E={boundary:"audio",code:"invalid-audio-sidecar",detail:se.errors[0]?.detail??"audio sidecar is invalid"},P=E,Ae(P);return}}else k=!1,E=null;if(a=Ge(j.host),c=et(j.lastDecision)?Ge(j.lastDecision):null,j.visual&&m&&m.restore(j.visual),j.semantic&&l&&l.restore(j.semantic),j.bindings&&O&&O.restore(j.bindings),j.sequences&&I&&I.restore(j.sequences),j.audio!==void 0&&j.audio!==null){let se=R.restore(j.audio);if(k=se.ok,!se.ok){E={boundary:"audio",code:"invalid-audio-sidecar",detail:se.errors[0]?.detail??"audio sidecar restore failed"},P=E,Ae(P),b(),ne(),f=F;return}E=null}b(),ne(),f=F},Ba=async()=>{let F=ae.group;if(!K||!F)return p={ok:!1,detail:"replay requires a mounted runtime group"},p;let j=await K.exportTrace(),se=Ml({...e,scenario:n,createId:(()=>{let ve=0;return()=>`ps-${++ve}`})()});try{let ve=await Vs(j,se.harness.group);return p=Ls(j.records,ve.report.records),ve.inspector.destroy(),p}finally{se.destroy()}},Fl=async F=>{switch(V.push(Ge(F)),F.type){case"click":if(typeof F.selector=="string")ae.click(F.selector);else if(typeof F.x=="number"&&typeof F.y=="number")ae.click(F.x,F.y);else throw new Error("click step requires selector or x,y");return;case"key":ae.root.focus(),ae.key(F.key);return;case"focus":ae.focus(F.selector);return;case"step":await Je(F.frames);return;case"viewport":{let j=F.kind==="mobile"?_o.mobile:F.kind==="desktop"?_o.desktop:o;ae.setViewport(F.width??j.width,F.height??j.height,F.dpr??j.deviceScaleFactor);return}case"reducedMotion":ye(F.value);return;case"mute":F.value?R.broker.mute():R.broker.unmute();return;case"failAsset":{let j={type:$e,kind:"state",payload:{id:F.assetId}};R.handleHostEvent(j),m?.handleHostEvent(j);return}case"save":Fn();return;case"reload":if(!f)throw new Error("reload requires a prior save");Va(f);return;case"replay":await Ba();return}};return{scenario:n,harness:ae,audio:R,inspector:B,goto(){D(),ae.goto()},click(F,j){D(),V.push(typeof F=="string"?{type:"click",selector:F}:{type:"click",x:F,y:j}),ae.click(F,j)},key(F){D(),V.push({type:"key",key:F}),ae.root.focus(),ae.key(F)},focus(F){D(),V.push({type:"focus",selector:F}),ae.focus(F)},setViewport(F,j,se){D(),V.push({type:"viewport",width:F,height:j,dpr:se}),ae.setViewport(F,j,se)},setReducedMotion(F){D(),V.push({type:"reducedMotion",value:F}),ye(F)},mute(F=!0){D(),V.push({type:"mute",value:F}),F?R.broker.mute():R.broker.unmute()},failAsset(F){D(),V.push({type:"failAsset",assetId:F});let j={type:$e,kind:"state",payload:{id:F}};R.handleHostEvent(j),m?.handleHostEvent(j)},async step(F=1){D(),V.push({type:"step",frames:F}),await Je(F)},applyHostIntent(F){return D(),$(F)},playSequence(F,j=`${n.id}:${F}`){D(),I?.playSequence(F,{invocationId:j,idempotencyKey:j,bindings:v[F]??{}}),ne()},publish(F){return D(),S(F)},save(){return D(),V.push({type:"save"}),Fn()},reload(F){D();let j=F??f;if(!j)throw new Error("reload requires a prior save or an explicit snapshot");V.push({type:"reload"}),Va(j)},async replay(){return D(),V.push({type:"replay"}),Ba()},async run(F){D(),ae.goto();let j=F??n.steps??[];for(let se of j)await Fl(se);return Nt()},captureEvidence(F){return D(),Nt(F)},inspect(){return D(),{host:Ge(a),lastDecision:c,bindings:O?.inspect()??null,sequences:I?.inspect()??null,visual:m?.inspect()??null,semantic:l?.inspect()??null,audio:R.snapshot(),hostAudio:(()=>{let F=J();return F.ok&&F.supplied?F.snapshot:null})(),participants:ae.group?.inspectParticipants().map(F=>F.id)??[],layers:ae.compositor?.layers().map(F=>F.id)??[],composition:(()=>{let F=ie();if(F)return F;if(h)return h;if(C)return C;let j=J();return j.ok?null:j.error})(),reducedMotion:_,reducedMotionPropagation:g,inputSurface:{controlIds:x.slice(),geometry:L?Ge(L):null}}},destroy(){T||(T=!0,K?.unbind(),B.destroy(),O?.destroy(),I?.destroy(),m?.destroy(),l?.destroy(),R.destroy(),ae.destroy())}}}var Mb=128,Lb=144,Vb=176,Bb=224,Fb=0,$b=15,Hb=127,qb=8192,Kb=16383;function Bl(e){return Number.isInteger(e)&&e>=0&&e<=15}function Vr(e){return Number.isInteger(e)&&e>=0&&e<=127}function No(e,t){return e&240|t&15}function Wb(e){return e&15}function La(e){if(!Bl(e.channel))return;let t=e.channel;if(e.kind==="noteon"||e.kind==="noteoff"){let n=e.velocity??(e.kind==="noteon"?100:0);if(!Vr(e.note)||!Vr(n))return;let r=e.kind==="noteon"?144:128;return Uint8Array.from([No(r,t),e.note,n])}if(e.kind==="cc")return!Vr(e.controller)||!Vr(e.value)?void 0:Uint8Array.from([No(176,t),e.controller,e.value]);if(e.kind==="pitch"&&!(!Number.isInteger(e.value)||e.value<0||e.value>16383))return Uint8Array.from([No(224,t),e.value&127,e.value>>7&127])}function Da(e){let t=Na(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],s=t[2];return{kind:r===128||s===0?"noteoff":"noteon",channel:i,note:o,velocity:s,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 Na(e){return e instanceof Uint8Array?new Uint8Array(e):Uint8Array.from(e)}function Gb(e){return Array.from(e)}function jb(e){if(!("kind"in e))return!1;let t=e.kind;return t==="noteon"||t==="noteoff"||t==="cc"||t==="pitch"}function Ll(e){if(e instanceof Uint8Array)return Na(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 Na(e.data);if(jb(e))return La(e)}}function Ub(e,t){return e==="*"?!0:e==="note"?t.kind==="noteon"||t.kind==="noteoff":t.kind===e}function Jb(e){return{send(t,n){e.send(Array.from(t),n)}}}function Yb(e){if(typeof navigator>"u")return;let t=navigator.requestMIDIAccess;if(typeof t=="function")return t.call(navigator,e)}function Vl(e){if(e instanceof Error&&e.message)return e.message;if(typeof e=="string"&&e.length>0)return e}var Ma=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=Ll(t);if(!n)return;let r=Da(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=Ll(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??Yb,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:Vl(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=La(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(Gb(t))}catch(n){return{ok:!1,reason:"invalid",detail:Vl(n)}}return{ok:!0,data:t}}dispatch(t){for(let n of this.listeners)Ub(n.kind,t)&&n.listener(t)}deliverBytes(t){let n=Da(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(a=>n.add(a));for(let a of[...this.attachedInputs])n.has(a)||(a.removeEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.delete(a));t.inputs.forEach(a=>{this.attachedInputs.has(a)||(a.addEventListener("midimessage",this.onHardwareMessage),this.attachedInputs.add(a))});let r=new Set,i=0;t.inputs.forEach(()=>{i+=1});let o=0;if(t.outputs.forEach(a=>{o+=1,r.add(a)}),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 s;t.outputs.forEach(a=>{s||(s=a)}),s&&(this.adoptedHardwareOutput=s,this.output=Jb(s))}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{pm as ANCHOR_ORIGINS,$e as ASSET_FAILED_EVENT,Id as ASSET_FAILURE_CODES,kd as ASSET_KINDS,Ke as ASSET_READY_EVENT,Nf as AUDIO_CUE_EVENTS,Xt as AUDIO_CUE_FAILED_EVENT,yi as AUDIO_CUE_SCHEDULED_EVENT,gi as AUDIO_CUE_SKIPPED_EVENT,mi as AUDIO_CUE_SNAPSHOT_SCHEMA_VERSION,tr as AUDIO_CUE_STARTED_EVENT,rc as CAPABILITY_ASSET_KINDS,vi as CAPABILITY_BLEND_MODES,oc as CAPABILITY_CART_KINDS,Si as CAPABILITY_CLEAR_POLICIES,Pn as CAPABILITY_DEVICE_GRANTS,ic as CAPABILITY_INTEGRATIONS,nc as CAPABILITY_MANAGERS,jf as CAPABILITY_MANIFEST_VERSION,tc as CAPABILITY_PHASES,Xs as COMPOSITOR_BLEND_MODES,Dg as COMPOSITOR_CLEAR_POLICIES,Ng as COMPOSITOR_SOURCE_KINDS,Po as CONTENT_REVISION_ACTIVATED_EVENT,Dr as CONTENT_REVISION_DIAGNOSTIC_EVENT,Or as CONTENT_REVISION_DISCOVERED_EVENT,hl as CONTENT_REVISION_ERROR_CODES,Kh as CONTENT_REVISION_EVENTS,Dt as CONTENT_REVISION_MANIFEST_VERSION,Ao as CONTENT_REVISION_REJECTED_EVENT,Vn as CONTENT_REVISION_ROLLED_BACK_EVENT,_r as CONTENT_REVISION_SNAPSHOT_SCHEMA_VERSION,Ro as CONTENT_REVISION_STAGING_EVENT,Bn as CONTENT_REVISION_SUPERSEDED_EVENT,Co as CONTENT_REVISION_VALIDATED_EVENT,lm as COORDINATE_SPACES,_t as CUE_CANCELLED_EVENT,Ht as CUE_COMPLETED_EVENT,xf as CUE_LIFECYCLE_EVENTS,Rt as CUE_REPLACED_EVENT,xt as CUE_STARTED_EVENT,$r as CYBERART_CANVAS_ATTR,wo as DEFAULT_BROWSER_VIEWPORT,Xo as DEFAULT_DUCK_GAIN,Ic as DEFAULT_GROUP_HEIGHT,kc as DEFAULT_GROUP_WIDTH,di as DEFAULT_MAX_HOPS,xi as DEFAULT_MAX_INSPECTOR_RECORDS,wu as DEFAULT_MAX_SELECTION_RECORDS,$c as DEFAULT_PORTAL_MAX_DEPTH,_o as DEFAULT_PRODUCTION_SCENARIO_VIEWPORTS,Wt as DEFAULT_SENSITIVE_KEYS,ni as ENGINE_SNAPSHOT_RUNTIME,er as EVENT_ENVELOPE_VERSION,xm as EXECUTABLE_MODULE_ERROR_CODES,ki as GEOMETRY_CONTRACT_VERSION,qt as HOST_GRANT_SNAPSHOT_SCHEMA_VERSION,Tl as HOST_OWNED_AUDIO_EVENT_KINDS,Xu as HOST_STATE_ACCEPTED_EVENT,ln as HostChannel,Wd as INVALID_PRESENTATION_MODEL_MESSAGE,Fe as IncompatibleCartStateError,Bi as JOB_APPLIED_EVENT,Mi as JOB_AWAITING_EVALUATION_EVENT,$i as JOB_CANCELED_EVENT,Di as JOB_CLAIMED_EVENT,Fs as JOB_DIAGNOSTIC_EVENT,Qc as JOB_EVALUATOR_DECISIONS,Fi as JOB_FAILED_EVENT,py as JOB_LIFECYCLE_EVENTS,gr as JOB_ORCHESTRATION_SNAPSHOT_SCHEMA_VERSION,Ni as JOB_PROGRESS_EVENT,hr as JOB_QUEUED_EVENT,Vi as JOB_READY_EVENT,Zc as JOB_REDACTED_KEYS,Yc as JOB_RESULT_REF_SCHEMA_VERSION,Xc as JOB_RETRYABILITY,Li as JOB_RETRY_SCHEDULED_EVENT,zc as JOB_STATES,Oi as JOB_SUBMITTED_EVENT,Hi as JOB_SUPERSEDED_EVENT,Hr as KeyboardManager,ti as LEGACY_SNAPSHOT_SCHEMA_VERSION,$b as MIDI_CHANNEL_MAX,Fb as MIDI_CHANNEL_MIN,Vb as MIDI_CONTROL_CHANGE,Hb as MIDI_DATA_MAX,Mb as MIDI_NOTE_OFF,Lb as MIDI_NOTE_ON,Bb as MIDI_PITCH_BEND,qb as MIDI_PITCH_CENTER,Kb as MIDI_PITCH_MAX,Ma as MidiManager,yr as PORTAL_ABORTED_EVENT,Kt as PORTAL_ENTERED_EVENT,Ms as PORTAL_EXCLUSIVE_GRANTS,mr as PORTAL_EXITED_EVENT,Qm as PORTAL_LIFECYCLE_EVENTS,pr as PORTAL_LIFECYCLE_SNAPSHOT_SCHEMA_VERSION,Hc as PORTAL_METAPHORS,qc as PORTAL_OUTCOME_KINDS,fr as PORTAL_OUTCOME_SCHEMA_VERSION,In as PRESENTATION_ADAPTER_VERSION,sl as PRESENTATION_AUDIO_CAPABILITY_STATUSES,ko as PRESENTATION_BINDING_APPLIED_EVENT,wr as PRESENTATION_BINDING_DIAGNOSTIC_EVENT,yl as PRESENTATION_BINDING_ERROR_CODES,fl as PRESENTATION_BINDING_EVENTS,bo as PRESENTATION_BINDING_MANIFEST_VERSION,Tr as PRESENTATION_BINDING_REJECTED_EVENT,ya as PRESENTATION_BINDING_SNAPSHOT_SCHEMA_VERSION,ml as PRESENTATION_BINDING_TARGET_KINDS,ol as PRESENTATION_COMPLETION_RULES,il as PRESENTATION_INTERRUPTION_POLICIES,al as PRESENTATION_INVOCATION_PHASES,ds as PRESENTATION_MODEL_EVENT,Kd as PRESENTATION_PHASES,ho as PRESENTATION_SEQUENCE_COMPLETED_EVENT,la as PRESENTATION_SEQUENCE_DIAGNOSTIC_EVENT,nl as PRESENTATION_SEQUENCE_EVENTS,ua as PRESENTATION_SEQUENCE_FAILED_EVENT,go as PRESENTATION_SEQUENCE_INTERRUPTED_EVENT,uo as PRESENTATION_SEQUENCE_PRELOADING_EVENT,lo as PRESENTATION_SEQUENCE_READY_EVENT,co as PRESENTATION_SEQUENCE_REQUESTED_EVENT,yo as PRESENTATION_SEQUENCE_SKIPPED_EVENT,da as PRESENTATION_SEQUENCE_SNAPSHOT_SCHEMA_VERSION,po as PRESENTATION_SEQUENCE_STARTED_EVENT,mo as PRESENTATION_SEQUENCE_STEP_COMPLETED_EVENT,fo as PRESENTATION_SEQUENCE_STEP_STARTED_EVENT,Ef as PRESENTATION_SUBSCRIBE_PATTERNS,rl as PRESENTATION_TRACK_KINDS,qd as PRESENTATION_UNSUPPORTED_EVENT,Al as PRODUCTION_SCENARIO_BOUNDARIES,Do as PRODUCTION_SCENARIO_DIAGNOSTIC_EVENT,Pl as PRODUCTION_SCENARIO_ERROR_CODES,Cl as PRODUCTION_SCENARIO_EVENTS,Lr as PRODUCTION_SCENARIO_FAILED_EVENT,Oo as PRODUCTION_SCENARIO_OBSERVED_EVENT,xa as PRODUCTION_SCENARIO_SCHEMA_VERSION,_a as PRODUCTION_SCENARIO_SNAPSHOT_SCHEMA_VERSION,wl as PRODUCTION_SCENARIO_VIEWPORT_PRESETS,qr as PointerManager,ft as REDACTED_VALUE,_l as REDUCED_MOTION_ACTIVE_SEQUENCE_POLICY,Sb as REDUCED_MOTION_PARTICIPANT_IDS,lt as REJECTED_EVENT_TYPE,Vm as REMOTE_CART_ERROR_CODES,Ts as REMOTE_CART_GRANTS,Ii as REMOTE_CART_MANIFEST_VERSION,Ri as REMOTE_CART_SIGNATURE_ALG,Ti as REPLAY_INSPECTOR_SCHEMA_VERSION,cm as ROUND_TRIP_TOLERANCE,um as ROUND_TRIP_TOLERANCE_CANVAS_PX,Gn as Random,Ci as RemoteCartCapabilityError,xu as SELECTION_DECISION_KINDS,Js as SELECTION_REASON_CODES,to as SELECTION_TRACE_SCHEMA_VERSION,_u as SELECTION_TRACE_SENSITIVE_KEYS,Gu as SEMANTIC_APPEARANCE_KEYS,Ku as SEMANTIC_GEOMETRY_KINDS,Wu as SEMANTIC_HIT_TEST_POLICIES,Kg as SEMANTIC_INTERACTION_KEYS,ea as SEMANTIC_LAYER_SNAPSHOT_SCHEMA_VERSION,yn as SILENT_ASSET_FALLBACK_REF,He as SNAPSHOT_SCHEMA_VERSION,jo as UNVERSIONED_CART_VERSION,Zg as VISUAL_LAYER_EVENTS,Ar as VISUAL_LAYER_FAILED_EVENT,eh as VISUAL_LAYER_FAILURE_CODES,Cr as VISUAL_LAYER_HIDDEN_EVENT,zu as VISUAL_LAYER_INCOMING_SUFFIX,Ju as VISUAL_LAYER_KINDS,oo as VISUAL_LAYER_REVEALED_EVENT,sa as VISUAL_LAYER_SNAPSHOT_SCHEMA_VERSION,Yu as VISUAL_LAYER_TRANSITIONS,ao as VISUAL_LAYER_TRANSITION_COMPLETED_EVENT,so as VISUAL_LAYER_TRANSITION_STARTED_EVENT,ji as WORLD_DISCOVERED_EVENT,ou as WORLD_EDGE_ACCESS,Gi as WORLD_EDGE_ADDED_EVENT,iu as WORLD_EDGE_VISIBILITIES,su as WORLD_ENTITY_KINDS,au as WORLD_ENTITY_STATUSES,Er as WORLD_GRAPH_DIAGNOSTIC_EVENT,wy as WORLD_GRAPH_EVENTS,xn as WORLD_GRAPH_SNAPSHOT_SCHEMA_VERSION,ru as WORLD_MAP_LAYERS,Wi as WORLD_NODE_ADDED_EVENT,Ki as WORLD_NODE_KINDS,Qi as WORLD_PATCH_ACCEPTED_EVENT,Dn as WORLD_PATCH_DIAGNOSTIC_EVENT,Su as WORLD_PATCH_ERROR_CODES,Ky as WORLD_PATCH_EVENTS,bu as WORLD_PATCH_OPS,vu as WORLD_PATCH_PRECONDITION_TYPES,Eu as WORLD_PATCH_REDACTED_KEYS,Zi as WORLD_PATCH_REJECTED_EVENT,kr as WORLD_PATCH_SCHEMA_VERSION,zi as WORLD_PATCH_SNAPSHOT_SCHEMA_VERSION,eo as WORLD_PATCH_SUPERSEDED_EVENT,Sr as WORLD_TRANSIT_EVENT,na as appearanceForState,zd as applyCueEasing,Xn as applySnapshotMigrations,Yt as assetStatusEvent,gm as assetToNormalized,Up as attachCartStatePersistence,Jd as attachPresentationAdapter,_g as attachSelectionTrace,oy as cabinetPortal,xs as canonicalizeRemoteCartBody,jr as canonicalizeSeed,bc as canvasToCss,vc as canvasToNormalized,dm as capabilityManifestToJSON,oh as captureVisualLayers,pn as cloneSnapshotJson,hf as comparePayloadSchemas,Ls as compareReplayTraces,Jh as contentRevisionEventContracts,Ie as createAssetFailure,zt as createAssetPreloader,Qo as createAudioBroker,Zd as createAudioCueTimeline,Aa as createBrowserHarness,Qs as createCompositor,rb as createContentRevisionActivator,Sf as createContractRegistry,Zn as createDeclaredAssetResolver,yd as createEngineSnapshotMigrations,rs as createEventRouter,Cs as createExecutableModuleHost,xp as createFixtureAssetResolver,ms as createHeadlessAudioAdapter,Sy as createHeadlessJobWorker,wn as createHostGrantSet,_p as createHostedAssetResolver,Ty as createJobCoordinator,bm as createLandmarkRegistry,eu as createMemoryJobPersistence,Cu as createMemoryWorldPersistence,cb as createPlaywrightCompatibleAdapter,ay as createPortalLifecycle,va as createPresentationBindingRuntime,hs as createPresentationLayout,as as createPresentationModelEvent,pa as createPresentationSequencePlayer,Ct as createPresentationTimeline,Ml as createProductionScenarioRunner,Ud as createReferencePresentationCart,Ym as createRemoteCartRegistry,Xm as createRemoteCartSandbox,Zh as createRemoteContentAdapter,_i as createReplayInspector,Zo as createRuntime,Is as createRuntimeGroup,Og as createSelectionTrace,oa as createSemanticLayerController,gd as createSnapshotMigrationRegistry,Qh as createStaticContentAdapter,Kr as createVirtualClock,aa as createVisualLayerController,dn as createWallClock,qy as createWorldGraph,hg as createWorldPatchApplier,hc as cssToCanvas,sr as cssToNormalized,hd as defaultSnapshotMigrationRegistry,rr as defineCapabilityManifest,Ye as defineDiagnostic,ss as defineIntent,Io as definePresentationBindings,Pr as definePresentationSequence,Dl as defineProductionScenario,Pi as defineRemoteCartManifest,ri as defineSnapshot,fe as defineStateEvent,bf as deriveAttachOptions,ad as describeReplayMismatch,Yn as detectSnapshotSchemaVersion,vm as drawGeometryDebug,La as encodeMidiMessage,Sp as engineStateFromEnvelope,ba as evaluatePresentationBindings,$d as familyPatternForType,rn as fnv1aHex,Tn as freezeCapabilityBag,ra as geometryKindsOf,ws as hmacSha256Hex,Vd as inferEventKind,gn as isAssetFailure,Rd as isAssetFailureCode,hn as isAssetKind,Qd as isAudioCueEventType,ib as isContentRevisionErrorCode,_f as isCueLifecycleType,Ol as isHostOwnedAudioEventKind,fn as isLegacyCartStateBundle,Bl as isMidiChannel,Vr as isMidiData,Nh as isPresentationBindingErrorCode,Dh as isPresentationBindingEventType,cs as isPresentationModel,Gd as isPresentationPhase,dl as isPresentationSequenceEventType,Rb as isProductionScenarioBoundary,Ib as isProductionScenarioErrorCode,kb as isProductionScenarioEventType,Ag as isSelectionDecisionKind,Cg as isSelectionReasonCode,ro as isSemanticBlendMode,Jg as isSemanticGeometryKind,ta as isSemanticHitTestPolicy,pp as isSnapshotEnvelope,fp as isVersionedSnapshot,ih as isVisualLayerEventType,Qu as isVisualLayerKind,Zu as isVisualLayerTransitionKind,ig as isWorldPatchErrorCode,vy as jobEventContracts,Fd as kindSegmentInType,_s as listRequestedRemoteCartGrants,zm as loadRemoteCart,Nl as localizeProductionScenarioFailure,Bd as matchEventPattern,Wb as midiChannelFromStatus,No as midiStatus,wf as mountPresentationAdapter,ci as normalizeEvent,ym as normalizedToAsset,hm as normalizedToCanvas,bs as normalizedToCss,sy as paintingPortal,nr as parseAudioCueSnapshot,am as parseCapabilityManifest,To as parseContentRevisionCatalog,Em as parseGeometry,Da as parseMidiBytes,Vc as parseRemoteCartManifest,ii as parseSnapshot,mm as pointFromOrigin,ar as pointInHitbox,ju as pointInSemanticGeometry,Ss as pointerToRegion,Mh as presentationBindingEventContracts,Ot as presentationBindingTargetKey,yh as presentationSequenceEventContracts,Eb as productionScenarioEventContracts,xg as recordSelectionDecision,Sc as rectToCanvas,vs as rectToCss,Es as regionToViewport,Fp as registerCartStateHotkeys,Bc as remoteCartProvenanceForSnapshot,Vs as replayExportedTrace,Uo as resolveImportableCartState,Ur as resolveRuntimeSeed,Jo as restoreSnapshotFromUnknown,Ad as rewriteHostedAssetRef,Gf as scheduleAudioCue,Sm as serializeGeometry,ur as sha256Hex,Jm as signRemoteCartManifest,Jt as snapshotErrorsToMessage,zn as snapshotFromCartBundle,ir as validateCapabilityManifest,ks as validateGeometry,mn as validateSnapshot,vf as verifyAttachOptions,lr as verifyRemoteCartSignature,el as visualIncomingLayerId,Hy as worldGraphEventContracts,rg as worldPatchEventContracts};
|