incanto 0.79.1 → 0.79.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -9,5 +9,5 @@ import { t as showBootFailure } from "./boot-failure-CKYrEcGF.js";
9
9
  import { a as logText, i as logReport, o as parseDrive, r as resolveRendering, t as isWebGLAvailable } from "./webgl-unavailable-C8aDbGmR.js";
10
10
  import { t as createNoise2D } from "./noise-D3nPpmFg.js";
11
11
  import { a as PARTICLE_PRESETS, i as ParticleSim, n as resolveFrames, o as PARTICLE_PRESET_NAMES, s as applyParticlePreset, t as resolveAnimation } from "./sprite-animation-SQa5gIu2.js";
12
- import { a as findPath, i as preloadUrls, n as assetUrls, o as gridFromRows, r as preloadSceneAssets, t as VERSION } from "./src-3rJ6QSfX.js";
12
+ import { a as findPath, i as preloadUrls, n as assetUrls, o as gridFromRows, r as preloadSceneAssets, t as VERSION } from "./src-DPY8o3OJ.js";
13
13
  export { AudioBuses, AudioPlayer, BASE_LOCALE, Behavior, CONST_REF_KEY, EffectLog, Engine, HudLayer, IncantoError, InputMap, Localization, LogManager, MusicManager, Node, ORDER_GROUP_BASE, PARTICLE_PRESETS, PARTICLE_PRESET_NAMES, ParticleSim, ROLLOFF_MODELS, Respawn, Rng, SCENE_FORMAT, SFX_PRESETS, SFX_PRESET_NAMES, SaveSlots, Scene, SceneTree, Settings, SfxEngine, Signal, T_PREFIX, Timer, TouchControls, UiBanner, UiBar, UiButton, UiDialogue, UiFrameCapSelect, UiImage, UiLanguageSelect, UiMinimap, UiMuteToggle, UiPanel, UiQualitySelect, UiRenderScaleSelect, UiSelect, UiSlider, UiText, UiToggle, UiVolumeSlider, UiWaypoint, VERSION, WebAudioMusicBackend, applyParticlePreset, assetUrls, attachTouchControls, auditScene, behaviorSchema, behaviorSignals, behaviorsWithoutSave, captureBehaviors, clearBehaviors, clearRegistry, computeViewport, createNode, createNoise2D, createSaveStore, crossfadeGains, describeRefProblem, duplicateNode, effectiveOrder, fadeGain, findPath, getBehavior, getNodeSchema, getNodeSignals, getNodeType, gridFromRows, isAudioContextAvailable, isConstRef, isWebGLAvailable, joystickVector, jsonClone, jsonEquals, jsonKind, loadScene, logReport, logText, mergeStaticSignals, newUid, nodeRefWarnings, parseDrive, parseNodePath, preloadSceneAssets, preloadUrls, qualityEnvironment, readDeviceHints, registerBehavior, registerCoreNodes, registerNode, registeredBehaviors, registeredTypes, replay, resolveAnimation, resolveConstants, resolveFrames, resolveOrderGroups, resolveRefInJson, resolveRendering, resolveViewport, restoreBehaviors, savesWithoutUid, serializeNode, sfxDuration, showBootFailure, spatialGain, spatialPan, startRecording, suggestLocale, suggestQuality, synthSfx, translationKey };
@@ -199,6 +199,6 @@ async function preloadSceneAssets(assets, title) {
199
199
  //#endregion
200
200
  //#region src/index.ts
201
201
  /** Engine version. Kept in sync with package.json by the release pipeline. */
202
- const VERSION = "0.79.1";
202
+ const VERSION = "0.79.2";
203
203
  //#endregion
204
204
  export { findPath as a, preloadUrls as i, assetUrls as n, gridFromRows as o, preloadSceneAssets as r, VERSION as t };
package/dist/vite.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { a as parseJsonText } from "./json-CfTjpvW8.js";
2
2
  import { P as newUid } from "./pose-O50uVW-j.js";
3
3
  import { t as IncantoError } from "./errors-BpWbnbb_.js";
4
- import { t as VERSION } from "./src-3rJ6QSfX.js";
4
+ import { t as VERSION } from "./src-DPY8o3OJ.js";
5
5
  import { n as diffSignatures } from "./frame-report-D-_7YF2G.js";
6
6
  import { s as validateScene } from "./test-Def33MoL.js";
7
7
  import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));function u(e){return{BASE_URL:`./`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1}[`VITE_${e}`]}function d(){return!1}var f=o(((e,t)=>{function n(e){var t=typeof e;return e!=null&&(t==`object`||t==`function`)}t.exports=n})),p=o(((e,t)=>{t.exports=typeof global==`object`&&global&&global.Object===Object&&global})),m=o(((e,t)=>{var n=p(),r=typeof self==`object`&&self&&self.Object===Object&&self;t.exports=n||r||Function(`return this`)()})),h=o(((e,t)=>{var n=m();t.exports=function(){return n.Date.now()}})),g=o(((e,t)=>{var n=/\s/;function r(e){for(var t=e.length;t--&&n.test(e.charAt(t)););return t}t.exports=r})),_=o(((e,t)=>{var n=g(),r=/^\s+/;function i(e){return e&&e.slice(0,n(e)+1).replace(r,``)}t.exports=i})),v=o(((e,t)=>{t.exports=m().Symbol})),y=o(((e,t)=>{var n=v(),r=Object.prototype,i=r.hasOwnProperty,a=r.toString,o=n?n.toStringTag:void 0;function s(e){var t=i.call(e,o),n=e[o];try{e[o]=void 0;var r=!0}catch{}var s=a.call(e);return r&&(t?e[o]=n:delete e[o]),s}t.exports=s})),b=o(((e,t)=>{var n=Object.prototype.toString;function r(e){return n.call(e)}t.exports=r})),x=o(((e,t)=>{var n=v(),r=y(),i=b(),a=`[object Null]`,o=`[object Undefined]`,s=n?n.toStringTag:void 0;function c(e){return e==null?e===void 0?o:a:s&&s in Object(e)?r(e):i(e)}t.exports=c})),S=o(((e,t)=>{function n(e){return typeof e==`object`&&!!e}t.exports=n})),C=o(((e,t)=>{var n=x(),r=S(),i=`[object Symbol]`;function a(e){return typeof e==`symbol`||r(e)&&n(e)==i}t.exports=a})),w=o(((e,t)=>{var n=_(),r=f(),i=C(),a=NaN,o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;function u(e){if(typeof e==`number`)return e;if(i(e))return a;if(r(e)){var t=typeof e.valueOf==`function`?e.valueOf():e;e=r(t)?t+``:t}if(typeof e!=`string`)return e===0?e:+e;e=n(e);var u=s.test(e);return u||c.test(e)?l(e.slice(2),u?2:8):o.test(e)?a:+e}t.exports=u})),T=o(((e,t)=>{var n=f(),r=h(),i=w(),a=`Expected a function`,o=Math.max,s=Math.min;function c(e,t,c){var l,u,d,f,p,m,h=0,g=!1,_=!1,v=!0;if(typeof e!=`function`)throw TypeError(a);t=i(t)||0,n(c)&&(g=!!c.leading,_=`maxWait`in c,d=_?o(i(c.maxWait)||0,t):d,v=`trailing`in c?!!c.trailing:v);function y(t){var n=l,r=u;return l=u=void 0,h=t,f=e.apply(r,n),f}function b(e){return h=e,p=setTimeout(C,t),g?y(e):f}function x(e){var n=e-m,r=e-h,i=t-n;return _?s(i,d-r):i}function S(e){var n=e-m,r=e-h;return m===void 0||n>=t||n<0||_&&r>=d}function C(){var e=r();if(S(e))return w(e);p=setTimeout(C,x(e))}function w(e){return p=void 0,v&&l?y(e):(l=u=void 0,f)}function T(){p!==void 0&&clearTimeout(p),h=0,l=m=u=p=void 0}function E(){return p===void 0?f:w(r())}function D(){var e=r(),n=S(e);if(l=arguments,u=this,m=e,n){if(p===void 0)return b(m);if(_)return clearTimeout(p),p=setTimeout(C,t),y(m)}return p===void 0&&(p=setTimeout(C,t)),f}return D.cancel=T,D.flush=E,D}t.exports=c})),E=l(o(((e,t)=>{var n=T(),r=f(),i=`Expected a function`;function a(e,t,a){var o=!0,s=!0;if(typeof e!=`function`)throw TypeError(i);return r(a)&&(o=`leading`in a?!!a.leading:o,s=`trailing`in a?!!a.trailing:s),n(e,t,{leading:o,maxWait:t,trailing:s})}t.exports=a}))()),D={addItems:(e,t)=>t.forEach(t=>{let n=e.findIndex(e=>e.__id===t.__id);n===-1?e.push(t):e[n]=t}),removeItems:(e,t)=>t.forEach(t=>{let n=e.findIndex(e=>e.__id===t.__id);n!==-1&&e.splice(n,1)}),updateItems:(e,t)=>t.forEach(t=>{let n=e.findIndex(e=>e.__id===t.__id);n===-1?e.push(t):e[n]=t}),setItems:(e,t)=>{e.length=0,e.push(...t)}},ee=class{remoteUrl;verse;account;auth;constructor(e,t,n,r){this.remoteUrl=e,this.verse=t,this.account=n,this.auth=r}async fetchUrl(e,t=`en`){let n=`${this.remoteUrl.replace(/^ws/,`http`)}/crossramp/${encodeURIComponent(this.verse)}/${encodeURIComponent(this.account)}/${e}?lang=${t}`,r=await fetch(n,{headers:{"Content-Type":`application/json`,...this.auth&&{Authorization:`Bearer ${this.auth}`}}});if(!r.ok){let t=`Failed to get CrossRamp ${e}: HTTP ${r.status}`;try{let e=await r.json();e?.message&&(t=e.message)}catch{}throw Error(t)}let i=await r.json();if(!i.success||!i.data?.url)throw Error(i.errorCode||`Invalid CrossRamp API response`);return i.data.url}async getShopUrl(e=`en`){return this.fetchUrl(`shop-url`,e)}async getForgeUrl(e=`en`){return this.fetchUrl(`forge-url`,e)}updateConfig(e,t,n,r){this.remoteUrl=e,this.verse=t,this.account=n,r!==void 0&&(this.auth=r)}},O=BigInt(2**32-1),te=BigInt(32);function ne(e,t=!1){return t?{h:Number(e&O),l:Number(e>>te&O)}:{h:Number(e>>te&O)|0,l:Number(e&O)|0}}function re(e,t=!1){let n=e.length,r=new Uint32Array(n),i=new Uint32Array(n);for(let a=0;a<n;a++){let{h:n,l:o}=ne(e[a],t);[r[a],i[a]]=[n,o]}return[r,i]}var ie=(e,t,n)=>e<<n|t>>>32-n,ae=(e,t,n)=>t<<n|e>>>32-n,oe=(e,t,n)=>t<<n-32|e>>>64-n,se=(e,t,n)=>e<<n-32|t>>>64-n;function ce(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function k(e){if(!Number.isSafeInteger(e)||e<0)throw Error(`positive integer expected, got `+e)}function A(e,...t){if(!ce(e))throw Error(`Uint8Array expected`);if(t.length>0&&!t.includes(e.length))throw Error(`Uint8Array expected of length `+t+`, got length=`+e.length)}function j(e,t=!0){if(e.destroyed)throw Error(`Hash instance has been destroyed`);if(t&&e.finished)throw Error(`Hash#digest() has already been called`)}function le(e,t){A(e);let n=t.outputLen;if(e.length<n)throw Error(`digestInto() expects output buffer of length at least `+n)}function ue(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function M(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}var de=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function fe(e){return e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255}function pe(e){for(let t=0;t<e.length;t++)e[t]=fe(e[t]);return e}var me=de?e=>e:pe;function he(e){if(typeof e!=`string`)throw Error(`string expected`);return new Uint8Array(new TextEncoder().encode(e))}function ge(e){return typeof e==`string`&&(e=he(e)),A(e),e}var _e=class{};function ve(e){let t=t=>e().update(ge(t)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}var ye=BigInt(0),N=BigInt(1),be=BigInt(2),xe=BigInt(7),Se=BigInt(256),Ce=BigInt(113),we=[],Te=[],Ee=[];for(let e=0,t=N,n=1,r=0;e<24;e++){[n,r]=[r,(2*n+3*r)%5],we.push(2*(5*r+n)),Te.push((e+1)*(e+2)/2%64);let i=ye;for(let e=0;e<7;e++)t=(t<<N^(t>>xe)*Ce)%Se,t&be&&(i^=N<<(N<<BigInt(e))-N);Ee.push(i)}var De=re(Ee,!0),Oe=De[0],ke=De[1],Ae=(e,t,n)=>n>32?oe(e,t,n):ie(e,t,n),P=(e,t,n)=>n>32?se(e,t,n):ae(e,t,n);function je(e,t=24){let n=new Uint32Array(10);for(let r=24-t;r<24;r++){for(let t=0;t<10;t++)n[t]=e[t]^e[t+10]^e[t+20]^e[t+30]^e[t+40];for(let t=0;t<10;t+=2){let r=(t+8)%10,i=(t+2)%10,a=n[i],o=n[i+1],s=Ae(a,o,1)^n[r],c=P(a,o,1)^n[r+1];for(let n=0;n<50;n+=10)e[t+n]^=s,e[t+n+1]^=c}let t=e[2],i=e[3];for(let n=0;n<24;n++){let r=Te[n],a=Ae(t,i,r),o=P(t,i,r),s=we[n];t=e[s],i=e[s+1],e[s]=a,e[s+1]=o}for(let t=0;t<50;t+=10){for(let r=0;r<10;r++)n[r]=e[t+r];for(let r=0;r<10;r++)e[t+r]^=~n[(r+2)%10]&n[(r+4)%10]}e[0]^=Oe[r],e[1]^=ke[r]}M(n)}var Me=class e extends _e{constructor(e,t,n,r=!1,i=24){if(super(),this.pos=0,this.posOut=0,this.finished=!1,this.destroyed=!1,this.enableXOF=!1,this.blockLen=e,this.suffix=t,this.outputLen=n,this.enableXOF=r,this.rounds=i,k(n),!(0<e&&e<200))throw Error(`only keccak-f1600 function is supported`);this.state=new Uint8Array(200),this.state32=ue(this.state)}clone(){return this._cloneInto()}keccak(){me(this.state32),je(this.state32,this.rounds),me(this.state32),this.posOut=0,this.pos=0}update(e){j(this),e=ge(e),A(e);let{blockLen:t,state:n}=this,r=e.length;for(let i=0;i<r;){let a=Math.min(t-this.pos,r-i);for(let t=0;t<a;t++)n[this.pos++]^=e[i++];this.pos===t&&this.keccak()}return this}finish(){if(this.finished)return;this.finished=!0;let{state:e,suffix:t,pos:n,blockLen:r}=this;e[n]^=t,t&128&&n===r-1&&this.keccak(),e[r-1]^=128,this.keccak()}writeInto(e){j(this,!1),A(e),this.finish();let t=this.state,{blockLen:n}=this;for(let r=0,i=e.length;r<i;){this.posOut>=n&&this.keccak();let a=Math.min(n-this.posOut,i-r);e.set(t.subarray(this.posOut,this.posOut+a),r),this.posOut+=a,r+=a}return e}xofInto(e){if(!this.enableXOF)throw Error(`XOF is not possible for this instance`);return this.writeInto(e)}xof(e){return k(e),this.xofInto(new Uint8Array(e))}digestInto(e){if(le(e,this),this.finished)throw Error(`digest() was already called`);return this.writeInto(e),this.destroy(),e}digest(){return this.digestInto(new Uint8Array(this.outputLen))}destroy(){this.destroyed=!0,M(this.state)}_cloneInto(t){let{blockLen:n,suffix:r,outputLen:i,rounds:a,enableXOF:o}=this;return t||=new e(n,r,i,o,a),t.state32.set(this.state32),t.pos=this.pos,t.posOut=this.posOut,t.finished=this.finished,t.rounds=a,t.suffix=r,t.outputLen=i,t.enableXOF=o,t.destroyed=this.destroyed,t}},Ne=((e,t,n)=>ve(()=>new Me(t,e,n)))(1,136,256/8);function Pe(e){e=e.toLowerCase();let t=e.substring(2).split(``),n=new Uint8Array(40);for(let e=0;e<40;e++)n[e]=t[e].charCodeAt(0);let r=Ne(n);for(let e=0;e<40;e+=2)r[e>>1]>>4>=8&&(t[e]=t[e].toUpperCase()),(r[e>>1]&15)>=8&&(t[e+1]=t[e+1].toUpperCase());return`0x`+t.join(``)}function F(e){if(typeof e!=`string`)throw Error(`invalid address: ${e}`);if(e.match(/^(0x)?[0-9a-fA-F]{40}$/)){e.startsWith(`0x`)||(e=`0x`+e);let t=Pe(e);if(e.match(/([A-F].*[a-f])|([a-f].*[A-F])/)&&t!==e)throw Error(`bad address checksum: ${e}`);return t}throw Error(`invalid address: ${e}`)}function Fe(e){try{return F(e),!0}catch{return!1}}function Ie(e){return Fe(e)?F(e):e}function Le(e){let t=e.length,n=0,r=0;for(;r<t;){let i=e.charCodeAt(r++);if(!(i&4294967168)){n++;continue}else if(!(i&4294965248))n+=2;else{if(i>=55296&&i<=56319&&r<t){let t=e.charCodeAt(r);(t&64512)==56320&&(++r,i=((i&1023)<<10)+(t&1023)+65536)}i&4294901760?n+=4:n+=3}}return n}function Re(e,t,n){let r=e.length,i=n,a=0;for(;a<r;){let n=e.charCodeAt(a++);if(!(n&4294967168)){t[i++]=n;continue}else if(!(n&4294965248))t[i++]=n>>6&31|192;else{if(n>=55296&&n<=56319&&a<r){let t=e.charCodeAt(a);(t&64512)==56320&&(++a,n=((n&1023)<<10)+(t&1023)+65536)}n&4294901760?(t[i++]=n>>18&7|240,t[i++]=n>>12&63|128,t[i++]=n>>6&63|128):(t[i++]=n>>12&15|224,t[i++]=n>>6&63|128)}t[i++]=n&63|128}}var ze=new TextEncoder,Be=50;function Ve(e,t,n){ze.encodeInto(e,t.subarray(n))}function He(e,t,n){e.length>Be?Ve(e,t,n):Re(e,t,n)}var Ue=4096;function I(e,t,n){let r=t,i=r+n,a=[],o=``;for(;r<i;){let t=e[r++];if(!(t&128))a.push(t);else if((t&224)==192){let n=e[r++]&63;a.push((t&31)<<6|n)}else if((t&240)==224){let n=e[r++]&63,i=e[r++]&63;a.push((t&31)<<12|n<<6|i)}else if((t&248)==240){let n=e[r++]&63,i=e[r++]&63,o=e[r++]&63,s=(t&7)<<18|n<<12|i<<6|o;s>65535&&(s-=65536,a.push(s>>>10&1023|55296),s=56320|s&1023),a.push(s)}else a.push(t);a.length>=Ue&&(o+=String.fromCharCode(...a),a.length=0)}return a.length>0&&(o+=String.fromCharCode(...a)),o}var We=new TextDecoder,Ge=200;function Ke(e,t,n){let r=e.subarray(t,t+n);return We.decode(r)}function qe(e,t,n){return n>Ge?Ke(e,t,n):I(e,t,n)}var L=class{type;data;constructor(e,t){this.type=e,this.data=t}},R=class e extends Error{constructor(t){super(t);let n=Object.create(e.prototype);Object.setPrototypeOf(this,n),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:e.name})}};function Je(e,t,n){let r=n/4294967296,i=n;e.setUint32(t,r),e.setUint32(t+4,i)}function z(e,t,n){let r=Math.floor(n/4294967296),i=n;e.setUint32(t,r),e.setUint32(t+4,i)}function Ye(e,t){let n=e.getInt32(t),r=e.getUint32(t+4);return n*4294967296+r}function Xe(e,t){let n=e.getUint32(t),r=e.getUint32(t+4);return n*4294967296+r}var Ze=4294967295,Qe=17179869183;function $e({sec:e,nsec:t}){if(e>=0&&t>=0&&e<=Qe)if(t===0&&e<=Ze){let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,e),t}else{let n=e/4294967296,r=e&4294967295,i=new Uint8Array(8),a=new DataView(i.buffer);return a.setUint32(0,t<<2|n&3),a.setUint32(4,r),i}else{let n=new Uint8Array(12),r=new DataView(n.buffer);return r.setUint32(0,t),z(r,4,e),n}}function et(e){let t=e.getTime(),n=Math.floor(t/1e3),r=(t-n*1e3)*1e6,i=Math.floor(r/1e9);return{sec:n+i,nsec:r-i*1e9}}function tt(e){return e instanceof Date?$e(et(e)):null}function nt(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength);switch(e.byteLength){case 4:return{sec:t.getUint32(0),nsec:0};case 8:{let e=t.getUint32(0),n=t.getUint32(4);return{sec:(e&3)*4294967296+n,nsec:e>>>2}}case 12:return{sec:Ye(t,4),nsec:t.getUint32(0)};default:throw new R(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${e.length}`)}}function rt(e){let t=nt(e);return new Date(t.sec*1e3+t.nsec/1e6)}var it={type:-1,encode:tt,decode:rt},at=class e{static defaultCodec=new e;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(it)}register({type:e,encode:t,decode:n}){if(e>=0)this.encoders[e]=t,this.decoders[e]=n;else{let r=-1-e;this.builtInEncoders[r]=t,this.builtInDecoders[r]=n}}tryToEncode(e,t){for(let n=0;n<this.builtInEncoders.length;n++){let r=this.builtInEncoders[n];if(r!=null){let i=r(e,t);if(i!=null)return new L(-1-n,i)}}for(let n=0;n<this.encoders.length;n++){let r=this.encoders[n];if(r!=null){let i=r(e,t);if(i!=null)return new L(n,i)}}return e instanceof L?e:null}decode(e,t,n){let r=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return r?r(e,t,n):new L(t,e)}};function ot(e){return e instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer}function B(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):ot(e)?new Uint8Array(e):Uint8Array.from(e)}var st=class e{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??at.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.maxDepth=e?.maxDepth??100,this.initialBufferSize=e?.initialBufferSize??2048,this.sortKeys=e?.sortKeys??!1,this.forceFloat32=e?.forceFloat32??!1,this.ignoreUndefined=e?.ignoreUndefined??!1,this.forceIntegerToFloat=e?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new e({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef(e){if(this.entered)return this.clone().encodeSharedRef(e);try{return this.entered=!0,this.reinitializeState(),this.doEncode(e,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode(e){if(this.entered)return this.clone().encode(e);try{return this.entered=!0,this.reinitializeState(),this.doEncode(e,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode(e,t){if(t>this.maxDepth)throw Error(`Too deep objects in depth ${t}`);e==null?this.encodeNil():typeof e==`boolean`?this.encodeBoolean(e):typeof e==`number`?this.forceIntegerToFloat?this.encodeNumberAsFloat(e):this.encodeNumber(e):typeof e==`string`?this.encodeString(e):this.useBigInt64&&typeof e==`bigint`?this.encodeBigInt64(e):this.encodeObject(e,t)}ensureBufferSizeToWrite(e){let t=this.pos+e;this.view.byteLength<t&&this.resizeBuffer(t*2)}resizeBuffer(e){let t=new ArrayBuffer(e),n=new Uint8Array(t),r=new DataView(t);n.set(this.bytes),this.view=r,this.bytes=n}encodeNil(){this.writeU8(192)}encodeBoolean(e){e===!1?this.writeU8(194):this.writeU8(195)}encodeNumber(e){!this.forceIntegerToFloat&&Number.isSafeInteger(e)?e>=0?e<128?this.writeU8(e):e<256?(this.writeU8(204),this.writeU8(e)):e<65536?(this.writeU8(205),this.writeU16(e)):e<4294967296?(this.writeU8(206),this.writeU32(e)):this.useBigInt64?this.encodeNumberAsFloat(e):(this.writeU8(207),this.writeU64(e)):e>=-32?this.writeU8(224|e+32):e>=-128?(this.writeU8(208),this.writeI8(e)):e>=-32768?(this.writeU8(209),this.writeI16(e)):e>=-2147483648?(this.writeU8(210),this.writeI32(e)):this.useBigInt64?this.encodeNumberAsFloat(e):(this.writeU8(211),this.writeI64(e)):this.encodeNumberAsFloat(e)}encodeNumberAsFloat(e){this.forceFloat32?(this.writeU8(202),this.writeF32(e)):(this.writeU8(203),this.writeF64(e))}encodeBigInt64(e){e>=BigInt(0)?(this.writeU8(207),this.writeBigUint64(e)):(this.writeU8(211),this.writeBigInt64(e))}writeStringHeader(e){if(e<32)this.writeU8(160+e);else if(e<256)this.writeU8(217),this.writeU8(e);else if(e<65536)this.writeU8(218),this.writeU16(e);else if(e<4294967296)this.writeU8(219),this.writeU32(e);else throw Error(`Too long string: ${e} bytes in UTF-8`)}encodeString(e){let t=Le(e);this.ensureBufferSizeToWrite(5+t),this.writeStringHeader(t),He(e,this.bytes,this.pos),this.pos+=t}encodeObject(e,t){let n=this.extensionCodec.tryToEncode(e,this.context);if(n!=null)this.encodeExtension(n);else if(Array.isArray(e))this.encodeArray(e,t);else if(ArrayBuffer.isView(e))this.encodeBinary(e);else if(typeof e==`object`)this.encodeMap(e,t);else throw Error(`Unrecognized object: ${Object.prototype.toString.apply(e)}`)}encodeBinary(e){let t=e.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else if(t<4294967296)this.writeU8(198),this.writeU32(t);else throw Error(`Too large binary: ${t}`);let n=B(e);this.writeU8a(n)}encodeArray(e,t){let n=e.length;if(n<16)this.writeU8(144+n);else if(n<65536)this.writeU8(220),this.writeU16(n);else if(n<4294967296)this.writeU8(221),this.writeU32(n);else throw Error(`Too large array: ${n}`);for(let n of e)this.doEncode(n,t+1)}countWithoutUndefined(e,t){let n=0;for(let r of t)e[r]!==void 0&&n++;return n}encodeMap(e,t){let n=Object.keys(e);this.sortKeys&&n.sort();let r=this.ignoreUndefined?this.countWithoutUndefined(e,n):n.length;if(r<16)this.writeU8(128+r);else if(r<65536)this.writeU8(222),this.writeU16(r);else if(r<4294967296)this.writeU8(223),this.writeU32(r);else throw Error(`Too large map object: ${r}`);for(let r of n){let n=e[r];this.ignoreUndefined&&n===void 0||(this.encodeString(r),this.doEncode(n,t+1))}}encodeExtension(e){if(typeof e.data==`function`){let t=e.data(this.pos+6),n=t.length;if(n>=4294967296)throw Error(`Too large extension object: ${n}`);this.writeU8(201),this.writeU32(n),this.writeI8(e.type),this.writeU8a(t);return}let t=e.data.length;if(t===1)this.writeU8(212);else if(t===2)this.writeU8(213);else if(t===4)this.writeU8(214);else if(t===8)this.writeU8(215);else if(t===16)this.writeU8(216);else if(t<256)this.writeU8(199),this.writeU8(t);else if(t<65536)this.writeU8(200),this.writeU16(t);else if(t<4294967296)this.writeU8(201),this.writeU32(t);else throw Error(`Too large extension object: ${t}`);this.writeI8(e.type),this.writeU8a(e.data)}writeU8(e){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,e),this.pos++}writeU8a(e){let t=e.length;this.ensureBufferSizeToWrite(t),this.bytes.set(e,this.pos),this.pos+=t}writeI8(e){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,e),this.pos++}writeU16(e){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,e),this.pos+=2}writeI16(e){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,e),this.pos+=2}writeU32(e){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,e),this.pos+=4}writeI32(e){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,e),this.pos+=4}writeF32(e){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,e),this.pos+=4}writeF64(e){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,e),this.pos+=8}writeU64(e){this.ensureBufferSizeToWrite(8),Je(this.view,this.pos,e),this.pos+=8}writeI64(e){this.ensureBufferSizeToWrite(8),z(this.view,this.pos,e),this.pos+=8}writeBigUint64(e){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,e),this.pos+=8}writeBigInt64(e){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,e),this.pos+=8}};function ct(e,t){return new st(t).encodeSharedRef(e)}function V(e){return`${e<0?`-`:``}0x${Math.abs(e).toString(16).padStart(2,`0`)}`}var lt=16,ut=16,dt=class{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(e=lt,t=ut){this.maxKeyLength=e,this.maxLengthPerKey=t,this.caches=[];for(let e=0;e<this.maxKeyLength;e++)this.caches.push([])}canBeCached(e){return e>0&&e<=this.maxKeyLength}find(e,t,n){let r=this.caches[n-1];FIND_CHUNK:for(let i of r){let r=i.bytes;for(let i=0;i<n;i++)if(r[i]!==e[t+i])continue FIND_CHUNK;return i.str}return null}store(e,t){let n=this.caches[e.length-1],r={bytes:e,str:t};n.length>=this.maxLengthPerKey?n[Math.random()*n.length|0]=r:n.push(r)}decode(e,t,n){let r=this.find(e,t,n);if(r!=null)return this.hit++,r;this.miss++;let i=I(e,t,n),a=Uint8Array.prototype.slice.call(e,t,t+n);return this.store(a,i),i}},H=`array`,U=`map_key`,ft=`map_value`,pt=e=>{if(typeof e==`string`||typeof e==`number`)return e;throw new R(`The type of key must be string or number but `+typeof e)},mt=class{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(e){let t=this.getUninitializedStateFromPool();t.type=H,t.position=0,t.size=e,t.array=Array(e)}pushMapState(e){let t=this.getUninitializedStateFromPool();t.type=U,t.readCount=0,t.size=e,t.map={}}getUninitializedStateFromPool(){return this.stackHeadPosition++,this.stackHeadPosition===this.stack.length&&this.stack.push({type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null}),this.stack[this.stackHeadPosition]}release(e){if(this.stack[this.stackHeadPosition]!==e)throw Error(`Invalid stack state. Released state is not on top of the stack.`);if(e.type===H){let t=e;t.size=0,t.array=void 0,t.position=0,t.type=void 0}if(e.type===U||e.type===ft){let t=e;t.size=0,t.map=void 0,t.readCount=0,t.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}},W=-1,G=new DataView(new ArrayBuffer(0)),ht=new Uint8Array(G.buffer);try{G.getInt8(0)}catch(e){if(!(e instanceof RangeError))throw Error(`This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access`)}var gt=RangeError(`Insufficient data`),_t=new dt,vt=class e{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=G;bytes=ht;headByte=W;stack=new mt;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??at.defaultCodec,this.context=e?.context,this.useBigInt64=e?.useBigInt64??!1,this.rawStrings=e?.rawStrings??!1,this.maxStrLength=e?.maxStrLength??4294967295,this.maxBinLength=e?.maxBinLength??4294967295,this.maxArrayLength=e?.maxArrayLength??4294967295,this.maxMapLength=e?.maxMapLength??4294967295,this.maxExtLength=e?.maxExtLength??4294967295,this.keyDecoder=e?.keyDecoder===void 0?_t:e.keyDecoder,this.mapKeyConverter=e?.mapKeyConverter??pt}clone(){return new e({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=W,this.stack.reset()}setBuffer(e){let t=B(e);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(e){if(this.headByte===W&&!this.hasRemaining(1))this.setBuffer(e);else{let t=this.bytes.subarray(this.pos),n=B(e),r=new Uint8Array(t.length+n.length);r.set(t),r.set(n,t.length),this.setBuffer(r)}}hasRemaining(e){return this.view.byteLength-this.pos>=e}createExtraByteError(e){let{view:t,pos:n}=this;return RangeError(`Extra ${t.byteLength-n} of ${t.byteLength} byte(s) found at buffer[${e}]`)}decode(e){if(this.entered)return this.clone().decode(e);try{this.entered=!0,this.reinitializeState(),this.setBuffer(e);let t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t}finally{this.entered=!1}}*decodeMulti(e){if(this.entered){yield*this.clone().decodeMulti(e);return}try{for(this.entered=!0,this.reinitializeState(),this.setBuffer(e);this.hasRemaining(1);)yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync(e){if(this.entered)return this.clone().decodeAsync(e);try{this.entered=!0;let t=!1,n;for await(let r of e){if(t)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(r);try{n=this.doDecodeSync(),t=!0}catch(e){if(!(e instanceof RangeError))throw e}this.totalPos+=this.pos}if(t){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return n}let{headByte:r,pos:i,totalPos:a}=this;throw RangeError(`Insufficient data in parsing ${V(r)} at ${a} (${i} in the current buffer)`)}finally{this.entered=!1}}decodeArrayStream(e){return this.decodeMultiAsync(e,!0)}decodeStream(e){return this.decodeMultiAsync(e,!1)}async*decodeMultiAsync(e,t){if(this.entered){yield*this.clone().decodeMultiAsync(e,t);return}try{this.entered=!0;let n=t,r=-1;for await(let i of e){if(t&&r===0)throw this.createExtraByteError(this.totalPos);this.appendBuffer(i),n&&(r=this.readArraySize(),n=!1,this.complete());try{for(;yield this.doDecodeSync(),--r!==0;);}catch(e){if(!(e instanceof RangeError))throw e}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){DECODE:for(;;){let e=this.readHeadByte(),t;if(e>=224)t=e-256;else if(e<192)if(e<128)t=e;else if(e<144){let n=e-128;if(n!==0){this.pushMapState(n),this.complete();continue DECODE}else t={}}else if(e<160){let n=e-144;if(n!==0){this.pushArrayState(n),this.complete();continue DECODE}else t=[]}else{let n=e-160;t=this.decodeString(n,0)}else if(e===192)t=null;else if(e===194)t=!1;else if(e===195)t=!0;else if(e===202)t=this.readF32();else if(e===203)t=this.readF64();else if(e===204)t=this.readU8();else if(e===205)t=this.readU16();else if(e===206)t=this.readU32();else if(e===207)t=this.useBigInt64?this.readU64AsBigInt():this.readU64();else if(e===208)t=this.readI8();else if(e===209)t=this.readI16();else if(e===210)t=this.readI32();else if(e===211)t=this.useBigInt64?this.readI64AsBigInt():this.readI64();else if(e===217){let e=this.lookU8();t=this.decodeString(e,1)}else if(e===218){let e=this.lookU16();t=this.decodeString(e,2)}else if(e===219){let e=this.lookU32();t=this.decodeString(e,4)}else if(e===220){let e=this.readU16();if(e!==0){this.pushArrayState(e),this.complete();continue DECODE}else t=[]}else if(e===221){let e=this.readU32();if(e!==0){this.pushArrayState(e),this.complete();continue DECODE}else t=[]}else if(e===222){let e=this.readU16();if(e!==0){this.pushMapState(e),this.complete();continue DECODE}else t={}}else if(e===223){let e=this.readU32();if(e!==0){this.pushMapState(e),this.complete();continue DECODE}else t={}}else if(e===196){let e=this.lookU8();t=this.decodeBinary(e,1)}else if(e===197){let e=this.lookU16();t=this.decodeBinary(e,2)}else if(e===198){let e=this.lookU32();t=this.decodeBinary(e,4)}else if(e===212)t=this.decodeExtension(1,0);else if(e===213)t=this.decodeExtension(2,0);else if(e===214)t=this.decodeExtension(4,0);else if(e===215)t=this.decodeExtension(8,0);else if(e===216)t=this.decodeExtension(16,0);else if(e===199){let e=this.lookU8();t=this.decodeExtension(e,1)}else if(e===200){let e=this.lookU16();t=this.decodeExtension(e,2)}else if(e===201){let e=this.lookU32();t=this.decodeExtension(e,4)}else throw new R(`Unrecognized type byte: ${V(e)}`);this.complete();let n=this.stack;for(;n.length>0;){let e=n.top();if(e.type===H)if(e.array[e.position]=t,e.position++,e.position===e.size)t=e.array,n.release(e);else continue DECODE;else if(e.type===U){if(t===`__proto__`)throw new R(`The key __proto__ is not allowed`);e.key=this.mapKeyConverter(t),e.type=ft;continue DECODE}else if(e.map[e.key]=t,e.readCount++,e.readCount===e.size)t=e.map,n.release(e);else{e.key=null,e.type=U;continue DECODE}}return t}}readHeadByte(){return this.headByte===W&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=W}readArraySize(){let e=this.readHeadByte();switch(e){case 220:return this.readU16();case 221:return this.readU32();default:if(e<160)return e-144;throw new R(`Unrecognized array type byte: ${V(e)}`)}}pushMapState(e){if(e>this.maxMapLength)throw new R(`Max length exceeded: map length (${e}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(e)}pushArrayState(e){if(e>this.maxArrayLength)throw new R(`Max length exceeded: array length (${e}) > maxArrayLength (${this.maxArrayLength})`);this.stack.pushArrayState(e)}decodeString(e,t){return!this.rawStrings||this.stateIsMapKey()?this.decodeUtf8String(e,t):this.decodeBinary(e,t)}decodeUtf8String(e,t){if(e>this.maxStrLength)throw new R(`Max length exceeded: UTF-8 byte length (${e}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+t+e)throw gt;let n=this.pos+t,r;return r=this.stateIsMapKey()&&this.keyDecoder?.canBeCached(e)?this.keyDecoder.decode(this.bytes,n,e):qe(this.bytes,n,e),this.pos+=t+e,r}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===U:!1}decodeBinary(e,t){if(e>this.maxBinLength)throw new R(`Max length exceeded: bin length (${e}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(e+t))throw gt;let n=this.pos+t,r=this.bytes.subarray(n,n+e);return this.pos+=t+e,r}decodeExtension(e,t){if(e>this.maxExtLength)throw new R(`Max length exceeded: ext length (${e}) > maxExtLength (${this.maxExtLength})`);let n=this.view.getInt8(this.pos+t),r=this.decodeBinary(e,t+1);return this.extensionCodec.decode(r,n,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let e=this.view.getUint8(this.pos);return this.pos++,e}readI8(){let e=this.view.getInt8(this.pos);return this.pos++,e}readU16(){let e=this.view.getUint16(this.pos);return this.pos+=2,e}readI16(){let e=this.view.getInt16(this.pos);return this.pos+=2,e}readU32(){let e=this.view.getUint32(this.pos);return this.pos+=4,e}readI32(){let e=this.view.getInt32(this.pos);return this.pos+=4,e}readU64(){let e=Xe(this.view,this.pos);return this.pos+=8,e}readI64(){let e=Ye(this.view,this.pos);return this.pos+=8,e}readU64AsBigInt(){let e=this.view.getBigUint64(this.pos);return this.pos+=8,e}readI64AsBigInt(){let e=this.view.getBigInt64(this.pos);return this.pos+=8,e}readF32(){let e=this.view.getFloat32(this.pos);return this.pos+=4,e}readF64(){let e=this.view.getFloat64(this.pos);return this.pos+=8,e}};function K(e,t){return new vt(t).decode(e)}var yt=o((e=>{e.hashU32=function(e){return e|=0,e=e+2127912214+(e<<12)|0,e=e^-949894596^e>>>19,e=e+374761393+(e<<5)|0,e=e+-744332180^e<<9,e=e+-42973499+(e<<3)|0,e^-1252372727^e>>>16|0},e.readU64=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,n|=e[t++]<<16,n|=e[t++]<<24,n|=e[t++]<<32,n|=e[t++]<<40,n|=e[t++]<<48,n|=e[t++]<<56,n},e.readU32=function(e,t){var n=0;return n|=e[t++]<<0,n|=e[t++]<<8,n|=e[t++]<<16,n|=e[t++]<<24,n},e.writeU32=function(e,t,n){e[t++]=n>>0&255,e[t++]=n>>8&255,e[t++]=n>>16&255,e[t++]=n>>24&255},e.imul=function(e,t){var n=e>>>16,r=e&65535,i=t>>>16,a=t&65535;return r*a+(n*a+r*i<<16)|0}})),bt=o((e=>{var t=yt(),n=2654435761,r=2246822519,i=3266489917,a=668265263,o=374761393;function s(e,t){return e|=0,t|=0,e>>>(32-t|0)|e<<t|0}function c(e,n,r){return e|=0,n|=0,r|=0,t.imul(e>>>(32-n|0)|e<<n,r)|0}function l(e,t){return e|=0,t|=0,e>>>t^e|0}function u(e,n,r,i,a){return c(t.imul(n,r)+e,i,a)}function d(e,r,i){return c(e+t.imul(r[i],o),11,n)}function f(e,n,r){return u(e,t.readU32(n,r),i,17,a)}function p(e,i,a){return[u(e[0],t.readU32(i,a+0),r,13,n),u(e[1],t.readU32(i,a+4),r,13,n),u(e[2],t.readU32(i,a+8),r,13,n),u(e[3],t.readU32(i,a+12),r,13,n)]}function m(e,a,c,u){var m,h=u;if(u>=16){for(m=[e+n+r,e+r,e,e-n];u>=16;)m=p(m,a,c),c+=16,u-=16;m=s(m[0],1)+s(m[1],7)+s(m[2],12)+s(m[3],18)+h}else m=e+o+u>>>0;for(;u>=4;)m=f(m,a,c),c+=4,u-=4;for(;u>0;)m=d(m,a,c),c++,u--;return m=l(t.imul(l(t.imul(l(m,15),r),13),i),16),m>>>0}e.hash=m})),q=l(o((e=>{var t=bt(),n=yt(),r=4,i=13,a=5,o=6,s=65536,c=4,l=(1<<c)-1,u=15,d=E(5<<20),f=w(),p=407708164,m=4,h=8,g=16,_=64,v=192,y=2147483648,b=7,x=4,S=7,C={4:65536,5:262144,6:1048576,7:4194304};function w(){try{return new Uint32Array(s)}catch{for(var e=Array(s),t=0;t<s;t++)e[t]=0;return e}}function T(e){for(var t=0;t<s;t++)f[t]=0}function E(e){try{return new Uint8Array(e)}catch{for(var t=Array(e),n=0;n<e;n++)t[n]=0;return t}}function D(e,t,n){if(Uint8Array.prototype.slice)return e.slice(t,n);var r=e.length;t|=0,t=t<0?Math.max(r+t,0):Math.min(t,r),n=n===void 0?r:n|0,n=n<0?Math.max(r+n,0):Math.min(n,r);for(var i=new Uint8Array(n-t),a=t,o=0;a<n;)i[o++]=e[a++];return i}e.compressBound=function(e){return e+e/255+16|0},e.decompressBound=function(e){var t=0;if(n.readU32(e,t)!==p)throw Error(`invalid magic number`);t+=4;var r=e[t++];if((r&v)!==_)throw Error(`incompatible descriptor version `+(r&v));var i=(r&g)!==0,a=(r&h)!==0,o=e[t++]>>x&S;if(C[o]===void 0)throw Error(`invalid block size `+o);var s=C[o];if(a)return n.readU64(e,t);t++;for(var c=0;;){var l=n.readU32(e,t);if(t+=4,l&y?(l&=~y,c+=l):c+=s,l===0)return c;i&&(t+=4),t+=l}},e.makeBuffer=E,e.decompressBlock=function(e,t,n,i,a){for(var o,s,c=n+i,l,u;n<c;){var d=e[n++],f=d>>4;if(f>0){if(f===15)for(;f+=e[n],e[n++]===255;);for(l=n+f;n<l;)t[a++]=e[n++]}if(n>=c)break;if(o=d&15,s=e[n++]|e[n++]<<8,o===15)for(;o+=e[n],e[n++]===255;);for(o+=r,u=a-s,l=u+o;u<l;)t[a++]=t[u++]|0}return a},e.compressBlock=function(e,t,s,d,f){var p,m,h,g,_,v,y=0,b=d+s,x;if(m=s,d>=i)for(var S=(1<<o)+3;s+r<b-a;){var C=n.readU32(e,s),w=n.hashU32(C)>>>0;if(w=(w>>16^w)>>>0&65535,p=f[w]-1,f[w]=s+1,p<0||s-p>>>16>0||n.readU32(e,p)!==C){_=S++>>o,s+=_;continue}for(S=(1<<o)+3,v=s-m,g=s-p,s+=r,p+=r,h=s;s<b-a&&e[s]===e[p];)s++,p++;h=s-h;var T=h<l?h:l;if(v>=u){for(t[y++]=(u<<c)+T,x=v-u;x>=255;x-=255)t[y++]=255;t[y++]=x}else t[y++]=(v<<c)+T;for(var E=0;E<v;E++)t[y++]=e[m+E];if(t[y++]=g,t[y++]=g>>8,h>=l){for(x=h-l;x>=255;x-=255)t[y++]=255;t[y++]=x}m=s}if(m===0)return 0;if(v=b-m,v>=u){for(t[y++]=u<<c,x=v-u;x>=255;x-=255)t[y++]=255;t[y++]=x}else t[y++]=v<<c;for(s=m;s<b;)t[y++]=e[s++];return y},e.decompressFrame=function(t,r){var i,a,o,s,c=0,l=0;if(n.readU32(t,c)!==p)throw Error(`invalid magic number`);if(c+=4,s=t[c++],(s&v)!==_)throw Error(`incompatible descriptor version`);if(i=(s&g)!==0,a=(s&m)!==0,o=(s&h)!==0,C[t[c++]>>x&S]===void 0)throw Error(`invalid block size`);for(o&&(c+=8),c++;;){var u=n.readU32(t,c);if(c+=4,u===0)break;if(i&&(c+=4),(u&y)!==0){u&=~y;for(var d=0;d<u;d++)r[l++]=t[c++]}else l=e.decompressBlock(t,r,c,u,l),c+=u}return a&&(c+=4),l},e.compressFrame=function(r,i){var a=0;n.writeU32(i,a,p),a+=4,i[a++]=_,i[a++]=b<<x,i[a]=t.hash(0,i,4,a-4)>>8,a++;var o=C[b],s=r.length,c=0;for(T(f);s>0;){var l=0,u=s>o?o:s;if(l=e.compressBlock(r,d,c,u,f),l>u||l===0){n.writeU32(i,a,2147483648|u),a+=4;for(var m=c+u;c<m;)i[a++]=r[c++];s-=u}else{n.writeU32(i,a,l),a+=4;for(var h=0;h<l;)i[a++]=d[h++];c+=u,s-=u}}return n.writeU32(i,a,0),a+=4,a},e.decompress=function(t,n){var r,i;return n===void 0&&(n=e.decompressBound(t)),r=e.makeBuffer(n),i=e.decompressFrame(t,r),i!==n&&(r=D(r,0,i)),r},e.compress=function(t,n){var r,i;return n===void 0&&(n=e.compressBound(t.length)),r=e.makeBuffer(n),i=e.compressFrame(t,r),i!==n&&(r=D(r,0,i)),r}}))()),xt=class{client;throttleTime;queue=[];batchTimeout=null;constructor(e,t=30){this.client=e,this.throttleTime=t}emit(e){this.queue.push(e),this.batchTimeout||=setTimeout(()=>{this.queue.length>0&&this.client.readyState===1&&this.client.send(q.compress(ct({event:`fn:call`,data:this.queue.splice(0,this.queue.length)}))),this.batchTimeout=null},this.throttleTime)}},St=o(((e,t)=>{t.exports=function(){throw Error(`ws does not work in the browser. Browser clients must use the native WebSocket object`)}})),J=(()=>{if(typeof window<`u`&&window.WebSocket)return window.WebSocket;if(typeof global<`u`)try{let e=St();return e.WebSocket||e}catch(e){throw console.warn(`WebSocket library not found. Please install ws package for Node.js environment.`),e}else throw Error(`WebSocket is not available in this environment`)})(),Ct=class e{static CONNECT_TIMEOUT_MS=15e3;socket=null;eventSocket=null;batchEmitter=null;connected=!1;lastCloseCode;eventSocketReady=!1;pendingSubscriptions=[];label;constructor(e=`GS`){this.label=e}rejectHandshake(e,t,n,r){console.warn(`[${this.label}] ${e} rejected:`,t.data?.message),this.disconnect(),r(!1),n.onDisconnect&&n.onDisconnect(t.data?.reconnect?4500:4400,t.data?.message)}createWebSocket(e){let t=new J(e);try{t.binaryType=`arraybuffer`}catch{}return t}sendMessage(e,t,n){if(e&&e.readyState===J.OPEN){if(e===this.eventSocket&&!this.eventSocketReady&&t!==`subscribeEvents`){this.pendingSubscriptions.push({event:t,data:n});return}e.send(q.compress(ct({event:t,data:n})))}else e===this.eventSocket&&t!==`subscribeEvents`&&this.pendingSubscriptions.push({event:t,data:n})}async connect(t,n){this.lastCloseCode=void 0,this.socket&&=(this.socket.onclose=null,this.socket.onerror=null,this.socket.onmessage=null,(this.socket.readyState===J.OPEN||this.socket.readyState===J.CONNECTING)&&this.socket.close(),null),this.eventSocket&&=(this.eventSocket.onclose=null,this.eventSocket.onerror=null,this.eventSocket.onmessage=null,(this.eventSocket.readyState===J.OPEN||this.eventSocket.readyState===J.CONNECTING)&&this.eventSocket.close(),null),this.connected=!1,this.eventSocketReady=!1,this.socket=this.createWebSocket(t),this.batchEmitter=new xt(this.socket);let r=()=>new Promise(t=>{let r=!1,i,a=e=>{r||(r=!0,clearTimeout(i),t(e))};i=setTimeout(()=>{console.warn(`[${this.label}] connect timed out after ${e.CONNECT_TIMEOUT_MS}ms`),this.disconnect(),a(!1)},e.CONNECT_TIMEOUT_MS),this.socket.onmessage=async e=>{try{let t=await Et(e.data);n.onSocketMessage&&n.onSocketMessage(t),t.event===`connected`?a(!0):t.event===`error`&&this.rejectHandshake(`connect`,t,n,a)}catch(e){console.warn(`[${this.label}] Error parsing socket message:`,e)}},this.socket.onopen=()=>{this.sendMessage(this.socket,`connectServer`,{verse:n.verse,account:n.account,proto:2,...n.auth&&{auth:n.auth},...n.roomId&&{roomId:n.roomId}})},this.socket.onclose=e=>{console.warn(`[${this.label}] socket.onclose code=${e?.code} reason=${e?.reason}`),typeof e?.code==`number`&&(this.lastCloseCode=e.code),a(!1),this.disconnect(),n.onDisconnect&&n.onDisconnect(e?.code,e?.reason)},this.socket.onerror=e=>{console.error(`[${this.label}] WebSocket error:`,e?.message||e?.type||e),a(!1),this.disconnect(),n.onError&&n.onError(e)}}),i=()=>new Promise(t=>{let r=!1,i,a=e=>{r||(r=!0,clearTimeout(i),t(e))};i=setTimeout(()=>{console.warn(`[${this.label}] event socket connect timed out after ${e.CONNECT_TIMEOUT_MS}ms`),this.disconnect(),a(!1)},e.CONNECT_TIMEOUT_MS),this.eventSocket.onmessage=async e=>{try{let t=await Et(e.data);n.onEventSocketMessage&&n.onEventSocketMessage(t),t.event===`connected`?(this.eventSocketReady=!0,this.pendingSubscriptions.length>0&&(this.pendingSubscriptions.forEach(({event:e,data:t})=>{this.sendMessage(this.eventSocket,e,t)}),this.pendingSubscriptions=[]),a(!0)):t.event===`error`&&this.rejectHandshake(`event socket`,t,n,a)}catch(e){console.warn(`[${this.label}] Error parsing event socket message:`,e)}},this.eventSocket.onopen=()=>{this.sendMessage(this.eventSocket,`subscribeEvents`,{verse:n.verse,account:n.account,proto:2,...n.auth&&{auth:n.auth}})},this.eventSocket.onclose=e=>{console.warn(`[${this.label}] eventSocket.onclose code=${e?.code} reason=${e?.reason}`),a(!1),this.disconnect(),n.onDisconnect&&n.onDisconnect(e?.code,e?.reason)},this.eventSocket.onerror=e=>{console.error(`[${this.label}] eventSocket.onerror:`,e?.message||e?.type||e),a(!1),this.disconnect(),n.onError&&n.onError(e)}});return this.connected=await r(),this.connected&&=(this.eventSocket=this.createWebSocket(t),await i()),this.connected}disconnect(){this.socket&&=(this.socket.onclose=null,this.socket.onerror=null,this.socket.onmessage=null,this.socket.close(),null),this.eventSocket&&=(this.eventSocket.onclose=null,this.eventSocket.onerror=null,this.eventSocket.onmessage=null,this.eventSocket.close(),null),this.connected=!1,this.eventSocketReady=!1,this.pendingSubscriptions=[],this.batchEmitter=null}},Y=[4,34,77,24];function wt(e){return e.length>=4&&e[0]===Y[0]&&e[1]===Y[1]&&e[2]===Y[2]&&e[3]===Y[3]}function Tt(e){let t=Math.max(64*1024,e.length*16),n=q.decompress(e,t);return n.length===t?q.decompress(e):n}async function Et(e){if(typeof e==`string`)return JSON.parse(e);let t=e instanceof Blob?new Uint8Array(await e.arrayBuffer()):new Uint8Array(e);return wt(t)?K(Tt(t)):K(t)}function Dt(e){return e>=4400&&e<4500}function Ot(e){return{terminal:typeof e==`number`&&Dt(e)}}var X=class extends Error{status;reason;terminal;retryAfterMs;constructor(e,t,n,r=t>=400&&t<500&&t!==429,i){super(e),this.status=t,this.reason=n,this.terminal=r,this.retryAfterMs=i,this.name=`RouteError`}};async function Z(e,t){let n=null;try{n=await e.json()}catch{}let r=e.headers?.get?.(`Retry-After`),i=r!=null&&r!==``?Number(r):NaN,a=Number.isFinite(i)&&i>=0?i*1e3:void 0,o=(typeof n?.retryAfterMs==`number`&&Number.isFinite(n.retryAfterMs)&&n.retryAfterMs>=0?n.retryAfterMs:void 0)??a,s=typeof n?.terminal==`boolean`?n.terminal:e.status>=400&&e.status<500&&e.status!==429,c=typeof n?.reason==`string`?n.reason:void 0,l=c??n?.error??``;return new X(`${t} failed (${e.status}): ${l}`,e.status,c,s,o)}function kt(e){let t=typeof e.error==`string`?e.error:`remote function error`,n=Error(t);return e.code!==void 0&&(n.code=e.code),e.retryable!==void 0&&(n.retryable=e.retryable),n}var At=class e{account;verse;remoteUrl;auth;connected=!1;get rsConnected(){return this.rs?.connected??!1}gs=new Ct(`GS`);_gsEndpoint=null;rs=null;_rsEndpoint=null;_currentRoomId=null;get socket(){return this.gs.socket}get eventSocket(){return this.gs.eventSocket}crossRampIntegration;_lastConfig={};static VXSHOP_SWEEP_MIN_INTERVAL_MS=6e4;_lastVxShopSweepAt=0;static RPC_TIMEOUT_MS=3e4;_refCount=0;_connectPromise=null;listeners={};gsSubscribeCount={};gsSubscribeLastState={};rsSubscribeCount={};rsSubscribeLastState={};static randomAccount=(()=>{if(localStorage.getItem(`agent8:temporary_account`))return localStorage.getItem(`agent8:temporary_account`);let e=`anonymous-`+Math.random().toString(36).substring(2,15);return localStorage.setItem(`agent8:temporary_account`,e),e})();static instances=new Map;static getInitialVerse(e={}){if(d()){if(e.verse)return e.verse;let t=u(`AGENT8_VERSE`);return t?t+`-preview`:(console.warn(`[GameServer] VITE_AGENT8_VERSE is required for preview environment. Please set it in your .env file.`),`default`)}return e.verse||u(`AGENT8_VERSE`)||`default`}static getInitialAccount(t={}){return Ie(t.account||new URLSearchParams(window.location.search).get(`account`)||window.location.hostname.startsWith(`agent8-container`)&&u(`AGENT8_ACCOUNT`)||e.randomAccount)}static getInitialRemoteUrl(e={}){return e.remoteUrl||u(`AGENT8_REMOTE_URL`)||`https://gs-gateway.verse8.io`}static getInitialAuth(e={}){return e.auth||new URLSearchParams(window.location.search).get(`auth`)||void 0}static getInstanceKey(t={}){return`${e.getInitialVerse(t)}:${e.getInitialAccount(t)}:${e.getInitialRemoteUrl(t)}:${e.getInitialAuth(t)??``}`}static getInstance(t={}){return new e(t)}constructor(t={}){let n=e.getInstanceKey(t),r=e.instances.get(n);if(r)return r;this.verse=e.getInitialVerse(t),this.account=e.getInitialAccount(t),this.remoteUrl=e.getInitialRemoteUrl(t),this.auth=e.getInitialAuth(t),this.crossRampIntegration=new ee(this.remoteUrl,this.verse,this.account,this.auth),e.instances.set(n,this)}async connect(e={}){if(this._refCount++,this.connected&&this.gs.connected)return!0;if(this._connectPromise)try{let e=await this._connectPromise;return e||this._releaseRefOnFailure(),e}catch(e){if(this._releaseRefOnFailure(),e instanceof X)throw e;return!1}this._connectPromise=this._doConnect(e);try{let e=await this._connectPromise;return e||this._releaseRefOnFailure(),e}catch(e){if(this._releaseRefOnFailure(),e instanceof X)throw e;return!1}finally{this._connectPromise=null}}_releaseRefOnFailure(){this._refCount=Math.max(0,this._refCount-1)}async _doConnect(e){e.verse&&(this.verse=e.verse),e.account&&(this.account=e.account),e.remoteUrl&&(this.remoteUrl=e.remoteUrl),e.auth!==void 0&&(this.auth=e.auth),this.gsSubscribeCount={},this.gsSubscribeLastState={},this.rsSubscribeCount={},this.rsSubscribeLastState={},this.crossRampIntegration.updateConfig(this.remoteUrl,this.verse,this.account,this.auth),this._lastConfig=e,console.log(`connect`,d(),this.verse,this.account,this.remoteUrl);let t=this._gsEndpoint??await this.discoverGsEndpoint(this.remoteUrl);return this.connected=await this.gs.connect(t,{verse:this.verse,account:this.account,auth:this.auth,onSocketMessage:e=>this.handleGsSocketMessage(e),onEventSocketMessage:e=>this.handleGsEventSocketMessage(e),onDisconnect:(t,n)=>{this.connected=!1,this._refCount=0,this._gsEndpoint=null,this.rejectPendingCalls(n?`connection lost: ${n}`:`connection lost`),this.disconnectRs(),e.onDisconnect&&e.onDisconnect(t,n)},onError:t=>{this.connected=!1,this._refCount=0,this._gsEndpoint=null,this.rejectPendingCalls(`connection error`),this.disconnectRs(),e.onError&&e.onError(t)}}),this.connected?(this._gsEndpoint=t,this.requestPendingVxShopClaims()):this._gsEndpoint=null,this.connected}clearGsEndpoint(){this._gsEndpoint=null}async disconnect(){if(this._refCount<=0){console.warn(`[GameServer] disconnect() called with refCount already 0 — unbalanced connect/disconnect`);return}this._refCount--,!(this._refCount>0)&&(this.disconnectRs(),this.gs.disconnect(),this.connected=!1,this.clearGsEndpoint())}requestPendingVxShopClaims(){if(!this.auth)return;let t=Date.now();if(t-this._lastVxShopSweepAt<e.VXSHOP_SWEEP_MIN_INTERVAL_MS)return;this._lastVxShopSweepAt=t;let n=this.remoteUrl.replace(/^ws/,`http`);fetch(`${n}/vx-shop/${encodeURIComponent(this.verse)}/request-claim`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${this.auth}`}}).then(e=>{e.ok||console.warn(`[GameServer] VX Shop pending-claim sweep failed: HTTP ${e.status}`),e.body?.cancel().catch(()=>{})}).catch(e=>{console.warn(`[GameServer] VX Shop pending-claim sweep failed:`,e instanceof Error?e.message:e)})}async discoverGsEndpoint(e){let t=await fetch(`${e}/route`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({verseId:this.verse})});if(!t.ok)throw await Z(t,`Route`);let n=await t.json();if(typeof n.gsEndpoint!=`string`||!n.gsEndpoint)throw new X(`Route returned no gsEndpoint`,t.status,`bad_request`,!0);return n.gsEndpoint}async requestRoomRoute(e){let t=await fetch(`${this.remoteUrl}/route/room`,{method:`POST`,headers:{"Content-Type":`application/json`,...this.auth?{Authorization:`Bearer ${this.auth}`}:{}},body:JSON.stringify({verseId:this.verse,roomId:e,account:this.account})});if(!t.ok)throw await Z(t,`Room route`);let n=await t.json();if(typeof n.rsEndpoint!=`string`||!n.rsEndpoint)throw new X(`Room route returned no rsEndpoint`,t.status,`bad_request`,!0);return{rsEndpoint:n.rsEndpoint}}async joinRoom(e){if(!e)throw Error(`roomId is required`);this.rs?.connected&&this.disconnectRs();let{rsEndpoint:t}=await this.requestRoomRoute(e);return await this.connectToRs(t,e,this._lastConfig),e}async reconnectToRoom(e,t={}){if(!this.connected)throw Error(`Cannot reconnect to RS: GS is not connected`);if(!e)throw Error(`roomId is required`);try{let n=this._rsEndpoint??(await this.requestRoomRoute(e)).rsEndpoint;await this.connectToRs(n,e,t)}catch(e){throw this._rsEndpoint=null,e}}leaveRoom(){this.disconnectRs()}async connectToRs(e,t,n={}){if(!this.connected)throw Error(`Cannot connect to RS: GS is not connected`);if(this.disconnectRs(),this._rsEndpoint=e,this._currentRoomId=t,this.rs=new Ct(`RS`),!await this.rs.connect(e,{verse:this.verse,account:this.account,auth:this.auth,roomId:t,onSocketMessage:e=>this.handleRsSocketMessage(e),onEventSocketMessage:e=>this.handleRsEventSocketMessage(e),onDisconnect:(e,t)=>{n.onRsDisconnect&&n.onRsDisconnect(e,t)},onError:e=>{n.onRsError&&n.onRsError(e)}})){let t=this.rs?.lastCloseCode,{terminal:n}=Ot(t);throw console.error(`[RS:connect] RS connection failed rsEndpoint=${e} closeCode=${t??`?`} terminal=${n}`),this.disconnectRs(),new X(`RS connection failed`,t??0,`rs_connect_failed`,n)}}disconnectRs(){!this.rs&&!this._currentRoomId||(this.rs&&=(this.rs.disconnect(),null),this._rsEndpoint=null,this._currentRoomId=null,this.rsSubscribeCount={},this.rsSubscribeLastState={})}sendRoomEventMessage(e,t){if(!this.rs?.connected){console.warn(`[GameServer] Cannot send room event "${e}": RS not connected`);return}this.rs.sendMessage(this.rs.eventSocket,e,t)}sendGsEventMessage(e,t){this.gs.sendMessage(this.gs.eventSocket,e,t)}handleGsSocketMessage(e){let{event:t,data:n}=e;switch(t){case`connected`:this.emit(t,n);break;case`batch`:for(let e of n)e.event?.startsWith(`fn:return:`)?this.emit(e.event,e.data):this.handleGsSocketMessage(e);break;default:t?.startsWith(`fn:return:`)&&this.emit(t,n);break}}handleGsEventSocketMessage(e){let{event:t,data:n}=e;switch(t){case`connected`:this.emit(`connected`,n);break;case`global:state:changed`:this.emit(`global:state:changed`,Q(n.message));break;case`global:users:state:changed`:n.account===this.account&&this.emit(`global:me:state:changed`,Q(n.message)),this.emit(`global:users:${n.account}:state:changed`,Q(n.message));break;case`global:collections:changed`:this.emit(`global:collections:${n.collectionId}:changed`,Q(n.message));break;case`asset:changed`:try{let e=Q(n.message);this.emit(`asset:${n.account}:changed`,e)}catch(e){console.error(`[GameServer] Error parsing asset message:`,n.message,e)}break;case`global:message`:this.emit(`global:message:${n.type}`,Q(n.message));break;case`batch`:for(let e of n)this.handleGsEventSocketMessage(e);break}}handleRsSocketMessage(e){let{event:t,data:n}=e;switch(t){case`connected`:break;case`batch`:for(let e of n)e.event?.startsWith(`fn:return:`)?this.emit(e.event,e.data):this.handleRsSocketMessage(e);break;default:t?.startsWith(`fn:return:`)&&this.emit(t,n);break}}handleRsEventSocketMessage(e){let{event:t,data:n}=e;switch(t){case`connected`:break;case`room:state:changed`:this.emit(`rooms:${n.roomId}:state:changed`,Q(n.message));break;case`room:users:state:changed`:n.account?this.emit(`rooms:${n.roomId}:users:${n.account}:state:changed`,Q(n.message)):this.emit(`rooms:${n.roomId}:users:state:changed`,Q(n.message));break;case`room:collections:changed`:this.emit(`rooms:${n.roomId}:collections:${n.collectionId}:changed`,Q(n.message));break;case`room:message`:this.emit(`rooms:${n.roomId}:message:${n.type}`,Q(n.message));break;case`batch`:for(let e of n)this.handleRsEventSocketMessage(e);break}}subscribeGlobalState(e){let t=`global:state:changed`,n=`global:state:changed`,r=n=>{this.gsSubscribeLastState[t]=n,e(n)};this.gsSubscribeCount[t]?this.gsSubscribeLastState[t]&&e(this.gsSubscribeLastState[t]):this.sendGsEventMessage(n,{}),this.gsSubscribeCount[t]=(this.gsSubscribeCount[t]||0)+1;let i=this.on(t,r);return()=>{i(),this.gsSubscribeCount[t]--,this.gsSubscribeCount[t]===0&&this.sendGsEventMessage(n,{unsubscribe:!0})}}subscribeGlobalMyState(e){return this.subscribeGlobalUserState(this.account,e)}subscribeGlobalUserState(e,t){if(!e)return console.warn(`subscribeGlobalUserState: account is required`),()=>{};let n=`global:users:${e}:state:changed`,r=`global:users:state:changed`,i=e=>{this.gsSubscribeLastState[n]=e,t(e)};this.gsSubscribeCount[n]?this.gsSubscribeLastState[n]&&t(this.gsSubscribeLastState[n]):this.sendGsEventMessage(r,{account:e}),this.gsSubscribeCount[n]=(this.gsSubscribeCount[n]||0)+1;let a=this.on(n,i);return()=>{a(),this.gsSubscribeCount[n]--,this.gsSubscribeCount[n]===0&&this.sendGsEventMessage(r,{account:e,unsubscribe:!0})}}subscribeGlobalCollection(e,t){if(!e)return console.warn(`subscribeGlobalCollection: collectionId is required`),()=>{};let n=`global:collections:${e}:changed`,r=`global:collections:changed`,i=({op:e,items:r})=>{this.gsSubscribeLastState[n]||(this.gsSubscribeLastState[n]=[]),e===`add`?D.addItems(this.gsSubscribeLastState[n],r):e===`deleteAll`?this.gsSubscribeLastState[n]=[]:e===`delete`?D.removeItems(this.gsSubscribeLastState[n],r):e===`update`&&D.updateItems(this.gsSubscribeLastState[n],r),t({items:this.gsSubscribeLastState[n],changes:{op:e,items:r}})};this.gsSubscribeCount[n]?this.gsSubscribeLastState[n]&&t({items:this.gsSubscribeLastState[n],changes:{op:`add`,items:this.gsSubscribeLastState[n]}}):this.sendGsEventMessage(r,{collectionId:e}),this.gsSubscribeCount[n]=(this.gsSubscribeCount[n]||0)+1;let a=this.on(n,i);return()=>{a(),this.gsSubscribeCount[n]--,this.gsSubscribeCount[n]===0&&this.sendGsEventMessage(r,{collectionId:e,unsubscribe:!0})}}subscribeAsset(e,t){if(!e)return console.warn(`subscribeAsset: account is required`),()=>{};let n=`asset:${e}:changed`,r=`asset:changed`,i=e=>{this.gsSubscribeLastState[n]=e,t(e)};this.gsSubscribeCount[n]?this.gsSubscribeLastState[n]&&t(this.gsSubscribeLastState[n]):this.sendGsEventMessage(r,{account:e}),this.gsSubscribeCount[n]=(this.gsSubscribeCount[n]||0)+1;let a=this.on(n,i);return()=>{a(),this.gsSubscribeCount[n]--,this.gsSubscribeCount[n]===0&&this.sendGsEventMessage(r,{account:e,unsubscribe:!0})}}onGlobalMessage(e,t){if(!e)return console.warn(`onGlobalMessage: type is required`),()=>{};let n=this.on(`global:message:${e}`,t);return this.sendGsEventMessage(`global:message`,{type:e}),()=>{n(),this.sendGsEventMessage(`global:message`,{type:e,unsubscribe:!0})}}subscribeRoomState(e,t){if(!e)return console.warn(`subscribeRoomState: roomId is required`),()=>{};let n=`rooms:${e}:state:changed`,r=e=>{this.rsSubscribeLastState[n]=e,t(e)};this.rsSubscribeCount[n]?this.rsSubscribeLastState[n]&&t(this.rsSubscribeLastState[n]):this.sendRoomEventMessage(`room:state:changed`,{roomId:e}),this.rsSubscribeCount[n]=(this.rsSubscribeCount[n]||0)+1;let i=this.on(n,r);return()=>{i(),this.rsSubscribeCount[n]--,this.rsSubscribeCount[n]===0&&this.sendRoomEventMessage(`room:state:changed`,{roomId:e,unsubscribe:!0})}}subscribeRoomMyState(e,t){return this.subscribeRoomUserState(e,this.account,t)}subscribeRoomUserState(e,t,n){if(!e)return console.warn(`subscribeRoomUserState: roomId is required`),()=>{};if(!t)return console.warn(`subscribeRoomUserState: account is required`),()=>{};let r=`rooms:${e}:users:${t}:state:changed`,i=`room:users:state:changed`,a=e=>{this.rsSubscribeLastState[r]=e,n(e)};this.rsSubscribeCount[r]?this.rsSubscribeLastState[r]&&n(this.rsSubscribeLastState[r]):this.sendRoomEventMessage(i,{roomId:e,account:t}),this.rsSubscribeCount[r]=(this.rsSubscribeCount[r]||0)+1;let o=this.on(r,a);return()=>{o(),this.rsSubscribeCount[r]--,this.rsSubscribeCount[r]===0&&this.sendRoomEventMessage(i,{roomId:e,account:t,unsubscribe:!0})}}subscribeRoomAllUserStates(e,t){if(!e)return console.warn(`subscribeRoomAllUserStates: roomId is required`),()=>{};let n=`rooms:${e}:users:state:changed`,r=e=>{this.rsSubscribeLastState[n]||(this.rsSubscribeLastState[n]=[]);let r={};for(let e of this.rsSubscribeLastState[n])delete e.__updated,r[e.account]=e;for(let t of e)t.__leaved?delete r[t.account]:r[t.account]={...t,account:t.account,__updated:!0};let i=Object.values(r);this.rsSubscribeLastState[n]=i,t(i)};this.rsSubscribeCount[n]?this.rsSubscribeLastState[n]&&t(this.rsSubscribeLastState[n]):this.sendRoomEventMessage(`room:users:state:changed`,{roomId:e}),this.rsSubscribeCount[n]=(this.rsSubscribeCount[n]||0)+1;let i=this.on(n,r);return()=>{i(),this.rsSubscribeCount[n]--,this.rsSubscribeCount[n]===0&&this.sendRoomEventMessage(`room:users:state:changed`,{roomId:e,unsubscribe:!0})}}subscribeRoomCollection(e,t,n){if(!e)return console.warn(`subscribeRoomCollection: roomId is required`),()=>{};if(!t)return console.warn(`subscribeRoomCollection: collectionId is required`),()=>{};let r=`rooms:${e}:collections:${t}:changed`,i=({op:e,items:t})=>{this.rsSubscribeLastState[r]||(this.rsSubscribeLastState[r]=[]),e===`add`?D.addItems(this.rsSubscribeLastState[r],t):e===`deleteAll`?this.rsSubscribeLastState[r]=[]:e===`delete`?D.removeItems(this.rsSubscribeLastState[r],t):e===`update`&&D.updateItems(this.rsSubscribeLastState[r],t),n({items:this.rsSubscribeLastState[r],changes:{op:e,items:t}})};this.rsSubscribeCount[r]?this.rsSubscribeLastState[r]&&n({items:this.rsSubscribeLastState[r],changes:{op:`add`,items:this.rsSubscribeLastState[r]}}):this.sendRoomEventMessage(`room:collections:changed`,{collectionId:t,roomId:e}),this.rsSubscribeCount[r]=(this.rsSubscribeCount[r]||0)+1;let a=this.on(r,i);return()=>{a(),this.rsSubscribeCount[r]--,this.rsSubscribeCount[r]===0&&this.sendRoomEventMessage(`room:collections:changed`,{roomId:e,collectionId:t,unsubscribe:!0})}}onRoomUserJoin(e,t){return this.onRoomMessage(e,`$JOIN`,e=>{t(e.account)})}onRoomUserLeave(e,t){return this.onRoomMessage(e,`$LEAVE`,e=>{t(e.account)})}onRoomMessage(e,t,n){if(!e)return console.warn(`onRoomMessage: roomId is required`),()=>{};if(!t)return console.warn(`onRoomMessage: type is required`),()=>{};let r=this.on(`rooms:${e}:message:${t}`,n);return this.sendRoomEventMessage(`room:message`,{roomId:e,type:t}),()=>{r(),this.sendRoomEventMessage(`room:message`,{roomId:e,type:t,unsubscribe:!0})}}callTimestamps={};throttledFunctions={};async remoteFunction(t,n=[],{needResponse:r,throttle:i,throttleKey:a,throttleTrailing:o,target:s}={}){if(t===`joinRoom`||t===`leaveRoom`)throw Error(`${t}() is no longer available via remoteFunction(). Use server.${t}() directly.`);n=$(n);let c=s||`auto`,l=c===`rs`||c===`auto`&&this.rs?.connected===!0;if(l&&(!this.rs?.connected||!this.rs.batchEmitter))return Promise.reject(Error(`RS is not connected. Cannot send to target 'rs'.`));let u=l?this.rs.batchEmitter:this.gs.batchEmitter;if(!u)return Promise.reject(Error(`GS batch emitter is null (socket disconnected). Reconnect required.`));if(typeof i==`number`){i<30&&(i=30);let e=a?`${t}:${a}`:t;r=!1,o&&(e+=`:t`),this.throttledFunctions[e]||(this.throttledFunctions[e]=(0,E.default)(e=>{let t=l?this.rs?.batchEmitter:this.gs.batchEmitter;t&&t.emit(e)},i,{leading:!0,trailing:o===!0}));let s=Math.random().toString(36).substring(2,15);return this.throttledFunctions[e]({callId:s,fn:t,args:n,needResponse:!1}),Promise.resolve(null)}else{let i=Date.now();return this.callTimestamps[t]||(this.callTimestamps[t]=[]),this.callTimestamps[t]=this.callTimestamps[t].filter(e=>i-e<1e3),this.callTimestamps[t].length>=10?Promise.reject(Error(`Too many calls to the function. Use throttle option.`)):(this.callTimestamps[t].push(i),new Promise((i,a)=>{let o=Math.random().toString(36).substring(2,15),s=!1,c=()=>{},l,d=e=>{s||(s=!0,l&&clearTimeout(l),c(),e&&e.error!=null?a(kt(e)):i(e?e.result:void 0))};u.emit({callId:o,fn:t,args:n,needResponse:r}),r===!1?i(null):(c=this.on(`fn:return:`+o,d),l=setTimeout(()=>d({error:`remoteFunction "${t}" timed out`,code:`TIMEOUT`,retryable:!0}),e.RPC_TIMEOUT_MS))}))}}on(e,t){return t?(this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t),()=>{this.listeners[e]=this.listeners[e].filter(e=>e!==t)}):()=>{}}emit(e,t){if(this.listeners[e])for(let n of this.listeners[e])n(t)}rejectPendingCalls(e){let t={error:e,code:`DISCONNECTED`,retryable:!0};for(let e of Object.keys(this.listeners))if(e.startsWith(`fn:return:`))for(let n of[...this.listeners[e]])n(t)}get currentRoomId(){return this._currentRoomId}get rsEndpoint(){return this._rsEndpoint}async getCrossRampShopUrl(e=`en`){return this.crossRampIntegration.getShopUrl(e)}async getCrossRampForgeUrl(e=`en`){return this.crossRampIntegration.getForgeUrl(e)}};function Q(e){return e instanceof Uint8Array?K(e):JSON.parse(e)}function $(e){if(e===void 0)return`__undefined__`;if(typeof e==`number`)return Number.isFinite(e)?e:null;if(typeof e!=`object`||!e||ArrayBuffer.isView(e))return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(typeof e.toJSON==`function`)return $(e.toJSON());if(Array.isArray(e))return e.map(e=>typeof e==`function`||typeof e==`symbol`?null:$(e));let t={};for(let[n,r]of Object.entries(e))typeof r==`function`||typeof r==`symbol`||(t[n]=$(r));return t}export{At as GameServer,X as RouteError,Z as routeErrorFromResponse,$ as sanitizeArgs,s as t};
@@ -1 +1 @@
1
- import{i as e,n as t}from"./index-QEwr2eXD.js";async function n(e,n){return new a((await t(()=>import(`./GameServer-C56iOUgF.js`),[],import.meta.url)).GameServer,e,{diagnostics:n})}var r=[500,1e3,2e3,4e3,8e3],i=8,a=class{raw;active=new Map;reconnecting=!1;disposed=!1;diagnostics;wait;constructor(e,t,n){this.diagnostics=n?.diagnostics??null,this.wait=n?.wait??(e=>new Promise(t=>{setTimeout(t,e)})),this.raw=new e({...t})}get account(){return this.raw.account}get connected(){return this.raw.connected}connect(){return this.raw.connected?Promise.resolve(!0):(this.disposed=!1,this.rawConnect())}rawConnect(){return this.raw.connect({onDisconnect:()=>void this.reconnect()})}disconnect(){this.disposed=!0;for(let e of this.active.values())e.off();return this.active.clear(),this.raw.disconnect()}remoteFunction(e,t,n){return this.raw.remoteFunction(e,t,n)}track(e){let t=Symbol(`sub`),n={make:e,off:e()};return this.active.set(t,n),()=>{n.off(),this.active.delete(t)}}async reconnect(){if(!this.disposed&&!this.reconnecting){this.reconnecting=!0;try{for(let t=0;t<i;t++){let n=!1,i=null;try{n=await this.rawConnect()!==!1}catch(e){i=e}if(this.disposed)return;if(n){for(let e of this.active.values())e.off(),e.off=e.make();t>0&&e(this.diagnostics,`info`,`[incanto] multiplayer reconnected after ${t+1} attempts.`);return}t===0&&e(this.diagnostics,`warn`,`[incanto] the multiplayer connection dropped and the server would not take it back${i?` (${i instanceof Error?i.message:String(i)})`:``}. Retrying — other players cannot see this one until it comes back.`);let a=r[Math.min(t,r.length-1)]??8e3;if(await this.wait(a),this.disposed)return}e(this.diagnostics,`error`,`[incanto] multiplayer gave up after ${i} reconnect attempts — this client is offline and the others cannot see it. Call connect() again to retry.`)}finally{this.reconnecting=!1}}}subscribeRoomState(e,t){return this.track(()=>this.raw.subscribeRoomState(e,t))}subscribeRoomMyState(e,t){return this.track(()=>this.raw.subscribeRoomMyState(e,t))}subscribeRoomAllUserStates(e,t){return this.track(()=>this.raw.subscribeRoomAllUserStates(e,e=>{let n={};for(let t of e??[]){if(!t||typeof t.account!=`string`||t.__leaved)continue;let{account:e,__updated:r,__leaved:i,...a}=t;n[e]=a}t(n)}))}subscribeRoomCollection(e,t,n){return this.track(()=>this.raw.subscribeRoomCollection(e,t,({items:e})=>{let t={};for(let n of e??[])n&&typeof n.__id==`string`&&(t[n.__id]=n);n(t)}))}onRoomMessage(e,t,n){return this.track(()=>this.raw.onRoomMessage(e,t,n))}onRoomUserJoin(e,t){return this.track(()=>this.raw.onRoomUserJoin(e,t))}onRoomUserLeave(e,t){return this.track(()=>this.raw.onRoomUserLeave(e,t))}subscribeGlobalState(e){return this.track(()=>this.raw.subscribeGlobalState(e))}subscribeGlobalMyState(e){return this.track(()=>this.raw.subscribeGlobalMyState(e))}subscribeGlobalUserState(e,t){return this.track(()=>this.raw.subscribeGlobalUserState(e,t))}subscribeGlobalCollection(e,t){return this.track(()=>this.raw.subscribeGlobalCollection(e,({items:e})=>{let n={};for(let t of e??[])t&&typeof t.__id==`string`&&(n[t.__id]=t);t(n)}))}subscribeAsset(e,t){return this.track(()=>this.raw.subscribeAsset(e,t))}onGlobalMessage(e,t){return this.track(()=>this.raw.onGlobalMessage(e,t))}};export{n as createAgent8Server};
1
+ import{i as e,n as t}from"./index-DM_zXnSe.js";async function n(e,n){return new a((await t(()=>import(`./GameServer-BlrNxR5M.js`),[],import.meta.url)).GameServer,e,{diagnostics:n})}var r=[500,1e3,2e3,4e3,8e3],i=8,a=class{raw;active=new Map;reconnecting=!1;disposed=!1;diagnostics;wait;constructor(e,t,n){this.diagnostics=n?.diagnostics??null,this.wait=n?.wait??(e=>new Promise(t=>{setTimeout(t,e)})),this.raw=new e({...t})}get account(){return this.raw.account}get connected(){return this.raw.connected}connect(){return this.raw.connected?Promise.resolve(!0):(this.disposed=!1,this.rawConnect())}rawConnect(){return this.raw.connect({onDisconnect:()=>void this.reconnect()})}disconnect(){this.disposed=!0;for(let e of this.active.values())e.off();return this.active.clear(),this.raw.disconnect()}remoteFunction(e,t,n){return this.raw.remoteFunction(e,t,n)}track(e){let t=Symbol(`sub`),n={make:e,off:e()};return this.active.set(t,n),()=>{n.off(),this.active.delete(t)}}async reconnect(){if(!this.disposed&&!this.reconnecting){this.reconnecting=!0;try{for(let t=0;t<i;t++){let n=!1,i=null;try{n=await this.rawConnect()!==!1}catch(e){i=e}if(this.disposed)return;if(n){for(let e of this.active.values())e.off(),e.off=e.make();t>0&&e(this.diagnostics,`info`,`[incanto] multiplayer reconnected after ${t+1} attempts.`);return}t===0&&e(this.diagnostics,`warn`,`[incanto] the multiplayer connection dropped and the server would not take it back${i?` (${i instanceof Error?i.message:String(i)})`:``}. Retrying — other players cannot see this one until it comes back.`);let a=r[Math.min(t,r.length-1)]??8e3;if(await this.wait(a),this.disposed)return}e(this.diagnostics,`error`,`[incanto] multiplayer gave up after ${i} reconnect attempts — this client is offline and the others cannot see it. Call connect() again to retry.`)}finally{this.reconnecting=!1}}}subscribeRoomState(e,t){return this.track(()=>this.raw.subscribeRoomState(e,t))}subscribeRoomMyState(e,t){return this.track(()=>this.raw.subscribeRoomMyState(e,t))}subscribeRoomAllUserStates(e,t){return this.track(()=>this.raw.subscribeRoomAllUserStates(e,e=>{let n={};for(let t of e??[]){if(!t||typeof t.account!=`string`||t.__leaved)continue;let{account:e,__updated:r,__leaved:i,...a}=t;n[e]=a}t(n)}))}subscribeRoomCollection(e,t,n){return this.track(()=>this.raw.subscribeRoomCollection(e,t,({items:e})=>{let t={};for(let n of e??[])n&&typeof n.__id==`string`&&(t[n.__id]=n);n(t)}))}onRoomMessage(e,t,n){return this.track(()=>this.raw.onRoomMessage(e,t,n))}onRoomUserJoin(e,t){return this.track(()=>this.raw.onRoomUserJoin(e,t))}onRoomUserLeave(e,t){return this.track(()=>this.raw.onRoomUserLeave(e,t))}subscribeGlobalState(e){return this.track(()=>this.raw.subscribeGlobalState(e))}subscribeGlobalMyState(e){return this.track(()=>this.raw.subscribeGlobalMyState(e))}subscribeGlobalUserState(e,t){return this.track(()=>this.raw.subscribeGlobalUserState(e,t))}subscribeGlobalCollection(e,t){return this.track(()=>this.raw.subscribeGlobalCollection(e,({items:e})=>{let n={};for(let t of e??[])t&&typeof t.__id==`string`&&(n[t.__id]=t);t(n)}))}subscribeAsset(e,t){return this.track(()=>this.raw.subscribeAsset(e,t))}onGlobalMessage(e,t){return this.track(()=>this.raw.onGlobalMessage(e,t))}};export{n as createAgent8Server};
@@ -1,3 +1,3 @@
1
- import{a as e,o as t,r as n,t as r}from"./index-QEwr2eXD.js";function i(e,t,n,r=1){let i=Math.min(e.x0,e.x1)*r,a=Math.max(e.x0,e.x1)*r,o=Math.min(e.y0,e.y1)*r,s=Math.max(e.y0,e.y1)*r,c=Math.max(0,Math.min(Math.round(i),t-1)),l=Math.max(0,Math.min(Math.round(o),n-1));return{x:c,y:l,w:Math.max(1,Math.min(Math.round(a-i),t-c)),h:Math.max(1,Math.min(Math.round(s-o),n-l))}}function a(e,t,n,r){let{x:i,y:a,w:o,h:s}=r,c=new Uint8ClampedArray(o*s*4);for(let n=0;n<s;n++){let r=((a+n)*t+i)*4,s=n*o*4;c.set(e.subarray(r,r+o*4),s)}return{pixels:c,width:o,height:s}}function o(e){if(!e)return`// no scene loaded`;let t=e.source??e;return JSON.stringify(t,null,2)}async function s(e){let t=globalThis.navigator;if(!t?.clipboard?.writeText)return!1;try{return await t.clipboard.writeText(e),!0}catch{return!1}}async function c(e,t){let n=globalThis,r=n.navigator?.clipboard?.write;if(!r||!n.ImageData||!n.ClipboardItem)return!1;try{let i=e.createElement(`canvas`);i.width=t.width,i.height=t.height;let a=i.getContext(`2d`);if(!a)return!1;a.putImageData(new n.ImageData(t.pixels,t.width,t.height),0,0);let o=await new Promise(e=>i.toBlob(e,`image/png`));return o?(await r.call(n.navigator?.clipboard,[new n.ClipboardItem({"image/png":o})]),!0):!1}catch{return!1}}var l=[`nw`,`n`,`ne`,`e`,`se`,`s`,`sw`,`w`],u={nw:[0,0],n:[.5,0],ne:[1,0],e:[1,.5],se:[1,1],s:[.5,1],sw:[0,1],w:[0,.5]},d={nw:`nwse-resize`,se:`nwse-resize`,ne:`nesw-resize`,sw:`nesw-resize`,n:`ns-resize`,s:`ns-resize`,e:`ew-resize`,w:`ew-resize`},f=(e,t,n)=>Math.max(t,Math.min(n,e));function p(e){return{x:Math.min(e.x0,e.x1),y:Math.min(e.y0,e.y1),w:Math.abs(e.x1-e.x0),h:Math.abs(e.y1-e.y0)}}function m(e,t,n,r,i,a){let o=e.x,s=e.y,c=e.x+e.w,l=e.y+e.h;return t.includes(`w`)&&(o=f(o+n,0,i)),t.includes(`e`)&&(c=f(c+n,0,i)),t.includes(`n`)&&(s=f(s+r,0,a)),t.includes(`s`)&&(l=f(l+r,0,a)),{x:Math.min(o,c),y:Math.min(s,l),w:Math.max(1,Math.abs(c-o)),h:Math.max(1,Math.abs(l-s))}}function h(e,t,n,r,i){return{...e,x:f(e.x+t,0,Math.max(0,r-e.w)),y:f(e.y+n,0,Math.max(0,i-e.h))}}function g(e,t,n,r,i,a=8){let o=f(e.x+e.w/2-t/2,a,Math.max(a,r-t-a)),s=e.y+e.h+a,c=e.y-n-a;return{x:o,y:s+n<=i-a?s:c>=a?c:f(s,a,Math.max(a,i-n-a))}}function _(e,t){let n=e?.clientWidth??0,r=e?.clientHeight??0;return n>0&&r>0?{w:n,h:r}:{w:t.documentElement?.clientWidth??0,h:t.documentElement?.clientHeight??0}}function v(e,t,n,r,i,a,o=180,s=120){let c=Math.max(o,n),l=Math.max(s,r);return{x:i>0?Math.min(Math.max(0,e),Math.max(0,i-c)):e,y:a>0?Math.min(Math.max(0,t),Math.max(0,a-l)):t,w:c,h:l}}function y(e,t,n,r,i,a=4){let o=Math.min(Math.max(0,e.x),Math.max(0,r-t)),s=e.y+e.h+a,c=e.y-n-a;return s+n<=i?{x:o,y:s}:c>=0?{x:o,y:c}:{x:o,y:Math.min(Math.max(0,s),Math.max(0,i-n))}}function b(e,t,n){let r=e=>{e.key===`Escape`&&n()},i=e=>{let r=e.target;if(r){for(let e of t)if(e&&(e===r||e.contains?.(r)))return;n()}};return e.addEventListener?.(`keydown`,r),e.addEventListener?.(`pointerdown`,i),()=>{e.removeEventListener?.(`keydown`,r),e.removeEventListener?.(`pointerdown`,i)}}function x(e,t){for(let[n,r]of Object.entries(t))e.style[n]=r}var S=`rgba(18, 20, 26, 0.92)`,C=`1px solid rgba(255,255,255,0.14)`,w=`12px ui-monospace, SFMono-Regular, Menlo, monospace`,T=class{doc;host;el;body;onClose=()=>{};x;y;w;h;constructor(e,t,n,r){this.doc=e,this.host=t,this.x=r.x,this.y=r.y,this.w=r.w,this.h=r.h,this.el=e.createElement(`div`),x(this.el,{position:`absolute`,background:S,border:C,borderRadius:`8px`,color:`rgba(255,255,255,0.88)`,font:w,display:`flex`,flexDirection:`column`,overflow:`hidden`,zIndex:`40`,pointerEvents:`auto`,boxShadow:`0 8px 28px rgba(0,0,0,0.45)`});let i=e.createElement(`div`);i.textContent=n,x(i,{padding:`6px 28px 6px 10px`,background:`rgba(255,255,255,0.07)`,cursor:`move`,userSelect:`none`,touchAction:`none`,fontWeight:`700`}),this.el.appendChild(i);let a=e.createElement(`div`);a.textContent=`×`,a.title=`close`,x(a,{position:`absolute`,top:`2px`,right:`8px`,cursor:`pointer`,fontSize:`16px`,lineHeight:`20px`,opacity:`0.7`}),a.addEventListener(`click`,()=>this.onClose()),this.el.appendChild(a),this.body=e.createElement(`div`),x(this.body,{flex:`1`,overflow:`auto`,padding:`8px 10px`}),this.el.appendChild(this.body);let o=e.createElement(`div`);o.textContent=`◢`,x(o,{position:`absolute`,right:`2px`,bottom:`0`,cursor:`nwse-resize`,opacity:`0.5`,userSelect:`none`,touchAction:`none`}),this.el.appendChild(o),this.wireDrag(i,(e,t)=>{this.x+=e,this.y+=t,this.layout()}),this.wireDrag(o,(e,t)=>{this.w+=e,this.h+=t,this.layout()}),this.layout(),t.appendChild(this.el)}remove(){this.el.remove()}layout(){let e=_(this.host,this.doc),t=v(this.x,this.y,this.w,this.h,e.w,e.h);this.x=t.x,this.y=t.y,this.w=t.w,this.h=t.h,x(this.el,{left:`${t.x}px`,top:`${t.y}px`,width:`${t.w}px`,height:`${t.h}px`})}wireDrag(e,t){let r=null,i=0,a=0;e.addEventListener(`pointerdown`,t=>{r=t.pointerId,i=t.clientX,a=t.clientY,n(e,t.pointerId)}),e.addEventListener(`pointermove`,e=>{e.pointerId===r&&(t(e.clientX-i,e.clientY-a),i=e.clientX,a=e.clientY)});let o=e=>{e.pointerId===r&&(r=null)};e.addEventListener(`pointerup`,o),e.addEventListener(`pointercancel`,o)}},E=4,D=`#6ee7dc`,O=`rgba(18,20,26,0.94)`,k=`12px ui-monospace, Menlo, monospace`;function A(e){let{doc:t,container:r}=e,i=t.createElement(`div`);x(i,{position:`absolute`,inset:`0`,cursor:`crosshair`,zIndex:`80`,pointerEvents:`auto`,userSelect:`none`,touchAction:`none`});let a=t.createElement(`div`);x(a,{position:`absolute`,inset:`0`,background:`rgba(10,14,20,0.35)`,pointerEvents:`none`}),i.appendChild(a);let o=t.createElement(`div`);x(o,{position:`absolute`,outline:`1px solid ${D}`,boxShadow:`0 0 0 9999px rgba(10,14,20,0.35)`,cursor:`grab`,display:`none`,pointerEvents:`auto`}),i.appendChild(o);let s=t.createElement(`div`);x(s,{position:`absolute`,padding:`2px 6px`,borderRadius:`4px`,background:O,color:D,font:k,pointerEvents:`none`,display:`none`,whiteSpace:`nowrap`}),i.appendChild(s);let c=t.createElement(`div`);c.textContent=`drag to select · Esc to cancel`,x(c,{position:`absolute`,top:`10px`,left:`50%`,transform:`translateX(-50%)`,padding:`4px 10px`,borderRadius:`6px`,background:O,color:`rgba(255,255,255,0.85)`,font:k,pointerEvents:`none`,whiteSpace:`nowrap`}),i.appendChild(c);let f=null,_=`idle`,v={x:0,y:0},y={x:0,y:0,w:0,h:0},b=()=>({w:r.clientWidth||1,h:r.clientHeight||1});for(let e of l){let n=t.createElement(`div`),[r,i]=u[e];x(n,{position:`absolute`,left:`${r*100}%`,top:`${i*100}%`,width:`10px`,height:`10px`,marginLeft:`-5px`,marginTop:`-5px`,borderRadius:`2px`,background:D,border:`1px solid rgba(10,14,20,0.75)`,cursor:d[e],pointerEvents:`auto`}),n.addEventListener(`pointerdown`,t=>{A(t,e)}),o.appendChild(n)}let S=t.createElement(`div`);x(S,{position:`absolute`,display:`none`,gap:`6px`,padding:`6px`,borderRadius:`8px`,background:O,border:`1px solid rgba(255,255,255,0.18)`,font:k,pointerEvents:`auto`,whiteSpace:`nowrap`,boxShadow:`0 4px 16px rgba(0,0,0,0.45)`});let C=(e,n,r)=>{let i=t.createElement(`div`);return i.textContent=e,x(i,{padding:`5px 10px`,borderRadius:`5px`,cursor:`pointer`,color:n?`#08121a`:`rgba(255,255,255,0.85)`,background:n?D:`rgba(255,255,255,0.08)`,userSelect:`none`}),i.addEventListener(`pointerdown`,e=>{w(e),r()}),i};S.appendChild(C(`Copy to clipboard`,!0,()=>P())),S.appendChild(C(`Cancel`,!1,()=>L())),i.appendChild(S);function w(e){e.preventDefault?.(),e.stopPropagation?.()}function T(e){let t=e,n=r.getBoundingClientRect?.()??{left:0,top:0};return{x:(t.clientX??0)-n.left,y:(t.clientY??0)-n.top}}function A(e,t){w(e),v=T(e),_=t,t===`create`?f={x:v.x,y:v.y,w:0,h:0}:f&&(y=f),x(S,{display:`none`}),x(o,{cursor:t===`move`?`grabbing`:`crosshair`});let r=e.pointerId;r!==void 0&&n(i,r),j()}function j(){if(!f){x(o,{display:`none`}),x(s,{display:`none`}),x(a,{display:`block`});return}x(a,{display:`none`}),x(o,{display:`block`,left:`${f.x}px`,top:`${f.y}px`,width:`${f.w}px`,height:`${f.h}px`});let t=e.scale();s.textContent=`${Math.round(f.w*t)}×${Math.round(f.h*t)}`;let n=f.y-24;x(s,{display:`block`,left:`${Math.max(2,f.x)}px`,top:`${n>=2?n:f.y+4}px`})}function M(){if(!f||f.w<E||f.h<E)return;x(S,{display:`flex`});let e=b(),t=S.offsetWidth||200,n=S.offsetHeight||36,r=g(f,t,n,e.w,e.h);x(S,{left:`${r.x}px`,top:`${r.y}px`})}i.addEventListener(`pointerdown`,e=>{A(e,`create`)}),o.addEventListener(`pointerdown`,e=>{A(e,`move`)}),i.addEventListener(`pointermove`,e=>{if(_===`idle`||!f)return;let t=T(e),n=b();if(_===`create`){let e=p({x0:v.x,y0:v.y,x1:t.x,y1:t.y});f={x:Math.max(0,Math.min(e.x,n.w)),y:Math.max(0,Math.min(e.y,n.h)),w:Math.min(e.w,n.w-Math.max(0,Math.min(e.x,n.w))),h:Math.min(e.h,n.h-Math.max(0,Math.min(e.y,n.h)))}}else f=_===`move`?h(y,t.x-v.x,t.y-v.y,n.w,n.h):m(y,_,t.x-v.x,t.y-v.y,n.w,n.h);j()});let N=()=>{_!==`idle`&&(_===`create`&&f&&(f.w<E||f.h<E)&&(f=null),_=`idle`,x(o,{cursor:`grab`}),c.textContent=f?`drag the handles or the middle · Enter to copy · Esc to cancel`:`drag to select · Esc to cancel`,j(),M())};i.addEventListener(`pointerup`,N),i.addEventListener(`pointercancel`,N);function P(){let t=f;L(),t&&e.onCopy(t)}let F=e=>{let t=e.key;t===`Escape`?L():t===`Enter`&&f&&P()};t.addEventListener?.(`keydown`,F);let I=!1;function L(){I||(I=!0,t.removeEventListener?.(`keydown`,F),i.remove(),e.onClose())}return r.appendChild(i),{element:i,close:L}}var j=96,M=200,N=8192;function P(e){return Array.isArray(e)?`Array(${e.length})`:`Object(${Object.keys(e).length} keys)`}function F(e,t){if(Array.isArray(e)&&e.some(e=>typeof e==`object`&&!!e)){let t=e.slice(0,M).map(e=>JSON.stringify(e)),n=e.length-M;return t.join(`
1
+ import{a as e,o as t,r as n,t as r}from"./index-DM_zXnSe.js";function i(e,t,n,r=1){let i=Math.min(e.x0,e.x1)*r,a=Math.max(e.x0,e.x1)*r,o=Math.min(e.y0,e.y1)*r,s=Math.max(e.y0,e.y1)*r,c=Math.max(0,Math.min(Math.round(i),t-1)),l=Math.max(0,Math.min(Math.round(o),n-1));return{x:c,y:l,w:Math.max(1,Math.min(Math.round(a-i),t-c)),h:Math.max(1,Math.min(Math.round(s-o),n-l))}}function a(e,t,n,r){let{x:i,y:a,w:o,h:s}=r,c=new Uint8ClampedArray(o*s*4);for(let n=0;n<s;n++){let r=((a+n)*t+i)*4,s=n*o*4;c.set(e.subarray(r,r+o*4),s)}return{pixels:c,width:o,height:s}}function o(e){if(!e)return`// no scene loaded`;let t=e.source??e;return JSON.stringify(t,null,2)}async function s(e){let t=globalThis.navigator;if(!t?.clipboard?.writeText)return!1;try{return await t.clipboard.writeText(e),!0}catch{return!1}}async function c(e,t){let n=globalThis,r=n.navigator?.clipboard?.write;if(!r||!n.ImageData||!n.ClipboardItem)return!1;try{let i=e.createElement(`canvas`);i.width=t.width,i.height=t.height;let a=i.getContext(`2d`);if(!a)return!1;a.putImageData(new n.ImageData(t.pixels,t.width,t.height),0,0);let o=await new Promise(e=>i.toBlob(e,`image/png`));return o?(await r.call(n.navigator?.clipboard,[new n.ClipboardItem({"image/png":o})]),!0):!1}catch{return!1}}var l=[`nw`,`n`,`ne`,`e`,`se`,`s`,`sw`,`w`],u={nw:[0,0],n:[.5,0],ne:[1,0],e:[1,.5],se:[1,1],s:[.5,1],sw:[0,1],w:[0,.5]},d={nw:`nwse-resize`,se:`nwse-resize`,ne:`nesw-resize`,sw:`nesw-resize`,n:`ns-resize`,s:`ns-resize`,e:`ew-resize`,w:`ew-resize`},f=(e,t,n)=>Math.max(t,Math.min(n,e));function p(e){return{x:Math.min(e.x0,e.x1),y:Math.min(e.y0,e.y1),w:Math.abs(e.x1-e.x0),h:Math.abs(e.y1-e.y0)}}function m(e,t,n,r,i,a){let o=e.x,s=e.y,c=e.x+e.w,l=e.y+e.h;return t.includes(`w`)&&(o=f(o+n,0,i)),t.includes(`e`)&&(c=f(c+n,0,i)),t.includes(`n`)&&(s=f(s+r,0,a)),t.includes(`s`)&&(l=f(l+r,0,a)),{x:Math.min(o,c),y:Math.min(s,l),w:Math.max(1,Math.abs(c-o)),h:Math.max(1,Math.abs(l-s))}}function h(e,t,n,r,i){return{...e,x:f(e.x+t,0,Math.max(0,r-e.w)),y:f(e.y+n,0,Math.max(0,i-e.h))}}function g(e,t,n,r,i,a=8){let o=f(e.x+e.w/2-t/2,a,Math.max(a,r-t-a)),s=e.y+e.h+a,c=e.y-n-a;return{x:o,y:s+n<=i-a?s:c>=a?c:f(s,a,Math.max(a,i-n-a))}}function _(e,t){let n=e?.clientWidth??0,r=e?.clientHeight??0;return n>0&&r>0?{w:n,h:r}:{w:t.documentElement?.clientWidth??0,h:t.documentElement?.clientHeight??0}}function v(e,t,n,r,i,a,o=180,s=120){let c=Math.max(o,n),l=Math.max(s,r);return{x:i>0?Math.min(Math.max(0,e),Math.max(0,i-c)):e,y:a>0?Math.min(Math.max(0,t),Math.max(0,a-l)):t,w:c,h:l}}function y(e,t,n,r,i,a=4){let o=Math.min(Math.max(0,e.x),Math.max(0,r-t)),s=e.y+e.h+a,c=e.y-n-a;return s+n<=i?{x:o,y:s}:c>=0?{x:o,y:c}:{x:o,y:Math.min(Math.max(0,s),Math.max(0,i-n))}}function b(e,t,n){let r=e=>{e.key===`Escape`&&n()},i=e=>{let r=e.target;if(r){for(let e of t)if(e&&(e===r||e.contains?.(r)))return;n()}};return e.addEventListener?.(`keydown`,r),e.addEventListener?.(`pointerdown`,i),()=>{e.removeEventListener?.(`keydown`,r),e.removeEventListener?.(`pointerdown`,i)}}function x(e,t){for(let[n,r]of Object.entries(t))e.style[n]=r}var S=`rgba(18, 20, 26, 0.92)`,C=`1px solid rgba(255,255,255,0.14)`,w=`12px ui-monospace, SFMono-Regular, Menlo, monospace`,T=class{doc;host;el;body;onClose=()=>{};x;y;w;h;constructor(e,t,n,r){this.doc=e,this.host=t,this.x=r.x,this.y=r.y,this.w=r.w,this.h=r.h,this.el=e.createElement(`div`),x(this.el,{position:`absolute`,background:S,border:C,borderRadius:`8px`,color:`rgba(255,255,255,0.88)`,font:w,display:`flex`,flexDirection:`column`,overflow:`hidden`,zIndex:`40`,pointerEvents:`auto`,boxShadow:`0 8px 28px rgba(0,0,0,0.45)`});let i=e.createElement(`div`);i.textContent=n,x(i,{padding:`6px 28px 6px 10px`,background:`rgba(255,255,255,0.07)`,cursor:`move`,userSelect:`none`,touchAction:`none`,fontWeight:`700`}),this.el.appendChild(i);let a=e.createElement(`div`);a.textContent=`×`,a.title=`close`,x(a,{position:`absolute`,top:`2px`,right:`8px`,cursor:`pointer`,fontSize:`16px`,lineHeight:`20px`,opacity:`0.7`}),a.addEventListener(`click`,()=>this.onClose()),this.el.appendChild(a),this.body=e.createElement(`div`),x(this.body,{flex:`1`,overflow:`auto`,padding:`8px 10px`}),this.el.appendChild(this.body);let o=e.createElement(`div`);o.textContent=`◢`,x(o,{position:`absolute`,right:`2px`,bottom:`0`,cursor:`nwse-resize`,opacity:`0.5`,userSelect:`none`,touchAction:`none`}),this.el.appendChild(o),this.wireDrag(i,(e,t)=>{this.x+=e,this.y+=t,this.layout()}),this.wireDrag(o,(e,t)=>{this.w+=e,this.h+=t,this.layout()}),this.layout(),t.appendChild(this.el)}remove(){this.el.remove()}layout(){let e=_(this.host,this.doc),t=v(this.x,this.y,this.w,this.h,e.w,e.h);this.x=t.x,this.y=t.y,this.w=t.w,this.h=t.h,x(this.el,{left:`${t.x}px`,top:`${t.y}px`,width:`${t.w}px`,height:`${t.h}px`})}wireDrag(e,t){let r=null,i=0,a=0;e.addEventListener(`pointerdown`,t=>{r=t.pointerId,i=t.clientX,a=t.clientY,n(e,t.pointerId)}),e.addEventListener(`pointermove`,e=>{e.pointerId===r&&(t(e.clientX-i,e.clientY-a),i=e.clientX,a=e.clientY)});let o=e=>{e.pointerId===r&&(r=null)};e.addEventListener(`pointerup`,o),e.addEventListener(`pointercancel`,o)}},E=4,D=`#6ee7dc`,O=`rgba(18,20,26,0.94)`,k=`12px ui-monospace, Menlo, monospace`;function A(e){let{doc:t,container:r}=e,i=t.createElement(`div`);x(i,{position:`absolute`,inset:`0`,cursor:`crosshair`,zIndex:`80`,pointerEvents:`auto`,userSelect:`none`,touchAction:`none`});let a=t.createElement(`div`);x(a,{position:`absolute`,inset:`0`,background:`rgba(10,14,20,0.35)`,pointerEvents:`none`}),i.appendChild(a);let o=t.createElement(`div`);x(o,{position:`absolute`,outline:`1px solid ${D}`,boxShadow:`0 0 0 9999px rgba(10,14,20,0.35)`,cursor:`grab`,display:`none`,pointerEvents:`auto`}),i.appendChild(o);let s=t.createElement(`div`);x(s,{position:`absolute`,padding:`2px 6px`,borderRadius:`4px`,background:O,color:D,font:k,pointerEvents:`none`,display:`none`,whiteSpace:`nowrap`}),i.appendChild(s);let c=t.createElement(`div`);c.textContent=`drag to select · Esc to cancel`,x(c,{position:`absolute`,top:`10px`,left:`50%`,transform:`translateX(-50%)`,padding:`4px 10px`,borderRadius:`6px`,background:O,color:`rgba(255,255,255,0.85)`,font:k,pointerEvents:`none`,whiteSpace:`nowrap`}),i.appendChild(c);let f=null,_=`idle`,v={x:0,y:0},y={x:0,y:0,w:0,h:0},b=()=>({w:r.clientWidth||1,h:r.clientHeight||1});for(let e of l){let n=t.createElement(`div`),[r,i]=u[e];x(n,{position:`absolute`,left:`${r*100}%`,top:`${i*100}%`,width:`10px`,height:`10px`,marginLeft:`-5px`,marginTop:`-5px`,borderRadius:`2px`,background:D,border:`1px solid rgba(10,14,20,0.75)`,cursor:d[e],pointerEvents:`auto`}),n.addEventListener(`pointerdown`,t=>{A(t,e)}),o.appendChild(n)}let S=t.createElement(`div`);x(S,{position:`absolute`,display:`none`,gap:`6px`,padding:`6px`,borderRadius:`8px`,background:O,border:`1px solid rgba(255,255,255,0.18)`,font:k,pointerEvents:`auto`,whiteSpace:`nowrap`,boxShadow:`0 4px 16px rgba(0,0,0,0.45)`});let C=(e,n,r)=>{let i=t.createElement(`div`);return i.textContent=e,x(i,{padding:`5px 10px`,borderRadius:`5px`,cursor:`pointer`,color:n?`#08121a`:`rgba(255,255,255,0.85)`,background:n?D:`rgba(255,255,255,0.08)`,userSelect:`none`}),i.addEventListener(`pointerdown`,e=>{w(e),r()}),i};S.appendChild(C(`Copy to clipboard`,!0,()=>P())),S.appendChild(C(`Cancel`,!1,()=>L())),i.appendChild(S);function w(e){e.preventDefault?.(),e.stopPropagation?.()}function T(e){let t=e,n=r.getBoundingClientRect?.()??{left:0,top:0};return{x:(t.clientX??0)-n.left,y:(t.clientY??0)-n.top}}function A(e,t){w(e),v=T(e),_=t,t===`create`?f={x:v.x,y:v.y,w:0,h:0}:f&&(y=f),x(S,{display:`none`}),x(o,{cursor:t===`move`?`grabbing`:`crosshair`});let r=e.pointerId;r!==void 0&&n(i,r),j()}function j(){if(!f){x(o,{display:`none`}),x(s,{display:`none`}),x(a,{display:`block`});return}x(a,{display:`none`}),x(o,{display:`block`,left:`${f.x}px`,top:`${f.y}px`,width:`${f.w}px`,height:`${f.h}px`});let t=e.scale();s.textContent=`${Math.round(f.w*t)}×${Math.round(f.h*t)}`;let n=f.y-24;x(s,{display:`block`,left:`${Math.max(2,f.x)}px`,top:`${n>=2?n:f.y+4}px`})}function M(){if(!f||f.w<E||f.h<E)return;x(S,{display:`flex`});let e=b(),t=S.offsetWidth||200,n=S.offsetHeight||36,r=g(f,t,n,e.w,e.h);x(S,{left:`${r.x}px`,top:`${r.y}px`})}i.addEventListener(`pointerdown`,e=>{A(e,`create`)}),o.addEventListener(`pointerdown`,e=>{A(e,`move`)}),i.addEventListener(`pointermove`,e=>{if(_===`idle`||!f)return;let t=T(e),n=b();if(_===`create`){let e=p({x0:v.x,y0:v.y,x1:t.x,y1:t.y});f={x:Math.max(0,Math.min(e.x,n.w)),y:Math.max(0,Math.min(e.y,n.h)),w:Math.min(e.w,n.w-Math.max(0,Math.min(e.x,n.w))),h:Math.min(e.h,n.h-Math.max(0,Math.min(e.y,n.h)))}}else f=_===`move`?h(y,t.x-v.x,t.y-v.y,n.w,n.h):m(y,_,t.x-v.x,t.y-v.y,n.w,n.h);j()});let N=()=>{_!==`idle`&&(_===`create`&&f&&(f.w<E||f.h<E)&&(f=null),_=`idle`,x(o,{cursor:`grab`}),c.textContent=f?`drag the handles or the middle · Enter to copy · Esc to cancel`:`drag to select · Esc to cancel`,j(),M())};i.addEventListener(`pointerup`,N),i.addEventListener(`pointercancel`,N);function P(){let t=f;L(),t&&e.onCopy(t)}let F=e=>{let t=e.key;t===`Escape`?L():t===`Enter`&&f&&P()};t.addEventListener?.(`keydown`,F);let I=!1;function L(){I||(I=!0,t.removeEventListener?.(`keydown`,F),i.remove(),e.onClose())}return r.appendChild(i),{element:i,close:L}}var j=96,M=200,N=8192;function P(e){return Array.isArray(e)?`Array(${e.length})`:`Object(${Object.keys(e).length} keys)`}function F(e,t){if(Array.isArray(e)&&e.some(e=>typeof e==`object`&&!!e)){let t=e.slice(0,M).map(e=>JSON.stringify(e)),n=e.length-M;return t.join(`
2
2
  `)+(n>0?`\n… ${n} more`:``)}return t.length>N?`${t.slice(0,N)} … (${t.length-N} more chars)`:t}function I(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var L=2,R=4;function z(e,t={}){let n=t.doc??(typeof document<`u`?document:null);if(!n)return null;let r=t.container??(typeof document<`u`?document.body:null);return!r||typeof r.appendChild!=`function`?null:new H(e,r,n,t.statsSource,t.actions,t.frameSource)}var B=300,V=[`log`,`info`,`warn`,`error`,`debug`],H=class{engine;container;doc;statsSource;actions;frameSource;panels=new Map;cleanups=[];menuButton;dropdown=null;dismissDropdown=null;menuPos={x:8,y:8};selected=null;collapsedFlags=new Map;statsChip=null;logRows=[];levelEnabled={debug:!0,info:!0,warn:!0,error:!0};consoleCapture=!1;consolePatched=[];frame=0;editing=0;detailOpen=new WeakMap;resumeScale=1;timeEls=null;hovering=!1;constructor(e,t,n,r,i=[],a){this.engine=e,this.container=t,this.doc=n,this.statsSource=r,this.actions=i,this.frameSource=a,this.menuButton=n.createElement(`div`),this.menuButton.textContent=`☰ debug`,x(this.menuButton,{position:`absolute`,top:`8px`,left:`8px`,padding:`4px 10px`,background:`rgba(18,20,26,0.85)`,border:`1px solid rgba(255,255,255,0.18)`,borderRadius:`6px`,color:`rgba(255,255,255,0.85)`,font:`12px ui-monospace, Menlo, monospace`,cursor:`pointer`,userSelect:`none`,zIndex:`50`,pointerEvents:`auto`}),this.bindMenuDrag(),t.style.position||(t.style.position=`relative`),t.appendChild(this.menuButton),this.cleanups.push(e.log.added.connect(e=>{this.pushLog({level:e.level,source:`engine`,text:e.parts.map(G).join(` `)})})),this.cleanups.push(e.sceneChanged.connect(()=>{this.selected=null,this.applyColliderScope(),this.renderExplorer(),this.renderInspector()})),this.cleanups.push(e.updated.connect(()=>{this.frame+=1,this.frame%30==0&&(this.renderExplorer(),this.renderStats(),this.editing===0&&!this.hovering&&this.renderInspector(),this.syncTime())}))}isOpen(e){return e===`copyScene`||e===`captureRegion`?!1:e===`colliders`?this.colliderMode!==`off`:e===`stats`?this.statsChip!==null:this.panels.has(e)}colliderMode=`off`;setColliders(e){this.colliderMode=e,this.applyColliderScope()}applyColliderScope(){let e=this.colliderMode;for(let t of r(`2d`).concat(r(`3d`)))t.debugDraw=e!==`off`,t.debugScope=e===`selected`?this.selected:null}open(e){if(e===`stats`){this.openStatsChip();return}if(this.panels.has(e)){e===`explorer`&&this.renderExplorer(),e===`inspector`&&this.renderInspector(),e===`logs`&&this.renderLogs(),e===`time`&&this.renderTime();return}let t=new T(this.doc,this.container,{explorer:`Explorer`,inspector:`Inspector`,logs:`Logs`,time:`Time`}[e],{explorer:{x:12,y:44,w:240,h:320},inspector:{x:264,y:44,w:280,h:320},logs:{x:12,y:380,w:532,h:200},time:{x:556,y:44,w:260,h:150}}[e]);t.onClose=()=>this.close(e),e===`inspector`&&(t.body.addEventListener(`pointerenter`,()=>{this.hovering=!0}),t.body.addEventListener(`pointerleave`,()=>{this.hovering=!1})),this.panels.set(e,t),e===`explorer`&&this.renderExplorer(),e===`inspector`&&this.renderInspector(),e===`logs`&&this.renderLogs(),e===`time`&&this.renderTime()}close(e){if(e===`inspector`&&(this.hovering=!1),e===`stats`){this.statsChip?.remove(),this.statsChip=null;return}let t=this.panels.get(e);t&&(t.remove(),this.panels.delete(e))}toggle(e){if(e===`copyScene`){this.copyScene();return}if(e===`captureRegion`){this.captureRegion();return}if(e===`colliders`){this.setColliders({off:`all`,all:`selected`,selected:`off`}[this.colliderMode]);return}this.isOpen(e)?this.close(e):this.open(e)}setLevelEnabled(e,t){this.levelEnabled[e]=t,this.renderLogs()}setConsoleCapture(e){if(e!==this.consoleCapture)if(this.consoleCapture=e,e){this.renderLogs();let e=console;for(let t of V){let n=e[t];e[t]=(...e)=>{n.apply(console,e);let r=t===`log`?`info`:t;this.pushLog({level:r,source:`console`,text:e.map(G).join(` `)})},this.consolePatched.push(()=>{e[t]=n})}}else{for(let e of this.consolePatched)e();this.consolePatched=[],this.renderLogs()}}dispose(){this.engine.debugSelection=null,this.setColliders(`off`),this.setConsoleCapture(!1);for(let e of this.cleanups)e();for(let e of[...this.panels.keys()])this.close(e);this.close(`stats`),this.closeDropdown(),this.menuButton.remove()}menuLabel(e,t){let n=e===`colliders`&&this.colliderMode!==`off`?` · ${this.colliderMode}`:``;return`${this.isOpen(e)?`✓ `:``}${t}${n}`}bindMenuDrag(){let e=null,t=!1;this.menuButton.addEventListener(`pointerdown`,n=>{let r=n;e={x:r.clientX??0,y:r.clientY??0,bx:this.menuPos.x,by:this.menuPos.y},t=!1,r.pointerId!==void 0&&this.menuButton.setPointerCapture?.(r.pointerId)}),this.menuButton.addEventListener(`pointermove`,n=>{if(!e)return;let r=n,i=(r.clientX??0)-e.x,a=(r.clientY??0)-e.y;!t&&Math.hypot(i,a)<R||(t||(t=!0,this.closeDropdown(),x(this.menuButton,{cursor:`grabbing`})),this.moveMenuButton(e.bx+i,e.by+a))});let n=()=>{if(!e)return;let n=t;e=null,t=!1,x(this.menuButton,{cursor:`pointer`}),n||this.toggleDropdown()};this.menuButton.addEventListener(`pointerup`,n),this.menuButton.addEventListener(`pointercancel`,n)}moveMenuButton(e,t){let n=this.menuButton,r=_(this.container,this.doc),i=v(e,t,n.offsetWidth??0,n.offsetHeight??0,r.w,r.h,0,0);this.menuPos={x:i.x,y:i.y},x(this.menuButton,{left:`${i.x}px`,top:`${i.y}px`})}closeDropdown(){this.dismissDropdown?.(),this.dismissDropdown=null,this.dropdown?.remove(),this.dropdown=null}toggleDropdown(){if(this.dropdown){this.closeDropdown();return}let e=this.doc.createElement(`div`);x(e,{position:`absolute`,background:`rgba(18,20,26,0.95)`,border:`1px solid rgba(255,255,255,0.18)`,borderRadius:`6px`,font:`12px ui-monospace, Menlo, monospace`,color:`rgba(255,255,255,0.85)`,zIndex:`60`,pointerEvents:`auto`,overflow:`hidden`});for(let[t,n]of[[`explorer`,`Explorer`],[`inspector`,`Inspector`],[`logs`,`Logs`],[`time`,`Time`],[`copyScene`,`Copy scene JSON`],[`captureRegion`,`Capture region`],[`stats`,`Stats`],[`colliders`,`Colliders`]]){let r=this.doc.createElement(`div`);r.textContent=this.menuLabel(t,n),x(r,{padding:`6px 14px`,cursor:`pointer`,userSelect:`none`}),r.addEventListener(`click`,()=>{if(this.toggle(t),t===`colliders`){r.textContent=this.menuLabel(t,n);return}this.closeDropdown()}),e.appendChild(r)}for(let t of this.actions){let n=this.doc.createElement(`div`);n.textContent=t.label,x(n,{padding:`6px 14px`,cursor:`pointer`,userSelect:`none`,borderTop:`1px solid rgba(255,255,255,0.14)`,color:`rgba(158,232,220,0.95)`}),n.addEventListener(`click`,()=>{this.closeDropdown(),t.run()}),e.appendChild(n)}this.container.appendChild(e),this.dropdown=e;let t=e,n=this.menuButton,r=_(this.container,this.doc),i=y({x:this.menuPos.x,y:this.menuPos.y,w:n.offsetWidth??0,h:n.offsetHeight??26},t.offsetWidth??0,t.offsetHeight??0,r.w,r.h);x(e,{left:`${i.x}px`,top:`${i.y}px`}),this.dismissDropdown=b(this.doc,[e,this.menuButton],()=>this.closeDropdown())}openStatsChip(){if(this.statsChip)return;let e=this.doc.createElement(`div`);x(e,{position:`absolute`,top:`8px`,right:`8px`,padding:`4px 10px`,background:`rgba(18,20,26,0.85)`,border:`1px solid rgba(255,255,255,0.18)`,borderRadius:`6px`,color:`rgba(255,255,255,0.85)`,font:`12px ui-monospace, Menlo, monospace`,textAlign:`right`,whiteSpace:`pre`,userSelect:`none`,pointerEvents:`none`,zIndex:`70`}),this.container.appendChild(e),this.statsChip=e,this.renderStats()}renderStats(){let e=this.statsChip;if(!e)return;let t=this.engine.stats(),n=this.statsSource?.()??{},r=[`nodes ${t.nodes}`,...n.triangles===void 0?[]:[`tris ${W(n.triangles)}`],...n.drawCalls===void 0?[]:[`calls ${n.drawCalls}`]].join(` · `),i=t.phases,a=`\nphys ${i.fixedMs.toFixed(1)} · logic ${i.updateMs.toFixed(1)} · draw ${i.renderMs.toFixed(1)} · other ${i.otherMs.toFixed(1)}`;e.textContent=`${Math.round(t.fps)} fps · ${t.frameMs.toFixed(1)} ms\n${r}${a}`}renderExplorer(){let e=this.panels.get(`explorer`);if(!e)return;let t=e.body.scrollTop;U(e.body);let n=this.engine.scene?.root;if(!n){e.body.scrollTop=t;return}let r=(e,t)=>{let n=e.constructor,i=e.children.length>0,a=this.collapsedFlags.get(e)===!0,o=this.doc.createElement(`div`);x(o,{display:`flex`,alignItems:`center`,cursor:`pointer`,padding:`1px 2px`,borderRadius:`3px`,background:e===this.selected?`rgba(110,160,255,0.25)`:`transparent`});let s=this.doc.createElement(`span`);s.textContent=i?a?`▸`:`▾`:`·`,x(s,{width:`14px`,flex:`none`,textAlign:`center`,opacity:i?`0.85`:`0.25`,userSelect:`none`}),i&&s.addEventListener(`click`,t=>{t.stopPropagation?.(),this.collapsedFlags.set(e,!a),this.renderExplorer()}),o.appendChild(s);let c=this.doc.createElement(`span`);c.textContent=e.name,x(c,{whiteSpace:`nowrap`}),o.appendChild(c);let l=this.doc.createElement(`span`);if(l.textContent=` ${n.typeName}`,x(l,{opacity:`0.45`,whiteSpace:`nowrap`,fontSize:`10px`}),o.appendChild(l),i&&a){let t=this.doc.createElement(`span`);t.textContent=` (${e.children.length})`,x(t,{opacity:`0.35`,fontSize:`10px`}),o.appendChild(t)}if(o.addEventListener(`click`,()=>{this.selected=e,this.engine.debugSelection=e,this.applyColliderScope(),this.open(`inspector`),this.renderExplorer(),this.renderInspector()}),t.appendChild(o),i&&!a){let n=this.doc.createElement(`div`);x(n,{marginLeft:`8px`,paddingLeft:`8px`,borderLeft:`1px solid rgba(255,255,255,0.14)`});for(let t of e.children)r(t,n);t.appendChild(n)}};r(n,e.body),e.body.scrollTop=t}renderInspector(){let t=this.panels.get(`inspector`);if(!t)return;let n=t.body.scrollTop;U(t.body);let r=this.selected;if(r&&r.tree===null&&(this.selected=null,this.engine.debugSelection=null,this.applyColliderScope(),r=null),!r){let e=this.doc.createElement(`div`);e.textContent=`select a node in the Explorer`,x(e,{opacity:`0.6`}),t.body.appendChild(e);return}let i=r.constructor,a=this.doc.createElement(`div`);if(a.textContent=`${r.getPath()} · ${i.typeName}${r.uid?` · ${r.uid}`:``}`,x(a,{fontWeight:`700`,marginBottom:`6px`,whiteSpace:`pre-wrap`}),t.body.appendChild(a),r.groups.size>0){let e=this.doc.createElement(`div`);e.textContent=`groups: ${[...r.groups].join(`, `)}`,x(e,{opacity:`0.7`,marginBottom:`6px`}),t.body.appendChild(e)}let o=e(i),s=r;for(let e of Object.keys(o)){let n=o[e];this.renderValueRow(t.body,r,e,{read:()=>s[e],write:t=>{s[e]=t},options:n?.options,variants:n?.variants})}t.body.scrollTop=n}renderValueRow(e,n,r,i){let a=i.read(),o=i.options,s={get[r](){return i.read()},set[r](e){i.write(e)}},c=this.doc.createElement(`div`);x(c,{display:`flex`,gap:`6px`,alignItems:`center`,margin:`2px 0`});let l=this.doc.createElement(`div`);l.textContent=r,x(l,{minWidth:`84px`,opacity:`0.75`}),c.appendChild(l);let u=(e,t)=>{let i=this.doc.createElement(`input`);return i.type=`number`,i.value=String(e),x(i,q(`70px`)),this.trackEditing(i),i.addEventListener(`change`,()=>{let e=Number(i.value);Number.isFinite(e)?t(e):i.value=String(n[r])}),i};if(typeof a==`number`)c.appendChild(u(a,e=>{s[r]=e}));else if(typeof a==`boolean`){let e=this.doc.createElement(`input`);e.type=`checkbox`,e.checked=a,this.trackEditing(e),e.addEventListener(`change`,()=>{s[r]=e.checked}),c.appendChild(e)}else if(typeof a==`string`&&o&&o.length>0){let e=this.doc.createElement(`select`);for(let t of o.includes(a)?o:[a,...o]){let n=this.doc.createElement(`option`);n.value=t,n.textContent=t,t===a&&(n.selected=!0),e.appendChild(n)}e.value=a,this.trackEditing(e),e.addEventListener(`change`,()=>{s[r]=e.value}),x(e,q(`110px`)),c.appendChild(e)}else if(typeof a==`string`){let e=this.doc.createElement(`input`);e.type=`text`,e.value=a,this.trackEditing(e),x(e,q(`140px`)),e.addEventListener(`change`,()=>{s[r]=e.value}),c.appendChild(e)}else if(Array.isArray(a)&&a.length<=8&&a.every(e=>typeof e==`number`))for(let e=0;e<a.length;e++)c.appendChild(u(a[e],t=>{let n=[...s[r]];n[e]=t,s[r]=n}));else if(I(a)){let o=this.doc.createElement(`div`);x(o,{marginLeft:`10px`,paddingLeft:`8px`,borderLeft:`1px solid rgba(255,255,255,0.14)`});let s=i.variants?.tag,l=Object.keys(a);s&&!l.includes(s)&&l.unshift(s);let u=i.path??r;for(let e of l){let r=e===s;this.renderValueRow(o,n,e,{path:`${u}.${e}`,read:()=>i.read()[e]??(r?``:null),write:n=>{if(r&&i.variants){let e=i.variants.byTag[String(n)];if(e!==void 0){i.write(t(e));return}}i.write({...i.read(),[e]:n})},options:r&&i.variants?Object.keys(i.variants.byTag):void 0})}e.appendChild(c),e.appendChild(o);return}else{let o=JSON.stringify(t(a));if(o.length<=j){let e=this.doc.createElement(`div`);e.textContent=o,x(e,{opacity:`0.65`,whiteSpace:`pre-wrap`,wordBreak:`break-all`}),c.appendChild(e)}else{let t=i.path??r,s=this.detailOpen.get(n)?.has(t)??!1,l=this.doc.createElement(`div`);if(l.textContent=`${s?`▾`:`▸`} ${P(a)}`,x(l,{opacity:`0.75`,cursor:`pointer`,userSelect:`none`}),l.addEventListener(`click`,()=>{let e=this.detailOpen.get(n);e||(e=new Set,this.detailOpen.set(n,e)),s?e.delete(t):e.add(t),this.renderInspector()}),c.appendChild(l),e.appendChild(c),s){let t=this.doc.createElement(`div`);t.textContent=F(a,o),x(t,{opacity:`0.6`,whiteSpace:`pre-wrap`,wordBreak:`break-all`,marginLeft:`10px`,paddingLeft:`8px`,borderLeft:`1px solid rgba(255,255,255,0.14)`}),e.appendChild(t)}return}}e.appendChild(c)}trackEditing(e){e.addEventListener(`focus`,()=>{this.editing+=1}),e.addEventListener(`blur`,()=>{this.editing=Math.max(0,this.editing-1)})}pushLog(e){this.logRows.push(e),this.logRows.length>B&&this.logRows.splice(0,this.logRows.length-B),this.renderLogs()}async copyScene(){let e=await s(o(this.engine.scene??null));return this.toast(e?`scene JSON copied`:`could not reach the clipboard`),e}captureRegion(){this.capture||=(this.captureScale=globalThis.devicePixelRatio??1,this.frameSource?.().then(e=>{this.captureScale=e.width/Math.max(1,this.container.clientWidth||e.width)}).catch(()=>{}),A({doc:this.doc,container:this.container,scale:()=>this.captureScale,onCopy:e=>void this.copyRegion({x0:e.x,y0:e.y,x1:e.x+e.w,y1:e.y+e.h}),onClose:()=>{this.capture=null}}))}capture=null;captureScale=1;async copyRegion(e){let t=this.frameSource;if(!t)return this.toast(`no renderer to capture from`),!1;try{let n=await t(),r=n.width/Math.max(1,this.container.clientWidth||n.width),o=i(e,n.width,n.height,r),s=a(n.pixels,n.width,n.height,o),l=await c(this.doc,s);return this.toast(l?`copied ${s.width}×${s.height}`:`could not copy the image`),l}catch(e){return this.toast(`capture failed: ${e instanceof Error?e.message:String(e)}`),!1}}toast(e){let t=this.doc.createElement(`div`);t.textContent=e,x(t,{position:`absolute`,bottom:`16px`,left:`50%`,transform:`translateX(-50%)`,padding:`6px 12px`,borderRadius:`6px`,background:`rgba(18,20,26,0.92)`,color:`rgba(255,255,255,0.9)`,font:`12px ui-monospace, Menlo, monospace`,zIndex:`90`,pointerEvents:`none`}),this.container.appendChild(t),setTimeout(()=>t.remove(),1800)}setTimeScale(e){Number.isFinite(e)&&(this.engine.timeScale=Math.max(0,e),this.syncTime())}setPaused(e){e?(this.engine.timeScale>0&&(this.resumeScale=this.engine.timeScale),this.engine.timeScale=0):this.engine.timeScale=this.resumeScale>0?this.resumeScale:1,this.syncTime()}get paused(){return this.engine.timeScale===0}nextFrame(){this.paused||this.setPaused(!0),this.engine.step({ignorePause:!0}),this.syncTime()}syncTime(){let e=this.timeEls;if(!e)return;let t=this.engine.timeScale,n=String(Math.round(t*1e3)/1e3);this.editing===0&&(e.slider.value=String(Math.min(t,L)),e.box.value=n),e.readout.textContent=`timeScale ${n}${this.paused?` · paused`:``}`,e.pause.textContent=this.paused?`▶ Resume`:`⏸ Pause`}renderTime(){let e=this.panels.get(`time`);if(!e)return;U(e.body),this.timeEls=null;let t=this.doc.createElement(`div`);x(t,{marginBottom:`6px`,opacity:`0.85`}),e.body.appendChild(t);let n=this.doc.createElement(`input`);n.type=`range`,n.min=`0`,n.max=String(L),n.step=`0.05`,n.value=String(Math.min(this.engine.timeScale,L)),x(n,{width:`100%`,marginBottom:`6px`}),this.trackEditing(n),n.addEventListener(`input`,()=>this.setTimeScale(Number(n.value))),e.body.appendChild(n);let r=this.doc.createElement(`div`);x(r,{display:`flex`,gap:`6px`,alignItems:`center`,marginBottom:`8px`});let i=this.doc.createElement(`input`);i.type=`number`,i.min=`0`,i.step=`0.05`,i.value=String(this.engine.timeScale),x(i,q(`72px`)),this.trackEditing(i),i.addEventListener(`change`,()=>{let e=Number(i.value);Number.isFinite(e)&&this.setTimeScale(e),this.syncTimeAfterEdit()}),r.appendChild(i);for(let e of[.25,.5,1,2]){let t=this.doc.createElement(`div`);t.textContent=`${e}×`,x(t,{cursor:`pointer`,opacity:`0.7`,padding:`2px 4px`}),t.addEventListener(`click`,()=>this.setTimeScale(e)),r.appendChild(t)}e.body.appendChild(r);let a=this.doc.createElement(`div`);x(a,{display:`flex`,gap:`8px`});let o=this.doc.createElement(`div`);x(o,K()),o.addEventListener(`click`,()=>this.setPaused(!this.paused)),a.appendChild(o);let s=this.doc.createElement(`div`);s.textContent=`⏭ Next frame`,s.title=`Pauses, then advances one fixed step`,x(s,K()),s.addEventListener(`click`,()=>this.nextFrame()),a.appendChild(s),e.body.appendChild(a),this.timeEls={slider:n,box:i,readout:t,pause:o},this.syncTime()}syncTimeAfterEdit(){let e=this.timeEls;if(!e)return;let t=this.engine.timeScale;e.slider.value=String(Math.min(t,L)),e.box.value=String(Math.round(t*1e3)/1e3)}renderLogs(){let e=this.panels.get(`logs`);if(!e)return;U(e.body);let t=this.doc.createElement(`div`);x(t,{display:`flex`,gap:`8px`,marginBottom:`4px`,flexWrap:`wrap`});for(let e of[`debug`,`info`,`warn`,`error`]){let n=this.doc.createElement(`div`);n.textContent=`${this.levelEnabled[e]?`✓`:`·`}${e}`,x(n,{cursor:`pointer`,opacity:this.levelEnabled[e]?`1`:`0.45`}),n.addEventListener(`click`,()=>this.setLevelEnabled(e,!this.levelEnabled[e])),t.appendChild(n)}let n=this.doc.createElement(`div`);n.textContent=`${this.consoleCapture?`✓`:`·`}console`,x(n,{cursor:`pointer`,marginLeft:`auto`}),n.addEventListener(`click`,()=>this.setConsoleCapture(!this.consoleCapture)),t.appendChild(n),e.body.appendChild(t);let r={debug:`rgba(255,255,255,0.5)`,info:`rgba(255,255,255,0.85)`,warn:`#ffc861`,error:`#ff6b6b`};for(let t of this.logRows){if(!this.levelEnabled[t.level])continue;let n=this.doc.createElement(`div`);n.textContent=`[${t.source===`console`?`console`:t.level}] ${t.text}`,x(n,{color:r[t.level],whiteSpace:`pre-wrap`}),e.body.appendChild(n)}}};function U(e){for(let t of[...e.children])t.remove()}function W(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function G(e){if(typeof e==`string`)return e;if(e instanceof Error){let t=e.stack?.split(`
3
3
  `)[1]?.trim();return`${e.name}: ${e.message}${t?` (${t})`:``}`}try{let t=JSON.stringify(e);return t===`{}`||t===void 0?String(e):t}catch{return String(e)}}function K(){return{background:`rgba(255,255,255,0.08)`,border:`1px solid rgba(255,255,255,0.2)`,borderRadius:`4px`,padding:`4px 8px`,cursor:`pointer`,userSelect:`none`}}function q(e){return{width:e,background:`rgba(255,255,255,0.08)`,border:`1px solid rgba(255,255,255,0.2)`,borderRadius:`4px`,color:`inherit`,font:`inherit`,padding:`2px 4px`}}export{z as attachDebugOverlay};