@volter/game-editor 0.5.69 → 0.5.71

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 (337) hide show
  1. package/BUNDLED_NOTICES +28 -44
  2. package/LICENSE +9 -10
  3. package/catalog/entries/blender.json +2 -2
  4. package/catalog/entries/music.json +2 -2
  5. package/catalog/project-source/LICENSE +5 -5
  6. package/dist/.vite/manifest.json +2176 -2176
  7. package/dist/assets/{AssetBudgetPanel-BMR3AQhc.js → AssetBudgetPanel-CbSEGrcI.js} +3 -3
  8. package/dist/assets/{AudioViewer-DESxi7pU.js → AudioViewer-DbO2vY3o.js} +1 -1
  9. package/dist/assets/{CanvasBoardDocument-Q_nrYFlB.js → CanvasBoardDocument-BWmMyiAX.js} +1 -1
  10. package/dist/assets/{CanvasSceneViewport-WZMoKy_F.js → CanvasSceneViewport-CrmQdonP.js} +1 -1
  11. package/dist/assets/{ColorInput-C2EK-OnD.js → ColorInput-BOPGcPsk.js} +1 -1
  12. package/dist/assets/{EntityModelDocument-B_4ENTCq.js → EntityModelDocument-DUZaNI2v.js} +1 -1
  13. package/dist/assets/{EnvironmentAssetDocument-BZBp6OFJ.js → EnvironmentAssetDocument-Bqsm2NLI.js} +1 -1
  14. package/dist/assets/{GameplaySessionTimeline-1ivaucpv.js → GameplaySessionTimeline-DmGEiHHD.js} +1 -1
  15. package/dist/assets/{ImageViewer-D16OExYu.js → ImageViewer-BXQ1dXgz.js} +1 -1
  16. package/dist/assets/InspectorObjectPreview-JE22P2KW.js +1 -0
  17. package/dist/assets/{JsonAssetDocument-CvjTlcdr.js → JsonAssetDocument-BPQR7OXc.js} +1 -1
  18. package/dist/assets/{LiveModuleDocument-ne1o9giX.js → LiveModuleDocument-DnlLSCZw.js} +1 -1
  19. package/dist/assets/{LutAssetDocument-Cp0v-O7q.js → LutAssetDocument-CMDB77UF.js} +1 -1
  20. package/dist/assets/{ModelAssetDocument-Ceu7OIN9.js → ModelAssetDocument-C7Su96Mo.js} +1 -1
  21. package/dist/assets/{NonThreeAuthoringBootstrap-DiElZf-e.js → NonThreeAuthoringBootstrap-BqY5ceef.js} +1 -1
  22. package/dist/assets/{Object3DDocumentToolbar-BLNamqii.js → Object3DDocumentToolbar-CDYwPpW6.js} +1 -1
  23. package/dist/assets/Object3DDocumentViewport-mDettU8s.js +2 -0
  24. package/dist/assets/{Object3DPreview-ZVokr044.js → Object3DPreview-B_3FCd_-.js} +1 -1
  25. package/dist/assets/{OnlineAssetDetail-Dnckd7zB.js → OnlineAssetDetail-BMAMYfaN.js} +1 -1
  26. package/dist/assets/{PlayBar-DsMitSgy.js → PlayBar-DvpDIJXg.js} +1 -1
  27. package/dist/assets/{QuarksAssetDocument-B5J8uHFM.js → QuarksAssetDocument-BbG3zMIR.js} +1 -1
  28. package/dist/assets/{ReactCanvasControls-CmfvxJYY.js → ReactCanvasControls-CnIJItuA.js} +1 -1
  29. package/dist/assets/{RootSelectionOverlay-BWsNiSuM.js → RootSelectionOverlay-47LRczuj.js} +1 -1
  30. package/dist/assets/{ShaderAssetDocument-CT7XzsZq.js → ShaderAssetDocument-KDN9ZgDF.js} +1 -1
  31. package/dist/assets/{ShadowEditor-YO5KEfnz.js → ShadowEditor-CBNfgpsF.js} +1 -1
  32. package/dist/assets/{SourceAssetViewer-FSLup2km.js → SourceAssetViewer-LGC-eTLS.js} +1 -1
  33. package/dist/assets/{StageHost-DYfGYwvq.js → StageHost-BOin7YcY.js} +2 -2
  34. package/dist/assets/{StoryPreviewMount-BhvT5QlB.js → StoryPreviewMount-CN-jnvnn.js} +1 -1
  35. package/dist/assets/{ThreeBoardDocument-B-z2nwnH.js → ThreeBoardDocument-DgC6xWZu.js} +2 -2
  36. package/dist/assets/{ThreeIsolationSceneContent-B5pU4Y6k.js → ThreeIsolationSceneContent-ieFf0WbO.js} +1 -1
  37. package/dist/assets/{ToolObject3DPreview-VtraiQ4Q.js → ToolObject3DPreview-B15_D8MJ.js} +1 -1
  38. package/dist/assets/{Toolbar-M62Gob9T.js → Toolbar-CAnrijz7.js} +1 -1
  39. package/dist/assets/{TransientHint-Cc40mHWE.js → TransientHint-BiIz-7Hh.js} +1 -1
  40. package/dist/assets/{VideoViewer-BxcUwXQm.js → VideoViewer-CrP78U5w.js} +1 -1
  41. package/dist/assets/{ViewportShadingMenu-BoMPnTVh.js → ViewportShadingMenu-BfoDB2WO.js} +1 -1
  42. package/dist/assets/active-ingest-CHE8woWv.js +3 -0
  43. package/dist/assets/{animation-clock-BXEwUJtz.js → animation-clock-DWhLTlyc.js} +1 -1
  44. package/dist/assets/{animation-mixers.service-C-Ko4KzM.js → animation-mixers.service-xdiawk5y.js} +1 -1
  45. package/dist/assets/{animation-timeline.utility-Bl15-rYb.js → animation-timeline.utility-Czb7Ax-Z.js} +1 -1
  46. package/dist/assets/{asset-budget-asset.menu-BUa3g0Wy.js → asset-budget-asset.menu-CpHLTATf.js} +1 -1
  47. package/dist/assets/{asset-budget.action-Dl5eVPIo.js → asset-budget.action-C_ZI2rdN.js} +1 -1
  48. package/dist/assets/{asset-budget.document-DJylQ-0h.js → asset-budget.document-hmCS7sH2.js} +1 -1
  49. package/dist/assets/{asset-budget.menu-BJtvNMLj.js → asset-budget.menu-BZyzyVdk.js} +1 -1
  50. package/dist/assets/{asset-editor-persistence-BIbf5u0Q.js → asset-editor-persistence-BIFP2LgP.js} +1 -1
  51. package/dist/assets/{asset-loaders-DoNflsHL.js → asset-loaders-DqbPEavT.js} +1 -1
  52. package/dist/assets/{asset-preview-DxlSdRZn.js → asset-preview-BzDHm81_.js} +1 -1
  53. package/dist/assets/{audio-unlock.service-CTaiyXF9.js → audio-unlock.service-C2a8hsP0.js} +1 -1
  54. package/dist/assets/{audio.utility-CEmNc68t.js → audio.utility-VklURuQw.js} +1 -1
  55. package/dist/assets/autoplay.service-ap_sEfca.js +1 -0
  56. package/dist/assets/{babylon-authoring-adapter-BZvV2bz_.js → babylon-authoring-adapter-DBBX2Hem.js} +1 -1
  57. package/dist/assets/{binding-resolver-DGbk9_XR.js → binding-resolver-aDFCbAcG.js} +2 -2
  58. package/dist/assets/{blender-emscripten-engine-B7lfg-RX.js → blender-emscripten-engine-Cd6az4pU.js} +1 -1
  59. package/dist/assets/{blender-node-editor.document-wXJobGNH.js → blender-node-editor.document-BdX0SCxH.js} +1 -1
  60. package/dist/assets/{blender-properties-tab-7GFf80ev.js → blender-properties-tab-BVdvAiLS.js} +1 -1
  61. package/dist/assets/{blender-runtime-host-CILxrx5T.js → blender-runtime-host-B1bjBV91.js} +2 -2
  62. package/dist/assets/{blender-runtime-skin-Cd5lQYsC.js → blender-runtime-skin-BEbT46i_.js} +1 -1
  63. package/dist/assets/{blender-runtime.document-C0r_R49S.js → blender-runtime.document-BAQTV4az.js} +1 -1
  64. package/dist/assets/{blender-timeline.document-BaISZMBc.js → blender-timeline.document-BTwdMhSn.js} +1 -1
  65. package/dist/assets/{blender-uv-editor.document-CT_fsyyA.js → blender-uv-editor.document-CqxvqlSw.js} +1 -1
  66. package/dist/assets/{blender-version.status-DzEx7u7k.js → blender-version.status-D-kPKENT.js} +1 -1
  67. package/dist/assets/{blender-wali-engine-DOiQCBXH.js → blender-wali-engine-CZcS3eAd.js} +1 -1
  68. package/dist/assets/{blender.command-DdiKd8mZ.js → blender.command-BABpNHlJ.js} +1 -1
  69. package/dist/assets/{board-guides-CjHQ9Ynm.js → board-guides-BVkDJqat.js} +1 -1
  70. package/dist/assets/bridge.command-DNktKXNP.js +3 -0
  71. package/dist/assets/{browserAll-Dg46xT22.js → browserAll-DjSaXYpJ.js} +1 -1
  72. package/dist/assets/{build-player.document-BHwVV3K0.js → build-player.document-viLZOb6A.js} +1 -1
  73. package/dist/assets/{build-profiles.document-HkpS-Kxa.js → build-profiles.document-C9gM1NV6.js} +1 -1
  74. package/dist/assets/{build-progress.status-u1J0Rm1D.js → build-progress.status-DKw0YdnU.js} +1 -1
  75. package/dist/assets/{build-session-BLboUUbw.js → build-session-CpAT9iQU.js} +1 -1
  76. package/dist/assets/{build.action-C00DL83N.js → build.action-BrSZc3kA.js} +1 -1
  77. package/dist/assets/{build.command-Cjk_NY75.js → build.command-CVB-50ii.js} +1 -1
  78. package/dist/assets/{build.header-BWNmNWFT.js → build.header-BhOtTPyg.js} +1 -1
  79. package/dist/assets/{build.menu-BBYtqCIq.js → build.menu-BHIVHysW.js} +1 -1
  80. package/dist/assets/{build.service-DOU15tKN.js → build.service-C5awmXgd.js} +1 -1
  81. package/dist/assets/{camera-7DGyYW7Y.js → camera-B_ssMgXA.js} +1 -1
  82. package/dist/assets/{camera-runtime.inspector-n-jiOR-3.js → camera-runtime.inspector-BAc2xnsF.js} +1 -1
  83. package/dist/assets/{canvas-design-mount-CSRHU-ag.js → canvas-design-mount-DW2RoIFP.js} +3 -3
  84. package/dist/assets/{canvas-entry-runtime-BST8yRuK.js → canvas-entry-runtime-BQdfSw1B.js} +2 -2
  85. package/dist/assets/{canvas-preview-frames-Cja32aW2.js → canvas-preview-frames-Bc44u87o.js} +1 -1
  86. package/dist/assets/{canvas-story-capture.service-D5R5HJ8n.js → canvas-story-capture.service-DTLE6FK3.js} +2 -2
  87. package/dist/assets/{capability-coverage-ByWftxk4.js → capability-coverage-6I_iG0kk.js} +1 -1
  88. package/dist/assets/{collaboration-presence-D6MC9xJN.js → collaboration-presence-wD0oKl7P.js} +1 -1
  89. package/dist/assets/{collider-B78EcUc9.js → collider-BQKrXUbD.js} +1 -1
  90. package/dist/assets/{component-board.service-BaQI5Oas.js → component-board.service-BzZ2JQC8.js} +2 -2
  91. package/dist/assets/{component-board.service-Dvjz_g-x.js → component-board.service-Cnxftkv8.js} +2 -2
  92. package/dist/assets/{component-board.service-CkjrsD8x.js → component-board.service-DTH3BKq_.js} +2 -2
  93. package/dist/assets/{component-contracts.service-C3-AXQp7.js → component-contracts.service-BJ73JRuk.js} +1 -1
  94. package/dist/assets/{component-instance-root-DLI40MiB.js → component-instance-root-9MmHwMal.js} +1 -1
  95. package/dist/assets/{component-verbs.command-Brr_WcaR.js → component-verbs.command-_nUoLZ1s.js} +1 -1
  96. package/dist/assets/{component-verbs.service-DC2sC3j3.js → component-verbs.service-D9qvuexk.js} +1 -1
  97. package/dist/assets/{config-BI_7osdR.js → config-DabjxySF.js} +2 -2
  98. package/dist/assets/{configurations-XP9YLkrt.js → configurations-CACHqi7T.js} +1 -1
  99. package/dist/assets/{connection.status-BhRwcFx0.js → connection.status-CfFK9wti.js} +1 -1
  100. package/dist/assets/{constraints.inspector-Dm1cycK3.js → constraints.inspector-DvTTgVxM.js} +1 -1
  101. package/dist/assets/{content-bounds-DROIchTa.js → content-bounds-938XXJRy.js} +1 -1
  102. package/dist/assets/{contract-system-adapters-Cn7OW_ay.js → contract-system-adapters-D9Gcb7R7.js} +1 -1
  103. package/dist/assets/{coverage.service-l42ty7lr.js → coverage.service-CyWmmos8.js} +1 -1
  104. package/dist/assets/{create-runtime-B_uTwsmi.js → create-runtime-D3CS8u84.js} +1 -1
  105. package/dist/assets/{curve-THOUsg-j.js → curve-CzIvpvWX.js} +1 -1
  106. package/dist/assets/{data-asset-DAANayR6.js → data-asset-Dt3MP-sl.js} +1 -1
  107. package/dist/assets/{data-ref-CN34UeVw.js → data-ref-COkdIktX.js} +1 -1
  108. package/dist/assets/{debug-bridge-BD1XVAIB.js → debug-bridge-LaiaWRls.js} +1 -1
  109. package/dist/assets/{debug-registry-ggQWxtu-.js → debug-registry-BUPLu5EA.js} +1 -1
  110. package/dist/assets/{deferred-ingest-play-B2JUlwlT.js → deferred-ingest-play-DVLTxYCk.js} +2 -2
  111. package/dist/assets/{design-time-canvas-mount-as9cN9I6.js → design-time-canvas-mount-CkOQQvFW.js} +2 -2
  112. package/dist/assets/{design-time-layers-BRseeSmV.js → design-time-layers-Cv3txX_V.js} +1 -1
  113. package/dist/assets/{design-time-mount.service-BTVu3yKo.js → design-time-mount.service-C8VeEbCC.js} +2 -2
  114. package/dist/assets/{design-time-mount.service-DKvc7lVK.js → design-time-mount.service-DupCKL6-.js} +2 -2
  115. package/dist/assets/{design-time-react-mount-C7rB56QD.js → design-time-react-mount-CT8eihNN.js} +1 -1
  116. package/dist/assets/{document-preview-three-CxmRhCcV.js → document-preview-three-C8Pzyiai.js} +1 -1
  117. package/dist/assets/{dom-authoring-adapter-L8OzXfmE.js → dom-authoring-adapter-71D70rVP.js} +1 -1
  118. package/dist/assets/{draco3d-BjNuXv66.js → draco3d-XOYD2Hke.js} +1 -1
  119. package/dist/assets/{edit-mode-audio.service-BwI5u845.js → edit-mode-audio.service-OcRQ9Ozq.js} +1 -1
  120. package/dist/assets/{edit-mode-authoring-D5f7aHHl.js → edit-mode-authoring-Du1CaTkH.js} +1 -1
  121. package/dist/assets/{edit-mode-networking.service-DqP_4lbI.js → edit-mode-networking.service-BWz-nxiL.js} +1 -1
  122. package/dist/assets/{editor-api-BM7H_F4G.js → editor-api-BqS9NdSX.js} +1 -1
  123. package/dist/assets/{editor-layers-D-CTUqco.js → editor-layers-qlgroPbE.js} +1 -1
  124. package/dist/assets/{editor-shell-store-DHVWS8cE.js → editor-shell-store-Di0waLQj.js} +1 -1
  125. package/dist/assets/{entity-object-MKYemTFM.js → entity-object-BeRdaaqQ.js} +1 -1
  126. package/dist/assets/{extend-BrgqZiMY.js → extend-CFEzxGGP.js} +1 -1
  127. package/dist/assets/{fork-menu-DE2MK3Nq.js → fork-menu-Bujed-pM.js} +1 -1
  128. package/dist/assets/{frame-debugger-store-BXoLKTdZ.js → frame-debugger-store-CCm_jyhx.js} +1 -1
  129. package/dist/assets/{game-contract-seams-tyKDsfaP.js → game-contract-seams-DOwrbA13.js} +1 -1
  130. package/dist/assets/{game-css-scope-transform-DcjrwtVc.js → game-css-scope-transform-DuP554oX.js} +1 -1
  131. package/dist/assets/{game-document.service-CTb2itHQ.js → game-document.service-CW928hrj.js} +1 -1
  132. package/dist/assets/game-eval.command-D8ohGtA6.js +2 -0
  133. package/dist/assets/{game-module-access-BTInp2NG.js → game-module-access-gOlo85at.js} +1 -1
  134. package/dist/assets/{game-network-DW5ARz4R.js → game-network-CU3Yp0oN.js} +3 -3
  135. package/dist/assets/{gameplay-export-cHk3v9y-.js → gameplay-export-Clmlm922.js} +1 -1
  136. package/dist/assets/{gameplay-replay-HRenPTtU.js → gameplay-replay-Dxz93B2M.js} +1 -1
  137. package/dist/assets/{gameplay.command-DcY2lKKX.js → gameplay.command-b2D2rbZV.js} +1 -1
  138. package/dist/assets/{generation-jobs-CJBehuUp.js → generation-jobs-_kzxAnbI.js} +1 -1
  139. package/dist/assets/{generation.service-BMOc-C9i.js → generation.service-B533Kbco.js} +1 -1
  140. package/dist/assets/{generations-ssgVOe_6.js → generations-D5GcYf91.js} +1 -1
  141. package/dist/assets/{generations.status-B_SmPReI.js → generations.status-CDZ_eHJZ.js} +1 -1
  142. package/dist/assets/{hierarchy-marks-BuCO8Ke-.js → hierarchy-marks-BrmGekuT.js} +1 -1
  143. package/dist/assets/{hosted-asset-materialization-CiXZI85V.js → hosted-asset-materialization-DBLM2dtz.js} +1 -1
  144. package/dist/assets/{index-DgPDGGSV.js → index-BPUmREu0.js} +2 -2
  145. package/dist/assets/{index-Bm4_DmRO.js → index-BU93FMYM.js} +1 -1
  146. package/dist/assets/{index-B0S4fQQV.js → index-C8jugKW5.js} +1 -1
  147. package/dist/assets/{index-BvBlIRwM.js → index-CP1Fd1fP.js} +1 -1
  148. package/dist/assets/{index-CfpGZrbC.js → index-CiqSswEV.js} +1 -1
  149. package/dist/assets/{index-BweKDdi_.js → index-Q98tByQ2.js} +1 -1
  150. package/dist/assets/{index-C5ZAyrKq.js → index-iW3HFEJB.js} +232 -232
  151. package/dist/assets/{index-Czvj6whv.js → index-sTPbmuS8.js} +1 -1
  152. package/dist/assets/{index-B9bd4k-t.js → index-vjNaMgz6.js} +1 -1
  153. package/dist/assets/{inference-diagnostics-DLt9ql9I.js → inference-diagnostics-PcfFN6SD.js} +1 -1
  154. package/dist/assets/{ingest-boot-viewport-BXVXjYpG.js → ingest-boot-viewport-CrnkiTcJ.js} +1 -1
  155. package/dist/assets/{ingest-siblings-DWJ7OGB_.js → ingest-siblings-CQ95u6JM.js} +1 -1
  156. package/dist/assets/{ingest-source-persistence-6ShMoSCa.js → ingest-source-persistence-2MRBPgo0.js} +1 -1
  157. package/dist/assets/{ingest.service-BBbX8ibg.js → ingest.service-DQqEvbsT.js} +1 -1
  158. package/dist/assets/{inspect-Cz3Zyx_1.js → inspect-CUNyIUii.js} +1 -1
  159. package/dist/assets/instances.command-wzs2BWwt.js +1 -0
  160. package/dist/assets/{json-history-resource-Uqrihfc8.js → json-history-resource-82d2z68R.js} +1 -1
  161. package/dist/assets/{layered-pick-CAVQMPI7.js → layered-pick-Db8YSlDp.js} +1 -1
  162. package/dist/assets/{light-CqzsCWeJ.js → light-PK9RLNmD.js} +1 -1
  163. package/dist/assets/{live-project-verbs-CdFmLYOo.js → live-project-verbs-CayyA6Tc.js} +1 -1
  164. package/dist/assets/{machine.document-DRIFOVaa.js → machine.document-CUO0RxDP.js} +1 -1
  165. package/dist/assets/{machines.finder-DPCT6few.js → machines.finder-B-DdPjby.js} +1 -1
  166. package/dist/assets/{material-BVApn1V_.js → material-C_mvE2lW.js} +1 -1
  167. package/dist/assets/{material-factory-B_75xxFD.js → material-factory-kKKe4-DN.js} +1 -1
  168. package/dist/assets/{mesh-DdA3mExo.js → mesh-fUiQLtsU.js} +1 -1
  169. package/dist/assets/{model-asset-sections.service-CJnSIckZ.js → model-asset-sections.service-Dfkzhu6Q.js} +1 -1
  170. package/dist/assets/{model-inspection-DvspbmJl.js → model-inspection-DgqjTy5z.js} +1 -1
  171. package/dist/assets/{model-thumbnail-BmQs-h6t.js → model-thumbnail-DORLbXyw.js} +1 -1
  172. package/dist/assets/{models.finder-Qv_Hsccy.js → models.finder-DzW1Sg26.js} +1 -1
  173. package/dist/assets/{module-mode-MJ4Gbsry.js → module-mode-BWoDD0oV.js} +2 -2
  174. package/dist/assets/{mount-canvas-ingest-root-BxtM8OaB.js → mount-canvas-ingest-root-nBqJPkbz.js} +2 -2
  175. package/dist/assets/{mount-dom-ingest-root-pGatqO46.js → mount-dom-ingest-root-BOEt11vp.js} +2 -2
  176. package/dist/assets/{mount-ingest-root-C7jb-mCl.js → mount-ingest-root-9KaA9ETn.js} +2 -2
  177. package/dist/assets/{mount-manifest-BfoHBuzn.js → mount-manifest-BOiv1Hix.js} +1 -1
  178. package/dist/assets/{mount-three-ingest-root-Boa5mcaF.js → mount-three-ingest-root-C_0Slh91.js} +1 -1
  179. package/dist/assets/{mounted-authoring-DxMISwvR.js → mounted-authoring-30zCcxeV.js} +1 -1
  180. package/dist/assets/{mounted-story-viewport-source-DfnLxI1f.js → mounted-story-viewport-source-N0xrUdtm.js} +1 -1
  181. package/dist/assets/{native-debug-module-BlrALjM3.js → native-debug-module-Cofo9dCU.js} +1 -1
  182. package/dist/assets/{navigation-CqG5o5AR.js → navigation-B9kSIhNu.js} +1 -1
  183. package/dist/assets/{navmesh.menu-D4TdVDhe.js → navmesh.menu-DPNQ2RCH.js} +1 -1
  184. package/dist/assets/{navmesh.service-DWKT5ruQ.js → navmesh.service-pffKX_Ht.js} +1 -1
  185. package/dist/assets/network-observer.service-D61Whg6t.js +1 -0
  186. package/dist/assets/{network.utility-DjeOEvAY.js → network.utility-Bw74dLIu.js} +1 -1
  187. package/dist/assets/{object3d-document-session-registry-CMRJdFp6.js → object3d-document-session-registry-DMhhDWnQ.js} +2 -2
  188. package/dist/assets/{oid-transform-DaA6yW6o.js → oid-transform-AHICFvQG.js} +1 -1
  189. package/dist/assets/{particles-DsQRcDBY.js → particles-DIMSkSIe.js} +1 -1
  190. package/dist/assets/{pixi-authoring-adapter-BoBt8bB5.js → pixi-authoring-adapter-DR6NNYrL.js} +1 -1
  191. package/dist/assets/{pixi-live-write-target-CYZgvC6U.js → pixi-live-write-target-CXDKS1kQ.js} +1 -1
  192. package/dist/assets/{play.command-D9JGJP-e.js → play.command-L6qPHLHh.js} +2 -2
  193. package/dist/assets/{presentation-COhHQdmR.js → presentation-DPddUHCg.js} +1 -1
  194. package/dist/assets/{product-CaRGoiIH.js → product-CEH3MVYt.js} +1 -1
  195. package/dist/assets/{profiler.action-Cz7HYWjh.js → profiler.action-qMarbw9x.js} +1 -1
  196. package/dist/assets/{profiler.menu-D5aR_FBy.js → profiler.menu-C52_wfu8.js} +1 -1
  197. package/dist/assets/{profiler.utility-KwxlIPKb.js → profiler.utility-DzfXG0cD.js} +1 -1
  198. package/dist/assets/{project-authoring-session-DKXHVwxO.js → project-authoring-session-sbmVUm3i.js} +2 -2
  199. package/dist/assets/{properties-bone-constraints.inspector-Bo-sU8eR.js → properties-bone-constraints.inspector-DEOxhp1W.js} +1 -1
  200. package/dist/assets/{properties-bone.inspector-BQiWplQv.js → properties-bone.inspector-CY8EEYZl.js} +1 -1
  201. package/dist/assets/{properties-collection.inspector-C5BnR-GE.js → properties-collection.inspector-rGoZwmsY.js} +1 -1
  202. package/dist/assets/{properties-constraints.inspector-CyheU12R.js → properties-constraints.inspector-DJITSHiL.js} +1 -1
  203. package/dist/assets/{properties-data.inspector-CkycARja.js → properties-data.inspector-CNJ6cUzA.js} +1 -1
  204. package/dist/assets/{properties-material.inspector-Bl_PUmY-.js → properties-material.inspector-BkCUSFdM.js} +1 -1
  205. package/dist/assets/{properties-modifiers.inspector-j7SnOxQq.js → properties-modifiers.inspector-C9ij0UfE.js} +1 -1
  206. package/dist/assets/{properties-object.inspector-DcR3MGLK.js → properties-object.inspector-IvVsyikt.js} +1 -1
  207. package/dist/assets/{properties-output.inspector-BLjw6K4b.js → properties-output.inspector-Df-fx8vq.js} +1 -1
  208. package/dist/assets/{properties-particles.inspector-BUIm2-Jf.js → properties-particles.inspector-J3UOyWlz.js} +1 -1
  209. package/dist/assets/{properties-physics.inspector-DNvRcxb6.js → properties-physics.inspector-BmcTY5Q8.js} +1 -1
  210. package/dist/assets/{properties-render.inspector-8FMZ-qoZ.js → properties-render.inspector-DUB5qwIR.js} +1 -1
  211. package/dist/assets/{properties-scene.inspector-Dx7_z75k.js → properties-scene.inspector-DxBRs2ae.js} +1 -1
  212. package/dist/assets/{properties-texture.inspector-WT15951-.js → properties-texture.inspector-BqzPv1aS.js} +1 -1
  213. package/dist/assets/{properties-view-layer.inspector-P7VNTdqr.js → properties-view-layer.inspector-D1a1Dc1r.js} +1 -1
  214. package/dist/assets/{properties-world.inspector-B3t1q8TF.js → properties-world.inspector-CCwHv8ha.js} +1 -1
  215. package/dist/assets/{r3f-design-session-lsbFnoWH.js → r3f-design-session-By5arVMz.js} +2 -2
  216. package/dist/assets/{r3f-physics-binding-Cx8yhuwt.js → r3f-physics-binding-mLmXPi7n.js} +1 -1
  217. package/dist/assets/{r3f-source-authoring-adapter-jH3G0TeH.js → r3f-source-authoring-adapter-W1zVFNuZ.js} +1 -1
  218. package/dist/assets/{react-canvas-navigation-B_gOe3CI.js → react-canvas-navigation-IPhloKzi.js} +1 -1
  219. package/dist/assets/{react-inspector.service-CZf1vfdX.js → react-inspector.service-C7T_Pqud.js} +1 -1
  220. package/dist/assets/{react-story-board-CCm2Opwn.js → react-story-board-CPTQdOIn.js} +1 -1
  221. package/dist/assets/{react-three-rapier.esm-CHXGG51p.js → react-three-rapier.esm-D43m0aj7.js} +1 -1
  222. package/dist/assets/{react-world-authoring-adapter-CnzxMtYz.js → react-world-authoring-adapter-DgsCzOTj.js} +1 -1
  223. package/dist/assets/{realm-services-Do9J6nsb.js → realm-services-C8OlRuJ5.js} +1 -1
  224. package/dist/assets/{reflection-probe-capture.inspector-BAjjIybz.js → reflection-probe-capture.inspector-DT1jvM_q.js} +1 -1
  225. package/dist/assets/{registry-Xnduk02T.js → registry-XvQ4sPew.js} +1 -1
  226. package/dist/assets/{relative-import-specifier-CPFTrxi4.js → relative-import-specifier-CPCtuEhc.js} +1 -1
  227. package/dist/assets/{render-env-YJlI8K0i.js → render-env-BYsqF2DQ.js} +1 -1
  228. package/dist/assets/{render-features-DMSV2qKJ.js → render-features-CL2D1X_X.js} +1 -1
  229. package/dist/assets/{render-settings-CRyDhHyz.js → render-settings-CsCXKLaq.js} +1 -1
  230. package/dist/assets/{resolve-three-D27rMc37.js → resolve-three-DRDYxBE9.js} +4 -4
  231. package/dist/assets/{root-seam-contract-gjWUd5uu.js → root-seam-contract-BNGi8m22.js} +1 -1
  232. package/dist/assets/{run-selection-B0jOdyYt.js → run-selection-8wjzFzVg.js} +1 -1
  233. package/dist/assets/{scene-capture-Di9cM1p4.js → scene-capture-aq3yUgox.js} +1 -1
  234. package/dist/assets/{scene-document.service-XxGs4HHE.js → scene-document.service-qnY16vPq.js} +2 -2
  235. package/dist/assets/{scene-framing-DkZKDwH3.js → scene-framing-BWGUKaVh.js} +1 -1
  236. package/dist/assets/{seeded-random-BJthDRMu.js → seeded-random-BIdiJ8w9.js} +1 -1
  237. package/dist/assets/{session-x8E_NJk2.js → session-CeyQA0Dv.js} +1 -1
  238. package/dist/assets/{setup-renderer-F9mG7t6r.js → setup-renderer-BI8Dltzx.js} +1 -1
  239. package/dist/assets/{source-object3d-authoring-adapter-CvmFpSUj.js → source-object3d-authoring-adapter-Des84Gk3.js} +1 -1
  240. package/dist/assets/{source-persistence-backend-au3WtEn6.js → source-persistence-backend-I5wxqQgh.js} +1 -1
  241. package/dist/assets/{stage-keyboard-BQkndG_D.js → stage-keyboard-Ckod5Y4M.js} +1 -1
  242. package/dist/assets/{stage-overlay-set-g6eWhuRv.js → stage-overlay-set-CLTmSTo9.js} +1 -1
  243. package/dist/assets/{stage-presence-markers-0CDfO5f4.js → stage-presence-markers-DOoDCC7Z.js} +1 -1
  244. package/dist/assets/{stage-transform-tools-BzPl7OIo.js → stage-transform-tools-DjYQ95b7.js} +1 -1
  245. package/dist/assets/{standard-viewport-dressing-BW-dM_1h.js → standard-viewport-dressing-DE9WE1Lv.js} +1 -1
  246. package/dist/assets/{state-watch.action-Z1nQ5awu.js → state-watch.action-D0rXmFVx.js} +1 -1
  247. package/dist/assets/{state-watch.menu-CQHGUF3W.js → state-watch.menu-DJyVHqNM.js} +1 -1
  248. package/dist/assets/{state-watch.utility-DCIg2i79.js → state-watch.utility-CHL55Pbn.js} +1 -1
  249. package/dist/assets/{story-capture-BIrjDKeY.js → story-capture-BGeBen-R.js} +1 -1
  250. package/dist/assets/{story-documents-BvG2xeaR.js → story-documents-B8TSr_CN.js} +1 -1
  251. package/dist/assets/{story-documents.service-DOSEa3ja.js → story-documents.service-B1hhvZad.js} +1 -1
  252. package/dist/assets/{story-documents.service-y1m7XGMJ.js → story-documents.service-C_Q58qZs.js} +1 -1
  253. package/dist/assets/{story-media-presence-HLV-KaMj.js → story-media-presence-CEwzSadX.js} +1 -1
  254. package/dist/assets/{story-pixi-preview-CMhho2gG.js → story-pixi-preview-rAub2W_H.js} +1 -1
  255. package/dist/assets/{story-presentation-CYhVv8Ku.js → story-presentation-CdJ6Ncu6.js} +1 -1
  256. package/dist/assets/{story-three-preview-CgcLF5lE.js → story-three-preview-Cp9kfSo0.js} +2 -2
  257. package/dist/assets/{studio-environment-R9qXUUcC.js → studio-environment-BCf09Sox.js} +1 -1
  258. package/dist/assets/{surface-state-D8Qnowo6.js → surface-state-BUmVXUJj.js} +1 -1
  259. package/dist/assets/{syntactic-prop-specs-8gkBuc5j.js → syntactic-prop-specs-BHoShoI2.js} +1 -1
  260. package/dist/assets/{team-playtest.service-BBMZ2iyk.js → team-playtest.service-DErOWVaA.js} +1 -1
  261. package/dist/assets/{three-authoring-adapter-CkLR2zGf.js → three-authoring-adapter-DctJX96k.js} +1 -1
  262. package/dist/assets/three-authoring.service-B2LLPXyf.js +2 -0
  263. package/dist/assets/{three-ingest-runtime-CwTqAHgX.js → three-ingest-runtime-Bqwv-JsZ.js} +1 -1
  264. package/dist/assets/{three-integration-DXOFI88n.js → three-integration-C9bu5OXH.js} +2 -2
  265. package/dist/assets/three-integration.service-BXQuaWQ-.js +1 -0
  266. package/dist/assets/{three-projection-core-B7Lf8tOp.js → three-projection-core-rOK39WmJ.js} +1 -1
  267. package/dist/assets/{three-state-BCACvUtm.js → three-state-Cu8xEils.js} +1 -1
  268. package/dist/assets/{three-story-capture.service-rTFKNtHA.js → three-story-capture.service-DJaS21h9.js} +2 -2
  269. package/dist/assets/{three-story-model-BjKr7OMn.js → three-story-model-CE0vGtKW.js} +1 -1
  270. package/dist/assets/{three-viewport-presentation-CBzvc2v2.js → three-viewport-presentation-IVtG1zll.js} +1 -1
  271. package/dist/assets/{three-DiL6vMXq.js → three-wsMw8Ifj.js} +1 -1
  272. package/dist/assets/tools-BnE3UWVA.js +1 -0
  273. package/dist/assets/{transform-mode-request-DlEApNrA.js → transform-mode-request-C7qvcvEe.js} +1 -1
  274. package/dist/assets/{transport-strip-xCg94CuI.js → transport-strip-B6Hauzjh.js} +1 -1
  275. package/dist/assets/transport.header-CDivn20X.js +1 -0
  276. package/dist/assets/{tuples-BDz3wbQL.js → tuples-CP56GoRo.js} +1 -1
  277. package/dist/assets/{ui-board-document-DvbK_HVN.js → ui-board-document-B69iTbe5.js} +2 -2
  278. package/dist/assets/{user-data-C84W0V47.js → user-data-BGLBYiFw.js} +1 -1
  279. package/dist/assets/{utility-view-state-CDRxZSo-.js → utility-view-state-y2PTWZuT.js} +1 -1
  280. package/dist/assets/{viewport-door-BARIpMu-.js → viewport-door-B7DJhMPS.js} +1 -1
  281. package/dist/assets/{viewport-root-presentation-hRLF0BeO.js → viewport-root-presentation-DPtVohIT.js} +1 -1
  282. package/dist/assets/{viewport-surface-status-TUfhXKR9.js → viewport-surface-status-CleQnKBz.js} +1 -1
  283. package/dist/assets/{webworkerAll-PJtcQ1FD.js → webworkerAll-B8sqUYid.js} +1 -1
  284. package/dist/assets/{worker-BtXrsgFy.js → worker-jepHAPPr.js} +1 -1
  285. package/dist/assets/{workspace-arrangement-DqG5sUns.js → workspace-arrangement-6V8ZwB2d.js} +1 -1
  286. package/dist/assets/{world-documents-D69XaqUX.js → world-documents-CwxZ4xtW.js} +1 -1
  287. package/dist/assets/{world-root-stage-binding-BgZWZEuD.js → world-root-stage-binding-OOLit0lW.js} +1 -1
  288. package/dist/assets/{xstate-animation-binding-CIyLzGHs.js → xstate-animation-binding-KbfYItEZ.js} +1 -1
  289. package/dist/assets/{xstate-animation-meta-CbYWup3R.js → xstate-animation-meta-DM_K9jo1.js} +1 -1
  290. package/dist-node/cli.js +42 -42
  291. package/dist-node/create.js +5 -5
  292. package/package.json +16 -16
  293. package/template/.agents/references/project-manual.md +1 -2
  294. package/template/.agents/skills/editor/SKILL.md +2 -2
  295. package/template/.agents/skills/editor/agents/openai.yaml +3 -3
  296. package/template/.agents/skills/editor/references/editor-control.md +1 -1
  297. package/template/.agents/skills/volter-ingest-existing-game/SKILL.md +1 -1
  298. package/template/.agents/skills/volter-threejs-authoring/SKILL.md +4 -4
  299. package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +1 -1
  300. package/template/.claude/skills/editor/SKILL.md +2 -2
  301. package/template/.claude/skills/editor/agents/openai.yaml +3 -3
  302. package/template/.claude/skills/editor/references/editor-control.md +1 -1
  303. package/template/.claude/skills/volter-ingest-existing-game/SKILL.md +1 -1
  304. package/template/.claude/skills/volter-threejs-authoring/SKILL.md +4 -4
  305. package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +1 -1
  306. package/template/.github/copilot-instructions.md +1 -1
  307. package/template/.github/skills/editor/SKILL.md +2 -2
  308. package/template/.github/skills/editor/agents/openai.yaml +3 -3
  309. package/template/.github/skills/editor/references/editor-control.md +1 -1
  310. package/template/.github/skills/volter-ingest-existing-game/SKILL.md +1 -1
  311. package/template/.github/skills/volter-threejs-authoring/SKILL.md +4 -4
  312. package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +1 -1
  313. package/template/AGENTS.md +3 -4
  314. package/template/README.md +2 -6
  315. package/template/check-idioms.ts +26 -50
  316. package/template/package.json +10 -10
  317. package/template/server/colyseus-setup.ts +1 -9
  318. package/template/server/main.ts +0 -5
  319. package/template/server/rooms/arena-room.ts +2 -2
  320. package/template/server/rooms/game-room.ts +2 -2
  321. package/template/server/rooms.ts +1 -3
  322. package/template/src/net/NetworkedPlayers.tsx +3 -3
  323. package/template/vite.config.ts +1 -1
  324. package/template-dotfiles/gitignore +1 -1
  325. package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +0 -1
  326. package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +0 -2
  327. package/dist/assets/active-ingest-0QjJWb7i.js +0 -3
  328. package/dist/assets/autoplay.service-BZLSUyL8.js +0 -1
  329. package/dist/assets/bridge.command-DXUeavn5.js +0 -3
  330. package/dist/assets/game-eval.command-CpDKXOQU.js +0 -2
  331. package/dist/assets/instances.command-BrdlngrL.js +0 -1
  332. package/dist/assets/network-observer.service-ZRAquNq4.js +0 -1
  333. package/dist/assets/three-authoring.service-CovhlCGx.js +0 -2
  334. package/dist/assets/three-integration.service-rCAqpqSp.js +0 -1
  335. package/dist/assets/tools-DfctM216.js +0 -1
  336. package/dist/assets/transport.header-BRtdky0x.js +0 -1
  337. package/template/server/loopback.ts +0 -76
@@ -1 +1 @@
1
- import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{EDITOR_LAYER as Xe}from"./editor-layers-D-CTUqco.js";import{cM as Oe,a1 as V,dT as Je,aK as te,cE as G,aL as Q,kA as Ye,dS as Ze,cK as et,a0 as $,g_ as tt,hG as rt,jS as nt,kB as ot,O as j,B as st,bM as at,kC as Se,b$ as it,kD as ct,kE as lt,kF as ut,kG as Ce,kH as xe,ax as x,cm as dt,kI as mt,bU as pt,bZ as ft,kJ as Pe,kK as Ee,kL as je,kM as ht,af as gt,kN as bt,kO as ke,dk as vt,kP as wt,kQ as yt,hd as St,iV as Ct,iW as xt,gJ as Pt,gK as Et,j1 as jt,f_ as kt,f$ as Tt,g0 as At,g1 as Rt}from"./index-C5ZAyrKq.js";import{s as Mt,o as Vt}from"./object3d-document-session-registry-CMRJdFp6.js";import{R as Ot}from"./RootSelectionOverlay-BWsNiSuM.js";import{e as Lt,S as Ft}from"./surface-state-D8Qnowo6.js";import{r as f}from"./index-nmcBqr7Y.js";import{t as It}from"./surface-content-Dg9Kkazf.js";import"./index-CtzuWnCS.js";import{s as zt,d as Te,c as B,t as Wt,p as Le,v as Ae,b as _t,e as Dt,l as Nt,i as $t}from"./camera-authoring-DYjhU5Zp.js";import{c as Gt}from"./performance-profiler-CMbwGBuk.js";import{m as Qt}from"./renderer-ownership-BovSEcLv.js";import{applyWorldRendererConfig as Bt}from"./renderer-config-CaPR4dB_.js";import{getUserData as Fe}from"./user-data-CODoGZqA.js";import{detectKtx2Support as Ht}from"./loader-BTUKnX5Q.js";import{resolveRenderSettings as Ut}from"./render-settings-CRyDhHyz.js";import{createSoftParticleDepthPass as Kt}from"./soft-particle-depth-DNGwWJ8c.js";import{ViewportShadingRenderer as qt}from"./viewport-shading-D9BMDb1N.js";import{applyRendererSettings as Xt,applySceneRenderPipeline as Jt}from"./setup-renderer-F9mG7t6r.js";import{EffectComposer as Yt,EffectPass as Zt,BlendFunction as er,KernelSize as tr,OutlineEffect as rr}from"./index-DHhMOs_s.js";import{W as nr,T as or}from"./three.module-BLhyNg0e.js";import{d as sr}from"./design-time-mount-registry-DUpXCg1U.js";import{a as ar}from"./project-authoring-session-DKXHVwxO.js";import"./three-integration-DXOFI88n.js";import{registerPresentedCanvasFrame as ir}from"./canvas-preview-frames-Cja32aW2.js";import{i as cr}from"./editor-presentation-activity-CqJH4G9t.js";import{E as lr,s as ur,a as dr,t as mr,b as pr,c as fr,d as hr,r as gr,i as br}from"./three-viewport-presentation-CBzvc2v2.js";import{a as Z}from"./entity-object-MKYemTFM.js";import{w as vr}from"./editor-shell-store-DHVWS8cE.js";import{p as wr}from"./viewport-root-presentation-hRLF0BeO.js";import{d as yr}from"./asset-editor-persistence-BIbf5u0Q.js";import{bindStagePresenceMarkers as Sr}from"./stage-presence-markers-0CDfO5f4.js";import{el as Cr,_ as ee,fo as N,d7 as xr,dp as Re}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./workspace-arrangement-DqG5sUns.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./eyedropper-session-bjPXnfeX.js";import"./layered-pick-CAVQMPI7.js";import"./root-stacking-BEd9ZvxC.js";import"./react-story-board-CCm2Opwn.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./inspect-Cz3Zyx_1.js";import"./inference-diagnostics-DLt9ql9I.js";import"./object-marks-BnvSuCTt.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./render-features-DMSV2qKJ.js";import"./matcap-texture-Dm2c-VQa.js";import"./defaults-DKiBJCPN.js";import"./edit-mode-authoring-D5f7aHHl.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./preview-renderer-BrYNFV1p.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./user-data-C84W0V47.js";import"./model-thumbnail-BmQs-h6t.js";import"./studio-environment-R9qXUUcC.js";import"./three-state-BCACvUtm.js";import"./hierarchy-marks-BuCO8Ke-.js";import"./component-instance-root-DLI40MiB.js";import"./three-contract-Dkt6PmWY.js";import"./viewport-door-BARIpMu-.js";import"./content-bounds-DROIchTa.js";import"./asset-preview-DxlSdRZn.js";import"./bitmap-label-Ct4k6ehY.js";import"./index-DgPDGGSV.js";import"./standard-viewport-dressing-BW-dM_1h.js";import"./clip-planes-CnAI6DZn.js";import"./three-DiL6vMXq.js";import"./model-inspection-DvspbmJl.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./live-gesture-lock-DJbrjOqf.js";import"./scene-framing-DkZKDwH3.js";import"./live-mixers-B-bwLZ7c.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./mounted-authoring-DxMISwvR.js";import"./collaboration-presence-D6MC9xJN.js";function Pr({previewRef:r}){const{preview:e,previewPinned:s}=B(),[o,c]=f.useState(!1),a=f.useRef(null);if(f.useEffect(()=>{if(!o)return;const u=E=>{a.current?.contains(E.target)||c(!1)};return document.addEventListener("pointerdown",u),()=>document.removeEventListener("pointerdown",u)},[o]),!e)return null;const m=e.camera.isPerspectiveCamera&&Number.isFinite(e.camera.aspect)?e.camera.aspect:16/9;return i.jsxs("div",{className:"volter-camera-preview","data-testid":"camera-preview",children:[i.jsxs(Oe,{className:"volter-camera-preview-header",gap:4,align:"center",children:[i.jsx(V,{icon:Je,size:"sm"}),i.jsx(te,{variant:"label",truncate:!0,className:"volter-camera-preview-title",title:`${e.name} · ${e.lens}`,children:e.name}),i.jsx(G,{text:s?"Unpin camera preview":"Pin camera preview",children:i.jsx(Q,{"aria-label":s?"Unpin camera preview":"Pin camera preview","aria-pressed":s,size:"compact",onClick:Wt,children:i.jsx(V,{icon:Ye,size:"sm"})})}),i.jsxs("div",{ref:a,className:"volter-camera-preview-menu-anchor",children:[i.jsx(G,{text:"Camera actions",children:i.jsx(Q,{"aria-label":"Camera actions","aria-expanded":o,size:"compact",onClick:()=>c(u=>!u),children:i.jsx(V,{icon:Ze,size:"sm"})})}),o?i.jsxs(et,{className:"volter-camera-preview-menu",children:[i.jsx($,{variant:"ghost",size:"compact",disabled:!e.canAuthorPose,title:e.poseRefusal,onClick:()=>{c(!1),Le(e)},children:"Pilot Camera"}),i.jsx($,{variant:"ghost",size:"compact",onClick:()=>{c(!1),Ae(e)},children:"View Through Camera"}),i.jsx($,{variant:"ghost",size:"compact",disabled:!e.canAuthorPose,title:e.poseRefusal,onClick:()=>{c(!1),_t(e)},children:"Align Camera to Current View"})]}):null]})]}),i.jsx("div",{ref:r,className:"volter-camera-preview-image",style:{aspectRatio:String(Math.max(.5,Math.min(3,m)))},role:"img","aria-label":`Live view through ${e.name}`,onDoubleClick:()=>Ae(e)})]})}function Er(){return i.jsxs("div",{className:"volter-camera-guides","aria-hidden":"true",children:[i.jsx("div",{className:"volter-camera-guide volter-camera-guide-v1"}),i.jsx("div",{className:"volter-camera-guide volter-camera-guide-v2"}),i.jsx("div",{className:"volter-camera-guide volter-camera-guide-h1"}),i.jsx("div",{className:"volter-camera-guide volter-camera-guide-h2"}),i.jsx("div",{className:"volter-camera-safe-frame"}),i.jsx("div",{className:"volter-camera-center-mark"})]})}function jr(){const{view:r,guidesVisible:e}=B();if(!r)return null;const s=r.mode==="pilot";return i.jsxs(i.Fragment,{children:[e?i.jsx(Er,{}):null,i.jsx(tt,{variant:"overlay",border:!0,className:"volter-camera-view-banner volter-chrome-island volter-glass-island","data-testid":"camera-view-banner",children:i.jsxs(Oe,{gap:6,align:"center",children:[i.jsx(rt,{children:s?"PILOTING":"CAMERA VIEW"}),i.jsx(te,{variant:"label",children:r.subject.name}),i.jsx(te,{variant:"caption",tone:"muted",children:"Exact camera view"}),i.jsx(G,{text:e?"Hide composition guides":"Show composition guides",children:i.jsx(Q,{"aria-label":e?"Hide composition guides":"Show composition guides","aria-pressed":e,size:"compact",onClick:Dt,children:i.jsx(V,{icon:nt,size:"sm"})})}),s?null:i.jsx($,{size:"compact",variant:"primary",disabled:!r.subject.canAuthorPose,title:r.subject.poseRefusal,onClick:()=>Le(r.subject),children:"Pilot"}),i.jsx(G,{text:"Exit camera view",children:i.jsx(Q,{"aria-label":"Exit camera view",size:"compact",onClick:Nt,children:i.jsx(V,{icon:ot,size:"sm"})})})]})})]})}function kr({previewRef:r}){return f.useSyncExternalStore(zt,Te,Te),i.jsxs(i.Fragment,{children:[i.jsx(Pr,{previewRef:r}),i.jsx(jr,{})]})}function Tr(r){const e=r,s=e.getExtension("EXT_disjoint_timer_query_webgl2"),o=s!==null&&typeof e.createQuery=="function",c=[];let a=null,m=null;return{begin(){!o||a||(a=e.createQuery(),a&&e.beginQuery(s.TIME_ELAPSED_EXT,a))},end(){!o||!a||(e.endQuery(s.TIME_ELAPSED_EXT),c.push(a),a=null)},poll(){if(!o)return null;if(e.getParameter(s.GPU_DISJOINT_EXT)){for(const u of c.splice(0))e.deleteQuery(u);return null}for(;c.length>0;){const u=c[0];if(!e.getQueryParameter(u,e.QUERY_RESULT_AVAILABLE))break;c.shift(),m=e.getQueryParameter(u,e.QUERY_RESULT)/1e6,e.deleteQuery(u)}return m},dispose(){a&&(e.endQuery(s.TIME_ELAPSED_EXT),e.deleteQuery(a),a=null);for(const u of c.splice(0))e.deleteQuery(u)}}}const Ar=2e4,Rr=250,Mr=5e3;class Vr{#e=0;#t=0;#r=0;#n;constructor(e){this.#n=e}get pending(){return this.#e>0||this.#t>0}begin(e,s){this.#e=e+Ar,this.#t=s?e+Mr:0,this.#r=0,this.tick(e)}tick(e){if(!(!this.pending||e<this.#r)){if(this.#r=e+Rr,this.#t>0&&this.#n.seedFromGameCamera()){this.cancel();return}this.#e>0&&this.#n.frameContent()&&(this.#e=0),e>=this.#e&&(this.#e=0),e>=this.#t&&(this.#t=0)}}cancel(){this.#e=0,this.#t=0}}const Me=new WeakMap;function Or(r,e){if(!r)return e(),!0;if(Me.has(r))return!1;try{return e(),!0}catch(s){const o=s instanceof Error?s.message:String(s);return Me.set(r,o),j.warn(`The Scene view cannot draw this world with the editor's own renderer, and has stopped trying: ${o}. This world was built by a copy of three the editor did not make (a vendored bundle pins its own revision), and the editor draws it with ITS three — across a wide enough revision gap the two disagree about the renderer/material contract. The game itself is unaffected and still drawing: its own canvas is what the Game tab and ${st("screenshot")} show, and hierarchy, selection and inspection all still read the live world. It closes when the game resolves \`three\` to the host's instance — a bare, un-rewritten \`import 'three'\` in its own source.`,"ingest"),!1}}function Lr(){const r=at();r.addEventListener("server-log",s=>{try{Se(JSON.parse(s.data))}catch{}});let e=!1;return(async()=>{try{const s=await it();if(e)return;for(const o of s)Se(o)}catch{}})(),()=>{e=!0,r.close()}}const Ie="viewportPose";function Fr(){const r=ct(Ie);return r&&Array.isArray(r.position)&&r.position.length===3&&r.position.every(Number.isFinite)&&Array.isArray(r.target)&&r.target.length===3&&r.target.every(Number.isFinite)?r:null}function Ir(r,e){lt(Ie,{position:[r.position.x,r.position.y,r.position.z],target:[e.x,e.y,e.z]})}const Ve={id:"world",title:"World",lights:[{color:"#ffffff",intensity:1,direction:[-10,-20,-10],space:"world"}],ambient:{color:"#ffffff",intensity:.5},environmentIntensity:0};yt(Ve),St("world",{all:{lighting:{source:"studio",studioPreset:Ve.id,auto:{takeover:["light"],overridable:!0}}}});function zr(r,e,s){const o=document.createElement("canvas");o.setAttribute("aria-label",`${s} authoring viewport`),o.setAttribute("data-testid","editor-canvas"),o.setAttribute("aria-hidden","true"),o.tabIndex=-1,o.style.width="100%",o.style.height="100%",o.style.display="block",o.style.pointerEvents="auto",r.appendChild(o);const c=Math.max(1,e.clientWidth),a=Math.max(1,e.clientHeight),m=Math.min(window.devicePixelRatio||1,2);o.width=Math.ceil(c*m),o.height=Math.ceil(a*m);const u=Qt(new nr({canvas:o,antialias:!!Ut(void 0).antialias,powerPreference:"high-performance"}));return Xt(u,void 0,m),u.setSize(c,a),u.shadowMap.type=xr,u.info.autoReset=!1,Ht(u),{canvas:o,renderer:u,lease:null}}async function Wr(r){const e=pt(r.source,r.id);if(e)return e;let s=r.url,o=r.format??"gltf",c=r.includes;if(!s){const u=(await ft(r.source,r.id))[0];if(!u)return j.error(`No downloadable files for ${r.name}.`,"asset"),null;s=u.url,o=u.format,c=u.includes}const a={source:r.source,id:r.id,name:r.name,url:s,format:o};c&&(a.includes=c);const m=await yr(a);return m.ok&&m.path?`/${m.path}`:(j.error(`Could not download ${r.name}.`,"asset"),null)}function _r(r){if(r.isCamera)return r;const e=Fe(r,"_camera");return e?.isCamera?e:null}function Dr(r){const e=r;if(e.isPerspectiveCamera)return`${e.fov.toFixed(0)}° perspective`;const s=r;return s.isOrthographicCamera?`Orthographic · ${s.zoom.toFixed(2)}×`:r.type}function Nr(r,e){const s=r.transforms;if(!s)return{canAuthorPose:!1,poseRefusal:"This camera has no transform authoring path."};const o=s.editability?.(e,"position")??{writable:!0},c=s.editability?.(e,"rotation")??{writable:!0};return o.writable&&c.writable?{canAuthorPose:!0}:{canAuthorPose:!1,poseRefusal:o.reason??c.reason??"This camera pose is read-only."}}function $r(r,e,s){const o=e.get(s)??null;if(!o)return null;const c=_r(o);return c?{id:s,name:o.name||c.name||"Camera",camera:c,lens:Dr(c),...Nr(r,s)}:null}function Gr(r){const e=new Map;for(const[s,o]of r.objectMap){const c=Fe(o,"tags");Array.isArray(c)&&c.length>0&&e.set(s,c)}return e}function Qr(r){const{store:e,documentId:s,container:o,canvas:c,renderer:a,stats:m}=r,u=new Yt(a),E=Kt(),O=new qt,g=Gt(),L=Tr(a.getContext()),ze=t=>{g.enabled&&L.begin();try{t()}finally{L.end()}},We=()=>g.enabled?L.poll():null,_e=ut({id:s,label:"Scene viewport",kind:"scene",profiler:g}),b=new Cr,re=11184810;let H=Ce(c).background??re;b.background=new ee(H);const De=xe(c,()=>{const t=Ce(c).background??re,l=b.background;l instanceof ee&&l.getHex()===H&&(b.background=new ee(t)),H=t});e.bindScene(b,a);const n=new lr(c,b,e,o,{renderer:a,onlineAssetResolver:Wr,onProjectionChange:ur}),Ne=n.bindPresentation(s,"world");e.bindScene(b,a,n.batchedRenderer,n.camera),e.setOrbitTarget(n.orbitControls.target);const U=new N,F=new N,ne=new N,oe=()=>{const t=n.renderCamera;t.getWorldPosition(U),n.cameraViewMode==="pilot"?F.copy(n.orbitControls.target):n.cameraViewMode?(t.getWorldDirection(ne),F.copy(U).add(ne.multiplyScalar(10))):F.copy(n.orbitControls.target);const l=t.fov;return{position:U,target:F,fov:typeof l=="number"?l:0}},k=Sr({scene:b,store:e,documentId:s,container:o,canvas:c,viewport:n,readVisibleCameraPose:oe});let se="",K=null,h=null,S=null,I=null;const ae=()=>{h&&fr(h,ke(a.domElement))},$e=xe(a.domElement,ae),ie=()=>{if(!h)return;const t=x(e.shell),l=[...e.shell.selectedEntityIds].filter(d=>t.hierarchy.node(d)!==null).map(d=>Z(t,e.objectMap,d)).filter(d=>d!==null);hr(h,l);const p=h.selection.size>0;S&&(S.enabled=p,S.renderToScreen=p),I&&(I.renderToScreen=!p)};function T(){bt(e.shell),K?.(),K=null,h&&gr(a,h,S),h=null,S=null,I=null,Jt(u,a,e.scene??b,n.renderCamera,void 0,{basePixelRatio:Math.min(window.devicePixelRatio||1,2),objectMap:e.objectMap,entityTags:Gr(e)}),h=pr({BlendFunction:er,KernelSize:tr,OutlineEffect:rr},a,e.scene??b,n.renderCamera,ke(a.domElement)),ae(),I=u.passes.at(-1)??null,S=new Zt(n.renderCamera,h),S.enabled=!1,u.addPass(S),ie();const t=e.adoptedImageConfig;t&&(K=Bt(or,a,t))}const ce=()=>{n.setProjection(mr().projection),e.setViewportCamera(n.freeCamera),T()},Ge=dr(ce);ce();const q=t=>$r(x(e.shell),e.objectMap,t);let v=null;const A=()=>{v&&(je(x(e.shell),v),v=null)},le=()=>{const t=B().view;t?.mode!=="pilot"||!t.subject.canAuthorPose||(v=t.subject.id,Pe(x(e.shell),v))},ue=()=>{if(!v||n.cameraViewMode!=="pilot")return;const t=q(v),l=x(e.shell),p=l.transforms;if(!t||!p)return;let d;try{d=p.get(v)}catch(w){j.error(w instanceof Error?w.message:String(w),"camera-authoring"),A();return}Ee(l,v,{position:t.camera.position.toArray(),rotation:t.camera.quaternion.toArray(),scale:d.scale}),e.shell.notifyIngestEdit()};n.orbitControls.addEventListener("start",le),n.orbitControls.addEventListener("change",ue),n.orbitControls.addEventListener("end",A);const Qe=$t({active:()=>e.shell.playState==="stopped"&&e.shell.activeViewportTab==="edit",selected:()=>{const t=e.shell.selectedEntityId;return t?q(t):null},resolve:q,showView:(t,l)=>{A(),n.setCameraView(t.camera,l),T(),k.reportCamera()},leaveView:()=>{A(),n.clearCameraView(),T(),k.reportCamera()},alignToViewport:t=>{const l=x(e.shell),p=l.transforms;if(!p||!t.canAuthorPose)return;const d=e.objectMap.get(t.id)??null;if(!d)return;const w=n.camera.getWorldPosition(new N),C=n.camera.getWorldQuaternion(new Re),y=w.clone(),R=C.clone();if(d.parent){d.parent.updateWorldMatrix(!0,!1),d.parent.worldToLocal(y);const M=d.parent.getWorldQuaternion(new Re);R.premultiply(M.invert())}let ye;try{ye=p.get(t.id)}catch(M){j.error(M instanceof Error?M.message:String(M),"camera-authoring");return}Pe(l,t.id),Ee(l,t.id,{position:y.toArray(),rotation:R.toArray(),scale:ye.scale}),e.shell.notifyIngestEdit(),je(l,t.id)},subscribe:e.shell.subscribe});let de=null;const me=()=>{const t=ht(e.shell);t!==de&&(de=t,c.style.opacity=t?"1":"0",o.style.backgroundColor=t?"":gt.surface.raised,o.style.backgroundImage=t?"":"linear-gradient(45deg, #444649 25%, transparent 25%, transparent 75%, #444649 75%), linear-gradient(45deg, #444649 25%, transparent 25%, transparent 75%, #444649 75%)",o.style.backgroundPosition=t?"":"0 0, 8px 8px",o.style.backgroundSize=t?"":"16px 16px")};me();let pe=e.composerVersion;const Be=e.shell.subscribe(()=>{me();const t=e.scene;t&&t!==n.currentScene&&n.setScene(t),n.objectMap=e.objectMap,n.syncFromStore(),e.composerVersion!==pe?(pe=e.composerVersion,T()):ie()});let z=null;const X=new Vr({seedFromGameCamera:()=>{const t=z?.()??null;return!!t&&n.seedFromGameCamera(t)},frameContent:()=>n.focusOnScene()}),fe=()=>{X.cancel(),z=null};n.orbitControls.addEventListener("start",fe);const he=()=>Ir(n.camera,n.orbitControls.target);n.orbitControls.addEventListener("end",he);const He=e.shell.onViewportAction(t=>{switch(t.type){case"focus-entity":{const l=Z(x(e.shell),e.objectMap,t.id);l&&n.focusOn(l);break}case"focus-scene":{{const l=Fr();if(l){n.camera.position.set(...l.position),n.orbitControls.target.set(...l.target),n.orbitControls.update();break}}z=e.sceneCameraLookup,X.begin(performance.now(),z!==null);break}case"focus-selection":{const l=x(e.shell),p=[...e.shell.selectedEntityIds].map(d=>Z(l,e.objectMap,d)).filter(d=>d!==null);n.focusOnMultiple(p);break}case"snap-selection-to-floor":n.snapSelectionToFloor();break;case"set-view-preset":n.setViewPreset(t.preset);break;case"step-view":n.stepView(t.step);break;case"frame-all":n.focusOnScene();break;case"zoom-view":n.zoomStep(t.direction);break;case"set-camera-pose":n.setPose(t.position,t.target,t.fov);break}});Lr();const ge=new ResizeObserver(()=>{const t=Math.max(1,o.clientWidth),l=Math.max(1,o.clientHeight);a.setSize(t,l),u.setSize(t,l),n.resize(t,l)});ge.observe(o);let W=performance.now(),_=!0,P=!1,be=!1;function ve(t){return Or(n.currentScene,()=>{E.render(a,n.currentScene,n.renderCamera),n.renderWithInfrastructure(()=>{vr(n.currentScene,()=>O.render(n.currentScene,e.shadingMode,()=>u.render(t),br)),n.renderViewCube(a),n.renderCameraPreview(a,B().preview?.camera??null,r.cameraPreview())})})}const Ue=ir(c,async()=>{if(P||!cr()||!o.checkVisibility({visibilityProperty:!0,checkVisibilityCSS:!0})||!ve(0))return null;const t=document.createElement("canvas");return t.width=c.width,t.height=c.height,t.getContext("2d").drawImage(c,0,0),t}),J=()=>wt(e.shell)===e.shell;function Ke(t,l){if(P)return;if(l&&(W=t),!o.checkVisibility({visibilityProperty:!0,checkVisibilityCSS:!0})){W=t,_=!0;return}g.beginFrame();const p=t-W,d=p/1e3;J()&&(m.frameTime=p,m.fps=1e3/p),W=t,k.syncMarkers(d),X.tick(t),g.beginPhase(),n.update(d),r.runFrame(d),n.batchedRenderer.update(d),g.endPhase("editor"),g.beginPhase(),a.info.reset(),ze(()=>{ve(d)}),g.reportRender({gpuMs:We(),drawCalls:a.info.render.calls,triangles:a.info.render.triangles,geometries:a.info.memory.geometries,textures:a.info.memory.textures}),g.endPhase("render"),J()&&(m.drawCalls=a.info.render.calls,m.triangles=a.info.render.triangles),_&&be&&(_=!1,vt(s)),g.endFrame();const w=oe(),C=w.position,y=w.target;J()&&(m.cameraPosition.x=C.x,m.cameraPosition.y=C.y,m.cameraPosition.z=C.z,m.cameraTarget.x=y.x,m.cameraTarget.y=y.y,m.cameraTarget.z=y.z);const R=`${C.x},${C.y},${C.z},${y.x},${y.y},${y.z},${w.fov}`;R!==se&&(se=R,k.reportCamera())}n.objectMap=e.objectMap,n.syncFromStore(),T();let Y,D;async function qe(t){if(P)return;r.onMountStatus("mounting"),D?.(),D=void 0,Y=t,r.onRootIds(t.childAdapters().filter(d=>d.role==="world"&&d.kind==="three").map(d=>d.worldId));const l=sr("three");if(P||Y!==t)return;const p=l?await l.mountWorldRootSession({store:e,composite:t,renderer:a}):()=>{};if(P||Y!==t){p();return}D=p,P||r.onMountStatus("ready")}const we=ar(e.shell,qe);return we.ready.then(()=>dt(mt(e.shell))).catch(t=>{j.error(`Editor boot failed: ${t instanceof Error?t.message:String(t)}`,"scene"),r.onMountStatus("ready")}).finally(()=>{be=!0,_=!0}),{scene:b,viewport:n,frame:Ke,present:t=>wr(e,t),setHelper:(t,l)=>n.setHelper(t,l),dispose:()=>{P=!0,_e(),Ue(),ge.disconnect(),Be(),He(),Qe(),n.orbitControls.removeEventListener("start",le),n.orbitControls.removeEventListener("change",ue),n.orbitControls.removeEventListener("end",A),n.orbitControls.removeEventListener("start",fe),n.orbitControls.removeEventListener("end",he),we.dispose(),D?.(),k.dispose(),O.dispose(),L.dispose(),Ge(),$e(),De(),Ne(),h?.selection.clear(),E.dispose(),u.dispose()}}}function Br({store:r,rootIds:e,mountStatus:s}){f.useSyncExternalStore(r.shell.subscribe,r.shell.getSnapshot);const o=f.useSyncExternalStore(kt,Tt),c=f.useSyncExternalStore(At,Rt),a=r.scene?.background,m=a!==null&&!(a?.isColor===!0&&a.getHex()===11184810),u=f.useMemo(()=>!!(r.scene&&It(r.scene,{includeBackground:!1,ignoredLayer:Xe})),[r.scene,r.shell.contentVersion]),E=!!(r.scene&&(m||u)),O=Lt({surface:"Scene",rootIds:e,phase:s==="mounting"?"loading":"ready",content:E?"present":s==="mounting"?"unknown":"empty",readiness:o,failures:c});return i.jsx(Ft,{explanation:O,testId:"scene-viewport-status"})}function Hr({store:r,documentId:e,cameraPreviewRef:s,mountStatus:o,rootIds:c}){f.useSyncExternalStore(r.shell.subscribe,r.shell.getShellSnapshot??r.shell.getSnapshot),f.useSyncExternalStore(Ct,xt),f.useSyncExternalStore(Mt,Vt),f.useSyncExternalStore(Pt,Et);const a=jt(r.shell,e,"document");return i.jsxs(i.Fragment,{children:[a.surface!==null?i.jsx(Ot,{}):null,a.surface==="three"?i.jsx(kr,{previewRef:s}):null,i.jsx(Br,{store:r,rootIds:c,mountStatus:o})]})}const ko={mountWorldRootSurface:zr,installWorldRootStage:Qr,Overlays:Hr};export{ko as worldRootStageBinding};
1
+ import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{EDITOR_LAYER as Xe}from"./editor-layers-qlgroPbE.js";import{cM as Oe,a1 as V,dT as Je,aK as te,cE as G,aL as Q,kA as Ye,dS as Ze,cK as et,a0 as $,g_ as tt,hG as rt,jS as nt,kB as ot,O as j,B as st,bM as at,kC as Se,b$ as it,kD as ct,kE as lt,kF as ut,kG as Ce,kH as xe,ax as x,cm as dt,kI as mt,bU as pt,bZ as ft,kJ as Pe,kK as Ee,kL as je,kM as ht,af as gt,kN as bt,kO as ke,dk as vt,kP as wt,kQ as yt,hd as St,iV as Ct,iW as xt,gJ as Pt,gK as Et,j1 as jt,f_ as kt,f$ as Tt,g0 as At,g1 as Rt}from"./index-iW3HFEJB.js";import{s as Mt,o as Vt}from"./object3d-document-session-registry-DMhhDWnQ.js";import{R as Ot}from"./RootSelectionOverlay-47LRczuj.js";import{e as Lt,S as Ft}from"./surface-state-BUmVXUJj.js";import{r as f}from"./index-nmcBqr7Y.js";import{t as It}from"./surface-content-Dg9Kkazf.js";import"./index-CtzuWnCS.js";import{s as zt,d as Te,c as B,t as Wt,p as Le,v as Ae,b as _t,e as Dt,l as Nt,i as $t}from"./camera-authoring-DYjhU5Zp.js";import{c as Gt}from"./performance-profiler-CMbwGBuk.js";import{m as Qt}from"./renderer-ownership-BovSEcLv.js";import{applyWorldRendererConfig as Bt}from"./renderer-config-CaPR4dB_.js";import{getUserData as Fe}from"./user-data-CODoGZqA.js";import{detectKtx2Support as Ht}from"./loader-BTUKnX5Q.js";import{resolveRenderSettings as Ut}from"./render-settings-CsCXKLaq.js";import{createSoftParticleDepthPass as Kt}from"./soft-particle-depth-DNGwWJ8c.js";import{ViewportShadingRenderer as qt}from"./viewport-shading-D9BMDb1N.js";import{applyRendererSettings as Xt,applySceneRenderPipeline as Jt}from"./setup-renderer-BI8Dltzx.js";import{EffectComposer as Yt,EffectPass as Zt,BlendFunction as er,KernelSize as tr,OutlineEffect as rr}from"./index-DHhMOs_s.js";import{W as nr,T as or}from"./three.module-BLhyNg0e.js";import{d as sr}from"./design-time-mount-registry-DUpXCg1U.js";import{a as ar}from"./project-authoring-session-sbmVUm3i.js";import"./three-integration-C9bu5OXH.js";import{registerPresentedCanvasFrame as ir}from"./canvas-preview-frames-Bc44u87o.js";import{i as cr}from"./editor-presentation-activity-CqJH4G9t.js";import{E as lr,s as ur,a as dr,t as mr,b as pr,c as fr,d as hr,r as gr,i as br}from"./three-viewport-presentation-IVtG1zll.js";import{a as Z}from"./entity-object-BeRdaaqQ.js";import{w as vr}from"./editor-shell-store-Di0waLQj.js";import{p as wr}from"./viewport-root-presentation-DPtVohIT.js";import{d as yr}from"./asset-editor-persistence-BIFP2LgP.js";import{bindStagePresenceMarkers as Sr}from"./stage-presence-markers-DOoDCC7Z.js";import{el as Cr,_ as ee,fo as N,d7 as xr,dp as Re}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./workspace-arrangement-6V8ZwB2d.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./eyedropper-session-bjPXnfeX.js";import"./layered-pick-Db8YSlDp.js";import"./root-stacking-BEd9ZvxC.js";import"./react-story-board-CPTQdOIn.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./inspect-CUNyIUii.js";import"./inference-diagnostics-PcfFN6SD.js";import"./object-marks-BnvSuCTt.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./render-features-CL2D1X_X.js";import"./matcap-texture-Dm2c-VQa.js";import"./defaults-DKiBJCPN.js";import"./edit-mode-authoring-Du1CaTkH.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./preview-renderer-BrYNFV1p.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./user-data-BGLBYiFw.js";import"./model-thumbnail-DORLbXyw.js";import"./studio-environment-BCf09Sox.js";import"./three-state-Cu8xEils.js";import"./hierarchy-marks-BrmGekuT.js";import"./component-instance-root-9MmHwMal.js";import"./three-contract-Dkt6PmWY.js";import"./viewport-door-B7DJhMPS.js";import"./content-bounds-938XXJRy.js";import"./asset-preview-BzDHm81_.js";import"./bitmap-label-Ct4k6ehY.js";import"./index-BPUmREu0.js";import"./standard-viewport-dressing-DE9WE1Lv.js";import"./clip-planes-CnAI6DZn.js";import"./three-wsMw8Ifj.js";import"./model-inspection-DgqjTy5z.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./live-gesture-lock-DJbrjOqf.js";import"./scene-framing-BWGUKaVh.js";import"./live-mixers-B-bwLZ7c.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./mounted-authoring-30zCcxeV.js";import"./collaboration-presence-wD0oKl7P.js";function Pr({previewRef:r}){const{preview:e,previewPinned:s}=B(),[o,c]=f.useState(!1),a=f.useRef(null);if(f.useEffect(()=>{if(!o)return;const u=E=>{a.current?.contains(E.target)||c(!1)};return document.addEventListener("pointerdown",u),()=>document.removeEventListener("pointerdown",u)},[o]),!e)return null;const m=e.camera.isPerspectiveCamera&&Number.isFinite(e.camera.aspect)?e.camera.aspect:16/9;return i.jsxs("div",{className:"volter-camera-preview","data-testid":"camera-preview",children:[i.jsxs(Oe,{className:"volter-camera-preview-header",gap:4,align:"center",children:[i.jsx(V,{icon:Je,size:"sm"}),i.jsx(te,{variant:"label",truncate:!0,className:"volter-camera-preview-title",title:`${e.name} · ${e.lens}`,children:e.name}),i.jsx(G,{text:s?"Unpin camera preview":"Pin camera preview",children:i.jsx(Q,{"aria-label":s?"Unpin camera preview":"Pin camera preview","aria-pressed":s,size:"compact",onClick:Wt,children:i.jsx(V,{icon:Ye,size:"sm"})})}),i.jsxs("div",{ref:a,className:"volter-camera-preview-menu-anchor",children:[i.jsx(G,{text:"Camera actions",children:i.jsx(Q,{"aria-label":"Camera actions","aria-expanded":o,size:"compact",onClick:()=>c(u=>!u),children:i.jsx(V,{icon:Ze,size:"sm"})})}),o?i.jsxs(et,{className:"volter-camera-preview-menu",children:[i.jsx($,{variant:"ghost",size:"compact",disabled:!e.canAuthorPose,title:e.poseRefusal,onClick:()=>{c(!1),Le(e)},children:"Pilot Camera"}),i.jsx($,{variant:"ghost",size:"compact",onClick:()=>{c(!1),Ae(e)},children:"View Through Camera"}),i.jsx($,{variant:"ghost",size:"compact",disabled:!e.canAuthorPose,title:e.poseRefusal,onClick:()=>{c(!1),_t(e)},children:"Align Camera to Current View"})]}):null]})]}),i.jsx("div",{ref:r,className:"volter-camera-preview-image",style:{aspectRatio:String(Math.max(.5,Math.min(3,m)))},role:"img","aria-label":`Live view through ${e.name}`,onDoubleClick:()=>Ae(e)})]})}function Er(){return i.jsxs("div",{className:"volter-camera-guides","aria-hidden":"true",children:[i.jsx("div",{className:"volter-camera-guide volter-camera-guide-v1"}),i.jsx("div",{className:"volter-camera-guide volter-camera-guide-v2"}),i.jsx("div",{className:"volter-camera-guide volter-camera-guide-h1"}),i.jsx("div",{className:"volter-camera-guide volter-camera-guide-h2"}),i.jsx("div",{className:"volter-camera-safe-frame"}),i.jsx("div",{className:"volter-camera-center-mark"})]})}function jr(){const{view:r,guidesVisible:e}=B();if(!r)return null;const s=r.mode==="pilot";return i.jsxs(i.Fragment,{children:[e?i.jsx(Er,{}):null,i.jsx(tt,{variant:"overlay",border:!0,className:"volter-camera-view-banner volter-chrome-island volter-glass-island","data-testid":"camera-view-banner",children:i.jsxs(Oe,{gap:6,align:"center",children:[i.jsx(rt,{children:s?"PILOTING":"CAMERA VIEW"}),i.jsx(te,{variant:"label",children:r.subject.name}),i.jsx(te,{variant:"caption",tone:"muted",children:"Exact camera view"}),i.jsx(G,{text:e?"Hide composition guides":"Show composition guides",children:i.jsx(Q,{"aria-label":e?"Hide composition guides":"Show composition guides","aria-pressed":e,size:"compact",onClick:Dt,children:i.jsx(V,{icon:nt,size:"sm"})})}),s?null:i.jsx($,{size:"compact",variant:"primary",disabled:!r.subject.canAuthorPose,title:r.subject.poseRefusal,onClick:()=>Le(r.subject),children:"Pilot"}),i.jsx(G,{text:"Exit camera view",children:i.jsx(Q,{"aria-label":"Exit camera view",size:"compact",onClick:Nt,children:i.jsx(V,{icon:ot,size:"sm"})})})]})})]})}function kr({previewRef:r}){return f.useSyncExternalStore(zt,Te,Te),i.jsxs(i.Fragment,{children:[i.jsx(Pr,{previewRef:r}),i.jsx(jr,{})]})}function Tr(r){const e=r,s=e.getExtension("EXT_disjoint_timer_query_webgl2"),o=s!==null&&typeof e.createQuery=="function",c=[];let a=null,m=null;return{begin(){!o||a||(a=e.createQuery(),a&&e.beginQuery(s.TIME_ELAPSED_EXT,a))},end(){!o||!a||(e.endQuery(s.TIME_ELAPSED_EXT),c.push(a),a=null)},poll(){if(!o)return null;if(e.getParameter(s.GPU_DISJOINT_EXT)){for(const u of c.splice(0))e.deleteQuery(u);return null}for(;c.length>0;){const u=c[0];if(!e.getQueryParameter(u,e.QUERY_RESULT_AVAILABLE))break;c.shift(),m=e.getQueryParameter(u,e.QUERY_RESULT)/1e6,e.deleteQuery(u)}return m},dispose(){a&&(e.endQuery(s.TIME_ELAPSED_EXT),e.deleteQuery(a),a=null);for(const u of c.splice(0))e.deleteQuery(u)}}}const Ar=2e4,Rr=250,Mr=5e3;class Vr{#e=0;#t=0;#r=0;#n;constructor(e){this.#n=e}get pending(){return this.#e>0||this.#t>0}begin(e,s){this.#e=e+Ar,this.#t=s?e+Mr:0,this.#r=0,this.tick(e)}tick(e){if(!(!this.pending||e<this.#r)){if(this.#r=e+Rr,this.#t>0&&this.#n.seedFromGameCamera()){this.cancel();return}this.#e>0&&this.#n.frameContent()&&(this.#e=0),e>=this.#e&&(this.#e=0),e>=this.#t&&(this.#t=0)}}cancel(){this.#e=0,this.#t=0}}const Me=new WeakMap;function Or(r,e){if(!r)return e(),!0;if(Me.has(r))return!1;try{return e(),!0}catch(s){const o=s instanceof Error?s.message:String(s);return Me.set(r,o),j.warn(`The Scene view cannot draw this world with the editor's own renderer, and has stopped trying: ${o}. This world was built by a copy of three the editor did not make (a vendored bundle pins its own revision), and the editor draws it with ITS three — across a wide enough revision gap the two disagree about the renderer/material contract. The game itself is unaffected and still drawing: its own canvas is what the Game tab and ${st("screenshot")} show, and hierarchy, selection and inspection all still read the live world. It closes when the game resolves \`three\` to the host's instance — a bare, un-rewritten \`import 'three'\` in its own source.`,"ingest"),!1}}function Lr(){const r=at();r.addEventListener("server-log",s=>{try{Se(JSON.parse(s.data))}catch{}});let e=!1;return(async()=>{try{const s=await it();if(e)return;for(const o of s)Se(o)}catch{}})(),()=>{e=!0,r.close()}}const Ie="viewportPose";function Fr(){const r=ct(Ie);return r&&Array.isArray(r.position)&&r.position.length===3&&r.position.every(Number.isFinite)&&Array.isArray(r.target)&&r.target.length===3&&r.target.every(Number.isFinite)?r:null}function Ir(r,e){lt(Ie,{position:[r.position.x,r.position.y,r.position.z],target:[e.x,e.y,e.z]})}const Ve={id:"world",title:"World",lights:[{color:"#ffffff",intensity:1,direction:[-10,-20,-10],space:"world"}],ambient:{color:"#ffffff",intensity:.5},environmentIntensity:0};yt(Ve),St("world",{all:{lighting:{source:"studio",studioPreset:Ve.id,auto:{takeover:["light"],overridable:!0}}}});function zr(r,e,s){const o=document.createElement("canvas");o.setAttribute("aria-label",`${s} authoring viewport`),o.setAttribute("data-testid","editor-canvas"),o.setAttribute("aria-hidden","true"),o.tabIndex=-1,o.style.width="100%",o.style.height="100%",o.style.display="block",o.style.pointerEvents="auto",r.appendChild(o);const c=Math.max(1,e.clientWidth),a=Math.max(1,e.clientHeight),m=Math.min(window.devicePixelRatio||1,2);o.width=Math.ceil(c*m),o.height=Math.ceil(a*m);const u=Qt(new nr({canvas:o,antialias:!!Ut(void 0).antialias,powerPreference:"high-performance"}));return Xt(u,void 0,m),u.setSize(c,a),u.shadowMap.type=xr,u.info.autoReset=!1,Ht(u),{canvas:o,renderer:u,lease:null}}async function Wr(r){const e=pt(r.source,r.id);if(e)return e;let s=r.url,o=r.format??"gltf",c=r.includes;if(!s){const u=(await ft(r.source,r.id))[0];if(!u)return j.error(`No downloadable files for ${r.name}.`,"asset"),null;s=u.url,o=u.format,c=u.includes}const a={source:r.source,id:r.id,name:r.name,url:s,format:o};c&&(a.includes=c);const m=await yr(a);return m.ok&&m.path?`/${m.path}`:(j.error(`Could not download ${r.name}.`,"asset"),null)}function _r(r){if(r.isCamera)return r;const e=Fe(r,"_camera");return e?.isCamera?e:null}function Dr(r){const e=r;if(e.isPerspectiveCamera)return`${e.fov.toFixed(0)}° perspective`;const s=r;return s.isOrthographicCamera?`Orthographic · ${s.zoom.toFixed(2)}×`:r.type}function Nr(r,e){const s=r.transforms;if(!s)return{canAuthorPose:!1,poseRefusal:"This camera has no transform authoring path."};const o=s.editability?.(e,"position")??{writable:!0},c=s.editability?.(e,"rotation")??{writable:!0};return o.writable&&c.writable?{canAuthorPose:!0}:{canAuthorPose:!1,poseRefusal:o.reason??c.reason??"This camera pose is read-only."}}function $r(r,e,s){const o=e.get(s)??null;if(!o)return null;const c=_r(o);return c?{id:s,name:o.name||c.name||"Camera",camera:c,lens:Dr(c),...Nr(r,s)}:null}function Gr(r){const e=new Map;for(const[s,o]of r.objectMap){const c=Fe(o,"tags");Array.isArray(c)&&c.length>0&&e.set(s,c)}return e}function Qr(r){const{store:e,documentId:s,container:o,canvas:c,renderer:a,stats:m}=r,u=new Yt(a),E=Kt(),O=new qt,g=Gt(),L=Tr(a.getContext()),ze=t=>{g.enabled&&L.begin();try{t()}finally{L.end()}},We=()=>g.enabled?L.poll():null,_e=ut({id:s,label:"Scene viewport",kind:"scene",profiler:g}),b=new Cr,re=11184810;let H=Ce(c).background??re;b.background=new ee(H);const De=xe(c,()=>{const t=Ce(c).background??re,l=b.background;l instanceof ee&&l.getHex()===H&&(b.background=new ee(t)),H=t});e.bindScene(b,a);const n=new lr(c,b,e,o,{renderer:a,onlineAssetResolver:Wr,onProjectionChange:ur}),Ne=n.bindPresentation(s,"world");e.bindScene(b,a,n.batchedRenderer,n.camera),e.setOrbitTarget(n.orbitControls.target);const U=new N,F=new N,ne=new N,oe=()=>{const t=n.renderCamera;t.getWorldPosition(U),n.cameraViewMode==="pilot"?F.copy(n.orbitControls.target):n.cameraViewMode?(t.getWorldDirection(ne),F.copy(U).add(ne.multiplyScalar(10))):F.copy(n.orbitControls.target);const l=t.fov;return{position:U,target:F,fov:typeof l=="number"?l:0}},k=Sr({scene:b,store:e,documentId:s,container:o,canvas:c,viewport:n,readVisibleCameraPose:oe});let se="",K=null,h=null,S=null,I=null;const ae=()=>{h&&fr(h,ke(a.domElement))},$e=xe(a.domElement,ae),ie=()=>{if(!h)return;const t=x(e.shell),l=[...e.shell.selectedEntityIds].filter(d=>t.hierarchy.node(d)!==null).map(d=>Z(t,e.objectMap,d)).filter(d=>d!==null);hr(h,l);const p=h.selection.size>0;S&&(S.enabled=p,S.renderToScreen=p),I&&(I.renderToScreen=!p)};function T(){bt(e.shell),K?.(),K=null,h&&gr(a,h,S),h=null,S=null,I=null,Jt(u,a,e.scene??b,n.renderCamera,void 0,{basePixelRatio:Math.min(window.devicePixelRatio||1,2),objectMap:e.objectMap,entityTags:Gr(e)}),h=pr({BlendFunction:er,KernelSize:tr,OutlineEffect:rr},a,e.scene??b,n.renderCamera,ke(a.domElement)),ae(),I=u.passes.at(-1)??null,S=new Zt(n.renderCamera,h),S.enabled=!1,u.addPass(S),ie();const t=e.adoptedImageConfig;t&&(K=Bt(or,a,t))}const ce=()=>{n.setProjection(mr().projection),e.setViewportCamera(n.freeCamera),T()},Ge=dr(ce);ce();const q=t=>$r(x(e.shell),e.objectMap,t);let v=null;const A=()=>{v&&(je(x(e.shell),v),v=null)},le=()=>{const t=B().view;t?.mode!=="pilot"||!t.subject.canAuthorPose||(v=t.subject.id,Pe(x(e.shell),v))},ue=()=>{if(!v||n.cameraViewMode!=="pilot")return;const t=q(v),l=x(e.shell),p=l.transforms;if(!t||!p)return;let d;try{d=p.get(v)}catch(w){j.error(w instanceof Error?w.message:String(w),"camera-authoring"),A();return}Ee(l,v,{position:t.camera.position.toArray(),rotation:t.camera.quaternion.toArray(),scale:d.scale}),e.shell.notifyIngestEdit()};n.orbitControls.addEventListener("start",le),n.orbitControls.addEventListener("change",ue),n.orbitControls.addEventListener("end",A);const Qe=$t({active:()=>e.shell.playState==="stopped"&&e.shell.activeViewportTab==="edit",selected:()=>{const t=e.shell.selectedEntityId;return t?q(t):null},resolve:q,showView:(t,l)=>{A(),n.setCameraView(t.camera,l),T(),k.reportCamera()},leaveView:()=>{A(),n.clearCameraView(),T(),k.reportCamera()},alignToViewport:t=>{const l=x(e.shell),p=l.transforms;if(!p||!t.canAuthorPose)return;const d=e.objectMap.get(t.id)??null;if(!d)return;const w=n.camera.getWorldPosition(new N),C=n.camera.getWorldQuaternion(new Re),y=w.clone(),R=C.clone();if(d.parent){d.parent.updateWorldMatrix(!0,!1),d.parent.worldToLocal(y);const M=d.parent.getWorldQuaternion(new Re);R.premultiply(M.invert())}let ye;try{ye=p.get(t.id)}catch(M){j.error(M instanceof Error?M.message:String(M),"camera-authoring");return}Pe(l,t.id),Ee(l,t.id,{position:y.toArray(),rotation:R.toArray(),scale:ye.scale}),e.shell.notifyIngestEdit(),je(l,t.id)},subscribe:e.shell.subscribe});let de=null;const me=()=>{const t=ht(e.shell);t!==de&&(de=t,c.style.opacity=t?"1":"0",o.style.backgroundColor=t?"":gt.surface.raised,o.style.backgroundImage=t?"":"linear-gradient(45deg, #444649 25%, transparent 25%, transparent 75%, #444649 75%), linear-gradient(45deg, #444649 25%, transparent 25%, transparent 75%, #444649 75%)",o.style.backgroundPosition=t?"":"0 0, 8px 8px",o.style.backgroundSize=t?"":"16px 16px")};me();let pe=e.composerVersion;const Be=e.shell.subscribe(()=>{me();const t=e.scene;t&&t!==n.currentScene&&n.setScene(t),n.objectMap=e.objectMap,n.syncFromStore(),e.composerVersion!==pe?(pe=e.composerVersion,T()):ie()});let z=null;const X=new Vr({seedFromGameCamera:()=>{const t=z?.()??null;return!!t&&n.seedFromGameCamera(t)},frameContent:()=>n.focusOnScene()}),fe=()=>{X.cancel(),z=null};n.orbitControls.addEventListener("start",fe);const he=()=>Ir(n.camera,n.orbitControls.target);n.orbitControls.addEventListener("end",he);const He=e.shell.onViewportAction(t=>{switch(t.type){case"focus-entity":{const l=Z(x(e.shell),e.objectMap,t.id);l&&n.focusOn(l);break}case"focus-scene":{{const l=Fr();if(l){n.camera.position.set(...l.position),n.orbitControls.target.set(...l.target),n.orbitControls.update();break}}z=e.sceneCameraLookup,X.begin(performance.now(),z!==null);break}case"focus-selection":{const l=x(e.shell),p=[...e.shell.selectedEntityIds].map(d=>Z(l,e.objectMap,d)).filter(d=>d!==null);n.focusOnMultiple(p);break}case"snap-selection-to-floor":n.snapSelectionToFloor();break;case"set-view-preset":n.setViewPreset(t.preset);break;case"step-view":n.stepView(t.step);break;case"frame-all":n.focusOnScene();break;case"zoom-view":n.zoomStep(t.direction);break;case"set-camera-pose":n.setPose(t.position,t.target,t.fov);break}});Lr();const ge=new ResizeObserver(()=>{const t=Math.max(1,o.clientWidth),l=Math.max(1,o.clientHeight);a.setSize(t,l),u.setSize(t,l),n.resize(t,l)});ge.observe(o);let W=performance.now(),_=!0,P=!1,be=!1;function ve(t){return Or(n.currentScene,()=>{E.render(a,n.currentScene,n.renderCamera),n.renderWithInfrastructure(()=>{vr(n.currentScene,()=>O.render(n.currentScene,e.shadingMode,()=>u.render(t),br)),n.renderViewCube(a),n.renderCameraPreview(a,B().preview?.camera??null,r.cameraPreview())})})}const Ue=ir(c,async()=>{if(P||!cr()||!o.checkVisibility({visibilityProperty:!0,checkVisibilityCSS:!0})||!ve(0))return null;const t=document.createElement("canvas");return t.width=c.width,t.height=c.height,t.getContext("2d").drawImage(c,0,0),t}),J=()=>wt(e.shell)===e.shell;function Ke(t,l){if(P)return;if(l&&(W=t),!o.checkVisibility({visibilityProperty:!0,checkVisibilityCSS:!0})){W=t,_=!0;return}g.beginFrame();const p=t-W,d=p/1e3;J()&&(m.frameTime=p,m.fps=1e3/p),W=t,k.syncMarkers(d),X.tick(t),g.beginPhase(),n.update(d),r.runFrame(d),n.batchedRenderer.update(d),g.endPhase("editor"),g.beginPhase(),a.info.reset(),ze(()=>{ve(d)}),g.reportRender({gpuMs:We(),drawCalls:a.info.render.calls,triangles:a.info.render.triangles,geometries:a.info.memory.geometries,textures:a.info.memory.textures}),g.endPhase("render"),J()&&(m.drawCalls=a.info.render.calls,m.triangles=a.info.render.triangles),_&&be&&(_=!1,vt(s)),g.endFrame();const w=oe(),C=w.position,y=w.target;J()&&(m.cameraPosition.x=C.x,m.cameraPosition.y=C.y,m.cameraPosition.z=C.z,m.cameraTarget.x=y.x,m.cameraTarget.y=y.y,m.cameraTarget.z=y.z);const R=`${C.x},${C.y},${C.z},${y.x},${y.y},${y.z},${w.fov}`;R!==se&&(se=R,k.reportCamera())}n.objectMap=e.objectMap,n.syncFromStore(),T();let Y,D;async function qe(t){if(P)return;r.onMountStatus("mounting"),D?.(),D=void 0,Y=t,r.onRootIds(t.childAdapters().filter(d=>d.role==="world"&&d.kind==="three").map(d=>d.worldId));const l=sr("three");if(P||Y!==t)return;const p=l?await l.mountWorldRootSession({store:e,composite:t,renderer:a}):()=>{};if(P||Y!==t){p();return}D=p,P||r.onMountStatus("ready")}const we=ar(e.shell,qe);return we.ready.then(()=>dt(mt(e.shell))).catch(t=>{j.error(`Editor boot failed: ${t instanceof Error?t.message:String(t)}`,"scene"),r.onMountStatus("ready")}).finally(()=>{be=!0,_=!0}),{scene:b,viewport:n,frame:Ke,present:t=>wr(e,t),setHelper:(t,l)=>n.setHelper(t,l),dispose:()=>{P=!0,_e(),Ue(),ge.disconnect(),Be(),He(),Qe(),n.orbitControls.removeEventListener("start",le),n.orbitControls.removeEventListener("change",ue),n.orbitControls.removeEventListener("end",A),n.orbitControls.removeEventListener("start",fe),n.orbitControls.removeEventListener("end",he),we.dispose(),D?.(),k.dispose(),O.dispose(),L.dispose(),Ge(),$e(),De(),Ne(),h?.selection.clear(),E.dispose(),u.dispose()}}}function Br({store:r,rootIds:e,mountStatus:s}){f.useSyncExternalStore(r.shell.subscribe,r.shell.getSnapshot);const o=f.useSyncExternalStore(kt,Tt),c=f.useSyncExternalStore(At,Rt),a=r.scene?.background,m=a!==null&&!(a?.isColor===!0&&a.getHex()===11184810),u=f.useMemo(()=>!!(r.scene&&It(r.scene,{includeBackground:!1,ignoredLayer:Xe})),[r.scene,r.shell.contentVersion]),E=!!(r.scene&&(m||u)),O=Lt({surface:"Scene",rootIds:e,phase:s==="mounting"?"loading":"ready",content:E?"present":s==="mounting"?"unknown":"empty",readiness:o,failures:c});return i.jsx(Ft,{explanation:O,testId:"scene-viewport-status"})}function Hr({store:r,documentId:e,cameraPreviewRef:s,mountStatus:o,rootIds:c}){f.useSyncExternalStore(r.shell.subscribe,r.shell.getShellSnapshot??r.shell.getSnapshot),f.useSyncExternalStore(Ct,xt),f.useSyncExternalStore(Mt,Vt),f.useSyncExternalStore(Pt,Et);const a=jt(r.shell,e,"document");return i.jsxs(i.Fragment,{children:[a.surface!==null?i.jsx(Ot,{}):null,a.surface==="three"?i.jsx(kr,{previewRef:s}):null,i.jsx(Br,{store:r,rootIds:c,mountStatus:o})]})}const ko={mountWorldRootSurface:zr,installWorldRootStage:Qr,Overlays:Hr};export{ko as worldRootStageBinding};
@@ -1 +1 @@
1
- import{collectMachineAnimationMeta as V,clipNamesOf as L,isBlendTreeAnimationMeta as S,asBlendTreeDef as z}from"./xstate-animation-meta-CbYWup3R.js";import{cW as J,p as Z,c as _,cQ as ee,l as te,dk as ne,cf as ie,cd as oe}from"./three.core-3arARmh6.js";import"./index-C5ZAyrKq.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";class M extends Error{constructor(i,c){super(i),this.stateId=c,this.name="AnimationBindingError"}}function ae(n){const i=n.logic;if(i?.root)return i;const c=n.getSnapshot();if(c?.machine?.root)return c.machine;throw new M("[bindXStateAnimation] the actor exposes no state machine — only a state-machine actor carries the `meta.animation` this binder reads")}const W=n=>n.layer??"base",B=n=>n.weight??1,I=n=>n.blendMode??"override";function T(n){try{return ne.parseTrackName(n.name).nodeName??""}catch{const i=n.name.indexOf(".");return i<0?n.name:n.name.slice(0,i)}}function C(n,i,c){const o=new Set,l=[];for(const f of i){let u=!1;n.traverse(m=>{m.name===f&&(u=!0,m.traverse(d=>{d.name&&o.add(d.name)}))}),c.has(f)&&(u=!0,o.add(f)),u||l.push(f)}return{names:o,missing:l}}function se(n,i,c,o){const l=new Set(n.tracks.map(T)),f=i.include?C(c,i.include,l):void 0,u=i.exclude?C(c,i.exclude,l):void 0,m=[...f?.missing??[],...u?.missing??[]];if(m.length)throw new M(`[bindXStateAnimation] state "${o}" boneMask names unknown bones/objects: ${m.join(", ")}`,o);const d=n.tracks.filter(p=>{const w=T(p);return(!f||f.names.has(w))&&!u?.names.has(w)});if(d.length===0)throw new M(`[bindXStateAnimation] state "${o}" boneMask removes every track from clip "${n.name}"`,o);return new te(n.name,n.duration,d.map(p=>p.clone()))}function re(n){return n.reduce((i,c)=>c.weight>i.weight?c:i,n[0])}function Se(n,i,c,o={}){const l=i.getRoot(),f=o.root??(l instanceof J?l:void 0);if(!f)throw new M("[bindXStateAnimation] a THREE.Object3D `root` option is required when the mixer uses AnimationObjectGroup");const u=ae(n).root,m=V(u),d=new Map(m.map(t=>[t.stateId,t.meta]));for(const t of m)for(const e of L(t.meta))if(!c.has(e))throw new M(`[bindXStateAnimation] state "${t.stateId}" references clip "${e}", which is not present in the supplied clips map. Known clips: ${[...c.keys()].join(", ")||"(none)"}`,t.stateId);const p=new Map;function w(t,e,s){return W(e)!=="base"||!!e.boneMask||I(e)==="additive"?`${t}\0${s}`:s}for(const{stateId:t,meta:e}of m)for(const s of L(e)){const a=w(t,e,s);if(p.has(a))continue;const r=c.get(s);let h=e.boneMask?se(r,e.boneMask,f,t):r;(h!==r||a!==s)&&(h===r&&(h=r.clone()),h.name=`${r.name}@${W(e)}:${t}`),I(e)==="additive"?(Z.makeClipAdditive(h),h.blendMode=_):h.blendMode=ee,p.set(a,h)}const g=new Map;function K(t,e,s,a){let r=g.get(t);if(!r){const h=p.get(t);if(!h)throw new M(`[bindXStateAnimation] prepared clip "${t}" not found`);const v=i.clipAction(h);v.setEffectiveWeight(0),v.play(),r={action:v,clip:h},g.set(t,r)}return r.action.setLoop(e?ie:oe,1/0),r.action.clampWhenFinished=!e,r.action.timeScale=s,r.action.weight=a,r.action}function N(t){const e=o.selectParameters?o.selectParameters(t):t;return new Map(Object.entries(e??{}))}function D(t,e,s){return(S(e)?ce(z(e.blendTree),N(s)):[{clip:e.clip,weight:1}]).map(({clip:r,weight:h})=>({clip:r,weight:h,actionKey:w(t,e,r)}))}const y=new Map;let O=!1;function R(t,e,s){for(const a of t){if(a.actionKey===e)continue;const r=g.get(a.actionKey)?.action;r&&(s>0?r.fadeOut(s):r.setEffectiveWeight(0))}}function k(t,e){if(!S(t.meta))return;t.natural=D(t.stateId,t.meta,e);const s=B(t.meta);for(const a of t.natural)g.get(a.actionKey)?.action.setEffectiveWeight(a.weight*s)}function P(t,e,s){const a=W(e),r=y.get(a)??null,h=D(t,e,s),v=re(h),H=S(e)?!0:e.loop,Q=S(e)?1:e.speed,x=B(e);for(const b of h)K(b.actionKey,H,Q,x);const $=g.get(v.actionKey).action;$.reset().setEffectiveWeight(x);for(const b of h)b.actionKey!==v.actionKey&&g.get(b.actionKey).action.reset().setEffectiveWeight(0);const A=e.crossfade?.duration??0,U=e.crossfade?.warp??!1;if(!r)A>0&&$.fadeIn(A);else{R(r.natural,r.dominantActionKey,A);const b=g.get(r.dominantActionKey)?.action;b&&A>0?b.crossFadeTo($,A,U):(b?.setEffectiveWeight(0),$.setEffectiveWeight(x))}const j={layer:a,stateId:t,meta:e,natural:h,dominantActionKey:v.actionKey,crossfadeRemaining:A};y.set(a,j),S(e)&&A<=0&&k(j,s)}function q(t){return Object.keys(t.getMeta()).filter(e=>d.has(e))}function X(t){const e=new Map;for(const s of q(t)){const a=d.get(s),r=W(a),h=e.get(r);if(h)throw new M(`[bindXStateAnimation] animated states "${h}" and "${s}" are both active on layer "${r}". Give parallel regions distinct meta.animation.layer names.`,s);e.set(r,s)}for(const[s,a]of y)e.has(s)||(R(a.natural,void 0,0),y.delete(s));for(const[s,a]of e)y.get(s)?.stateId!==a&&P(a,d.get(a),t.context)}const F=n.getSnapshot();X(F);const G=n.subscribe(t=>{O||X(t)});function E(t){if(O)return;const e=t,s=n.getSnapshot().context;for(const a of y.values())a.crossfadeRemaining>0?(a.crossfadeRemaining=Math.max(0,a.crossfadeRemaining-e),a.crossfadeRemaining<=0&&k(a,s)):k(a,s);i.update(e)}const Y={tick:E,actor:n,getParameters:()=>N(n.getSnapshot().context),getActiveLayers:()=>[...y.values()].map(t=>({layer:t.layer,stateId:t.stateId,clips:t.natural.map(e=>e.clip),clipWeights:t.natural.map(e=>({clip:e.clip,weight:g.get(e.actionKey)?.action.getEffectiveWeight()??0})),weight:B(t.meta),blendMode:I(t.meta),...t.meta.boneMask?{boneMask:t.meta.boneMask}:{}})),dispose(){if(!O){O=!0,o.systems?.remove("animation",E),G.unsubscribe();for(const{action:t,clip:e}of g.values())t.stop(),i.uncacheAction(e,t.getRoot());g.clear(),y.clear()}}};return o.systems?.add("animation",E),Y}function ce(n,i){switch(n.type){case"1D":return le(n,i);case"2D":return fe(n,i);case"direct":return de(n);default:return n.children.map(c=>({clip:c.clip,weight:1/n.children.length}))}}function le(n,i){const c=Number(i.get(n.parameter)??0),o=[...n.children].sort((f,u)=>f.threshold-u.threshold),l=o.map(f=>({clip:f.clip,weight:0}));if(o.length===0)return l;if(o.length===1||c<=o[0].threshold)return l[0].weight=1,l;if(c>=o[o.length-1].threshold)return l[l.length-1].weight=1,l;for(let f=0;f<o.length-1;f++){const u=o[f],m=o[f+1];if(c>=u.threshold&&c<=m.threshold){const d=m.threshold-u.threshold,p=d>0?(c-u.threshold)/d:0;return l[f].weight=1-p,l[f+1].weight=p,l}}return l}function fe(n,i){const c=Number(i.get(n.parameter)??0),o=Number(i.get(n.parameterY??"")??0),l=n.children,f=l.map(d=>({clip:d.clip,weight:0}));let u=0;const m=[];for(const d of l){const p=c-d.threshold,w=o-(d.thresholdY??0),g=Math.sqrt(p*p+w*w),K=g<.001?1e3:1/g;m.push(K),u+=K}if(u>0)for(let d=0;d<f.length;d++)f[d].weight=m[d]/u;return f}function de(n){const i=n.children.map(o=>({clip:o.clip,weight:o.weight??0})),c=i.reduce((o,l)=>o+l.weight,0);if(c>0)for(const o of i)o.weight/=c;return i}export{M as AnimationBindingError,Se as bindXStateAnimation,ce as evaluateBlendTree,ae as machineOfXStateActor};
1
+ import{collectMachineAnimationMeta as V,clipNamesOf as L,isBlendTreeAnimationMeta as S,asBlendTreeDef as z}from"./xstate-animation-meta-DM_K9jo1.js";import{cW as J,p as Z,c as _,cQ as ee,l as te,dk as ne,cf as ie,cd as oe}from"./three.core-3arARmh6.js";import"./index-iW3HFEJB.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";class M extends Error{constructor(i,c){super(i),this.stateId=c,this.name="AnimationBindingError"}}function ae(n){const i=n.logic;if(i?.root)return i;const c=n.getSnapshot();if(c?.machine?.root)return c.machine;throw new M("[bindXStateAnimation] the actor exposes no state machine — only a state-machine actor carries the `meta.animation` this binder reads")}const W=n=>n.layer??"base",B=n=>n.weight??1,I=n=>n.blendMode??"override";function T(n){try{return ne.parseTrackName(n.name).nodeName??""}catch{const i=n.name.indexOf(".");return i<0?n.name:n.name.slice(0,i)}}function C(n,i,c){const o=new Set,l=[];for(const f of i){let u=!1;n.traverse(m=>{m.name===f&&(u=!0,m.traverse(d=>{d.name&&o.add(d.name)}))}),c.has(f)&&(u=!0,o.add(f)),u||l.push(f)}return{names:o,missing:l}}function se(n,i,c,o){const l=new Set(n.tracks.map(T)),f=i.include?C(c,i.include,l):void 0,u=i.exclude?C(c,i.exclude,l):void 0,m=[...f?.missing??[],...u?.missing??[]];if(m.length)throw new M(`[bindXStateAnimation] state "${o}" boneMask names unknown bones/objects: ${m.join(", ")}`,o);const d=n.tracks.filter(p=>{const w=T(p);return(!f||f.names.has(w))&&!u?.names.has(w)});if(d.length===0)throw new M(`[bindXStateAnimation] state "${o}" boneMask removes every track from clip "${n.name}"`,o);return new te(n.name,n.duration,d.map(p=>p.clone()))}function re(n){return n.reduce((i,c)=>c.weight>i.weight?c:i,n[0])}function Se(n,i,c,o={}){const l=i.getRoot(),f=o.root??(l instanceof J?l:void 0);if(!f)throw new M("[bindXStateAnimation] a THREE.Object3D `root` option is required when the mixer uses AnimationObjectGroup");const u=ae(n).root,m=V(u),d=new Map(m.map(t=>[t.stateId,t.meta]));for(const t of m)for(const e of L(t.meta))if(!c.has(e))throw new M(`[bindXStateAnimation] state "${t.stateId}" references clip "${e}", which is not present in the supplied clips map. Known clips: ${[...c.keys()].join(", ")||"(none)"}`,t.stateId);const p=new Map;function w(t,e,s){return W(e)!=="base"||!!e.boneMask||I(e)==="additive"?`${t}\0${s}`:s}for(const{stateId:t,meta:e}of m)for(const s of L(e)){const a=w(t,e,s);if(p.has(a))continue;const r=c.get(s);let h=e.boneMask?se(r,e.boneMask,f,t):r;(h!==r||a!==s)&&(h===r&&(h=r.clone()),h.name=`${r.name}@${W(e)}:${t}`),I(e)==="additive"?(Z.makeClipAdditive(h),h.blendMode=_):h.blendMode=ee,p.set(a,h)}const g=new Map;function K(t,e,s,a){let r=g.get(t);if(!r){const h=p.get(t);if(!h)throw new M(`[bindXStateAnimation] prepared clip "${t}" not found`);const v=i.clipAction(h);v.setEffectiveWeight(0),v.play(),r={action:v,clip:h},g.set(t,r)}return r.action.setLoop(e?ie:oe,1/0),r.action.clampWhenFinished=!e,r.action.timeScale=s,r.action.weight=a,r.action}function N(t){const e=o.selectParameters?o.selectParameters(t):t;return new Map(Object.entries(e??{}))}function D(t,e,s){return(S(e)?ce(z(e.blendTree),N(s)):[{clip:e.clip,weight:1}]).map(({clip:r,weight:h})=>({clip:r,weight:h,actionKey:w(t,e,r)}))}const y=new Map;let O=!1;function R(t,e,s){for(const a of t){if(a.actionKey===e)continue;const r=g.get(a.actionKey)?.action;r&&(s>0?r.fadeOut(s):r.setEffectiveWeight(0))}}function k(t,e){if(!S(t.meta))return;t.natural=D(t.stateId,t.meta,e);const s=B(t.meta);for(const a of t.natural)g.get(a.actionKey)?.action.setEffectiveWeight(a.weight*s)}function P(t,e,s){const a=W(e),r=y.get(a)??null,h=D(t,e,s),v=re(h),H=S(e)?!0:e.loop,Q=S(e)?1:e.speed,x=B(e);for(const b of h)K(b.actionKey,H,Q,x);const $=g.get(v.actionKey).action;$.reset().setEffectiveWeight(x);for(const b of h)b.actionKey!==v.actionKey&&g.get(b.actionKey).action.reset().setEffectiveWeight(0);const A=e.crossfade?.duration??0,U=e.crossfade?.warp??!1;if(!r)A>0&&$.fadeIn(A);else{R(r.natural,r.dominantActionKey,A);const b=g.get(r.dominantActionKey)?.action;b&&A>0?b.crossFadeTo($,A,U):(b?.setEffectiveWeight(0),$.setEffectiveWeight(x))}const j={layer:a,stateId:t,meta:e,natural:h,dominantActionKey:v.actionKey,crossfadeRemaining:A};y.set(a,j),S(e)&&A<=0&&k(j,s)}function q(t){return Object.keys(t.getMeta()).filter(e=>d.has(e))}function X(t){const e=new Map;for(const s of q(t)){const a=d.get(s),r=W(a),h=e.get(r);if(h)throw new M(`[bindXStateAnimation] animated states "${h}" and "${s}" are both active on layer "${r}". Give parallel regions distinct meta.animation.layer names.`,s);e.set(r,s)}for(const[s,a]of y)e.has(s)||(R(a.natural,void 0,0),y.delete(s));for(const[s,a]of e)y.get(s)?.stateId!==a&&P(a,d.get(a),t.context)}const F=n.getSnapshot();X(F);const G=n.subscribe(t=>{O||X(t)});function E(t){if(O)return;const e=t,s=n.getSnapshot().context;for(const a of y.values())a.crossfadeRemaining>0?(a.crossfadeRemaining=Math.max(0,a.crossfadeRemaining-e),a.crossfadeRemaining<=0&&k(a,s)):k(a,s);i.update(e)}const Y={tick:E,actor:n,getParameters:()=>N(n.getSnapshot().context),getActiveLayers:()=>[...y.values()].map(t=>({layer:t.layer,stateId:t.stateId,clips:t.natural.map(e=>e.clip),clipWeights:t.natural.map(e=>({clip:e.clip,weight:g.get(e.actionKey)?.action.getEffectiveWeight()??0})),weight:B(t.meta),blendMode:I(t.meta),...t.meta.boneMask?{boneMask:t.meta.boneMask}:{}})),dispose(){if(!O){O=!0,o.systems?.remove("animation",E),G.unsubscribe();for(const{action:t,clip:e}of g.values())t.stop(),i.uncacheAction(e,t.getRoot());g.clear(),y.clear()}}};return o.systems?.add("animation",E),Y}function ce(n,i){switch(n.type){case"1D":return le(n,i);case"2D":return fe(n,i);case"direct":return de(n);default:return n.children.map(c=>({clip:c.clip,weight:1/n.children.length}))}}function le(n,i){const c=Number(i.get(n.parameter)??0),o=[...n.children].sort((f,u)=>f.threshold-u.threshold),l=o.map(f=>({clip:f.clip,weight:0}));if(o.length===0)return l;if(o.length===1||c<=o[0].threshold)return l[0].weight=1,l;if(c>=o[o.length-1].threshold)return l[l.length-1].weight=1,l;for(let f=0;f<o.length-1;f++){const u=o[f],m=o[f+1];if(c>=u.threshold&&c<=m.threshold){const d=m.threshold-u.threshold,p=d>0?(c-u.threshold)/d:0;return l[f].weight=1-p,l[f+1].weight=p,l}}return l}function fe(n,i){const c=Number(i.get(n.parameter)??0),o=Number(i.get(n.parameterY??"")??0),l=n.children,f=l.map(d=>({clip:d.clip,weight:0}));let u=0;const m=[];for(const d of l){const p=c-d.threshold,w=o-(d.thresholdY??0),g=Math.sqrt(p*p+w*w),K=g<.001?1e3:1/g;m.push(K),u+=K}if(u>0)for(let d=0;d<f.length;d++)f[d].weight=m[d]/u;return f}function de(n){const i=n.children.map(o=>({clip:o.clip,weight:o.weight??0})),c=i.reduce((o,l)=>o+l.weight,0);if(c>0)for(const o of i)o.weight/=c;return i}export{M as AnimationBindingError,Se as bindXStateAnimation,ce as evaluateBlendTree,ae as machineOfXStateActor};
@@ -1 +1 @@
1
- import{dY as b,dZ as u,t as o,u as l,v as n,w as c,bA as r,bz as m,by as f}from"./index-C5ZAyrKq.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";const d=o({clip:n().min(1).describe("Animation clip name this child plays"),threshold:r().describe("1D/2D blend position on the primary parameter axis"),thresholdY:r().optional().describe("2D blend position on the secondary parameter axis (2D blend trees only)"),weight:r().min(0).optional().describe('Explicit weight for "direct" blend trees (ignored by 1D/2D)')}).strict(),y=o({type:c("1D").describe("Interpolates linearly between sorted children by threshold"),parameter:n().min(1).describe("Context/selector value driving the blend"),children:l(d).min(2,"1D blend tree needs at least 2 children to interpolate between")}).strict(),v=o({type:c("2D").describe("Inverse-distance-weights children by (parameter, parameterY) position"),parameter:n().min(1).describe("Primary axis context/selector value"),parameterY:n().min(1).describe("Secondary axis context/selector value"),children:l(d.extend({thresholdY:r()})).min(1,"2D blend tree needs at least 1 child")}).strict(),A=o({type:c("direct").describe("Each child has an explicit weight, normalized to sum to 1"),parameter:n().default(""),children:l(d.extend({weight:r().min(0)})).min(1,"direct blend tree needs at least 1 child")}).strict(),g=b("type",[y,v,A]);function P(e){return e}const p=o({duration:r().min(0).default(0).describe("Seconds to blend from the previously active clip into this state on entry, applied via native `AnimationAction.crossFadeTo`/`fadeIn` (E2). 0 = instant activation, no fade."),warp:m().default(!1).describe("Passed through to AnimationAction.crossFadeTo's `warp` param — linearly warps timeScale across the two clips during the blend so differing clip lengths line up. Default false.")}).strict().describe("Blend-in/out/crossfade timing for entering this state"),x=o({include:l(n().min(1)).min(1).optional().describe("Bone/object names whose complete descendant subtrees are retained"),exclude:l(n().min(1)).min(1).optional().describe("Bone/object names whose complete descendant subtrees are removed")}).strict().refine(e=>!!(e.include?.length||e.exclude?.length),{message:"boneMask needs at least one include or exclude bone name"}).describe("Filters animation tracks by named Object3D/Bone subtrees"),h={layer:n().min(1).optional().describe("Composition layer name; omitted means the single base layer"),weight:r().min(0).max(1).optional().describe("Layer weight multiplier from 0 to 1; defaults to 1"),blendMode:f(["override","additive"]).optional().describe("Native Three normal/override or additive action blending; defaults to override"),boneMask:x.optional().describe("Optional include/exclude filter applied to every clip track in this state")},w=o({clip:n().min(1).describe("Single clip to play while this XState state is active"),loop:m().default(!0).describe("Loop the clip (THREE.LoopRepeat) vs play once (THREE.LoopOnce, clamped on last frame)"),speed:r().positive().default(1).describe("Playback speed multiplier (AnimationAction.timeScale)"),crossfade:p.optional(),...h}).strict(),S=o({blendTree:g.describe("Multiple clips blended by a live context/selector-driven parameter"),crossfade:p.optional(),...h}).strict(),D=u([w,S]);function M(e){return"clip"in e}function $(e){return"blendTree"in e}class T extends Error{constructor(a,i,t){super(a),this.stateId=i,this.issues=t,this.name="AnimationMetaValidationError"}}function B(e,a){const i=D.safeParse(a);if(!i.success){const t=i.error.issues.map(s=>`${s.path.length?s.path.join("."):"(root)"}: ${s.message}`).join("; ");throw new T(`[xstate-animation] invalid meta.animation for state "${e}": ${t}`,e,i.error.issues)}return i.data}function R(e){const a=[],i=t=>{t.meta&&"animation"in t.meta&&t.meta.animation!==void 0&&a.push({stateId:t.id,meta:B(t.id,t.meta.animation)});for(const s of Object.values(t.states??{}))i(s)};return i(e),a}function z(e){return M(e)?[e.clip]:e.blendTree.children.map(a=>a.clip)}export{g as AnimationBlendTreeSchema,T as AnimationMetaValidationError,D as StateAnimationMetaSchema,P as asBlendTreeDef,z as clipNamesOf,R as collectMachineAnimationMeta,$ as isBlendTreeAnimationMeta,M as isClipAnimationMeta,B as parseStateAnimationMeta};
1
+ import{dY as b,dZ as u,t as o,u as l,v as n,w as c,bA as r,bz as m,by as f}from"./index-iW3HFEJB.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";const d=o({clip:n().min(1).describe("Animation clip name this child plays"),threshold:r().describe("1D/2D blend position on the primary parameter axis"),thresholdY:r().optional().describe("2D blend position on the secondary parameter axis (2D blend trees only)"),weight:r().min(0).optional().describe('Explicit weight for "direct" blend trees (ignored by 1D/2D)')}).strict(),y=o({type:c("1D").describe("Interpolates linearly between sorted children by threshold"),parameter:n().min(1).describe("Context/selector value driving the blend"),children:l(d).min(2,"1D blend tree needs at least 2 children to interpolate between")}).strict(),v=o({type:c("2D").describe("Inverse-distance-weights children by (parameter, parameterY) position"),parameter:n().min(1).describe("Primary axis context/selector value"),parameterY:n().min(1).describe("Secondary axis context/selector value"),children:l(d.extend({thresholdY:r()})).min(1,"2D blend tree needs at least 1 child")}).strict(),A=o({type:c("direct").describe("Each child has an explicit weight, normalized to sum to 1"),parameter:n().default(""),children:l(d.extend({weight:r().min(0)})).min(1,"direct blend tree needs at least 1 child")}).strict(),g=b("type",[y,v,A]);function P(e){return e}const p=o({duration:r().min(0).default(0).describe("Seconds to blend from the previously active clip into this state on entry, applied via native `AnimationAction.crossFadeTo`/`fadeIn` (E2). 0 = instant activation, no fade."),warp:m().default(!1).describe("Passed through to AnimationAction.crossFadeTo's `warp` param — linearly warps timeScale across the two clips during the blend so differing clip lengths line up. Default false.")}).strict().describe("Blend-in/out/crossfade timing for entering this state"),x=o({include:l(n().min(1)).min(1).optional().describe("Bone/object names whose complete descendant subtrees are retained"),exclude:l(n().min(1)).min(1).optional().describe("Bone/object names whose complete descendant subtrees are removed")}).strict().refine(e=>!!(e.include?.length||e.exclude?.length),{message:"boneMask needs at least one include or exclude bone name"}).describe("Filters animation tracks by named Object3D/Bone subtrees"),h={layer:n().min(1).optional().describe("Composition layer name; omitted means the single base layer"),weight:r().min(0).max(1).optional().describe("Layer weight multiplier from 0 to 1; defaults to 1"),blendMode:f(["override","additive"]).optional().describe("Native Three normal/override or additive action blending; defaults to override"),boneMask:x.optional().describe("Optional include/exclude filter applied to every clip track in this state")},w=o({clip:n().min(1).describe("Single clip to play while this XState state is active"),loop:m().default(!0).describe("Loop the clip (THREE.LoopRepeat) vs play once (THREE.LoopOnce, clamped on last frame)"),speed:r().positive().default(1).describe("Playback speed multiplier (AnimationAction.timeScale)"),crossfade:p.optional(),...h}).strict(),S=o({blendTree:g.describe("Multiple clips blended by a live context/selector-driven parameter"),crossfade:p.optional(),...h}).strict(),D=u([w,S]);function M(e){return"clip"in e}function $(e){return"blendTree"in e}class T extends Error{constructor(a,i,t){super(a),this.stateId=i,this.issues=t,this.name="AnimationMetaValidationError"}}function B(e,a){const i=D.safeParse(a);if(!i.success){const t=i.error.issues.map(s=>`${s.path.length?s.path.join("."):"(root)"}: ${s.message}`).join("; ");throw new T(`[xstate-animation] invalid meta.animation for state "${e}": ${t}`,e,i.error.issues)}return i.data}function R(e){const a=[],i=t=>{t.meta&&"animation"in t.meta&&t.meta.animation!==void 0&&a.push({stateId:t.id,meta:B(t.id,t.meta.animation)});for(const s of Object.values(t.states??{}))i(s)};return i(e),a}function z(e){return M(e)?[e.clip]:e.blendTree.children.map(a=>a.clip)}export{g as AnimationBlendTreeSchema,T as AnimationMetaValidationError,D as StateAnimationMetaSchema,P as asBlendTreeDef,z as clipNamesOf,R as collectMachineAnimationMeta,$ as isBlendTreeAnimationMeta,M as isClipAnimationMeta,B as parseStateAnimationMeta};
package/dist-node/cli.js CHANGED
@@ -244,7 +244,7 @@ var init_client = __esm({
244
244
  * query engine. Omitted, the filename keeps its exact unnamed shape. */
245
245
  /* `opts.record` (the editor's `play --record <name>` command) — NAMES this run's recording
246
246
  * file. It does not ENABLE recording: every relayed play records, with no
247
- * flag (see `@volter/game`'s `src/play/play-recording.ts`). Omitted, the clip is named for
247
+ * flag (see `@volter/editor-game`'s `src/play/play-recording.ts`). Omitted, the clip is named for
248
248
  * the durable Gameplay Session; named, it becomes an explicit keepsake in
249
249
  * `.volter/recordings/<name>.webm`. */
250
250
  async play(opts) {
@@ -349,7 +349,7 @@ var init_client = __esm({
349
349
  /**
350
350
  * Unit 4 (live-front-door wave) — capture the RUNNING GAME (the editor's
351
351
  * `screenshot`'s wire leg). Sends the SAME `bridge-screenshot` relay op
352
- * `@volter/live`'s `RelayTransport.screenshot` (and therefore
352
+ * `@volter/game-live`'s `RelayTransport.screenshot` (and therefore
353
353
  * `game.screenshot()` on the relay path) already sends, so all three
354
354
  * surfaces composite the identical full game stack — canvas(es) plus the
355
355
  * HUD/react DOM layers — rather than any of them inventing a second,
@@ -367,7 +367,7 @@ var init_client = __esm({
367
367
  * refuses it with `BRIDGE_SCREENSHOT_STALE` rather than pass it off as
368
368
  * current. Setting this asks the relay to render exactly ONE deterministic
369
369
  * tick (`runTicks(1, {render:'last'})`) first — the same escape
370
- * `@volter/live`'s `RelayTransport.screenshot` has always used, which is why
370
+ * `@volter/game-live`'s `RelayTransport.screenshot` has always used, which is why
371
371
  * the editor's `eval` command could recover these frames while the editor's `screenshot` command could not.
372
372
  * Off by default: a caller who does not ask must never be handed a frame
373
373
  * that only exists because the capture drove the game.
@@ -472,7 +472,7 @@ var init_client = __esm({
472
472
  * the DEFINITION travels with the command (project data — see
473
473
  * `AssetPreviewShotSetDefinition`; the CLI resolves it from the registered
474
474
  * `project.<set>.previewShots` tool), and the editor's generic
475
- * capture engine renders it — see `packages/editor/src/asset-preview.ts`'s
475
+ * capture engine renders it — see `packages/editor-threejs/src/kit/asset-preview.ts`'s
476
476
  * `captureShotSetAssetPreview`. Throws (via `command`'s `{ok:false}`
477
477
  * unwrap) with a clear message naming the missing joint(s) when the asset
478
478
  * lacks a bone the definition requires.
@@ -829,14 +829,14 @@ var init_client = __esm({
829
829
  * {@link captureActiveDocument} photographs. NOT play-mode gated, and NOT
830
830
  * page automation: a target outside the active document's container is
831
831
  * refused by name. Design and scope contract:
832
- * `packages/editor/src/editor-document-probe.ts`.
832
+ * `packages/editor-sdk/src/kit/editor-document-probe.ts`.
833
833
  */
834
834
  async documentProbe(step) {
835
835
  return this.command({ type: "document-probe", step });
836
836
  }
837
837
  /**
838
838
  * Run a wire-carried step against the ACTIVE document's published context
839
- * (`packages/editor/src/document-context-registry.ts`) — the REPL door over
839
+ * (`packages/editor-sdk/src/kit/document-context-registry.ts`) — the REPL door over
840
840
  * an open document, in Edit mode. `src` is the step's own `toString()`;
841
841
  * same serialization contract as `page-script` (no closures survive).
842
842
  */
@@ -2310,7 +2310,7 @@ import { fileURLToPath as fileURLToPath2 } from "node:url";
2310
2310
  var package_default = {
2311
2311
  name: "@volter/game-editor",
2312
2312
  author: "Volter AI, Inc.",
2313
- version: "0.5.69",
2313
+ version: "0.5.71",
2314
2314
  publishConfig: {
2315
2315
  access: "public"
2316
2316
  },
@@ -2359,22 +2359,22 @@ var package_default = {
2359
2359
  }
2360
2360
  },
2361
2361
  dependencies: {
2362
- "@volter/editor-core": "0.5.69",
2363
- "@volter/editor-game": "0.5.69",
2364
- "@volter/editor-react": "0.5.69",
2365
- "@volter/editor-threejs": "0.5.69",
2366
- "@volter/editor-xstate": "0.5.69",
2367
- "@volter/editor-blender": "0.1.12",
2368
- "@volter/dawproject": "0.5.69",
2369
- "@volter/editor-dawproject": "0.5.69",
2370
- "@volter/blender-engine": "0.1.10",
2371
- "@volter/editor-project": "0.5.69",
2372
- "@volter/editor-sdk": "0.5.69",
2373
- "@volter/editor-live": "0.5.69",
2374
- "@volter/game-live": "0.5.69",
2362
+ "@volter/editor-core": "0.5.71",
2363
+ "@volter/editor-game": "0.5.71",
2364
+ "@volter/editor-react": "0.5.71",
2365
+ "@volter/editor-threejs": "0.5.71",
2366
+ "@volter/editor-xstate": "0.5.71",
2367
+ "@volter/editor-blender": "0.1.13",
2368
+ "@volter/dawproject": "0.5.71",
2369
+ "@volter/editor-dawproject": "0.5.71",
2370
+ "@volter/blender-engine": "0.1.11",
2371
+ "@volter/editor-project": "0.5.71",
2372
+ "@volter/editor-sdk": "0.5.71",
2373
+ "@volter/editor-live": "0.5.71",
2374
+ "@volter/game-live": "0.5.71",
2375
2375
  "@modelcontextprotocol/sdk": "1.30.0",
2376
- "@volter/game-runtime": "0.5.69",
2377
- "@volter/threejs-runtime": "0.5.69",
2376
+ "@volter/game-runtime": "0.5.71",
2377
+ "@volter/threejs-runtime": "0.5.71",
2378
2378
  undici: "7.29.1",
2379
2379
  typescript: "5.9.3",
2380
2380
  "@colyseus/schema": "^4.0.14",
@@ -2665,9 +2665,9 @@ function withEditorDeclaration(source, declaration2) {
2665
2665
  return `${imports}${source.replace("defineAdapter({", `defineAdapter({
2666
2666
  ${editor}`)}`;
2667
2667
  }
2668
- var MODELS_AGENTS_CONTRACT = `# AGENTS.md \u2014 VOLTER Models Project
2668
+ var MODELS_AGENTS_CONTRACT = `# AGENTS.md \u2014 Volter Models Project
2669
2669
 
2670
- A standalone modeling project built with VOLTER \u2014 Blender itself, compiled to
2670
+ A standalone modeling project built with Volter \u2014 Blender itself, compiled to
2671
2671
  WebAssembly and running headless in the editor tab's worker, over this
2672
2672
  project's own \`.blend\` files. Work here, not in the engine repo. The editor
2673
2673
  is the authoring and verification surface; nothing here plays.
@@ -5244,7 +5244,7 @@ function assertDevelopmentLog(targetDir) {
5244
5244
  const path = join4(targetDir, PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH);
5245
5245
  if (!existsSync3(path)) {
5246
5246
  throw new Error(
5247
- `Scaffolded project is missing ${PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH}; restore it from the VOLTER starter template`
5247
+ `Scaffolded project is missing ${PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH}; restore it from the Volter starter template`
5248
5248
  );
5249
5249
  }
5250
5250
  }
@@ -5301,7 +5301,7 @@ function writeExampleReadme(targetDir, projectName, exampleId) {
5301
5301
  path,
5302
5302
  `# ${projectName}
5303
5303
 
5304
- An editable standalone VOLTER project scaffolded from the \`${exampleId ?? "example"}\` reference. Its gameplay source and assets were copied unchanged; this folder is now your project.
5304
+ An editable standalone Volter project scaffolded from the \`${exampleId ?? "example"}\` reference. Its gameplay source and assets were copied unchanged; this folder is now your project.
5305
5305
 
5306
5306
  \`\`\`bash
5307
5307
  npm run dev # open/reuse the visual editor
@@ -5769,7 +5769,7 @@ function ensureReactDedupe(content) {
5769
5769
  if (!/resolve:\s*{/.test(content)) return content;
5770
5770
  return content.replace(
5771
5771
  /resolve:\s*{/,
5772
- "resolve: {\n // react/react-dom dedupe (GH #123): see packages/editor/template/vite.config.ts's\n // matching comment for the dual-React-instance root cause this avoids.\n dedupe: ['react', 'react-dom'],"
5772
+ "resolve: {\n // react/react-dom dedupe (GH #123): see packages/game-editor/template/vite.config.ts's\n // matching comment for the dual-React-instance root cause this avoids.\n dedupe: ['react', 'react-dom'],"
5773
5773
  );
5774
5774
  }
5775
5775
  function rewriteIndexHtml(targetDir, name) {
@@ -6182,7 +6182,7 @@ function resolveWorktreeIdentity(projectRoot) {
6182
6182
  };
6183
6183
  }
6184
6184
 
6185
- // ../editor-core/dist/server/chunk-C7HWTZ6G.js
6185
+ // ../editor-core/dist/server/chunk-4QZTWRIK.js
6186
6186
  import {
6187
6187
  mkdirSync as mkdirSync5,
6188
6188
  readdirSync as readdirSync4,
@@ -6294,7 +6294,7 @@ function canonicalizeProjectPath(p) {
6294
6294
  }
6295
6295
  }
6296
6296
 
6297
- // ../editor-core/dist/server/chunk-4EX3ZYKI.js
6297
+ // ../editor-core/dist/server/chunk-RCSH7YYG.js
6298
6298
  import { createServer } from "node:net";
6299
6299
  import { execFileSync as execFileSync3 } from "node:child_process";
6300
6300
  async function loopbackPortFree(port) {
@@ -6650,7 +6650,7 @@ var PRODUCT_INSTALL_LINES = [
6650
6650
  " npm install --save-dev @volter/model-editor",
6651
6651
  " npm install --save-dev @volter/game-editor"
6652
6652
  ];
6653
- var PRODUCT_CREATE_LINES = [" npx @volter/editor create <name>"];
6653
+ var PRODUCT_CREATE_LINES = [" npx @volter/editor-core create <name>"];
6654
6654
  var PRODUCT_COLOR_THEMES = ["dark", "light"];
6655
6655
  function readProductManifest(packageDir) {
6656
6656
  const manifestPath = join8(packageDir, "package.json");
@@ -7463,7 +7463,7 @@ async function currentPageErrors(serverUrl) {
7463
7463
  }
7464
7464
  }
7465
7465
 
7466
- // ../editor-core/dist/server/chunk-RWQATMGM.js
7466
+ // ../editor-core/dist/server/chunk-UUZ3H4AP.js
7467
7467
  import { Agent, fetch as nodeFetch } from "undici";
7468
7468
  function createDispatcher(timeoutMs) {
7469
7469
  return new Agent({ headersTimeout: timeoutMs, bodyTimeout: timeoutMs });
@@ -7681,7 +7681,7 @@ var EditorClient = class {
7681
7681
  * query engine. Omitted, the filename keeps its exact unnamed shape. */
7682
7682
  /* `opts.record` (the editor's `play --record <name>` command) — NAMES this run's recording
7683
7683
  * file. It does not ENABLE recording: every relayed play records, with no
7684
- * flag (see `@volter/game`'s `src/play/play-recording.ts`). Omitted, the clip is named for
7684
+ * flag (see `@volter/editor-game`'s `src/play/play-recording.ts`). Omitted, the clip is named for
7685
7685
  * the durable Gameplay Session; named, it becomes an explicit keepsake in
7686
7686
  * `.volter/recordings/<name>.webm`. */
7687
7687
  async play(opts) {
@@ -7786,7 +7786,7 @@ var EditorClient = class {
7786
7786
  /**
7787
7787
  * Unit 4 (live-front-door wave) — capture the RUNNING GAME (the editor's
7788
7788
  * `screenshot`'s wire leg). Sends the SAME `bridge-screenshot` relay op
7789
- * `@volter/live`'s `RelayTransport.screenshot` (and therefore
7789
+ * `@volter/game-live`'s `RelayTransport.screenshot` (and therefore
7790
7790
  * `game.screenshot()` on the relay path) already sends, so all three
7791
7791
  * surfaces composite the identical full game stack — canvas(es) plus the
7792
7792
  * HUD/react DOM layers — rather than any of them inventing a second,
@@ -7804,7 +7804,7 @@ var EditorClient = class {
7804
7804
  * refuses it with `BRIDGE_SCREENSHOT_STALE` rather than pass it off as
7805
7805
  * current. Setting this asks the relay to render exactly ONE deterministic
7806
7806
  * tick (`runTicks(1, {render:'last'})`) first — the same escape
7807
- * `@volter/live`'s `RelayTransport.screenshot` has always used, which is why
7807
+ * `@volter/game-live`'s `RelayTransport.screenshot` has always used, which is why
7808
7808
  * the editor's `eval` command could recover these frames while the editor's `screenshot` command could not.
7809
7809
  * Off by default: a caller who does not ask must never be handed a frame
7810
7810
  * that only exists because the capture drove the game.
@@ -7909,7 +7909,7 @@ var EditorClient = class {
7909
7909
  * the DEFINITION travels with the command (project data — see
7910
7910
  * `AssetPreviewShotSetDefinition`; the CLI resolves it from the registered
7911
7911
  * `project.<set>.previewShots` tool), and the editor's generic
7912
- * capture engine renders it — see `packages/editor/src/asset-preview.ts`'s
7912
+ * capture engine renders it — see `packages/editor-threejs/src/kit/asset-preview.ts`'s
7913
7913
  * `captureShotSetAssetPreview`. Throws (via `command`'s `{ok:false}`
7914
7914
  * unwrap) with a clear message naming the missing joint(s) when the asset
7915
7915
  * lacks a bone the definition requires.
@@ -8266,14 +8266,14 @@ var EditorClient = class {
8266
8266
  * {@link captureActiveDocument} photographs. NOT play-mode gated, and NOT
8267
8267
  * page automation: a target outside the active document's container is
8268
8268
  * refused by name. Design and scope contract:
8269
- * `packages/editor/src/editor-document-probe.ts`.
8269
+ * `packages/editor-sdk/src/kit/editor-document-probe.ts`.
8270
8270
  */
8271
8271
  async documentProbe(step) {
8272
8272
  return this.command({ type: "document-probe", step });
8273
8273
  }
8274
8274
  /**
8275
8275
  * Run a wire-carried step against the ACTIVE document's published context
8276
- * (`packages/editor/src/document-context-registry.ts`) — the REPL door over
8276
+ * (`packages/editor-sdk/src/kit/document-context-registry.ts`) — the REPL door over
8277
8277
  * an open document, in Edit mode. `src` is the step's own `toString()`;
8278
8278
  * same serialization contract as `page-script` (no closures survive).
8279
8279
  */
@@ -8629,11 +8629,11 @@ var RELAY_COMMANDS = {
8629
8629
  "close-asset-tab": alwaysRefresh(),
8630
8630
  "toggle-command-palette": noDerivedRefresh(),
8631
8631
  "toggle-console": noDerivedRefresh(),
8632
- // RELOAD THE EDITOR PAGE — `@volter/live`'s `page.reload()`, the one page verb
8632
+ // RELOAD THE EDITOR PAGE — `@volter/game-live`'s `page.reload()`, the one page verb
8633
8633
  // no step can express. It is the HOST's, not a package's: reloading the tab
8634
- // is what the tab is, and until walk 5 it was a `@volter/game` command
8634
+ // is what the tab is, and until walk 5 it was a `@volter/editor-game` command
8635
8635
  // contribution, so a project without that package — every model project —
8636
- // answered `unknown command type "page-reload"` for a door `@volter/live`
8636
+ // answered `unknown command type "page-reload"` for a door `@volter/game-live`
8637
8637
  // documents as general (measured on a `model-editor create` scaffold,
8638
8638
  // 2026-09-21). The handler schedules the navigation for the next task so
8639
8639
  // this ack can travel before the channel is torn down; the client waits for
@@ -8667,7 +8667,7 @@ var RELAY_COMMANDS = {
8667
8667
  "set-inspection-field": alwaysRefresh(3e4),
8668
8668
  "remove-inspection-field": alwaysRefresh(3e4),
8669
8669
  // `extract-component` and `fork-component` left this table with their menus
8670
- // (`@volter/game/contributions/component-verbs.command.ts`), which carries
8670
+ // (`@volter/editor-game/contributions/component-verbs.command.ts`), which carries
8671
8671
  // both budgets forward row for row.
8672
8672
  // The hierarchy context menu's structure verbs, over the control door. Every
8673
8673
  // one of them rewrites the game's own source, so they refresh like a write.
@@ -8706,7 +8706,7 @@ var RELAY_COMMANDS = {
8706
8706
  // Object3D document's orbit/turntable/frame, the viewport photograph and the
8707
8707
  // display and transform toggles — are its own command contribution
8708
8708
  // (`viewport-commands.ts`), each budget on its contributed row.
8709
- // The BLENDER lane's ten verbs are `@volter/blender`'s
8709
+ // The BLENDER lane's ten verbs are `@volter/editor-blender`'s
8710
8710
  // `contributions/blender.command.ts` (WORK.md §The workbench, item D) —
8711
8711
  // each row's budget travelled with it, onto the contributed spec the page
8712
8712
  // reports to the server. `capture-story-variants` made the same move, to the
@@ -253,9 +253,9 @@ function withEditorDeclaration(source, declaration2) {
253
253
  return `${imports}${source.replace("defineAdapter({", `defineAdapter({
254
254
  ${editor}`)}`;
255
255
  }
256
- var MODELS_AGENTS_CONTRACT = `# AGENTS.md \u2014 VOLTER Models Project
256
+ var MODELS_AGENTS_CONTRACT = `# AGENTS.md \u2014 Volter Models Project
257
257
 
258
- A standalone modeling project built with VOLTER \u2014 Blender itself, compiled to
258
+ A standalone modeling project built with Volter \u2014 Blender itself, compiled to
259
259
  WebAssembly and running headless in the editor tab's worker, over this
260
260
  project's own \`.blend\` files. Work here, not in the engine repo. The editor
261
261
  is the authoring and verification surface; nothing here plays.
@@ -2695,7 +2695,7 @@ function assertDevelopmentLog(targetDir) {
2695
2695
  const path = join4(targetDir, PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH);
2696
2696
  if (!existsSync3(path)) {
2697
2697
  throw new Error(
2698
- `Scaffolded project is missing ${PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH}; restore it from the VOLTER starter template`
2698
+ `Scaffolded project is missing ${PROJECT_DEVELOPMENT_LOG_RELATIVE_PATH}; restore it from the Volter starter template`
2699
2699
  );
2700
2700
  }
2701
2701
  }
@@ -2752,7 +2752,7 @@ function writeExampleReadme(targetDir, projectName, exampleId) {
2752
2752
  path,
2753
2753
  `# ${projectName}
2754
2754
 
2755
- An editable standalone VOLTER project scaffolded from the \`${exampleId ?? "example"}\` reference. Its gameplay source and assets were copied unchanged; this folder is now your project.
2755
+ An editable standalone Volter project scaffolded from the \`${exampleId ?? "example"}\` reference. Its gameplay source and assets were copied unchanged; this folder is now your project.
2756
2756
 
2757
2757
  \`\`\`bash
2758
2758
  npm run dev # open/reuse the visual editor
@@ -3134,7 +3134,7 @@ function ensureReactDedupe(content) {
3134
3134
  if (!/resolve:\s*{/.test(content)) return content;
3135
3135
  return content.replace(
3136
3136
  /resolve:\s*{/,
3137
- "resolve: {\n // react/react-dom dedupe (GH #123): see packages/editor/template/vite.config.ts's\n // matching comment for the dual-React-instance root cause this avoids.\n dedupe: ['react', 'react-dom'],"
3137
+ "resolve: {\n // react/react-dom dedupe (GH #123): see packages/game-editor/template/vite.config.ts's\n // matching comment for the dual-React-instance root cause this avoids.\n dedupe: ['react', 'react-dom'],"
3138
3138
  );
3139
3139
  }
3140
3140
  function rewriteIndexHtml(targetDir, name) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@volter/game-editor",
3
3
  "author": "Volter AI, Inc.",
4
- "version": "0.5.69",
4
+ "version": "0.5.71",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -50,22 +50,22 @@
50
50
  }
51
51
  },
52
52
  "dependencies": {
53
- "@volter/editor-core": "0.5.69",
54
- "@volter/editor-game": "0.5.69",
55
- "@volter/editor-react": "0.5.69",
56
- "@volter/editor-threejs": "0.5.69",
57
- "@volter/editor-xstate": "0.5.69",
58
- "@volter/editor-blender": "0.1.12",
59
- "@volter/dawproject": "0.5.69",
60
- "@volter/editor-dawproject": "0.5.69",
61
- "@volter/blender-engine": "0.1.10",
62
- "@volter/editor-project": "0.5.69",
63
- "@volter/editor-sdk": "0.5.69",
64
- "@volter/editor-live": "0.5.69",
65
- "@volter/game-live": "0.5.69",
53
+ "@volter/editor-core": "0.5.71",
54
+ "@volter/editor-game": "0.5.71",
55
+ "@volter/editor-react": "0.5.71",
56
+ "@volter/editor-threejs": "0.5.71",
57
+ "@volter/editor-xstate": "0.5.71",
58
+ "@volter/editor-blender": "0.1.13",
59
+ "@volter/dawproject": "0.5.71",
60
+ "@volter/editor-dawproject": "0.5.71",
61
+ "@volter/blender-engine": "0.1.11",
62
+ "@volter/editor-project": "0.5.71",
63
+ "@volter/editor-sdk": "0.5.71",
64
+ "@volter/editor-live": "0.5.71",
65
+ "@volter/game-live": "0.5.71",
66
66
  "@modelcontextprotocol/sdk": "1.30.0",
67
- "@volter/game-runtime": "0.5.69",
68
- "@volter/threejs-runtime": "0.5.69",
67
+ "@volter/game-runtime": "0.5.71",
68
+ "@volter/threejs-runtime": "0.5.71",
69
69
  "undici": "7.29.1",
70
70
  "typescript": "5.9.3",
71
71
  "@colyseus/schema": "^4.0.14",
@@ -1,4 +1,4 @@
1
- # Detailed VOLTER game project reference
1
+ # Detailed Volter game project reference
2
2
 
3
3
  This is the procedural reference behind the compact project `AGENTS.md`
4
4
  router. Load only the section the current decision needs. The source files
@@ -322,7 +322,6 @@ After every slice:
322
322
  ```bash
323
323
  npm run check-idioms
324
324
  npm run typecheck
325
- npm run validate
326
325
  npm run validate-manifest
327
326
  npm run --silent volter -- status
328
327
  ```
@@ -1,9 +1,9 @@
1
1
  ---
2
2
  name: editor
3
- description: Launch, control, inspect, and verify a VOLTER game through its live visual editor. Use for editor sessions, Play mode, selection, hierarchy or inspector work, screenshots, status, logs, restart after setup changes, or the live playtest loop.
3
+ description: Launch, control, inspect, and verify a Volter game through its live visual editor. Use for editor sessions, Play mode, selection, hierarchy or inspector work, screenshots, status, logs, restart after setup changes, or the live playtest loop.
4
4
  ---
5
5
 
6
- # Control the VOLTER editor
6
+ # Control the Volter editor
7
7
 
8
8
  ## Open the observable session
9
9
 
@@ -1,4 +1,4 @@
1
1
  interface:
2
- display_name: "Control the VOLTER Editor"
3
- short_description: "Operate and inspect the live VOLTER editor"
4
- default_prompt: "Use $editor to open, control, inspect, and verify this game in the VOLTER editor."
2
+ display_name: "Control the Volter Editor"
3
+ short_description: "Operate and inspect the live Volter editor"
4
+ default_prompt: "Use $editor to open, control, inspect, and verify this game in the Volter editor."
@@ -39,7 +39,7 @@ npm run --silent volter -- eval --list # Everything you can drive — ask t
39
39
  ```
40
40
 
41
41
  **Port cross-talk:** the default editor port (5173) is shared across every
42
- VOLTER project on the machine. `npm run --silent volter -- edit .` never silently retargets a
42
+ Volter project on the machine. `npm run --silent volter -- edit .` never silently retargets a
43
43
  DIFFERENT project's already-running editor — if one is already open
44
44
  elsewhere, this one starts a second instance on a fresh free port and prints
45
45
  that URL instead (use `--switch` to retarget the existing one on purpose).
@@ -30,7 +30,7 @@ orders. Mounting the game is STEP ONE of seven, not the deliverable.
30
30
  objects; the navigation slots show the host-computation form (host BFS
31
31
  over the game's own public graph, labeled as the host's in so many
32
32
  words).
33
- - The contract shapes: `packages/project/src/adapter/ingest/game-contract.ts`
33
+ - The contract shapes: `packages/editor-project/src/adapter/ingest/game-contract.ts`
34
34
  (root · lifecycle · systems.commands/state/hierarchy · systemAdapters) and
35
35
  `contract-system-adapters.ts` (the projection that rejects malformed
36
36
  claims — a `present` missing required members, or an `empty` without