@volter/game-editor 0.5.91 → 0.5.93

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 (295) hide show
  1. package/BUNDLED_NOTICES +22 -22
  2. package/catalog/entries/blender.json +2 -2
  3. package/catalog/entries/music.json +2 -2
  4. package/dist/.vite/manifest.json +2182 -2182
  5. package/dist/assets/{AssetBudgetPanel-DoHols3L.js → AssetBudgetPanel-CqH8eFqI.js} +3 -3
  6. package/dist/assets/{AudioViewer-DJpWQMh1.js → AudioViewer-D9cLnL2x.js} +1 -1
  7. package/dist/assets/{CanvasBoardDocument-DUkSFZ3M.js → CanvasBoardDocument-VJp9kXIl.js} +1 -1
  8. package/dist/assets/{CanvasSceneViewport-lY7d92L2.js → CanvasSceneViewport-DdIbRDvz.js} +1 -1
  9. package/dist/assets/{ColorInput-7cF4Leq3.js → ColorInput-BTlGF3dp.js} +1 -1
  10. package/dist/assets/{ColorPicker-B2gSkOna.js → ColorPicker-DetzTdVS.js} +1 -1
  11. package/dist/assets/{EntityModelDocument-DFLHmO4x.js → EntityModelDocument-KBE9cE0B.js} +1 -1
  12. package/dist/assets/{EnvironmentAssetDocument-C_10a-a0.js → EnvironmentAssetDocument-CGphHTa4.js} +1 -1
  13. package/dist/assets/{GameplaySessionTimeline-BMz5GHq5.js → GameplaySessionTimeline-3O5-N0Mq.js} +1 -1
  14. package/dist/assets/{ImageViewer-CEtC82uC.js → ImageViewer-CPaNjp2K.js} +1 -1
  15. package/dist/assets/InspectorObjectPreview-CBddqApL.js +1 -0
  16. package/dist/assets/{JsonAssetDocument-BjmItF9c.js → JsonAssetDocument-DpuY20Xh.js} +1 -1
  17. package/dist/assets/{LiveModuleDocument-DxsfqWPz.js → LiveModuleDocument-DCUT8W_y.js} +1 -1
  18. package/dist/assets/{LutAssetDocument-BWgoofXc.js → LutAssetDocument-88jyvqQL.js} +1 -1
  19. package/dist/assets/{ModelAssetDocument-CCOUnfNZ.js → ModelAssetDocument-C6aKVWOk.js} +1 -1
  20. package/dist/assets/{NonThreeAuthoringBootstrap-U8pDO_5y.js → NonThreeAuthoringBootstrap-B68s1sia.js} +1 -1
  21. package/dist/assets/Object3DDocumentToolbar-D75tk2dW.js +1 -0
  22. package/dist/assets/Object3DDocumentViewport-Cd1mOnu4.js +2 -0
  23. package/dist/assets/{Object3DPreview-CbcdszHX.js → Object3DPreview-lFm8pGJR.js} +1 -1
  24. package/dist/assets/{OnlineAssetDetail-BaW-VQoM.js → OnlineAssetDetail-D-VEQl7S.js} +1 -1
  25. package/dist/assets/{PlayBar-Dt55-XQi.js → PlayBar-mfBxszI6.js} +1 -1
  26. package/dist/assets/{QuarksAssetDocument-B6NS06Qk.js → QuarksAssetDocument-DsDNaZXY.js} +1 -1
  27. package/dist/assets/{ReactCanvasControls-B3DU4o7S.js → ReactCanvasControls-BO6VQ4VE.js} +1 -1
  28. package/dist/assets/{RootSelectionOverlay-DGhqE3ru.js → RootSelectionOverlay-BDhYO7vB.js} +1 -1
  29. package/dist/assets/{ShaderAssetDocument-C6ew-WgT.js → ShaderAssetDocument-C-JfqCOP.js} +1 -1
  30. package/dist/assets/{ShadowEditor-BTWOn0NH.js → ShadowEditor-BDCAcPPT.js} +1 -1
  31. package/dist/assets/{SourceAssetViewer-BHIPNJyW.js → SourceAssetViewer-BMUvxLky.js} +1 -1
  32. package/dist/assets/{StageHost-CgQvlJ6q.js → StageHost-B6npzI_N.js} +2 -2
  33. package/dist/assets/{StoryPreviewMount-BODkiKx5.js → StoryPreviewMount-zuCAkhXk.js} +1 -1
  34. package/dist/assets/{ThreeBoardDocument-2Hape4Gq.js → ThreeBoardDocument-Cb5ShRia.js} +2 -2
  35. package/dist/assets/{ThreeIsolationSceneContent-DmeEOKni.js → ThreeIsolationSceneContent-DEXiCMdL.js} +1 -1
  36. package/dist/assets/{ToolObject3DPreview-BLUyNI0a.js → ToolObject3DPreview-DlXTrXSy.js} +1 -1
  37. package/dist/assets/{Toolbar-BaTvvAae.js → Toolbar-BcVhV4HO.js} +1 -1
  38. package/dist/assets/{TransientHint-Bf1GHsWL.js → TransientHint-8hS698wl.js} +1 -1
  39. package/dist/assets/{VideoViewer-D_aUwqjA.js → VideoViewer-C3zbvP1D.js} +1 -1
  40. package/dist/assets/{ViewportShadingMenu-C3thhpMD.js → ViewportShadingMenu-_NT1t1ki.js} +1 -1
  41. package/dist/assets/{active-ingest-CPY5d7Ae.js → active-ingest-DmggGh3n.js} +2 -2
  42. package/dist/assets/{animation-clock-BUG7-Hj6.js → animation-clock-BeIuDISw.js} +1 -1
  43. package/dist/assets/{animation-mixers.service-UqRHpBS5.js → animation-mixers.service-ClnMefdL.js} +1 -1
  44. package/dist/assets/{animation-timeline.utility-vjZNsvAC.js → animation-timeline.utility-wI1WPvyu.js} +1 -1
  45. package/dist/assets/{asset-budget-asset.menu-Btshx1dW.js → asset-budget-asset.menu-Dl9OG8Fh.js} +1 -1
  46. package/dist/assets/{asset-budget.action-Jb6hBA39.js → asset-budget.action-2KDAHN2u.js} +1 -1
  47. package/dist/assets/{asset-budget.document-BFWXwNI0.js → asset-budget.document-DoaC9QhG.js} +1 -1
  48. package/dist/assets/{asset-budget.menu-BTPSwcMa.js → asset-budget.menu-CEg_tRrU.js} +1 -1
  49. package/dist/assets/{asset-editor-persistence-CL-0YalT.js → asset-editor-persistence-B97D2j9V.js} +1 -1
  50. package/dist/assets/{asset-loaders-nDvCLina.js → asset-loaders-DZpoMJMz.js} +1 -1
  51. package/dist/assets/{asset-preview-BqLvTtnb.js → asset-preview-DV3GTIQp.js} +1 -1
  52. package/dist/assets/{audio-unlock.service-DnCb3tjQ.js → audio-unlock.service-DsLP5SwR.js} +1 -1
  53. package/dist/assets/{audio.utility-DlkiEBfp.js → audio.utility-BxXUdxvc.js} +1 -1
  54. package/dist/assets/autoplay.service-DIvQKM4s.js +1 -0
  55. package/dist/assets/{babylon-authoring-adapter-CnxkYjhp.js → babylon-authoring-adapter-DOzhuS5E.js} +1 -1
  56. package/dist/assets/{binding-resolver-cWcQuwXj.js → binding-resolver-BlBh8LwO.js} +2 -2
  57. package/dist/assets/{blender-node-editor.document-DIAjTz4F.js → blender-node-editor.document-DvHMzTBg.js} +1 -1
  58. package/dist/assets/{blender-properties-tab-DXuz6Cpg.js → blender-properties-tab-DRUdVFzY.js} +1 -1
  59. package/dist/assets/{blender-runtime-host-CJwNrADC.js → blender-runtime-host-BByeSIlt.js} +1 -1
  60. package/dist/assets/{blender-runtime-skin-6IzekhAd.js → blender-runtime-skin-BgzfURUq.js} +2 -2
  61. package/dist/assets/{blender-runtime.document-Rf7NwTan.js → blender-runtime.document-D87p65XR.js} +7 -7
  62. package/dist/assets/{blender-screenshot.menu-CZagx_wX.js → blender-screenshot.menu-DoZuxwnq.js} +1 -1
  63. package/dist/assets/{blender-timeline.document-DzhgQIDL.js → blender-timeline.document-WR5C1UGa.js} +1 -1
  64. package/dist/assets/{blender-uv-editor.document-ClearI2D.js → blender-uv-editor.document-fTHqxbQ0.js} +1 -1
  65. package/dist/assets/{blender-version.status-BkFPoDDf.js → blender-version.status-C2QHqECl.js} +1 -1
  66. package/dist/assets/{blender.command-BrtEn062.js → blender.command-DGS-5fDC.js} +1 -1
  67. package/dist/assets/{board-guides-D-k2cJcJ.js → board-guides-b_JfsCO5.js} +1 -1
  68. package/dist/assets/{bridge.command-CgLcpLfB.js → bridge.command-C8-Yd-JC.js} +3 -3
  69. package/dist/assets/{browserAll-CGgcubIt.js → browserAll-DM6xi90e.js} +1 -1
  70. package/dist/assets/{build-player.document-DhIDZKN-.js → build-player.document-BW6tw_fH.js} +1 -1
  71. package/dist/assets/{build-profiles.document-3r5ZhcB2.js → build-profiles.document-DSMeMXxo.js} +1 -1
  72. package/dist/assets/{build-progress.status-B1PXTSq7.js → build-progress.status-BeOlYvcH.js} +1 -1
  73. package/dist/assets/{build-session-ulklRzSk.js → build-session-jrsTLfm0.js} +1 -1
  74. package/dist/assets/{build.action-B5miC2Fi.js → build.action-TyqPgrOs.js} +1 -1
  75. package/dist/assets/{build.command-Cys5G5ZA.js → build.command-CSbsgzp4.js} +1 -1
  76. package/dist/assets/{build.header-BJLJN9mP.js → build.header-aN-vUtOe.js} +1 -1
  77. package/dist/assets/{build.menu-bi39YVfp.js → build.menu-CeIF200u.js} +1 -1
  78. package/dist/assets/{build.service-DC4h7GhW.js → build.service-CpvAEm48.js} +1 -1
  79. package/dist/assets/{camera-B9Y3RW7X.js → camera-DQk7Jyi0.js} +1 -1
  80. package/dist/assets/{camera-runtime.inspector-D22mhDzD.js → camera-runtime.inspector-ByloA_vO.js} +1 -1
  81. package/dist/assets/{canvas-design-mount-Bp3K3717.js → canvas-design-mount-DVWp3O_D.js} +3 -3
  82. package/dist/assets/{canvas-entry-runtime-BHOqndB_.js → canvas-entry-runtime-Ce7wP4vm.js} +2 -2
  83. package/dist/assets/{canvas-preview-frames-2tJZVdS2.js → canvas-preview-frames-CHeT2IAu.js} +1 -1
  84. package/dist/assets/{canvas-story-capture.service-DANEGQnC.js → canvas-story-capture.service-C8vmQA9c.js} +2 -2
  85. package/dist/assets/{capability-coverage-BOaPg0KC.js → capability-coverage-O6aDzS_g.js} +1 -1
  86. package/dist/assets/{collaboration-presence-CaATXsiz.js → collaboration-presence-crxzmNq2.js} +1 -1
  87. package/dist/assets/{collider-DZkp1rvK.js → collider-c4USWOsu.js} +1 -1
  88. package/dist/assets/{component-board.service-CwKm1aEc.js → component-board.service-B9lXv1G_.js} +2 -2
  89. package/dist/assets/{component-board.service-Bba7cD7r.js → component-board.service-BC-X4fpN.js} +2 -2
  90. package/dist/assets/{component-board.service-CDeqmtPt.js → component-board.service-CXaTAE3i.js} +2 -2
  91. package/dist/assets/{component-contracts.service-kh4-IF8j.js → component-contracts.service-B7TyW4yG.js} +1 -1
  92. package/dist/assets/{component-instance-root-JAQpC4Pi.js → component-instance-root-C1Xyh79V.js} +1 -1
  93. package/dist/assets/{component-verbs.command-DNG8KytX.js → component-verbs.command-_1qrRMBb.js} +1 -1
  94. package/dist/assets/{component-verbs.service-CQCmsdNk.js → component-verbs.service-DiGB6WpZ.js} +1 -1
  95. package/dist/assets/{config-D8XyIZPl.js → config-b-yIYDNm.js} +2 -2
  96. package/dist/assets/{configurations-Bzh9kmrk.js → configurations-Nuyn3MCc.js} +1 -1
  97. package/dist/assets/{connection.status-ChQR4f5Y.js → connection.status-DsqpfunN.js} +1 -1
  98. package/dist/assets/{constraints.inspector-Ddo1UQNJ.js → constraints.inspector-D97NPk_2.js} +1 -1
  99. package/dist/assets/{content-bounds-B_xPBrsP.js → content-bounds-DetzUl3q.js} +1 -1
  100. package/dist/assets/{contract-system-adapters-C1oaetXB.js → contract-system-adapters-BOybM-Sv.js} +1 -1
  101. package/dist/assets/{coverage.service-DIQXHW6Q.js → coverage.service-C8DuZbAJ.js} +1 -1
  102. package/dist/assets/{create-runtime-BQdKNIfc.js → create-runtime-C232YTVD.js} +1 -1
  103. package/dist/assets/{curve-BEKFgt87.js → curve-DVwdpVlr.js} +1 -1
  104. package/dist/assets/{data-asset-BZA163so.js → data-asset-DWShrZTd.js} +1 -1
  105. package/dist/assets/{data-ref-BUMaOgK6.js → data-ref-mlP7PknV.js} +1 -1
  106. package/dist/assets/{debug-bridge-B8Do4Q6K.js → debug-bridge-BgNHixNJ.js} +1 -1
  107. package/dist/assets/{debug-registry-CoiJ_gHM.js → debug-registry-CS3ZmHpb.js} +1 -1
  108. package/dist/assets/{deferred-ingest-play-DJeWQ-He.js → deferred-ingest-play-Br7lD74w.js} +2 -2
  109. package/dist/assets/{design-time-canvas-mount-B_5sxSjq.js → design-time-canvas-mount-BxG0btu3.js} +2 -2
  110. package/dist/assets/{design-time-layers-Bspf2qH5.js → design-time-layers-C2fW3RP2.js} +1 -1
  111. package/dist/assets/{design-time-mount.service-038G1MnB.js → design-time-mount.service-CZpbFfg4.js} +2 -2
  112. package/dist/assets/{design-time-mount.service-BE5vpW1Y.js → design-time-mount.service-RwUW68DY.js} +2 -2
  113. package/dist/assets/{design-time-react-mount--CifCE6t.js → design-time-react-mount-DsV5z0NJ.js} +1 -1
  114. package/dist/assets/{document-preview-three-D46Hv_l-.js → document-preview-three-Cw1dnqQJ.js} +1 -1
  115. package/dist/assets/{dom-authoring-adapter-CI_qQmaE.js → dom-authoring-adapter-CCGflNez.js} +1 -1
  116. package/dist/assets/{draco3d-FJXe8NCw.js → draco3d-MAZHlZsV.js} +1 -1
  117. package/dist/assets/{edit-mode-audio.service-qKdc6y7a.js → edit-mode-audio.service-ir8WvTus.js} +1 -1
  118. package/dist/assets/{edit-mode-authoring-C0sf0ewd.js → edit-mode-authoring-CFh9mf99.js} +1 -1
  119. package/dist/assets/{edit-mode-networking.service-D-eLZBVJ.js → edit-mode-networking.service-KUb9s9m1.js} +1 -1
  120. package/dist/assets/{editor-api-DeTJ2F2f.js → editor-api-Di5jF1jM.js} +1 -1
  121. package/dist/assets/{editor-layers-B43PZgUF.js → editor-layers-JmP4C0fP.js} +1 -1
  122. package/dist/assets/{editor-shell-store-CW9Fjab9.js → editor-shell-store-BRBXaK6_.js} +1 -1
  123. package/dist/assets/{entity-object-C40NpVSX.js → entity-object-FbYj5hy6.js} +1 -1
  124. package/dist/assets/{extend-CB1ggOZp.js → extend-B8RJQ5RF.js} +1 -1
  125. package/dist/assets/{fork-menu-ByAv7gfK.js → fork-menu-Djl0ZpaE.js} +1 -1
  126. package/dist/assets/{frame-debugger-store-BOL6rL6i.js → frame-debugger-store-CKHjhO2u.js} +1 -1
  127. package/dist/assets/{game-contract-seams-Dq1YiGya.js → game-contract-seams-BfTLgo42.js} +1 -1
  128. package/dist/assets/{game-css-scope-transform-zF8z1rZz.js → game-css-scope-transform-Cj0iqoul.js} +1 -1
  129. package/dist/assets/{game-document.service-DlSkuYvA.js → game-document.service-C240l1eg.js} +1 -1
  130. package/dist/assets/{game-eval.command-Cnr70bCU.js → game-eval.command-CE54gmgT.js} +1 -1
  131. package/dist/assets/{game-module-access-Pz5cgPiz.js → game-module-access-BvOoy6np.js} +1 -1
  132. package/dist/assets/{game-network-D8nKKSRC.js → game-network-C7J9j85F.js} +3 -3
  133. package/dist/assets/{gameplay-export-FFcX1OzU.js → gameplay-export-BPVDdtiT.js} +1 -1
  134. package/dist/assets/{gameplay-replay-CVwLaTax.js → gameplay-replay-CMWloPvb.js} +1 -1
  135. package/dist/assets/{gameplay.command-64STQYm4.js → gameplay.command-BGYQD9oQ.js} +1 -1
  136. package/dist/assets/{generation-jobs-BOOUx41p.js → generation-jobs-BQRS91CG.js} +1 -1
  137. package/dist/assets/{generation.service-BJn-hOAW.js → generation.service-DYDb6ud0.js} +1 -1
  138. package/dist/assets/{generations-BuBWfmYF.js → generations-J9oJcT7T.js} +1 -1
  139. package/dist/assets/{generations.status-Cw7FBmHO.js → generations.status-7KG9Txty.js} +1 -1
  140. package/dist/assets/{hierarchy-marks-r1SCnl92.js → hierarchy-marks-DWnBwmhe.js} +1 -1
  141. package/dist/assets/{hosted-asset-materialization-CCfM8rX8.js → hosted-asset-materialization-BRC2G7NT.js} +1 -1
  142. package/dist/assets/{index-C5X85WM3.js → index--o2s6am1.js} +1 -1
  143. package/dist/assets/{index-CiKYIRrk.js → index-BO3sy09K.js} +1 -1
  144. package/dist/assets/{index-EO6Vl92s.js → index-BT8W9a7k.js} +266 -266
  145. package/dist/assets/{index-CRFTAXpT.js → index-BXMdqkmO.js} +1 -1
  146. package/dist/assets/{index-DNuUwvUR.js → index-BnDSegwv.js} +1 -1
  147. package/dist/assets/{index-DnZE2Fb2.js → index-BvBIQ7OC.js} +1 -1
  148. package/dist/assets/{index-tsU_SOUL.js → index-CIdT41XG.js} +1 -1
  149. package/dist/assets/{index-BTlpcjdl.js → index-DL2Takj5.js} +2 -2
  150. package/dist/assets/{index-CDTbPbQM.js → index-EWucKHMo.js} +1 -1
  151. package/dist/assets/{inference-diagnostics-18bkEAju.js → inference-diagnostics-C2jsr-K4.js} +1 -1
  152. package/dist/assets/{ingest-boot-viewport-BuSUroou.js → ingest-boot-viewport-DhLjnn8m.js} +1 -1
  153. package/dist/assets/{ingest-siblings-B3ExLPmT.js → ingest-siblings-nIImQgug.js} +1 -1
  154. package/dist/assets/{ingest-source-persistence-C2eN6TUG.js → ingest-source-persistence-BSy_j1I6.js} +1 -1
  155. package/dist/assets/{ingest.service-DPCT2mkC.js → ingest.service-BRJsVkle.js} +1 -1
  156. package/dist/assets/{inspect-BqpAh85y.js → inspect-CewZ8N7e.js} +1 -1
  157. package/dist/assets/instances.command-CLmaRUbS.js +1 -0
  158. package/dist/assets/{json-history-resource-BjCvVkMa.js → json-history-resource-Kth9eAdl.js} +1 -1
  159. package/dist/assets/{layered-pick-Ciu7uLFh.js → layered-pick-Ba5bN3pV.js} +1 -1
  160. package/dist/assets/{light-CXcgEBDG.js → light-CELsbQVq.js} +1 -1
  161. package/dist/assets/{live-project-verbs-BBbF8usb.js → live-project-verbs-puMj_ac5.js} +1 -1
  162. package/dist/assets/{machine.document-Bdci5A4S.js → machine.document-PU1D7pGw.js} +1 -1
  163. package/dist/assets/{machines.finder-CvEKAnGk.js → machines.finder-DC3vmPmt.js} +1 -1
  164. package/dist/assets/{material-ClpgTT47.js → material-Dzm1eZh1.js} +1 -1
  165. package/dist/assets/{material-factory-Df67vZ1z.js → material-factory-BgBGneoy.js} +1 -1
  166. package/dist/assets/{mesh-DkaFE4sY.js → mesh-BlgI7C6P.js} +1 -1
  167. package/dist/assets/{model-asset-sections.service-CBOHxNFe.js → model-asset-sections.service-itY21Ju0.js} +1 -1
  168. package/dist/assets/{model-inspection-DcL5cH7Y.js → model-inspection-CNvWXEly.js} +1 -1
  169. package/dist/assets/{model-thumbnail-C6YzkBEi.js → model-thumbnail-BOFnggyX.js} +1 -1
  170. package/dist/assets/{models.finder-DfEs64WT.js → models.finder-t8DwGJSQ.js} +1 -1
  171. package/dist/assets/{module-mode-f-SD3z04.js → module-mode-DlvLWvyZ.js} +2 -2
  172. package/dist/assets/{mount-canvas-ingest-root-BnxcPl2U.js → mount-canvas-ingest-root-BQ7FEyTX.js} +2 -2
  173. package/dist/assets/{mount-dom-ingest-root-CfwImvJz.js → mount-dom-ingest-root-DRIY0mwS.js} +2 -2
  174. package/dist/assets/{mount-ingest-root-Dh6Z1uso.js → mount-ingest-root-BgFa-gMa.js} +2 -2
  175. package/dist/assets/{mount-manifest-CAxRLPYT.js → mount-manifest-CNy0ulXi.js} +1 -1
  176. package/dist/assets/{mount-three-ingest-root-CoqxTpZB.js → mount-three-ingest-root-02iAM15N.js} +1 -1
  177. package/dist/assets/{mounted-authoring-DfEm9qgt.js → mounted-authoring-B4MQTZte.js} +1 -1
  178. package/dist/assets/{mounted-story-viewport-source-WBFaoqod.js → mounted-story-viewport-source-D1uicpwC.js} +1 -1
  179. package/dist/assets/{native-debug-module-piwWLOP6.js → native-debug-module-zuPnGFn7.js} +1 -1
  180. package/dist/assets/{navigation-DYa_HSby.js → navigation-DiBo4eih.js} +1 -1
  181. package/dist/assets/{navmesh.menu-B0MJEIPE.js → navmesh.menu-BfZu5XcC.js} +1 -1
  182. package/dist/assets/{navmesh.service-BpsPIRLZ.js → navmesh.service-DqXGRph3.js} +1 -1
  183. package/dist/assets/network-observer.service-D25O4Z1u.js +1 -0
  184. package/dist/assets/{network.utility-DMr-AxKs.js → network.utility-B9bsTu3h.js} +1 -1
  185. package/dist/assets/{object3d-document-session-registry-3YUZT4RT.js → object3d-document-session-registry-DOBWYBmc.js} +2 -2
  186. package/dist/assets/{oid-transform-DsAJ1P8o.js → oid-transform-AhgVgFiI.js} +1 -1
  187. package/dist/assets/{particles-vZ9UmSDz.js → particles-CnyBA4U4.js} +1 -1
  188. package/dist/assets/{pixi-authoring-adapter-QT0kN-JP.js → pixi-authoring-adapter-HA__hq94.js} +1 -1
  189. package/dist/assets/{pixi-live-write-target-DM9cdS1_.js → pixi-live-write-target-Bs9OTI_x.js} +1 -1
  190. package/dist/assets/{play.command-DH2eNjdZ.js → play.command-SXE_KYU-.js} +2 -2
  191. package/dist/assets/{presentation-VcgXp-GO.js → presentation-CrrrfvP9.js} +1 -1
  192. package/dist/assets/{product-x_cfmfQ9.js → product-7prSWXZy.js} +1 -1
  193. package/dist/assets/{profiler.action-C3xlnyom.js → profiler.action-Dd1_MPEk.js} +1 -1
  194. package/dist/assets/{profiler.menu-DSUi8xT3.js → profiler.menu-CwZGsLvP.js} +1 -1
  195. package/dist/assets/{profiler.utility-BRSMJoGZ.js → profiler.utility-CXhlEiq8.js} +1 -1
  196. package/dist/assets/{project-authoring-session-CwEQV0bP.js → project-authoring-session-Dxi88QnW.js} +2 -2
  197. package/dist/assets/{properties-bone-constraints.inspector-Ct1jO5Ue.js → properties-bone-constraints.inspector-DuDWHYs-.js} +1 -1
  198. package/dist/assets/{properties-bone.inspector-DxGQlndA.js → properties-bone.inspector-BCpk3uPl.js} +1 -1
  199. package/dist/assets/{properties-collection.inspector-lK30X7Jh.js → properties-collection.inspector-z8O9BBRd.js} +1 -1
  200. package/dist/assets/{properties-constraints.inspector-Da8piE2V.js → properties-constraints.inspector-4saiH8Ro.js} +1 -1
  201. package/dist/assets/{properties-data.inspector-WI4fuv2D.js → properties-data.inspector-CVDOVZny.js} +1 -1
  202. package/dist/assets/{properties-material.inspector-CQwIjVw1.js → properties-material.inspector-DZtnbfCQ.js} +1 -1
  203. package/dist/assets/{properties-modifiers.inspector-BzQAh_u0.js → properties-modifiers.inspector-PRa6MD_F.js} +1 -1
  204. package/dist/assets/{properties-object.inspector-Du6jNcII.js → properties-object.inspector-DFFp41qh.js} +1 -1
  205. package/dist/assets/{properties-output.inspector-BQzIXPdl.js → properties-output.inspector-CYJmwpKr.js} +1 -1
  206. package/dist/assets/{properties-particles.inspector-C-lSFNSf.js → properties-particles.inspector-BTB6ISve.js} +1 -1
  207. package/dist/assets/{properties-physics.inspector-CwC0aupw.js → properties-physics.inspector-CwxYUTIE.js} +1 -1
  208. package/dist/assets/{properties-render.inspector-D0P3nYYJ.js → properties-render.inspector-DUDAxNw2.js} +1 -1
  209. package/dist/assets/{properties-scene.inspector-bM362PAU.js → properties-scene.inspector-DNNmsuNN.js} +1 -1
  210. package/dist/assets/{properties-texture.inspector-8ucuWCLj.js → properties-texture.inspector-DD6bWfQ4.js} +1 -1
  211. package/dist/assets/{properties-view-layer.inspector-DWOu3YE3.js → properties-view-layer.inspector-CA235i54.js} +1 -1
  212. package/dist/assets/{properties-world.inspector-BDTb__xL.js → properties-world.inspector-CdTyWS-3.js} +1 -1
  213. package/dist/assets/{r3f-design-session-gQuaJFCS.js → r3f-design-session-mIAk6fZ_.js} +2 -2
  214. package/dist/assets/{r3f-physics-binding-CFwn2dZ0.js → r3f-physics-binding-DivDhpIZ.js} +1 -1
  215. package/dist/assets/{r3f-source-authoring-adapter-DhFdCSs7.js → r3f-source-authoring-adapter-BU7HGqw5.js} +1 -1
  216. package/dist/assets/{react-canvas-navigation-VKHmF9L9.js → react-canvas-navigation-DqwQuzs1.js} +1 -1
  217. package/dist/assets/{react-inspector.service-DheFnb_w.js → react-inspector.service-BO6zvtnm.js} +1 -1
  218. package/dist/assets/{react-story-board-BdHhG7gL.js → react-story-board-BIV6SjrH.js} +1 -1
  219. package/dist/assets/{react-three-rapier.esm-W_y4UeT-.js → react-three-rapier.esm-cTqJ0Ab9.js} +1 -1
  220. package/dist/assets/{react-world-authoring-adapter-Cey0R-Ml.js → react-world-authoring-adapter-C1Pf_Ti4.js} +1 -1
  221. package/dist/assets/{realm-services-Bw73w74M.js → realm-services-CLLV-0p7.js} +1 -1
  222. package/dist/assets/{reflection-probe-capture.inspector-Dqj4TwMY.js → reflection-probe-capture.inspector-B_A9WjRQ.js} +1 -1
  223. package/dist/assets/{registry-DCdpQPdB.js → registry-hs8ynXgD.js} +1 -1
  224. package/dist/assets/{relative-import-specifier-DjG-Lv03.js → relative-import-specifier-D8ICYdXp.js} +1 -1
  225. package/dist/assets/{render-env-D12b4e03.js → render-env-CCwOJnKi.js} +1 -1
  226. package/dist/assets/{render-features-w9Z-Cv_p.js → render-features-PxgXd53t.js} +1 -1
  227. package/dist/assets/{render-settings-CGDwkhhL.js → render-settings-DoSjRl16.js} +1 -1
  228. package/dist/assets/{resolve-three-Bl4aEdGL.js → resolve-three-CJYxqrQD.js} +3 -3
  229. package/dist/assets/{root-seam-contract-Dx597Ute.js → root-seam-contract-Hpt_EoHH.js} +1 -1
  230. package/dist/assets/{run-selection-D-nxwjch.js → run-selection-B28D0dVZ.js} +1 -1
  231. package/dist/assets/{scene-capture-BYzNQlcZ.js → scene-capture-BdnKEkty.js} +1 -1
  232. package/dist/assets/{scene-document.service-DvdbtjUB.js → scene-document.service-DNoSvWoe.js} +2 -2
  233. package/dist/assets/{scene-framing-zyo6Dgey.js → scene-framing-B-Zvn5pm.js} +1 -1
  234. package/dist/assets/{seeded-random-BcjdE8-O.js → seeded-random-BscHstMm.js} +1 -1
  235. package/dist/assets/{setup-renderer-BoEjWIJ6.js → setup-renderer-D2Jvr2h9.js} +1 -1
  236. package/dist/assets/{source-object3d-authoring-adapter-D-mc1Hsq.js → source-object3d-authoring-adapter-Dk4cjzFm.js} +1 -1
  237. package/dist/assets/{source-persistence-backend-DPS956_W.js → source-persistence-backend-Bs_c6UA-.js} +1 -1
  238. package/dist/assets/{stage-keyboard-DD-47U0X.js → stage-keyboard-DmoIXoIV.js} +1 -1
  239. package/dist/assets/{stage-overlay-set-jLin7LCZ.js → stage-overlay-set-iu8AeZPy.js} +1 -1
  240. package/dist/assets/{stage-presence-markers-BzL60lxC.js → stage-presence-markers-B_QEEO-M.js} +1 -1
  241. package/dist/assets/{stage-transform-tools-CXEtn6e_.js → stage-transform-tools-B4_Vna3u.js} +1 -1
  242. package/dist/assets/{standard-viewport-dressing-DzgsLMqH.js → standard-viewport-dressing-Cqc3upSK.js} +1 -1
  243. package/dist/assets/{state-watch.action-C0r205X2.js → state-watch.action-DwbqOYJb.js} +1 -1
  244. package/dist/assets/{state-watch.menu-CIOq9XcQ.js → state-watch.menu-C9pu3XfU.js} +1 -1
  245. package/dist/assets/{state-watch.utility-B5Mps4k8.js → state-watch.utility-SzNyBG5Z.js} +1 -1
  246. package/dist/assets/{story-capture-BL_OEjAJ.js → story-capture-RxFtvptE.js} +1 -1
  247. package/dist/assets/{story-documents-uyxMmUzs.js → story-documents-RnpVbpMP.js} +1 -1
  248. package/dist/assets/{story-documents.service-Cu17YnfS.js → story-documents.service-C7UNDFG9.js} +1 -1
  249. package/dist/assets/{story-documents.service-L9mW5dVf.js → story-documents.service-DFbzVaKv.js} +1 -1
  250. package/dist/assets/{story-media-presence-CsYCXCgg.js → story-media-presence-D8aagE7-.js} +1 -1
  251. package/dist/assets/{story-pixi-preview-BaS3gW36.js → story-pixi-preview-DD5zQqGj.js} +1 -1
  252. package/dist/assets/{story-presentation-Inb0tF8V.js → story-presentation-DCpop4w8.js} +1 -1
  253. package/dist/assets/{story-three-preview-N78COIhD.js → story-three-preview-CHq5WHPd.js} +2 -2
  254. package/dist/assets/{studio-environment-BRMTYTp1.js → studio-environment-ChEwdjoc.js} +1 -1
  255. package/dist/assets/{surface-state-l4D0tVlT.js → surface-state-CFqL5gLs.js} +1 -1
  256. package/dist/assets/{syntactic-prop-specs-DOQMV1SJ.js → syntactic-prop-specs-MmHU8Snh.js} +1 -1
  257. package/dist/assets/{team-playtest.service-CHIX8ZaT.js → team-playtest.service-BMRamJM8.js} +1 -1
  258. package/dist/assets/{three-DItubEyv.js → three-HBDNjMxy.js} +1 -1
  259. package/dist/assets/{three-authoring-adapter-jGnbMYIc.js → three-authoring-adapter-OKrj_Yfz.js} +1 -1
  260. package/dist/assets/three-authoring.service-DOFfbQ1i.js +2 -0
  261. package/dist/assets/{three-ingest-runtime-DlApOywz.js → three-ingest-runtime-DhyHlcLT.js} +1 -1
  262. package/dist/assets/{three-integration-lFHyckTb.js → three-integration-B_X1dRN3.js} +2 -2
  263. package/dist/assets/three-integration.service-Ddy-s__9.js +1 -0
  264. package/dist/assets/{three-projection-core-Bsu421K7.js → three-projection-core-BQjGIfYP.js} +1 -1
  265. package/dist/assets/{three-state-15gXjQ51.js → three-state-BPIdxcKm.js} +1 -1
  266. package/dist/assets/{three-story-capture.service-B369fV1j.js → three-story-capture.service-qwUNAWlj.js} +2 -2
  267. package/dist/assets/{three-story-model-D8xXaW4_.js → three-story-model-B6RT2tEb.js} +1 -1
  268. package/dist/assets/{three-viewport-presentation-DlCyoe_E.js → three-viewport-presentation-jvn1ownx.js} +5 -5
  269. package/dist/assets/{transform-mode-request-BT4Zmx_G.js → transform-mode-request-DSr__Uu7.js} +1 -1
  270. package/dist/assets/{transport-strip-DHbAk_5x.js → transport-strip-B3s-LzLC.js} +1 -1
  271. package/dist/assets/transport.header-CrVGCDtt.js +1 -0
  272. package/dist/assets/{tuples-BcU64Mu6.js → tuples-C31jYZT7.js} +1 -1
  273. package/dist/assets/{ui-board-document-CptsO8E6.js → ui-board-document-Cfpw8u3U.js} +2 -2
  274. package/dist/assets/{user-data-DnahhlAD.js → user-data-CqubllMS.js} +1 -1
  275. package/dist/assets/{utility-view-state-GfzV3cfg.js → utility-view-state-3zmxNFCA.js} +1 -1
  276. package/dist/assets/{viewport-door-Dbl8EH3p.js → viewport-door-BQlwQEp5.js} +1 -1
  277. package/dist/assets/{viewport-root-presentation-CG43sAj5.js → viewport-root-presentation-ds37zRH-.js} +1 -1
  278. package/dist/assets/{viewport-surface-status-C9vuKKQB.js → viewport-surface-status-CVu88cZ8.js} +1 -1
  279. package/dist/assets/{webworkerAll-DE92JZIw.js → webworkerAll-DfTIWQX5.js} +1 -1
  280. package/dist/assets/{workspace-arrangement-COs530TA.js → workspace-arrangement-B1xtK850.js} +1 -1
  281. package/dist/assets/{world-documents-80AAIyS9.js → world-documents-RmUr_mpg.js} +1 -1
  282. package/dist/assets/{world-root-stage-binding-umHFwInD.js → world-root-stage-binding-BAbAZClT.js} +1 -1
  283. package/dist/assets/{xstate-animation-binding-_aMqz-nR.js → xstate-animation-binding-D46iVstj.js} +1 -1
  284. package/dist/assets/{xstate-animation-meta-CzxfXjaY.js → xstate-animation-meta-DoZp29qk.js} +1 -1
  285. package/dist-node/cli.js +16 -16
  286. package/package.json +16 -16
  287. package/dist/assets/InspectorObjectPreview-CO8cF8ht.js +0 -1
  288. package/dist/assets/Object3DDocumentToolbar-CJE4T3cC.js +0 -1
  289. package/dist/assets/Object3DDocumentViewport-CmgIuzQv.js +0 -2
  290. package/dist/assets/autoplay.service-CJv46a1s.js +0 -1
  291. package/dist/assets/instances.command-BTMfzHFj.js +0 -1
  292. package/dist/assets/network-observer.service-CBgzPOhw.js +0 -1
  293. package/dist/assets/three-authoring.service-UK1utJDS.js +0 -2
  294. package/dist/assets/three-integration.service-CvbLexeR.js +0 -1
  295. package/dist/assets/transport.header-D6MQXDZh.js +0 -1
@@ -1,4 +1,4 @@
1
- import{jb as P,jc as M,o as F,b as w,n as $,jd as T,m as N,f as L,K as A,W as H}from"./index-EO6Vl92s.js";import{GAME_CONTRACT_SHAPE as V,GAME_LIFECYCLE_SHAPE as U,GAME_SYSTEMS_SHAPE as z}from"./game-contract-seams-Dq1YiGya.js";function B(e,t){const o=[];let s=!0;for(const r of t.childIds){const i=e.hierarchy.node(r);!i||i.parentId!==t.id?s=!1:o.push(i)}return{valid:s,children:o}}function W(e){return typeof e=="object"&&e!==null&&e.isObject3D===!0}const K=64;function Y(e,t,o){const s=[];let r=null;for(const i of t){let n;try{n=e(i)}catch(a){r=`hierarchy.object3D threw on the walked node ${i}: ${a instanceof Error?a.message:String(a)}`;break}if(n!=null){if(!W(n)){r=`hierarchy.object3D answered the walked node ${i} with a ${typeof n} that is not an Object3D`;break}s.push({id:i,object:n})}}return o("editor.hierarchy.object3D",r?"fail":"pass",r??`hierarchy.object3D answered ${s.length} of ${t.length} walked node(s) with an Object3D and the rest with null`),{objects:r?[]:s}}function q(e,t,o,s){let r;try{r=e(o)}catch(i){return`hierarchy.idForObject3D threw on the object hierarchy.object3D returned for ${t}: ${i instanceof Error?i.message:String(i)}`}return r==null?null:typeof r!="string"||!s.has(r)?`hierarchy.idForObject3D answered ${JSON.stringify(r)} for the object hierarchy.object3D returned for ${t}, which is not a node this walk listed`:!0}function J(e,t,o,s){if(t.length===0){s("editor.hierarchy.idForObject3D","fail","hierarchy.idForObject3D could not be asked about anything: hierarchy.object3D handed back no Object3D for any walked node");return}let r=0,i=null;for(const{id:n,object:a}of t){const c=q(e,n,a,o);if(c===!0){r+=1;continue}if(c!==null){i=c;break}}!i&&r===0&&(i=`hierarchy.idForObject3D answered null for all ${t.length} object(s) hierarchy.object3D handed back, so nothing it returned could be checked against the walk`),s("editor.hierarchy.idForObject3D",i?"fail":"pass",i??`hierarchy.idForObject3D named ${r} of ${t.length} object(s) hierarchy.object3D returned with an id this walk listed`)}function X(e){const{adapter:t,subject:o,epoch:s,receipts:r,walked:i}=e,{object3D:n,idForObject3D:a}=t.hierarchy;if(!n)return;const c=(h,f,g)=>{r.push({seam:h,subject:o,epoch:s,stage:"operation",outcome:f,source:"conformance-probe",detail:g})},{objects:l}=Y(n,i.slice(0,K),c);a&&J(a,l,new Set(i),c)}function Q(e){const{adapter:t,subject:o,epoch:s,record:r,receipts:i}=e,n=r("editor.hierarchy.roots","operation",()=>t.hierarchy.roots(),d=>Array.isArray(d)&&d.length>0),a=Array.isArray(n)?n:[];let c=a.length>0;const l=new Set,h=[...a],f=1e4;for(;h.length>0&&l.size<f;){const d=h.shift();if(!d||l.has(d.id)){c=!1;continue}l.add(d.id);const b=r("editor.hierarchy.node","operation",()=>t.hierarchy.node(d.id),y=>y!==null&&typeof y=="object"&&y.id===d.id&&Array.isArray(y.childIds));if(!b){c=!1;continue}const j=B(t,b);c&&=j.valid,h.push(...j.children)}const g=h.length>0&&l.size>=f;return i.push({seam:"editor.hierarchy",subject:o,epoch:s,stage:"operation",outcome:c?"pass":"fail",source:"conformance-probe",detail:c?`hierarchy roots/node walked ${l.size} unique node(s) with reciprocal parent/child ids${g?` (walk budget reached with ${h.length} node(s) still pending — a larger tree, not a broken one)`:""}`:"hierarchy roots/node did not form a finite, non-empty, reciprocal tree"}),t.hierarchy.crossSurfaceStructureSignature&&r("editor.hierarchy.crossSurfaceStructureSignature","operation",()=>t.hierarchy.crossSurfaceStructureSignature?.(),d=>d===null||typeof d=="string"),X({adapter:t,subject:o,epoch:s,receipts:i,walked:[...l]}),a}function Z(e,t,o){if(e.selection&&(o("editor.selection.get","operation",()=>e.selection?.get(),Array.isArray),e.selection.resolve&&o("editor.selection.resolve","operation",()=>e.selection?.resolve?.(t),s=>s===null||typeof s=="object"&&typeof s.id=="string")),e.transforms){let s=!0;if(e.transforms.dimensions){const r=o("editor.transforms.dimensions","operation",()=>e.transforms?.dimensions?.(t),i=>i===null||i==="2d"||i==="3d");s=r==="2d"||r==="3d"}s&&(o("editor.transforms.get","operation",()=>e.transforms?.get(t),r=>{if(!r||typeof r!="object")return!1;const i=r;return["position","rotation","scale"].every(n=>{const a=i[n];return Array.isArray(a)&&a.every(Number.isFinite)})}),e.transforms.editability&&o("editor.transforms.editability","operation",()=>e.transforms?.editability?.(t,"position"),r=>r!==null&&typeof r=="object"&&typeof r.writable=="boolean"))}if(e.inspector){const s=o("editor.inspector.properties","operation",()=>e.inspector?.properties(t),Array.isArray);if(Array.isArray(s))for(const r of s)r&&typeof r=="object"&&typeof r.path=="string"&&(o("editor.inspector.get","operation",()=>e.inspector?.get(t,r.path)),e.inspector.editability&&o("editor.inspector.editability","operation",()=>e.inspector?.editability?.(t,r.path),i=>i!==null&&typeof i=="object"&&typeof i.writable=="boolean"))}}function ee(e,t,o,s){e.assetSubject&&(o("editor.assetSubject.get","operation",()=>e.assetSubject?.get(t)),e.assetSubject.entries&&o("editor.assetSubject.entries","operation",()=>e.assetSubject?.entries?.(),Array.isArray),s("editor.assetSubject")),e.related&&(o("editor.related.links","operation",()=>e.related?.links(t),Array.isArray),s("editor.related")),e.instances&&o("editor.instances.describe","operation",()=>e.instances?.describe(t)),e.truth&&(o("editor.truth.resolve","operation",()=>e.truth?.resolve(t,""),r=>r!==null&&typeof r=="object"),s("editor.truth"))}function te(e,t,o,s){e.pickable&&(o("editor.pickable.pick","operation",()=>e.pickable?.pick(0,0),r=>r===null||typeof r=="string"),e.pickable.candidates&&o("editor.pickable.candidates","operation",()=>e.pickable?.candidates?.(0,0),Array.isArray),s("editor.pickable")),e.rects&&(o("editor.rects.rect","operation",()=>e.rects?.rect(t),r=>{if(r===null)return!0;if(!r||typeof r!="object")return!1;const i=r;return["x","y","width","height"].every(n=>Number.isFinite(i[n]))}),e.rects.contextRects&&o("editor.rects.contextRects","operation",()=>e.rects?.contextRects?.(t)),e.rects.emptyContainers&&o("editor.rects.emptyContainers","operation",()=>e.rects?.emptyContainers?.(),Array.isArray),s("editor.rects")),e.colorSample&&(o("editor.colorSample.backgroundChainAt","operation",()=>e.colorSample?.backgroundChainAt(0,0),r=>r===null||Array.isArray(r)),s("editor.colorSample")),e.spatialHandles&&o("editor.spatialHandles.layers","operation",()=>e.spatialHandles?.layers(t),Array.isArray)}function oe(e,t,o){e.persistence&&(o("editor.persistence.isDirty","operation",()=>e.persistence?.isDirty(),s=>typeof s=="boolean"),e.persistence.lastError&&o("editor.persistence.lastError","operation",()=>e.persistence?.lastError?.(),s=>s===null||typeof s=="string")),e.text&&o("editor.text.get","operation",()=>e.text?.get(t)),e.stories&&(o("editor.stories.storiesFor","operation",()=>e.stories?.storiesFor(t),Array.isArray),o("editor.stories.active","operation",()=>e.stories?.active(t),s=>s===null||typeof s=="string")),e.assetDrop&&o("editor.assetDrop.accepts","operation",()=>e.assetDrop?.accepts(t,"__volter_read_probe__"),s=>typeof s=="boolean")}function se(e){const{adapter:t,subject:o,epoch:s}=e,r=[],i=(l,h,f,g=()=>!0)=>{try{const d=f(),b=g(d);return r.push({seam:l,subject:o,epoch:s,stage:h,outcome:b?"pass":"fail",source:"conformance-probe",detail:b?`${l} returned a value accepted by its consumer-facing shape`:`${l} returned a value outside its consumer-facing shape`}),d}catch(d){r.push({seam:l,subject:o,epoch:s,stage:h,outcome:"fail",source:"conformance-probe",detail:`${l} threw while read: ${d instanceof Error?d.message:String(d)}`});return}},n=l=>{r.push({seam:l,subject:o,epoch:s,stage:"operation",outcome:"pass",source:"conformance-probe",detail:`${l} served a real read against the mounted projection`})},c=Q({adapter:t,subject:o,epoch:s,record:i,receipts:r})[0]?.id;return c&&(Z(t,c,i),ee(t,c,i,n),te(t,c,i,n),oe(t,c,i)),r}const v={missing:"the editor never reached this game’s scene, so hierarchy, inspector and gizmo have nothing to work on — not one object in it can be listed, selected, inspected or moved",fix:"make the game’s own runtime instance reachable to the host: a bare, un-rewritten `import 'three'` / `import 'pixi.js'` in the game's own source, so it resolves in the editor’s realm to the very instance the capture trap is installed on"},S={missing:"this root’s hierarchy does not agree with itself: the editor reached the world and can list it, but `hierarchy.node(id).parentId` and the parent’s own `childIds` name different nodes, so anything that walks UPWARD — reparent targets, paste anchors, ancestor selection — resolves against a tree the panel is not showing",fix:"make the adapter’s `hierarchy` reciprocal: for every id in a node’s `childIds`, `hierarchy.node(childId).parentId` must be that node’s own id. The report’s `detail` names which direction disagreed"},m={provenance:{missing:"the shell shows no provenance badge for this root, so nothing tells the author what the rows they are editing are backed by or how writable it is",fix:"the adapter must declare `provenance` (`AuthoringAdapter.provenance`)"},selection:{missing:"this root owns no selection, so a viewport hit cannot be resolved to the node the author actually means — a click lands on whatever raw id the substrate reports",fix:"the adapter must expose a `selection` provider (`AuthoringAdapter.selection`)"},transforms:{missing:"the gizmo cannot move, rotate or scale anything in this world",fix:"the adapter must expose a `transforms` provider (`AuthoringAdapter.transforms`) over the captured tree"},inspector:{missing:"the inspector shows no properties for a selected object in this world",fix:"the adapter must expose an `inspector` provider (`AuthoringAdapter.inspector`)"},assetSubject:{missing:"an authored node that IS an asset (inline SVG, an embedded image) cannot be opened in the Asset Editor from this root — it stays an opaque row",fix:"the adapter must expose an `assetSubject` provider (`AuthoringAdapter.assetSubject`)"},related:{missing:"the inspector offers no jump from a selected subject to the document that defines it (a component to its source, an instance to its story) — navigation stops at the row",fix:"the adapter must expose a `related` provider (`AuthoringAdapter.related`)"},instances:{missing:"the inspector cannot distinguish a prefab instance override from its component default, so authors cannot revert the instance or deliberately apply its value to the component",fix:"the adapter must expose an `instances` provider (`AuthoringAdapter.instances`) derived from native component source"},structure:{missing:"nothing in this world can be created, deleted, duplicated or reparented: the creation palette is empty and the hierarchy’s drag-drop and context-menu structure ops do nothing",fix:"the adapter must expose a `structure` provider (`AuthoringAdapter.structure`)"},persistence:{missing:"edits to this world are live-only — the mount carries no write-back route to the game’s own source, so nothing you change survives the session",fix:"the adapter must expose a `persistence` provider (`AuthoringAdapter.persistence`)"},pickable:{missing:"this root is not pickable in the viewport: clicking its content selects nothing, so it can only be reached from the hierarchy list",fix:"the adapter must expose a `pickable` provider (`AuthoringAdapter.pickable`)"},rects:{missing:"the editor has no screen geometry for this root’s nodes, so the selection overlay, the measure/snap guides and the empty-container hints cannot be drawn",fix:"the adapter must expose a `rects` provider (`AuthoringAdapter.rects`)"},boxEdit:{missing:"nothing in this root can be moved or resized by dragging it — its spatial values are reachable only by typing numbers into the inspector",fix:"the adapter must expose a `boxEdit` provider (`AuthoringAdapter.boxEdit`)"},text:{missing:"text in this root cannot be edited in place — double-click does nothing",fix:"the adapter must expose a `text` provider (`AuthoringAdapter.text`)"},colorSample:{missing:"the eyedropper has no fallback path on this root, so colour picking is dead wherever the browser has no native `EyeDropper`",fix:"the adapter must expose a `colorSample` provider (`AuthoringAdapter.colorSample`)"},stories:{missing:"no component of this root can be opened against a story: its prefabs never appear on the component board, and a designer cannot open, apply or isolate a design-time state",fix:"the adapter must expose a `stories` provider (`AuthoringAdapter.stories`) reading the root’s colocated portable CSF"},truth:{missing:"the editor cannot say where any object in this world came from, so an inspector edit has no source address to be written back to",fix:"the adapter must expose a `truth` provider (`AuthoringAdapter.truth`)"},spatialHandles:{missing:"component-owned spatial values in this world (an audio attenuation radius, a light cone, a collider extent) are invisible in the viewport and cannot be dragged",fix:"the adapter must expose a `spatialHandles` provider (`AuthoringAdapter.spatialHandles`)"},assetDrop:{missing:"nothing can be dropped into this world: a model, image or material dragged from the asset browser onto the viewport or the hierarchy is refused",fix:"the adapter must expose an `assetDrop` provider (`AuthoringAdapter.assetDrop`)"},subscribe:{missing:"this root never tells the editor its tree changed, so the hierarchy and inspector show a stale projection until something else happens to re-render them",fix:"the adapter must implement `subscribe` (`AuthoringAdapter.subscribe`)"}},re={three:{assetSubject:"the current asset-subject contract is an inline SVG embedded in a DOM source document; a Three scene-graph node has no such representation",rects:"screen rects are the DOM visual editor’s coordinate system; a three root is manipulated in world space through the gizmo",boxEdit:"the CSS box model has no three analogue — spatial editing here is the `transforms` provider plus the gizmo",text:"a three world has no editable element text body",colorSample:"the eyedropper’s CSS background-chain walk has no three analogue"},canvas:{assetSubject:"the current asset-subject contract is an inline SVG embedded in a DOM source document; a canvas display node has no such representation",text:"a canvas world has no editable element text body",colorSample:"the eyedropper’s CSS background-chain walk has no canvas analogue"},dom:{transforms:"a DOM root has no 3D transform; its spatial editing is the `boxEdit` provider, which is reported on its own row",spatialHandles:"world-space component guides have no DOM analogue — a DOM root’s geometry is its box, reported by `rects`/`boxEdit`"}},ie=Object.freeze(Object.fromEntries(w.map(e=>[e,!1]))),ne=Object.freeze({captured:!1,providers:ie});function Je(e,t="root"){const{authoring:o}=e;return o?ae(o,t):ne}function ae(e,t="root"){const o=P(e),s=M({adapter:e,subject:t,epoch:o,receipts:se({adapter:e,subject:t,epoch:o})}),r={...F(e)},i=e.childAdapters?.();return i&&(r.pickable||=i.some(n=>n.adapter.pickable!==void 0),r.provenance||=i.some(n=>n.adapter.provenance!==void 0)),{captured:!0,providers:r,providerEvidence:s.providers,captureEvidence:s.hierarchyWalk}}function C(e,t){return e===null?null:re[e]?.[t]??null}function ce(e,t=null){return w.filter(o=>!e.providers[o]&&C(t,o)===null)}const le="capability-gap";function Xe(e,t,o,s=null){const r=[];t.captured||r.push(` ✗ capture — ${v.missing}
1
+ import{jb as P,jc as M,o as F,b as w,n as $,jd as T,m as N,f as L,K as A,W as H}from"./index-BT8W9a7k.js";import{GAME_CONTRACT_SHAPE as V,GAME_LIFECYCLE_SHAPE as U,GAME_SYSTEMS_SHAPE as z}from"./game-contract-seams-BfTLgo42.js";function B(e,t){const o=[];let s=!0;for(const r of t.childIds){const i=e.hierarchy.node(r);!i||i.parentId!==t.id?s=!1:o.push(i)}return{valid:s,children:o}}function W(e){return typeof e=="object"&&e!==null&&e.isObject3D===!0}const K=64;function Y(e,t,o){const s=[];let r=null;for(const i of t){let n;try{n=e(i)}catch(a){r=`hierarchy.object3D threw on the walked node ${i}: ${a instanceof Error?a.message:String(a)}`;break}if(n!=null){if(!W(n)){r=`hierarchy.object3D answered the walked node ${i} with a ${typeof n} that is not an Object3D`;break}s.push({id:i,object:n})}}return o("editor.hierarchy.object3D",r?"fail":"pass",r??`hierarchy.object3D answered ${s.length} of ${t.length} walked node(s) with an Object3D and the rest with null`),{objects:r?[]:s}}function q(e,t,o,s){let r;try{r=e(o)}catch(i){return`hierarchy.idForObject3D threw on the object hierarchy.object3D returned for ${t}: ${i instanceof Error?i.message:String(i)}`}return r==null?null:typeof r!="string"||!s.has(r)?`hierarchy.idForObject3D answered ${JSON.stringify(r)} for the object hierarchy.object3D returned for ${t}, which is not a node this walk listed`:!0}function J(e,t,o,s){if(t.length===0){s("editor.hierarchy.idForObject3D","fail","hierarchy.idForObject3D could not be asked about anything: hierarchy.object3D handed back no Object3D for any walked node");return}let r=0,i=null;for(const{id:n,object:a}of t){const c=q(e,n,a,o);if(c===!0){r+=1;continue}if(c!==null){i=c;break}}!i&&r===0&&(i=`hierarchy.idForObject3D answered null for all ${t.length} object(s) hierarchy.object3D handed back, so nothing it returned could be checked against the walk`),s("editor.hierarchy.idForObject3D",i?"fail":"pass",i??`hierarchy.idForObject3D named ${r} of ${t.length} object(s) hierarchy.object3D returned with an id this walk listed`)}function X(e){const{adapter:t,subject:o,epoch:s,receipts:r,walked:i}=e,{object3D:n,idForObject3D:a}=t.hierarchy;if(!n)return;const c=(h,f,g)=>{r.push({seam:h,subject:o,epoch:s,stage:"operation",outcome:f,source:"conformance-probe",detail:g})},{objects:l}=Y(n,i.slice(0,K),c);a&&J(a,l,new Set(i),c)}function Q(e){const{adapter:t,subject:o,epoch:s,record:r,receipts:i}=e,n=r("editor.hierarchy.roots","operation",()=>t.hierarchy.roots(),d=>Array.isArray(d)&&d.length>0),a=Array.isArray(n)?n:[];let c=a.length>0;const l=new Set,h=[...a],f=1e4;for(;h.length>0&&l.size<f;){const d=h.shift();if(!d||l.has(d.id)){c=!1;continue}l.add(d.id);const b=r("editor.hierarchy.node","operation",()=>t.hierarchy.node(d.id),y=>y!==null&&typeof y=="object"&&y.id===d.id&&Array.isArray(y.childIds));if(!b){c=!1;continue}const j=B(t,b);c&&=j.valid,h.push(...j.children)}const g=h.length>0&&l.size>=f;return i.push({seam:"editor.hierarchy",subject:o,epoch:s,stage:"operation",outcome:c?"pass":"fail",source:"conformance-probe",detail:c?`hierarchy roots/node walked ${l.size} unique node(s) with reciprocal parent/child ids${g?` (walk budget reached with ${h.length} node(s) still pending — a larger tree, not a broken one)`:""}`:"hierarchy roots/node did not form a finite, non-empty, reciprocal tree"}),t.hierarchy.crossSurfaceStructureSignature&&r("editor.hierarchy.crossSurfaceStructureSignature","operation",()=>t.hierarchy.crossSurfaceStructureSignature?.(),d=>d===null||typeof d=="string"),X({adapter:t,subject:o,epoch:s,receipts:i,walked:[...l]}),a}function Z(e,t,o){if(e.selection&&(o("editor.selection.get","operation",()=>e.selection?.get(),Array.isArray),e.selection.resolve&&o("editor.selection.resolve","operation",()=>e.selection?.resolve?.(t),s=>s===null||typeof s=="object"&&typeof s.id=="string")),e.transforms){let s=!0;if(e.transforms.dimensions){const r=o("editor.transforms.dimensions","operation",()=>e.transforms?.dimensions?.(t),i=>i===null||i==="2d"||i==="3d");s=r==="2d"||r==="3d"}s&&(o("editor.transforms.get","operation",()=>e.transforms?.get(t),r=>{if(!r||typeof r!="object")return!1;const i=r;return["position","rotation","scale"].every(n=>{const a=i[n];return Array.isArray(a)&&a.every(Number.isFinite)})}),e.transforms.editability&&o("editor.transforms.editability","operation",()=>e.transforms?.editability?.(t,"position"),r=>r!==null&&typeof r=="object"&&typeof r.writable=="boolean"))}if(e.inspector){const s=o("editor.inspector.properties","operation",()=>e.inspector?.properties(t),Array.isArray);if(Array.isArray(s))for(const r of s)r&&typeof r=="object"&&typeof r.path=="string"&&(o("editor.inspector.get","operation",()=>e.inspector?.get(t,r.path)),e.inspector.editability&&o("editor.inspector.editability","operation",()=>e.inspector?.editability?.(t,r.path),i=>i!==null&&typeof i=="object"&&typeof i.writable=="boolean"))}}function ee(e,t,o,s){e.assetSubject&&(o("editor.assetSubject.get","operation",()=>e.assetSubject?.get(t)),e.assetSubject.entries&&o("editor.assetSubject.entries","operation",()=>e.assetSubject?.entries?.(),Array.isArray),s("editor.assetSubject")),e.related&&(o("editor.related.links","operation",()=>e.related?.links(t),Array.isArray),s("editor.related")),e.instances&&o("editor.instances.describe","operation",()=>e.instances?.describe(t)),e.truth&&(o("editor.truth.resolve","operation",()=>e.truth?.resolve(t,""),r=>r!==null&&typeof r=="object"),s("editor.truth"))}function te(e,t,o,s){e.pickable&&(o("editor.pickable.pick","operation",()=>e.pickable?.pick(0,0),r=>r===null||typeof r=="string"),e.pickable.candidates&&o("editor.pickable.candidates","operation",()=>e.pickable?.candidates?.(0,0),Array.isArray),s("editor.pickable")),e.rects&&(o("editor.rects.rect","operation",()=>e.rects?.rect(t),r=>{if(r===null)return!0;if(!r||typeof r!="object")return!1;const i=r;return["x","y","width","height"].every(n=>Number.isFinite(i[n]))}),e.rects.contextRects&&o("editor.rects.contextRects","operation",()=>e.rects?.contextRects?.(t)),e.rects.emptyContainers&&o("editor.rects.emptyContainers","operation",()=>e.rects?.emptyContainers?.(),Array.isArray),s("editor.rects")),e.colorSample&&(o("editor.colorSample.backgroundChainAt","operation",()=>e.colorSample?.backgroundChainAt(0,0),r=>r===null||Array.isArray(r)),s("editor.colorSample")),e.spatialHandles&&o("editor.spatialHandles.layers","operation",()=>e.spatialHandles?.layers(t),Array.isArray)}function oe(e,t,o){e.persistence&&(o("editor.persistence.isDirty","operation",()=>e.persistence?.isDirty(),s=>typeof s=="boolean"),e.persistence.lastError&&o("editor.persistence.lastError","operation",()=>e.persistence?.lastError?.(),s=>s===null||typeof s=="string")),e.text&&o("editor.text.get","operation",()=>e.text?.get(t)),e.stories&&(o("editor.stories.storiesFor","operation",()=>e.stories?.storiesFor(t),Array.isArray),o("editor.stories.active","operation",()=>e.stories?.active(t),s=>s===null||typeof s=="string")),e.assetDrop&&o("editor.assetDrop.accepts","operation",()=>e.assetDrop?.accepts(t,"__volter_read_probe__"),s=>typeof s=="boolean")}function se(e){const{adapter:t,subject:o,epoch:s}=e,r=[],i=(l,h,f,g=()=>!0)=>{try{const d=f(),b=g(d);return r.push({seam:l,subject:o,epoch:s,stage:h,outcome:b?"pass":"fail",source:"conformance-probe",detail:b?`${l} returned a value accepted by its consumer-facing shape`:`${l} returned a value outside its consumer-facing shape`}),d}catch(d){r.push({seam:l,subject:o,epoch:s,stage:h,outcome:"fail",source:"conformance-probe",detail:`${l} threw while read: ${d instanceof Error?d.message:String(d)}`});return}},n=l=>{r.push({seam:l,subject:o,epoch:s,stage:"operation",outcome:"pass",source:"conformance-probe",detail:`${l} served a real read against the mounted projection`})},c=Q({adapter:t,subject:o,epoch:s,record:i,receipts:r})[0]?.id;return c&&(Z(t,c,i),ee(t,c,i,n),te(t,c,i,n),oe(t,c,i)),r}const v={missing:"the editor never reached this game’s scene, so hierarchy, inspector and gizmo have nothing to work on — not one object in it can be listed, selected, inspected or moved",fix:"make the game’s own runtime instance reachable to the host: a bare, un-rewritten `import 'three'` / `import 'pixi.js'` in the game's own source, so it resolves in the editor’s realm to the very instance the capture trap is installed on"},S={missing:"this root’s hierarchy does not agree with itself: the editor reached the world and can list it, but `hierarchy.node(id).parentId` and the parent’s own `childIds` name different nodes, so anything that walks UPWARD — reparent targets, paste anchors, ancestor selection — resolves against a tree the panel is not showing",fix:"make the adapter’s `hierarchy` reciprocal: for every id in a node’s `childIds`, `hierarchy.node(childId).parentId` must be that node’s own id. The report’s `detail` names which direction disagreed"},m={provenance:{missing:"the shell shows no provenance badge for this root, so nothing tells the author what the rows they are editing are backed by or how writable it is",fix:"the adapter must declare `provenance` (`AuthoringAdapter.provenance`)"},selection:{missing:"this root owns no selection, so a viewport hit cannot be resolved to the node the author actually means — a click lands on whatever raw id the substrate reports",fix:"the adapter must expose a `selection` provider (`AuthoringAdapter.selection`)"},transforms:{missing:"the gizmo cannot move, rotate or scale anything in this world",fix:"the adapter must expose a `transforms` provider (`AuthoringAdapter.transforms`) over the captured tree"},inspector:{missing:"the inspector shows no properties for a selected object in this world",fix:"the adapter must expose an `inspector` provider (`AuthoringAdapter.inspector`)"},assetSubject:{missing:"an authored node that IS an asset (inline SVG, an embedded image) cannot be opened in the Asset Editor from this root — it stays an opaque row",fix:"the adapter must expose an `assetSubject` provider (`AuthoringAdapter.assetSubject`)"},related:{missing:"the inspector offers no jump from a selected subject to the document that defines it (a component to its source, an instance to its story) — navigation stops at the row",fix:"the adapter must expose a `related` provider (`AuthoringAdapter.related`)"},instances:{missing:"the inspector cannot distinguish a prefab instance override from its component default, so authors cannot revert the instance or deliberately apply its value to the component",fix:"the adapter must expose an `instances` provider (`AuthoringAdapter.instances`) derived from native component source"},structure:{missing:"nothing in this world can be created, deleted, duplicated or reparented: the creation palette is empty and the hierarchy’s drag-drop and context-menu structure ops do nothing",fix:"the adapter must expose a `structure` provider (`AuthoringAdapter.structure`)"},persistence:{missing:"edits to this world are live-only — the mount carries no write-back route to the game’s own source, so nothing you change survives the session",fix:"the adapter must expose a `persistence` provider (`AuthoringAdapter.persistence`)"},pickable:{missing:"this root is not pickable in the viewport: clicking its content selects nothing, so it can only be reached from the hierarchy list",fix:"the adapter must expose a `pickable` provider (`AuthoringAdapter.pickable`)"},rects:{missing:"the editor has no screen geometry for this root’s nodes, so the selection overlay, the measure/snap guides and the empty-container hints cannot be drawn",fix:"the adapter must expose a `rects` provider (`AuthoringAdapter.rects`)"},boxEdit:{missing:"nothing in this root can be moved or resized by dragging it — its spatial values are reachable only by typing numbers into the inspector",fix:"the adapter must expose a `boxEdit` provider (`AuthoringAdapter.boxEdit`)"},text:{missing:"text in this root cannot be edited in place — double-click does nothing",fix:"the adapter must expose a `text` provider (`AuthoringAdapter.text`)"},colorSample:{missing:"the eyedropper has no fallback path on this root, so colour picking is dead wherever the browser has no native `EyeDropper`",fix:"the adapter must expose a `colorSample` provider (`AuthoringAdapter.colorSample`)"},stories:{missing:"no component of this root can be opened against a story: its prefabs never appear on the component board, and a designer cannot open, apply or isolate a design-time state",fix:"the adapter must expose a `stories` provider (`AuthoringAdapter.stories`) reading the root’s colocated portable CSF"},truth:{missing:"the editor cannot say where any object in this world came from, so an inspector edit has no source address to be written back to",fix:"the adapter must expose a `truth` provider (`AuthoringAdapter.truth`)"},spatialHandles:{missing:"component-owned spatial values in this world (an audio attenuation radius, a light cone, a collider extent) are invisible in the viewport and cannot be dragged",fix:"the adapter must expose a `spatialHandles` provider (`AuthoringAdapter.spatialHandles`)"},assetDrop:{missing:"nothing can be dropped into this world: a model, image or material dragged from the asset browser onto the viewport or the hierarchy is refused",fix:"the adapter must expose an `assetDrop` provider (`AuthoringAdapter.assetDrop`)"},subscribe:{missing:"this root never tells the editor its tree changed, so the hierarchy and inspector show a stale projection until something else happens to re-render them",fix:"the adapter must implement `subscribe` (`AuthoringAdapter.subscribe`)"}},re={three:{assetSubject:"the current asset-subject contract is an inline SVG embedded in a DOM source document; a Three scene-graph node has no such representation",rects:"screen rects are the DOM visual editor’s coordinate system; a three root is manipulated in world space through the gizmo",boxEdit:"the CSS box model has no three analogue — spatial editing here is the `transforms` provider plus the gizmo",text:"a three world has no editable element text body",colorSample:"the eyedropper’s CSS background-chain walk has no three analogue"},canvas:{assetSubject:"the current asset-subject contract is an inline SVG embedded in a DOM source document; a canvas display node has no such representation",text:"a canvas world has no editable element text body",colorSample:"the eyedropper’s CSS background-chain walk has no canvas analogue"},dom:{transforms:"a DOM root has no 3D transform; its spatial editing is the `boxEdit` provider, which is reported on its own row",spatialHandles:"world-space component guides have no DOM analogue — a DOM root’s geometry is its box, reported by `rects`/`boxEdit`"}},ie=Object.freeze(Object.fromEntries(w.map(e=>[e,!1]))),ne=Object.freeze({captured:!1,providers:ie});function Je(e,t="root"){const{authoring:o}=e;return o?ae(o,t):ne}function ae(e,t="root"){const o=P(e),s=M({adapter:e,subject:t,epoch:o,receipts:se({adapter:e,subject:t,epoch:o})}),r={...F(e)},i=e.childAdapters?.();return i&&(r.pickable||=i.some(n=>n.adapter.pickable!==void 0),r.provenance||=i.some(n=>n.adapter.provenance!==void 0)),{captured:!0,providers:r,providerEvidence:s.providers,captureEvidence:s.hierarchyWalk}}function C(e,t){return e===null?null:re[e]?.[t]??null}function ce(e,t=null){return w.filter(o=>!e.providers[o]&&C(t,o)===null)}const le="capability-gap";function Xe(e,t,o,s=null){const r=[];t.captured||r.push(` ✗ capture — ${v.missing}
2
2
  fix: ${v.fix}`);for(const i of ce(t,s))r.push(` ✗ ${i} — ${m[i].missing}
3
3
  fix: ${m[i].fix}`);return r.length===0?null:[`${le} world "${e}" — ${r.length} editor capabilit${r.length===1?"y is":"ies are"} missing (${o}). This world is not authorable the way a native one is:`,...r].join(`
4
4
  `)}const k=new WeakMap;let de=1;function he(e){const t=k.get(e);if(t)return t;const o=`contract-${de++}`;return k.set(e,o),o}function ue(e){const t=e.subject??"game",o=e.epoch??he(e.contract),s=[...$({prefix:"contract",value:e.contract,shape:V,subject:t,epoch:o}),...$({prefix:"contract.lifecycle",value:e.contract.lifecycle,shape:U,subject:t,epoch:o}),...$({prefix:"contract.systems",value:e.contract.systems,shape:z,subject:t,epoch:o}),...T.receipts({subject:t,epoch:o}),...e.receipts??[]],r=(i,n)=>N({seam:i,subject:t,epoch:o,required:n,receipts:s});return{root:r("contract.root","effect"),start:r("contract.lifecycle.start","effect"),pause:r("contract.lifecycle.pause","effect"),resume:r("contract.lifecycle.resume","effect"),systems:r("contract.systems","operation")}}class p extends Error{constructor(t){super(`coverage-accounting: ${t}`),this.name="CoverageReconcileError"}}function pe(e){const t=e.indexOf(".");return t===-1?e:e.slice(0,t)}function fe(e){return e?/^\[([^\]]+)\] /.exec(e)?.[1]??null:null}function me(e){return e.subject!==void 0&&e.subject!==null&&e.subject!==""?e.subject:fe(e.detail)}function I(e,t){const o=e??{gap:!1,applicable:!1};return t==="na"?o:{gap:o.gap||t==="gap",applicable:!0}}function ge(e,t){const o=new Map;for(const i of t)o.set(i.seam,I(o.get(i.seam),i.status));let s=0,r=0;for(const i of o.values())i.applicable&&(s+=1,i.gap&&(r+=1));return{family:e,capabilities:s,capabilityGaps:r,rootInstances:t.length}}function O(e){const t=new Set,o=new Map;for(const a of e){const c=me(a);c!==null&&t.add(c);const l=pe(a.seam),h=o.get(l);h?h.push(a):o.set(l,[a])}const s=[...o].map(([a,c])=>ge(a,c)),r=new Map;for(const a of e)r.set(a.seam,I(r.get(a.seam),a.status));let i=0,n=0;for(const a of r.values())a.applicable&&(i+=1,a.gap&&(n+=1));return{capabilities:i,capabilityGaps:n,rootsGraded:t.size,rootInstances:e.length,families:s}}function be(e){return`${e.capabilityGaps} of ${e.capabilities} capabilities are MISSING`}function ye(e){return`${e.rootsGraded>0?`${e.rootsGraded} roots graded; `:""}${e.rootInstances} root-instances`}function we(e,t={}){const o=t.rootsGraded??0,s=e.rootInstances!==e.capabilities||o>1,r=`${e.family} ${e.capabilityGaps} of ${e.capabilities} capabilities`;if(!s)return r;const i=o>1?`${o} roots graded; `:"";return`${r} (${i}${e.rootInstances} root-instances)`}function ve(e,t){return e.family==="editor"?{rootsGraded:t.rootsGraded}:{}}function $e(e,t){const o=t.families.map(s=>we(s,ve(s,t))).join(", ");return`${e} — ${be(t)} (${ye(t)}: ${o}).`}function xe(e){const t=/(\d+) of (\d+) capabilities are MISSING/.exec(e);if(!t)throw new p('headline does not state the capabilities unit (missing "N of M capabilities are MISSING")');const o=/(\d+) roots graded/.exec(e),s=/(\d+) root-instances/.exec(e);if(!s)throw new p("headline does not state root-instances");return{capabilityGaps:Number(t[1]),capabilities:Number(t[2]),rootsGraded:o?Number(o[1]):0,rootInstances:Number(s[1])}}function Ae(e,t){const o=O(e),s=xe(t);if(s.capabilityGaps!==o.capabilityGaps)throw new p(`headline capability-gaps ${s.capabilityGaps} !== row-derived ${o.capabilityGaps}`);if(s.capabilities!==o.capabilities)throw new p(`headline capabilities ${s.capabilities} !== row-derived ${o.capabilities}`);if(s.rootInstances!==o.rootInstances)throw new p(`headline root-instances ${s.rootInstances} !== row-derived ${o.rootInstances}`);if(s.rootsGraded!==o.rootsGraded)throw new p(`headline roots-graded ${s.rootsGraded} !== row-derived ${o.rootsGraded}`);const r=o.families.reduce((n,a)=>n+a.rootInstances,0);if(r!==o.rootInstances)throw new p(`family root-instances ${r} !== ${o.rootInstances}`);const i=o.families.reduce((n,a)=>n+a.capabilities,0);if(i!==o.capabilities)throw new p(`family capabilities ${i} !== ${o.capabilities}`)}const je={export:!0},Qe=Object.keys(je),Ze=Object.keys(L);function et(e){const t=e?.systems;return{declared:e!==null,root:e?.root!==void 0,start:e?.lifecycle?.start!==void 0,pause:e?.lifecycle?.pause!==void 0,resume:e?.lifecycle?.resume!==void 0,systems:t?{commands:(t.commands??[]).map(o=>o.name),state:(t.state??[]).map(o=>o.name)}:null,proof:e?ue({contract:e}):null}}const Se="a game whose bytes must stay unmodified declares it from a host-side carrier instead — a contract shim beside the game (`ingest.contractShim` in its volter.project.json, injected ahead of the game`s entry module; see public/ingest/simcity/volter.shim.js) or a recorded patch",u=e=>`declare ${e} in the game's own entry; ${Se}`;function ke(e){const t=e.reachMechanism?` — ${e.reachMechanism}`:"";if(e.reach===null)return[{seam:"editor.capture",status:"info",detail:"no mount has measured what the editor reaches on this root yet"},...w.map(i=>({seam:`editor.${i}`,status:"info",detail:`no mount has measured whether this root exposes ${i} yet`}))];const o=e.reach,s=o.captured?o.captureEvidence?.state==="verified"?{seam:"editor.capture",status:"ok",detail:`the editor reached this root's own runtime and exercised its hierarchy — ${o.captureEvidence.detail}${t}`}:o.captureEvidence?.state==="failed"?{seam:"editor.capture",status:"gap",detail:`an authoring object was captured, but its hierarchy seam failed — ${o.captureEvidence.detail}${t}`,missing:S.missing,fix:S.fix}:{seam:"editor.capture",status:"info",detail:`an authoring object was captured, but no current-epoch hierarchy operation proves it projects this root's runtime${o.captureEvidence?` — ${o.captureEvidence.detail}`:""}${t}`}:{seam:"editor.capture",status:"gap",detail:`the editor never reached this root's runtime${t}`,missing:v.missing,fix:v.fix},r=w.map(i=>{const n=`editor.${i}`,a=o.providerEvidence?.[i],c=C(e.surface,i);return!o.providers[i]&&c!==null?{seam:n,status:"na",detail:`not applicable to a ${e.surface} root — ${c}`}:a?.state==="verified"?{seam:n,status:"ok",detail:a.detail}:a?.state==="failed"?{seam:n,status:"gap",detail:`${i} is exposed but malformed or failed — ${a.detail}${t}`,missing:m[i].missing,fix:m[i].fix}:o.providers[i]?{seam:n,status:"info",detail:a?.detail??`this root exposes ${i}, but no operational proof was recorded`}:{seam:n,status:"gap",detail:`this root exposes no ${i} provider${t}`,missing:m[i].missing,fix:m[i].fix}});return[s,...r]}function Ee(e){const t=e.loopReason?` — ${e.loopReason}`:"",{pause:o,resume:s}=e.contract;return o&&s&&e.contract.proof?.pause.state==="verified"&&e.contract.proof.resume.state==="verified"?{seam:"loop",status:"ok",detail:`the game's own declared lifecycle.pause + resume control its frames, and that is what ▶/⏸ call${e.loopReason?` (the host's fallback gate, unused here, reports: ${e.loopReason})`:""}`}:e.loop?.verdict==="gated"?{seam:"loop",status:"ok",detail:`gated${t}`}:e.loop?.verdict==="self-driven"?{seam:"loop",status:"gap",detail:`self-driven${t}`,missing:"nothing in this editor controls the game's frames: ▶/⏸ and Step do not stop it, and Edit mode cannot be quiet — it keeps simulating while you author",fix:u("window.volterGame.lifecycle.pause + resume")}:{seam:"loop",status:"info",detail:e.loopReason??"no loop verdict has been measured yet — the probe runs at the first pause"}}function Re(e){return e.contract.root?e.contract.proof?.root.state==="failed"?{seam:"contract.root",status:"gap",detail:`the game declares a root, but the seam failed — ${e.contract.proof.root.detail}`,missing:"the host cannot trust that the declared element owns the game DOM rather than an unrelated or detached subtree",fix:u("window.volterGame.root")}:{seam:"contract.root",status:e.contract.proof?.root.state==="verified"?"ok":"info",detail:e.contract.proof?.root.state==="verified"?e.contract.proof.root.detail:"the game declares a root element, but no consumer has proved it owns the mounted game DOM"}:{seam:"contract.root",status:"gap",detail:e.contract.declared?"a contract is declared, but it names no root element":"no game→host contract is declared at all",missing:"the host adopts the bare canvas, so any DOM this game owns beside it (HUD, overlays, portals) is stranded at page level over the editor chrome instead of living in the game pane",fix:u("window.volterGame.root")}}function De(e){return e.contract.start?e.contract.proof?.start.state==="failed"?{seam:"contract.lifecycle.start",status:"gap",detail:`lifecycle.start is declared but failed — ${e.contract.proof.start.detail}`,missing:"the mount cannot prove it starts cold and enters a session only when Play requests one",fix:u("window.volterGame.lifecycle.start")}:{seam:"contract.lifecycle.start",status:e.contract.proof?.start.state==="verified"?"ok":"info",detail:e.contract.proof?.start.state==="verified"?e.contract.proof.start.detail:"the game declares lifecycle.start, but no current-epoch effect proves that ▶ starts the session"}:{seam:"contract.lifecycle.start",status:"gap",detail:e.contract.declared?"a contract is declared, but it names no lifecycle.start":"no game→host contract is declared at all",missing:"the mount cannot be COLD: this game runs its session side-effects (backend connections, audio, narrative) as it loads, so opening it in the editor starts playing it, and ▶ is a wire event the game may ignore",fix:u("window.volterGame.lifecycle.start")}}function E(e){return e.loop?.verdict==="gated"?"pausing this game is the host's outside-in loop gate only. That gate is MEASURED to hold the work this game schedules, so ⏸ does stop it — but a host reaching in is not the game quieting itself: anything it drives from outside its own scheduling (a worker, a socket, a media callback) keeps running, and it gets no chance to stop its audio, drop its connections, or checkpoint before the pause":e.loop?.verdict==="self-driven"?"pausing this game is the host's outside-in loop gate only, and that gate is MEASURED not to control this loop — so ⏸ may freeze the picture while the game keeps running underneath it":"pausing this game is the host's outside-in loop gate only, and no probe has measured whether that gate reaches this loop yet — so ⏸ may freeze the picture while the game keeps running underneath it"}function Ce(e){const{pause:t,resume:o,declared:s}=e.contract;if(t&&o){const i=e.contract.proof?.pause.state==="verified",n=e.contract.proof?.resume.state==="verified",a=[e.contract.proof?.pause,e.contract.proof?.resume].find(c=>c?.state==="failed");return a?{seam:"contract.lifecycle.pause",status:"gap",detail:`pause/resume is declared but failed — ${a.detail}`,missing:E(e),fix:u("window.volterGame.lifecycle.pause + resume")}:{seam:"contract.lifecycle.pause",status:i&&n?"ok":"info",detail:i&&n?"the mounted lifecycle exercised both declared pause + resume effects":"the game declares pause + resume, but declaration alone does not prove either changes its frames"}}const r=Ie(t,o);return{seam:"contract.lifecycle.pause",status:"gap",detail:r?`the contract declares ${r} — the host needs both to hand control back`:s?"a contract is declared, but it names no lifecycle.pause/resume":"no game→host contract is declared at all",missing:E(e),fix:u("window.volterGame.lifecycle.pause + resume")}}function Ie(e,t){return e?"lifecycle.pause without a resume":t?"lifecycle.resume without a pause":null}function G(e){const t=e?.byKind;if(!t)return"";const o=H.filter(s=>(t[s]??0)>0).map(s=>`${s} ${t[s]}`);return o.length>0?` (by write lane: ${o.join(", ")})`:""}function Oe(e){return{seam:"persistence",status:"gap",detail:`this game's base is writable, but NONE of the ${e.total} object(s) the editor projects from the mounted world has a source address — every edit stays ${e.destination}`+G(e),missing:"nothing you change here survives the session: the base may be written, but no line of this game's own source is known to address any object in it",fix:"serve this game's own source through the editor's authoring transform so its elements carry source stamps (a JSX world), or give it construction sites the creation-site index can see (a `new` expression in the game's own served module)"}}function Ge(e,t,o,s){const r=e.recorder??"whatever records this folder",i=t?`; ${t.addressable} of ${t.total} projected object(s) resolve to one, and the rest are runtime or library parts with no source of their own${G(t)}`:"",n=o!==null&&o.state!=="ready",a=_e(o);return s?.state==="failed"?{seam:"persistence",status:"gap",detail:`the write path is addressable, but its round trip failed — ${s.detail}`,missing:"the editor can issue a write but cannot trust that the game source and a cold remount reflect it",fix:"fix the failing write receipt named above; provider presence and a write acknowledgement are not persistence"}:{seam:"persistence",status:n?"gap":s?.state==="verified"?"ok":"info",detail:`this game's base is writable, so an edit can be written back to the line of its own source that built the object${i}${a}; the diff is recorded in ${r}`+(s?.state==="verified"?`; ${s.detail}`:"; no current-epoch cold-remount round trip has verified that path"),...n?{missing:"every object this game places from its own level data — its whole placed cargo — is unwritable while that writer is unreachable",fix:`make \`ingest.dataWriter\` loadable: ${o.reason??"it has not resolved yet"}`}:{}}}function _e(e){if(e===null)return"";if(e.state==="ready")return`, and an object the game anchored to a record in ${e.dataFile} is written back into that file`;const t=e.reason?` (${e.reason})`:"";return`, but its declared data writer is ${e.state}${t}, so an object anchored to a level-data record stays live-only`}function Pe(e){const{ownership:t}=e;if(t===null)return{seam:"persistence",status:"info",detail:"the editor has not asked who owns this game's source yet — until it answers, edits stay live-only"};const o=e.writeReach;return t.writable&&o!==null&&o.addressable===0?Oe(o):t.writable?Ge(t,o,e.dataWriter,e.persistenceProof):{seam:"persistence",status:"gap",detail:`edits are live-only — ${t.reason??"this game's source is not writable"}`,missing:"nothing you change survives the session: no source write-back, and by doctrine no sidecar will ever be invented to fake one",fix:"open this game from a folder the editor can write — creation-site persistence needs a writable base (the server decides, not the editor)"}}function R(e,t){return`${t.length} ${e}(s)${t.length>0?`: ${t.join(", ")}`:""}`}function Me(e){const{systems:t,declared:o}=e.contract,s=t?.commands??[],r=t?.state??[];return s.length>0||r.length>0?e.contract.proof?.systems.state==="failed"?{seam:"systems",status:"gap",detail:`the systems carrier is declared but failed — ${e.contract.proof.systems.detail}`,missing:"`game.commands()` / `game.providers()` cannot safely enumerate or invoke this carrier",fix:u("window.volterGame.systems (commands + state)")}:{seam:"systems",status:e.contract.proof?.systems.state==="verified"?"ok":"info",detail:e.contract.proof?.systems.state==="verified"?e.contract.proof.systems.detail:`the game declares ${R("command",s)}; ${R("state provider",r)}, but the agent door has not operationally enumerated/read them in this epoch`}:{seam:"systems",status:"gap",detail:t?"the contract declares a systems surface that names no commands and no state providers":o?"a contract is declared, but it names no systems":"no game→host contract is declared at all",missing:`this game exposes no verbs and no state to drive or read it with: \`game.commands()\` and \`game.providers()\` enumerate nothing, so there is no \`game.command(...)\` to play it from ${A("eval")} and no \`game.state(...)\` for ${A("status")} to see anything of what it is doing`,fix:u("window.volterGame.systems (commands + state)")}}const x={physics:"the editor cannot freeze a simulated body while the gizmo edits it, so a physics-driven object's pose is overwritten the next frame",networking:"the Network inspector shows nothing: no connection state, no room, no peers, and no authority answer to keep a server-owned object inspect-only",navigation:"the Navigation panel has no navmesh to report, query a path through, or draw",audio:"⏸ cannot silence this world's audio and the Audio debugger has no graph, transport, meters or events to show",camera:"the selected-camera Inspector cannot report which native camera/controller is active or whether a blend is in progress",get debug(){return`\`game.commands()\` and \`game.providers()\` enumerate nothing, so there is no verb to drive this game with and no state read for ${A("status")} to see`},renderDebug:"the Frame debugger cannot capture a frame and the Profiler has no render-memory snapshot"};function Fe(e){return e==="renderDebug"?"nothing a game declares reaches this slot — the host derives it from the captured renderer's own WebGL2 context (`ingest/ingest-render-debug.ts`), so a mount whose renderer has no such context (a stub context) can never have it":u(e==="debug"?"window.volterGame.systems (commands + state)":`window.volterGame.systems.systemAdapters.${e}`)}function Te(e){const t=`system.${e.slot}`;return e.state==="bound"?e.proof?.state==="failed"?{seam:t,status:"gap",detail:`a ${e.slot} adapter is bound, but its contract failed — ${e.proof.detail}`,missing:x[e.slot],fix:`fix the bound ${e.slot} adapter; registration is not evidence that its operations work`}:e.proof?.state!=="verified"?{seam:t,status:"info",detail:e.proof?.detail??`a ${e.slot} adapter is installed, but no current-epoch operational proof was recorded`}:{seam:t,status:"ok",detail:`a ${e.slot} adapter is installed in the editor's live system registry`}:e.state==="empty"?e.attestedBy==="host"?{seam:t,status:"info",attestedBy:"host",detail:`derived-empty (the HOST's observation, not the game's answer) — nothing filled ${e.slot} on a live mount: ${e.evidence??""}. The game has not itself declared this absence; \`absent(reason)\` in its \`systems\` table is what turns the host's inference into the game's own statement.`}:{seam:t,status:"info",attestedBy:"game",detail:`declared-empty (an attestation, not a mechanically verified absence) — the game answers that it has no ${e.slot}: ${e.evidence??""}`}:e.state==="malformed"?{seam:t,status:"gap",detail:`the game declared a ${e.slot} slot that could not be honoured — ${e.evidence??""}`,missing:x[e.slot],fix:"fix the declaration to engage with the row's evidence — the detail above names the specific conflict (a declared absence must name a contradicting shipped dependency; a declared adapter must be a real adapter or a { present: false, evidence } record)"}:{seam:t,status:"gap",detail:`no ${e.slot} adapter is installed and the game declares no answer for the slot`,missing:x[e.slot],fix:e.fix??Fe(e.slot)}}function Ne(e){const t=`project.${e.slot}`;return e.state==="present"?Le(e,t):{seam:t,status:e.state==="absent"?"gap":"info",detail:e.evidence,...e.missing?{missing:e.missing}:{},...e.fix?{fix:e.fix}:{}}}function Le(e,t){if(e.proof?.state==="failed")return{seam:t,status:"gap",detail:`${e.evidence}; the real verb failed — ${e.proof.detail}`,...e.missing?{missing:e.missing}:{},...e.fix?{fix:e.fix}:{}};const o=e.proof?.state==="verified";return{seam:t,status:o?"ok":"info",detail:o?`${e.evidence}; ${e.proof?.detail}`:`${e.evidence}; declaration is only a precondition — this verb has not completed successfully in the current evidence run`}}function He(e){const t=e.authoringSurface;if(!t)return[];const o=t.sceneDocuments===0?{seam:"authoring.scenes",status:"gap",detail:"the adapter scene table names no authorable scene with a document to open",missing:"Edit has no scene tab — a captured runtime can still be healthy while the authoring surface is empty",fix:"declare authorable scene-table entries with a mountable source or root region so planSceneDocument produces a document"}:t.availableIsolationDocuments<t.isolationDocuments?{seam:"authoring.scenes",status:"gap",detail:`the table plans ${t.isolationDocuments} isolation document(s) but only ${t.availableIsolationDocuments} are available to open`,missing:"declared scenes are absent from the Content catalog",fix:"register every planned isolation document in the available-document catalog"}:{seam:"authoring.scenes",status:"ok",detail:`${t.sceneDocuments} scene document(s) planned`+(t.isolationDocuments>0?`, ${t.openIsolationDocuments} of ${t.isolationDocuments} isolation tab(s) open, ${t.availableIsolationDocuments} available from Content`:"")},s=t.pieces===0&&t.sceneEntries===0?{seam:"authoring.pieces",status:"na",detail:"the scene table declares no scenes, so there is no surface to place prefabs on (a models or website project)"}:(t.storyFailures??0)>0?{seam:"authoring.pieces",status:"gap",detail:`${t.storyFailures} project story module(s) failed to load, so their prefabs are missing from the scene table (${t.pieces} resolved)`,missing:"the prefabs those stories register are absent from Content and the component board",fix:"read `editor.status().storyFailures` for each module and its error, and the console line naming the module the load failed on"}:t.pieces===0?{seam:"authoring.pieces",status:"gap",detail:"the resolved scene table contains no prefab entries",missing:"Content has no project pieces and the component board has nothing to show",fix:"add portable CSF stories inside the adapter region include globs so prefabsFromStories resolves entries"}:{seam:"authoring.pieces",status:"ok",detail:`${t.pieces} prefab(s) resolved from the scene table`};return[o,s]}function Ve(e){return{worldId:e.worldId,reach:e.reach??null,surface:e.surface??null,reachMechanism:e.reachMechanism??null,loop:e.loop??null,loopReason:e.loopReason??null,contract:e.contract??{declared:!1,root:!1,start:!1,pause:!1,resume:!1,systems:null},ownership:e.ownership??null,writeReach:e.writeReach??null,dataWriter:e.dataWriter??null,persistenceProof:e.persistenceProof,systemAdapters:e.systemAdapters??[],projectVerbs:e.projectVerbs??[],authoringSurface:e.authoringSurface??null}}function Ue(e,t){const o="reach"in e||"surface"in e||"reachMechanism"in e,s="loop"in e||"loopReason"in e||"contract"in e,r="contract"in e,i="ownership"in e||"writeReach"in e||"dataWriter"in e||"persistenceProof"in e;return[...o?ke(t):[],...s?[Ee(t)]:[],...r?[Re(t),De(t),Ce(t)]:[],...i?[Pe(t)]:[],...r?[Me(t)]:[],...t.systemAdapters.map(Te),...t.projectVerbs.map(Ne),..."authoringSurface"in e?He(t):[]]}function tt(e){const t=Ue(e,Ve(e));return{rows:t,summary:{worldId:e.worldId,rows:t.length,gaps:t.filter(o=>o.status==="gap").length,ok:t.filter(o=>o.status==="ok").length,na:t.filter(o=>o.status==="na").length,info:t.filter(o=>o.status==="info").length}}}function _(e,t){if(e===t)return!0;for(let o=0;o<e.children.length;o++){const s=e.children[o];if(s&&_(s,t))return!0}return!1}function ot(e){const t=[],o=(i,n)=>{if(i.tagName.toLowerCase()==="canvas"){const a=i.getBoundingClientRect();t.push({element:i,depth:n,area:Math.max(0,a.right-a.left)*Math.max(0,a.bottom-a.top)})}for(let a=0;a<i.children.length;a++){const c=i.children[a];c&&o(c,n+1)}};o(e,0);const s=t.filter(i=>i.area>0),r=s.length>0?s:t;return r.sort((i,n)=>n.area-i.area||i.depth-n.depth),r[0]?.element??null}const ze=new Set(["script","style","link","meta","base","title","noscript"]);function st(e,t){const o=[],s=r=>{for(let i=0;i<r.children.length;i++){const n=r.children[i];n&&(_(n,t)?s(n):ze.has(n.tagName.toLowerCase())||o.push(n))}};return s(e),o}const Be={gap:"✗",ok:"✓",na:"–",info:"·"};function D(e){const t=[` ${Be[e.status]} ${e.seam} — ${e.detail}`];return e.missing&&t.push(` missing: ${e.missing}`),e.fix&&t.push(` fix: ${e.fix}`),t.join(`
@@ -1 +1 @@
1
- import{ar as s}from"./index-EO6Vl92s.js";let e={document:null,file:null,oid:null,selection:[],camera:null,gesture:null},t="",n=!1,r=!1;const o=100;function i(){n||r||(n=!0,globalThis.setTimeout(()=>{n=!1;const l=JSON.stringify(e);l!==t&&(t=l,r=!0,s(e).catch(()=>{t=""}).finally(()=>{r=!1,JSON.stringify(e)!==t&&i()}))},o))}function u(l){e={...e,...l},i()}export{u as r};
1
+ import{ar as s}from"./index-BT8W9a7k.js";let e={document:null,file:null,oid:null,selection:[],camera:null,gesture:null},t="",n=!1,r=!1;const o=100;function i(){n||r||(n=!0,globalThis.setTimeout(()=>{n=!1;const l=JSON.stringify(e);l!==t&&(t=l,r=!0,s(e).catch(()=>{t=""}).finally(()=>{r=!1,JSON.stringify(e)!==t&&i()}))},o))}function u(l){e={...e,...l},i()}export{u as r};
@@ -1 +1 @@
1
- import{Vec3Schema as s}from"./tuples-BcU64Mu6.js";import{u as i,c6 as e,c5 as o,c4 as t}from"./index-EO6Vl92s.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 f=i({type:t(["cuboid","ball","capsule","trimesh"]).describe("Collider shape type. T1.2: every shape scales with the entity's composed world scale (self × ancestors) — for trimesh this means the entity's own mesh geometry vertices are pre-scaled per-axis before building the Rapier trimesh, so it matches whatever size ends up on screen; it does not require the collider's own dimension fields."),halfExtents:s.optional().describe("Half-size [x, y, z] for cuboid colliders, in the ENTITY'S OWN LOCAL units. T1.2: scales with the entity — the actual Rapier collider is this value times the entity's composed world scale (self × every transformed ancestor), per axis, baked in once at load time (Rapier has no live notion of an Object3D's scale)."),radius:e().optional().describe("Radius for ball and capsule colliders, in the ENTITY'S OWN LOCAL units. T1.2: scales with the entity's composed world scale, which MUST be uniform on the collider's round axes (ball: all of x/y/z; capsule: x and z) — a non-uniform scale there throws a loud load error (Rapier balls/capsules cannot represent an ellipse)."),halfHeight:e().optional().describe("Half-height for capsule colliders, in the entity's own local units, along the capsule's axis (Y). T1.2: scales by the entity's composed world scale on that axis."),friction:e().optional().describe("Surface friction coefficient"),restitution:e().optional().describe("Bounciness coefficient (0 = no bounce, 1 = perfect bounce)"),density:e().optional().describe("Mass density. Used to compute mass from collider volume"),offset:s.optional().describe("Translation offset relative to body origin, in the ENTITY'S OWN LOCAL units. T1.2/R1c: scales with the entity's composed world scale (self × every transformed ancestor), per axis, the same way halfExtents/radius/halfHeight do — an unscaled offset would silently drift away from the entity's visual anchor point under any non-1 scale."),isSensor:o().optional().describe("When true, detects overlaps without physical blocking (trigger volume)"),collisionGroups:e().optional().describe("Bitmask: collision layers this collider belongs to (max 16 bits)"),collisionFilter:e().optional().describe("Bitmask: collision layers this collider interacts with (max 16 bits)")}).describe("Physics collider shape and properties");export{f as ColliderDescriptorSchema};
1
+ import{Vec3Schema as s}from"./tuples-C31jYZT7.js";import{u as i,c6 as e,c5 as o,c4 as t}from"./index-BT8W9a7k.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 f=i({type:t(["cuboid","ball","capsule","trimesh"]).describe("Collider shape type. T1.2: every shape scales with the entity's composed world scale (self × ancestors) — for trimesh this means the entity's own mesh geometry vertices are pre-scaled per-axis before building the Rapier trimesh, so it matches whatever size ends up on screen; it does not require the collider's own dimension fields."),halfExtents:s.optional().describe("Half-size [x, y, z] for cuboid colliders, in the ENTITY'S OWN LOCAL units. T1.2: scales with the entity — the actual Rapier collider is this value times the entity's composed world scale (self × every transformed ancestor), per axis, baked in once at load time (Rapier has no live notion of an Object3D's scale)."),radius:e().optional().describe("Radius for ball and capsule colliders, in the ENTITY'S OWN LOCAL units. T1.2: scales with the entity's composed world scale, which MUST be uniform on the collider's round axes (ball: all of x/y/z; capsule: x and z) — a non-uniform scale there throws a loud load error (Rapier balls/capsules cannot represent an ellipse)."),halfHeight:e().optional().describe("Half-height for capsule colliders, in the entity's own local units, along the capsule's axis (Y). T1.2: scales by the entity's composed world scale on that axis."),friction:e().optional().describe("Surface friction coefficient"),restitution:e().optional().describe("Bounciness coefficient (0 = no bounce, 1 = perfect bounce)"),density:e().optional().describe("Mass density. Used to compute mass from collider volume"),offset:s.optional().describe("Translation offset relative to body origin, in the ENTITY'S OWN LOCAL units. T1.2/R1c: scales with the entity's composed world scale (self × every transformed ancestor), per axis, the same way halfExtents/radius/halfHeight do — an unscaled offset would silently drift away from the entity's visual anchor point under any non-1 scale."),isSensor:o().optional().describe("When true, detects overlaps without physical blocking (trigger volume)"),collisionGroups:e().optional().describe("Bitmask: collision layers this collider belongs to (max 16 bits)"),collisionFilter:e().optional().describe("Bitmask: collision layers this collider interacts with (max 16 bits)")}).describe("Physics collider shape and properties");export{f as ColliderDescriptorSchema};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ui-board-document-CptsO8E6.js","assets/index-EO6Vl92s.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/design-time-layers-Bspf2qH5.js","assets/root-stacking-BEd9ZvxC.js","assets/edit-mode-authoring-C0sf0ewd.js","assets/design-time-mount-registry-DUpXCg1U.js","assets/react-story-board-BdHhG7gL.js","assets/game-surface-defaults-D8S4cRxi.js","assets/world-documents-80AAIyS9.js","assets/react-canvas-navigation-VKHmF9L9.js","assets/component-board-registry-DrIa2csL.js","assets/surface-state-l4D0tVlT.js","assets/board-guides-D-k2cJcJ.js","assets/CanvasSceneViewport-lY7d92L2.js","assets/RootSelectionOverlay-DGhqE3ru.js","assets/eyedropper-session-bjPXnfeX.js","assets/layered-pick-Ciu7uLFh.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/inspect-BqpAh85y.js","assets/inference-diagnostics-18bkEAju.js","assets/Toolbar-BaTvvAae.js","assets/transform-mode-request-BT4Zmx_G.js","assets/TransientHint-Bf1GHsWL.js","assets/ReactCanvasControls-B3DU4o7S.js","assets/story-media-presence-CsYCXCgg.js"])))=>i.map(i=>d[i]);
2
- import{r as a}from"./component-board-registry-DrIa2csL.js";import{dL as s,K as n,_ as i,Z as c,as as d,eL as l}from"./index-EO6Vl92s.js";import{s as m,g as p}from"./story-media-presence-CsYCXCgg.js";const r="UI",u={medium:"dom",owner:"@volter/editor-game/react/ui-board",documentId:s,title:r,presence:()=>l()?p().dom?"present":"absent":null,subscribe:o=>{const e=m(o),t=d(o);return()=>{e(),t()}},install:async o=>{try{const{installUiBoard:e}=await i(async()=>{const{installUiBoard:t}=await import("./ui-board-document-CptsO8E6.js");return{installUiBoard:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]));e(o)}catch(e){throw c.error(`Failed to load the ${r} board: ${String(e)}`,"scene"),e}},absentReason:()=>`This project has no ${r} board (${s}): board presence keys on STORIES, not on roots, and none of this project's stories declares the "dom" medium. Declare it — a manifest root entry naming the story's module, or a \`volter.adapter.ts\` regionInclude that covers it — and the board appears. ${n("console")} names every story it could not place.`},_="workspace.service";function b(){return a(u)}const h=Object.freeze(Object.defineProperty({__proto__:null,point:_,start:b},Symbol.toStringTag,{value:"Module"}));export{r as U,h as c};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ui-board-document-Cfpw8u3U.js","assets/index-BT8W9a7k.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/design-time-layers-C2fW3RP2.js","assets/root-stacking-BEd9ZvxC.js","assets/edit-mode-authoring-CFh9mf99.js","assets/design-time-mount-registry-DUpXCg1U.js","assets/react-story-board-BIV6SjrH.js","assets/game-surface-defaults-D8S4cRxi.js","assets/world-documents-RmUr_mpg.js","assets/react-canvas-navigation-DqwQuzs1.js","assets/component-board-registry-DrIa2csL.js","assets/surface-state-CFqL5gLs.js","assets/board-guides-b_JfsCO5.js","assets/CanvasSceneViewport-DdIbRDvz.js","assets/RootSelectionOverlay-BDhYO7vB.js","assets/eyedropper-session-bjPXnfeX.js","assets/layered-pick-Ba5bN3pV.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/inspect-CewZ8N7e.js","assets/inference-diagnostics-C2jsr-K4.js","assets/Toolbar-BcVhV4HO.js","assets/transform-mode-request-DSr__Uu7.js","assets/TransientHint-8hS698wl.js","assets/ReactCanvasControls-BO6VQ4VE.js","assets/story-media-presence-D8aagE7-.js"])))=>i.map(i=>d[i]);
2
+ import{r as a}from"./component-board-registry-DrIa2csL.js";import{dL as s,K as n,_ as i,Z as c,as as d,eL as l}from"./index-BT8W9a7k.js";import{s as m,g as p}from"./story-media-presence-D8aagE7-.js";const r="UI",u={medium:"dom",owner:"@volter/editor-game/react/ui-board",documentId:s,title:r,presence:()=>l()?p().dom?"present":"absent":null,subscribe:o=>{const e=m(o),t=d(o);return()=>{e(),t()}},install:async o=>{try{const{installUiBoard:e}=await i(async()=>{const{installUiBoard:t}=await import("./ui-board-document-Cfpw8u3U.js");return{installUiBoard:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]));e(o)}catch(e){throw c.error(`Failed to load the ${r} board: ${String(e)}`,"scene"),e}},absentReason:()=>`This project has no ${r} board (${s}): board presence keys on STORIES, not on roots, and none of this project's stories declares the "dom" medium. Declare it — a manifest root entry naming the story's module, or a \`volter.adapter.ts\` regionInclude that covers it — and the board appears. ${n("console")} names every story it could not place.`},_="workspace.service";function b(){return a(u)}const h=Object.freeze(Object.defineProperty({__proto__:null,point:_,start:b},Symbol.toStringTag,{value:"Module"}));export{r as U,h as c};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ThreeBoardDocument-2Hape4Gq.js","assets/index-EO6Vl92s.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/three-contract-Dkt6PmWY.js","assets/object3d-document-session-registry-3YUZT4RT.js","assets/Object3DDocumentViewport-CmgIuzQv.js","assets/viewport-surface-status-C9vuKKQB.js","assets/standard-viewport-dressing-DzgsLMqH.js","assets/content-bounds-B_xPBrsP.js","assets/hierarchy-marks-r1SCnl92.js","assets/workspace-arrangement-COs530TA.js","assets/three.core-3arARmh6.js","assets/editor-layers-B43PZgUF.js","assets/environment-Dg-YaLsA.js","assets/three.module-BLhyNg0e.js","assets/RoomEnvironment-BkknvS_I.js","assets/EXRLoader-CITMBvGd.js","assets/HDRLoader-BTGuGhVo.js","assets/user-data-DnahhlAD.js","assets/story-three-preview-N78COIhD.js","assets/asset-preview-BqLvTtnb.js","assets/renderer-ownership-BovSEcLv.js","assets/studio-environment-BRMTYTp1.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/bitmap-label-Ct4k6ehY.js","assets/crash-null-boundary-v3a0uEgw.js","assets/events-156d8d12.esm-CYeuVCYr.js","assets/index-bQE2NA0D.js","assets/story-mount-turn-DFRTj5hi.js","assets/three-story-model-D8xXaW4_.js","assets/user-data-CODoGZqA.js","assets/object-marks-BnvSuCTt.js"])))=>i.map(i=>d[i]);
2
- import{r as a}from"./component-board-registry-DrIa2csL.js";import{fg as s,K as n,_ as i,Z as c,as as d,eL as m}from"./index-EO6Vl92s.js";import{s as p,g as l}from"./story-media-presence-CsYCXCgg.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 o="3D",u={medium:"three",owner:"@volter/editor-game/three-board",documentId:s,title:o,presence:()=>m()?l().three?"present":"absent":null,subscribe:r=>{const e=p(r),t=d(r);return()=>{e(),t()}},install:async({store:r})=>{try{const{installThreeBoardDocument:e}=await i(async()=>{const{installThreeBoardDocument:t}=await import("./ThreeBoardDocument-2Hape4Gq.js");return{installThreeBoardDocument:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]));e(r)}catch(e){throw c.error(`Failed to load the ${o} board: ${String(e)}`,"scene"),e}},absentReason:()=>`This project has no ${o} board (${s}): board presence keys on STORIES, not on roots, and none of this project's stories declares the "three" medium. Declare it — a manifest root entry naming the story's module, or a \`volter.adapter.ts\` regionInclude that covers it — and the board appears. ${n("console")} names every story it could not place.`},D="workspace.service";function O(){return a(u)}export{D as point,O as start};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ThreeBoardDocument-Cb5ShRia.js","assets/index-BT8W9a7k.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/three-contract-Dkt6PmWY.js","assets/object3d-document-session-registry-DOBWYBmc.js","assets/Object3DDocumentViewport-Cd1mOnu4.js","assets/viewport-surface-status-CVu88cZ8.js","assets/standard-viewport-dressing-Cqc3upSK.js","assets/content-bounds-DetzUl3q.js","assets/hierarchy-marks-DWnBwmhe.js","assets/workspace-arrangement-B1xtK850.js","assets/three.core-3arARmh6.js","assets/editor-layers-JmP4C0fP.js","assets/environment-Dg-YaLsA.js","assets/three.module-BLhyNg0e.js","assets/RoomEnvironment-BkknvS_I.js","assets/EXRLoader-CITMBvGd.js","assets/HDRLoader-BTGuGhVo.js","assets/user-data-CqubllMS.js","assets/story-three-preview-CHq5WHPd.js","assets/asset-preview-DV3GTIQp.js","assets/renderer-ownership-BovSEcLv.js","assets/studio-environment-ChEwdjoc.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/bitmap-label-Ct4k6ehY.js","assets/crash-null-boundary-v3a0uEgw.js","assets/events-156d8d12.esm-CYeuVCYr.js","assets/index-bQE2NA0D.js","assets/story-mount-turn-DFRTj5hi.js","assets/three-story-model-B6RT2tEb.js","assets/user-data-CODoGZqA.js","assets/object-marks-BnvSuCTt.js"])))=>i.map(i=>d[i]);
2
+ import{r as a}from"./component-board-registry-DrIa2csL.js";import{fg as s,K as n,_ as i,Z as c,as as d,eL as m}from"./index-BT8W9a7k.js";import{s as p,g as l}from"./story-media-presence-D8aagE7-.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 o="3D",u={medium:"three",owner:"@volter/editor-game/three-board",documentId:s,title:o,presence:()=>m()?l().three?"present":"absent":null,subscribe:r=>{const e=p(r),t=d(r);return()=>{e(),t()}},install:async({store:r})=>{try{const{installThreeBoardDocument:e}=await i(async()=>{const{installThreeBoardDocument:t}=await import("./ThreeBoardDocument-Cb5ShRia.js");return{installThreeBoardDocument:t}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]));e(r)}catch(e){throw c.error(`Failed to load the ${o} board: ${String(e)}`,"scene"),e}},absentReason:()=>`This project has no ${o} board (${s}): board presence keys on STORIES, not on roots, and none of this project's stories declares the "three" medium. Declare it — a manifest root entry naming the story's module, or a \`volter.adapter.ts\` regionInclude that covers it — and the board appears. ${n("console")} names every story it could not place.`},D="workspace.service";function O(){return a(u)}export{D as point,O as start};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CanvasBoardDocument-DUkSFZ3M.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/react-canvas-navigation-VKHmF9L9.js","assets/index-EO6Vl92s.js","assets/index-nmcBqr7Y.js","assets/index-D_NuPfjr.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/react-story-board-BdHhG7gL.js","assets/canvas-preview-frames-2tJZVdS2.js","assets/index-BTlpcjdl.js","assets/ReactCanvasControls-B3DU4o7S.js","assets/story-presentation-Inb0tF8V.js","assets/pixi-story-model-DNkfnWUV.js","assets/story-pixi-preview-BaS3gW36.js","assets/crash-null-boundary-v3a0uEgw.js","assets/story-mount-turn-DFRTj5hi.js"])))=>i.map(i=>d[i]);
2
- import{r as s}from"./component-board-registry-DrIa2csL.js";import{eK as r,_ as n,Z as i,as as c,eL as d}from"./index-EO6Vl92s.js";import{s as m,g as p}from"./story-media-presence-CsYCXCgg.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 t="2D",l={medium:"canvas",owner:"@volter/editor-game/canvas/canvas-board",documentId:r,title:t,presence:()=>d()?p().canvas?"present":"absent":null,subscribe:e=>{const o=m(e),a=c(e);return()=>{o(),a()}},install:async()=>{try{const{installCanvasBoardDocument:e}=await n(async()=>{const{installCanvasBoardDocument:o}=await import("./CanvasBoardDocument-DUkSFZ3M.js");return{installCanvasBoardDocument:o}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]));e()}catch(e){throw i.error(`Failed to load the ${t} board: ${String(e)}`,"scene"),e}},absentReason:()=>`This project has no ${t} board (${r}): board presence keys on STORIES, not on roots, and none of this project's stories declares the "canvas" medium. Declare it — a manifest root entry naming the story's module, or a \`volter.adapter.ts\` regionInclude that covers it — and the board appears. \`volter-game-editor console\` names every story it could not place.`},D="workspace.service";function E(){return s(l)}export{D as point,E as start};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CanvasBoardDocument-VJp9kXIl.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/react-canvas-navigation-DqwQuzs1.js","assets/index-BT8W9a7k.js","assets/index-nmcBqr7Y.js","assets/index-D_NuPfjr.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/react-story-board-BIV6SjrH.js","assets/canvas-preview-frames-CHeT2IAu.js","assets/index-DL2Takj5.js","assets/ReactCanvasControls-BO6VQ4VE.js","assets/story-presentation-DCpop4w8.js","assets/pixi-story-model-DNkfnWUV.js","assets/story-pixi-preview-DD5zQqGj.js","assets/crash-null-boundary-v3a0uEgw.js","assets/story-mount-turn-DFRTj5hi.js"])))=>i.map(i=>d[i]);
2
+ import{r as s}from"./component-board-registry-DrIa2csL.js";import{eK as r,_ as n,Z as i,as as c,eL as d}from"./index-BT8W9a7k.js";import{s as m,g as p}from"./story-media-presence-D8aagE7-.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 t="2D",l={medium:"canvas",owner:"@volter/editor-game/canvas/canvas-board",documentId:r,title:t,presence:()=>d()?p().canvas?"present":"absent":null,subscribe:e=>{const o=m(e),a=c(e);return()=>{o(),a()}},install:async()=>{try{const{installCanvasBoardDocument:e}=await n(async()=>{const{installCanvasBoardDocument:o}=await import("./CanvasBoardDocument-VJp9kXIl.js");return{installCanvasBoardDocument:o}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]));e()}catch(e){throw i.error(`Failed to load the ${t} board: ${String(e)}`,"scene"),e}},absentReason:()=>`This project has no ${t} board (${r}): board presence keys on STORIES, not on roots, and none of this project's stories declares the "canvas" medium. Declare it — a manifest root entry naming the story's module, or a \`volter.adapter.ts\` regionInclude that covers it — and the board appears. \`volter-game-editor console\` names every story it could not place.`},D="workspace.service";function E(){return s(l)}export{D as point,E as start};
@@ -1 +1 @@
1
- import{a as n,b as i}from"./oid-transform-DsAJ1P8o.js";import"./index-EO6Vl92s.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./writer-tw6EcuVO.js";import"./r3f-physics-binding-CFwn2dZ0.js";const m=Symbol.for("volter.editor.componentContractAnalyzer");function r(o){globalThis[m]=o}const z="workspace.service";function R(){return r((o,t)=>n(o,t,i(o,t))),()=>r(null)}export{z as point,R as start};
1
+ import{a as n,b as i}from"./oid-transform-AhgVgFiI.js";import"./index-BT8W9a7k.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./writer-tw6EcuVO.js";import"./r3f-physics-binding-DivDhpIZ.js";const m=Symbol.for("volter.editor.componentContractAnalyzer");function r(o){globalThis[m]=o}const z="workspace.service";function R(){return r((o,t)=>n(o,t,i(o,t))),()=>r(null)}export{z as point,R as start};
@@ -1 +1 @@
1
- import{g as i}from"./user-data-DnahhlAD.js";function u(n){return o(n)!==void 0}function e(n){const t=i(n,"authoringInstance");return typeof t=="string"&&t?t:void 0}function r(n){const t=n?.userData?.oid;return typeof t=="string"&&t?t:void 0}function o(n){const t=e(n);if(t!==void 0)return i(n?.parent,"authoringInstance")===t?void 0:t}function a(n){const t=n?.__volterOid;return typeof t=="string"&&t?t:void 0}function c(n,t){return t===0?n:`${n}#${t}`}function d(n){return n.includes("#")}function f(n,t){return r(n)===r(t)}function O(n){return o(n)??a(n)??r(n)}export{u as a,O as b,c,d,e as i,r as o,f as r};
1
+ import{g as i}from"./user-data-CqubllMS.js";function u(n){return o(n)!==void 0}function e(n){const t=i(n,"authoringInstance");return typeof t=="string"&&t?t:void 0}function r(n){const t=n?.userData?.oid;return typeof t=="string"&&t?t:void 0}function o(n){const t=e(n);if(t!==void 0)return i(n?.parent,"authoringInstance")===t?void 0:t}function a(n){const t=n?.__volterOid;return typeof t=="string"&&t?t:void 0}function c(n,t){return t===0?n:`${n}#${t}`}function d(n){return n.includes("#")}function f(n,t){return r(n)===r(t)}function O(n){return o(n)??a(n)??r(n)}export{u as a,O as b,c,d,e as i,r as o,f as r};
@@ -1 +1 @@
1
- import{aD as i}from"./index-EO6Vl92s.js";import{c as p,i as f,a as l,b as u}from"./instance-fork-actions-D3sRzS3K.js";import{i as k,a as h}from"./fork-menu-ByAv7gfK.js";import{t as c}from"./three-state-15gXjQ51.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./editor-shell-store-CW9Fjab9.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-B43PZgUF.js";import"./workspace-arrangement-COs530TA.js";import"./user-data-DnahhlAD.js";import"./entity-object-C40NpVSX.js";import"./three-contract-Dkt6PmWY.js";const m={ok:!1,error:"the editor shell has not started yet."};function d(o,e){const r=o.id;return typeof r=="string"&&r.trim()!==""?r:[...e.shell.selectedEntityIds][0]}const q={"extract-component":{timeoutMs:3e4,derivedRefresh:"always",handle:async o=>{try{const e=c();if(!e)return m;const r=d(o,e);if(!r)return{ok:!1,error:"extract-component needs an id or a selected row."};const n=i(e.shell),a=h(n,r);if(!l(n.hierarchy.node(r),a,r))return{ok:!1,error:`"${r}" is not extractable: only a native source element row (not a component instance, group row, or document) with a writable source backend can be extracted.`};const t=o.name,s=await a?.extractComponent?.(r,typeof t=="string"&&t.trim()!==""?t:void 0);return s===void 0?{ok:!1,error:`"${r}" lost its extract seam.`}:u(s)?{ok:!0,data:{hint:s}}:{ok:!1,error:s}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}},"fork-component":{timeoutMs:3e4,derivedRefresh:"always",handle:async o=>{try{const e=c();if(!e)return m;const r=d(o,e);if(!r)return{ok:!1,error:"fork-component needs an id or a selected row."};const n=i(e.shell),a=k(n,r);if(!p(n.hierarchy.node(r),a,r))return{ok:!1,error:`"${r}" is not forkable: only a component-instance row whose callsite AND definition both resolve, on an adapter with a writable source backend, can be forked.`};const t=await a?.forkComponent?.(r);return t===void 0?{ok:!1,error:`"${r}" lost its fork seam.`}:f(t)?{ok:!0,data:{hint:t}}:{ok:!1,error:t}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}}},z="workspace.command";export{q as commands,z as point};
1
+ import{aD as i}from"./index-BT8W9a7k.js";import{c as p,i as f,a as l,b as u}from"./instance-fork-actions-D3sRzS3K.js";import{i as k,a as h}from"./fork-menu-Djl0ZpaE.js";import{t as c}from"./three-state-BPIdxcKm.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./editor-shell-store-BRBXaK6_.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-JmP4C0fP.js";import"./workspace-arrangement-B1xtK850.js";import"./user-data-CqubllMS.js";import"./entity-object-FbYj5hy6.js";import"./three-contract-Dkt6PmWY.js";const m={ok:!1,error:"the editor shell has not started yet."};function d(o,e){const r=o.id;return typeof r=="string"&&r.trim()!==""?r:[...e.shell.selectedEntityIds][0]}const q={"extract-component":{timeoutMs:3e4,derivedRefresh:"always",handle:async o=>{try{const e=c();if(!e)return m;const r=d(o,e);if(!r)return{ok:!1,error:"extract-component needs an id or a selected row."};const n=i(e.shell),a=h(n,r);if(!l(n.hierarchy.node(r),a,r))return{ok:!1,error:`"${r}" is not extractable: only a native source element row (not a component instance, group row, or document) with a writable source backend can be extracted.`};const t=o.name,s=await a?.extractComponent?.(r,typeof t=="string"&&t.trim()!==""?t:void 0);return s===void 0?{ok:!1,error:`"${r}" lost its extract seam.`}:u(s)?{ok:!0,data:{hint:s}}:{ok:!1,error:s}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}},"fork-component":{timeoutMs:3e4,derivedRefresh:"always",handle:async o=>{try{const e=c();if(!e)return m;const r=d(o,e);if(!r)return{ok:!1,error:"fork-component needs an id or a selected row."};const n=i(e.shell),a=k(n,r);if(!p(n.hierarchy.node(r),a,r))return{ok:!1,error:`"${r}" is not forkable: only a component-instance row whose callsite AND definition both resolve, on an adapter with a writable source backend, can be forked.`};const t=await a?.forkComponent?.(r);return t===void 0?{ok:!1,error:`"${r}" lost its fork seam.`}:f(t)?{ok:!0,data:{hint:t}}:{ok:!1,error:t}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}}},z="workspace.command";export{q as commands,z as point};
@@ -1 +1 @@
1
- import{e as o,b as a,u as l,c as u}from"./fork-menu-ByAv7gfK.js";import{fi as c,aD as i,fj as m,fk as p,fl as g,fm as I}from"./index-EO6Vl92s.js";import"./instance-fork-actions-D3sRzS3K.js";import"./editor-shell-store-CW9Fjab9.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-B43PZgUF.js";import"./workspace-arrangement-COs530TA.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-DnahhlAD.js";import"./entity-object-C40NpVSX.js";import"./three-contract-Dkt6PmWY.js";const f="Reveal Internals",E="Hide Internals";function s(n,e){const t=n;return typeof t.hasInternals!="function"||!t.hasInternals(e)||m(t,p()).isInternal(e)?null:{label:I(e)?E:f,toggle:()=>{g(e)}}}let r=null;function R(){r||(r=c(({nodeId:n,store:e})=>s(i(e),n)!==null,({nodeId:n,store:e})=>{const t=s(i(e),n);return t?[{label:t.label,action:()=>{t.toggle(),e.notifyIngestEdit()}}]:[]}))}function A(){r?.(),r=null}const q="workspace.service";function z(){return o(),a(),R(),()=>{l(),u(),A()}}export{q as point,z as start};
1
+ import{e as o,b as a,u as l,c as u}from"./fork-menu-Djl0ZpaE.js";import{fi as c,aD as i,fj as m,fk as p,fl as g,fm as I}from"./index-BT8W9a7k.js";import"./instance-fork-actions-D3sRzS3K.js";import"./editor-shell-store-BRBXaK6_.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-JmP4C0fP.js";import"./workspace-arrangement-B1xtK850.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-CqubllMS.js";import"./entity-object-FbYj5hy6.js";import"./three-contract-Dkt6PmWY.js";const f="Reveal Internals",E="Hide Internals";function s(n,e){const t=n;return typeof t.hasInternals!="function"||!t.hasInternals(e)||m(t,p()).isInternal(e)?null:{label:I(e)?E:f,toggle:()=>{g(e)}}}let r=null;function R(){r||(r=c(({nodeId:n,store:e})=>s(i(e),n)!==null,({nodeId:n,store:e})=>{const t=s(i(e),n);return t?[{label:t.label,action:()=>{t.toggle(),e.notifyIngestEdit()}}]:[]}))}function A(){r?.(),r=null}const q="workspace.service";function z(){return o(),a(),R(),()=>{l(),u(),A()}}export{q as point,z as start};
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-EO6Vl92s.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css"])))=>i.map(i=>d[i]);
2
- import{curve as T,sampleCurve as C}from"./curve-BEKFgt87.js";import{dataRef as L,getRef as V}from"./data-ref-BUMaOgK6.js";import{_ as h}from"./index-EO6Vl92s.js";import{parseDataJson as g,toDataJsonSchema as y}from"./data-asset-BZA163so.js";import{findDanglingDataRefs as S,collectDeclaredRefFields as j,findMissingRefTargets as $}from"./data-check-core-CHqar_E8.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";async function v(){const[e,s]=await Promise.all([h(()=>import("./index-EO6Vl92s.js").then(o=>o.tZ),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),h(()=>import("./index-EO6Vl92s.js").then(o=>o.tZ),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))]);return{readdirSync:e.readdirSync,readFileSync:e.readFileSync,statSync:e.statSync,join:s.join,relative:s.relative}}function u(e,s){let o;try{o=e.readdirSync(s)}catch{return[]}const a=[];for(const r of o){const n=e.join(s,r);e.statSync(n).isDirectory()?a.push(...u(e,n)):r.endsWith(".data.json")&&a.push(n)}return a}function p(e){const s=e.split("\\").join("/");return s.split("/").pop()?.replace(/\.data\.json$/,"")??s}function b(e,s,o,a,r){const n=new Map,c=new Map;for(const l of u(e,e.join(s,"src","data"))){const t=e.relative(s,l).split("\\").join("/"),i=p(t),d=c.get(i);d?d.push(t):c.set(i,[t]);try{n.set(i,JSON.parse(e.readFileSync(l,"utf-8")))}catch(f){a.push(`"${t}" is not valid JSON: ${f instanceof Error?f.message:String(f)}`);continue}o.has(t)||r.push(`"${t}" is not registered in the data-asset registry (src/data/assets.ts), so it gets no build-time schema check (runtime parse-on-load still applies). Register it there — the template ships the worked example.`)}const m=new Set;for(const[l,t]of c)t.length<2||(m.add(l),a.push(`asset stem "${l}" is claimed by ${t.length} files (${t.join(", ")}) — "file#key" refs and the data-asset registry address a file by its stem alone (§2.2), so this is an unresolvable identity collision. Rename one — asset stems must be unique across the whole project, not just per directory.`),n.delete(l));return{parsedByStem:n,ambiguousStems:m}}async function w(e){const s=await v(),o=e.root??process.cwd(),a=[],r=[],n=new Set(e.assets.map(t=>t.sourcePath.split("\\").join("/"))),{parsedByStem:c,ambiguousStems:m}=b(s,o,n,a,r);for(const t of e.assets){const i=t.sourcePath.split("\\").join("/");if(!c.has(p(i))){m.has(p(i))||a.push(`registered data asset "${i}" was not found on disk — fix the path in the registry (src/data/assets.ts) or restore the file.`);continue}try{g(t.schema,c.get(p(i)),i)}catch(d){a.push(d instanceof Error?d.message:String(d))}}for(const t of S(c))a.push(`dangling data ref in "src/data/${t.inAsset}.data.json" at ${t.atPath}: "${t.ref}" — "${t.missingSegment}" does not exist in src/data/${t.targetAsset}.data.json. Fix the key or remove the ref (refs are "file#key" strings).`);const l=new Set(c.keys());for(const t of e.assets){const i=t.sourcePath.split("\\").join("/"),d=j(y(t.schema));for(const f of $(d,l))a.push(`"${i}" declares field "${f.fieldPath}" as dataRef('${f.targetStem}'), but no "src/data/${f.targetStem}.data.json" exists. Restore/rename the target file, or update the dataRef('${f.targetStem}') call in the schema.`)}return{errors:a,warnings:r}}function _(e){const s=e.split("\\").join("/");return/\/src\/(?:tools|contributions)\//.test(s)||/\.tool\.[tj]sx?(\?|$)/.test(s)}function J(e){return{name:"volter:data-check",apply:"build",async buildStart(){const{errors:s,warnings:o}=await w(e);for(const a of o)this.warn(a);s.length>0&&this.error(`data-asset validation failed (${s.length} problem${s.length===1?"":"s"}):
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BT8W9a7k.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css"])))=>i.map(i=>d[i]);
2
+ import{curve as T,sampleCurve as C}from"./curve-DVwdpVlr.js";import{dataRef as L,getRef as V}from"./data-ref-mlP7PknV.js";import{_ as h}from"./index-BT8W9a7k.js";import{parseDataJson as g,toDataJsonSchema as y}from"./data-asset-DWShrZTd.js";import{findDanglingDataRefs as S,collectDeclaredRefFields as j,findMissingRefTargets as $}from"./data-check-core-CHqar_E8.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";async function v(){const[e,s]=await Promise.all([h(()=>import("./index-BT8W9a7k.js").then(o=>o.tZ),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),h(()=>import("./index-BT8W9a7k.js").then(o=>o.tZ),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))]);return{readdirSync:e.readdirSync,readFileSync:e.readFileSync,statSync:e.statSync,join:s.join,relative:s.relative}}function u(e,s){let o;try{o=e.readdirSync(s)}catch{return[]}const a=[];for(const r of o){const n=e.join(s,r);e.statSync(n).isDirectory()?a.push(...u(e,n)):r.endsWith(".data.json")&&a.push(n)}return a}function p(e){const s=e.split("\\").join("/");return s.split("/").pop()?.replace(/\.data\.json$/,"")??s}function b(e,s,o,a,r){const n=new Map,c=new Map;for(const l of u(e,e.join(s,"src","data"))){const t=e.relative(s,l).split("\\").join("/"),i=p(t),d=c.get(i);d?d.push(t):c.set(i,[t]);try{n.set(i,JSON.parse(e.readFileSync(l,"utf-8")))}catch(f){a.push(`"${t}" is not valid JSON: ${f instanceof Error?f.message:String(f)}`);continue}o.has(t)||r.push(`"${t}" is not registered in the data-asset registry (src/data/assets.ts), so it gets no build-time schema check (runtime parse-on-load still applies). Register it there — the template ships the worked example.`)}const m=new Set;for(const[l,t]of c)t.length<2||(m.add(l),a.push(`asset stem "${l}" is claimed by ${t.length} files (${t.join(", ")}) — "file#key" refs and the data-asset registry address a file by its stem alone (§2.2), so this is an unresolvable identity collision. Rename one — asset stems must be unique across the whole project, not just per directory.`),n.delete(l));return{parsedByStem:n,ambiguousStems:m}}async function w(e){const s=await v(),o=e.root??process.cwd(),a=[],r=[],n=new Set(e.assets.map(t=>t.sourcePath.split("\\").join("/"))),{parsedByStem:c,ambiguousStems:m}=b(s,o,n,a,r);for(const t of e.assets){const i=t.sourcePath.split("\\").join("/");if(!c.has(p(i))){m.has(p(i))||a.push(`registered data asset "${i}" was not found on disk — fix the path in the registry (src/data/assets.ts) or restore the file.`);continue}try{g(t.schema,c.get(p(i)),i)}catch(d){a.push(d instanceof Error?d.message:String(d))}}for(const t of S(c))a.push(`dangling data ref in "src/data/${t.inAsset}.data.json" at ${t.atPath}: "${t.ref}" — "${t.missingSegment}" does not exist in src/data/${t.targetAsset}.data.json. Fix the key or remove the ref (refs are "file#key" strings).`);const l=new Set(c.keys());for(const t of e.assets){const i=t.sourcePath.split("\\").join("/"),d=j(y(t.schema));for(const f of $(d,l))a.push(`"${i}" declares field "${f.fieldPath}" as dataRef('${f.targetStem}'), but no "src/data/${f.targetStem}.data.json" exists. Restore/rename the target file, or update the dataRef('${f.targetStem}') call in the schema.`)}return{errors:a,warnings:r}}function _(e){const s=e.split("\\").join("/");return/\/src\/(?:tools|contributions)\//.test(s)||/\.tool\.[tj]sx?(\?|$)/.test(s)}function J(e){return{name:"volter:data-check",apply:"build",async buildStart(){const{errors:s,warnings:o}=await w(e);for(const a of o)this.warn(a);s.length>0&&this.error(`data-asset validation failed (${s.length} problem${s.length===1?"":"s"}):
3
3
  ${s.map(a=>` - ${a}`).join(`
4
4
  `)}`)},generateBundle(s,o){const a=new Set;for(const r of Object.values(o))if(r.type==="chunk")for(const n of Object.keys(r.modules))_(n)&&a.add(n.split("\\").join("/"));a.size>0&&this.error(`project tool code reached the game build — tools are editor-only and must never ship to players. Remove every game-code import of these modules (tools may import game code, never the reverse):
5
5
  ${[...a].map(r=>` - ${r}`).join(`
@@ -1 +1 @@
1
- import{$ as t,a3 as a,a4 as i}from"./index-EO6Vl92s.js";async function e(){const o=await fetch(`${t}/configurations`);return(await a(o,"Could not list run configurations")).configurations}async function c(o){const n=await fetch(`${t}/configurations/${encodeURIComponent(o)}/start`,{method:"POST"});return a(n,`Could not start run configuration "${o}"`)}async function u(o,n){const s={method:"POST"};return n&&(s.signal=n),fetch(`${t}/configurations/${encodeURIComponent(o)}/build`,s)}async function f(o){const n=await fetch(`${t}/configurations/${encodeURIComponent(o)}/stop`,{method:"POST"});i(n,`Could not stop run configuration "${o}"`)}export{c as a,u as b,e as l,f as s};
1
+ import{$ as t,a3 as a,a4 as i}from"./index-BT8W9a7k.js";async function e(){const o=await fetch(`${t}/configurations`);return(await a(o,"Could not list run configurations")).configurations}async function c(o){const n=await fetch(`${t}/configurations/${encodeURIComponent(o)}/start`,{method:"POST"});return a(n,`Could not start run configuration "${o}"`)}async function u(o,n){const s={method:"POST"};return n&&(s.signal=n),fetch(`${t}/configurations/${encodeURIComponent(o)}/build`,s)}async function f(o){const n=await fetch(`${t}/configurations/${encodeURIComponent(o)}/stop`,{method:"POST"});i(n,`Could not stop run configuration "${o}"`)}export{c as a,u as b,e as l,f as s};
@@ -1 +1 @@
1
- import{a as n}from"./jsx-runtime-DPjLkJKQ.js";import{a9 as s,a6 as e,r as o}from"./index-EO6Vl92s.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const w="workspace.status",f="Connection",g="left",y=20,i="tool:network.utility";function N(){const t=s(()=>o().systems.inspectedNetworking()?.getConnectionState?.()??null);return t===null?null:n.jsxs(e,{type:"button",variant:"ghost",size:"compact",className:"volter-status-action","data-testid":"status-connection","data-connection-state":t,onClick:()=>o().workspace.showUtility(i),title:"Network connection state — open Network diagnostics",children:["net: ",t]})}export{g as align,N as default,y as order,w as point,f as title};
1
+ import{a as n}from"./jsx-runtime-DPjLkJKQ.js";import{a9 as s,a6 as e,r as o}from"./index-BT8W9a7k.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const w="workspace.status",f="Connection",g="left",y=20,i="tool:network.utility";function N(){const t=s(()=>o().systems.inspectedNetworking()?.getConnectionState?.()??null);return t===null?null:n.jsxs(e,{type:"button",variant:"ghost",size:"compact",className:"volter-status-action","data-testid":"status-connection","data-connection-state":t,onClick:()=>o().workspace.showUtility(i),title:"Network connection state — open Network diagnostics",children:["net: ",t]})}export{g as align,N as default,y as order,w as point,f as title};
@@ -1 +1 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{a as y}from"./three-contract-Dkt6PmWY.js";import{i as x}from"./component-instance-root-JAQpC4Pi.js";import{al as j,aL as i,bQ as v,fe as k,ff as c,a6 as h,eX as S}from"./index-EO6Vl92s.js";import{constraintsOf as C}from"./constraint-Bp1l8hY-.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{u as F}from"./three-state-15gXjQ51.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./user-data-DnahhlAD.js";import"./workspace-arrangement-COs530TA.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./editor-shell-store-CW9Fjab9.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-B43PZgUF.js";import"./entity-object-C40NpVSX.js";function g(r,n){return n?y(r.hierarchy,n):null}function b(r){if(!r)return[];const n=x(r),u=new Set,m=a=>{const l=x(a);if(!(a!==r&&n!==void 0&&l!==void 0&&l!==n)){for(const o of C(a))u.add(o);for(const o of a.children)m(o)}};return m(r),[...u]}function w(r,n){return b(g(n,r?.id??null)).length>0}const O={ready:"Ready",disabled:"Disabled",unresolved:"Unresolved",error:"Error"};function D(r){return r==="two-bone-ik"?"Two Bone IK":r==="ccd-ik"?"CCD IK":r==="aim"?"Aim":r==="rotation"?"Rotation":r}function T({adapter:r,nodeId:n}){const u=F(),m=n?u.objectMap.get(n)??g(r,n)??null:null,a=b(m).sort((o,s)=>o.config.order-s.config.order),l=o=>{if(!o)return;const s=r.hierarchy.idForObject3D?.(o);s&&(S(r,[s],{intent:"exact"})||u.shell.select(s))};return t.jsx("div",{style:{display:"grid",gap:10},children:a.map((o,s)=>{const d=o.config,e=o.getSnapshot(),p=d.type==="two-bone-ik"||d.type==="ccd-ik";return t.jsxs("div",{style:{border:`1px solid ${j.boundary.default}`,borderRadius:6,overflow:"hidden"},children:[t.jsxs("div",{style:{alignItems:"center",background:j.surface.raised,display:"flex",gap:8,justifyContent:"space-between",padding:"6px 8px"},children:[t.jsx(i,{children:`${s+1}. ${d.label}`}),t.jsx(i,{tone:"muted",children:D(d.type)})]}),e.message&&(e.status==="error"||e.status==="unresolved")?t.jsx(v,{tone:"error",children:e.message}):null,t.jsxs(k,{children:[t.jsx(c,{label:"Status",children:t.jsx(i,{tone:e.status==="error"||e.status==="unresolved"?"danger":e.status==="ready"?"success":"muted",children:O[e.status]})}),t.jsx(c,{label:"Weight",children:t.jsx(i,{tone:"muted",children:`${Math.round(d.weight*100)}%`})}),p?t.jsx(c,{label:"Chain",children:t.jsx(i,{tone:"muted",children:e.chain.map(f=>f.name||f.type).join(" → ")||"Unresolved"})}):t.jsx(c,{label:"Constrained",children:e.constrained&&r.hierarchy.idForObject3D?.(e.constrained)?t.jsx(h,{size:"compact",onClick:()=>l(e.constrained),children:e.constrained.name||"Select object"}):t.jsx(i,{tone:"muted",children:e.constrained?.name||"Unresolved"})}),e.error!==null?t.jsx(c,{label:e.error.unit==="degrees"?"Angular error":"Solve error",children:t.jsx(i,{tone:"muted",children:e.error.unit==="degrees"?`${e.error.value.toFixed(2)}°`:`${e.error.value.toFixed(3)} m`})}):null,t.jsx(c,{label:"Target",children:e.target&&r.hierarchy.idForObject3D?.(e.target)?t.jsx(h,{size:"compact",onClick:()=>l(e.target),children:e.target.name||"Select target"}):t.jsx(i,{tone:"muted",children:e.target?.name||"Dynamic target"})}),p?t.jsx(c,{label:"Pole",children:e.pole&&r.hierarchy.idForObject3D?.(e.pole)?t.jsx(h,{size:"compact",onClick:()=>l(e.pole),children:e.pole.name||"Select pole"}):t.jsx(i,{tone:"muted",children:e.pole?.name||"None"})}):null]})]},d.id)})})}const ee="selection.inspector",re="Constraints",te="link",ne=450;function oe(r,n){return w(r,n)}function ie({adapter:r,nodeId:n}){return t.jsx(T,{adapter:r,nodeId:n})}export{ie as default,te as icon,oe as match,ne as order,ee as point,re as title};
1
+ import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{a as y}from"./three-contract-Dkt6PmWY.js";import{i as x}from"./component-instance-root-C1Xyh79V.js";import{al as j,aL as i,bQ as v,fe as k,ff as c,a6 as h,eX as S}from"./index-BT8W9a7k.js";import{constraintsOf as C}from"./constraint-Bp1l8hY-.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{u as F}from"./three-state-BPIdxcKm.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./user-data-CqubllMS.js";import"./workspace-arrangement-B1xtK850.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./editor-shell-store-BRBXaK6_.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-JmP4C0fP.js";import"./entity-object-FbYj5hy6.js";function g(r,n){return n?y(r.hierarchy,n):null}function b(r){if(!r)return[];const n=x(r),u=new Set,m=a=>{const l=x(a);if(!(a!==r&&n!==void 0&&l!==void 0&&l!==n)){for(const o of C(a))u.add(o);for(const o of a.children)m(o)}};return m(r),[...u]}function w(r,n){return b(g(n,r?.id??null)).length>0}const O={ready:"Ready",disabled:"Disabled",unresolved:"Unresolved",error:"Error"};function D(r){return r==="two-bone-ik"?"Two Bone IK":r==="ccd-ik"?"CCD IK":r==="aim"?"Aim":r==="rotation"?"Rotation":r}function T({adapter:r,nodeId:n}){const u=F(),m=n?u.objectMap.get(n)??g(r,n)??null:null,a=b(m).sort((o,s)=>o.config.order-s.config.order),l=o=>{if(!o)return;const s=r.hierarchy.idForObject3D?.(o);s&&(S(r,[s],{intent:"exact"})||u.shell.select(s))};return t.jsx("div",{style:{display:"grid",gap:10},children:a.map((o,s)=>{const d=o.config,e=o.getSnapshot(),p=d.type==="two-bone-ik"||d.type==="ccd-ik";return t.jsxs("div",{style:{border:`1px solid ${j.boundary.default}`,borderRadius:6,overflow:"hidden"},children:[t.jsxs("div",{style:{alignItems:"center",background:j.surface.raised,display:"flex",gap:8,justifyContent:"space-between",padding:"6px 8px"},children:[t.jsx(i,{children:`${s+1}. ${d.label}`}),t.jsx(i,{tone:"muted",children:D(d.type)})]}),e.message&&(e.status==="error"||e.status==="unresolved")?t.jsx(v,{tone:"error",children:e.message}):null,t.jsxs(k,{children:[t.jsx(c,{label:"Status",children:t.jsx(i,{tone:e.status==="error"||e.status==="unresolved"?"danger":e.status==="ready"?"success":"muted",children:O[e.status]})}),t.jsx(c,{label:"Weight",children:t.jsx(i,{tone:"muted",children:`${Math.round(d.weight*100)}%`})}),p?t.jsx(c,{label:"Chain",children:t.jsx(i,{tone:"muted",children:e.chain.map(f=>f.name||f.type).join(" → ")||"Unresolved"})}):t.jsx(c,{label:"Constrained",children:e.constrained&&r.hierarchy.idForObject3D?.(e.constrained)?t.jsx(h,{size:"compact",onClick:()=>l(e.constrained),children:e.constrained.name||"Select object"}):t.jsx(i,{tone:"muted",children:e.constrained?.name||"Unresolved"})}),e.error!==null?t.jsx(c,{label:e.error.unit==="degrees"?"Angular error":"Solve error",children:t.jsx(i,{tone:"muted",children:e.error.unit==="degrees"?`${e.error.value.toFixed(2)}°`:`${e.error.value.toFixed(3)} m`})}):null,t.jsx(c,{label:"Target",children:e.target&&r.hierarchy.idForObject3D?.(e.target)?t.jsx(h,{size:"compact",onClick:()=>l(e.target),children:e.target.name||"Select target"}):t.jsx(i,{tone:"muted",children:e.target?.name||"Dynamic target"})}),p?t.jsx(c,{label:"Pole",children:e.pole&&r.hierarchy.idForObject3D?.(e.pole)?t.jsx(h,{size:"compact",onClick:()=>l(e.pole),children:e.pole.name||"Select pole"}):t.jsx(i,{tone:"muted",children:e.pole?.name||"None"})}):null]})]},d.id)})})}const ee="selection.inspector",re="Constraints",te="link",ne=450;function oe(r,n){return w(r,n)}function ie({adapter:r,nodeId:n}){return t.jsx(T,{adapter:r,nodeId:n})}export{ie as default,te as icon,oe as match,ne as order,ee as point,re as title};
@@ -1 +1 @@
1
- import{i as B}from"./hierarchy-marks-r1SCnl92.js";import{I as o,J as y,cm as p,B as b}from"./three.core-3arARmh6.js";function c(t,n){n(t);for(const e of t.children)B(e)||c(e,n)}const s=new o,f=new p;function d(t){return Number.isFinite(t.min.x)&&Number.isFinite(t.min.y)&&Number.isFinite(t.min.z)&&Number.isFinite(t.max.x)&&Number.isFinite(t.max.y)&&Number.isFinite(t.max.z)}const u=new p,l=new o;function M(t,n,e,i){for(let r=0;r<n.count;r++)n.getMatrixAt(r,u),u.premultiply(n.matrixWorld),i&&u.premultiply(i),l.copy(e).applyMatrix4(u),d(l)&&t.union(l)}function x(t,n,e=null){const i=n.geometry;if(!i)return;const r=h(n,i);if(r){if(n.isInstancedMesh){M(t,n,r,e);return}e?(f.multiplyMatrices(e,n.matrixWorld),s.copy(r).applyMatrix4(f)):s.copy(r).applyMatrix4(n.matrixWorld),d(s)&&t.union(s)}}function h(t,n){const e=t;return t.isSkinnedMesh?(n.boundingBox===null&&n.computeBoundingBox(),n.boundingBox):e.boundingBox!==void 0&&!t.isInstancedMesh?(e.boundingBox===null&&e.computeBoundingBox?.(),e.boundingBox??null):(n.boundingBox===null&&n.computeBoundingBox(),n.boundingBox)}function N(t,n){return c(n,e=>{e.updateWorldMatrix(!1,!1),x(t,e)}),t}const a=new o;function m(t){const n=t.material;return n?Array.isArray(n)?n:[n]:[]}function w(t){const n=m(t);return n.length>0&&n.every(e=>e.depthWrite===!1)}function F(t){const n=m(t);return n.length>0&&n.every(e=>e.side===b)}function I(t,n=[]){return c(t,e=>{e.updateWorldMatrix(!1,!1),a.makeEmpty(),x(a,e),!a.isEmpty()&&n.push({box:a.clone(),overlay:w(e),enclosure:F(e)})}),n}function k(t,n=[]){for(const e of I(t))n.push(e.box);return n}function W(t,n=new o){return n.makeEmpty(),N(n,t)}function v(t,n,e=new o){return e.makeEmpty(),c(t,i=>{i.updateWorldMatrix(!1,!1),x(e,i,n)}),e}class E extends y{entityObject;constructor(n,e){super(new o,e),this.entityObject=n,this.update()}update(){W(this.entityObject,this.box)}}export{E as C,W as a,v as b,I as c,k as d,N as e};
1
+ import{i as B}from"./hierarchy-marks-DWnBwmhe.js";import{I as o,J as y,cm as p,B as b}from"./three.core-3arARmh6.js";function c(t,n){n(t);for(const e of t.children)B(e)||c(e,n)}const s=new o,f=new p;function d(t){return Number.isFinite(t.min.x)&&Number.isFinite(t.min.y)&&Number.isFinite(t.min.z)&&Number.isFinite(t.max.x)&&Number.isFinite(t.max.y)&&Number.isFinite(t.max.z)}const u=new p,l=new o;function M(t,n,e,i){for(let r=0;r<n.count;r++)n.getMatrixAt(r,u),u.premultiply(n.matrixWorld),i&&u.premultiply(i),l.copy(e).applyMatrix4(u),d(l)&&t.union(l)}function x(t,n,e=null){const i=n.geometry;if(!i)return;const r=h(n,i);if(r){if(n.isInstancedMesh){M(t,n,r,e);return}e?(f.multiplyMatrices(e,n.matrixWorld),s.copy(r).applyMatrix4(f)):s.copy(r).applyMatrix4(n.matrixWorld),d(s)&&t.union(s)}}function h(t,n){const e=t;return t.isSkinnedMesh?(n.boundingBox===null&&n.computeBoundingBox(),n.boundingBox):e.boundingBox!==void 0&&!t.isInstancedMesh?(e.boundingBox===null&&e.computeBoundingBox?.(),e.boundingBox??null):(n.boundingBox===null&&n.computeBoundingBox(),n.boundingBox)}function N(t,n){return c(n,e=>{e.updateWorldMatrix(!1,!1),x(t,e)}),t}const a=new o;function m(t){const n=t.material;return n?Array.isArray(n)?n:[n]:[]}function w(t){const n=m(t);return n.length>0&&n.every(e=>e.depthWrite===!1)}function F(t){const n=m(t);return n.length>0&&n.every(e=>e.side===b)}function I(t,n=[]){return c(t,e=>{e.updateWorldMatrix(!1,!1),a.makeEmpty(),x(a,e),!a.isEmpty()&&n.push({box:a.clone(),overlay:w(e),enclosure:F(e)})}),n}function k(t,n=[]){for(const e of I(t))n.push(e.box);return n}function W(t,n=new o){return n.makeEmpty(),N(n,t)}function v(t,n,e=new o){return e.makeEmpty(),c(t,i=>{i.updateWorldMatrix(!1,!1),x(e,i,n)}),e}class E extends y{entityObject;constructor(n,e){super(new o,e),this.entityObject=n,this.update()}update(){W(this.entityObject,this.box)}}export{E as C,W as a,v as b,I as c,k as d,N as e};
@@ -1 +1 @@
1
- import{GAME_SYSTEM_ADAPTERS_SHAPE as a}from"./game-contract-seams-Dq1YiGya.js";import{R as c,C as m,A as f,N as l,d as p,e as u}from"./index-EO6Vl92s.js";const A={physics:u,networking:p,navigation:l,audio:f,camera:m,renderDebug:c},E={three:"node-id",canvas:"display",dom:null},y=Object.keys(a),S={bound:{},empty:[],malformed:[]};function _(r){return r.present===!1}function h(r,e){const n=[];for(const[t,s]of Object.entries(A[r]))s.optional||typeof e[t]!="function"&&n.push(t);return n}function P(r,e){const n=e?E[e]:null;if(n===null)return null;const t=r.keyedBy==="display"?"display":"node-id";return t===n?null:`declared a ${t}-keyed physics carrier on the ${e} surface, whose gizmo path addresses bodies by ${n} — the four members are all present but nothing on this lane can call them with values they accept (a ${e}-surface carrier declares \`keyedBy: '${n}'\`)`}function b(r,e,n){if(e==null)return{kind:"skip"};if(typeof e!="object")return{kind:"malformed",reason:`declared as ${typeof e}; expected an adapter object or { present: false, evidence }`};if(_(e)){const i=e.evidence;return typeof i!="string"||i.trim()===""?{kind:"malformed",reason:"declared `present: false` with no `evidence` string to back the absence"}:{kind:"empty",evidence:i}}const t=h(r,e);if(t.length>0)return{kind:"malformed",reason:`declared an adapter missing required member(s): ${t.join(", ")}`};const s=r==="physics"?P(e,n):null;return s!==null?{kind:"malformed",reason:s}:{kind:"bound"}}function R(r,e){const n=r?.systemAdapters;if(!n)return S;const t={},s=[],i=[];for(const o of y){const d=b(o,n[o],e);d.kind==="bound"?t[o]=n[o]:d.kind==="empty"?s.push({slot:o,evidence:d.evidence}):d.kind==="malformed"&&i.push({slot:o,reason:d.reason})}return{bound:t,empty:s,malformed:i}}export{y as C,R as p};
1
+ import{GAME_SYSTEM_ADAPTERS_SHAPE as a}from"./game-contract-seams-BfTLgo42.js";import{R as c,C as m,A as f,N as l,d as p,e as u}from"./index-BT8W9a7k.js";const A={physics:u,networking:p,navigation:l,audio:f,camera:m,renderDebug:c},E={three:"node-id",canvas:"display",dom:null},y=Object.keys(a),S={bound:{},empty:[],malformed:[]};function _(r){return r.present===!1}function h(r,e){const n=[];for(const[t,s]of Object.entries(A[r]))s.optional||typeof e[t]!="function"&&n.push(t);return n}function P(r,e){const n=e?E[e]:null;if(n===null)return null;const t=r.keyedBy==="display"?"display":"node-id";return t===n?null:`declared a ${t}-keyed physics carrier on the ${e} surface, whose gizmo path addresses bodies by ${n} — the four members are all present but nothing on this lane can call them with values they accept (a ${e}-surface carrier declares \`keyedBy: '${n}'\`)`}function b(r,e,n){if(e==null)return{kind:"skip"};if(typeof e!="object")return{kind:"malformed",reason:`declared as ${typeof e}; expected an adapter object or { present: false, evidence }`};if(_(e)){const i=e.evidence;return typeof i!="string"||i.trim()===""?{kind:"malformed",reason:"declared `present: false` with no `evidence` string to back the absence"}:{kind:"empty",evidence:i}}const t=h(r,e);if(t.length>0)return{kind:"malformed",reason:`declared an adapter missing required member(s): ${t.join(", ")}`};const s=r==="physics"?P(e,n):null;return s!==null?{kind:"malformed",reason:s}:{kind:"bound"}}function R(r,e){const n=r?.systemAdapters;if(!n)return S;const t={},s=[],i=[];for(const o of y){const d=b(o,n[o],e);d.kind==="bound"?t[o]=n[o]:d.kind==="empty"?s.push({slot:o,evidence:d.evidence}):d.kind==="malformed"&&i.push({slot:o,reason:d.reason})}return{bound:t,empty:s,malformed:i}}export{y as C,R as p};
@@ -1,3 +1,3 @@
1
- import{L as C,eL as k,jL as I,aP as E,aQ as A,aC as p,jM as L,jN as R,jO as f,ab as N,jx as x,jP as M,Z as P,r as F}from"./index-EO6Vl92s.js";import{d as w,S as _,a as D,f as O,u as B}from"./capability-coverage-BOaPg0KC.js";import{p as T,a as S,i as W}from"./live-project-verbs-BBbF8usb.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./game-contract-seams-Dq1YiGya.js";function j(){const t=C();return!t||!k()?null:w({worldId:p()?.config.name??"project",authoringSurface:I(t.scenes,A().map(e=>e.descriptor.id),E().map(e=>e.descriptor.id))})}const V={physics:["@react-three/rapier","@dimforge/rapier3d-compat","@dimforge/rapier2d-compat"],networking:["@colyseus/sdk","colyseus.js"],navigation:["recast-navigation","@recast-navigation/core"],audio:["tone","howler"]};function G(t,e){if(e.dependencies===null)return[];const s=V[t];return s?s.filter(r=>e.dependencies?.includes(r)):[]}function K(t,e){return`this project depends on ${e.join(" + ")}, so "nothing built a ${t} world" is not a settled answer. Reach a terminal state either way: BIND it — declare the game's own ${t} adapter in the root entry's \`systems\` table — or DECLARE the absence with \`absent(reason)\` in that same table. The reason must NAME the dependency and say why it is there while the subsystem is not (a transitive pull, a leftover, a build-only use); a declared absence blind to the shipped dependency grades malformed, not terminal.`}function Y(t,e){const s=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(/^[a-z0-9]+$/i.test(e)){if(new RegExp(`\\b${s}\\b`,"i").test(t))return!0}else if(t.toLowerCase().includes(e.toLowerCase()))return!0;const r=new Set(["compat","core","client","server","node","react","three","libs","api","sdk","util","utils","plugin","plugins","tools","types","browser"]),o=c=>c.toLowerCase().split(/[.\-_/]+/).filter(v=>v.length>=4&&!r.has(v)),[a,d]=e.toLowerCase().startsWith("@")?[e.slice(1,e.indexOf("/")),e.slice(e.indexOf("/")+1)]:["",e];let n=o(d);n.length===0&&(n=o(a));const i=n.map(c=>c.replace(/\d+d?$/,"")).filter(c=>c.length>=4);return[...new Set([...n,...i])].some(c=>new RegExp(`\\b${c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\b`,"i").test(t))}const z="this project's volter.project.json declares no `server` block, so there is no room for a NetworkingAdapter to describe",H={physics:"no mounted root built a physics world — the engine seeds this slot from the root that creates one (a `setup` root, or an R3F tree using the Rapier bridge), so nothing in this game simulates bodies",navigation:"no mounted root registered a navigation adapter — the engine seeds this slot from a world's own NavMeshManager registration, so this game has no navmesh",audio:"no mounted root built an audio context — the engine seeds this slot from the root that creates one, so there is no audio graph for the host to mute, meter or graph",camera:"no mounted root registered a camera-ownership system — the engine ships `createCameraOwnershipSystem` for a game that takes camera control (a cutscene rig), so this game's camera is gameplay-owned throughout",renderDebug:"no mounted root captured a real WebGL2 render context to derive one from — the engine seeds this slot only where the root owns the capture wiring (`adapter/setup-three-root-adapter.ts`), so the Frame debugger and the render-memory view have nothing to show for this game"};function b(t,e){return t==="networking"?"register a NetworkingAdapter from the game's own code (`ctx.registerSystemAdapter('networking', …)`) — this project declares a `server` block, so the editor's Network panel is dark for a game that IS networked":`register a ${t} adapter from the game's own code (\`ctx.registerSystemAdapter('${t}', …)\`), or build the subsystem the engine seeds it from`}function Q(t,e){const s=new Map(e.declaredAbsences.map(r=>[r.slot,r]));return _.map(r=>{const o=s.get(r);if(t[r]!=null)return o?{slot:r,state:"malformed",evidence:`root "${o.rootId}" declares this slot absent — "${o.reason}" — but a ${r} adapter is bound on the live mount. One of the two is wrong: either the declaration is stale (delete the \`absent()\` marker) or something registers an adapter the game does not mean to have.`}:{slot:r,state:"bound",proof:L({slot:r,adapter:t[r],subject:"game"})};const a=G(r,e);if(o){const n=a.filter(c=>!Y(o.reason,c));if(n.length>0)return{slot:r,state:"malformed",evidence:`root "${o.rootId}" declares this slot absent — "${o.reason}" — but this project depends on ${n.join(" + ")} and the reason does not mention it. Either the absence is stale, or it holds and the reason should say why that dependency is present without the subsystem (naming it).`};const i=e.absencesFromLastMount?" — the declaration read at this session’s last play mount; play to re-read it live":"";return{slot:r,state:"empty",attestedBy:"game",evidence:a.length>0?`declared absent by root "${o.rootId}": ${o.reason} (the project does depend on ${a.join(" + ")}; the reason engages with that)${i}`:`declared absent by root "${o.rootId}": ${o.reason}${i}`}}if(r==="networking"&&a.length>0)return{slot:r,state:"empty",attestedBy:"host",evidence:`this project ships ${a.join(" + ")}; the editor observes its room sockets from Play, and nothing is connected while editing`};if(a.length>0)return{slot:r,state:"unanswered",fix:K(r,a)};if(r==="networking")return e.declaresServer?{slot:r,state:"unanswered",fix:b(r)}:{slot:r,state:"empty",attestedBy:"host",evidence:z};const d=H[r];return d?{slot:r,state:"empty",attestedBy:"host",evidence:d}:{slot:r,state:"unanswered",fix:b(r)}})}function U(){const t=x()?.game,e=p()?.rootPath??null;return t?(e!==null&&(l={projectPath:e,absences:t.declaredSystemAbsences??[]}),{absences:t.declaredSystemAbsences??[],fromLastMount:!1}):l!==null&&l.projectPath===e?{absences:l.absences,fromLastMount:!0}:{absences:[],fromLastMount:!1}}let l=null;function $(){if(R()!==null)return null;const t=p();if(!t)return null;const e=f();if(e.length===0||e.every(r=>r.adapter.provenance?.source==="foreign"))return null;const s=U();return w({worldId:t.config.name,systemAdapters:Q(N(),{declaresServer:(t.config.configurations??[]).some(r=>r.kind==="process"&&typeof r.port=="number"),declaredAbsences:s.absences,absencesFromLastMount:s.fromLastMount,dependencies:T()})})}function Z(t){const e=w({worldId:t.worldId,reach:D(t.adapter,t.worldId),surface:t.surface,reachMechanism:null});return{worldId:t.worldId,surface:t.surface,report:e}}function g(){return f().map(Z)}function q(t=g()){const e=t.map(a=>({label:a.worldId,report:a.report})),s=$();s&&e.push({label:null,report:s});const r=S();r&&e.push({label:null,report:r});const o=j();return o&&e.push({label:null,report:o}),e}function J(t){const e=q(t??g());return e.length===0?null:B(p()?.config.name??"session",e)}const y=new Set;let h=null,m=0;function u(){h=null,m=0}function X(){if(M()){u();return}const t=g(),e=J(t);if(!e||e.summary.gaps===0){u();return}const s=f();if(s.length===0){u();return}const r=C()?.regions??[];if(r.length>1){const n=new Set(s.map(i=>i.worldId));if(r.some(i=>!n.has(i.id))){u();return}}if(t.some(n=>n.report.rows.find(i=>i.seam==="editor.capture")?.status!=="ok")){u();return}const o=`session coverage "${e.summary.worldId}"`,a=O(e,o).filter(n=>n.level==="warn"),d=a.map(n=>n.message).join(`
1
+ import{L as C,eL as k,jL as I,aP as E,aQ as A,aC as p,jM as L,jN as R,jO as f,ab as N,jx as x,jP as M,Z as P,r as F}from"./index-BT8W9a7k.js";import{d as w,S as _,a as D,f as O,u as B}from"./capability-coverage-O6aDzS_g.js";import{p as T,a as S,i as W}from"./live-project-verbs-puMj_ac5.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./game-contract-seams-BfTLgo42.js";function j(){const t=C();return!t||!k()?null:w({worldId:p()?.config.name??"project",authoringSurface:I(t.scenes,A().map(e=>e.descriptor.id),E().map(e=>e.descriptor.id))})}const V={physics:["@react-three/rapier","@dimforge/rapier3d-compat","@dimforge/rapier2d-compat"],networking:["@colyseus/sdk","colyseus.js"],navigation:["recast-navigation","@recast-navigation/core"],audio:["tone","howler"]};function G(t,e){if(e.dependencies===null)return[];const s=V[t];return s?s.filter(r=>e.dependencies?.includes(r)):[]}function K(t,e){return`this project depends on ${e.join(" + ")}, so "nothing built a ${t} world" is not a settled answer. Reach a terminal state either way: BIND it — declare the game's own ${t} adapter in the root entry's \`systems\` table — or DECLARE the absence with \`absent(reason)\` in that same table. The reason must NAME the dependency and say why it is there while the subsystem is not (a transitive pull, a leftover, a build-only use); a declared absence blind to the shipped dependency grades malformed, not terminal.`}function Y(t,e){const s=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(/^[a-z0-9]+$/i.test(e)){if(new RegExp(`\\b${s}\\b`,"i").test(t))return!0}else if(t.toLowerCase().includes(e.toLowerCase()))return!0;const r=new Set(["compat","core","client","server","node","react","three","libs","api","sdk","util","utils","plugin","plugins","tools","types","browser"]),o=c=>c.toLowerCase().split(/[.\-_/]+/).filter(v=>v.length>=4&&!r.has(v)),[a,d]=e.toLowerCase().startsWith("@")?[e.slice(1,e.indexOf("/")),e.slice(e.indexOf("/")+1)]:["",e];let n=o(d);n.length===0&&(n=o(a));const i=n.map(c=>c.replace(/\d+d?$/,"")).filter(c=>c.length>=4);return[...new Set([...n,...i])].some(c=>new RegExp(`\\b${c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\b`,"i").test(t))}const z="this project's volter.project.json declares no `server` block, so there is no room for a NetworkingAdapter to describe",H={physics:"no mounted root built a physics world — the engine seeds this slot from the root that creates one (a `setup` root, or an R3F tree using the Rapier bridge), so nothing in this game simulates bodies",navigation:"no mounted root registered a navigation adapter — the engine seeds this slot from a world's own NavMeshManager registration, so this game has no navmesh",audio:"no mounted root built an audio context — the engine seeds this slot from the root that creates one, so there is no audio graph for the host to mute, meter or graph",camera:"no mounted root registered a camera-ownership system — the engine ships `createCameraOwnershipSystem` for a game that takes camera control (a cutscene rig), so this game's camera is gameplay-owned throughout",renderDebug:"no mounted root captured a real WebGL2 render context to derive one from — the engine seeds this slot only where the root owns the capture wiring (`adapter/setup-three-root-adapter.ts`), so the Frame debugger and the render-memory view have nothing to show for this game"};function b(t,e){return t==="networking"?"register a NetworkingAdapter from the game's own code (`ctx.registerSystemAdapter('networking', …)`) — this project declares a `server` block, so the editor's Network panel is dark for a game that IS networked":`register a ${t} adapter from the game's own code (\`ctx.registerSystemAdapter('${t}', …)\`), or build the subsystem the engine seeds it from`}function Q(t,e){const s=new Map(e.declaredAbsences.map(r=>[r.slot,r]));return _.map(r=>{const o=s.get(r);if(t[r]!=null)return o?{slot:r,state:"malformed",evidence:`root "${o.rootId}" declares this slot absent — "${o.reason}" — but a ${r} adapter is bound on the live mount. One of the two is wrong: either the declaration is stale (delete the \`absent()\` marker) or something registers an adapter the game does not mean to have.`}:{slot:r,state:"bound",proof:L({slot:r,adapter:t[r],subject:"game"})};const a=G(r,e);if(o){const n=a.filter(c=>!Y(o.reason,c));if(n.length>0)return{slot:r,state:"malformed",evidence:`root "${o.rootId}" declares this slot absent — "${o.reason}" — but this project depends on ${n.join(" + ")} and the reason does not mention it. Either the absence is stale, or it holds and the reason should say why that dependency is present without the subsystem (naming it).`};const i=e.absencesFromLastMount?" — the declaration read at this session’s last play mount; play to re-read it live":"";return{slot:r,state:"empty",attestedBy:"game",evidence:a.length>0?`declared absent by root "${o.rootId}": ${o.reason} (the project does depend on ${a.join(" + ")}; the reason engages with that)${i}`:`declared absent by root "${o.rootId}": ${o.reason}${i}`}}if(r==="networking"&&a.length>0)return{slot:r,state:"empty",attestedBy:"host",evidence:`this project ships ${a.join(" + ")}; the editor observes its room sockets from Play, and nothing is connected while editing`};if(a.length>0)return{slot:r,state:"unanswered",fix:K(r,a)};if(r==="networking")return e.declaresServer?{slot:r,state:"unanswered",fix:b(r)}:{slot:r,state:"empty",attestedBy:"host",evidence:z};const d=H[r];return d?{slot:r,state:"empty",attestedBy:"host",evidence:d}:{slot:r,state:"unanswered",fix:b(r)}})}function U(){const t=x()?.game,e=p()?.rootPath??null;return t?(e!==null&&(l={projectPath:e,absences:t.declaredSystemAbsences??[]}),{absences:t.declaredSystemAbsences??[],fromLastMount:!1}):l!==null&&l.projectPath===e?{absences:l.absences,fromLastMount:!0}:{absences:[],fromLastMount:!1}}let l=null;function $(){if(R()!==null)return null;const t=p();if(!t)return null;const e=f();if(e.length===0||e.every(r=>r.adapter.provenance?.source==="foreign"))return null;const s=U();return w({worldId:t.config.name,systemAdapters:Q(N(),{declaresServer:(t.config.configurations??[]).some(r=>r.kind==="process"&&typeof r.port=="number"),declaredAbsences:s.absences,absencesFromLastMount:s.fromLastMount,dependencies:T()})})}function Z(t){const e=w({worldId:t.worldId,reach:D(t.adapter,t.worldId),surface:t.surface,reachMechanism:null});return{worldId:t.worldId,surface:t.surface,report:e}}function g(){return f().map(Z)}function q(t=g()){const e=t.map(a=>({label:a.worldId,report:a.report})),s=$();s&&e.push({label:null,report:s});const r=S();r&&e.push({label:null,report:r});const o=j();return o&&e.push({label:null,report:o}),e}function J(t){const e=q(t??g());return e.length===0?null:B(p()?.config.name??"session",e)}const y=new Set;let h=null,m=0;function u(){h=null,m=0}function X(){if(M()){u();return}const t=g(),e=J(t);if(!e||e.summary.gaps===0){u();return}const s=f();if(s.length===0){u();return}const r=C()?.regions??[];if(r.length>1){const n=new Set(s.map(i=>i.worldId));if(r.some(i=>!n.has(i.id))){u();return}}if(t.some(n=>n.report.rows.find(i=>i.seam==="editor.capture")?.status!=="ok")){u();return}const o=`session coverage "${e.summary.worldId}"`,a=O(e,o).filter(n=>n.level==="warn"),d=a.map(n=>n.message).join(`
2
2
  ---
3
3
  `);if(h===d?m++:(h=d,m=1),!(m<2))for(const n of a)y.has(n.message)||(y.add(n.message),P.warn(n.message,"coverage"))}const ge="workspace.service",ee=["rootCoverage","systemCoverage","projectCoverage","authoringCoverage"];function te(t){if(t)return{rootCoverage:t.rootCoverage??[],systemCoverage:t.systemCoverage??null,projectCoverage:t.projectCoverage??null,authoringCoverage:t.authoringCoverage??null};const e=$(),s=S(),r=j();return{rootCoverage:g().map(o=>({worldId:o.worldId,surface:o.surface,summary:o.report.summary,rows:o.report.rows.map(a=>({...a}))})),systemCoverage:e?{summary:e.summary,rows:e.rows.map(o=>({...o}))}:null,projectCoverage:s?{summary:s.summary,rows:s.rows.map(o=>({...o}))}:null,authoringCoverage:r?{summary:r.summary,rows:r.rows.map(o=>({...o}))}:null}}function he(){const t=F().session,e=t.reportFacet(te,{reusableKeys:ee}),s=t.onSample(X),r=t.onCommandDispatched(o=>{o==="restart"&&W()});return()=>{e(),s(),r()}}export{ge as point,he as start};
@@ -1,3 +1,3 @@
1
- import{assertNever as le}from"./adapter-surface-Y37Nzcyw.js";import{createRootBinding as ue}from"./binding-Bmxqznjk.js";import{stackOrder as B,resolveClaimingRoot as V}from"./root-stacking-BEd9ZvxC.js";import{createAssetCache as fe}from"./assets-BcrMQHRv.js";import{createHostRenderer as me}from"./setup-renderer-BoEjWIJ6.js";import{T as pe}from"./three.module-BLhyNg0e.js";import{T as K,c as he,p as ge,r as we,a as ye,D as be,b as ve}from"./seeded-random-BcjdE8-O.js";import{c as ee,a as Re,r as Ee,D as ke,g as Se}from"./debug-registry-CoiJ_gHM.js";import{formatLoopGateMessage as $e,formatAudioGateMessage as Pe}from"./loop-gate-report-N52EWFGD.js";import{bindScopedSystem as Ae}from"./system-slot-E2mEdiih.js";import{hasUserData as Oe}from"./user-data-CODoGZqA.js";import{dY as F,kI as I}from"./index-EO6Vl92s.js";import{c as De}from"./performance-profiler-CMbwGBuk.js";const xe=1e3;function Fe(e){const t=e.fixedTimestep??.016666666666666666,n=e.maxSubSteps??8,s=e.externalDrive??!1;let l=0,d=0,f=!1,w=0,g=1,b=!1,r=!1;function o(){s||!r||typeof document>"u"||(document.hidden?f&&(f=!1,cancelAnimationFrame(w),b=!0):b&&(b=!1,f=!0,d=performance.now(),l=0,w=requestAnimationFrame(p)))}function i(){o()}function p(E){if(!f)return;w=requestAnimationFrame(p);const v=(E-d)/1e3;d=E;const $=ge(l,v,g,{fixedDt:t,maxSubSteps:n});l=$.accumulator;for(let A=0;A<$.steps;A++)e.update(t);e.render?.($.alpha,$.displayDt)}return{start(){if(!f&&(f=!0,b=!1,d=performance.now(),l=0,!s)){if(!r&&typeof document<"u"&&(document.addEventListener("visibilitychange",i),r=!0),typeof document<"u"&&document.hidden){f=!1,b=!0;return}w=requestAnimationFrame(p)}},stop(){f=!1,b=!1,cancelAnimationFrame(w),r&&typeof document<"u"&&(document.removeEventListener("visibilitychange",i),r=!1)},get isRunning(){return o(),f},get liveness(){return o(),b||f&&!s&&performance.now()-d>xe?"loop-starved":f?"running":"stopped"},set timeScale(E){const v=he(E);v!==E&&console.warn(`[game-loop] timeScale ${E} is out of range [${K.min}, ${K.max}]; clamped to ${v}.`),g=v},get timeScale(){return g},get fixedDt(){return t}}}const Te={cancel(){}};function j(e){return new DOMException(e,"AbortError")}function H(e,t){if(!Number.isFinite(t)||t<0)throw new RangeError(`SimClock.${e}: seconds must be a finite, non-negative number, got ${t}`)}function Ce(e){const t=e.dispose;let n=0,s=0,l=0,d=!1;const f=new Set,w=new Set;function g(r){r.cancelled||(r.cancelled=!0,f.delete(r),r.detachAbort?.(),r.detachAbort=null)}function b(r,o,i){H("after",r);const p=i?.signal;if(d||p?.aborted)return Te;const E={dueAt:n+r,seq:l++,fn:o,cancelled:!1,detachAbort:null};if(f.add(E),p){const v=()=>g(E);p.addEventListener("abort",v,{once:!0}),E.detachAbort=()=>p.removeEventListener("abort",v)}return{cancel(){g(E)}}}return{now:()=>n,tickNow:()=>s,after:b,delay(r,o){H("delay",r);const i=o?.signal;return i?.aborted?Promise.reject(j("SimClock.delay: aborted before it was scheduled")):d?Promise.reject(j("SimClock.delay: the sim clock is disposed")):new Promise((p,E)=>{let v=null,$=null,A=!1;const D=()=>{A=!0,w.delete(T),$?.(),$=null};function T(C){A||(D(),v?.cancel(),E(j(C)))}if(v=b(r,()=>{A||(D(),p())}),w.add(T),i){const C=()=>T("SimClock.delay: aborted");i.addEventListener("abort",C,{once:!0}),$=()=>i.removeEventListener("abort",C)}})},disposeAfter(r,o){return H("disposeAfter",o),b(o,()=>t(r))},flush(r){if(d||(n=r,s++,f.size===0))return;const o=[];for(const i of f)!i.cancelled&&i.dueAt<=n&&o.push(i);if(o.length!==0){o.sort((i,p)=>i.dueAt-p.dueAt||i.seq-p.seq);for(const i of o)if(!i.cancelled){g(i);try{i.fn()}catch(p){console.error("[sim-clock] timer callback threw:",p)}}}},dispose(){if(d)return;d=!0;for(const o of f)o.detachAbort?.(),o.detachAbort=null,o.cancelled=!0;f.clear();const r=[...w];w.clear();for(const o of r)o("SimClock: disposed while a delay was pending")}}}const Me=ee("sim-clock");function Le(e,t){Me.set(e,t)}function Ie(e,t="world"){const n=new Map,s=[],l=new Map;let d=0;for(const r of F)n.set(r,[]);let f=!1;const w=new Map;for(const r of F)w.set(r,new Set);const g=new Set;function b(r,o,i){const p=l.get(r)??r.name??`anonymous-${++d}`;l.set(r,p),e?.beginSystem(t,o,p);try{r(i)}catch(E){const v=r.name?`"${r.name}"`:"(anonymous)";console.error(`[system-runner] system ${v} in phase "${o}" threw:`,E)}finally{e?.endSystem(t,o,p)}}return{add(r,o,i){const p=n.get(r);if(!p)throw new Error(`Unknown phase: ${r}. Valid phases: ${F.join(", ")}`);p.push(o),l.set(o,i?.name??o.name??`anonymous-${++d}`)},remove(r,o){const i=n.get(r);if(!i)return;const p=i.indexOf(o);p!==-1&&i.splice(p,1),w.get(r)?.delete(o)},register(r){const o=n.get(r.phase);if(!o)throw new Error(`Unknown phase: ${r.phase}. Valid phases: ${F.join(", ")}`);o.push(r.update),l.set(r.update,r.name??r.update.name??`anonymous-${++d}`),s.push(r)},unregister(r){const o=n.get(r.phase);if(o){const p=o.indexOf(r.update);p!==-1&&o.splice(p,1)}w.get(r.phase)?.delete(r.update);const i=s.indexOf(r);i!==-1&&s.splice(i,1),g.delete(r),r.dispose?.()},runInit(){const r=[...s].sort((o,i)=>F.indexOf(o.phase)-F.indexOf(i.phase));for(const o of r)o.init?.()},runDispose(){for(const r of s){const o=n.get(r.phase);if(o){const i=o.indexOf(r.update);i!==-1&&o.splice(i,1)}r.dispose?.()}s.length=0},runPhase(r,o){const i=n.get(r);if(!i)throw new Error(`Unknown phase: ${r}. Valid phases: ${F.join(", ")}`);const p=w.get(r),E=[];for(const v of i)f&&!p.has(v)?E.push(v):b(v,r,o);for(const v of E)b(v,r,o)},run(r){for(const o of F)this.runPhase(o,r)},markEngineBoundary(){for(const r of F){const o=w.get(r);for(const i of n.get(r))o.add(i)}for(const r of s)g.add(r);f=!0},removeAllNonEngine(){if(!f)return;const r=s.filter(i=>g.has(i)),o=s.filter(i=>!g.has(i));s.length=0,s.push(...r);for(const i of o)i.dispose?.();for(const i of F){const p=n.get(i),E=w.get(i),v=p.filter($=>E.has($));p.length=0,p.push(...v)}},count(r){if(r)return n.get(r)?.length??0;let o=0;for(const i of n.values())o+=i.length;return o}}}function _e(e){if(!e)return"<unknown call site — no stack captured>";const t=e.split(`
1
+ import{assertNever as le}from"./adapter-surface-Y37Nzcyw.js";import{createRootBinding as ue}from"./binding-Bmxqznjk.js";import{stackOrder as B,resolveClaimingRoot as V}from"./root-stacking-BEd9ZvxC.js";import{createAssetCache as fe}from"./assets-BcrMQHRv.js";import{createHostRenderer as me}from"./setup-renderer-D2Jvr2h9.js";import{T as pe}from"./three.module-BLhyNg0e.js";import{T as K,c as he,p as ge,r as we,a as ye,D as be,b as ve}from"./seeded-random-BscHstMm.js";import{c as ee,a as Re,r as Ee,D as ke,g as Se}from"./debug-registry-CS3ZmHpb.js";import{formatLoopGateMessage as $e,formatAudioGateMessage as Pe}from"./loop-gate-report-N52EWFGD.js";import{bindScopedSystem as Ae}from"./system-slot-E2mEdiih.js";import{hasUserData as Oe}from"./user-data-CODoGZqA.js";import{dY as F,kI as I}from"./index-BT8W9a7k.js";import{c as De}from"./performance-profiler-CMbwGBuk.js";const xe=1e3;function Fe(e){const t=e.fixedTimestep??.016666666666666666,n=e.maxSubSteps??8,s=e.externalDrive??!1;let l=0,d=0,f=!1,w=0,g=1,b=!1,r=!1;function o(){s||!r||typeof document>"u"||(document.hidden?f&&(f=!1,cancelAnimationFrame(w),b=!0):b&&(b=!1,f=!0,d=performance.now(),l=0,w=requestAnimationFrame(p)))}function i(){o()}function p(E){if(!f)return;w=requestAnimationFrame(p);const v=(E-d)/1e3;d=E;const $=ge(l,v,g,{fixedDt:t,maxSubSteps:n});l=$.accumulator;for(let A=0;A<$.steps;A++)e.update(t);e.render?.($.alpha,$.displayDt)}return{start(){if(!f&&(f=!0,b=!1,d=performance.now(),l=0,!s)){if(!r&&typeof document<"u"&&(document.addEventListener("visibilitychange",i),r=!0),typeof document<"u"&&document.hidden){f=!1,b=!0;return}w=requestAnimationFrame(p)}},stop(){f=!1,b=!1,cancelAnimationFrame(w),r&&typeof document<"u"&&(document.removeEventListener("visibilitychange",i),r=!1)},get isRunning(){return o(),f},get liveness(){return o(),b||f&&!s&&performance.now()-d>xe?"loop-starved":f?"running":"stopped"},set timeScale(E){const v=he(E);v!==E&&console.warn(`[game-loop] timeScale ${E} is out of range [${K.min}, ${K.max}]; clamped to ${v}.`),g=v},get timeScale(){return g},get fixedDt(){return t}}}const Te={cancel(){}};function j(e){return new DOMException(e,"AbortError")}function H(e,t){if(!Number.isFinite(t)||t<0)throw new RangeError(`SimClock.${e}: seconds must be a finite, non-negative number, got ${t}`)}function Ce(e){const t=e.dispose;let n=0,s=0,l=0,d=!1;const f=new Set,w=new Set;function g(r){r.cancelled||(r.cancelled=!0,f.delete(r),r.detachAbort?.(),r.detachAbort=null)}function b(r,o,i){H("after",r);const p=i?.signal;if(d||p?.aborted)return Te;const E={dueAt:n+r,seq:l++,fn:o,cancelled:!1,detachAbort:null};if(f.add(E),p){const v=()=>g(E);p.addEventListener("abort",v,{once:!0}),E.detachAbort=()=>p.removeEventListener("abort",v)}return{cancel(){g(E)}}}return{now:()=>n,tickNow:()=>s,after:b,delay(r,o){H("delay",r);const i=o?.signal;return i?.aborted?Promise.reject(j("SimClock.delay: aborted before it was scheduled")):d?Promise.reject(j("SimClock.delay: the sim clock is disposed")):new Promise((p,E)=>{let v=null,$=null,A=!1;const D=()=>{A=!0,w.delete(T),$?.(),$=null};function T(C){A||(D(),v?.cancel(),E(j(C)))}if(v=b(r,()=>{A||(D(),p())}),w.add(T),i){const C=()=>T("SimClock.delay: aborted");i.addEventListener("abort",C,{once:!0}),$=()=>i.removeEventListener("abort",C)}})},disposeAfter(r,o){return H("disposeAfter",o),b(o,()=>t(r))},flush(r){if(d||(n=r,s++,f.size===0))return;const o=[];for(const i of f)!i.cancelled&&i.dueAt<=n&&o.push(i);if(o.length!==0){o.sort((i,p)=>i.dueAt-p.dueAt||i.seq-p.seq);for(const i of o)if(!i.cancelled){g(i);try{i.fn()}catch(p){console.error("[sim-clock] timer callback threw:",p)}}}},dispose(){if(d)return;d=!0;for(const o of f)o.detachAbort?.(),o.detachAbort=null,o.cancelled=!0;f.clear();const r=[...w];w.clear();for(const o of r)o("SimClock: disposed while a delay was pending")}}}const Me=ee("sim-clock");function Le(e,t){Me.set(e,t)}function Ie(e,t="world"){const n=new Map,s=[],l=new Map;let d=0;for(const r of F)n.set(r,[]);let f=!1;const w=new Map;for(const r of F)w.set(r,new Set);const g=new Set;function b(r,o,i){const p=l.get(r)??r.name??`anonymous-${++d}`;l.set(r,p),e?.beginSystem(t,o,p);try{r(i)}catch(E){const v=r.name?`"${r.name}"`:"(anonymous)";console.error(`[system-runner] system ${v} in phase "${o}" threw:`,E)}finally{e?.endSystem(t,o,p)}}return{add(r,o,i){const p=n.get(r);if(!p)throw new Error(`Unknown phase: ${r}. Valid phases: ${F.join(", ")}`);p.push(o),l.set(o,i?.name??o.name??`anonymous-${++d}`)},remove(r,o){const i=n.get(r);if(!i)return;const p=i.indexOf(o);p!==-1&&i.splice(p,1),w.get(r)?.delete(o)},register(r){const o=n.get(r.phase);if(!o)throw new Error(`Unknown phase: ${r.phase}. Valid phases: ${F.join(", ")}`);o.push(r.update),l.set(r.update,r.name??r.update.name??`anonymous-${++d}`),s.push(r)},unregister(r){const o=n.get(r.phase);if(o){const p=o.indexOf(r.update);p!==-1&&o.splice(p,1)}w.get(r.phase)?.delete(r.update);const i=s.indexOf(r);i!==-1&&s.splice(i,1),g.delete(r),r.dispose?.()},runInit(){const r=[...s].sort((o,i)=>F.indexOf(o.phase)-F.indexOf(i.phase));for(const o of r)o.init?.()},runDispose(){for(const r of s){const o=n.get(r.phase);if(o){const i=o.indexOf(r.update);i!==-1&&o.splice(i,1)}r.dispose?.()}s.length=0},runPhase(r,o){const i=n.get(r);if(!i)throw new Error(`Unknown phase: ${r}. Valid phases: ${F.join(", ")}`);const p=w.get(r),E=[];for(const v of i)f&&!p.has(v)?E.push(v):b(v,r,o);for(const v of E)b(v,r,o)},run(r){for(const o of F)this.runPhase(o,r)},markEngineBoundary(){for(const r of F){const o=w.get(r);for(const i of n.get(r))o.add(i)}for(const r of s)g.add(r);f=!0},removeAllNonEngine(){if(!f)return;const r=s.filter(i=>g.has(i)),o=s.filter(i=>!g.has(i));s.length=0,s.push(...r);for(const i of o)i.dispose?.();for(const i of F){const p=n.get(i),E=w.get(i),v=p.filter($=>E.has($));p.length=0,p.push(...v)}},count(r){if(r)return n.get(r)?.length??0;let o=0;for(const i of n.values())o+=i.length;return o}}}function _e(e){if(!e)return"<unknown call site — no stack captured>";const t=e.split(`
2
2
  `);return(t[2]??t[1]??t[0]??"<unknown call site>").trim()}function Ge(e=t=>{console.warn(t)}){const t=new Set;let n;function s(){const l=_e(new Error().stack);return t.has(l)||(t.add(l),e(`[determinism] the global Math.random generator was drawn from during a gameplay frame while this project declares determinism.seededRandom — use ctx.random() / ctx.random.stream(name) instead. Call site:
3
3
  ${l}`)),n()}return{enable(){n=Math.random,Math.random=s},disable(){Math.random===s&&n&&(Math.random=n,n=void 0)}}}const te=ee("gameplay-rng-trap");function Ne(e,t){te.set(e,t)}function At(e){return te.get(e)??null}const ze=F.filter(e=>e===I.PRE_RENDER||e===I.RENDER);function U(e){const{id:t,kind:n,pausable:s=!0,adapter:l,mounted:d,scene:f,canvasRoot:w,container:g,physics:b,collisions:r,physics2d:o,camera:i,frame:p,binding:E=null}=e;if(n==="three"&&!f)throw new Error(`RootInstance "${t}" (kind: three): a three world requires a scene — pass \`scene\` in RootInstanceInit.`);if(n==="canvas"&&w==null)throw new Error(`RootInstance "${t}" (kind: canvas): a canvas world requires a native substrate root — pass \`canvasRoot\` in RootInstanceInit.`);if(n==="dom"&&!g)throw new Error(`RootInstance "${t}" (kind: react): a react world requires a container — pass \`container\` in RootInstanceInit.`);let v=!1;const $=d.dispose.bind(d);return d.dispose=()=>{v=!0,$()},{id:t,kind:n,pausable:s,adapter:l,mounted:d,physics:b,collisions:r,physics2d:o,camera:i,frame:p?{runPhase(D,T){v||p.runPhase(D,T)},endFrame(){v||p.endFrame?.()}}:void 0,binding:E,get disposed(){return v},threeScene(){if(n!=="three"||!f)throw new Error(`RootInstance "${t}" (kind: ${n}): threeScene() requested but this world is not a three world`);return f},canvasRoot(){if(n!=="canvas"||w===void 0||w===null)throw new Error(`RootInstance "${t}" (kind: ${n}): canvasRoot() requested but this world is not a canvas world`);return w},reactRoot(){if(n!=="dom"||!g)throw new Error(`RootInstance "${t}" (kind: ${n}): reactRoot() requested but this world is not a react world`);return g}}}function qe(e){const{physics:t,rapierWorld:n}=e;return!t||!n?null:{physics:t,rapierWorld:n}}function je(e,t){const n=[];e.traverse(s=>n.push(s));for(const s of t){const l=qe(s);if(l)for(const d of n){const f=l.physics.get(d);f&&(l.rapierWorld.removeRigidBody(f.body),l.physics.remove(d))}}e.removeFromParent();for(const s of n){const l=s;Oe(s,"__sharedGeometry")||l.geometry?.dispose();const d=l.material;if(Array.isArray(d))for(const f of d)f.dispose();else d?.dispose()}}function He(e){return[]}function Be(e){const t=[],n=De(),s=Ie(n.systemObserver,"game"),l=ye(e.seed??be),d=Ge();let f=!1;const w={setEnabled(a){f=a},get enabled(){return f}};let g=0,b=0,r=0;const o=new Set,i=Ce({dispose:a=>je(a,t.flatMap(He))}),p=Re({getTick:()=>g,getSimT:()=>b,getFixedDt:()=>e.loop.fixedDt,getDefaultRootId:()=>t.length>0?v().id:null,getLoopLiveness:()=>e.loop.liveness});let E=!1;function v(){if(t.length===0)throw new Error("Game.defaultRoot: no roots registered yet");return t.find(a=>a.kind==="three")??t[0]}const $=new Set,A=new Set,D=new Map,T=new Map;function C(){const a={debug:p.adapter},h=new Map([["debug","(game)"]]),k=(y,c,R)=>{for(const u of Object.keys(c)){if(c[u]===void 0)continue;const m=h.get(u);if(m!==void 0){if(a[u]===c[u]||R?.has(u))continue;$.has(u)||($.add(u),console.warn(`[game] systemAdapters: "${u}" is registered by both ${m} and ${y} — the FIRST registration (${m}) wins; the later one is shadowed (game-scoped system adapters).`));continue}a[u]=c[u],h.set(u,y)}};for(const y of t){const c=D.get(y.id);c&&k(`world "${y.id}" (declared systems export)`,c);const R=y.mounted.systems;R&&k(`world "${y.id}"`,R,c?new Set(Object.keys(c)):void 0)}return a}let P=!1;const x=new Set;function _(a,h,k){const y=`${a}:${h}`;if(x.has(y))return;x.add(y);const c=a==="loop"?$e({worldId:h,reason:k}):Pe({worldId:h,reason:k});console.warn(c)}const L=new WeakMap;function z(a){for(const h of t){if(h.disposed||!h.pausable)continue;h.mounted.drivesOwnLoop&&(h.mounted.setPaused?h.mounted.setPaused(a):a&&_("loop",h.id,"self-driven world, adapter declares no setPaused capability"));const k=D.get(h.id)?.audio??h.mounted.systems?.audio;k?a?(L.has(k)||L.set(k,k.isMuted()),k.setMuted(!0)):L.has(k)&&(k.setMuted(L.get(k)),L.delete(k)):a&&!T.get(h.id)?.some(y=>y.slot==="audio")&&_("audio",h.id,"no SystemAdapters.audio on this world")}}function G(a,h){f&&d.enable(),n.beginFrame();const k=h?.skipRenderPhases??!1,y=h?.onlyFrozen??!1,c=t.length;E=!1;for(let u=0;u<c;u++){const m=t[u];if(!m.disposed){if(y){if(P&&m.pausable&&!m.mounted.drivesOwnLoop){E=!0;break}}else if(m.mounted.drivesOwnLoop?!P||!m.pausable||!m.mounted.setPaused:!P||!m.pausable){E=!0;break}}}let R=!1;if(!y)for(let u=0;u<c;u++){const m=t[u];if(!m.disposed&&m.mounted.drivesOwnLoop&&(!P||!m.pausable||!m.mounted.setPaused)){R=!0;break}}if(y){for(const u of F){n.beginPhase(),E&&s.runPhase(u,a);for(let m=0;m<c;m++){const S=t[m];if(!S.disposed&&!S.mounted.drivesOwnLoop&&P&&S.pausable)try{S.frame?.runPhase(u,a)}catch(O){console.error(`[game] world "${S.id}" (kind: ${S.kind}) runPhase("${u}") threw (step()):`,O)}}n.endPhase(u)}for(let u=0;u<c;u++){const m=t[u];if(!m.disposed&&!m.mounted.drivesOwnLoop&&P&&m.pausable)if(R=!0,m.frame)try{m.frame.endFrame?.()}catch(S){console.error(`[game] world "${m.id}" (kind: ${m.kind}) endFrame() threw (step()):`,S)}else try{m.mounted.update?.(a)}catch(S){console.error(`[game] world "${m.id}" (kind: ${m.kind}) update() threw (step()):`,S)}}}else{for(const u of F){if(n.beginPhase(),!(k&&(u===I.PRE_RENDER||u===I.RENDER))){s.runPhase(u,a);for(let S=0;S<c;S++){const O=t[S];if(O.disposed||O.mounted.drivesOwnLoop)continue;const W=P&&O.pausable;if(W&&u!==I.RENDER)continue;const de=W?0:a;try{O.frame?.runPhase(u,de)}catch(ce){console.error(`[game] world "${O.id}" (kind: ${O.kind}) runPhase("${u}") threw:`,ce)}}}n.endPhase(u)}for(let u=0;u<c;u++){const m=t[u];if(!(m.disposed||m.mounted.drivesOwnLoop||P&&m.pausable)){if(R=!0,m.frame)try{m.frame.endFrame?.()}catch(O){console.error(`[game] world "${m.id}" (kind: ${m.kind}) endFrame() threw:`,O)}else if(!(k&&m.mounted.updateCadence==="display"))try{m.mounted.update?.(a)}catch(O){console.error(`[game] world "${m.id}" (kind: ${m.kind}) update() threw:`,O)}}}}R&&(g++,b+=a,i.flush(b)),n.endFrame(),f&&d.disable()}function q(a,h){if(r=a,f&&d.enable(),n.beginFrame(),o.size>0)for(const y of[...o])try{y(a,h)}catch(c){console.error("[game] an onRenderStep callback threw:",c)}const k=t.length;for(const y of ze){n.beginPhase(),s.runPhase(y,h);for(let c=0;c<k;c++){const R=t[c];if(R.disposed||R.mounted.drivesOwnLoop)continue;const u=P&&R.pausable;if(!(u&&y!==I.RENDER))try{R.frame?.runPhase(y,u?0:h)}catch(m){console.error(`[game] world "${R.id}" (kind: ${R.kind}) runPhase("${y}") threw (display frame):`,m)}}n.endPhase(y)}for(let y=0;y<k;y++){const c=t[y];if(c.disposed||c.mounted.drivesOwnLoop||c.frame||c.mounted.updateCadence!=="display")continue;const R=P&&c.pausable;try{c.mounted.update?.(R?0:h)}catch(u){console.error(`[game] world "${c.id}" (kind: ${c.kind}) update() threw (display frame):`,u)}}n.endFrame(),f&&d.disable()}const M={loop:e.loop,assets:e.assets,playtest:e.playtest??null,profiler:n,systems:s,get roots(){return t},world(a){return t.find(h=>h.id===a)??null},get defaultRoot(){return v()},get systemAdapters(){return C()},subscribeSystemAdapters(a){return A.add(a),()=>A.delete(a)},notifySystemAdaptersChanged(){for(const a of A)a()},get declaredSystemAbsences(){return[...T.values()].flat()},installDeclaredSystemAdapters(a,h,k=[]){const y=t.find(u=>u.id===a);if(!y)throw new Error(`installDeclaredSystemAdapters: no mounted root is named "${a}" (mounted: ${t.map(u=>`"${u.id}"`).join(", ")||"none"}).`);if(D.has(a))throw new Error(`installDeclaredSystemAdapters: root "${a}" already installed its declared systems — a declaration is static and installs exactly once per mount.`);const c=y.mounted.systemScope??y.mounted,R=Object.fromEntries(Object.entries(h).map(([u,m])=>[u,m===void 0?void 0:Ae(m,c)]));D.set(a,R),T.set(a,k),M.notifySystemAdaptersChanged()},play:{get paused(){return P},pause(){P||(P=!0,z(!0))},resume(){P&&(P=!1,z(!1))},step(a=1/60){if(P)for(const h of t)h.disposed||!h.pausable||!h.mounted.drivesOwnLoop||h.mounted.setPaused&&(h.mounted.step?h.mounted.step():_("loop",h.id,"self-driven world, adapter declares no step capability"));G(a,{onlyFrozen:!0})}},registerRoot(a){if(t.some(h=>h.id===a.id))throw new Error(`Game.registerRoot: duplicate world id "${a.id}"`);if(t.some(h=>h.mounted===a.mounted))throw new Error(`Game.registerRoot: world "${a.id}" shares its \`mounted\` object with an already-registered world ("${t.find(h=>h.mounted===a.mounted).id}") — the same mount cannot be registered twice.`);t.push(a),M.notifySystemAdaptersChanged(),a.mounted.drivesOwnLoop&&a.kind!=="dom"&&!a.mounted.observe&&console.warn(`[game] world "${a.id}" (kind: ${a.kind}, adapter: "${a.adapter.id}"): no state bridge — this mounted game has no \`observe\` (RootStateObserver); the editor's observations cannot subscribe to its state.`)},runFrame(a,h){G(a,h)},runRenderFrame(a,h){q(a,h)},get renderAlpha(){return r},onRenderStep(a,h){const k=h?.signal;if(k?.aborted)return()=>{};o.add(a);let y=null;const c=()=>{o.delete(a),y?.(),y=null};return k&&(k.addEventListener("abort",c,{once:!0}),y=()=>k.removeEventListener("abort",c)),c},runTicks(a,h){if(!Number.isInteger(a)||a<0)throw new RangeError(`Game.runTicks: n must be a non-negative integer, got ${a}`);if(P)throw new ke("RUN_TICKS_PAUSED","Game.runTicks: refused — Game.play.paused is true; stepping the frozen set is Game.play.step()'s contract, not runTicks'");const k=h?.render??"last",y=e.loop.fixedDt;for(let c=0;c<a;c++){const R=c===a-1;G(y,{skipRenderPhases:k==="all"?!1:k==="none"?!0:!R})}},dispose(){i.dispose(),p.strip()}};return Ee(M,p),p.setRunTicksTarget({runTicks:M.runTicks}),we(M,l),Ne(M,w),Le(M,i),M}function Ue(e){B(e).forEach((n,s)=>{n.canvas.style.pointerEvents=s===0?"auto":"none"})}const X=["pointerdown","pointerup","pointermove","click","wheel"];function Ye(e){const t=e,n=["clientX","clientY","screenX","screenY","offsetX","offsetY","button","buttons","ctrlKey","altKey","shiftKey","metaKey","pointerId","pointerType","pressure","isPrimary","deltaX","deltaY","deltaZ","deltaMode"],s={bubbles:!0,cancelable:!0,composed:!0};for(const l of n)l in t&&(s[l]=t[l]);return s}const ne=new WeakSet;function We(e,t){const n=globalThis,s=t.type==="wheel"?n.WheelEvent:t.type.startsWith("pointer")?n.PointerEvent:n.MouseEvent??n.PointerEvent;if(!(!s||typeof e.dispatchEvent!="function"))try{const l=new s(t.type,Ye(t));ne.add(l),e.dispatchEvent(l)}catch{}}function Ve(e,t){Ue(t);const n=new Map(t.map(d=>[d.id,d])),s=B(t)[0]?.id,l=d=>{if(ne.has(d))return;const f=e.getBoundingClientRect?.()??{left:0,top:0},w=d.clientX??0,g=d.clientY??0,b=w-f.left,r=g-f.top,o=V(t,b,r);if(o&&o!==s){const i=n.get(o);i&&(d.stopPropagation(),We(i.canvas,d))}};for(const d of X)e.addEventListener?.(d,l,!0);return{resolveClaim:(d,f)=>V(t,d,f),dispose(){for(const d of X)e.removeEventListener?.(d,l,!0)}}}function re(e){return new URLSearchParams(e.search).get(ve)==="1"}const Ke=[I.PRE_RENDER,I.RENDER];async function Xe(e){const t=Qe(e);for(const n of Ke){e.systems.runPhase(n,0);for(const s of t)s.frame.runPhase(n,0)}await et()}function Qe(e){const t=[];for(const n of e.roots){if(n.mounted.drivesOwnLoop){Q(n.id,"drives its own loop — renderOnce() cannot frame-gate it");continue}if(!n.frame){Q(n.id,`(kind: ${n.kind}) has no phase hooks — renderOnce() cannot drive it (opaque/foreign mount with no frame-gated entry point)`);continue}t.push({id:n.id,frame:n.frame})}return t}function Q(e,t){console.warn(`[render-control] world "${e}" ${t}.`)}function Ze(e){const t=[];for(const n of e.roots){if(n.mounted.drivesOwnLoop){t.push(`world "${n.id}" drives its own loop — cannot be frame-gated for deterministic capture (the policy is to FAIL LOUDLY, or be excluded only by an explicit declared policy).`);continue}n.frame||t.push(`world "${n.id}" (kind: ${n.kind}) has no phase hooks — an opaque/foreign mount with no frame-gated entry point cannot participate in deterministic capture.`)}return t}function Z(e){let t=0,n=0;const s=[...e.children??[]];for(;s.length>0;){const l=s.pop();t++,l.userData?.entityId!==void 0&&n++,l.children&&s.push(...l.children)}return{nodes:t,entities:n}}function Je(e){const t=[];for(const n of e.roots)n.kind==="three"?t.push({id:n.id,kind:n.kind,...Z(n.threeScene())}):n.kind==="canvas"&&n.mounted.kind==="canvas"&&n.mounted.substrate.name==="pixi"&&t.push({id:n.id,kind:n.kind,...Z(n.canvasRoot())});return t}function J(){return new Promise(e=>{requestAnimationFrame(()=>e())})}async function et(){await J(),await J()}async function N(e){if(!e)return{status:"not-applicable"};try{return await e(),{status:"ready"}}catch(t){return{status:"error",detail:t instanceof Error?t.message:String(t)}}}async function tt(){if(typeof document>"u"||!document.fonts)return{status:"not-applicable"};try{return await document.fonts.ready,{status:"ready"}}catch(e){return{status:"error",detail:e instanceof Error?e.message:String(e)}}}async function nt(e){const[t,n,s,l,d,f]=await Promise.all([N(e.assets),N(e.shaders),tt(),N(e.sequences),N(e.tone),N(e.scene)]);return{assets:t,shaders:n,fonts:s,sequences:l,tone:d,scene:f}}function rt(e){const t=e.location??window.location;if(!re(t))return;const{game:n,clock:s,readiness:l={}}=e,d=e.target??window,f=e.frameAdvancers??[],w=e.simulateFixedDt??1/60,g=e.excludedFromDeterminism??[],b={seek(r){s.seek(r)},seekFrame(r,o){s.seekFrame(r,o)},advanceFrame(r){for(const o of f)o(r)},renderOnce(){return Xe(n)},ready(){return nt(l)},simulateSubsteps(r){for(let o=0;o<r;o++)n.runFrame(w)},excludedFromDeterminism(){return[...g,...Ze(n)]},simulateFixedDt(){return w},perfSample(r){const o=n.profiler,i=o.enabled;o.enabled=!0,o.clear();const p=[];try{for(let E=0;E<r;E++){n.runFrame(w);const v=o.getSnapshot(),$=v.frames.at(-1);p.push({cpuMs:$?.cpuMs??0,phases:Object.fromEntries(($?.phases??[]).map(A=>[A.name,A.ms])),render:{...v.render}})}}finally{o.enabled=i}return{frames:p,worlds:Je(n)}}};return d.__volterRender=b,b}function oe(e,t,n,s){const l=s?.pausable??!0,d=U({id:s?.id??"main",kind:"three",pausable:l,adapter:t,mounted:n,scene:n.scene,binding:Y(e,s?.declaration,{surface:"three",adapter:t},n,l)});return e.registerRoot(d),d}function Y(e,t,n,s,l){return t?ue({...t,adapter:n,mounted:s,pausable:l,debugRegistry:Se(e)}):null}function se(e,t,n,s){const l=s?.id??"main",d=s?.pausable??!0,f=U({id:l,kind:"canvas",pausable:d,adapter:t,mounted:n,canvasRoot:n.substrate.root,binding:Y(e,s?.declaration,{surface:"canvas",adapter:t},n,d)});return e.registerRoot(f),f}function ie(e,t,n,s,l){const d=l?.pausable??!0,f=U({id:l?.id??"main",kind:"dom",pausable:d,adapter:t,mounted:n,container:s,binding:Y(e,l?.declaration,{surface:"dom",adapter:t},n,d)});return e.registerRoot(f),f}async function ot(e){return mt(e)}function st(e){return{domElement:e,render(){},setPixelRatio(){},setClearColor(){},setSize(){},dispose(){},forceContextLoss(){}}}function ae(e,t){try{e.mounted.dispose()}finally{e.renderer?.dispose(),e.renderer?.forceContextLoss();try{(e.element.parentNode??t).removeChild(e.element)}catch{}}}async function it(e,t){const{game:n,canvas:s,w:l,h:d,dpr:f,isBottom:w,headless:g,assets:b,antialias:r}=t,o=g?st(s):me(s,l,d,r===void 0?void 0:{antialias:r},{alpha:!w,preserveDrawingBuffer:!0});o.setSize(l,d,!1),s.style.width="100%",s.style.height="100%",o.setPixelRatio(f),w||o.setClearColor(0,0);const i={three:pe,surface:{canvas:s,width:l,height:d},renderer:o,assets:b,headless:g,game:n},p=await e.adapter.mount(i);return oe(n,e.adapter,p,{id:e.id,pausable:e.pausable,declaration:e.declaration}),{mountedEntry:{id:e.id,kind:"three",element:s,mounted:p,renderer:o},routerEntry:{id:e.id,zOrder:e.zOrder??0,canvas:s,hitTest:e.hitTest}}}async function at(e,t){const{game:n,canvas:s,w:l,h:d,dpr:f,headless:w,isBottom:g}=t,b={canvas:s,width:l,height:d,game:n,headless:w,dpr:f,transparent:!g,preserveDrawingBuffer:!0},r=await e.adapter.mount(b);return se(n,e.adapter,r,{id:e.id,pausable:e.pausable,declaration:e.declaration}),{mountedEntry:{id:e.id,kind:"canvas",element:s,mounted:r,renderer:void 0},routerEntry:{id:e.id,zOrder:e.zOrder??0,canvas:s,hitTest:e.hitTest??(r.hitTest?(o,i)=>r.hitTest(o,i):void 0)}}}async function dt(e,t,n){n.style.pointerEvents="none",n.style.width="100%",n.style.height="100%";const s={container:n,game:t},l=await e.adapter.mount(s);return ie(t,e.adapter,l,n,{id:e.id,pausable:e.pausable,declaration:e.declaration}),{mountedEntry:{id:e.id,kind:"dom",element:n,mounted:l,renderer:void 0}}}function ct(e){return()=>{}}async function lt(e,t,n){const{surfacesById:s,container:l,...d}=n,f=[],w=[];try{for(const g of e){const b=g.id===t;if(g.kind==="dom"){const E=s.get(g.id),{mountedEntry:v}=await dt(g,d.game,E);f.push(v);continue}const r=s.get(g.id),o={...d,canvas:r,isBottom:b};let i,p;g.kind==="three"?{mountedEntry:i,routerEntry:p}=await it(g,o):g.kind==="canvas"?{mountedEntry:i,routerEntry:p}=await at(g,o):le(g,"create-runtime mount loop"),f.push(i),w.push(p)}}catch(g){for(let b=f.length-1;b>=0;b--){const r=f[b];try{ae(r,l)}catch(o){console.error(`createGameRuntime: rolling back root "${r.id}" after a mount failure threw:`,o)}}throw g}return{mountedEntries:f,routerEntries:w}}function ut(e,t,n){const s=n??(typeof window<"u"?window:void 0);if(s!==void 0)return rt({game:e,clock:{seek(){},seekFrame(){}},readiness:{scene(){}},location:t,target:s}),()=>{delete s.__volterRender}}function ft(e,t,n){try{e.dispose()}catch(s){console.error("createGameRuntime: disposing the game after a mount failure threw:",s)}for(const s of t)try{(s.parentNode??n).removeChild(s)}catch{}}async function mt(e){const{container:t,roots:n,width:s,height:l,headless:d=!1,seed:f,playtest:w}=e;if(n.length===0)throw new Error("createGameRuntime: `roots` must contain at least one root.");const g=n,b=Math.max(1,s??t.clientWidth??0),r=Math.max(1,l??t.clientHeight??0),o=d?1:Math.min(typeof window<"u"&&window.devicePixelRatio||1,2);t.style.position||(t.style.position="relative");const i=g.map(c=>({id:c.id,zOrder:c.zOrder??0,hitTest:c.hitTest})),p=B(i),E=p[0]?.id,v=new Map(g.map(c=>[c.id,c.kind])),$=new Map;p.forEach((c,R)=>{const u=v.get(c.id)==="dom",m=document.createElement(u?"div":"canvas");if(m.dataset.volterRootSurface="true",m.dataset.volterRootId=c.id,!u){const S=m;S.width=b,S.height=r}m.style.cssText=`position:absolute;top:0;left:0;width:100%;height:100%;z-index:${R+1};contain:layout paint;`,t.appendChild(m),$.set(c.id,m)});const A=fe(),D=e.renderControl?.location??(typeof window<"u"?window.location:void 0),T=D!==void 0&&re(D);let C=!1;const P=Fe({fixedTimestep:1/60,maxSubSteps:8,externalDrive:T,update:c=>{C&&x.runFrame(c,{skipRenderPhases:!0})},render:(c,R)=>{C&&x.runRenderFrame(c,R)}}),x=Be({loop:P,assets:A,seed:f,playtest:w});let _;try{_=await lt(g,E,{game:x,surfacesById:$,container:t,w:b,h:r,dpr:o,headless:d,assets:A,antialias:e.antialias})}catch(c){throw ft(x,$.values(),t),c}const{mountedEntries:L,routerEntries:z}=_,G=Ve(t,z);C=!0,P.start();const q=ct(),M=T&&D!==void 0?ut(x,D,e.renderControl?.target):void 0;let a;const h=new Promise(c=>{a=c});let k=!1;function y(){if(k)return;k=!0;const c=[],R=(u,m)=>{try{m()}catch(S){c.push({step:u,error:S})}};try{R("loop.stop",()=>P.stop()),R("router.dispose",()=>G.dispose());for(const u of L)R(`root "${u.id}"`,()=>ae(u,t));R("game.dispose",()=>x.dispose()),R("dev globals",()=>q()),R("render harness",()=>M?.())}finally{Promise.allSettled(L.map(u=>u.mounted.disposeComplete??Promise.resolve())).then(()=>a())}if(c.length>0)throw new AggregateError(c.map(u=>u.error),`Game session teardown failed in ${c.length} step(s): ${c.map(u=>u.step).join(", ")}. Every other step still ran.`)}return{stop:y,stopComplete:h,pause(){x.play.pause()},resume(){x.play.resume()},step(){x.play.step()},resize(c,R,u){const m=Math.max(1,c),S=Math.max(1,R);for(const O of L)u!==void 0&&O.renderer?.setPixelRatio(u),O.renderer?.setSize(m,S,!1),O.mounted.resize?.(m,S)},game:x}}const Ot=Object.freeze(Object.defineProperty({__proto__:null,createGameRuntime:ot,registerCanvasRoot:se,registerReactRoot:ie,registerThreeRoot:oe},Symbol.toStringTag,{value:"Module"}));export{Be as a,Fe as b,ot as c,oe as d,Ot as e,At as g,se as r};
@@ -1 +1 @@
1
- import{d$ as f,c6 as d,v as x,c4 as v}from"./index-EO6Vl92s.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 g="x-volter-curve";function p(r,n){return r[n].label??n}function y(r,n,e){const s=r.points;for(let t=0;t<s.length;t++){const o=s[t];for(const c of["x","y"]){const{min:u,max:a}=n[c];(o[c]<u||o[c]>a)&&e.addIssue({code:"custom",path:["points",t,c],message:`${o[c]} is outside this curve's ${p(n,c)} domain [${u}, ${a}] — move the point inside the domain, or widen the axis in the schema (curve({ ${c}: { min, max } })).`})}if(t===0)continue;const i=s[t-1];o.x<=i.x&&e.addIssue({code:"custom",path:["points",t,"x"],message:`${o.x} must be strictly greater than the previous point's x (${i.x}) — curve points run left to right along x, with no duplicate x. Sort the points, or nudge this one.`})}}function K(r){const n=f({x:d().describe(`Position along ${p(r,"x")}.`),y:d().describe(`Value at that position, along ${p(r,"y")}.`)});return f({interpolation:v(["linear","smooth"]).describe('How the value moves between points: "linear" for straight segments, "smooth" for a monotone cubic that never overshoots them.'),points:x(n).min(2,{message:'a curve needs at least two points — add another { "x": …, "y": … } so the value has somewhere to travel between.'}).describe("Keys in increasing x order; the value is clamped outside the first/last x.")}).superRefine((e,s)=>y(e,r,s)).meta({[g]:r})}function M(r){let n=r;for(let e=0;e<5&&n;e++){const t=n.meta?.()?.[g];if(t&&typeof t=="object"&&"x"in t&&"y"in t)return t;n=n.def?.innerType}}function b(r){const n=r.length,e=[];for(let t=0;t<n-1;t++){const o=r[t],i=r[t+1];e.push((i.y-o.y)/(i.x-o.x))}const s=[e[0]];for(let t=1;t<n-1;t++)s.push((e[t-1]+e[t])/2);s.push(e[n-2]);for(let t=0;t<n-1;t++){const o=e[t];if(o===0){s[t]=0,s[t+1]=0;continue}let i=s[t]/o,c=s[t+1]/o;i<0&&(s[t]=0,i=0),c<0&&(s[t+1]=0,c=0);const u=i*i+c*c;if(u>9){const a=3/Math.sqrt(u);s[t]=a*i*o,s[t+1]=a*c*o}}return s}function O(r,n){const e=r.points;if(e.length===0)return 0;const s=e[0],t=e[e.length-1];if(e.length===1||n<=s.x)return s.y;if(n>=t.x)return t.y;let o=0;for(;o<e.length-2&&n>=e[o+1].x;)o++;const i=e[o],c=e[o+1],u=c.x-i.x;if(u<=0)return i.y;const a=(n-i.x)/u;if(r.interpolation==="linear")return i.y+(c.y-i.y)*a;const m=b(e),h=a*a,l=h*a;return(2*l-3*h+1)*i.y+(l-2*h+a)*u*m[o]+(-2*l+3*h)*c.y+(l-h)*u*m[o+1]}export{K as curve,M as curveAxesOf,O as sampleCurve};
1
+ import{d$ as f,c6 as d,v as x,c4 as v}from"./index-BT8W9a7k.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 g="x-volter-curve";function p(r,n){return r[n].label??n}function y(r,n,e){const s=r.points;for(let t=0;t<s.length;t++){const o=s[t];for(const c of["x","y"]){const{min:u,max:a}=n[c];(o[c]<u||o[c]>a)&&e.addIssue({code:"custom",path:["points",t,c],message:`${o[c]} is outside this curve's ${p(n,c)} domain [${u}, ${a}] — move the point inside the domain, or widen the axis in the schema (curve({ ${c}: { min, max } })).`})}if(t===0)continue;const i=s[t-1];o.x<=i.x&&e.addIssue({code:"custom",path:["points",t,"x"],message:`${o.x} must be strictly greater than the previous point's x (${i.x}) — curve points run left to right along x, with no duplicate x. Sort the points, or nudge this one.`})}}function K(r){const n=f({x:d().describe(`Position along ${p(r,"x")}.`),y:d().describe(`Value at that position, along ${p(r,"y")}.`)});return f({interpolation:v(["linear","smooth"]).describe('How the value moves between points: "linear" for straight segments, "smooth" for a monotone cubic that never overshoots them.'),points:x(n).min(2,{message:'a curve needs at least two points — add another { "x": …, "y": … } so the value has somewhere to travel between.'}).describe("Keys in increasing x order; the value is clamped outside the first/last x.")}).superRefine((e,s)=>y(e,r,s)).meta({[g]:r})}function M(r){let n=r;for(let e=0;e<5&&n;e++){const t=n.meta?.()?.[g];if(t&&typeof t=="object"&&"x"in t&&"y"in t)return t;n=n.def?.innerType}}function b(r){const n=r.length,e=[];for(let t=0;t<n-1;t++){const o=r[t],i=r[t+1];e.push((i.y-o.y)/(i.x-o.x))}const s=[e[0]];for(let t=1;t<n-1;t++)s.push((e[t-1]+e[t])/2);s.push(e[n-2]);for(let t=0;t<n-1;t++){const o=e[t];if(o===0){s[t]=0,s[t+1]=0;continue}let i=s[t]/o,c=s[t+1]/o;i<0&&(s[t]=0,i=0),c<0&&(s[t+1]=0,c=0);const u=i*i+c*c;if(u>9){const a=3/Math.sqrt(u);s[t]=a*i*o,s[t+1]=a*c*o}}return s}function O(r,n){const e=r.points;if(e.length===0)return 0;const s=e[0],t=e[e.length-1];if(e.length===1||n<=s.x)return s.y;if(n>=t.x)return t.y;let o=0;for(;o<e.length-2&&n>=e[o+1].x;)o++;const i=e[o],c=e[o+1],u=c.x-i.x;if(u<=0)return i.y;const a=(n-i.x)/u;if(r.interpolation==="linear")return i.y+(c.y-i.y)*a;const m=b(e),h=a*a,l=h*a;return(2*l-3*h+1)*i.y+(l-2*h+a)*u*m[o]+(-2*l+3*h)*c.y+(l-h)*u*m[o+1]}export{K as curve,M as curveAxesOf,O as sampleCurve};
@@ -1,4 +1,4 @@
1
- import{e0 as p}from"./index-EO6Vl92s.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function y(o,e,t){let i=c(o,e,t);const s=new Set;return{get:()=>i,sourcePath:t,subscribe(r){return s.add(r),()=>s.delete(r)},hotSwap(r){let n;try{n=c(o,r,t)}catch(a){console.error(`[data] hot edit rejected, keeping previous values.
1
+ import{e0 as p}from"./index-BT8W9a7k.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function y(o,e,t){let i=c(o,e,t);const s=new Set;return{get:()=>i,sourcePath:t,subscribe(r){return s.add(r),()=>s.delete(r)},hotSwap(r){let n;try{n=c(o,r,t)}catch(a){console.error(`[data] hot edit rejected, keeping previous values.
2
2
  ${String(a)}`);return}i=n;for(const a of s)a(i)}}}function S(o){const e=p(o,{io:"input"});if(e.type==="object"){const t=e.properties??{};t.$schema??={type:"string"},e.properties=t}return e}function c(o,e,t){const i=e!==null&&typeof e=="object"&&!Array.isArray(e)&&"$schema"in e?Object.fromEntries(Object.entries(e).filter(([r])=>r!=="$schema")):e,s=o.safeParse(i);if(!s.success){const r=s.error.issues.map(n=>` - ${n.path.join(".")||"(root)"}: ${n.message}`).join(`
3
3
  `);throw new Error(`Data asset "${t}" failed its schema:
4
4
  ${r}
@@ -1 +1 @@
1
- import{DATA_REF_PATTERN as p}from"./data-check-core-CHqar_E8.js";import{w as l}from"./index-EO6Vl92s.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function g(e){return new RegExp(`^${e}#[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)*$`)}function E(e){return l().regex(g(e),{message:`must be a "${e}#<key>" reference — expected the target asset stem "${e}", e.g. "${e}#some-key".`}).meta({"x-volter-ref":e})}function u(e,o){let t=e;for(const r of o){if(t===null||typeof t!="object"||Array.isArray(t)||!(r in t))return r;t=t[r]}return null}function j(e,o){const t=p.exec(o);if(!t)throw new Error(`getRef: "${o}" is not a "file#key" reference — expected a string shaped like "some-file#some-key".`);const r=t[1],m=t[2],n=e.sourcePath?.split("\\").join("/").split("/").pop()?.replace(/\.data\.json$/,"");if(n!==void 0&&n!==r)throw new Error(`getRef: ref "${o}" names target asset "${r}", but the handle passed in is "${n}" (${e.sourcePath}). Pass the handle "${r}#..." actually names — getRef(${r}, ...), not getRef(${n}, ...).`);const i=m.split("."),a=e.get(),f=u(a,i);if(f!==null)throw new Error(`getRef: dangling ref "${o}" — "${f}" does not exist`+(n?` in ${n}.data.json`:"")+'. Fix the key or remove the ref (refs are "file#key" strings).');let s=a;for(const c of i)s=s[c];return s}export{E as dataRef,j as getRef};
1
+ import{DATA_REF_PATTERN as p}from"./data-check-core-CHqar_E8.js";import{w as l}from"./index-BT8W9a7k.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function g(e){return new RegExp(`^${e}#[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)*$`)}function E(e){return l().regex(g(e),{message:`must be a "${e}#<key>" reference — expected the target asset stem "${e}", e.g. "${e}#some-key".`}).meta({"x-volter-ref":e})}function u(e,o){let t=e;for(const r of o){if(t===null||typeof t!="object"||Array.isArray(t)||!(r in t))return r;t=t[r]}return null}function j(e,o){const t=p.exec(o);if(!t)throw new Error(`getRef: "${o}" is not a "file#key" reference — expected a string shaped like "some-file#some-key".`);const r=t[1],m=t[2],n=e.sourcePath?.split("\\").join("/").split("/").pop()?.replace(/\.data\.json$/,"");if(n!==void 0&&n!==r)throw new Error(`getRef: ref "${o}" names target asset "${r}", but the handle passed in is "${n}" (${e.sourcePath}). Pass the handle "${r}#..." actually names — getRef(${r}, ...), not getRef(${n}, ...).`);const i=m.split("."),a=e.get(),f=u(a,i);if(f!==null)throw new Error(`getRef: dangling ref "${o}" — "${f}" does not exist`+(n?` in ${n}.data.json`:"")+'. Fix the key or remove the ref (refs are "file#key" strings).');let s=a;for(const c of i)s=s[c];return s}export{E as dataRef,j as getRef};