@volter/game-editor 0.5.65

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 (653) hide show
  1. package/BUNDLED_NOTICES +11228 -0
  2. package/LICENSE +686 -0
  3. package/LICENSE-BLENDER +1409 -0
  4. package/LICENSE-MCP +21 -0
  5. package/NOTICE +21 -0
  6. package/catalog/entries/audio.json +14 -0
  7. package/catalog/entries/bake.json +36 -0
  8. package/catalog/entries/blender.json +17 -0
  9. package/catalog/entries/react-root.json +24 -0
  10. package/catalog/entries/reflections.json +29 -0
  11. package/catalog/entries/static-batch.json +25 -0
  12. package/catalog/project-source/LICENSE +37 -0
  13. package/catalog/project-source/src/contributions/bake.kind.ts +40 -0
  14. package/catalog/project-source/src/contributions/builder-document.tsx +65 -0
  15. package/catalog/project-source/src/contributions/builder-state.ts +27 -0
  16. package/catalog/project-source/src/contributions/builder-ui.tsx +61 -0
  17. package/catalog/project-source/src/contributions/module-source.ts +502 -0
  18. package/catalog/project-source/src/contributions/pages.finder.ts +61 -0
  19. package/catalog/project-source/src/lib/audio/sfx.ts +255 -0
  20. package/catalog/project-source/src/lib/bake/asset-seed.ts +128 -0
  21. package/catalog/project-source/src/lib/bake/bake-schema.ts +65 -0
  22. package/catalog/project-source/src/lib/bake/clip-layering.ts +203 -0
  23. package/catalog/project-source/src/lib/bake/gltf-bake.ts +657 -0
  24. package/catalog/project-source/src/lib/bake/mesh-slice.ts +157 -0
  25. package/catalog/project-source/src/lib/bake/node-image.ts +463 -0
  26. package/catalog/project-source/src/lib/bake/object3d-bake.ts +121 -0
  27. package/catalog/project-source/src/lib/bake/object3d-lifecycle.ts +15 -0
  28. package/catalog/project-source/src/lib/bake/object3d-source.ts +8 -0
  29. package/catalog/project-source/src/lib/bake/params.ts +75 -0
  30. package/catalog/project-source/src/lib/bake/rest-relative-animation.ts +217 -0
  31. package/catalog/project-source/src/lib/bake/use-model.ts +95 -0
  32. package/catalog/project-source/src/lib/react-root/index.ts +20 -0
  33. package/catalog/project-source/src/lib/react-root/react-root-adapter.tsx +57 -0
  34. package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +201 -0
  35. package/catalog/project-source/src/lib/reflections/index.ts +19 -0
  36. package/catalog/project-source/src/lib/reflections/probe-controller.ts +75 -0
  37. package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +402 -0
  38. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +416 -0
  39. package/catalog/project-source/src/lib/static-batch/Frozen.tsx +91 -0
  40. package/catalog/project-source/src/lib/static-batch/freeze.ts +579 -0
  41. package/catalog/project-source/src/lib/static-batch/index.ts +44 -0
  42. package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +149 -0
  43. package/catalog/project-source/src/lib/static-batch/shadow-cache.ts +171 -0
  44. package/catalog/project-source/src/tools/bake-module.tool.ts +139 -0
  45. package/catalog/project-source/src/tools/bake-preview.tool.ts +475 -0
  46. package/dist/.vite/manifest.json +8304 -0
  47. package/dist/assets/AssetBudgetPanel-J9--TZPU.js +23 -0
  48. package/dist/assets/AudioViewer-CR7333fe.js +1 -0
  49. package/dist/assets/BVHLoader-6bQIXhMX.js +1 -0
  50. package/dist/assets/BufferGeometryUtils-Nz37EVXf.js +1 -0
  51. package/dist/assets/CCDIKSolver-CD7vLpsK.js +1 -0
  52. package/dist/assets/CSS3DRenderer-CL7ABLVK.js +1 -0
  53. package/dist/assets/CanvasSceneViewport-Bpi6gVTC.js +1 -0
  54. package/dist/assets/ColladaLoader-aVOPIsCh.js +3 -0
  55. package/dist/assets/ColorInput-DQBNrW-K.js +1 -0
  56. package/dist/assets/ConvexGeometry-CAzXlPVG.js +1 -0
  57. package/dist/assets/ConvexHull-BINCESFp.js +1 -0
  58. package/dist/assets/CopyShader-BzTUYzf6.js +24 -0
  59. package/dist/assets/DecalGeometry-160KRdfg.js +1 -0
  60. package/dist/assets/EXRLoader-Cdans_oJ.js +1 -0
  61. package/dist/assets/EffectComposer-DQxfsXBZ.js +1 -0
  62. package/dist/assets/EntityModelDocument-Ccvw66N9.js +1 -0
  63. package/dist/assets/EnvironmentAssetDocument-Dg-Qq6O6.js +1 -0
  64. package/dist/assets/FBXLoader-B4MoUtAn.js +1 -0
  65. package/dist/assets/Fbo-Dz-Soul3.js +1 -0
  66. package/dist/assets/FontLoader-CvGoVI5a.js +2 -0
  67. package/dist/assets/GLTFExporter-HgrCle4L.js +1 -0
  68. package/dist/assets/GameplaySessionTimeline-B52W3FVZ.js +1 -0
  69. package/dist/assets/Gltf-UHVWKz65.js +2 -0
  70. package/dist/assets/HDRLoader-THU88oVD.js +5 -0
  71. package/dist/assets/ImageViewer-Tn7s_MnW.js +1 -0
  72. package/dist/assets/InspectorCanvasPreview-CEr_Kxna.js +1 -0
  73. package/dist/assets/InspectorObjectPreview-CVejvLRg.js +1 -0
  74. package/dist/assets/JsonAssetDocument-C7VGcLhu.js +3 -0
  75. package/dist/assets/LineSegments2-CsOpKSiM.js +370 -0
  76. package/dist/assets/MTLLoader-_Xzd4_0p.js +2 -0
  77. package/dist/assets/MarchingCubes-Bsp4wrzd.js +1 -0
  78. package/dist/assets/MeshBVH-BiDHDcu-.js +1 -0
  79. package/dist/assets/ModelAssetDocument-F5GACirk.js +1 -0
  80. package/dist/assets/NonThreeAuthoringBootstrap-C3woOMxX.js +1 -0
  81. package/dist/assets/OBJLoader-BhIC6Hwo.js +5 -0
  82. package/dist/assets/Object3DDocumentViewport-DB7T0NTl.js +2 -0
  83. package/dist/assets/Object3DPreview-DL8oi7Xs.js +2 -0
  84. package/dist/assets/OnlineAssetDetail-C6z9RvYK.js +2 -0
  85. package/dist/assets/OrbitControls-CM3bPray.js +1 -0
  86. package/dist/assets/OrbitControls-DLpayAaK.js +1 -0
  87. package/dist/assets/OrthographicCamera-bQozawrh.js +1 -0
  88. package/dist/assets/PLYLoader-DYQqs5Ik.js +2 -0
  89. package/dist/assets/PerspectiveCamera-CQ2lh01o.js +1 -0
  90. package/dist/assets/PlayBar-BR-Vg3Jb.js +2 -0
  91. package/dist/assets/RGBELoader-BgBcQv8j.js +1 -0
  92. package/dist/assets/RectAreaLightUniformsLib-CMMoWfll.js +1 -0
  93. package/dist/assets/RenderPass-DPrn-Uky.js +1 -0
  94. package/dist/assets/ResolutionPicker-C67vs1F3.js +1 -0
  95. package/dist/assets/RootSelectionOverlay-BZPlxmXU.js +1 -0
  96. package/dist/assets/RoundedBox-BDGBg6QZ.js +1 -0
  97. package/dist/assets/RoundedBoxGeometry-CyUuYPfW.js +1 -0
  98. package/dist/assets/STLLoader-Dyv3lsxY.js +1 -0
  99. package/dist/assets/SelectionBox-D_75KrNW.js +1 -0
  100. package/dist/assets/ShaderPass-QYRpPuFJ.js +1 -0
  101. package/dist/assets/ShadowEditor-DkImwu1Y.js +1 -0
  102. package/dist/assets/SimplifyModifier-C8ayvRzd.js +1 -0
  103. package/dist/assets/SkeletonUtils-Cps8GOC6.js +1 -0
  104. package/dist/assets/Sky-CQKCgYDs.js +154 -0
  105. package/dist/assets/SourceAssetViewer-2SWQoUut.js +12 -0
  106. package/dist/assets/StageHost-BN-IoTef.js +2 -0
  107. package/dist/assets/StoryPreviewMount-DjyxRCXu.js +1 -0
  108. package/dist/assets/TDSLoader-D_T8XJ81.js +1 -0
  109. package/dist/assets/TextGeometry-DOWAEUV0.js +1 -0
  110. package/dist/assets/ThreeBoardDocument-CVncZyIq.js +2 -0
  111. package/dist/assets/ThreeIsolationSceneContent-C8C8whSF.js +1 -0
  112. package/dist/assets/ToolObject3DPreview-BRoDWe4Q.js +1 -0
  113. package/dist/assets/TrackballControls-DfznuQTh.js +1 -0
  114. package/dist/assets/TransientHint-BB1fwrvK.js +1 -0
  115. package/dist/assets/UnrealBloomPass-CR-cS_K5.js +83 -0
  116. package/dist/assets/VideoViewer-C6kocgIU.js +1 -0
  117. package/dist/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
  118. package/dist/assets/active-ingest-CT6jSGhr.js +3 -0
  119. package/dist/assets/adapter-surface-Y37Nzcyw.js +1 -0
  120. package/dist/assets/after-paint-CB4bz1-e.js +1 -0
  121. package/dist/assets/agx-base-srgb-BjWZJgrZ.lut +0 -0
  122. package/dist/assets/agx-look-medium-high-contrast-D5F_ob1L.lut +0 -0
  123. package/dist/assets/agx-look-punchy-dxsnycNs.lut +0 -0
  124. package/dist/assets/animation-clock-CnjZqfJp.js +1 -0
  125. package/dist/assets/asset-budget-asset.menu-Di3KiQCd.js +1 -0
  126. package/dist/assets/asset-budget.action-DCzzcuTh.js +1 -0
  127. package/dist/assets/asset-budget.document-BWU8wnVW.js +1 -0
  128. package/dist/assets/asset-budget.menu-BGZpT_31.js +1 -0
  129. package/dist/assets/asset-editor-persistence-BBaONOJt.js +1 -0
  130. package/dist/assets/asset-loaders-BOy5Ss8k.js +2 -0
  131. package/dist/assets/asset-parse-error-BHMwBRU3.js +3 -0
  132. package/dist/assets/assets-BuSoGjBX.js +1 -0
  133. package/dist/assets/audio-meter-CyiToeUW.js +1 -0
  134. package/dist/assets/audio-unlock.service-CfUgUQVy.js +1 -0
  135. package/dist/assets/audio.utility-C6K6jem8.js +1 -0
  136. package/dist/assets/authoring-CgcOFhGS.js +1 -0
  137. package/dist/assets/autoplay.service-BZBGNSvt.js +1 -0
  138. package/dist/assets/axe-LkjAB6Lv.js +30 -0
  139. package/dist/assets/babylon-authoring-adapter-CL02gWDn.js +1 -0
  140. package/dist/assets/binding-Bmxqznjk.js +1 -0
  141. package/dist/assets/binding-identity-DcTpbvyg.js +1 -0
  142. package/dist/assets/binding-resolver-Dsh-6Vor.js +2 -0
  143. package/dist/assets/blender-emscripten-engine-9ZIRYNhe.js +2 -0
  144. package/dist/assets/blender-node-editor.document-iIDkB9sI.js +1 -0
  145. package/dist/assets/blender-properties-tab-C5CyPydi.js +3 -0
  146. package/dist/assets/blender-runtime-host-BpBwGv7r.js +4 -0
  147. package/dist/assets/blender-runtime-skin-DyQ9B6CR.js +7140 -0
  148. package/dist/assets/blender-runtime.document-lIYhhPtv.js +8 -0
  149. package/dist/assets/blender-timeline.document-77fx96N7.js +1 -0
  150. package/dist/assets/blender-uv-editor.document-fsT7B4gV.js +1 -0
  151. package/dist/assets/blender-version.status-o6dBm3n6.js +1 -0
  152. package/dist/assets/blender-wali-engine-wTOcrOMC.js +2 -0
  153. package/dist/assets/blender.command-BtJeWk-A.js +1 -0
  154. package/dist/assets/blender.keymap-GAQgeklK.js +1 -0
  155. package/dist/assets/blender.status-ujwGU6dU.js +1 -0
  156. package/dist/assets/blender.style-Dcem5f_T.js +1 -0
  157. package/dist/assets/board-guides-DziKSTss.js +1 -0
  158. package/dist/assets/body-marks-h_xDxiDE.js +1 -0
  159. package/dist/assets/bridge.command-o5gDNEwa.js +3 -0
  160. package/dist/assets/browserAll-DeWblVez.js +1 -0
  161. package/dist/assets/build-profiles.document-kW8iw8Xj.js +2 -0
  162. package/dist/assets/build-progress.status-BNRLytg2.js +1 -0
  163. package/dist/assets/build-session-C_sg3CEn.js +9 -0
  164. package/dist/assets/build.action-lYjTLb7K.js +1 -0
  165. package/dist/assets/build.command-DIGgUPU_.js +1 -0
  166. package/dist/assets/build.header-CKajx5U3.js +1 -0
  167. package/dist/assets/build.menu-BdU0QXny.js +1 -0
  168. package/dist/assets/build.service-CbBAyeu3.js +1 -0
  169. package/dist/assets/bus-mixer-CGfWDP3C.js +1 -0
  170. package/dist/assets/camera-KEsKvOL7.js +1 -0
  171. package/dist/assets/camera-runtime.inspector-B7unX4g1.js +1 -0
  172. package/dist/assets/canvas-entry-runtime-SfBxaR9M.js +2 -0
  173. package/dist/assets/capability-coverage-Czas4C18.js +7 -0
  174. package/dist/assets/chrome-trace-YZHMz60-.js +1 -0
  175. package/dist/assets/client-DNXj_opT.js +25 -0
  176. package/dist/assets/clip-planes-CnAI6DZn.js +1 -0
  177. package/dist/assets/collaboration-presence-DLoZ7EA3.js +1 -0
  178. package/dist/assets/collider-Bw0mXlsW.js +1 -0
  179. package/dist/assets/collider-dimensions-9xoFADXN.js +1 -0
  180. package/dist/assets/collision-system-DpNUJRJ3.js +1 -0
  181. package/dist/assets/command-results-CUQD49AB.js +1 -0
  182. package/dist/assets/component-board-registry-DrIa2csL.js +1 -0
  183. package/dist/assets/component-board.service-DCwcUssB.js +2 -0
  184. package/dist/assets/component-board.service-DidCyM4O.js +2 -0
  185. package/dist/assets/component-verbs.command-7xzfjGMZ.js +1 -0
  186. package/dist/assets/component-verbs.service-Bv9jId3q.js +1 -0
  187. package/dist/assets/config-CEZk921y.js +6 -0
  188. package/dist/assets/configurations-DTBMdaTL.js +1 -0
  189. package/dist/assets/connection.status-BifnQdOs.js +1 -0
  190. package/dist/assets/console-bridge-CHcb-xk5.js +1 -0
  191. package/dist/assets/constraint-De8f1Uiq.js +1 -0
  192. package/dist/assets/constraints.inspector-B9U9Yj-u.js +1 -0
  193. package/dist/assets/countdown-timer-CUm74dom.js +1 -0
  194. package/dist/assets/coverage.service-VTX5Mcsx.js +3 -0
  195. package/dist/assets/crash-null-boundary-v3a0uEgw.js +1 -0
  196. package/dist/assets/create-runtime-CVCc1BDx.js +1 -0
  197. package/dist/assets/curve-7Q79VgU4.js +1 -0
  198. package/dist/assets/data-asset-4hjS642k.js +5 -0
  199. package/dist/assets/data-check-core-CQEjuFyt.js +1 -0
  200. package/dist/assets/data-ref-CQI28C0D.js +1 -0
  201. package/dist/assets/debug-bridge-CCohG-d-.js +1 -0
  202. package/dist/assets/debug-registry-Dgvitx8M.js +1 -0
  203. package/dist/assets/defaults-DKiBJCPN.js +1 -0
  204. package/dist/assets/deferred-commands-CEMmvL47.js +1 -0
  205. package/dist/assets/deferred-ingest-play-DCJi_Pgu.js +2 -0
  206. package/dist/assets/design-time-layers-wYgOTgni.js +1 -0
  207. package/dist/assets/design-time-mount-registry-DUpXCg1U.js +1 -0
  208. package/dist/assets/design-time-mount.service-BzY21e1F.js +2 -0
  209. package/dist/assets/design-time-react-mount-DM9WLrF2.js +1 -0
  210. package/dist/assets/dev-build-gDYrq68M.js +1 -0
  211. package/dist/assets/directional-shadow-fit-BVkOKAv2.js +1 -0
  212. package/dist/assets/document-preview-three-Kbg2GCLm.js +1 -0
  213. package/dist/assets/dom-authoring-adapter-CY8C7f4T.js +1 -0
  214. package/dist/assets/draco3d-BBUTcNkz.js +1 -0
  215. package/dist/assets/draco_decoder-DsQ12WqX.wasm +0 -0
  216. package/dist/assets/draco_encoder-2Tcju8Ns.wasm +0 -0
  217. package/dist/assets/edit-mode-audio.service-Bzetwd5B.js +1 -0
  218. package/dist/assets/edit-mode-authoring-B47TfLqu.js +1 -0
  219. package/dist/assets/edit-mode-networking.service-YCX6RRb_.js +1 -0
  220. package/dist/assets/editor-api-BoJIcyZG.js +1 -0
  221. package/dist/assets/editor-port-C_FeBdeV.js +1 -0
  222. package/dist/assets/editor-presentation-activity-C7SNSmTd.js +1 -0
  223. package/dist/assets/entry-adjudication-Cq8Yeb74.js +1 -0
  224. package/dist/assets/environment-capture-7himRh2L.js +1 -0
  225. package/dist/assets/esbuild-BHljloGq.wasm +0 -0
  226. package/dist/assets/events-156d8d12.esm-ErOhDXXB.js +36 -0
  227. package/dist/assets/extend-B-eOccUm.js +36 -0
  228. package/dist/assets/extends-CF3RwP-h.js +1 -0
  229. package/dist/assets/eyedropper-session-bjPXnfeX.js +1 -0
  230. package/dist/assets/fflate.module-DPuTF8aG.js +6 -0
  231. package/dist/assets/filmic-srgb-Ct35FIH6.lut +0 -0
  232. package/dist/assets/first-party-audio-system-DxnGJOER.js +1 -0
  233. package/dist/assets/first-party-navigation-system-CL5Bquub.js +1 -0
  234. package/dist/assets/fork-menu-BoVyw2Wu.js +1 -0
  235. package/dist/assets/frame-debugger-store-D1Mf_5up.js +1 -0
  236. package/dist/assets/frame-delta-D2nsw_Ht.js +1 -0
  237. package/dist/assets/frame-pacing-D5acoOzO.js +1 -0
  238. package/dist/assets/frame-selector-cache-cCeUbcjG.js +1 -0
  239. package/dist/assets/game-DHOZVb-7.js +1 -0
  240. package/dist/assets/game-contract-seams-a5YXejOu.js +1 -0
  241. package/dist/assets/game-css-scope-transform-Eng4wS8E.js +33 -0
  242. package/dist/assets/game-document.service-DbRfx2V0.js +1 -0
  243. package/dist/assets/game-eval.command-D-7Dxbj_.js +2 -0
  244. package/dist/assets/game-input-seams-CIQdetRw.js +1 -0
  245. package/dist/assets/game-loop-CZvXlY00.js +1 -0
  246. package/dist/assets/game-module-access-B2mFxv-i.js +1 -0
  247. package/dist/assets/game.layout-CBASrvQu.js +1 -0
  248. package/dist/assets/gameplay-export-BoKXm51x.js +1 -0
  249. package/dist/assets/gameplay-replay-e5umMlXv.js +1 -0
  250. package/dist/assets/gameplay-rng-trap-CTNhm-UW.js +3 -0
  251. package/dist/assets/gameplay.command-DxcVYX6F.js +1 -0
  252. package/dist/assets/generation-DhwCUHPf.css +1 -0
  253. package/dist/assets/generation-jobs-BQrXbGp_.js +1 -0
  254. package/dist/assets/generation.service-CDIgObuw.js +1 -0
  255. package/dist/assets/generations-DzUogZsM.js +1 -0
  256. package/dist/assets/generations.status-CgOUBCum.js +1 -0
  257. package/dist/assets/hierarchy-marks-BLPfSIym.js +1 -0
  258. package/dist/assets/host-pointer-DbGSCjE9.js +1 -0
  259. package/dist/assets/hosted-asset-materialization-CiIvWkGU.js +2 -0
  260. package/dist/assets/ibl-override-material-BlmCxFKq.js +6 -0
  261. package/dist/assets/index-96FBF1Oj.js +1 -0
  262. package/dist/assets/index-BAWkB0dv.js +1 -0
  263. package/dist/assets/index-BDnS2b6S.js +1 -0
  264. package/dist/assets/index-BHp07vN0.js +2 -0
  265. package/dist/assets/index-BMxv2MNV.js +1 -0
  266. package/dist/assets/index-BP6wv2A0.js +5 -0
  267. package/dist/assets/index-BcCBqgM_.js +952 -0
  268. package/dist/assets/index-Bge9JUr6.js +1 -0
  269. package/dist/assets/index-BjTCPEQ7.js +134 -0
  270. package/dist/assets/index-BncK9THk.js +1 -0
  271. package/dist/assets/index-CJbYy-CF.js +3 -0
  272. package/dist/assets/index-CVCb_ImQ.js +1 -0
  273. package/dist/assets/index-CZd9o7Lu.js +1 -0
  274. package/dist/assets/index-CanA16PU.js +2 -0
  275. package/dist/assets/index-CinJrH5C.js +9 -0
  276. package/dist/assets/index-CtzuWnCS.js +1 -0
  277. package/dist/assets/index-D2fNXpHa.css +1 -0
  278. package/dist/assets/index-DUpHH6JR.js +3120 -0
  279. package/dist/assets/index-DUqP1RMl.js +1 -0
  280. package/dist/assets/index-D_NuPfjr.js +9 -0
  281. package/dist/assets/index-Da9JhEvW.js +25 -0
  282. package/dist/assets/index-DgapqSPi.js +7 -0
  283. package/dist/assets/index-FUuS4qwW.js +562 -0
  284. package/dist/assets/index-GIL7oGEO.js +4894 -0
  285. package/dist/assets/index-IEjydI9d.js +1 -0
  286. package/dist/assets/index-OrYXPk3Z.js +487 -0
  287. package/dist/assets/index-V1R-e5Bd.js +1 -0
  288. package/dist/assets/index-bQE2NA0D.js +1 -0
  289. package/dist/assets/index-gHZae-lw.js +13 -0
  290. package/dist/assets/index-mjWQmGhM.js +1 -0
  291. package/dist/assets/index-nmcBqr7Y.js +1 -0
  292. package/dist/assets/inference-diagnostics-Dhmtfbq_.js +1 -0
  293. package/dist/assets/ingest-BbYMC2vQ.js +1 -0
  294. package/dist/assets/ingest-boot-viewport-D5rI_Kk_.js +1 -0
  295. package/dist/assets/ingest-siblings-Bop2kqVl.js +1 -0
  296. package/dist/assets/ingest-source-persistence-C_6Hiyra.js +1 -0
  297. package/dist/assets/ingest.service-BTDnQfM1.js +1 -0
  298. package/dist/assets/input-manager-DH_hGW6d.js +1 -0
  299. package/dist/assets/input-router-BNQvtIqw.js +1 -0
  300. package/dist/assets/inspect-BZfi3mmo.js +1 -0
  301. package/dist/assets/inspection-CObLhnrs.js +1 -0
  302. package/dist/assets/instance-fork-actions-D3sRzS3K.js +1 -0
  303. package/dist/assets/instances.command-D6UkZNO8.js +1 -0
  304. package/dist/assets/instruments-CKR02Y8I.js +1 -0
  305. package/dist/assets/json-history-resource-BbxllWfV.js +1 -0
  306. package/dist/assets/jsx-runtime-DPjLkJKQ.js +9 -0
  307. package/dist/assets/light-D-_wsKTq.js +1 -0
  308. package/dist/assets/light-camera-factory-CWbbe9gI.js +1 -0
  309. package/dist/assets/lil-gui.module.min-BF55BEwA.js +10 -0
  310. package/dist/assets/live-behaviors-Bxq49Maz.js +1 -0
  311. package/dist/assets/live-gesture-lock-DJbrjOqf.js +1 -0
  312. package/dist/assets/loader-CaF_I7Yt.js +1 -0
  313. package/dist/assets/logger-Dqis-7W1.js +1 -0
  314. package/dist/assets/loop-gate-report-N52EWFGD.js +1 -0
  315. package/dist/assets/matcap-texture-CVfalpWT.js +1 -0
  316. package/dist/assets/material-CpAdjDxn.js +1 -0
  317. package/dist/assets/material-factory-Bz6h__6g.js +1 -0
  318. package/dist/assets/mesh-B3WPtNKO.js +1 -0
  319. package/dist/assets/mesh-shadow-CZnXrw_l.js +1 -0
  320. package/dist/assets/mikktspace.module-DO88SLib.js +1 -0
  321. package/dist/assets/model-asset-sections-CFvvihfx.css +1 -0
  322. package/dist/assets/model-asset-sections.service-CHhFS3ZX.js +1 -0
  323. package/dist/assets/model.layout-BJUEQYUI.js +1 -0
  324. package/dist/assets/models.finder-G2jQgIRu.js +1 -0
  325. package/dist/assets/module-mode-DVBLT9d-.js +2 -0
  326. package/dist/assets/mount-canvas-ingest-root-DDuAWf_C.js +2 -0
  327. package/dist/assets/mount-dom-ingest-root-D_EiBgpn.js +2 -0
  328. package/dist/assets/mount-game-6t9cKNo4.js +1 -0
  329. package/dist/assets/mount-ingest-root-glv2SSWf.js +2 -0
  330. package/dist/assets/mount-manifest-CGVxhmAw.js +1 -0
  331. package/dist/assets/mount-readiness-Ds0HvvLH.js +4 -0
  332. package/dist/assets/mount-three-ingest-root-hrUt9VVU.js +1 -0
  333. package/dist/assets/mounted-authoring-Dmg5xmhP.js +1 -0
  334. package/dist/assets/mounted-story-viewport-source-DjP6RA9U.js +1 -0
  335. package/dist/assets/native-debug-module-CWicoSGD.js +1 -0
  336. package/dist/assets/native-entry-surface-BE8LJNdu.js +1 -0
  337. package/dist/assets/navigation-CIiCx-SM.js +1 -0
  338. package/dist/assets/navmesh-workflow-store-Cmnm57TB.js +1 -0
  339. package/dist/assets/navmesh.menu-CAKiH8PW.js +1 -0
  340. package/dist/assets/navmesh.service-jgDWlgj1.js +1 -0
  341. package/dist/assets/network.utility-CEu5nHf7.js +1 -0
  342. package/dist/assets/object-marks-DwvIEBOK.js +1 -0
  343. package/dist/assets/object3d-authoring-subject-CH5sI2oP.js +1 -0
  344. package/dist/assets/output-DK8waum9.js +195 -0
  345. package/dist/assets/particles-Y626p22p.js +1 -0
  346. package/dist/assets/particles-factory-DnLOHXT8.js +1 -0
  347. package/dist/assets/pasteboard-materialize-BqSS4QzV.js +20 -0
  348. package/dist/assets/pasteboard.action-DU3UHtJG.js +2 -0
  349. package/dist/assets/performance-profiler-D_Jey87L.js +1 -0
  350. package/dist/assets/physics-registry-B2Jkp8e6.js +1 -0
  351. package/dist/assets/physics-registry-CUB9cT9p.js +1 -0
  352. package/dist/assets/pixi-authoring-adapter-CjibysC3.js +1 -0
  353. package/dist/assets/pixi-live-write-target-DuWydlWb.js +1 -0
  354. package/dist/assets/pixi-primitive-DlWbUPN9.js +1 -0
  355. package/dist/assets/pixi-react-root-factory-DYsznYRQ.js +1 -0
  356. package/dist/assets/pixi-story-model-DNkfnWUV.js +1 -0
  357. package/dist/assets/pixi-transform-channels-VjdohT11.js +1 -0
  358. package/dist/assets/play-mode-BFU2PCkG.js +22 -0
  359. package/dist/assets/play.command-BpqqLqkq.js +2 -0
  360. package/dist/assets/playtest-BXIL1JEF.js +1 -0
  361. package/dist/assets/pose-guard-6Osb2cFu.js +1 -0
  362. package/dist/assets/presentation-BPP5pXeQ.js +1 -0
  363. package/dist/assets/product-DFhyARJj.js +1 -0
  364. package/dist/assets/profiler.action-CaXJDp3t.js +1 -0
  365. package/dist/assets/profiler.menu-BIMF6Bi4.js +1 -0
  366. package/dist/assets/profiler.utility-BExw9wBO.js +1 -0
  367. package/dist/assets/project-authoring-session-Bnt6icLr.js +2 -0
  368. package/dist/assets/project-provenance-BoP3nrle.js +1 -0
  369. package/dist/assets/prompt-labels-DSMdM2_B.js +1 -0
  370. package/dist/assets/properties-bone-constraints.inspector-ByT6p7S-.js +1 -0
  371. package/dist/assets/properties-bone.inspector-z4qJwKO5.js +1 -0
  372. package/dist/assets/properties-collection.inspector-D0_3ijWU.js +1 -0
  373. package/dist/assets/properties-constraints.inspector-CESzjuls.js +1 -0
  374. package/dist/assets/properties-data.inspector-hG8Wgyzb.js +1 -0
  375. package/dist/assets/properties-material.inspector-CzY0JCQ6.js +1 -0
  376. package/dist/assets/properties-modifiers.inspector-3dDhwf7g.js +1 -0
  377. package/dist/assets/properties-object.inspector-CiarfxkT.js +1 -0
  378. package/dist/assets/properties-output.inspector-DKJxmKSD.js +1 -0
  379. package/dist/assets/properties-particles.inspector-CCEdYWGm.js +1 -0
  380. package/dist/assets/properties-physics.inspector-B2c0KUyA.js +1 -0
  381. package/dist/assets/properties-render.inspector-Bcm0HLRW.js +1 -0
  382. package/dist/assets/properties-scene.inspector-PIM_eTb_.js +1 -0
  383. package/dist/assets/properties-texture.inspector-CgFlnyr8.js +1 -0
  384. package/dist/assets/properties-view-layer.inspector-DGjF_Aqo.js +1 -0
  385. package/dist/assets/properties-world.inspector-CrMvaRvB.js +1 -0
  386. package/dist/assets/r3f-design-session-D-4yyDO9.js +2 -0
  387. package/dist/assets/r3f-physics-binding-BBo8oma9.js +1 -0
  388. package/dist/assets/r3f-root-factory-z9llD1OU.js +1 -0
  389. package/dist/assets/r3f-source-authoring-adapter-w6Bc60K-.js +13 -0
  390. package/dist/assets/rapier-physics-adapter-CaZqWLu0.js +1 -0
  391. package/dist/assets/rapier-physics-bridge-CMoeVo3Y.js +1 -0
  392. package/dist/assets/react-18-By2b4xR9.js +1 -0
  393. package/dist/assets/react-inspector.service-B_neRnSK.js +1 -0
  394. package/dist/assets/react-root-CEz5NTck.js +1 -0
  395. package/dist/assets/react-story-board-BDDwiE2H.js +1 -0
  396. package/dist/assets/react-three-fiber.esm-CycrbDlA.js +1 -0
  397. package/dist/assets/react-three-rapier.esm-CEfKpvxT.js +1 -0
  398. package/dist/assets/react-world-authoring-adapter-DmrwM3py.js +1 -0
  399. package/dist/assets/realm-services-CobQsq_X.js +1 -0
  400. package/dist/assets/rebind-controller-Dtq19Vb3.js +1 -0
  401. package/dist/assets/recast-navigation.wasm-compat-Dsoa_MD-.js +1 -0
  402. package/dist/assets/reflection-probe-Don-M3Fj.js +1 -0
  403. package/dist/assets/reflection-probe-capture.inspector-CmFUoJCx.js +1 -0
  404. package/dist/assets/register-render-vitals-BiZk29b2.js +1 -0
  405. package/dist/assets/registry-02YZjMNp.js +1 -0
  406. package/dist/assets/relative-path-guard-GiM7Lsz8.js +1 -0
  407. package/dist/assets/render-audio-control-vMRlePWb.js +1 -0
  408. package/dist/assets/render-batch-system-0vq7p0VC.js +1 -0
  409. package/dist/assets/render-census-BrQX_CXv.js +1 -0
  410. package/dist/assets/render-control-Df3yTiyr.js +1 -0
  411. package/dist/assets/render-env-D2IV2x5k.js +1 -0
  412. package/dist/assets/render-features-CPQ_e568.js +1 -0
  413. package/dist/assets/render-seed-DF4JHy7P.js +1 -0
  414. package/dist/assets/render-settings-Bw4W9SYF.js +1 -0
  415. package/dist/assets/render-vitals-BZ5HtvMi.js +1 -0
  416. package/dist/assets/renderer-config-BqG4O8i9.js +1 -0
  417. package/dist/assets/resolve-three-SZE_WWUM.js +702 -0
  418. package/dist/assets/root-seam-contract-Z0VWX3Bk.js +1 -0
  419. package/dist/assets/rrweb-Cd2ifIRP.js +142 -0
  420. package/dist/assets/run-ticks-settled-C4ksViyA.js +1 -0
  421. package/dist/assets/runtime-inspection-l2iFQSsg.js +1 -0
  422. package/dist/assets/scene-capture-BQKzU0NT.js +1 -0
  423. package/dist/assets/scene-capture-CGYF-Viw.js +1 -0
  424. package/dist/assets/scene-document.service-qkDjUrlP.js +2 -0
  425. package/dist/assets/scene-framing-Cat0GtyJ.js +1 -0
  426. package/dist/assets/scene-index-B6BZOHMk.js +1 -0
  427. package/dist/assets/scene-query-C7_N-TpI.js +1 -0
  428. package/dist/assets/schema-kl9-2B_J.js +1 -0
  429. package/dist/assets/sculpt.layout-zJF55yCR.js +1 -0
  430. package/dist/assets/seeded-random-i3mtgBKZ.js +1 -0
  431. package/dist/assets/session-CZ5JPg-z.js +4877 -0
  432. package/dist/assets/setup-audio-S8GQF91f.js +1 -0
  433. package/dist/assets/setup-particles-GCXlnkj_.js +1 -0
  434. package/dist/assets/setup-physics-BeZ7-LKD.js +1 -0
  435. package/dist/assets/setup-renderer-DVXaSGin.js +1587 -0
  436. package/dist/assets/shading.layout-DULYZV6M.js +1 -0
  437. package/dist/assets/sim-clock-CLflx7kg.js +1 -0
  438. package/dist/assets/sky-precompute-worker-ChN7J87v.js +1 -0
  439. package/dist/assets/soft-particle-depth-DGvfQDi1.js +1 -0
  440. package/dist/assets/source-object3d-authoring-adapter-B-L6Ha6f.js +1 -0
  441. package/dist/assets/source-persistence-backend-C-aR-B_Y.js +1 -0
  442. package/dist/assets/spark-renderer-lifecycle-ynWESJcv.js +1 -0
  443. package/dist/assets/spark.module-4pXQoz5d.js +12120 -0
  444. package/dist/assets/stage-invalidation-DBg3C3Ta.js +1 -0
  445. package/dist/assets/stage-keyboard-n-5kKH-m.js +1 -0
  446. package/dist/assets/stage-overlay-set-B9zp2sLB.js +1 -0
  447. package/dist/assets/stage-presence-markers-DiGI6A45.js +1 -0
  448. package/dist/assets/standard-viewport-dressing-CzjAe_0A.js +7 -0
  449. package/dist/assets/state-bridge-DLP1jLRW.js +1 -0
  450. package/dist/assets/state-watch.action-BOvQR2qt.js +1 -0
  451. package/dist/assets/state-watch.menu-CNLvDeeY.js +1 -0
  452. package/dist/assets/state-watch.utility-Bg1tTTQU.js +1 -0
  453. package/dist/assets/static-batch-advisor-B13QEH7d.js +1 -0
  454. package/dist/assets/stats.module-BL02l9NC.js +1 -0
  455. package/dist/assets/story-arg-descriptors-Ek86ExX7.js +1 -0
  456. package/dist/assets/story-capture-_gC8dXV-.js +1 -0
  457. package/dist/assets/story-documents--TDLaPeL.js +3 -0
  458. package/dist/assets/story-documents.service-BiS_YbNQ.js +1 -0
  459. package/dist/assets/story-documents.service-CxOPYJ2j.js +1 -0
  460. package/dist/assets/story-media-presence-BHzk2IV5.js +1 -0
  461. package/dist/assets/story-mount-turn-DFRTj5hi.js +1 -0
  462. package/dist/assets/story-pixi-preview-BUrOJZXS.js +1 -0
  463. package/dist/assets/story-presentation-j2AVN-mK.js +1 -0
  464. package/dist/assets/story-three-preview-BHEDZzcl.js +2 -0
  465. package/dist/assets/structural-ids-Dc-7rEwi.js +1 -0
  466. package/dist/assets/structural-signature-0w-i_ats.js +1 -0
  467. package/dist/assets/surface-content-Dg9Kkazf.js +1 -0
  468. package/dist/assets/surface-state-DaxyruCj.js +3 -0
  469. package/dist/assets/system-adapters-rIC8FSGP.js +1 -0
  470. package/dist/assets/system-runner-DkOjxEBt.js +1 -0
  471. package/dist/assets/system-slot-E2mEdiih.js +1 -0
  472. package/dist/assets/team-playtest.service-DqOinFVA.js +1 -0
  473. package/dist/assets/texture.layout-DASpHVht.js +1 -0
  474. package/dist/assets/three-CDSueJyJ.js +1 -0
  475. package/dist/assets/three-authoring-adapter-CmSQ3Vui.js +1 -0
  476. package/dist/assets/three-authoring.service-iuHLwtf1.js +2 -0
  477. package/dist/assets/three-ingest-runtime-QzDYk6tU.js +1 -0
  478. package/dist/assets/three-projection-core-BmKMZ-nf.js +1 -0
  479. package/dist/assets/three-viewport-presentation-QBQpSdMh.js +1 -0
  480. package/dist/assets/three.module-D396a9Mn.js +3840 -0
  481. package/dist/assets/three.quarks.esm-B1C61jGo.js +1039 -0
  482. package/dist/assets/tools-B_NJsk05.js +1 -0
  483. package/dist/assets/transform-writer-BhBBTx33.js +1 -0
  484. package/dist/assets/transport.header-B-6HQlU2.js +1 -0
  485. package/dist/assets/trigger-volume-BNK2XzPL.js +1 -0
  486. package/dist/assets/tuples-CIQ4Bn1U.js +1 -0
  487. package/dist/assets/tween.module-DciWpAG6.js +1 -0
  488. package/dist/assets/ui-board-document-Bwtt--xp.js +2 -0
  489. package/dist/assets/unexported-game-trap-Dm1JYKHy.js +2 -0
  490. package/dist/assets/unmanaged-root-detector-B8CpbkSN.js +2 -0
  491. package/dist/assets/upstream-pin-BdgRH6ID.js +1 -0
  492. package/dist/assets/use-data-Dzq-MytE.js +1 -0
  493. package/dist/assets/use-live-actor-state-DErbWQWF.js +1 -0
  494. package/dist/assets/use-selection-DbR73-xd.js +1 -0
  495. package/dist/assets/user-data-BB2Of6Ht.js +1 -0
  496. package/dist/assets/utility-view-state-BHypxA33.js +1 -0
  497. package/dist/assets/uv-editing.layout-BEKHxmHw.js +1 -0
  498. package/dist/assets/vgai-shared-fontawesome-CU65D4Ij.js +1 -0
  499. package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +1 -0
  500. package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +1 -0
  501. package/dist/assets/vgai-shared-react-BT7rMc2H.js +1 -0
  502. package/dist/assets/vgai-shared-react-dom-DFajMqMT.js +1 -0
  503. package/dist/assets/vgai-shared-react-dom-client-S0ozfl6_.js +1 -0
  504. package/dist/assets/vgai-shared-three-Bc5PvpLM.js +1 -0
  505. package/dist/assets/viewport-pick-context-DkawXbEi.js +1 -0
  506. package/dist/assets/viewport-root-presentation-CWsE56K6.js +1 -0
  507. package/dist/assets/viewport-shading-BuA88e_A.js +1 -0
  508. package/dist/assets/viewport-shading-boundary-B_-_gABg.js +82 -0
  509. package/dist/assets/viewport-surface-status-B3om4Kcf.js +1 -0
  510. package/dist/assets/vision_bundle-DX0dWqEa.js +15 -0
  511. package/dist/assets/voxel-surface-DtcsSWRL.js +1 -0
  512. package/dist/assets/wav-encode-D31zWF6O.js +1 -0
  513. package/dist/assets/webgl-frame-capture-FlF9zQmW.js +1 -0
  514. package/dist/assets/webgl-gpu-timer-D3YX7RaD.js +1 -0
  515. package/dist/assets/webworkerAll-CM2o_dnz.js +1 -0
  516. package/dist/assets/worker-UrMcrc5_.js +2 -0
  517. package/dist/assets/world-documents-147tiFZe.js +1 -0
  518. package/dist/assets/world-root-stage-binding-vwTrtBz6.js +1 -0
  519. package/dist/assets/world-state-BWG-IcOd.js +1 -0
  520. package/dist/assets/writer-B-KovzkA.js +5 -0
  521. package/dist/assets/xstate-animation-binding-Brd0NST6.js +1 -0
  522. package/dist/assets/xstate-animation-meta-Q3u9zh_m.js +1 -0
  523. package/dist/assets/xstate-behavior.action-B8UluFBK.js +1 -0
  524. package/dist/assets/xstate-behavior.document-CKAsE45I.js +1 -0
  525. package/dist/assets/xstate-behavior.inspector-vJJyuifc.js +1 -0
  526. package/dist/assets/xstate-behavior.menu-BXbPICIh.js +1 -0
  527. package/dist/assets/xstate-inspection-BsZv8LS9.js +1 -0
  528. package/dist/vgai-shared-react.json +10 -0
  529. package/dist/vgai-shared-three.json +3 -0
  530. package/dist-node/cli.js +9320 -0
  531. package/dist-node/create.js +3239 -0
  532. package/package.json +91 -0
  533. package/presets.mjs +2 -0
  534. package/src/contributions.d.ts +4 -0
  535. package/src/index.ts +38 -0
  536. package/starter/cube.blend +0 -0
  537. package/starter/cube.py +81 -0
  538. package/template/.agents/references/project-manual.md +341 -0
  539. package/template/.agents/skills/editor/SKILL.md +53 -0
  540. package/template/.agents/skills/editor/agents/openai.yaml +4 -0
  541. package/template/.agents/skills/editor/references/editor-control.md +363 -0
  542. package/template/.agents/skills/vgai-3d-models/SKILL.md +64 -0
  543. package/template/.agents/skills/vgai-ingest-existing-game/SKILL.md +112 -0
  544. package/template/.agents/skills/vgai-threejs-authoring/SKILL.md +347 -0
  545. package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
  546. package/template/.agents/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
  547. package/template/.claude/skills/editor/SKILL.md +53 -0
  548. package/template/.claude/skills/editor/agents/openai.yaml +4 -0
  549. package/template/.claude/skills/editor/references/editor-control.md +363 -0
  550. package/template/.claude/skills/vgai-3d-models/SKILL.md +64 -0
  551. package/template/.claude/skills/vgai-ingest-existing-game/SKILL.md +112 -0
  552. package/template/.claude/skills/vgai-threejs-authoring/SKILL.md +347 -0
  553. package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
  554. package/template/.claude/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
  555. package/template/.github/copilot-instructions.md +6 -0
  556. package/template/.github/skills/editor/SKILL.md +53 -0
  557. package/template/.github/skills/editor/agents/openai.yaml +4 -0
  558. package/template/.github/skills/editor/references/editor-control.md +363 -0
  559. package/template/.github/skills/vgai-3d-models/SKILL.md +64 -0
  560. package/template/.github/skills/vgai-ingest-existing-game/SKILL.md +112 -0
  561. package/template/.github/skills/vgai-threejs-authoring/SKILL.md +347 -0
  562. package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
  563. package/template/.github/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
  564. package/template/.mcp.json +12 -0
  565. package/template/.vgai/assets.json +1 -0
  566. package/template/.vgai/provenance.json +4 -0
  567. package/template/.volter/tracker/validation/.preset.base.mts +178 -0
  568. package/template/.volter/tracker/validation/preset.mts +186 -0
  569. package/template/.volter/tracker/visualizer/.extension.base.tsx +14 -0
  570. package/template/.volter/tracker/visualizer/extension.tsx +14 -0
  571. package/template/.volter/tracker-config.json +17 -0
  572. package/template/AGENTS.md +176 -0
  573. package/template/CLAUDE.md +1 -0
  574. package/template/DEVLOG.md +20 -0
  575. package/template/IDIOMS.md +118 -0
  576. package/template/LICENSE +30 -0
  577. package/template/README.md +83 -0
  578. package/template/ROADMAP.md +20 -0
  579. package/template/asset-manifest.json +3 -0
  580. package/template/check-idioms.ts +1533 -0
  581. package/template/index.html +18 -0
  582. package/template/manifest-entry-modules-plugin.ts +53 -0
  583. package/template/package.json +62 -0
  584. package/template/public/jsm/libs/basis/basis_transcoder.js +19 -0
  585. package/template/public/jsm/libs/basis/basis_transcoder.wasm +0 -0
  586. package/template/public/jsm/libs/draco/gltf/draco_decoder.js +33 -0
  587. package/template/public/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
  588. package/template/public/jsm/libs/draco/gltf/draco_encoder.js +33 -0
  589. package/template/public/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
  590. package/template/public/shaders/daylight-sky.frag.glsl +15 -0
  591. package/template/public/shaders/daylight-sky.vert.glsl +7 -0
  592. package/template/scripts/patch-drei-stats-gl.mjs +35 -0
  593. package/template/server/colyseus-setup.ts +111 -0
  594. package/template/server/loopback.ts +76 -0
  595. package/template/server/main.ts +78 -0
  596. package/template/server/rooms/arena-room.ts +488 -0
  597. package/template/server/rooms/game-room.ts +274 -0
  598. package/template/server/rooms.ts +15 -0
  599. package/template/server/tsconfig.json +19 -0
  600. package/template/src/bot/QaTester.tsx +35 -0
  601. package/template/src/bot/behaviors.ts +203 -0
  602. package/template/src/bot/bot-station.ts +192 -0
  603. package/template/src/bot/tester-run.ts +238 -0
  604. package/template/src/bot/tester-station.ts +193 -0
  605. package/template/src/components/environment/DaylightSky.tsx +54 -0
  606. package/template/src/components/environment/Ground.tsx +129 -0
  607. package/template/src/components/environment/SceneAtmosphere.tsx +14 -0
  608. package/template/src/components/environment/SoftGroundShadow.tsx +62 -0
  609. package/template/src/components/environment/SunShadowFit.tsx +141 -0
  610. package/template/src/contributions/README.md +98 -0
  611. package/template/src/contributions/analytics.analytics.tsx +26 -0
  612. package/template/src/contributions/data.document.tsx +35 -0
  613. package/template/src/contributions/pages.finder.ts +61 -0
  614. package/template/src/contributions/tester.inspector.tsx +64 -0
  615. package/template/src/contributions/use-game-modules.ts +80 -0
  616. package/template/src/data/README.md +17 -0
  617. package/template/src/input.ts +97 -0
  618. package/template/src/lib/audio/capability.json +4 -0
  619. package/template/src/lib/audio/sfx.ts +255 -0
  620. package/template/src/lib/react-root/capability.json +4 -0
  621. package/template/src/lib/react-root/index.ts +20 -0
  622. package/template/src/lib/react-root/react-root-adapter.tsx +57 -0
  623. package/template/src/lib/reflections/ReflectionProbe.tsx +201 -0
  624. package/template/src/lib/reflections/capability.json +4 -0
  625. package/template/src/lib/reflections/index.ts +19 -0
  626. package/template/src/lib/reflections/probe-controller.ts +75 -0
  627. package/template/src/lib/reflections/reflection-probe-registry.ts +402 -0
  628. package/template/src/lib/reflections/volume-reflection-material.ts +416 -0
  629. package/template/src/lib/static-batch/Frozen.tsx +91 -0
  630. package/template/src/lib/static-batch/capability.json +4 -0
  631. package/template/src/lib/static-batch/freeze.ts +579 -0
  632. package/template/src/lib/static-batch/index.ts +44 -0
  633. package/template/src/lib/static-batch/mutation-watch.ts +149 -0
  634. package/template/src/lib/static-batch/shadow-cache.ts +171 -0
  635. package/template/src/main.ts +63 -0
  636. package/template/src/manifest-entry-modules.d.ts +3 -0
  637. package/template/src/prefabs/HeroBox.stories.tsx +23 -0
  638. package/template/src/prefabs/HeroBox.tsx +35 -0
  639. package/template/src/scenes/MainScene.tsx +77 -0
  640. package/template/src/world.tsx +87 -0
  641. package/template/tsconfig.json +35 -0
  642. package/template/tsconfig.node.json +32 -0
  643. package/template/tsconfig.tools.json +22 -0
  644. package/template/validate-asset-content.ts +27 -0
  645. package/template/validate-assets.ts +60 -0
  646. package/template/validate-manifest.ts +55 -0
  647. package/template/vgai.adapter.ts +76 -0
  648. package/template/vgai.project.json +24 -0
  649. package/template/vite.config.ts +247 -0
  650. package/template-dotfiles/gitignore +63 -0
  651. package/workbench/src/media/game-cover.css +83 -0
  652. package/workbench/src/product.contribution.ts +188 -0
  653. package/workbench/src/vgaiGameSkew.ts +276 -0
@@ -0,0 +1,6 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-GIL7oGEO.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/three.module-D396a9Mn.js","assets/index-D2fNXpHa.css"])))=>i.map(i=>d[i]);
2
+ import{curve as C,sampleCurve as z}from"./curve-7Q79VgU4.js";import{dataRef as Q,getRef as V}from"./data-ref-CQI28C0D.js";import{_ as h}from"./index-GIL7oGEO.js";import{parseDataJson as g,toDataJsonSchema as y}from"./data-asset-4hjS642k.js";import{findDanglingDataRefs as S,collectDeclaredRefFields as j,findMissingRefTargets as $}from"./data-check-core-CQEjuFyt.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";async function v(){const[e,s]=await Promise.all([h(()=>import("./index-GIL7oGEO.js").then(o=>o.tQ),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),h(()=>import("./index-GIL7oGEO.js").then(o=>o.tQ),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]))]);return{readdirSync:e.readdirSync,readFileSync:e.readFileSync,statSync:e.statSync,join:s.join,relative:s.relative}}function u(e,s){let o;try{o=e.readdirSync(s)}catch{return[]}const a=[];for(const r of o){const n=e.join(s,r);e.statSync(n).isDirectory()?a.push(...u(e,n)):r.endsWith(".data.json")&&a.push(n)}return a}function p(e){const s=e.split("\\").join("/");return s.split("/").pop()?.replace(/\.data\.json$/,"")??s}function b(e,s,o,a,r){const n=new Map,c=new Map;for(const l of u(e,e.join(s,"src","data"))){const t=e.relative(s,l).split("\\").join("/"),i=p(t),d=c.get(i);d?d.push(t):c.set(i,[t]);try{n.set(i,JSON.parse(e.readFileSync(l,"utf-8")))}catch(f){a.push(`"${t}" is not valid JSON: ${f instanceof Error?f.message:String(f)}`);continue}o.has(t)||r.push(`"${t}" is not registered in the data-asset registry (src/data/assets.ts), so it gets no build-time schema check (runtime parse-on-load still applies). Register it there — the template ships the worked example.`)}const m=new Set;for(const[l,t]of c)t.length<2||(m.add(l),a.push(`asset stem "${l}" is claimed by ${t.length} files (${t.join(", ")}) — "file#key" refs and the data-asset registry address a file by its stem alone (§2.2), so this is an unresolvable identity collision. Rename one — asset stems must be unique across the whole project, not just per directory.`),n.delete(l));return{parsedByStem:n,ambiguousStems:m}}async function w(e){const s=await v(),o=e.root??process.cwd(),a=[],r=[],n=new Set(e.assets.map(t=>t.sourcePath.split("\\").join("/"))),{parsedByStem:c,ambiguousStems:m}=b(s,o,n,a,r);for(const t of e.assets){const i=t.sourcePath.split("\\").join("/");if(!c.has(p(i))){m.has(p(i))||a.push(`registered data asset "${i}" was not found on disk — fix the path in the registry (src/data/assets.ts) or restore the file.`);continue}try{g(t.schema,c.get(p(i)),i)}catch(d){a.push(d instanceof Error?d.message:String(d))}}for(const t of S(c))a.push(`dangling data ref in "src/data/${t.inAsset}.data.json" at ${t.atPath}: "${t.ref}" — "${t.missingSegment}" does not exist in src/data/${t.targetAsset}.data.json. Fix the key or remove the ref (refs are "file#key" strings).`);const l=new Set(c.keys());for(const t of e.assets){const i=t.sourcePath.split("\\").join("/"),d=j(y(t.schema));for(const f of $(d,l))a.push(`"${i}" declares field "${f.fieldPath}" as dataRef('${f.targetStem}'), but no "src/data/${f.targetStem}.data.json" exists. Restore/rename the target file, or update the dataRef('${f.targetStem}') call in the schema.`)}return{errors:a,warnings:r}}function _(e){const s=e.split("\\").join("/");return/\/src\/(?:tools|contributions)\//.test(s)||/\.tool\.[tj]sx?(\?|$)/.test(s)}function M(e){return{name:"vgai:data-check",apply:"build",async buildStart(){const{errors:s,warnings:o}=await w(e);for(const a of o)this.warn(a);s.length>0&&this.error(`data-asset validation failed (${s.length} problem${s.length===1?"":"s"}):
3
+ ${s.map(a=>` - ${a}`).join(`
4
+ `)}`)},generateBundle(s,o){const a=new Set;for(const r of Object.values(o))if(r.type==="chunk")for(const n of Object.keys(r.modules))_(n)&&a.add(n.split("\\").join("/"));a.size>0&&this.error(`project tool code reached the game build — tools are editor-only and must never ship to players. Remove every game-code import of these modules (tools may import game code, never the reverse):
5
+ ${[...a].map(r=>` - ${r}`).join(`
6
+ `)}`)}}}export{C as curve,Q as dataRef,V as getRef,z as sampleCurve,M as vgaiDataCheck};
@@ -0,0 +1 @@
1
+ import{Z as t,a2 as a,a3 as i}from"./index-GIL7oGEO.js";async function e(){const o=await fetch(`${t}/configurations`);return(await a(o,"Could not list run configurations")).configurations}async function c(o){const n=await fetch(`${t}/configurations/${encodeURIComponent(o)}/start`,{method:"POST"});return a(n,`Could not start run configuration "${o}"`)}async function u(o,n){const s={method:"POST"};return n&&(s.signal=n),fetch(`${t}/configurations/${encodeURIComponent(o)}/build`,s)}async function f(o){const n=await fetch(`${t}/configurations/${encodeURIComponent(o)}/stop`,{method:"POST"});i(n,`Could not stop run configuration "${o}"`)}export{f as a,c as b,e as l,u as s};
@@ -0,0 +1 @@
1
+ import{a as n}from"./jsx-runtime-DPjLkJKQ.js";import{a7 as i,a4 as s,q as o}from"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./three.module-D396a9Mn.js";const f="workspace.status",g="Connection",y="left",N=20,e="tool:network.utility";function x(){const t=i(()=>o().systems.inspectedNetworking()?.getConnectionState?.()??null);return t===null?null:n.jsxs(s,{type:"button",variant:"ghost",size:"compact",className:"vgai-status-action","data-testid":"status-connection","data-connection-state":t,onClick:()=>o().workspace.showUtility(e),title:"Network connection state — open Network diagnostics",children:["net: ",t]})}export{y as align,x as default,N as order,f as point,g as title};
@@ -0,0 +1 @@
1
+ import{_ as s}from"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const l=["log","warn","error"];function o(e,r){const t={type:"console-bridge",level:e,message:r,timestamp:Date.now()};window.postMessage(t,"*")}function p(e){return e.map(r=>{if(typeof r=="string")return r;try{return JSON.stringify(r)}catch{return String(r)}}).join(" ")}let i=!1;function E(){if(i)return;i=!0;let e=()=>!1;s(()=>import("./logger-Dqis-7W1.js"),[]).then(r=>{e=()=>r._engineLogActive}).catch(()=>{});for(const r of l){const t=console[r].bind(console);console[r]=(...n)=>{t(...n),e()||o(r,p(n))}}window.addEventListener("error",r=>{o("error",r.message||String(r.error))}),window.addEventListener("unhandledrejection",r=>{o("error",`Unhandled promise rejection: ${r.reason}`)})}export{E as installConsoleBridge};
@@ -0,0 +1 @@
1
+ import{getUserData as e,deleteUserData as r,setUserData as s}from"./user-data-BB2Of6Ht.js";import"./object-marks-DwvIEBOK.js";function a(t){const i=e(t,"constraints");return Array.isArray(i)?i.filter(n=>!!n&&typeof n=="object"&&typeof n.getSnapshot=="function"&&!!n.config):[]}function l(t,i){const n=a(t).filter(o=>o.config.id!==i.config.id);s(t,"constraints",[...n,i])}function g(t,i){if(i===void 0){r(t,"constraints");return}const n=a(t).filter(o=>o.config.id!==i);n.length===0?r(t,"constraints"):s(t,"constraints",n)}export{g as clearConstraintMark,a as constraintsOf,l as setConstraintMark};
@@ -0,0 +1 @@
1
+ import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{aY as y,ao as f,a9 as i,eE as v,eF as k,eG as c,a4 as h,eP as j,ek as S}from"./index-GIL7oGEO.js";import{constraintsOf as C}from"./constraint-De8f1Uiq.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./three.module-D396a9Mn.js";import"./user-data-BB2Of6Ht.js";import"./object-marks-DwvIEBOK.js";function g(t,n){return n?t.hierarchy.object3D?.(n)??null:null}function b(t){if(!t)return[];const n=j(t),u=new Set,m=a=>{const l=j(a);if(!(a!==t&&n!==void 0&&l!==void 0&&l!==n)){for(const o of C(a))u.add(o);for(const o of a.children)m(o)}};return m(t),[...u]}function F(t,n){return b(g(n,t?.id??null)).length>0}const w={ready:"Ready",disabled:"Disabled",unresolved:"Unresolved",error:"Error"};function D(t){return t==="two-bone-ik"?"Two Bone IK":t==="ccd-ik"?"CCD IK":t==="aim"?"Aim":t==="rotation"?"Rotation":t}function O({adapter:t,nodeId:n}){const u=y(),m=n?u.objectMap.get(n)??g(t,n)??null:null,a=b(m).sort((o,s)=>o.config.order-s.config.order),l=o=>{if(!o)return;const s=t.hierarchy.idForObject3D?.(o);s&&(S(t,[s],{intent:"exact"})||u.select(s))};return r.jsx("div",{style:{display:"grid",gap:10},children:a.map((o,s)=>{const d=o.config,e=o.getSnapshot(),p=d.type==="two-bone-ik"||d.type==="ccd-ik";return r.jsxs("div",{style:{border:`1px solid ${f.boundary.default}`,borderRadius:6,overflow:"hidden"},children:[r.jsxs("div",{style:{alignItems:"center",background:f.surface.raised,display:"flex",gap:8,justifyContent:"space-between",padding:"6px 8px"},children:[r.jsx(i,{children:`${s+1}. ${d.label}`}),r.jsx(i,{tone:"muted",children:D(d.type)})]}),e.message&&(e.status==="error"||e.status==="unresolved")?r.jsx(v,{tone:"error",children:e.message}):null,r.jsxs(k,{children:[r.jsx(c,{label:"Status",children:r.jsx(i,{tone:e.status==="error"||e.status==="unresolved"?"danger":e.status==="ready"?"success":"muted",children:w[e.status]})}),r.jsx(c,{label:"Weight",children:r.jsx(i,{tone:"muted",children:`${Math.round(d.weight*100)}%`})}),p?r.jsx(c,{label:"Chain",children:r.jsx(i,{tone:"muted",children:e.chain.map(x=>x.name||x.type).join(" → ")||"Unresolved"})}):r.jsx(c,{label:"Constrained",children:e.constrained&&t.hierarchy.idForObject3D?.(e.constrained)?r.jsx(h,{size:"compact",onClick:()=>l(e.constrained),children:e.constrained.name||"Select object"}):r.jsx(i,{tone:"muted",children:e.constrained?.name||"Unresolved"})}),e.error!==null?r.jsx(c,{label:e.error.unit==="degrees"?"Angular error":"Solve error",children:r.jsx(i,{tone:"muted",children:e.error.unit==="degrees"?`${e.error.value.toFixed(2)}°`:`${e.error.value.toFixed(3)} m`})}):null,r.jsx(c,{label:"Target",children:e.target&&t.hierarchy.idForObject3D?.(e.target)?r.jsx(h,{size:"compact",onClick:()=>l(e.target),children:e.target.name||"Select target"}):r.jsx(i,{tone:"muted",children:e.target?.name||"Dynamic target"})}),p?r.jsx(c,{label:"Pole",children:e.pole&&t.hierarchy.idForObject3D?.(e.pole)?r.jsx(h,{size:"compact",onClick:()=>l(e.pole),children:e.pole.name||"Select pole"}):r.jsx(i,{tone:"muted",children:e.pole?.name||"None"})}):null]})]},d.id)})})}const P="selection.inspector",N="Constraints",V="link",W=450;function Y(t,n){return F(t,n)}function _({adapter:t,nodeId:n}){return r.jsx(O,{adapter:t,nodeId:n})}export{_ as default,V as icon,Y as match,W as order,P as point,N as title};
@@ -0,0 +1 @@
1
+ function s(t){if(!Number.isFinite(t)||t<=0)throw new RangeError(`createCountdown: duration must be a finite, positive number of seconds, got ${String(t)}`)}function d(t){const a=t.onElapsed,u=t.repeats===!0;let n=t.duration??1,e=0,r=!1;s(n);const o={get duration(){return n},get repeats(){return u},get remaining(){return r?e:0},get running(){return r},start(i){i!==void 0&&(s(i),n=i),e=n,r=!0},stop(){r=!1,e=0},advance(i){if(r)for(e-=i;r&&e<=0;){if(!u){r=!1,e=0,a();return}e+=n,a()}}};return t.autostart===!0&&o.start(),o}export{d as createCountdown};
@@ -0,0 +1,3 @@
1
+ import{E as k,eI as R,kv as A,aR as L,aS as P,aF as u,B as y,a2 as F,kw as _,kx as N,ky as j,ad as M,jh as O,kz as D,V,q as B}from"./index-GIL7oGEO.js";import{d as v,P as T,S as J,a as W,b as G,u as q}from"./capability-coverage-Czas4C18.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./game-contract-seams-a5YXejOu.js";function E(){const e=k();return!e||!R()?null:v({worldId:u()?.config.name??"project",authoringSurface:A(e.scenes,P().map(t=>t.descriptor.id),L().map(t=>t.descriptor.id))})}function z(e,t){return{slot:e,state:"unanswered",evidence:`nobody has read this project's own files yet, so ${e} is unmeasured — `+(t??"the editor has not asked its dev server for them")}}function H(e){return e.length>0&&e.every(t=>t.type==="ingest")}function K(e){const{scripts:t,roots:o}=e;if(t===null||o===null)return z("export",e.unavailable);if(!t.includes("build"))return{slot:"export",state:"absent",evidence:e.hasPackageJson?"this project's package.json declares no `build` script, and the export path runs `npm run build` in the project and stages the `dist/` it emits":"this project has no package.json, so there is no `build` script for the export path to run",missing:"this project cannot produce a standalone build, so it runs NOWHERE but the editor — the dev-served standalone page refuses an unexported game outright",fix:"add the scaffold's `build` script (`build: tsc && vite build`), which is what every deploy path runs"};const r=o.filter(s=>s.type!=="ingest"&&(s.type!=="builtin"||s.identity!=="three")),n=r.length>0?`; note that the legacy ${y("deploy")} verb additionally refuses ${r.map(s=>`root "${s.id}" (${s.identity})`).join(", ")} — use the project-owned deploy scripts (${y("add deploy-cloudflare")}/\`deploy-vercel\`, then \`npm run deploy\`)`:"",a=t.includes("deploy")?", and a `deploy` script to ship it":` (no \`deploy\` script yet — ${y("add deploy-cloudflare")}/\`deploy-vercel\` adds one)`,c=H(o)?"; this ingest project ships the standalone bundle produced by its own build unchanged":"";return{slot:"export",state:"present",evidence:`this project declares a \`build\` script, which is what the export path runs to emit the \`dist/\` it stages${a}${c}${n}`}}function Y(e){const t={export:K};return T.map(o=>t[o](e))}let l=null,m=null,p=null;function U(){l=null,m=null,p=null}async function Q(e,t=fetch){return l&&p===e?l:(m&&p===e||(p=e,l=null,m=(async()=>{let o;try{const r=await t("/__editor/project-verbs");o=await F(r,"project-verbs did not answer")}catch(r){o={scripts:null,hasPackageJson:!1,dependencies:null,roots:null,unavailable:`the editor could not reach its dev server to read this project's own files (${r instanceof Error?r.message:String(r)})`}}return l=o,o})()),m)}function X(){const e=u();return e?(p===e.rootPath?l:null)?.dependencies??null:null}function Z(){const e=u();if(!e)return null;Q(e.rootPath);const t=p===e.rootPath?l:null;return{scripts:t?.scripts??null,hasPackageJson:t?.hasPackageJson??!1,roots:t?.roots??null,unavailable:t?.unavailable??(t?null:"the editor has not finished reading this project’s own files yet")}}function I(){const e=Z();if(!e)return null;const t=u();return v({worldId:t?.config.name??"project",projectVerbs:Y(e)})}const ee={physics:["@react-three/rapier","@dimforge/rapier3d-compat","@dimforge/rapier2d-compat"],networking:["colyseus.js"],navigation:["recast-navigation","@recast-navigation/core"],audio:["tone","howler"]};function te(e,t){if(t.dependencies===null)return[];const o=ee[e];return o?o.filter(r=>t.dependencies?.includes(r)):[]}function re(e,t){return`this project depends on ${t.join(" + ")}, so "nothing built a ${e} world" is not a settled answer. Reach a terminal state either way: BIND it — declare a ${e} adapter in the root entry's \`systems\` table (the engine ships \`rapierPhysicsSystem()\` for the R3F Rapier bridge; other slots take the game's own adapter) — or DECLARE the absence with \`absent(reason)\` in that same table. The reason must NAME the dependency and say why it is there while the subsystem is not (a transitive pull, a leftover, a build-only use); a declared absence blind to the shipped dependency grades malformed, not terminal.`}function ne(e,t){const o=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(/^[a-z0-9]+$/i.test(t)){if(new RegExp(`\\b${o}\\b`,"i").test(e))return!0}else if(e.toLowerCase().includes(t.toLowerCase()))return!0;const r=new Set(["compat","core","client","server","node","react","three","libs","api","sdk","util","utils","plugin","plugins","tools","types","browser"]),n=d=>d.toLowerCase().split(/[.\-_/]+/).filter(C=>C.length>=4&&!r.has(C)),[a,c]=t.toLowerCase().startsWith("@")?[t.slice(1,t.indexOf("/")),t.slice(t.indexOf("/")+1)]:["",t];let s=n(c);s.length===0&&(s=n(a));const i=s.map(d=>d.replace(/\d+d?$/,"")).filter(d=>d.length>=4);return[...new Set([...s,...i])].some(d=>new RegExp(`\\b${d.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\b`,"i").test(e))}const oe="this project's vgai.project.json declares no `server` block, so there is no room for a NetworkingAdapter to describe",se={physics:"no mounted root built a physics world — the engine seeds this slot from the root that creates one (a `setup` root, or an R3F tree using the Rapier bridge), so nothing in this game simulates bodies",navigation:"no mounted root registered a navigation adapter — the engine seeds this slot from a world's own NavMeshManager registration, so this game has no navmesh",audio:"no mounted root built an audio context — the engine seeds this slot from the root that creates one, so there is no audio graph for the host to mute, meter or graph",camera:"no mounted root registered a camera-ownership system — the engine ships `createCameraOwnershipSystem` for a game that takes camera control (a cutscene rig), so this game's camera is gameplay-owned throughout",renderDebug:"no mounted root captured a real WebGL2 render context to derive one from — the engine seeds this slot only where the root owns the capture wiring (`adapter/setup-three-root-adapter.ts`), so the Frame debugger and the render-memory view have nothing to show for this game"};function S(e,t){return e==="networking"?"register a NetworkingAdapter from the game's own code (`ctx.registerSystemAdapter('networking', …)`) — this project declares a `server` block, so the editor's Network panel is dark for a game that IS networked":`register a ${e} adapter from the game's own code (\`ctx.registerSystemAdapter('${e}', …)\`), or build the subsystem the engine seeds it from`}function ae(e,t){const o=new Map(t.declaredAbsences.map(r=>[r.slot,r]));return J.map(r=>{const n=o.get(r);if(e[r]!=null)return n?{slot:r,state:"malformed",evidence:`root "${n.rootId}" declares this slot absent — "${n.reason}" — but a ${r} adapter is bound on the live mount. One of the two is wrong: either the declaration is stale (delete the \`absent()\` marker) or something registers an adapter the game does not mean to have.`}:{slot:r,state:"bound",proof:_({slot:r,adapter:e[r],subject:"game"})};const a=te(r,t);if(n){const s=a.filter(d=>!ne(n.reason,d));if(s.length>0)return{slot:r,state:"malformed",evidence:`root "${n.rootId}" declares this slot absent — "${n.reason}" — but this project depends on ${s.join(" + ")} and the reason does not mention it. Either the absence is stale, or it holds and the reason should say why that dependency is present without the subsystem (naming it).`};const i=t.absencesFromLastMount?" — the declaration read at this session’s last play mount; play to re-read it live":"";return{slot:r,state:"empty",attestedBy:"game",evidence:a.length>0?`declared absent by root "${n.rootId}": ${n.reason} (the project does depend on ${a.join(" + ")}; the reason engages with that)${i}`:`declared absent by root "${n.rootId}": ${n.reason}${i}`}}if(a.length>0)return{slot:r,state:"unanswered",fix:re(r,a)};if(r==="networking")return t.declaresServer?{slot:r,state:"unanswered",fix:S(r)}:{slot:r,state:"empty",attestedBy:"host",evidence:oe};const c=se[r];return c?{slot:r,state:"empty",attestedBy:"host",evidence:c}:{slot:r,state:"unanswered",fix:S(r)}})}function ie(){const e=O()?.game,t=u()?.rootPath??null;return e?(t!==null&&(g={projectPath:t,absences:e.declaredSystemAbsences??[]}),{absences:e.declaredSystemAbsences??[],fromLastMount:!1}):g!==null&&g.projectPath===t?{absences:g.absences,fromLastMount:!0}:{absences:[],fromLastMount:!1}}let g=null;function x(){if(N()!==null)return null;const e=u();if(!e)return null;const t=j();if(t.length===0||t.every(r=>r.adapter.provenance?.source==="foreign"))return null;const o=ie();return v({worldId:e.config.name,systemAdapters:ae(M(),{declaresServer:(e.config.configurations??[]).some(r=>r.kind==="process"&&typeof r.port=="number"),declaredAbsences:o.absences,absencesFromLastMount:o.fromLastMount,dependencies:X()})})}function ce(e){const t=v({worldId:e.worldId,reach:W(e.adapter,e.worldId),surface:e.surface,reachMechanism:null});return{worldId:e.worldId,surface:e.surface,report:t}}function w(){return j().map(ce)}function de(e=w()){const t=e.map(a=>({label:a.worldId,report:a.report})),o=x();o&&t.push({label:null,report:o});const r=I();r&&t.push({label:null,report:r});const n=E();return n&&t.push({label:null,report:n}),t}function le(e){const t=de(e??w());return t.length===0?null:q(u()?.config.name??"session",t)}const $=new Set;let b=null,f=0;function h(){b=null,f=0}function ue(){if(D()){h();return}const e=w(),t=le(e);if(!t||t.summary.gaps===0){h();return}const o=j();if(o.length===0){h();return}const r=k()?.regions??[];if(r.length>1){const s=new Set(o.map(i=>i.worldId));if(r.some(i=>!s.has(i.id))){h();return}}if(e.some(s=>s.report.rows.find(i=>i.seam==="editor.capture")?.status!=="ok")){h();return}const n=`session coverage "${t.summary.worldId}"`,a=G(t,n).filter(s=>s.level==="warn"),c=a.map(s=>s.message).join(`
2
+ ---
3
+ `);if(b===c?f++:(b=c,f=1),!(f<2))for(const s of a)$.has(s.message)||($.add(s.message),V.warn(s.message,"coverage"))}const Ee="workspace.service",pe=["rootCoverage","systemCoverage","projectCoverage","authoringCoverage"];function he(e){if(e)return{rootCoverage:e.rootCoverage??[],systemCoverage:e.systemCoverage??null,projectCoverage:e.projectCoverage??null,authoringCoverage:e.authoringCoverage??null};const t=x(),o=I(),r=E();return{rootCoverage:w().map(n=>({worldId:n.worldId,surface:n.surface,summary:n.report.summary,rows:n.report.rows.map(a=>({...a}))})),systemCoverage:t?{summary:t.summary,rows:t.rows.map(n=>({...n}))}:null,projectCoverage:o?{summary:o.summary,rows:o.rows.map(n=>({...n}))}:null,authoringCoverage:r?{summary:r.summary,rows:r.rows.map(n=>({...n}))}:null}}function Ie(){const e=B().session,t=e.reportFacet(he,{reusableKeys:pe}),o=e.onSample(ue),r=e.onCommandDispatched(n=>{n==="restart"&&U()});return()=>{t(),o(),r()}}export{Ee as point,Ie as start};
@@ -0,0 +1 @@
1
+ import{r as t}from"./index-nmcBqr7Y.js";class a extends t.Component{state={crashed:!1};static getDerivedStateFromError(){return{crashed:!0}}componentDidCatch(r){this.props.onCaught(r)}render(){return this.state.crashed?null:this.props.children}}export{a as C};
@@ -0,0 +1 @@
1
+ import{assertNever as W}from"./adapter-surface-Y37Nzcyw.js";import{createRootBinding as _}from"./binding-Bmxqznjk.js";import{br as j}from"./index-GIL7oGEO.js";import{createAssetCache as q}from"./assets-BuSoGjBX.js";import{createHostRenderer as J}from"./setup-renderer-DVXaSGin.js";import{T as K}from"./three.module-D396a9Mn.js";import{createGameLoop as Q}from"./game-loop-CZvXlY00.js";import{g as U}from"./debug-registry-Dgvitx8M.js";import{createRootInstance as S,createGame as V}from"./game-DHOZVb-7.js";import{createInputRouter as X}from"./input-router-BNQvtIqw.js";import{isRenderModeRequested as Y,installRenderControlHarness as Z}from"./render-control-Df3yTiyr.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./loader-CaF_I7Yt.js";import"./index-BcCBqgM_.js";import"./defaults-DKiBJCPN.js";import"./render-settings-Bw4W9SYF.js";import"./render-features-CPQ_e568.js";import"./frame-pacing-D5acoOzO.js";import"./loop-gate-report-N52EWFGD.js";import"./system-slot-E2mEdiih.js";import"./user-data-BB2Of6Ht.js";import"./object-marks-DwvIEBOK.js";import"./seeded-random-i3mtgBKZ.js";import"./render-seed-DF4JHy7P.js";import"./sim-clock-CLflx7kg.js";import"./system-runner-DkOjxEBt.js";import"./performance-profiler-D_Jey87L.js";import"./input-manager-DH_hGW6d.js";import"./asset-parse-error-BHMwBRU3.js";import"./binding-identity-DcTpbvyg.js";import"./prompt-labels-DSMdM2_B.js";import"./schema-kl9-2B_J.js";import"./gameplay-rng-trap-CTNhm-UW.js";import"./state-bridge-DLP1jLRW.js";function ee(e,o,r,t){const i=t?.pausable??!0,a=S({id:t?.id??"main",kind:"three",pausable:i,adapter:o,mounted:r,scene:r.scene,binding:T(e,t?.declaration,{surface:"three",adapter:o},r,i)});return e.registerRoot(a),a}function T(e,o,r,t,i){return o?_({...o,adapter:r,mounted:t,pausable:i,debugRegistry:U(e)}):null}function te(e,o,r,t){const i=t?.id??"main",a=t?.pausable??!0,d=S({id:i,kind:"canvas",pausable:a,adapter:o,mounted:r,canvasRoot:r.substrate.root,binding:T(e,t?.declaration,{surface:"canvas",adapter:o},r,a)});return e.registerRoot(d),d}function oe(e,o,r,t,i){const a=i?.pausable??!0,d=S({id:i?.id??"main",kind:"dom",pausable:a,adapter:o,mounted:r,container:t,binding:T(e,i?.declaration,{surface:"dom",adapter:o},r,a)});return e.registerRoot(d),d}async function Ze(e){return le(e)}function re(e){return{domElement:e,render(){},setPixelRatio(){},setClearColor(){},setSize(){},dispose(){},forceContextLoss(){}}}function D(e,o){try{e.mounted.dispose()}finally{e.renderer?.dispose(),e.renderer?.forceContextLoss();try{(e.element.parentNode??o).removeChild(e.element)}catch{}}}async function ne(e,o){const{game:r,canvas:t,w:i,h:a,dpr:d,isBottom:g,headless:s,assets:l,antialias:m}=o,u=s?re(t):J(t,i,a,m===void 0?void 0:{antialias:m},{alpha:!g,preserveDrawingBuffer:!0});u.setSize(i,a,!1),t.style.width="100%",t.style.height="100%",u.setPixelRatio(d),g||u.setClearColor(0,0);const v={three:K,surface:{canvas:t,width:i,height:a},renderer:u,assets:l,headless:s,game:r},w=await e.adapter.mount(v);return ee(r,e.adapter,w,{id:e.id,pausable:e.pausable,declaration:e.declaration}),{mountedEntry:{id:e.id,kind:"three",element:t,mounted:w,renderer:u},routerEntry:{id:e.id,zOrder:e.zOrder??0,canvas:t,hitTest:e.hitTest}}}async function ie(e,o){const{game:r,canvas:t,w:i,h:a,dpr:d,headless:g,isBottom:s}=o,l={canvas:t,width:i,height:a,game:r,headless:g,dpr:d,transparent:!s,preserveDrawingBuffer:!0},m=await e.adapter.mount(l);return te(r,e.adapter,m,{id:e.id,pausable:e.pausable,declaration:e.declaration}),{mountedEntry:{id:e.id,kind:"canvas",element:t,mounted:m,renderer:void 0},routerEntry:{id:e.id,zOrder:e.zOrder??0,canvas:t,hitTest:e.hitTest}}}async function se(e,o,r){r.style.pointerEvents="none",r.style.width="100%",r.style.height="100%";const t={container:r,game:o},i=await e.adapter.mount(t);return oe(o,e.adapter,i,r,{id:e.id,pausable:e.pausable,declaration:e.declaration}),{mountedEntry:{id:e.id,kind:"dom",element:r,mounted:i,renderer:void 0}}}function ae(e){return()=>{}}async function de(e,o,r){const{surfacesById:t,container:i,...a}=r,d=[],g=[];try{for(const s of e){const l=s.id===o;if(s.kind==="dom"){const b=t.get(s.id),{mountedEntry:E}=await se(s,a.game,b);d.push(E);continue}const m=t.get(s.id),u={...a,canvas:m,isBottom:l};let v,w;s.kind==="three"?{mountedEntry:v,routerEntry:w}=await ne(s,u):s.kind==="canvas"?{mountedEntry:v,routerEntry:w}=await ie(s,u):W(s,"create-runtime mount loop"),d.push(v),g.push(w)}}catch(s){for(let l=d.length-1;l>=0;l--){const m=d[l];try{D(m,i)}catch(u){console.error(`createGameRuntime: rolling back root "${m.id}" after a mount failure threw:`,u)}}throw s}return{mountedEntries:d,routerEntries:g}}function ce(e,o,r){const t=r??(typeof window<"u"?window:void 0);if(t!==void 0)return Z({game:e,clock:{seek(){},seekFrame(){}},readiness:{scene(){}},location:o,target:t}),()=>{delete t.__vgaiRender}}function me(e,o,r){try{e.dispose()}catch(t){console.error("createGameRuntime: disposing the game after a mount failure threw:",t)}for(const t of o)try{(t.parentNode??r).removeChild(t)}catch{}}async function le(e){const{container:o,roots:r,width:t,height:i,headless:a=!1,seed:d,playtest:g}=e;if(r.length===0)throw new Error("createGameRuntime: `roots` must contain at least one root.");const s=r,l=Math.max(1,t??o.clientWidth??0),m=Math.max(1,i??o.clientHeight??0),u=a?1:Math.min(typeof window<"u"&&window.devicePixelRatio||1,2);o.style.position||(o.style.position="relative");const v=s.map(n=>({id:n.id,zOrder:n.zOrder??0,hitTest:n.hitTest})),w=j(v),b=w[0]?.id,E=new Map(s.map(n=>[n.id,n.kind])),C=new Map;w.forEach((n,p)=>{const c=E.get(n.id)==="dom",f=document.createElement(c?"div":"canvas");if(f.dataset.vgaiRootSurface="true",f.dataset.vgaiRootId=n.id,!c){const R=f;R.width=l,R.height=m}f.style.cssText=`position:absolute;top:0;left:0;width:100%;height:100%;z-index:${p+1};contain:layout paint;`,o.appendChild(f),C.set(n.id,f)});const G=q(),y=e.renderControl?.location??(typeof window<"u"?window.location:void 0),H=y!==void 0&&Y(y);let k=!1;const x=Q({fixedTimestep:1/60,maxSubSteps:8,externalDrive:H,update:n=>{k&&h.runFrame(n,{skipRenderPhases:!0})},render:(n,p)=>{k&&h.runRenderFrame(n,p)}}),h=V({loop:x,assets:G,seed:d,playtest:g});let O;try{O=await de(s,b,{game:h,surfacesById:C,container:o,w:l,h:m,dpr:u,headless:a,assets:G,antialias:e.antialias})}catch(n){throw me(h,C.values(),o),n}const{mountedEntries:z,routerEntries:I}=O,$=X(o,I);k=!0,x.start();const A=ae(),F=H&&y!==void 0?ce(h,y,e.renderControl?.target):void 0;let B;const L=new Promise(n=>{B=n});let P=!1;function N(){if(P)return;P=!0;const n=[],p=(c,f)=>{try{f()}catch(R){n.push({step:c,error:R})}};try{p("loop.stop",()=>x.stop()),p("router.dispose",()=>$.dispose());for(const c of z)p(`root "${c.id}"`,()=>D(c,o));p("game.dispose",()=>h.dispose()),p("dev globals",()=>A()),p("render harness",()=>F?.())}finally{Promise.allSettled(z.map(c=>c.mounted.disposeComplete??Promise.resolve())).then(()=>B())}if(n.length>0)throw new AggregateError(n.map(c=>c.error),`Game session teardown failed in ${n.length} step(s): ${n.map(c=>c.step).join(", ")}. Every other step still ran.`)}return{stop:N,stopComplete:L,pause(){h.play.pause()},resume(){h.play.resume()},step(){h.play.step()},resize(n,p,c){const f=Math.max(1,n),R=Math.max(1,p);for(const M of z)c!==void 0&&M.renderer?.setPixelRatio(c),M.renderer?.setSize(f,R,!1),M.mounted.resize?.(f,R)},game:h}}export{Ze as createGameRuntime,te as registerCanvasRoot,oe as registerReactRoot,ee as registerThreeRoot};
@@ -0,0 +1 @@
1
+ import{dq as f,L as d,t as x,c4 as y}from"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const g="x-vgai-curve";function p(r,n){return r[n].label??n}function v(r,n,e){const s=r.points;for(let t=0;t<s.length;t++){const o=s[t];for(const a of["x","y"]){const{min:u,max:c}=n[a];(o[a]<u||o[a]>c)&&e.addIssue({code:"custom",path:["points",t,a],message:`${o[a]} is outside this curve's ${p(n,a)} domain [${u}, ${c}] — move the point inside the domain, or widen the axis in the schema (curve({ ${a}: { min, max } })).`})}if(t===0)continue;const i=s[t-1];o.x<=i.x&&e.addIssue({code:"custom",path:["points",t,"x"],message:`${o.x} must be strictly greater than the previous point's x (${i.x}) — curve points run left to right along x, with no duplicate x. Sort the points, or nudge this one.`})}}function K(r){const n=f({x:d().describe(`Position along ${p(r,"x")}.`),y:d().describe(`Value at that position, along ${p(r,"y")}.`)});return f({interpolation:y(["linear","smooth"]).describe('How the value moves between points: "linear" for straight segments, "smooth" for a monotone cubic that never overshoots them.'),points:x(n).min(2,{message:'a curve needs at least two points — add another { "x": …, "y": … } so the value has somewhere to travel between.'}).describe("Keys in increasing x order; the value is clamped outside the first/last x.")}).superRefine((e,s)=>v(e,r,s)).meta({[g]:r})}function L(r){let n=r;for(let e=0;e<5&&n;e++){const t=n.meta?.()?.[g];if(t&&typeof t=="object"&&"x"in t&&"y"in t)return t;n=n.def?.innerType}}function b(r){const n=r.length,e=[];for(let t=0;t<n-1;t++){const o=r[t],i=r[t+1];e.push((i.y-o.y)/(i.x-o.x))}const s=[e[0]];for(let t=1;t<n-1;t++)s.push((e[t-1]+e[t])/2);s.push(e[n-2]);for(let t=0;t<n-1;t++){const o=e[t];if(o===0){s[t]=0,s[t+1]=0;continue}let i=s[t]/o,a=s[t+1]/o;i<0&&(s[t]=0,i=0),a<0&&(s[t+1]=0,a=0);const u=i*i+a*a;if(u>9){const c=3/Math.sqrt(u);s[t]=c*i*o,s[t+1]=c*a*o}}return s}function M(r,n){const e=r.points;if(e.length===0)return 0;const s=e[0],t=e[e.length-1];if(e.length===1||n<=s.x)return s.y;if(n>=t.x)return t.y;let o=0;for(;o<e.length-2&&n>=e[o+1].x;)o++;const i=e[o],a=e[o+1],u=a.x-i.x;if(u<=0)return i.y;const c=(n-i.x)/u;if(r.interpolation==="linear")return i.y+(a.y-i.y)*c;const m=b(e),h=c*c,l=h*c;return(2*l-3*h+1)*i.y+(l-2*h+c)*u*m[o]+(-2*l+3*h)*a.y+(l-h)*u*m[o+1]}export{K as curve,L as curveAxesOf,M as sampleCurve};
@@ -0,0 +1,5 @@
1
+ import{dr as p}from"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";function S(s,e,t){let i=c(s,e,t);const o=new Set;return{get:()=>i,sourcePath:t,subscribe(r){return o.add(r),()=>o.delete(r)},hotSwap(r){let n;try{n=c(s,r,t)}catch(a){console.error(`[data] hot edit rejected, keeping previous values.
2
+ ${String(a)}`);return}i=n;for(const a of o)a(i)}}}function g(s){const e=p(s,{io:"input"});if(e.type==="object"){const t=e.properties??{};t.$schema??={type:"string"},e.properties=t}return e}function c(s,e,t){const i=e!==null&&typeof e=="object"&&!Array.isArray(e)&&"$schema"in e?Object.fromEntries(Object.entries(e).filter(([r])=>r!=="$schema")):e,o=s.safeParse(i);if(!o.success){const r=o.error.issues.map(n=>` - ${n.path.join(".")||"(root)"}: ${n.message}`).join(`
3
+ `);throw new Error(`Data asset "${t}" failed its schema:
4
+ ${r}
5
+ Fix the JSON to match the Zod schema (its emitted twin, "${t.replace(/\.data\.json$/,".schema.json")}", documents every field — re-emit with \`npm run emit-schemas\` if the schema changed). Worked example: the template's src/data/.`)}return o.data}export{S as defineData,c as parseDataJson,g as toDataJsonSchema};
@@ -0,0 +1 @@
1
+ const u=/^([A-Za-z0-9_-]+)#([A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)*)$/;function f(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function l(t,e,r){const n=[];return c(e,"",!0,(i,s)=>{const o=g(t,i,s,r);o&&n.push(o)}),n}function c(t,e,r,n){if(typeof t=="string"){n(t,e);return}if(Array.isArray(t)){t.forEach((i,s)=>{c(i,`${e}[${s}]`,!1,n)});return}if(f(t))for(const[i,s]of Object.entries(t))r&&i==="$schema"||c(s,e?`${e}.${i}`:i,!1,n)}function g(t,e,r,n){const i=u.exec(e);return!i||!n.has(i[1])?null:{inAsset:t,atPath:r||"(root)",ref:e,targetAsset:i[1],targetKeyPath:i[2].split(".")}}function A(t){const e=new Set(t.keys()),r=[];for(const[n,i]of t)for(const s of l(n,i,e)){const o=m(t.get(s.targetAsset),s);o!==null&&r.push({...s,missingSegment:o})}return r}function m(t,e){let r=t;for(const n of e.targetKeyPath){if(!f(r)||!(n in r))return n;r=r[n]}return null}function y(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function d(t){const e=[];return a(t,"",e),e}function a(t,e,r){const n=y(t);if(n){if(typeof n["x-vgai-ref"]=="string"){r.push({fieldPath:e||"(root)",targetStem:n["x-vgai-ref"]});return}if(f(n.properties))for(const[i,s]of Object.entries(n.properties))i!=="$schema"&&a(s,e?`${e}.${i}`:i,r);f(n.additionalProperties)&&a(n.additionalProperties,e,r)}}function h(t,e){return t.filter(r=>!e.has(r.targetStem)).map(r=>({fieldPath:r.fieldPath,targetStem:r.targetStem}))}export{u as DATA_REF_PATTERN,l as collectDataRefs,d as collectDeclaredRefFields,A as findDanglingDataRefs,h as findMissingRefTargets};
@@ -0,0 +1 @@
1
+ import{DATA_REF_PATTERN as c}from"./data-check-core-CQEjuFyt.js";import{u as l}from"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";function g(e){return new RegExp(`^${e}#[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)*$`)}function j(e){return l().regex(g(e),{message:`must be a "${e}#<key>" reference — expected the target asset stem "${e}", e.g. "${e}#some-key".`}).meta({"x-vgai-ref":e})}function u(e,o){let t=e;for(const r of o){if(t===null||typeof t!="object"||Array.isArray(t)||!(r in t))return r;t=t[r]}return null}function S(e,o){const t=c.exec(o);if(!t)throw new Error(`getRef: "${o}" is not a "file#key" reference — expected a string shaped like "some-file#some-key".`);const r=t[1],m=t[2],n=e.sourcePath?.split("\\").join("/").split("/").pop()?.replace(/\.data\.json$/,"");if(n!==void 0&&n!==r)throw new Error(`getRef: ref "${o}" names target asset "${r}", but the handle passed in is "${n}" (${e.sourcePath}). Pass the handle "${r}#..." actually names — getRef(${r}, ...), not getRef(${n}, ...).`);const i=m.split("."),a=e.get(),f=u(a,i);if(f!==null)throw new Error(`getRef: dangling ref "${o}" — "${f}" does not exist`+(n?` in ${n}.data.json`:"")+'. Fix the key or remove the ref (refs are "file#key" strings).');let s=a;for(const p of i)s=s[p];return s}export{j as dataRef,S as getRef};
@@ -0,0 +1 @@
1
+ import{D as m}from"./debug-registry-Dgvitx8M.js";import{runTicksWhenSettled as _}from"./run-ticks-settled-C4ksViyA.js";import"./index-GIL7oGEO.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const D="vgai-debug",T=100,E=50,k=100,P=60,b=2e3,V="the host loop reported liveness 'loop-starved' and this session has no way to drive ticks — no recent rAF progress was observed. Check `vgai status` for the separate visibility readings; foreground/reload the editor, or start play to wire the run-ticks target, then retry.";async function L(i,s,d){const n=()=>i.state("time"),c=n();let l=c.tick,u=0,g=0;for(;;){const r=n();if(r.simSeconds-c.simSeconds>=s)return{stalled:!1};if(r.loopLiveness==="loop-starved"){if(!d)return{stalled:!0,starvedWithoutDriver:!0};if(g>=b)return{stalled:!0};g+=1;const e=s-(r.simSeconds-c.simSeconds),t=r.fixedDt,o=t!==void 0&&Number.isFinite(t)&&t>0?Math.max(1,Math.ceil(e/t-1e-9)):1;d(Math.min(P,o));const a=n();if(a.tick===r.tick&&a.simSeconds===r.simSeconds)return{stalled:!0};l=a.tick,u=0,await Promise.resolve();continue}if(u=r.tick===l?u+1:0,l=r.tick,u>=k)return{stalled:!0};await new Promise(e=>setTimeout(e,E))}}function f(){return typeof window<"u"}function S(i){return new URLSearchParams(i.search).get(D)==="1"}function h(i){return i.debug?.allowInProduction===!0}function I(i){const{registry:s,manifest:d}=i,n=s.adapter,c=[];function l(e){c.push(e),c.length>T&&c.shift()}const u=e=>{l(e.message||String(e.error))},g=e=>{l(`Unhandled promise rejection: ${String(e.reason)}`)};i.window.addEventListener?.("error",u),i.window.addEventListener?.("unhandledrejection",g);function r(e,t){const o=s.getVirtualInputTarget(t);if(!o)throw new m("DEBUG_INPUT_UNAVAILABLE",`debug bridge: ${e}() has no virtual-input target wired — no default three world has mounted yet, or this project's mount path never wired one`);return o}return{version:1,providers:n.providers,state:n.state,stateAll:n.stateAll,commands:n.commands,events:n.events,async invoke(e,t){if(!h(d))throw new m("DEBUG_COMMANDS_UNSUPPORTED",`debug: command "${e}" invocation refused — production build without debug.allowInProduction (D18)`,{name:e});return n.invoke(e,t)},input:{setVirtualAction:(e,t,o)=>r("setVirtualAction",o).setVirtualAction(e,t),tapVirtualAction:(e,t)=>r("tapVirtualAction",t).tapVirtualAction(e),clearVirtualActions:e=>r("clearVirtualActions",e).clearVirtualActions(),scheduleActionAtTick:(e,t,o,a)=>r("scheduleActionAtTick",a).scheduleActionAtTick(e,t,o),startRecording:e=>r("startRecording",e).startInputRecording(),stopRecording:e=>r("stopRecording",e).stopInputRecording(),isRecording:e=>r("isRecording",e).isInputRecording(),injectPointerDelta:(e,t,o)=>r("injectPointerDelta",o).injectPointerDelta(e,t),injectPointerPosition:(e,t,o)=>r("injectPointerPosition",o).injectPointerPosition(e,t)},snapshot(e){return{time:n.state("time"),state:n.stateAll(),events:n.events(e),pageErrors:c.slice()}},runTicks(e,t){const o=s.getRunTicksTarget();if(!o)throw new m("DEBUG_RUN_TICKS_UNAVAILABLE","debug bridge: runTicks() has no run-ticks target wired — no Game has mounted yet");o.runTicks(e,t)},runTicksSettled(e,t){return _(s,e,t)},async holdFor(e,t,o){const a=r("holdFor",o),w=a.setVirtualAction(e,!0);if(!w.delivered)return a.clearVirtualActions(),w.reason!==void 0?{delivered:!1,reason:w.reason}:{delivered:!1};const v=s.getRunTicksTarget(),{stalled:p,starvedWithoutDriver:A}=await L(n,t,v?R=>v.runTicks(R,{render:"last"}):void 0);return a.clearVirtualActions(),p?{delivered:!1,reason:A?V:"play stopped during hold"}:{delivered:!0}},uninstall(){i.window.removeEventListener?.("error",u),i.window.removeEventListener?.("unhandledrejection",g),delete i.window.__vgai}}}function x(i){const s=i.url??(f()?window.location:void 0);if(!s||!S(s))return;const d=i.window??(f()?window:void 0);if(!d)return;if(!h(i.manifest)){console.warn("[debug] ?vgai-debug=1 ignored: production build without debug.allowInProduction (D18)");return}const n=I({registry:i.registry,manifest:i.manifest,window:d});return d.__vgai=n,n}export{D as DEBUG_MODE_QUERY_PARAM,V as HOLD_STARVED_NO_DRIVER_REASON,x as maybeInstallDebugBridge,L as waitForHoldBudget};
@@ -0,0 +1 @@
1
+ import{dr as B}from"./index-GIL7oGEO.js";function C(o){const n=Symbol.for(`@vgai/game-runtime/game-scoped/${o}`);return{set(c,a){Object.defineProperty(c,n,{configurable:!0,enumerable:!1,value:a})},get(c){return c[n]??null}}}const W=Object.freeze(Object.defineProperty({__proto__:null,createGameScopedSlot:C},Symbol.toStringTag,{value:"Module"}));class d extends Error{code;data;constructor(n,c,a){super(c),this.name="DebugError",this.code=n,this.data=a}}const M="ctx.debug.registerStateProvider(name, fn) — see the template example component";function q(o){if(o instanceof Error){const n={causeName:o.name,causeMessage:o.message};return o.stack===void 0?n:{...n,causeStack:o.stack}}return{causeName:typeof o,causeMessage:String(o)}}const F=1e4,O="__react__";function k(o,n,c,a){o.has(n)||(o.add(n),console.warn(`[debug] ${c} "${n}" re-registered (world "${a}")`))}function j(o){const n=new Map,c=new Map,a=new Set,v=new Set,m=[],A=500;let p=0,y=!1;const w=new Map,S=new Map,l=new Map;let I=null;const D=new Set;let b=null;const g=new Map;let $=0;function G(e){if(e!==void 0){if(!l.has(e))throw new d("DEBUG_INPUT_WORLD_NOT_FOUND",`debug: no InputManager wired for world "${e}" — registered: `+(l.size?[...l.keys()].join(", "):"(none)"),{worldId:e,registered:[...l.keys()]});return e}return h(l.keys())}function h(e){const t=[...e];if(t.length===0)return null;const r=o.getDefaultRootId?.()??null;return r!==null&&t.includes(r)?r:t[0]}n.set("time",{fn:()=>({simSeconds:o.getSimT(),tick:o.getTick(),loopLiveness:o.getLoopLiveness?.()??null,...o.getFixedDt===void 0?{}:{fixedDt:o.getFixedDt()}}),tier:"observable",worldId:"__engine__",builtin:!0}),n.set("input.actions",{fn:()=>{const e=h(w.keys());return(e?w.get(e):void 0)?.()??[]},tier:"observable",worldId:"__engine__",builtin:!0}),n.set("input.trace",{fn:()=>{const e=h(S.keys());return(e?S.get(e):void 0)?.()??{version:1,seed:null,fixedDt:null,ticks:[]}},tier:"observable",worldId:"__engine__",builtin:!0});function E(e,t,r,s,i){const u=n.get(t);if(u?.builtin)throw new d("DEBUG_BUILTIN_RESERVED",`debug: "${t}" is a built-in state provider (registered by "${u.worldId}") — built-in names cannot be registered over, from a world or the react door`,{name:t,registered:u.worldId});if(u){if(u.worldId!==e)throw new d("DEBUG_NAME_COLLISION",`debug: state provider "${t}" is registered by both world "${u.worldId}" and world "${e}" — each provider name must be unique across live roots`,{name:t,roots:[u.worldId,e]});k(a,t,"provider",e)}n.set(t,{fn:r,tier:s,worldId:e,builtin:!1,token:i})}function R(e,t,r,s,i){if(r.locus===void 0&&y)throw new d("DEBUG_COMMAND_LOCUS_REQUIRED","this project declares a Colyseus room — declare locus: 'client' | 'server' so fixtures mutate authoritative state, not client prediction",{name:t,worldId:e});const u=c.get(t);if(u){if(u.worldId!==e)throw new d("DEBUG_NAME_COLLISION",`debug: command "${t}" is registered by both world "${u.worldId}" and world "${e}" — each command name must be unique across live roots`,{name:t,roots:[u.worldId,e]});k(v,t,"command",e)}c.set(t,{description:r.description,argsSchema:r.args,locus:r.locus,fn:s,worldId:e,token:i})}function T(e,t){p+=1,m.push({tick:o.getTick(),simT:o.getSimT(),event:e,detail:t,seq:p}),m.length>A&&m.shift()}function U(e){return e===void 0?m.slice():m.filter(t=>t.seq>e)}function L(e,t){if(!b)throw new d("DEBUG_COMMAND_FAILED",`debug: command "${e}" is locus:'server' but no Colyseus room is attached (call ctx.debug.attachRoom(room) once your game joins its room)`,{reason:"no room connection"});const r=`dbg-${++$}`,s=b;return new Promise((i,u)=>{const f=setTimeout(()=>{g.delete(r),u(new d("DEBUG_COMMAND_FAILED",`debug: command "${e}" (requestId "${r}") timed out waiting for the server`,{reason:"server timeout"}))},F);g.set(r,{resolve:i,reject:u,timer:f}),s.send("__vgai:debugCommand",{name:e,args:t,requestId:r})})}let _=null;function P(e){_?.(),b=e;const t=e.onMessage("__vgai:debugCommandResult",s=>{const i=s,u=i?.requestId;if(u===void 0)return;const f=g.get(u);f&&(g.delete(u),clearTimeout(f.timer),i?.ok?f.resolve(i.result):f.reject(new d("DEBUG_COMMAND_FAILED",`debug: server command failed: ${String(i?.error)}`,{cause:i?.error})))}),r=()=>{if(_===r){_=null,b===e&&(b=null),typeof t=="function"&&t();for(const[s,i]of g)clearTimeout(i.timer),i.reject(new d("DEBUG_COMMAND_FAILED",`debug: command (requestId "${s}") failed — its room was detached before a reply arrived`,{reason:"no room connection"}));g.clear()}};return _=r,r}return{adapter:{providers(){return[...n.entries()].map(([e,t])=>({name:e,tier:t.tier}))},state(e){const t=n.get(e);if(!t)throw new d("STATE_PROVIDER_NOT_FOUND",`debug: no state provider registered under "${e}"`,{registered:[...n.keys()],registrationHint:M});return t.fn()},stateAll(){const e={};for(const[t,r]of n)try{e[t]=r.fn()}catch(s){e[t]={__error:String(s)}}return e},commands(){return[...c.entries()].map(([e,t])=>({name:e,description:t.description,argsJsonSchema:t.argsSchema?B(t.argsSchema,{unrepresentable:"any"}):void 0,locus:t.locus??"client"}))},async invoke(e,t){const r=c.get(e);if(!r)throw new d("DEBUG_COMMAND_NOT_REGISTERED",`debug: no command registered under "${e}"`,{registered:[...c.keys()],registrationHint:M});let s=t;if(r.argsSchema){const i=r.argsSchema.safeParse(t);if(!i.success)throw new d("DEBUG_COMMAND_ARGS_INVALID",`debug: command "${e}" received invalid args`,{issues:i.error.issues});s=i.data}if((r.locus??"client")==="server")return L(e,s);try{return await r.fn(...s)}catch(i){const u=q(i);throw new d("DEBUG_COMMAND_FAILED",`debug: command "${e}" threw: ${u.causeMessage}`,{cause:i,...u})}},events(e){return U(e)}},forRoot(e){return{registerStateProvider(t,r,s){E(e,t,r,s?.tier??"observable")},registerCommand(t,r,s){R(e,t,r,s)},emit(t,r){T(t,r)},attachRoom(t){return P(t)}}},emitReact(e,t){T(e,t)},strip(e){for(const[t,r]of n)r.builtin||e!==void 0&&r.worldId!==e||(n.delete(t),a.delete(t));for(const[t,r]of c)e!==void 0&&r.worldId!==e||(c.delete(t),v.delete(t))},setRoomDeclared(e){y=e},setInputActionsSource(e,t){w.set(e,t)},setInputTraceSource(e,t){S.set(e,t)},setVirtualInputTarget(e,t){l.set(e,t)},getVirtualInputTarget(e){const t=G(e);return t!==null?l.get(t)??null:null},setRunTicksTarget(e){I=e},getRunTicksTarget(){return I},registerWorldSettledProbe(e){return D.add(e),()=>{D.delete(e)}},worldSettled(){for(const e of D)try{if(!e())return!1}catch{return!1}return!0},getGameTick(){return o.getTick()},registerReactProvider(e,t,r){const s=Symbol(e);return E(O,e,t,r?.tier??"observable",s),()=>{n.get(e)?.token===s&&(n.delete(e),a.delete(e))}},registerReactCommand(e,t,r){const s=Symbol(e);return R(O,e,t,r,s),()=>{c.get(e)?.token===s&&(c.delete(e),v.delete(e))}}}}const N=C("debug-registry");function x(o,n){N.set(o,n)}function V(o){return N.get(o)??null}const J=Object.freeze(Object.defineProperty({__proto__:null,DebugError:d,createDebugRegistry:j,getDebugRegistry:V,registerDebugRegistry:x},Symbol.toStringTag,{value:"Module"}));export{d as D,j as a,W as b,C as c,J as d,V as g,x as r};
@@ -0,0 +1 @@
1
+ const e={material:{type:"standard",color:"#888888",metalness:0,roughness:.5,emissive:"#000000",emissiveIntensity:0,opacity:1,transparent:!1,side:"front",flatShading:!1,clearcoat:{clearcoat:1,clearcoatRoughness:0},transmission:{transmission:1,ior:1.5,thickness:.5},sheen:{sheen:1,sheenColor:"#ffffff",sheenRoughness:.5},iridescence:{iridescence:1,iridescenceIOR:1.3,iridescenceThicknessRange:[100,400]},displacementScale:1,displacementBias:0},light:{color:"#ffffff",intensity:1,groundColor:"#000000",distance:0,decay:2,angle:Math.PI/6,penumbra:0,width:10,height:10},camera:{fov:60,near:.1,far:1e3,orthoSize:5,width:1920,height:1080},collider:{cuboid:{halfExtents:[.5,.5,.5]},ball:{radius:.5},capsule:{radius:.25,halfHeight:.5}},toneMapping:{mode:"aces",exposure:1},postProcessing:{bloom:{intensity:1,luminanceThreshold:.9,luminanceSmoothing:.025},vignette:{darkness:.5,offset:.5},brightnessContrast:{brightness:0,contrast:0},hueSaturation:{hue:0,saturation:0},sepia:{intensity:1},colorDepth:{bits:16},chromaticAberration:{offsetX:.002,offsetY:.002,modulationOffset:.15},lensDistortion:{distortionX:0,distortionY:0,focalLengthX:1,focalLengthY:1,skew:0},depthOfField:{worldFocusDistance:10,worldFocusRange:5,bokehScale:3,focalLength:.04},tiltShift:{offset:0,rotation:0,focusArea:.4,feather:.3},noise:{premultiply:!1},scanline:{density:1.25},dotScreen:{angle:1.57,scale:1},grid:{scale:1,lineWidth:0},pixelation:{granularity:6},glitch:{delayX:1.5,delayY:3.5,durationX:.6,durationY:1,strengthX:.3,strengthY:1,columns:.05,ratio:.85},shockWave:{speed:2,maxRadius:1,waveSize:.2,amplitude:.05},smaa:{preset:"high"},ssao:{radius:.05,intensity:2,bias:.025,samples:16,rings:7,fade:.01},n8ao:{aoSamples:16,aoRadius:5,intensity:5,denoiseSamples:8,denoiseRadius:12,distanceFalloff:1},godRays:{density:.96,decay:.93,weight:.4,exposure:.6,samples:60},outline:{edgeStrength:3,pulseSpeed:0,visibleEdgeColor:"#ffffff",hiddenEdgeColor:"#22090a"},ssr:{intensity:1,exponent:1,distance:10,thickness:10,maxRoughness:1},ssgi:{intensity:1,distance:10,thickness:10,maxRoughness:1},motionBlur:{intensity:1,jitter:1,samples:16}},navigation:{cellSize:.3,cellHeight:.2,walkableSlopeAngle:45,walkableHeight:2,walkableClimb:1,walkableRadius:.5,maxEdgeLen:12,maxSimplificationError:1.3,minRegionArea:8,mergeRegionArea:20}};export{e as DEFAULTS};
@@ -0,0 +1 @@
1
+ const d=16;function a(){let r=[];const s=new Map,t=new WeakSet;return{defer(e){r.push(e)},deferDispose(e,o){s.has(e)||s.set(e,o)},isDisposePending(e){return s.has(e)},wasDisposed(e){return t.has(e)},drain(){let e=0;for(;r.length>0;){if(++e>16)throw new Error("DeferredCommands.drain: still queueing more work after 16 passes. Something passed to defer() defers itself, so this drain would never terminate.");const o=r;r=[];for(const n of o)n()}for(const[o,n]of s)n(),t.add(o);s.clear()}}}export{d as MAX_DRAIN_PASSES,a as createDeferredCommands};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/canvas-entry-runtime-SfBxaR9M.js","assets/index-GIL7oGEO.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/three.module-D396a9Mn.js","assets/index-D2fNXpHa.css","assets/mount-ingest-root-glv2SSWf.js","assets/active-ingest-CT6jSGhr.js","assets/game-contract-seams-a5YXejOu.js","assets/capability-coverage-Czas4C18.js","assets/ingest-source-persistence-C_6Hiyra.js","assets/playtest-BXIL1JEF.js"])))=>i.map(i=>d[i]);
2
+ import{y as u,z as d,_ as i,B as l,E as n,F as m,I as p}from"./index-GIL7oGEO.js";import{q as g}from"./edit-mode-authoring-B47TfLqu.js";import{d as v,a as c,b as w,g as y,e as P,c as I}from"./active-ingest-CT6jSGhr.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./game-contract-seams-a5YXejOu.js";import"./capability-coverage-Czas4C18.js";import"./ingest-source-persistence-C_6Hiyra.js";import"./playtest-BXIL1JEF.js";async function _(){const e=await u().catch(()=>null);if(!e)return!1;const t=d(e);if(t.length!==1)return!1;if(t[0].world!==void 0)return!0;const a=await A();return b(a)}const h=4e3;function A(){const e=n();return e?Promise.resolve(e):new Promise(t=>{const a=setTimeout(()=>{o(),t(n())},h),o=m(()=>{const r=n();r&&(clearTimeout(a),o(),t(r))})})}function b(e){return e?p(e.scenes).some(t=>t.plan.kind==="isolation-document"):!1}async function z(e){if(!await _())return!1;const t=await u().catch(()=>null);if((t?d(t).some(r=>r.adapter.surface==="canvas"):!1)&&!c()){const{resolveCanvasPixiForEditor:r}=await i(async()=>{const{resolveCanvasPixiForEditor:f}=await import("./canvas-entry-runtime-SfBxaR9M.js");return{resolveCanvasPixiForEditor:f}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11]));(await r()).Assets.reset()}const{launchIngestRoutes:o}=await i(async()=>{const{launchIngestRoutes:r}=await import("./mount-ingest-root-glv2SSWf.js").then(s=>s.m);return{launchIngestRoutes:r}},__vite__mapDeps([12,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17]));if(await o(e),!c())throw new Error(`Play could not start: this project's ingest root failed to mount — see the mount failure reported above (and in ${l("status")}).`);return w(),e.setActiveViewportTab("play"),y()?.play(),!0}function B(e){return v()?(P(),I(),e.setPlayState("stopped"),e.setActiveViewportTab("edit"),g(),!0):!1}export{v as deferredIngestPlayActive,B as exitDeferredIngestPlay,_ as ingestMountIsDeferredToPlay,z as mountDeferredIngestForPlay};
@@ -0,0 +1 @@
1
+ import{bq as te,br as oe,bs as re,bt as ne,aF as se,bu as F,bv as ie,V as E,bw as de,bx as le,by as ae,bz as ue,bA as fe}from"./index-GIL7oGEO.js";import{B as S,q as W}from"./edit-mode-authoring-B47TfLqu.js";import{s as pe,d as I,a as ce}from"./design-time-mount-registry-DUpXCg1U.js";import{s as we,a as he,g as ye,r as ge}from"./react-story-board-BDDwiE2H.js";const _=new Map;function q(n,r){return`${n}\0${r}`}function Pe(n,r){return _.get(q(n,r))}function Ee(n,r,o){_.set(q(n,r),o)}const me=1;function L(n){const r=[];for(const{worldId:o,adapter:d}of n.childAdapters()){if(!(d instanceof S))continue;const a=d.inspector.get(o,"kind");if(a!=="dom"&&a!=="canvas"||d.inspector.get(o,"reason")!==void 0)continue;const b=d.inspector.get(o,"adapter");b?.startsWith("ingest")||b?.startsWith("module")||r.push({worldId:o,kind:a,path:d.inspector.get(o,"path"),zOrder:Number(d.inspector.get(o,"zOrder")??0),pausable:d.inspector.get(o,"pausable")!==!1})}return r}function Me(n){return L(n)}const Ie="ui-components-board";function $(n,r){return n.childAdapters().some(o=>o.worldId===r)}function ze(){return{worldId:Ie,kind:"dom",path:void 0,zOrder:0,pausable:!0}}function N(n,r,o="dom"){const d=le(r)?"none":"block";n.style.display=d,n.style.pointerEvents=I(o)?.alwaysInteractive||ae(r)?"auto":"none";for(const a of Array.from(n.parentElement?.children??[]))a instanceof HTMLElement&&a.dataset.vgaiStoryBoardChromeFor===r&&(a.style.display=d)}function be(n,r,o,d){const{worldId:a}=r,s=document.createElement("div");return s.dataset.worldId=a,s.dataset.vgaiRootSurface="true",d&&(s.dataset.vgaiCanvasScene="true"),s.style.position="absolute",s.style.top="0",s.style.left="0",s.style.width="100%",s.style.height="100%",s.style.zIndex=String(o),s.style.contain="layout paint",N(s,a,r.kind),B(s),n.appendChild(s),s}function B(n){if(n.dataset.vgaiCanvasScene==="true"){n.style.transform="",n.style.width="100%",n.style.height="100%";return}if(n.style.transform=ue(fe())??"",n.style.transformOrigin="0 0",n.dataset.vgaiReactStoryBoard==="true")return;const r=ye();n.style.width=r.width===null?"100%":`${r.width}px`,n.style.height=r.height===null?"100%":`${r.height}px`}function Te(n,r,o,d,a,s,b){s?s.canvasSceneView.reset():te(),ge();const k=se();if(!s&&k?.config.resolution&&we(k.config.resolution.width,k.config.resolution.height),o.playState!=="stopped"){let e=!1,t=!1;const i=o.subscribe(()=>{e||t||o.playState!=="stopped"||(t=!0,e||W())});return()=>{e=!0,i()}}const j=k?.rootPath,M=d?[...d]:L(r);if(M.length===0||!j)return()=>{};const H=j,y=oe(M.map(e=>({id:e.worldId,zOrder:e.zOrder}))).map(e=>M.find(t=>t.worldId===e.id)),D=new Map(y.map(e=>[e.worldId,e])),u=new Map,g=new Map,C=new Map,R=new Set,O=new Set,z=new Set;let h=!1,p=!1,V=!1;function x(){for(const e of g.values())try{e()}catch(t){E.error(`[design-time-layers] dispose failed: ${t}`,"authoring")}g.clear();for(const e of u.values())e.remove();u.clear();for(const e of y)a?.(e.worldId,null)}function J(){x();for(const e of R){const t=D.get(e);if(!t)continue;const i={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};r.replaceChild(e,new S(o,i,"Design-time layer suspended by play mode — Stop restores it."))}R.clear(),o.notifyIngestEdit()}function P(e,t,i){const l=I(e.kind);if(!l){O.add(e.worldId);return}O.delete(e.worldId);const f=(C.get(e.worldId)??0)+1;C.set(e.worldId,f);const c=be(n,e,me+t,!!s);u.set(e.worldId,c);const T={projectRootPath:H,store:o,...s?{view:s.canvasSceneView}:{},...b?{activationDocumentId:b}:{}};(async()=>l.mount(e,c,T))().then(w=>{if(h||p||C.get(e.worldId)!==f){w.dispose();return}if(w.adapter)$(r,e.worldId)&&(r.replaceChild(e.worldId,w.adapter),R.add(e.worldId)),a?.(e.worldId,w.adapter);else if(w.pick){const v={id:e.worldId,kind:e.kind,entryOrScenePath:e.path,zOrder:e.zOrder,pausable:e.pausable};r.replaceChild(e.worldId,new S(o,v,void 0,w.pick)),R.add(e.worldId)}g.set(e.worldId,w.dispose),F(e.worldId),o.notifyIngestEdit(),i?.()}).catch(w=>{if(C.get(e.worldId)!==f||(i?.(),c.remove(),u.get(e.worldId)===c&&u.delete(e.worldId),h||p))return;const v=ie(w);E.error(`[design-time-layers] world "${e.worldId}" (${e.kind}) failed to mount: ${v}`,"authoring");const ee={id:e.worldId,kind:e.kind,entryOrScenePath:e.path,zOrder:e.zOrder,pausable:e.pausable};a?.(e.worldId,null),$(r,e.worldId)&&r.replaceChild(e.worldId,new S(o,ee,v)),de({worldId:e.worldId,kind:e.kind,identity:l.identity,message:v}),o.notifyIngestEdit()})}y.forEach((e,t)=>{P(e,t)});function K(e,t){const i=g.get(e.worldId);g.delete(e.worldId);const l=u.get(e.worldId);u.delete(e.worldId),P(e,t,()=>{const c=u.get(e.worldId);if(c&&(c.style.visibility=""),i)try{i()}catch(T){E.error(`[design-time-layers] re-projection dispose failed: ${T}`,"authoring")}l?.remove()});const f=u.get(e.worldId);f&&f!==l&&(f.style.visibility="hidden")}function X(e,t){const i=g.get(e.worldId);if(g.delete(e.worldId),i)try{i()}catch(f){E.error(`[design-time-layers] remount dispose failed: ${f}`,"authoring")}const l=u.get(e.worldId);l&&(l.remove(),u.delete(e.worldId)),P(e,t)}const m=new Map;function A(){for(const[e,t]of m)I(e.kind)!==e&&(t(),m.delete(e));for(const e of ce()){if(m.has(e)||I(e.kind)!==e||!y.some(l=>l.kind===e.kind))continue;const t=[],i=l=>()=>{h||p||o.playState!=="stopped"||y.forEach((f,c)=>{f.kind===e.kind&&l(f,c)})};e.remountWhen&&t.push(e.remountWhen(i(X))),e.reprojectWhen&&t.push(e.reprojectWhen(i(K))),m.set(e,()=>{for(const l of t)l()})}}A();const Y=pe(()=>{h||p||o.playState!=="stopped"||(y.forEach((e,t)=>{O.has(e.worldId)&&I(e.kind)&&(z.delete(e.worldId),F(e.worldId),P(e,t))}),A())}),Z=re(()=>{if(h||p)return;let e=!1;for(const t of y){if(!O.has(t.worldId)||z.has(t.worldId)||I(t.kind)||(z.add(t.worldId),!$(r,t.worldId)))continue;const i={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};r.replaceChild(t.worldId,new S(o,i,`No package in this editor registered a design-time mount for a "${t.kind}" world, so there is nothing here to author it with. A build ships the packages its own entry in \`builds/\` lists.`)),e=!0}e&&o.notifyIngestEdit()}),G=ne(()=>{for(const e of u.values())B(e)}),Q=he(()=>{for(const e of u.values())B(e)}),U=o.subscribe(()=>{if(!p&&o.playState!=="stopped"){p=!0,J();return}if(p&&!V&&o.playState==="stopped"&&!h){V=!0,h||W();return}if(!p)for(const[e,t]of u)N(t,e,D.get(e)?.kind??"dom")});return()=>{h=!0;for(const e of m.values())e();m.clear(),Y(),Z(),U(),G(),Q(),x()}}export{Ee as a,Me as d,Te as m,ze as p,Pe as r};
@@ -0,0 +1 @@
1
+ const t=[],i=new Set;function r(){for(const n of i)n()}function u(n){const s=t.findIndex(e=>e.owner===n.owner&&e.kind===n.kind);return s>=0&&t.splice(s,1),t.push(n),r(),()=>{const e=t.indexOf(n);e<0||(t.splice(e,1),r())}}const o=[];function c(){return t.length===0?o:t}function f(n){for(let s=t.length-1;s>=0;s--){const e=t[s];if(e&&e.kind===n)return e}return null}function d(n){return i.add(n),()=>{i.delete(n)}}export{c as a,f as d,u as r,d as s};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/design-time-react-mount-DM9WLrF2.js","assets/design-time-layers-wYgOTgni.js","assets/index-GIL7oGEO.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/three.module-D396a9Mn.js","assets/index-D2fNXpHa.css","assets/edit-mode-authoring-B47TfLqu.js","assets/design-time-mount-registry-DUpXCg1U.js","assets/react-story-board-BDDwiE2H.js","assets/crash-null-boundary-v3a0uEgw.js","assets/realm-services-CobQsq_X.js","assets/canvas-entry-runtime-SfBxaR9M.js","assets/world-state-BWG-IcOd.js","assets/debug-registry-Dgvitx8M.js","assets/frame-selector-cache-cCeUbcjG.js","assets/three-ingest-runtime-QzDYk6tU.js","assets/EffectComposer-DQxfsXBZ.js","assets/CopyShader-BzTUYzf6.js","assets/ShaderPass-QYRpPuFJ.js","assets/CSS3DRenderer-CL7ABLVK.js","assets/react-root-CEz5NTck.js","assets/StoryPreviewMount-DjyxRCXu.js","assets/story-presentation-j2AVN-mK.js","assets/inspect-BZfi3mmo.js","assets/inference-diagnostics-Dhmtfbq_.js","assets/assets-BuSoGjBX.js","assets/loader-CaF_I7Yt.js","assets/game-loop-CZvXlY00.js","assets/frame-pacing-D5acoOzO.js","assets/game-DHOZVb-7.js","assets/loop-gate-report-N52EWFGD.js","assets/system-slot-E2mEdiih.js","assets/user-data-BB2Of6Ht.js","assets/object-marks-DwvIEBOK.js","assets/seeded-random-i3mtgBKZ.js","assets/render-seed-DF4JHy7P.js","assets/sim-clock-CLflx7kg.js","assets/system-runner-DkOjxEBt.js","assets/performance-profiler-D_Jey87L.js","assets/input-manager-DH_hGW6d.js","assets/asset-parse-error-BHMwBRU3.js","assets/binding-identity-DcTpbvyg.js","assets/prompt-labels-DSMdM2_B.js","assets/schema-kl9-2B_J.js","assets/gameplay-rng-trap-CTNhm-UW.js","assets/state-bridge-DLP1jLRW.js","assets/react-world-authoring-adapter-DmrwM3py.js","assets/board-guides-DziKSTss.js","assets/writer-B-KovzkA.js","assets/story-arg-descriptors-Ek86ExX7.js"])))=>i.map(i=>d[i]);
2
+ import{_ as i}from"./index-GIL7oGEO.js";import{r as m}from"./design-time-mount-registry-DUpXCg1U.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";const y="workspace.service";function D(){return m({kind:"dom",owner:"@volter/editor-game/react/design-time-mount",identity:"default-react",mount:async(e,r,t)=>{const{mountReactDesignLayer:o}=await i(async()=>{const{mountReactDesignLayer:n}=await import("./design-time-react-mount-DM9WLrF2.js");return{mountReactDesignLayer:n}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56]));return o(e,r,t)},reprojectWhen:e=>{let r=!1,t=null;return i(()=>import("./design-time-react-mount-DM9WLrF2.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56])).then(o=>{r||(t=o.reprojectWhenStoriesRepublish(e))}),()=>{r=!0,t?.(),t=null}}})}export{y as point,D as start};
@@ -0,0 +1 @@
1
+ import{r as st,a as lt}from"./design-time-layers-wYgOTgni.js";import{eB as mt,bG as ut,dk as dt,fi as ct,fj as pt,V as x,fk as ft,fl as Y,bv as U,fm as z,av as ht,eI as H,aw as j,db as gt,cS as bt,fn as J}from"./index-GIL7oGEO.js";import{d as wt,s as yt,g as St}from"./react-story-board-BDDwiE2H.js";import{C as vt}from"./crash-null-boundary-v3a0uEgw.js";import{r as It,b as Pt,a as Rt}from"./realm-services-CobQsq_X.js";import{r as Mt}from"./react-root-CEz5NTck.js";import{m as Ct}from"./StoryPreviewMount-DjyxRCXu.js";import{c as xt,s as Et}from"./story-presentation-j2AVN-mK.js";import{c as Nt}from"./inspect-BZfi3mmo.js";import{createAssetCache as kt}from"./assets-BuSoGjBX.js";import{createGameLoop as Ft}from"./game-loop-CZvXlY00.js";import{createGame as Tt}from"./game-DHOZVb-7.js";import{R as X}from"./react-world-authoring-adapter-DmrwM3py.js";import"./edit-mode-authoring-B47TfLqu.js";import"./design-time-mount-registry-DUpXCg1U.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./canvas-entry-runtime-SfBxaR9M.js";import"./world-state-BWG-IcOd.js";import"./debug-registry-Dgvitx8M.js";import"./frame-selector-cache-cCeUbcjG.js";import"./three-ingest-runtime-QzDYk6tU.js";import"./EffectComposer-DQxfsXBZ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-QYRpPuFJ.js";import"./CSS3DRenderer-CL7ABLVK.js";import"./inference-diagnostics-Dhmtfbq_.js";import"./loader-CaF_I7Yt.js";import"./frame-pacing-D5acoOzO.js";import"./loop-gate-report-N52EWFGD.js";import"./system-slot-E2mEdiih.js";import"./user-data-BB2Of6Ht.js";import"./object-marks-DwvIEBOK.js";import"./seeded-random-i3mtgBKZ.js";import"./render-seed-DF4JHy7P.js";import"./sim-clock-CLflx7kg.js";import"./system-runner-DkOjxEBt.js";import"./performance-profiler-D_Jey87L.js";import"./input-manager-DH_hGW6d.js";import"./asset-parse-error-BHMwBRU3.js";import"./binding-identity-DcTpbvyg.js";import"./prompt-labels-DSMdM2_B.js";import"./schema-kl9-2B_J.js";import"./gameplay-rng-trap-CTNhm-UW.js";import"./state-bridge-DLP1jLRW.js";import"./board-guides-DziKSTss.js";import"./writer-B-KovzkA.js";import"./story-arg-descriptors-Ek86ExX7.js";function At(e){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="svg"||o==="SVG"||o==="PICTURE")return!0;const r=getComputedStyle(e);if(r.visibility==="hidden"||r.display==="none")return!1;if($t(r.backgroundColor)||r.backgroundImage&&r.backgroundImage!=="none"||r.boxShadow&&r.boxShadow!=="none"||r.borderStyle!=="none"&&r.borderStyle!==""&&(parseFloat(r.borderTopWidth)>0||parseFloat(r.borderRightWidth)>0||parseFloat(r.borderBottomWidth)>0||parseFloat(r.borderLeftWidth)>0))return!0;for(const n of e.childNodes)if(n.nodeType===Node.TEXT_NODE&&(n.textContent??"").trim()!=="")return!0;return!1}function $t(e){if(!e||e==="transparent")return!1;const o=/^rgba\(\s*[\d.]+\s*,\s*[\d.]+\s*,\s*[\d.]+\s*,\s*([\d.]+)\s*\)$/.exec(e);return o?parseFloat(o[1])>0:!0}function jt(e,o=r=>r.getBoundingClientRect()){const r=o(e),n=e.offsetWidth;if(r.width<=0||n<=0)return null;const s=r.width/n;let u=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,y=Number.NEGATIVE_INFINITY;for(const p of e.querySelectorAll("*")){if(!At(p))continue;const d=o(p);d.width<=0||d.height<=0||(u=Math.min(u,(d.left-r.left)/s),c=Math.min(c,(d.top-r.top)/s),i=Math.max(i,(d.right-r.left)/s),y=Math.max(y,(d.bottom-r.top)/s))}return i<=u||y<=c?null:{x:u,y:c,width:i-u,height:y-c}}let E=!1;function Bt(e,o){if(!e)return;J({adapter:e,seam:"editor.stories.apply",stage:"effect",detail:`the design board applied portable story ${o}`,run:()=>e.stories.apply(o,o)});const r=e.selection;r&&J({adapter:e,seam:"editor.selection.set",stage:"effect",detail:`the design board selected portable story ${o}`,run:()=>r.set([o])})}let K=!1;async function Vt(){if(K)return;K=!0;const e=St();if(!(e.width!==null||e.height!==null))try{const o=await bt("vgai.project.json");if(!o)return;const r=JSON.parse(o),n=r.resolution?.width,s=r.resolution?.height;if(typeof n!="number"||typeof s!="number"||n<64||s<64||n>4096||s>4096)return;yt(n,s)}catch{}}function Wt(){const e=Ft({fixedTimestep:.016666666666666666,maxSubSteps:8,update:()=>{}});return Tt({loop:e,assets:kt()})}function Gt(e,o){return{id:e,surface:"dom",description:void 0,adapter:{type:"builtin",identity:"dom",surface:"dom"},entry:o,zOrder:0,pausable:!0,loop:"gated"}}async function Dt(e,o){try{const r=await Rt(o,gt());return{ok:!0,Entry:await Mt(e,r)}}catch(r){return{ok:!1,error:r}}}async function _e(e,o,r){const{projectRootPath:n,store:s,activationDocumentId:u}=r;E?E=!1:await mt({rootPath:n});const c=ut(),i=dt(c),y=e.path,p=y?await Dt(Gt(e.worldId,y),n):{ok:!1,error:new Error(`design-time react layer "${e.worldId}": no \`entry\` declared — nothing to mount.`)},d=p.ok?ct(p.Entry):void 0,Z=d?pt(d,e.path):null,B=i.find(g=>g.id===Z?.id)??null;if(i.length>0&&!e.entryOnly){const g=st(n,e.worldId),I=i.find(t=>t.id===g)??B??i[0];e.path&&!B&&x.warn(`[design-time-layers] React root "${e.worldId}" has no story naming its entry component${d?` "${d}"`:""} — the board opens on "${I.label}". Give a *.stories.tsx a \`meta.component\` of this root's entry component to choose its default preview.`,"authoring");let F=!1,M=null,T=null;const A=new Map,D=xt(i);await Vt();const l=wt(o,i.map(t=>({id:t.id,label:t.label,modulePath:t.modulePath,...t.title?{title:t.title}:{},parameters:t.parameters,...t.globals?{globals:t.globals}:{},...t.viewportLocked!==void 0?{viewportLocked:t.viewportLocked}:{}})),I.id,(t,m)=>{T=m,Bt(M,t)},Et(i,D)),O=t=>{if(F)return;const m=l.frames.get(t.id);if(!m)return;if(t.parameters?.layout==="fullscreen"){l.setMeasuredFrame(t.id,null);return}const a={width:m.content.offsetWidth,height:m.content.offsetHeight},h=a.width>0?jt(m.content):null;if(!h){l.setMeasuredFrame(t.id,null);return}const C=8,S=48;let b=Math.max(0,h.x-C),w=Math.max(0,h.y-C),P=Math.min(a.width,h.x+h.width+C),R=Math.min(a.height,h.y+h.height+C);if(P-b<S){const $=(S-(P-b))/2;b=Math.max(0,b-$),P=Math.min(a.width,b+S)}if(R-w<S){const $=(S-(R-w))/2;w=Math.max(0,w-$),R=Math.min(a.height,w+S)}if(P-b>=a.width*.9&&R-w>=a.height*.9){l.setMeasuredFrame(t.id,null);return}l.setMeasuredFrame(t.id,{frame:{width:Math.round(P-b),height:Math.round(R-w)},mount:a,offset:{x:Math.round(b),y:Math.round(w)}})},it=t=>{setTimeout(()=>O(t),0),setTimeout(()=>O(t),1e3)},_=async(t,m=t.args)=>{const f=l.frames.get(t.id)?.content;if(f){try{const a=await Ct(f,t.modulePath,t.name,t.Component,m);if(!a)return;if(F){a.unmount();return}A.set(t.id,a),l.clearError(t.id),it(t)}catch(a){const h=U(a);l.setError(t.id,h),x.error(`[design-time-layers] React root "${e.worldId}" failed mounting portable story "${t.name}": ${h}`,"authoring")}s.notifyIngestEdit()}};await Promise.all(i.map(t=>_(t))),l.setNote(ft().note),g&&l.activate(I.id,!0);const L=new Map(i.map(t=>[t.id,t])),at={tagName:"DIV",get children(){return l.activeContent().children},getAttribute:t=>o.getAttribute(t),getBoundingClientRect:()=>o.getBoundingClientRect(),get style(){return o.style},get textContent(){return l.activeContent().textContent}},q=await Y();return M=new X(at,s,{...q?{writeBackend:q}:{},designTokens:()=>{const t=l.activeContent(),m=t.closest?.("[data-vgai-game-styles]")??t.querySelector?.("[data-vgai-game-styles]")??t;return Nt(getComputedStyle(m))},assetRoot:o,portableStories:i.map(t=>({id:t.id,label:t.label,args:t.args,name:t.name,modulePath:t.modulePath})),portableHierarchy:D,activePortableStoryId:I.id,onPortableStoryApplied:t=>{const m=(t?L.get(t):null)??I;lt(n,e.worldId,m.id);const f=T;T=null,l.activate(m.id,f===null||f==="zoom")},onPortableStoryArgsChanged:(t,m)=>{const f=L.get(t);f&&_(f,m).catch(a=>{x.error(`[design-time-layers] React root "${e.worldId}" failed updating portable story "${f.name}" args: ${U(a)}`,"authoring")})}}),u&&requestAnimationFrame(()=>z(u)),{adapter:M,dispose:()=>{F=!0,M.disposeReactRootAdapter();for(const t of A.values())t.unmount();A.clear(),l.dispose()}}}if(!p.ok)throw p.error instanceof Error?p.error:new Error(String(p.error));e.entryOnly||x.warn(`[design-time-layers] React root "${e.worldId}" has no portable CSF preview — the project declares no UI stories. Add a *.stories.tsx; give it a \`meta.component\` of this root's entry component${d?` (${d}, ${e.path})`:""} to make it this root’s default preview. Falling back to the inert-Game preview.`,"authoring");const tt=p.Entry,et=await It(),{createElement:N,createRoot:ot,flushSync:rt}=await Pt(),V=Wt(),k=ot(o),nt=g=>{k.render(N(vt,{key:"__entry__",onCaught:g,children:N(et,{game:V},N(tt))}))};let v=null;if(rt(()=>{nt(g=>{v=g})}),v!==null)throw k.unmount(),v instanceof Error?v:new Error(String(v));const W=await Y(),G=new X(o,s,{...W?{writeBackend:W}:{}});return u&&requestAnimationFrame(()=>z(u)),{adapter:G,dispose:()=>{G.disposeReactRootAdapter(),k.unmount(),V.dispose()}}}function Q(){return j().map(e=>e.ok?e.stories.map(o=>o.id).join(","):`!${e.modulePath}`).join("|")}function Le(e){let o=H()?j():null,r=o===null?null:Q(),n=null;const s=ht(()=>{if(!H())return;const u=j(),c=Q();if(o===null){o=u,r=c;return}const i=c!==r;o=u,r=c,i&&(n!==null&&clearTimeout(n),n=setTimeout(()=>{n=null,E=!0,e(),setTimeout(()=>{E=!1},0)},250))});return()=>{n!==null&&clearTimeout(n),n=null,s()}}export{_e as mountReactDesignLayer,Le as reprojectWhenStoriesRepublish};
@@ -0,0 +1 @@
1
+ const t={};function e(n){return n!==void 0?n:t?.VITE_VGAI_DEV_BUILD==="true"}export{e as devBuildEnabled};
@@ -0,0 +1 @@
1
+ import{V as l,Q as v}from"./three.module-D396a9Mn.js";const Q=new v,h=new l,c=new l,j=new l,w=[[-1,-1],[-1,1],[1,-1],[1,1]];function N(t,a){return j.set(0,0,-a).applyMatrix4(t.projectionMatrix).z}function b(t,a,u,r){const s=t,x=typeof s.near=="number"?s.near:0,_=typeof s.far=="number"?s.far:u;let i=Math.min(u,_);i=Math.max(i,x+.001);const m=Math.min(x,i),y=N(t,m),M=N(t,i);c.set(0,0,0);for(const f of[y,M])for(const[p,d]of w)c.add(h.set(p,d,f).applyMatrix4(t.projectionMatrixInverse));c.multiplyScalar(1/8);let e=0;for(const f of[y,M])for(const[p,d]of w)e=Math.max(e,h.set(p,d,f).applyMatrix4(t.projectionMatrixInverse).distanceTo(c));r>2&&(e*=r/(r-2));const n=c.clone().applyMatrix4(t.matrixWorld),o=r>0?2*e/r:0;return o>0&&(n.applyQuaternion(Q.copy(a).invert()),n.x=Math.round(n.x/o)*o,n.y=Math.round(n.y/o)*o,n.applyQuaternion(a)),{center:n,radius:e,texelWorldSize:o}}export{b as fitDirectionalShadowToCamera};
@@ -0,0 +1 @@
1
+ import{dd as g,aH as u,de as x}from"./index-GIL7oGEO.js";import{W as w,j as C,v as y,x as d,V as m,s as M,r as v}from"./three.module-D396a9Mn.js";import{f as S}from"./scene-framing-Cat0GtyJ.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function W(n){const a=[];return n.traverse(t=>{!u(t)&&t.isCamera&&a.push(t)}),a}function R(n,a){const t=[];n.traverse(r=>{r.parent&&u(r)&&t.push({object:r,parent:r.parent})});for(const{object:r}of t)r.removeFromParent();let e;try{e=x(n)}finally{for(const{object:r,parent:h}of t)h.add(r)}const o=e.filter(r=>!r.overlay&&!r.enclosure),c=S(o.map(r=>r.box)),i=new d(42,a,.01,1e5),f=c.isEmpty()?new m:c.getCenter(new m),s=c.isEmpty()?1:Math.max(.01,c.getBoundingSphere(new M).radius),p=s/Math.sin(v.degToRad(i.fov/2));return i.position.copy(f).addScaledVector(new m(1,.75,1).normalize(),p*1.15),i.lookAt(f),i.near=Math.max(.001,p-s*2.5),i.far=p+s*3,i.updateProjectionMatrix(),i.updateMatrixWorld(!0),i}function P(n,a){if(a.camera){const e=new d(a.camera.fov??42,a.width/a.height,.01,1e5);return e.position.set(a.camera.position.x,a.camera.position.y,a.camera.position.z),e.lookAt(a.camera.target.x,a.camera.target.y,a.camera.target.z),e.updateMatrixWorld(!0),e}const t=W(n);if(t.length===1){const e=t[0].clone();return e.matrixWorld.copy(t[0].matrixWorld),e.matrixWorld.decompose(e.position,e.quaternion,e.scale),e instanceof d&&(e.aspect=a.width/a.height,e.updateProjectionMatrix()),e}return R(n,a.width/a.height)}function G(n,a,t,e){a.updateMatrixWorld(!0);const l=P(n,t),o=g(new w({antialias:!0,alpha:!0,preserveDrawingBuffer:!0}));let c;try{return c=e?.(o),o.setPixelRatio(1),o.setSize(t.width,t.height,!1),o.outputColorSpace=C,o.toneMapping=y,o.setClearColor(2106411,a.background===null?0:1),o.render(a,l),o.domElement.toDataURL("image/png")}finally{c?.(),o.dispose(),o.forceContextLoss()}}export{G as captureAuthoredThreeScenePreview};
@@ -0,0 +1 @@
1
+ import{aA as y,aB as v}from"./index-GIL7oGEO.js";import{J as R,c as x}from"./json-history-resource-BbxllWfV.js";import{D as C,s as w,a as b,c as k,m as T}from"./react-world-authoring-adapter-DmrwM3py.js";import{g as h,b as u}from"./inspect-BZfi3mmo.js";function H(a){const e=(typeof a=="string"?a:a?.baseVal)?.trim()??"";if(e)return e.split(/\s+/)[0]}function S(a,t){if(a.id)return`${t}#${a.id}`;const e=H(a.className??"");return e?`${t}.${e}`:t}function j(a){const t=new Map;for(const[e,s]of a.nodes)t.set(e,{id:e,tag:s.object.tagName.toLowerCase(),el:s.object,parentId:s.parentId,childIds:[...s.childIds]});return{nodes:t,rootIds:[...a.rootIds]}}const g=[{prop:"color",label:"Color",type:"color"},{prop:"backgroundColor",label:"Background",type:"color"},{prop:"borderColor",label:"Border Color",type:"color"},{prop:"fontSize",label:"Font Size",type:"number"},{prop:"width",label:"Width",type:"number"},{prop:"height",label:"Height",type:"number"},{prop:"padding",label:"Padding",type:"number"},{prop:"margin",label:"Margin",type:"number"},{prop:"borderRadius",label:"Border Radius",type:"number"},{prop:"gap",label:"Gap",type:"number"},{prop:"display",label:"Display",type:"enum",options:["flex","block","none","grid"]},{prop:"textAlign",label:"Text Align",type:"enum",options:["left","center","right"]},{prop:"flexDirection",label:"Flex Direction",type:"enum",options:["row","column"]}],f="style.",M=new Map(g.map(({prop:a,type:t})=>[a,t]));class A{constructor(t,e,s){this.root=t,this.store=e;const o=e.projectHistory;this.historyResource=o?new R({history:o,kind:"session-state",scope:"session",subject:{...s.journal,id:`${s.journal.id}/react-dom-edits`},displayName:"React DOM edits",capture:()=>this.captureHistoryState(),restore:async i=>{this.restoreHistoryState(i)}}):null}capabilities={transform:!1,inspectorFields:!0,persist:!1};provenance={source:"foreign",label:"live-only",detail:"Unmodified ingested React game — style edits apply for this session only and are never saved."};doc={};historyResource;projector=new C(w());snapCache=null;snapInvalidationScheduled=!1;boxEditSession=null;lockedIds=new Set;snapshot(){if(this.snapCache)return this.snapCache;this.projector.project(this.root);const t=j(this.projector);return this.snapCache=t,this.snapInvalidationScheduled||(this.snapInvalidationScheduled=!0,queueMicrotask(()=>{this.snapCache=null,this.snapInvalidationScheduled=!1})),t}nodeCount(){return this.snapshot().nodes.size}toEditorNode(t){return{id:t.id,label:S(t.el,t.tag),role:"element",kind:t.tag,parentId:t.parentId,childIds:t.childIds}}applyStyleToElement(t,e,s){t.style&&(t.style[e]=s)}recordStyleEdit(t,e,s){const o=this.doc[t]??{};o[e]=s,this.doc[t]=o}hierarchy={roots:()=>{const{nodes:t,rootIds:e}=this.snapshot();return e.map(s=>this.toEditorNode(t.get(s)))},node:t=>{const e=this.snapshot().nodes.get(t);return e?this.toEditorNode(e):null}};selection={get:()=>[...this.store.selectedEntityIds],set:t=>this.store.selectMultiple(t)};pickable={pick:(t,e)=>{const{nodes:s}=this.snapshot();let o=null,i=Number.POSITIVE_INFINITY,r=-1,l=-1;for(const c of s.values()){if(l++,this.lockedIds.has(c.id)||c.el.style?.pointerEvents==="none")continue;const n=c.el.getBoundingClientRect?.();if(!n||t<n.left||t>n.right||e<n.top||e>n.bottom)continue;const p=n.width*n.height;(p<i||p===i&&l>r)&&(o=c.id,i=p,r=l)}return o}};hostRect(){const t=this.root.getBoundingClientRect?.();return{left:t?.left??0,top:t?.top??0}}toHostRelative(t){const e=this.hostRect();return{x:t.left-e.left,y:t.top-e.top,width:t.width,height:t.height}}rects={rect:t=>{const s=this.snapshot().nodes.get(t)?.el.getBoundingClientRect?.();return s?this.toHostRelative(s):null},contextRects:t=>{const{nodes:e}=this.snapshot(),s=e.get(t);if(!s)return{};const o=s.parentId?e.get(s.parentId):void 0,i=o?.el.getBoundingClientRect?.(),l=(o?o.childIds:this.snapshot().rootIds).filter(d=>d!==t).map(d=>e.get(d)?.el.getBoundingClientRect?.()).filter(d=>d!=null).map(d=>this.toHostRelative(d)),c=s.el,n=c.getBoundingClientRect?.();let p;if(n){const d=y(h(c,"borderTopWidth",u))??0,I=y(h(c,"borderRightWidth",u))??0,E=y(h(c,"borderBottomWidth",u))??0,m=y(h(c,"borderLeftWidth",u))??0;p=this.toHostRelative({left:n.left+m,top:n.top+d,width:Math.max(0,n.width-m-I),height:Math.max(0,n.height-d-E)})}return{...i?{parent:this.toHostRelative(i)}:{},...l.length?{siblings:l}:{},...p?{paddingBox:p}:{}}}};colorSample={backgroundChainAt:(t,e)=>{const s=this.pickable.pick(t,e);if(!s)return null;const{nodes:o}=this.snapshot(),i=[];let r=o.get(s);for(;r;)i.push(h(r.el,"backgroundColor",u)),r=r.parentId?o.get(r.parentId):void 0;return i}};boxEdit={begin:t=>{this.historyResource?.assertCanMutate(),this.boxEditSession={id:t,touched:new Map,priorInline:new Map}},apply:(t,e)=>{this.historyResource?.assertCanMutate();const s=this.boxEditSession;if(!s||s.id!==t)return;const o=this.snapshot().nodes.get(t);if(!o)return;const i=h(o.el,"position",u),r=i==="absolute"||i==="fixed";for(const[l,c]of Object.entries(e)){const n=T(l,r);if(!n){console.warn(`[DomAuthoringAdapter] boxEdit: dropping patch key "${l}" for "${t}" — `+(l==="x"||l==="y"?`node is not absolutely/fixed positioned (computed position: "${i}"), no left/top to move`:"unrecognized box-edit patch key"));continue}if(!s.priorInline.has(n.prop)){const d=b(o.el.style,n.prop);s.priorInline.set(n.prop,d==null?"":String(d))}const p=n.cssValue(c);this.applyStyleToElement(o.el,n.prop,p),s.touched.set(n.prop,p)}},end:t=>{const e=this.boxEditSession;this.boxEditSession=null,!(!e||e.id!==t||e.touched.size===0)&&this.commitBoxEdit(t,e.touched,e.priorInline)}};commitBoxEdit(t,e,s){this.historyResource?.assertCanMutate();const o=this.captureHistoryState(),i=o.styles[t]??{};o.styles[t]=i;for(const[l,c]of s)i[l]=c;let r=!1;for(const[l,c]of e)r=this.writeStyleEntry(t,l,c)||r;r&&this.historyResource&&this.historyResource.record(`Edit ${e.size} Styles`,o,this.captureHistoryState()).catch(()=>{})}inspector={properties:()=>g.map(({prop:t,label:e,type:s,options:o})=>({path:`${f}${t}`,label:e,type:s,...o?{options:o}:{}})),get:(t,e)=>{if(e==="locked")return this.lockedIds.has(t);if(e==="visible"){const l=this.snapshot().nodes.get(t);return l?b(l.el.style,"visibility")!=="hidden":void 0}if(!e.startsWith(f))return;const s=e.slice(f.length),o=this.snapshot().nodes.get(t);if(!o)return;const i=b(o.el.style,s),r=M.get(s);return r==="number"?y(i):r==="color"?k(i):i},set:(t,e,s)=>{if(e==="locked"){s?this.lockedIds.add(t):this.lockedIds.delete(t),this.store.notifyIngestEdit();return}if(e==="visible"){this.writeStyle(t,"visibility",s?"visible":"hidden");return}if(!e.startsWith(f))return;const o=e.slice(f.length);this.writeStyle(t,o,String(s))}};assetSubject={get:t=>this.assetSubjectForNode(this.snapshot(),t),entries:()=>{const t=this.snapshot();return[...t.nodes.keys()].flatMap(e=>{const s=this.assetSubjectForNode(t,e);return s?[{id:e,subject:s}]:[]})}};assetSubjectForNode(t,e){const s=t.nodes.get(e);return!s||s.tag!=="svg"||!s.el.outerHTML?null:{kind:"image",name:S(s.el,s.tag),mediaType:"image/svg+xml",text:s.el.outerHTML}}writeStyleEntry(t,e,s){const o=this.snapshot().nodes.get(t);return o?(this.applyStyleToElement(o.el,e,s),this.recordStyleEdit(t,e,s),this.store.notifyIngestEdit(),!0):!1}writeStyle(t,e,s){this.historyResource?.assertCanMutate();const o=this.captureHistoryState();this.writeStyleEntry(t,e,s)&&this.historyResource&&this.historyResource.record(`Set ${e}`,o,this.captureHistoryState()).catch(()=>{})}dispose(){this.historyResource?.dispose()}captureHistoryState(){const t={};for(const[e,s]of this.snapshot().nodes){const o={};for(const{prop:i}of g){const r=b(s.el.style,i);r!==""&&(o[i]=String(r))}t[e]=o}return{edits:structuredClone(this.doc),styles:t}}restoreHistoryState(t){for(const s of Object.keys(this.doc))delete this.doc[s];Object.assign(this.doc,structuredClone(t.edits));const{nodes:e}=this.snapshot();for(const[s,o]of e){const i=t.styles[s]??{};for(const{prop:r}of g)this.applyStyleToElement(o.el,r,i[r]??"")}this.store.notifyIngestEdit()}subscribe(t){return this.store.subscribe(t)}get persistence(){return{...x(),destination:v}}}export{A as D};