incanto 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/LICENSE +30 -0
  2. package/README.md +36 -0
  3. package/THIRD-PARTY-NOTICES.md +88 -0
  4. package/assets/audio/attacked.mp3 +0 -0
  5. package/assets/audio/explosion.mp3 +0 -0
  6. package/assets/audio/gold_loot.mp3 +0 -0
  7. package/assets/audio/heal.mp3 +0 -0
  8. package/assets/audio/hit_metal_bang.mp3 +0 -0
  9. package/assets/audio/ice_spear.mp3 +0 -0
  10. package/assets/audio/monster_died.mp3 +0 -0
  11. package/assets/audio/slash.mp3 +0 -0
  12. package/assets/audio/smite.mp3 +0 -0
  13. package/assets/audio/spells_cast.mp3 +0 -0
  14. package/assets/audio/ui_click.wav +0 -0
  15. package/assets/audio/walk.mp3 +0 -0
  16. package/assets/catalog.json +390 -0
  17. package/assets/characters/2dbasic.json +41 -0
  18. package/assets/characters/2dbasic.png +0 -0
  19. package/assets/characters/ghost.json +46 -0
  20. package/assets/characters/ghost.png +0 -0
  21. package/assets/characters/goblin.json +40 -0
  22. package/assets/characters/goblin.png +0 -0
  23. package/assets/characters/medieval-knight.json +41 -0
  24. package/assets/characters/medieval-knight.png +0 -0
  25. package/assets/effects/swoosh.png +0 -0
  26. package/assets/items/box.png +0 -0
  27. package/assets/items/buff_potion.png +0 -0
  28. package/assets/items/coin.png +0 -0
  29. package/assets/items/gem.png +0 -0
  30. package/assets/items/gold.png +0 -0
  31. package/assets/items/hp_potion.png +0 -0
  32. package/assets/items/locked_item_box.png +0 -0
  33. package/assets/items/map.png +0 -0
  34. package/assets/items/resurrection_potion.png +0 -0
  35. package/assets/items/super_box.png +0 -0
  36. package/assets/items/trap.png +0 -0
  37. package/assets/tiles/floor00.jpg +0 -0
  38. package/assets/tiles/minecraft-tiles.png +0 -0
  39. package/assets/tiles/wall00.jpg +0 -0
  40. package/assets/vegetation/ash_color.png +0 -0
  41. package/assets/vegetation/aspen_color.png +0 -0
  42. package/assets/vegetation/bark/birch_color_1k.jpg +0 -0
  43. package/assets/vegetation/bark/birch_normal_1k.jpg +0 -0
  44. package/assets/vegetation/bark/birch_roughness_1k.jpg +0 -0
  45. package/assets/vegetation/bark/oak_color_1k.jpg +0 -0
  46. package/assets/vegetation/bark/oak_normal_1k.jpg +0 -0
  47. package/assets/vegetation/bark/oak_roughness_1k.jpg +0 -0
  48. package/assets/vegetation/bark/pine_color_1k.jpg +0 -0
  49. package/assets/vegetation/bark/pine_normal_1k.jpg +0 -0
  50. package/assets/vegetation/bark/pine_roughness_1k.jpg +0 -0
  51. package/assets/vegetation/ground/dirt_color.jpg +0 -0
  52. package/assets/vegetation/ground/dirt_normal.jpg +0 -0
  53. package/assets/vegetation/ground/grass.jpg +0 -0
  54. package/assets/vegetation/oak_color.png +0 -0
  55. package/assets/vegetation/pine_color.png +0 -0
  56. package/bin/incanto-assets.mjs +107 -0
  57. package/bin/incanto-check.mjs +107 -0
  58. package/bin/incanto-editor.mjs +343 -0
  59. package/bin/incanto-env.mjs +144 -0
  60. package/bin/incanto-model.mjs +296 -0
  61. package/bin/incanto-play.mjs +219 -0
  62. package/bin/incanto-skills.mjs +71 -0
  63. package/dist/2d.d.ts +642 -0
  64. package/dist/2d.js +44 -0
  65. package/dist/3d.d.ts +1860 -0
  66. package/dist/3d.js +5 -0
  67. package/dist/agent8-DzU2fFyH.js +129 -0
  68. package/dist/audio-player-DqUR3XFs.d.ts +110 -0
  69. package/dist/behavior-BAQq7HGM.d.ts +851 -0
  70. package/dist/create-game-BdjpTHrW.js +1725 -0
  71. package/dist/create-game-CZHROKcT.js +527 -0
  72. package/dist/debug-draw-CZmOYjL2.js +13 -0
  73. package/dist/debug.d.ts +66 -0
  74. package/dist/debug.js +658 -0
  75. package/dist/duplicate-DP2WPYom.js +22 -0
  76. package/dist/env.d.ts +430 -0
  77. package/dist/env.js +3152 -0
  78. package/dist/errors-BMFaY68Q.d.ts +33 -0
  79. package/dist/errors-BpWbnbb_.js +13 -0
  80. package/dist/gameplay-Ccruc3Wd.js +1501 -0
  81. package/dist/gameplay.d.ts +543 -0
  82. package/dist/gameplay.js +2 -0
  83. package/dist/heightmap-CroQPEER.js +185 -0
  84. package/dist/index.d.ts +305 -0
  85. package/dist/index.js +62 -0
  86. package/dist/json-BLk7H2Qa.js +30 -0
  87. package/dist/loader-CGs_G-r0.js +919 -0
  88. package/dist/loader-Mo0KghCv.d.ts +41 -0
  89. package/dist/net.d.ts +427 -0
  90. package/dist/net.js +772 -0
  91. package/dist/noise-CGUMx44x.js +82 -0
  92. package/dist/particle-sim-CbN4YUuH.d.ts +63 -0
  93. package/dist/particle-sim-DYuSUxvK.js +1319 -0
  94. package/dist/physics-2d-KuMWPTf6.js +288 -0
  95. package/dist/physics-3d-Dl67vOLT.js +434 -0
  96. package/dist/react.d.ts +65 -0
  97. package/dist/react.js +209 -0
  98. package/dist/register-BuUV1_KB.js +561 -0
  99. package/dist/register-CNlYAS1_.js +10634 -0
  100. package/dist/register-DPEV9_9t.js +851 -0
  101. package/dist/register-Dasmnurl.js +374 -0
  102. package/dist/registry-BVJ2HbCn.js +132 -0
  103. package/dist/rng-DP-SR7eg.js +38 -0
  104. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  105. package/dist/schema-CcoWb32N.d.ts +104 -0
  106. package/dist/test.d.ts +158 -0
  107. package/dist/test.js +275 -0
  108. package/dist/touch-031PxtCR.js +208 -0
  109. package/dist/vite.d.ts +26 -0
  110. package/dist/vite.js +57 -0
  111. package/editor/assets/GameServer-C56iOUgF.js +1 -0
  112. package/editor/assets/agent8-Bp7QFI7v.js +1 -0
  113. package/editor/assets/index-DF3tMeKJ.css +1 -0
  114. package/editor/assets/index-Dl2pjA8e.js +7365 -0
  115. package/editor/assets/rapier-CEuLKeCu.js +1 -0
  116. package/editor/assets/rapier-DE6a0vmv.js +1 -0
  117. package/editor/index.html +169 -0
  118. package/package.json +97 -0
  119. package/schemas/scene.schema.json +4254 -0
  120. package/skills/README.md +9 -0
  121. package/skills/incanto-3d-character.md +229 -0
  122. package/skills/incanto-3d-models.md +151 -0
  123. package/skills/incanto-assets.md +118 -0
  124. package/skills/incanto-audio.md +309 -0
  125. package/skills/incanto-behaviors-and-scripts.md +169 -0
  126. package/skills/incanto-building-2d-games.md +242 -0
  127. package/skills/incanto-building-3d-games.md +245 -0
  128. package/skills/incanto-editor.md +163 -0
  129. package/skills/incanto-environment.md +743 -0
  130. package/skills/incanto-gameplay-behaviors.md +707 -0
  131. package/skills/incanto-multiplayer.md +264 -0
  132. package/skills/incanto-node-reference.md +797 -0
  133. package/skills/incanto-physics-and-input.md +164 -0
  134. package/skills/incanto-scene-json-authoring.md +325 -0
  135. package/skills/incanto-verifying-your-game.md +191 -0
  136. package/skills/incanto-web-integration.md +96 -0
  137. package/templates/agent8-server.js +84 -0
  138. package/templates/agent8-server.ts +138 -0
package/dist/vite.js ADDED
@@ -0,0 +1,57 @@
1
+ import { validateScene } from "./test.js";
2
+ import { readFileSync } from "node:fs";
3
+ import { dirname, resolve } from "node:path";
4
+ //#region src/vite/index.ts
5
+ /**
6
+ * incanto/vite — dev-server integration: validate every `*.scene.json` edit
7
+ * the moment it is saved, surfacing hard IncantoErrors in the terminal AND
8
+ * as a browser error overlay, BEFORE the page reloads into a broken scene.
9
+ *
10
+ * ```ts
11
+ * // vite.config.ts
12
+ * import { incantoScenes } from 'incanto/vite';
13
+ * export default defineConfig({ plugins: [incantoScenes()] });
14
+ * ```
15
+ *
16
+ * Typed structurally (no vite dependency) — the returned object satisfies
17
+ * vite's Plugin interface.
18
+ */
19
+ function incantoScenes(opts = {}) {
20
+ return {
21
+ name: "incanto-scenes",
22
+ async handleHotUpdate(ctx) {
23
+ if (!ctx.file.endsWith(".scene.json")) return void 0;
24
+ let json;
25
+ try {
26
+ json = JSON.parse(await ctx.read());
27
+ } catch (e) {
28
+ report(ctx, `not valid JSON: ${e instanceof Error ? e.message : String(e)}`);
29
+ return [];
30
+ }
31
+ const result = validateScene(json, {
32
+ strictBehaviors: opts.strictBehaviors,
33
+ resolveScene: (path) => JSON.parse(readFileSync(resolve(dirname(ctx.file), path), "utf-8"))
34
+ });
35
+ if (!result.ok && result.error) {
36
+ const e = result.error;
37
+ report(ctx, `${e.code}: ${e.message}`);
38
+ return [];
39
+ }
40
+ }
41
+ };
42
+ }
43
+ function report(ctx, message) {
44
+ const full = `[incanto] ${ctx.file}\n${message}`;
45
+ ctx.server.config?.logger?.error(full);
46
+ console.error(full);
47
+ ctx.server.ws.send({
48
+ type: "error",
49
+ err: {
50
+ message: full,
51
+ stack: "",
52
+ plugin: "incanto-scenes"
53
+ }
54
+ });
55
+ }
56
+ //#endregion
57
+ export { incantoScenes };
@@ -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=>{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}})),p=o((e=>{var t=f(),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 p(e,n,r){return u(e,t.readU32(n,r),i,17,a)}function m(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 h(e,a,c,u){var f,h=u;if(u>=16){for(f=[e+n+r,e+r,e,e-n];u>=16;)f=m(f,a,c),c+=16,u-=16;f=s(f[0],1)+s(f[1],7)+s(f[2],12)+s(f[3],18)+h}else f=e+o+u>>>0;for(;u>=4;)f=p(f,a,c),c+=4,u-=4;for(;u>0;)f=d(f,a,c),c++,u--;return f=l(t.imul(l(t.imul(l(f,15),r),13),i),16),f>>>0}e.hash=h})),m=o((e=>{var t=p(),n=f(),r=4,i=13,a=5,o=6,s=65536,c=4,l=(1<<c)-1,u=15,d=O(5<<20),m=E(),h=407708164,g=4,_=8,v=16,y=64,b=192,x=2147483648,S=7,C=4,w=7,T={4:65536,5:262144,6:1048576,7:4194304};function E(){try{return new Uint32Array(s)}catch{for(var e=Array(s),t=0;t<s;t++)e[t]=0;return e}}function D(e){for(var t=0;t<s;t++)m[t]=0}function O(e){try{return new Uint8Array(e)}catch{for(var t=Array(e),n=0;n<e;n++)t[n]=0;return t}}function k(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)!==h)throw Error(`invalid magic number`);t+=4;var r=e[t++];if((r&b)!==y)throw Error(`incompatible descriptor version `+(r&b));var i=(r&v)!==0,a=(r&_)!==0,o=e[t++]>>C&w;if(T[o]===void 0)throw Error(`invalid block size `+o);var s=T[o];if(a)return n.readU64(e,t);t++;for(var c=0;;){var l=n.readU32(e,t);if(t+=4,l&x?(l&=~x,c+=l):c+=s,l===0)return c;i&&(t+=4),t+=l}},e.makeBuffer=O,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)!==h)throw Error(`invalid magic number`);if(c+=4,s=t[c++],(s&b)!==y)throw Error(`incompatible descriptor version`);if(i=(s&v)!==0,a=(s&g)!==0,o=(s&_)!==0,T[t[c++]>>C&w]===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&x)!==0){u&=~x;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,h),a+=4,i[a++]=y,i[a++]=S<<C,i[a]=t.hash(0,i,4,a-4)>>8,a++;var o=T[S],s=r.length,c=0;for(D(m);s>0;){var l=0,u=s>o?o:s;if(l=e.compressBlock(r,d,c,u,m),l>u||l===0){n.writeU32(i,a,2147483648|u),a+=4;for(var f=c+u;c<f;)i[a++]=r[c++];s-=u}else{n.writeU32(i,a,l),a+=4;for(var p=0;p<l;)i[a++]=d[p++];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=k(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=k(r,0,i)),r}})),h=o(((e,t)=>{function n(e){var t=typeof e;return e!=null&&(t==`object`||t==`function`)}t.exports=n})),g=o(((e,t)=>{t.exports=typeof global==`object`&&global&&global.Object===Object&&global})),_=o(((e,t)=>{var n=g(),r=typeof self==`object`&&self&&self.Object===Object&&self;t.exports=n||r||Function(`return this`)()})),v=o(((e,t)=>{var n=_();t.exports=function(){return n.Date.now()}})),y=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})),b=o(((e,t)=>{var n=y(),r=/^\s+/;function i(e){return e&&e.slice(0,n(e)+1).replace(r,``)}t.exports=i})),x=o(((e,t)=>{t.exports=_().Symbol})),S=o(((e,t)=>{var n=x(),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})),C=o(((e,t)=>{var n=Object.prototype.toString;function r(e){return n.call(e)}t.exports=r})),w=o(((e,t)=>{var n=x(),r=S(),i=C(),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})),T=o(((e,t)=>{function n(e){return typeof e==`object`&&!!e}t.exports=n})),E=o(((e,t)=>{var n=w(),r=T(),i=`[object Symbol]`;function a(e){return typeof e==`symbol`||r(e)&&n(e)==i}t.exports=a})),D=o(((e,t)=>{var n=b(),r=h(),i=E(),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})),O=o(((e,t)=>{var n=h(),r=v(),i=D(),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})),k=o(((e,t)=>{var n=O(),r=h(),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}));function ee(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 te(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 ne=new TextEncoder,re=50;function ie(e,t,n){ne.encodeInto(e,t.subarray(n))}function ae(e,t,n){e.length>re?ie(e,t,n):te(e,t,n)}var oe=4096;function se(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>=oe&&(o+=String.fromCharCode(...a),a.length=0)}return a.length>0&&(o+=String.fromCharCode(...a)),o}var ce=new TextDecoder,le=200;function ue(e,t,n){let r=e.subarray(t,t+n);return ce.decode(r)}function de(e,t,n){return n>le?ue(e,t,n):se(e,t,n)}var A=class{type;data;constructor(e,t){this.type=e,this.data=t}},j=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 fe(e,t,n){let r=n/4294967296,i=n;e.setUint32(t,r),e.setUint32(t+4,i)}function M(e,t,n){let r=Math.floor(n/4294967296),i=n;e.setUint32(t,r),e.setUint32(t+4,i)}function N(e,t){let n=e.getInt32(t),r=e.getUint32(t+4);return n*4294967296+r}function pe(e,t){let n=e.getUint32(t),r=e.getUint32(t+4);return n*4294967296+r}var me=4294967295,he=17179869183;function ge({sec:e,nsec:t}){if(e>=0&&t>=0&&e<=he)if(t===0&&e<=me){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),M(r,4,e),n}}function _e(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 ve(e){return e instanceof Date?ge(_e(e)):null}function ye(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:N(t,4),nsec:t.getUint32(0)};default:throw new j(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${e.length}`)}}function be(e){let t=ye(e);return new Date(t.sec*1e3+t.nsec/1e6)}var xe={type:-1,encode:ve,decode:be},P=class e{static defaultCodec=new e;__brand;builtInEncoders=[];builtInDecoders=[];encoders=[];decoders=[];constructor(){this.register(xe)}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 A(-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 A(n,i)}}return e instanceof A?e:null}decode(e,t,n){let r=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return r?r(e,t,n):new A(t,e)}};function Se(e){return e instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer}function F(e){return e instanceof Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):Se(e)?new Uint8Array(e):Uint8Array.from(e)}var Ce=class e{extensionCodec;context;useBigInt64;maxDepth;initialBufferSize;sortKeys;forceFloat32;ignoreUndefined;forceIntegerToFloat;pos;view;bytes;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??P.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=ee(e);this.ensureBufferSizeToWrite(5+t),this.writeStringHeader(t),ae(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=F(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),fe(this.view,this.pos,e),this.pos+=8}writeI64(e){this.ensureBufferSizeToWrite(8),M(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 we(e,t){return new Ce(t).encodeSharedRef(e)}function I(e){return`${e<0?`-`:``}0x${Math.abs(e).toString(16).padStart(2,`0`)}`}var Te=16,Ee=16,De=class{hit=0;miss=0;caches;maxKeyLength;maxLengthPerKey;constructor(e=Te,t=Ee){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=se(e,t,n),a=Uint8Array.prototype.slice.call(e,t,t+n);return this.store(a,i),i}},L=`array`,R=`map_key`,z=`map_value`,Oe=e=>{if(typeof e==`string`||typeof e==`number`)return e;throw new j(`The type of key must be string or number but `+typeof e)},ke=class{stack=[];stackHeadPosition=-1;get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(e){let t=this.getUninitializedStateFromPool();t.type=L,t.position=0,t.size=e,t.array=Array(e)}pushMapState(e){let t=this.getUninitializedStateFromPool();t.type=R,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===L){let t=e;t.size=0,t.array=void 0,t.position=0,t.type=void 0}if(e.type===R||e.type===z){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}},B=-1,V=new DataView(new ArrayBuffer(0)),Ae=new Uint8Array(V.buffer);try{V.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 je=RangeError(`Insufficient data`),Me=new De,Ne=class e{extensionCodec;context;useBigInt64;rawStrings;maxStrLength;maxBinLength;maxArrayLength;maxMapLength;maxExtLength;keyDecoder;mapKeyConverter;totalPos=0;pos=0;view=V;bytes=Ae;headByte=B;stack=new ke;entered=!1;constructor(e){this.extensionCodec=e?.extensionCodec??P.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?Me:e.keyDecoder,this.mapKeyConverter=e?.mapKeyConverter??Oe}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=B,this.stack.reset()}setBuffer(e){let t=F(e);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(e){if(this.headByte===B&&!this.hasRemaining(1))this.setBuffer(e);else{let t=this.bytes.subarray(this.pos),n=F(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 ${I(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 j(`Unrecognized type byte: ${I(e)}`);this.complete();let n=this.stack;for(;n.length>0;){let e=n.top();if(e.type===L)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===R){if(t===`__proto__`)throw new j(`The key __proto__ is not allowed`);e.key=this.mapKeyConverter(t),e.type=z;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=R;continue DECODE}}return t}}readHeadByte(){return this.headByte===B&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=B}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 j(`Unrecognized array type byte: ${I(e)}`)}}pushMapState(e){if(e>this.maxMapLength)throw new j(`Max length exceeded: map length (${e}) > maxMapLengthLength (${this.maxMapLength})`);this.stack.pushMapState(e)}pushArrayState(e){if(e>this.maxArrayLength)throw new j(`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 j(`Max length exceeded: UTF-8 byte length (${e}) > maxStrLength (${this.maxStrLength})`);if(this.bytes.byteLength<this.pos+t+e)throw je;let n=this.pos+t,r;return r=this.stateIsMapKey()&&this.keyDecoder?.canBeCached(e)?this.keyDecoder.decode(this.bytes,n,e):de(this.bytes,n,e),this.pos+=t+e,r}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===R:!1}decodeBinary(e,t){if(e>this.maxBinLength)throw new j(`Max length exceeded: bin length (${e}) > maxBinLength (${this.maxBinLength})`);if(!this.hasRemaining(e+t))throw je;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 j(`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=pe(this.view,this.pos);return this.pos+=8,e}readI64(){let e=N(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 Pe(e,t){return new Ne(t).decode(e)}var Fe=l(k()),H=l(m()),Ie=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(H.compress(we({event:`fn:call`,data:this.queue.splice(0,this.queue.length)}))),this.batchTimeout=null},this.throttleTime)}},U={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)}},Le=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)}},W=BigInt(2**32-1),G=BigInt(32);function Re(e,t=!1){return t?{h:Number(e&W),l:Number(e>>G&W)}:{h:Number(e>>G&W)|0,l:Number(e&W)|0}}function ze(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}=Re(e[a],t);[r[a],i[a]]=[n,o]}return[r,i]}var Be=(e,t,n)=>e<<n|t>>>32-n,Ve=(e,t,n)=>t<<n|e>>>32-n,He=(e,t,n)=>t<<n-32|e>>>64-n,Ue=(e,t,n)=>e<<n-32|t>>>64-n;function We(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 q(e,...t){if(!We(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 Ge(e,t){q(e);let n=t.outputLen;if(e.length<n)throw Error(`digestInto() expects output buffer of length at least `+n)}function Ke(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function Y(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}var qe=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Je(e){return e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255}function Ye(e){for(let t=0;t<e.length;t++)e[t]=Je(e[t]);return e}var X=qe?e=>e:Ye;function Xe(e){if(typeof e!=`string`)throw Error(`string expected`);return new Uint8Array(new TextEncoder().encode(e))}function Ze(e){return typeof e==`string`&&(e=Xe(e)),q(e),e}var Qe=class{};function $e(e){let t=t=>e().update(Ze(t)).digest(),n=e();return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=()=>e(),t}var et=BigInt(0),Z=BigInt(1),tt=BigInt(2),nt=BigInt(7),rt=BigInt(256),it=BigInt(113),at=[],ot=[],st=[];for(let e=0,t=Z,n=1,r=0;e<24;e++){[n,r]=[r,(2*n+3*r)%5],at.push(2*(5*r+n)),ot.push((e+1)*(e+2)/2%64);let i=et;for(let e=0;e<7;e++)t=(t<<Z^(t>>nt)*it)%rt,t&tt&&(i^=Z<<(Z<<BigInt(e))-Z);st.push(i)}var ct=ze(st,!0),lt=ct[0],ut=ct[1],Q=(e,t,n)=>n>32?He(e,t,n):Be(e,t,n),dt=(e,t,n)=>n>32?Ue(e,t,n):Ve(e,t,n);function ft(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=Q(a,o,1)^n[r],c=dt(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=ot[n],a=Q(t,i,r),o=dt(t,i,r),s=at[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]^=lt[r],e[1]^=ut[r]}Y(n)}var pt=class e extends Qe{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=Ke(this.state)}clone(){return this._cloneInto()}keccak(){X(this.state32),ft(this.state32,this.rounds),X(this.state32),this.posOut=0,this.pos=0}update(e){J(this),e=Ze(e),q(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),q(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(Ge(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,Y(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}},mt=((e,t,n)=>$e(()=>new pt(t,e,n)))(1,136,256/8);function ht(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=mt(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 gt(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=ht(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 _t(e){try{return gt(e),!0}catch{return!1}}function vt(e){return _t(e)?gt(e):e}var yt=o(((e,t)=>{t.exports=function(){throw Error(`ws does not work in the browser. Browser clients must use the native WebSocket object`)}})),$=(()=>{if(typeof window<`u`&&window.WebSocket)return window.WebSocket;if(typeof global<`u`)try{let e=yt();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`)})(),bt=class e{account;verse;remoteUrl;auth;socket=null;eventSocket=null;connected=!1;listeners={};batchEmitter=null;pendingSubscriptions=[];eventSocketReady=!1;crossRampIntegration;pingInterval=null;socketPongTimeout=null;eventSocketPongTimeout=null;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 vt(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://verse8-game-backend-kr-609824224664.asia-northeast3.run.app`).replace(`https://`,`wss://`).replace(`http://`,`ws://`)}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)}`}static getInstance(t={}){let n=e.getInstanceKey(t);if(!e.instances.has(n)){let r=new e(t);e.instances.set(n,r)}return e.instances.get(n)}constructor(t={}){this.verse=e.getInitialVerse(t),this.account=e.getInitialAccount(t),this.remoteUrl=e.getInitialRemoteUrl(t),this.auth=e.getInitialAuth(t),this.crossRampIntegration=new Le(this.remoteUrl,this.verse,this.account,this.auth)}createWebSocket(e){let t=new $(e);return t.onopen=()=>{console.log(`WebSocket connection opened`)},t.onclose=()=>{console.log(`WebSocket connection closed`),this.disconnect()},t.onerror=e=>{console.warn(`WebSocket error:`,e)},t}sendMessage(e,t,n){if(e&&e.readyState===$.OPEN){if(e===this.eventSocket&&!this.eventSocketReady&&t!==`subscribeEvents`){this.pendingSubscriptions.push({event:t,data:n});return}e.send(H.compress(we({event:t,data:n})))}else e===this.eventSocket&&t!==`subscribeEvents`&&this.pendingSubscriptions.push({event:t,data:n})}async connect(t={}){t.verse&&(this.verse=t.verse),t.account&&(this.account=t.account),t.remoteUrl&&(this.remoteUrl=e.getInitialRemoteUrl({remoteUrl:t.remoteUrl})),t.auth!==void 0&&(this.auth=t.auth),this.crossRampIntegration.updateConfig(this.remoteUrl,this.verse,this.account,this.auth),console.log(`connect`,d(),this.verse,this.account,this.remoteUrl),this.socket&&this.socket.readyState===$.OPEN&&(this.socket.close(),this.socket=null),this.eventSocket&&this.eventSocket.readyState===$.OPEN&&(this.eventSocket.close(),this.eventSocket=null),this.connected=!1,this.socket=this.createWebSocket(this.remoteUrl),this.batchEmitter=new Ie(this.socket);async function n(e){return typeof e==`string`?JSON.parse(e):e instanceof Blob?Pe(H.decompress(new Uint8Array(await e.arrayBuffer()))):Pe(H.decompress(new Uint8Array(e)))}let r=async()=>new Promise(e=>{this.eventSocket.onmessage=async t=>{try{let r=await n(t.data);this.handleEventSocketMessage(r),r.event===`connected`&&(this.eventSocketReady=!0,this.pendingSubscriptions.length>0&&(this.pendingSubscriptions.forEach(({event:e,data:t})=>{this.sendMessage(this.eventSocket,e,t)}),this.pendingSubscriptions=[]),e(!0))}catch(e){console.warn(`Error parsing event socket message:`,e)}},this.eventSocket.onopen=()=>{this.sendMessage(this.eventSocket,`subscribeEvents`,{verse:this.verse,account:this.account,...this.auth&&{auth:this.auth}})},this.eventSocket.onclose=()=>{this.disconnect(),t.onDisconnect&&t.onDisconnect()},this.eventSocket.onerror=e=>{this.disconnect(),t.onError&&t.onError(e)}}),i=async()=>new Promise(e=>{this.socket.onmessage=async t=>{try{let r=await n(t.data);this.handleSocketMessage(r),r.event===`connected`?(console.log(`Connected to server`,this.verse,this.account),e(!0)):r.event===`notReady`&&(console.log(`Server is not ready`),e(!1))}catch(e){console.warn(`Error parsing socket message:`,e)}},this.socket.onopen=()=>{this.sendMessage(this.socket,`connectServer`,{verse:this.verse,account:this.account,...this.auth&&{auth:this.auth}})},this.socket.onclose=()=>{this.disconnect(),t.onDisconnect&&t.onDisconnect()},this.socket.onerror=e=>{this.disconnect(),t.onError&&t.onError(e)}});return this.connected=await i(),this.connected&&=(this.eventSocket=this.createWebSocket(this.remoteUrl),await r()),this.connected&&this.startPingPong(),this.connected}handleEventSocketMessage(e){let{event:t,data:n}=e;switch(t){case`connected`:this.emit(`connected`,n);break;case`pong`:this.eventSocketPongTimeout&&=(clearTimeout(this.eventSocketPongTimeout),null);break;case`global:state:changed`:this.emit(`global:state:changed`,JSON.parse(n.message));break;case`global:users:state:changed`:n.account===this.account&&this.emit(`global:me:state:changed`,JSON.parse(n.message)),this.emit(`global:users:${n.account}:state:changed`,JSON.parse(n.message));break;case`global:collections:changed`:this.emit(`global:collections:${n.collectionId}:changed`,JSON.parse(n.message));break;case`asset:changed`:try{let e=JSON.parse(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}`,JSON.parse(n.message));break;case`room:state:changed`:this.emit(`rooms:${n.roomId}:state:changed`,JSON.parse(n.message));break;case`room:users:state:changed`:n.account?this.emit(`rooms:${n.roomId}:users:${n.account}:state:changed`,JSON.parse(n.message)):this.emit(`rooms:${n.roomId}:users:state:changed`,JSON.parse(n.message));break;case`room:collections:changed`:this.emit(`rooms:${n.roomId}:collections:${n.collectionId}:changed`,JSON.parse(n.message));break;case`room:message`:this.emit(`rooms:${n.roomId}:message:${n.type}`,JSON.parse(n.message));break;case`batch`:for(let e of n)this.handleEventSocketMessage(e);break}}handleSocketMessage(e){let{event:t,data:n}=e;switch(t){case`connected`:case`notReady`:this.emit(t,n);break;case`pong`:this.socketPongTimeout&&=(clearTimeout(this.socketPongTimeout),null);break;case`batch`:for(let e of n)e.event?.startsWith(`fn:return:`)?this.emit(e.event,e.data):this.handleSocketMessage(e);break;default:t?.startsWith(`fn:return:`)&&this.emit(t,n);break}}async disconnect(){this.stopPingPong(),this.socket&&=(this.socket.close(),null),this.eventSocket&&=(this.eventSocket.close(),null),this.connected=!1,this.pendingSubscriptions=[],this.eventSocketReady=!1}startPingPong(){this.stopPingPong(),this.pingInterval=setInterval(()=>{this.socket&&this.socket.readyState===$.OPEN&&(this.sendMessage(this.socket,`ping`,{}),this.socketPongTimeout=setTimeout(()=>{console.warn(`Socket did not respond to ping within 3 seconds`),this.disconnect()},3e3)),this.eventSocket&&this.eventSocket.readyState===$.OPEN&&(this.sendMessage(this.eventSocket,`ping`,{}),this.eventSocketPongTimeout=setTimeout(()=>{console.warn(`Event socket did not respond to ping within 3 seconds`),this.disconnect()},3e3))},5e3)}stopPingPong(){this.pingInterval&&=(clearInterval(this.pingInterval),null),this.socketPongTimeout&&=(clearTimeout(this.socketPongTimeout),null),this.eventSocketPongTimeout&&=(clearTimeout(this.eventSocketPongTimeout),null)}subscribeGlobalState(e){let t=`global:state:changed`,n=`global:state:changed`,r=n=>{this.subscribeLastState[t]=n,e(n)};this.subscribeCount[t]?this.subscribeLastState[t]&&e(this.subscribeLastState[t]):this.sendMessage(this.eventSocket,n,{}),this.subscribeCount[t]=(this.subscribeCount[t]||0)+1;let i=this.on(t,r);return()=>{i(),this.subscribeCount[t]--,this.subscribeCount[t]===0&&this.sendMessage(this.eventSocket,n,{unsubscribe:!0})}}subscribeCount={};subscribeLastState={};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.subscribeLastState[n]=e,t(e)};this.subscribeCount[n]?this.subscribeLastState[n]&&t(this.subscribeLastState[n]):this.sendMessage(this.eventSocket,r,{account:e}),this.subscribeCount[n]=(this.subscribeCount[n]||0)+1;let a=this.on(n,i);return()=>{a(),this.subscribeCount[n]--,this.subscribeCount[n]===0&&this.sendMessage(this.eventSocket,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.subscribeLastState[n]||(this.subscribeLastState[n]=[]),e===`add`?U.addItems(this.subscribeLastState[n],r):e===`deleteAll`?this.subscribeLastState[n]=[]:e===`delete`?U.removeItems(this.subscribeLastState[n],r):e===`update`&&U.updateItems(this.subscribeLastState[n],r),t({items:this.subscribeLastState[n],changes:{op:e,items:r}})};this.subscribeCount[n]?this.subscribeLastState[n]&&t({items:this.subscribeLastState[n],changes:{op:`add`,items:this.subscribeLastState[n]}}):this.sendMessage(this.eventSocket,r,{collectionId:e}),this.subscribeCount[n]=(this.subscribeCount[n]||0)+1;let a=this.on(n,i);return()=>{a(),this.subscribeCount[n]--,this.subscribeCount[n]===0&&this.sendMessage(this.eventSocket,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.subscribeLastState[n]=e,t(e)};this.subscribeCount[n]?this.subscribeLastState[n]&&t(this.subscribeLastState[n]):this.sendMessage(this.eventSocket,r,{account:e}),this.subscribeCount[n]=(this.subscribeCount[n]||0)+1;let a=this.on(n,i);return()=>{a(),this.subscribeCount[n]--,this.subscribeCount[n]===0&&this.sendMessage(this.eventSocket,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.sendMessage(this.eventSocket,`global:message`,{type:e}),()=>{n(),this.sendMessage(this.eventSocket,`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.subscribeLastState[n]=e,t(e)};this.subscribeCount[n]?this.subscribeLastState[n]&&t(this.subscribeLastState[n]):this.sendMessage(this.eventSocket,`room:state:changed`,{roomId:e}),this.subscribeCount[n]=(this.subscribeCount[n]||0)+1;let i=this.on(n,r);return()=>{i(),this.subscribeCount[n]--,this.subscribeCount[n]===0&&this.sendMessage(this.eventSocket,`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.subscribeLastState[r]=e,n(e)};this.subscribeCount[r]?this.subscribeLastState[r]&&n(this.subscribeLastState[r]):this.sendMessage(this.eventSocket,i,{roomId:e,account:t}),this.subscribeCount[r]=(this.subscribeCount[r]||0)+1;let o=this.on(r,a);return()=>{o(),this.subscribeCount[r]--,this.subscribeCount[r]===0&&this.sendMessage(this.eventSocket,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.subscribeLastState[n]||(this.subscribeLastState[n]=[]);let r={};for(let e of this.subscribeLastState[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.subscribeLastState[n]=i,t(i)};this.subscribeCount[n]?this.subscribeLastState[n]&&t(this.subscribeLastState[n]):this.sendMessage(this.eventSocket,`room:users:state:changed`,{roomId:e}),this.subscribeCount[n]=(this.subscribeCount[n]||0)+1;let i=this.on(n,r);return()=>{i(),this.subscribeCount[n]--,this.subscribeCount[n]===0&&this.sendMessage(this.eventSocket,`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.subscribeLastState[r]||(this.subscribeLastState[r]=[]),e===`add`?U.addItems(this.subscribeLastState[r],t):e===`deleteAll`?this.subscribeLastState[r]=[]:e===`delete`?U.removeItems(this.subscribeLastState[r],t):e===`update`&&U.updateItems(this.subscribeLastState[r],t),n({items:this.subscribeLastState[r],changes:{op:e,items:t}})};this.subscribeCount[r]?this.subscribeLastState[r]&&n({items:this.subscribeLastState[r],changes:{op:`add`,items:this.subscribeLastState[r]}}):this.sendMessage(this.eventSocket,`room:collections:changed`,{collectionId:t,roomId:e}),this.subscribeCount[r]=(this.subscribeCount[r]||0)+1;let a=this.on(r,i);return()=>{a(),this.subscribeCount[r]--,this.subscribeCount[r]===0&&this.sendMessage(this.eventSocket,`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.sendMessage(this.eventSocket,`room:message`,{roomId:e,type:t}),()=>{r(),this.sendMessage(this.eventSocket,`room:message`,{roomId:e,type:t,unsubscribe:!0})}}callTimestamps={};throttledFunctions={};async remoteFunction(e,t=[],{needResponse:n,throttle:r,throttleKey:i}={}){if(t=JSON.parse(JSON.stringify(t,(e,t)=>t===void 0?`__undefined__`:t)),typeof r==`number`){r<30&&(r=30);let a=i?`${e}:${i}`:e;n=!1,this.throttledFunctions[a]||(this.throttledFunctions[a]=(0,Fe.default)(e=>{this.batchEmitter.emit(e)},r,{leading:!0,trailing:!1}));let o=Math.random().toString(36).substring(2,15);return this.throttledFunctions[a]({callId:o,fn:e,args:t,needResponse:!1}),Promise.resolve(null)}else{let r=Date.now();return this.callTimestamps[e]||(this.callTimestamps[e]=[]),this.callTimestamps[e]=this.callTimestamps[e].filter(e=>r-e<1e3),this.callTimestamps[e].length>=10?Promise.reject(Error(`Too many calls to the function. Use throttle option.`)):(this.callTimestamps[e].push(r),new Promise((r,i)=>{let a=Math.random().toString(36).substring(2,15),o;this.batchEmitter.emit({callId:a,fn:e,args:t,needResponse:n}),n===!1?r(null):o=this.on(`fn:return:`+a,e=>{o(),e.error?i(e.error):r(e.result)})}))}}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)}async getCrossRampShopUrl(e=`en`){return this.crossRampIntegration.getShopUrl(e)}async getCrossRampForgeUrl(e=`en`){return this.crossRampIntegration.getForgeUrl(e)}};export{bt as GameServer,s as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./index-Dl2pjA8e.js";async function t(t){return new n((await e(()=>import(`./GameServer-C56iOUgF.js`),[],import.meta.url)).GameServer,t)}var n=class{raw;active=new Map;constructor(e,t){this.raw=new e({...t})}get account(){return this.raw.account}get connected(){return this.raw.connected}connect(){return this.rawConnect()}rawConnect(){return this.raw.connect({onDisconnect:()=>void this.reconnect()})}disconnect(){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(){await this.rawConnect();for(let e of this.active.values())e.off(),e.off=e.make()}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{t as createAgent8Server};
@@ -0,0 +1 @@
1
+ :root{--bg-0:#0b0d14;--bg-1:#10131d;--bg-2:#161a27;--bg-3:#1d2231;--line:#262c3e;--line-strong:#343c54;--text:#e2e6f0;--text-dim:#9aa3bd;--text-faint:#5d6680;--accent:#6ee7dc;--accent-deep:#14b8a6;--violet:#a78bfa;--amber:#fbbf24;--rose:#fb7185;--green:#86efac;--shadow:0 12px 40px #0000008c;--r-sm:6px;--r-md:10px;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{background:var(--bg-0);height:100%;color:var(--text);-webkit-font-smoothing:antialiased;margin:0;font:13px/1.55 Inter,-apple-system,Segoe UI,system-ui,sans-serif;overflow:hidden}code,textarea,.mono{font-family:ui-monospace,SF Mono,Menlo,monospace}#topbar{background:linear-gradient(to bottom, var(--bg-2), var(--bg-1));border-bottom:1px solid var(--line);align-items:center;gap:10px;height:46px;padding:0 14px;display:flex}.brand{align-items:baseline;gap:7px;margin-right:6px;display:flex}.brand-mark{background:linear-gradient(135deg, var(--accent), var(--accent-deep));color:#07211d;border-radius:6px;align-self:center;place-items:center;width:22px;height:22px;font-size:11px;font-weight:800;display:inline-grid}.brand strong{letter-spacing:.2px;font-weight:700}.brand-sub{color:var(--text-faint);font-size:12px}#file-chip{border:1px solid var(--line);background:var(--bg-1);color:var(--text-dim);border-radius:999px;align-items:center;gap:6px;max-width:320px;padding:4px 10px;font-size:12px;display:flex}#file-path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pill{background:var(--bg-3);color:var(--text-faint);border-radius:999px;padding:2px 9px;font-family:ui-monospace,Menlo,monospace;font-size:11px}.spacer{flex:1}button{font:inherit;border-radius:var(--r-sm);color:var(--text);cursor:pointer;background:0 0;border:1px solid #0000;align-items:center;gap:6px;padding:6px 12px;font-size:12.5px;font-weight:600;transition:background .12s,border-color .12s,color .12s,opacity .12s;display:inline-flex}button:disabled{opacity:.35;cursor:default}button.ghost{border-color:var(--line);background:var(--bg-1);color:var(--text-dim)}button.ghost:not(:disabled):hover{border-color:var(--line-strong);color:var(--text)}button.ghost.danger:not(:disabled):hover{border-color:var(--rose);color:var(--rose)}button.primary{background:linear-gradient(135deg, var(--accent), var(--accent-deep));color:#06201c}button.primary:not(:disabled):hover{filter:brightness(1.1)}button.play{border-color:var(--green);color:var(--green);background:#86efac14}button.play:not(:disabled):hover{background:#86efac29}button.play.stop{border-color:var(--rose);color:var(--rose);background:#fb71851a}input,select,textarea{font:inherit;color:var(--text);background:var(--bg-0);border:1px solid var(--line);border-radius:var(--r-sm);min-width:0;padding:6px 9px;font-size:12.5px;transition:border-color .12s}select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239aa3bd' stroke-width='2.4'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 9px center;background-repeat:no-repeat;background-size:12px;padding-right:30px}input:focus,select:focus,textarea:focus{border-color:var(--accent-deep);outline:none}textarea{resize:vertical;font-size:12px;line-height:1.5}textarea.invalid{border-color:var(--rose);background:#fb71850d}#error-banner{color:var(--rose);white-space:pre-wrap;background:#fb71851a;border-bottom:1px solid #fb718559;max-height:110px;padding:8px 14px;font-family:ui-monospace,Menlo,monospace;font-size:12px;overflow:auto}#play-notice{color:var(--green);background:#86efac14;border-bottom:1px solid #86efac40;padding:7px 14px;font-size:12px}main{height:calc(100% - 46px);display:flex}#tree-pane{background:var(--bg-1);border-right:1px solid var(--line);flex-direction:column;width:256px;display:flex}#inspector-pane{background:var(--bg-1);border-left:1px solid var(--line);width:336px;overflow-y:auto}#viewport-pane{background:radial-gradient(1200px 500px at 50% -10%, #6ee7dc0d, transparent), var(--bg-0);flex:1;position:relative;overflow:hidden}#viewport,#overlay,#play-canvas{width:100%;height:100%;position:absolute;inset:0}#overlay{cursor:crosshair}#play-canvas{z-index:3}#hints-dock{z-index:4;align-items:center;gap:8px;display:flex;position:absolute;bottom:12px;right:16px}#hints-toggle{border:1px solid var(--line-strong);width:40px;height:40px;color:var(--text-dim);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#10131de0;border-radius:50%;flex:none;justify-content:center;align-items:center;display:inline-flex}#hints-toggle:hover{color:var(--accent);border-color:var(--accent-deep)}#hints-dock.open #hints-toggle{color:var(--accent)}.hints{opacity:0;white-space:nowrap;max-width:0;color:var(--text-faint);pointer-events:none;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#10131dd9;border:1px solid #0000;border-radius:999px;gap:14px;padding:5px 0;font-size:11px;transition:max-width .22s,opacity .18s,padding .22s;display:flex;overflow:hidden}.hints b{color:var(--text-dim);font-weight:600}.pane-title{letter-spacing:1.6px;text-transform:uppercase;color:var(--text-faint);border-bottom:1px solid var(--line);padding:9px 14px 7px;font-size:10.5px;font-weight:700}#tree{flex:1;padding:8px;overflow-y:auto}.tree-row{border-radius:var(--r-sm);cursor:pointer;white-space:nowrap;color:var(--text-dim);border:1px solid #0000;align-items:center;gap:6px;padding:3px 8px 3px 4px;display:flex;position:relative;overflow:hidden}.chevron{align-items:center;transition:transform .12s;display:inline-flex}.chevron.collapsed{transform:rotate(-90deg)}.chevron-legacy{text-align:center;width:14px;color:var(--text-faint);cursor:pointer;-webkit-user-select:none;user-select:none;flex:none;font-size:9px}.chevron.leaf{cursor:default;opacity:.35}.chevron:not(.leaf):hover{color:var(--accent)}.tree-children{border-left:1px solid var(--line);margin-left:11px;padding-left:8px}.tree-row.dragging{opacity:.4}.tree-row.drop-into{border-color:var(--accent);background:#6ee7dc24}.tree-row.drop-before:before,.tree-row.drop-after:after{content:"";background:var(--accent);border-radius:2px;height:2px;position:absolute;left:4px;right:4px}.tree-row.drop-before:before{top:-1px}.tree-row.drop-after:after{bottom:-1px}.tree-row:hover{background:var(--bg-2);color:var(--text)}.tree-row.selected{color:var(--accent);background:#6ee7dc1a;border-color:#6ee7dc4d}.tree-name{text-overflow:ellipsis;overflow:hidden}.tree-icon{cursor:help;border-radius:4px;flex:none;place-items:center;width:17px;height:17px;display:inline-grid}.tree-icon:hover{background:var(--bg-3)}.cat-core{color:var(--violet);background:#a78bfa26}.cat-2d{color:var(--accent);background:#6ee7dc1f}.cat-3d{color:var(--amber);background:#fbbf241f}.cat-body{color:var(--green);background:#86efac1f}.cat-net{color:var(--rose);background:#fb71851f}.scene-row{color:var(--text-faint);margin-bottom:6px}.scene-row.selected{color:var(--accent)}#tree-actions{border-top:1px solid var(--line);gap:7px;padding:10px;display:flex}#add-type{flex:1}#inspector{padding:12px 14px 40px}.section-title{letter-spacing:1.4px;text-transform:uppercase;color:var(--accent);align-items:center;gap:7px;margin:16px 0 8px;font-size:11px;font-weight:700;display:flex}.section-title:first-child{margin-top:2px}.section-title .rule{background:var(--line);flex:1;height:1px}.field{grid-template-columns:92px 1fr;align-items:center;gap:8px;margin-bottom:7px;display:grid}.field>span{color:var(--text-dim);text-overflow:ellipsis;align-items:center;gap:5px;font-size:11.5px;display:flex;overflow:hidden}.field.wide{grid-template-columns:1fr}.field.wide>span{margin-bottom:2px}.vector-row{gap:6px;display:flex}.vector-row input{width:100%}.help-btn{border:1px solid var(--line-strong);width:15px;height:15px;color:var(--text-faint);border-radius:50%;flex:none;justify-content:center;padding:0;font-size:10px;font-weight:700}.help-btn:hover{border-color:var(--accent);color:var(--accent)}.chips{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-0);cursor:text;flex-wrap:wrap;gap:5px;padding:5px 7px;display:flex}.chip{color:var(--accent);background:#6ee7dc1f;border-radius:999px;align-items:center;gap:4px;padding:1px 8px;font-size:11.5px;display:inline-flex}.chip button{color:inherit;opacity:.7;padding:0;font-size:12px}.chips input{background:0 0;border:none;flex:1;min-width:70px;padding:2px}.chips input:focus{outline:none}.subcard{border:1px solid var(--line);border-radius:var(--r-md);background:var(--bg-2);margin-bottom:10px;padding:10px}.subcard .field{grid-template-columns:78px 1fr}.subcard-head{color:var(--text-dim);align-items:center;gap:7px;margin-bottom:8px;font-size:11.5px;font-weight:600;display:flex}.subcard-head .spacer{flex:1}.linklike{color:var(--accent);padding:2px 6px;font-size:11px;font-weight:600}.linklike:hover{text-decoration:underline}.muted-note{color:var(--text-faint);margin:-2px 0 8px;font-size:11px}.asset-control{align-items:stretch;gap:6px;display:flex}.asset-control input{flex:1;min-width:0}.asset-toggle{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-1);width:26px;color:var(--text-dim);flex:none;font-size:11px}.asset-toggle:hover{border-color:var(--accent);color:var(--accent)}.asset-panel{border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--bg-0);margin-top:6px;padding:6px}.asset-search{width:100%;margin-bottom:6px}.asset-options{flex-direction:column;gap:3px;max-height:220px;display:flex;overflow-y:auto}button.asset-option{text-align:left;border-radius:var(--r-sm);background:var(--bg-2);color:var(--text);border:1px solid #0000;flex-direction:column;align-items:flex-start;gap:1px;width:100%;padding:5px 8px;display:flex}button.asset-option:hover{border-color:var(--accent);background:var(--bg-3)}button.asset-option strong{font-size:11.5px;font-weight:600}button.asset-option small{color:var(--text-faint);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:10px;overflow:hidden}.asset-empty{color:var(--text-faint);padding:4px 8px;font-size:11px}.asset-note{margin-top:5px}.varieties{cursor:default}.variety-opt{color:var(--text-dim);cursor:pointer;align-items:center;gap:5px;font-size:11.5px;display:inline-flex}.variety-opt input[type=checkbox]{width:auto}#popover{z-index:50;background:var(--bg-3);border:1px solid var(--line-strong);border-radius:var(--r-md);width:300px;box-shadow:var(--shadow);color:var(--text-dim);padding:12px 14px;font-size:12px;position:fixed}#popover h4{color:var(--text);margin:0 0 6px;font-size:12.5px}#popover code{background:var(--bg-0);color:var(--accent);border-radius:4px;padding:1px 5px;font-size:11px}#popover pre{background:var(--bg-0);border-radius:var(--r-sm);color:var(--text-dim);margin:8px 0 0;padding:8px 10px;font-size:11px;line-height:1.5;overflow-x:auto}#popover .pop-actions{justify-content:flex-end;margin-top:8px;display:flex}#picker{z-index:40;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#07090ec7;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}#picker[hidden]{display:none}#picker-card{background:var(--bg-2);border:1px solid var(--line-strong);width:460px;max-height:72vh;box-shadow:var(--shadow);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}#picker-list{flex:1;padding:10px;overflow-y:auto}#picker-list .tree-row{padding:9px 12px;font-family:ui-monospace,Menlo,monospace;font-size:12.5px}#picker-new{border-top:1px solid var(--line);gap:8px;padding:12px;display:flex}#picker-path{flex:1;font-family:ui-monospace,Menlo,monospace}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-thumb{background:var(--line-strong);border:2px solid var(--bg-1);border-radius:99px}::-webkit-scrollbar-track{background:0 0}body.playing #tree-pane,body.playing #inspector-pane{pointer-events:none;opacity:.45;filter:saturate(.6);transition:opacity .2s}.rename-input{flex:1;min-width:0;padding:1px 6px;font-size:12.5px}.balloon{z-index:60;background:var(--bg-3);border:1px solid var(--line-strong);border-radius:var(--r-md);max-width:230px;box-shadow:var(--shadow);color:var(--text-dim);flex-direction:column;gap:2px;padding:8px 11px;font-size:11.5px;display:flex;position:fixed}.balloon .balloon-title{color:var(--accent);font-size:12px;font-weight:700}.context-menu{z-index:60;background:var(--bg-3);border:1px solid var(--line-strong);border-radius:var(--r-md);min-width:190px;box-shadow:var(--shadow);flex-direction:column;padding:5px;display:flex;position:fixed}.menu-item{border-radius:var(--r-sm);color:var(--text);justify-content:space-between;padding:6px 10px;font-weight:500}.menu-item:not(:disabled):hover{background:var(--bg-2)}.menu-item.danger:not(:disabled):hover{color:var(--rose)}.menu-item kbd{color:var(--text-faint);font-family:inherit;font-size:10px}.menu-divider{background:var(--line);height:1px;margin:4px 6px}.hints[hidden]{display:none}#hints-dock.open .hints:not([hidden]){opacity:1;border-color:var(--line);max-width:1100px;padding:5px 14px}body.playing #hints-dock{display:none}#gameview-btn{z-index:4;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#10131dcc;padding:4px 10px;font-size:11.5px;position:absolute;top:104px;right:18px}.field input[type=checkbox]{width:15px;height:15px;accent-color:var(--accent-deep);cursor:pointer;justify-self:start}.picker-title{justify-content:space-between;align-items:center;display:flex}#picker-close{color:var(--text-faint);background:0 0;border:none;padding:0 4px;font-size:12px}#picker-close:hover{color:var(--text)}.uid-row{gap:6px;display:flex}.uid-row input{flex:1;min-width:0;font-size:11.5px}.uid-row .ghost{padding:4px 8px}#confirm{z-index:70;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#07090ec7;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}#confirm[hidden]{display:none}#confirm-card{background:var(--bg-2);border:1px solid var(--line-strong);width:480px;max-height:70vh;box-shadow:var(--shadow);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}#confirm-body{color:var(--text-dim);padding:14px;font-size:12.5px;overflow-y:auto}#confirm-list:empty{display:none}#confirm-list{background:var(--bg-0);border-radius:var(--r-sm);flex-direction:column;gap:4px;margin:10px 0 0;padding:10px 12px;font-family:ui-monospace,Menlo,monospace;font-size:11.5px;display:flex}#confirm-actions{border-top:1px solid var(--line);justify-content:flex-end;gap:8px;padding:12px 14px;display:flex}#confirm-delete{border-color:var(--rose);color:var(--rose);background:#fb718514}#confirm-delete:hover{background:#fb718529}.color-row{align-items:center;gap:6px;display:flex}.color-row input[type=color]{cursor:pointer;width:30px;height:26px;padding:2px}.color-row input[type=text]{flex:1;min-width:0;font-size:11.5px}.slider-row{align-items:center;gap:8px;display:flex}.slider-row input[type=range]{accent-color:var(--accent-deep);background:0 0;border:none;flex:1;padding:0}.slider-row input[type=number]{width:64px}.asset-row{border-radius:var(--r-sm);cursor:pointer;align-items:center;gap:7px;padding:5px 8px;display:flex}.asset-row:hover,.asset-row.open{background:var(--bg-3)}.asset-key{color:var(--accent)}.asset-url{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-faint);flex:1;font-family:ui-monospace,Menlo,monospace;font-size:11px;overflow:hidden}.danger-link{color:var(--text-faint)}.danger-link:hover{color:var(--rose)}.asset-editor{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-0);flex-direction:column;gap:4px;margin:2px 0 10px;padding:10px;display:flex}.asset-editor .field{grid-template-columns:52px 1fr;margin-bottom:4px}.meta-row{grid-template-columns:1fr 1fr 24px;align-items:center;gap:6px;display:grid}.meta-row input{padding:4px 7px;font-size:11.5px}#docs{z-index:60;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#07090ecc;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}#docs[hidden]{display:none}#docs-card{background:var(--bg-2);border:1px solid var(--line-strong);width:min(920px,92vw);height:min(680px,88vh);box-shadow:var(--shadow);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}#docs-layout{flex:1;min-height:0;display:flex}#docs-tabs{border-right:1px solid var(--line);flex-direction:column;gap:4px;width:168px;padding:10px;display:flex}.docs-tab{border-radius:var(--r-sm);color:var(--text-dim);justify-content:flex-start;padding:7px 12px;font-weight:500}.docs-tab:hover{background:var(--bg-3);color:var(--text)}.docs-tab.active{color:var(--accent);background:#6ee7dc1a;font-weight:700}#docs-body{flex:1;padding:18px 24px 40px;overflow-y:auto}#docs-body h2{margin:0 0 6px;font-size:18px}#docs-body h3{color:var(--accent);margin:18px 0 4px;font-size:13.5px}#docs-body p{color:var(--text-dim);margin:4px 0 10px;font-size:13px;line-height:1.7}.docs-intro{background:var(--bg-1);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 14px}.docs-node{border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:8px;overflow:hidden}.docs-node.open{border-color:var(--line-strong)}.docs-node-head{text-align:left;border-radius:0;align-items:center;gap:9px;width:100%;padding:9px 12px;display:flex}.docs-node-head:hover{background:var(--bg-3)}.docs-node-head strong{font-size:13px}.docs-summary{color:var(--text-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:400;overflow:hidden}.docs-detail{border-top:1px solid var(--line);background:var(--bg-1);padding:4px 14px 12px}.docs-props{border-collapse:collapse;width:100%;margin-top:8px;font-size:11.5px}.docs-props th{text-align:left;color:var(--text-faint);border-bottom:1px solid var(--line);padding:4px 8px;font-weight:600}.docs-props td{border-bottom:1px solid var(--line);color:var(--text-dim);padding:3px 8px}#mode-toolbar{z-index:4;border-radius:var(--r-md);border:1px solid var(--line);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#10131dd9;gap:4px;padding:4px;display:flex;position:absolute;top:12px;left:12px}.tool{border-radius:var(--r-sm);width:30px;height:28px;color:var(--text-faint);justify-content:center;padding:0}.tool:hover{color:var(--text);background:var(--bg-3)}.tool.active{color:var(--accent);background:#6ee7dc24}.lang-menu{min-width:130px}.lang-check{color:var(--accent);font-weight:700}.explorer-section{border-top:1px solid var(--line);justify-content:space-between;align-items:center;margin-top:4px;display:flex}.explorer-section .ghost{padding:1px 8px}#asset-tree{max-height:30%;padding:2px 8px 10px;overflow-y:auto}.explorer-empty{padding:4px 10px;font-size:11px}.asset-row .asset-key{color:var(--accent);font-family:ui-monospace,Menlo,monospace}.asset-icon-texture{color:#f0abfc}.asset-icon-spritesheet{color:#fbbf24}.asset-icon-model{color:#7aa2ff}.asset-icon-animation{color:#86efac}.uid-value{align-items:center;gap:7px;min-width:0;display:flex}.uid-value code{color:var(--text-dim);letter-spacing:.3px;text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,Menlo,monospace;font-size:11px;overflow:hidden}.uid-copy{border-radius:var(--r-sm);color:var(--text-faint);background:0 0;border:none;padding:3px 5px;line-height:0}.uid-copy:hover{color:var(--text);background:var(--bg-3)}.uid-copy.copied{color:var(--accent);font-size:10px;line-height:1}.section-toggle{box-sizing:border-box;text-align:left;cursor:pointer;background:var(--bg-1);border:none;border-top:1px solid var(--line-strong);border-bottom:1px solid var(--line);border-radius:0;justify-content:flex-start;align-items:center;gap:6px;width:100%;height:30px;padding-top:0;padding-bottom:0;display:flex}.section-toggle:hover{color:var(--text)}.section-toggle .chev{color:var(--text-dim);transition:transform .12s;display:inline-flex}.section-toggle.collapsed .chev{transform:rotate(-90deg)}.section-add{min-width:24px;height:20px;color:var(--text-dim);border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--bg-2);justify-content:center;align-items:center;padding:0 6px;font-size:13px;display:inline-flex}.section-add:hover{background:var(--bg-3);color:var(--accent);border-color:var(--accent-deep)}[data-body][hidden],aside#tree-pane #scene-body[hidden]{display:none}#scene-body{flex-direction:column;flex:1;min-height:0;display:flex}.asset-folder{color:var(--text-dim);cursor:pointer;border-radius:var(--r-sm);align-items:center;gap:6px;padding:4px 8px;display:flex}.asset-folder:hover{background:var(--bg-3)}.asset-folder .chev{color:var(--text-dim);transition:transform .12s;display:inline-flex}.asset-folder.collapsed .chev{transform:rotate(-90deg)}.asset-folder svg{color:#e7c66a}.asset-row.grouped{margin-left:18px}.asset-folder .count{color:var(--text-faint);margin-left:auto;font-size:10.5px}.asset-folder.selected{color:var(--accent);background:#6ee7dc14}.asset-folder.drop-target,#asset-tree.drop-target{outline:1.5px dashed var(--accent);outline-offset:-2px;border-radius:var(--r-sm)}.asset-row[draggable=true]{cursor:grab}body.playing #mode-toolbar,body.playing #gameview-btn{display:none}.tool-divider{background:var(--line);align-self:center;width:1px;height:18px;margin:0 2px}#generate{z-index:70;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#07090ec7;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}#generate[hidden]{display:none}#generate-card{background:var(--bg-2);border:1px solid var(--line-strong);width:420px;max-height:78vh;box-shadow:var(--shadow);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}#generate-body{padding:14px;overflow-y:auto}#generate-body .gen-hint{color:var(--text-faint);margin:0 0 12px;font-size:11.5px}#generate-body .gen-desc{color:var(--text-dim);margin:2px 0 12px;font-size:11.5px}#generate-params{border-top:1px solid var(--line);padding-top:2px}#generate-params .field:first-child{margin-top:10px}.gen-seed-row{gap:6px;display:flex}.gen-seed-row input{flex:1;min-width:0}.gen-seed-row .ghost{padding:4px 9px}#generate-actions{border-top:1px solid var(--line);justify-content:flex-end;align-items:center;gap:8px;padding:12px 14px;display:flex}#generate-status{color:var(--rose);margin-right:auto;font-size:11px}.const-picker{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-1);width:30px;color:var(--text-dim);flex:none;margin-left:6px;font-size:11px}.const-picker:hover{border-color:var(--accent);color:var(--accent)}.field.const-bound>span{color:var(--accent)}.const-row{align-items:stretch;gap:6px;display:flex}.const-row .field{flex:1;min-width:0}.const-del{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--bg-1);width:26px;color:var(--text-dim);flex:none;font-size:11px}.const-del:hover{border-color:var(--rose);color:var(--rose)}.const-add{align-items:stretch;gap:6px;margin-top:6px;display:flex}.const-add input{flex:1;min-width:0}